diff --git a/packages/cspell-gitignore/package.json b/packages/cspell-gitignore/package.json index 899f4f44d76..393194d618e 100644 --- a/packages/cspell-gitignore/package.json +++ b/packages/cspell-gitignore/package.json @@ -52,6 +52,6 @@ }, "dependencies": { "cspell-glob": "workspace:*", - "find-up": "^6.3.0" + "find-up-simple": "^1.0.0" } } diff --git a/packages/cspell-gitignore/src/helpers.ts b/packages/cspell-gitignore/src/helpers.ts index 595efb17d21..d21e177f2d3 100644 --- a/packages/cspell-gitignore/src/helpers.ts +++ b/packages/cspell-gitignore/src/helpers.ts @@ -1,4 +1,4 @@ -import { findUp } from 'find-up'; +import { findUp } from 'find-up-simple'; import * as path from 'path'; interface ParsedPath { diff --git a/packages/cspell-lib/api/api.d.ts b/packages/cspell-lib/api/api.d.ts index cb9e9c9bdaf..59f3bb704ba 100644 --- a/packages/cspell-lib/api/api.d.ts +++ b/packages/cspell-lib/api/api.d.ts @@ -413,7 +413,6 @@ type CSpellSettingsI = CSpellSettingsInternal; declare const sectionCSpell = "cSpell"; declare const defaultFileName = "cspell.json"; declare function loadPnP(pnpSettings: PnPSettingsOptional, searchFrom: URL): Promise; -declare function loadPnPSync(pnpSettings: PnPSettingsOptional, searchFrom: URL): LoaderResult; declare const defaultConfigFilenames: readonly string[]; @@ -958,4 +957,4 @@ interface PerfTimer { type TimeNowFn = () => number; declare function createPerfTimer(name: string, onEnd?: (elapsed: number, name: string) => void, timeNowFn?: TimeNowFn): PerfTimer; -export { type CheckTextInfo, type ConfigurationDependencies, type CreateTextDocumentParams, type DetermineFinalDocumentSettingsResult, type Document, DocumentValidator, type DocumentValidatorOptions, ENV_CSPELL_GLOB_ROOT, type ExcludeFilesGlobMap, type ExclusionFunction, exclusionHelper_d as ExclusionHelper, type FeatureFlag, FeatureFlags, ImportError, type ImportFileRefWithError$1 as ImportFileRefWithError, IncludeExcludeFlag, type IncludeExcludeOptions, index_link_d as Link, type Logger, type PerfTimer, type SpellCheckFileOptions, type SpellCheckFileResult, SpellingDictionaryLoadError, type SuggestedWord, SuggestionError, type SuggestionOptions, type SuggestionsForWordResult, text_d as Text, type TextDocument, type TextDocumentLine, type TextDocumentRef, type TextInfoItem, type TraceOptions, type TraceResult, UnknownFeatureFlagError, type ValidationIssue, calcOverrideSettings, checkFilenameMatchesGlob, checkText, checkTextDocument, clearCachedFiles, clearCaches, combineTextAndLanguageSettings, combineTextAndLanguageSettings as constructSettingsForText, createPerfTimer, createTextDocument, currentSettingsFileVersion, defaultConfigFilenames, defaultFileName, defaultFileName as defaultSettingsFilename, determineFinalDocumentSettings, extractDependencies, extractImportErrors, fileToDocument, fileToTextDocument, finalizeSettings, getCachedFileSize, getDefaultBundledSettingsAsync, getDefaultSettings, getDictionary, getGlobalSettings, getGlobalSettingsAsync, getLanguagesForBasename as getLanguageIdsForBaseFilename, getLanguagesForExt, getLogger, getSources, getSystemFeatureFlags, isBinaryFile, isSpellingDictionaryLoadError, loadConfig, loadPnP, loadPnPSync, mergeInDocSettings, mergeSettings, readRawSettings, readSettings, readSettingsFiles, refreshDictionaryCache, resolveFile, searchForConfig, sectionCSpell, setLogger, shouldCheckDocument, spellCheckDocument, spellCheckFile, suggestionsForWord, suggestionsForWords, traceWords, traceWordsAsync, updateTextDocument, validateText }; +export { type CheckTextInfo, type ConfigurationDependencies, type CreateTextDocumentParams, type DetermineFinalDocumentSettingsResult, type Document, DocumentValidator, type DocumentValidatorOptions, ENV_CSPELL_GLOB_ROOT, type ExcludeFilesGlobMap, type ExclusionFunction, exclusionHelper_d as ExclusionHelper, type FeatureFlag, FeatureFlags, ImportError, type ImportFileRefWithError$1 as ImportFileRefWithError, IncludeExcludeFlag, type IncludeExcludeOptions, index_link_d as Link, type Logger, type PerfTimer, type SpellCheckFileOptions, type SpellCheckFileResult, SpellingDictionaryLoadError, type SuggestedWord, SuggestionError, type SuggestionOptions, type SuggestionsForWordResult, text_d as Text, type TextDocument, type TextDocumentLine, type TextDocumentRef, type TextInfoItem, type TraceOptions, type TraceResult, UnknownFeatureFlagError, type ValidationIssue, calcOverrideSettings, checkFilenameMatchesGlob, checkText, checkTextDocument, clearCachedFiles, clearCaches, combineTextAndLanguageSettings, combineTextAndLanguageSettings as constructSettingsForText, createPerfTimer, createTextDocument, currentSettingsFileVersion, defaultConfigFilenames, defaultFileName, defaultFileName as defaultSettingsFilename, determineFinalDocumentSettings, extractDependencies, extractImportErrors, fileToDocument, fileToTextDocument, finalizeSettings, getCachedFileSize, getDefaultBundledSettingsAsync, getDefaultSettings, getDictionary, getGlobalSettings, getGlobalSettingsAsync, getLanguagesForBasename as getLanguageIdsForBaseFilename, getLanguagesForExt, getLogger, getSources, getSystemFeatureFlags, isBinaryFile, isSpellingDictionaryLoadError, loadConfig, loadPnP, mergeInDocSettings, mergeSettings, readRawSettings, readSettings, readSettingsFiles, refreshDictionaryCache, resolveFile, searchForConfig, sectionCSpell, setLogger, shouldCheckDocument, spellCheckDocument, spellCheckFile, suggestionsForWord, suggestionsForWords, traceWords, traceWordsAsync, updateTextDocument, validateText }; diff --git a/packages/cspell-lib/package.json b/packages/cspell-lib/package.json index 247d2219cbd..085f3637508 100644 --- a/packages/cspell-lib/package.json +++ b/packages/cspell-lib/package.json @@ -72,7 +72,6 @@ "cspell-io": "workspace:*", "cspell-trie-lib": "workspace:*", "fast-equals": "^5.0.1", - "find-up": "^6.3.0", "gensequence": "^6.0.0", "import-fresh": "^3.3.0", "resolve-from": "^5.0.0", diff --git a/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configLoader.test.ts b/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configLoader.test.ts index b5bfc6473a7..63503de31ab 100644 --- a/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configLoader.test.ts +++ b/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configLoader.test.ts @@ -17,7 +17,7 @@ import { currentSettingsFileVersion, ENV_CSPELL_GLOB_ROOT } from '../../constant import type { ImportFileRefWithError } from '../../CSpellSettingsServer.js'; import { extractDependencies, getSources, mergeSettings } from '../../CSpellSettingsServer.js'; import { _defaultSettings, getDefaultBundledSettingsAsync } from '../../DefaultSettings.js'; -import { __testing__ as __configLoader_testing__, loadPnP, loadPnPSync } from './configLoader.js'; +import { __testing__ as __configLoader_testing__, loadPnP } from './configLoader.js'; import { clearCachedSettingsFiles, getCachedFileSize, @@ -577,12 +577,6 @@ describe('Validate search/load config files', () => { await expect(loadPnP({ usePnP: true }, urlSrcDir)).resolves.toBeUndefined(); }); - test('loadPnPSync', () => { - expect(loadPnPSync({}, urlSrcDir)).toBeUndefined(); - // Look for a pnp file from the current location, but it won't be found. - expect(loadPnPSync({ usePnP: true }, urlSrcDir)).toBeUndefined(); - }); - test('config needing PnP', async () => { const uriTestPackages = path.join(root, 'test-packages/yarn'); const uriYarn2TestMedCspell = path.join(uriTestPackages, 'yarn2/test-yarn3-med/cspell.json'); diff --git a/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configLoader.ts b/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configLoader.ts index f4c5619e43c..b16f2844929 100644 --- a/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configLoader.ts +++ b/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configLoader.ts @@ -289,7 +289,7 @@ export class ConfigLoader { const { usePnP = pnpSettings.usePnP, pnpFiles = pnpSettings.pnpFiles } = cfgFile.settings; const pnpSettingsToUse: PnPSettingsOptional = normalizePnPSettings({ usePnP, pnpFiles }); const pathToSettingsDir = new URL('.', cfgFile.url); - loadPnPSync(pnpSettingsToUse, pathToSettingsDir); + await loadPnP(pnpSettingsToUse, pathToSettingsDir); } public mergeConfigFileWithImports( @@ -426,14 +426,6 @@ export function loadPnP(pnpSettings: PnPSettingsOptional, searchFrom: URL): Prom return loader.load(searchFrom); } -export function loadPnPSync(pnpSettings: PnPSettingsOptional, searchFrom: URL): LoaderResult { - if (!pnpSettings.usePnP) { - return undefined; - } - const loader = pnpLoader(pnpSettings.pnpFiles); - return loader.loadSync(searchFrom); -} - function resolveFilename(filename: string | URL, relativeTo: string | URL): ImportFileRef { if (filename instanceof URL) return { filename: toFilePathOrHref(filename) }; const r = resolveFile(filename, relativeTo); diff --git a/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configSearch.ts b/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configSearch.ts index 26bb2a3bf3e..301d74ce048 100644 --- a/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configSearch.ts +++ b/packages/cspell-lib/src/lib/Settings/Controller/configLoader/configSearch.ts @@ -2,11 +2,11 @@ import type { Dirent } from 'node:fs'; import { readdir, readFile, stat } from 'node:fs/promises'; import path from 'node:path'; -import { findUp } from 'find-up'; import { pathToFileURL } from 'url'; import { createAutoResolveCache } from '../../../util/AutoResolve.js'; import { addTrailingSlash, fileURLOrPathToPath, toFileDirUrl, toURL } from '../../../util/url.js'; +import { findUp } from '../../../util/findUp.js'; export class ConfigSearch { private searchCache = new Map>(); diff --git a/packages/cspell-lib/src/lib/Settings/Controller/configLoader/index.ts b/packages/cspell-lib/src/lib/Settings/Controller/configLoader/index.ts index 4de9ec303eb..1625c14b78d 100644 --- a/packages/cspell-lib/src/lib/Settings/Controller/configLoader/index.ts +++ b/packages/cspell-lib/src/lib/Settings/Controller/configLoader/index.ts @@ -4,7 +4,6 @@ export { createConfigLoader, defaultFileName, loadPnP, - loadPnPSync, sectionCSpell, } from './configLoader.js'; export { defaultConfigFilenames } from './configLocations.js'; diff --git a/packages/cspell-lib/src/lib/Settings/Controller/pnpLoader.test.ts b/packages/cspell-lib/src/lib/Settings/Controller/pnpLoader.test.ts index 00a5d32efee..0eaefd2dda2 100644 --- a/packages/cspell-lib/src/lib/Settings/Controller/pnpLoader.test.ts +++ b/packages/cspell-lib/src/lib/Settings/Controller/pnpLoader.test.ts @@ -38,21 +38,6 @@ describe('Validate PnPLoader', () => { expect(yarnPnp?.toString().toLocaleLowerCase()).toBe(uriYarn2TestMedPnp.toString().toLowerCase()); }); - test('pnpLoader sync and async', async () => { - const loader = pnpLoader(); - const yarnPnp = await loader.load(uriYarn2TestMed); - expect(yarnPnp?.toString().toLocaleLowerCase()).toBe(uriYarn2TestMedPnp.toString().toLowerCase()); - expect(loader.peekSync(uriYarn2TestMed)?.toString().toLocaleLowerCase()).toBe( - yarnPnp?.toString().toLocaleLowerCase(), - ); - expect(loader.loadSync(uriYarn2TestMed)?.toString().toLocaleLowerCase()).toBe( - yarnPnp?.toString().toLocaleLowerCase(), - ); - - const sciPnp = loader.loadSync(uriYarn2TestSci); - await expect(loader.peek(uriYarn2TestSci)).resolves.toBe(sciPnp); - }); - test('pnpLoader shared cache', async () => { const loader = pnpLoader(); const yarnPnp = await loader.load(uriYarn2TestMed); diff --git a/packages/cspell-lib/src/lib/Settings/Controller/pnpLoader.ts b/packages/cspell-lib/src/lib/Settings/Controller/pnpLoader.ts index 52d799def53..de298ce0a09 100644 --- a/packages/cspell-lib/src/lib/Settings/Controller/pnpLoader.ts +++ b/packages/cspell-lib/src/lib/Settings/Controller/pnpLoader.ts @@ -2,12 +2,12 @@ * Handles loading of `.pnp.js` and `.pnp.js` files. */ import clearModule from 'clear-module'; -import { findUp, findUpSync } from 'find-up'; import importFresh from 'import-fresh'; import { fileURLToPath } from 'url'; import { toFileUrl } from '../../util/url.js'; import { UnsupportedPnpFile } from './ImportError.js'; +import { findUp } from '../../util/findUp.js'; const defaultPnpFiles = ['.pnp.cjs', '.pnp.js']; @@ -52,29 +52,6 @@ export class PnpLoader { return cachedRequests.get(cacheKey) ?? Promise.resolve(undefined); } - /** - * Request that the nearest .pnp file gets loaded - * @param urlDirectory starting directory - * @returns promise - rejects on error - success if loaded or not found. - */ - public loadSync(urlDirectory: URL): LoaderResult { - if (!isSupported(urlDirectory)) return undefined; - const cacheKey = this.calcKey(urlDirectory); - const cached = cachedRequestsSync.get(cacheKey); - if (cached) return cached; - - const r = findPnpAndLoadSync(urlDirectory, this.pnpFiles); - cachedRequestsSync.set(cacheKey, r); - cachedRequests.set(cacheKey, Promise.resolve(r)); - return r; - } - - public peekSync(urlDirectory: URL): LoaderResult { - if (!isSupported(urlDirectory)) return undefined; - const cacheKey = this.calcKey(urlDirectory); - return cachedRequestsSync.get(cacheKey); - } - /** * Clears the cached so .pnp files will get reloaded on request. */ @@ -99,14 +76,6 @@ async function findPnpAndLoad(urlDirectory: URL, pnpFiles: string[]): Promise Verify API exports 1`] = ` "isSpellingDictionaryLoadError": [Function], "loadConfig": [Function], "loadPnP": [Function], - "loadPnPSync": [Function], "mergeInDocSettings": [Function], "mergeSettings": [Function], "readFile": [Function], diff --git a/packages/cspell-lib/src/lib/index.ts b/packages/cspell-lib/src/lib/index.ts index 1d6ae872d73..74d099e4c70 100644 --- a/packages/cspell-lib/src/lib/index.ts +++ b/packages/cspell-lib/src/lib/index.ts @@ -35,7 +35,6 @@ export { type ImportFileRefWithError, loadConfig, loadPnP, - loadPnPSync, mergeInDocSettings, mergeSettings, readRawSettings, diff --git a/packages/cspell-lib/src/lib/util/findUp.test.ts b/packages/cspell-lib/src/lib/util/findUp.test.ts new file mode 100644 index 00000000000..15fef5f16d3 --- /dev/null +++ b/packages/cspell-lib/src/lib/util/findUp.test.ts @@ -0,0 +1,56 @@ +import { describe, expect, test, vi } from 'vitest'; +import path from 'node:path'; +import { findUp } from './findUp.js'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const packageRoot = path.resolve(__dirname, '../../..'); +const reposRoot = path.resolve(packageRoot, '../..'); +const relPackage = path.relative(packageRoot, __dirname); + +const cwd = process.cwd(); + +describe('findUp', () => { + test('should find the file in the current directory', async () => { + const result = await findUp('README.md'); + expect(result).toBe(path.resolve(packageRoot, 'README.md')); + }); + + test('should find the `fixtures` in the current directory', async () => { + const result = await findUp('fixtures', { type: 'directory' }); + expect(result).toBe(path.resolve(packageRoot, './fixtures')); + }); + + test('should find the directory in the current directory', async () => { + const result = await findUp('fixtures', { type: 'directory' }); + expect(result).toBe(path.resolve(packageRoot, './fixtures')); + }); + + test('should stop searching at the specified directory', async () => { + const result = await findUp('missing.txt', { stopAt: reposRoot }); + expect(result).toBeUndefined(); + }); + + test('should return undefined if the file or directory is not found', async () => { + const result = await findUp('nonexistent.txt'); + expect(result).toBeUndefined(); + }); + + test('using a predicate', async () => { + const predicate = vi.fn((dir: string) => (dir === cwd ? dir : 'found')); + const result = await findUp(predicate, { cwd: __dirname }); + expect(result).toBe('found'); + }); + + test.each` + name | cwd | expected + ${'README.md'} | ${undefined} | ${path.resolve(packageRoot, 'README.md')} + ${'README.md'} | ${'..'} | ${path.resolve(reposRoot, 'README.md')} + ${path.basename(__filename)} | ${path.join(relPackage, 'deeper/and/deeper')} | ${__filename} + ${['fixtures', 'package.json']} | ${__dirname} | ${path.resolve(packageRoot, 'package.json')} + `('findUp $name $cwd', async ({ name, cwd, expected }) => { + const result = await findUp(name, { cwd }); + expect(result).toBe(expected); + }); +}); diff --git a/packages/cspell-lib/src/lib/util/findUp.ts b/packages/cspell-lib/src/lib/util/findUp.ts new file mode 100644 index 00000000000..ec1a5e4ec99 --- /dev/null +++ b/packages/cspell-lib/src/lib/util/findUp.ts @@ -0,0 +1,57 @@ +import path from 'path'; +import { stat } from 'node:fs/promises'; +import { fileURLToPath } from 'url'; + +interface FindUpOptions { + cwd?: string; + type?: 'file' | 'directory'; + stopAt?: string; +} + +type FindUpPredicate = (dir: string) => string | undefined | Promise; + +export async function findUp( + name: string | string[] | FindUpPredicate, + options: FindUpOptions = {}, +): Promise { + const { cwd = process.cwd(), type: entryType = 'file', stopAt } = options; + let dir = path.resolve(toDirPath(cwd)); + const root = path.parse(dir).root; + const predicate = makePredicate(name, entryType); + const stopAtDir = path.resolve(toDirPath(stopAt || root)); + + while (dir !== root && dir !== stopAtDir) { + const found = await predicate(dir); + if (found !== undefined) return found; + dir = path.dirname(dir); + } + return undefined; +} + +function makePredicate(name: string | string[] | FindUpPredicate, entryType: 'file' | 'directory'): FindUpPredicate { + if (typeof name === 'function') return name; + + const checkStat = entryType === 'file' ? 'isFile' : 'isDirectory'; + + function checkName(dir: string, name: string) { + const f = path.join(dir, name); + return stat(f) + .then((stats) => (stats[checkStat]() && f) || undefined) + .catch(() => undefined); + } + + if (!Array.isArray(name)) return (dir) => checkName(dir, name); + + return async (dir) => { + const pending = name.map((n) => checkName(dir, n)); + for (const p of pending) { + const found = await p; + if (found) return found; + } + return undefined; + }; +} + +function toDirPath(urlOrPath: string | URL) { + return urlOrPath instanceof URL ? fileURLToPath(new URL('.', urlOrPath)) : urlOrPath; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 84e53ead6e6..c7c7dc6a3f1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -519,9 +519,9 @@ importers: cspell-glob: specifier: workspace:* version: link:../cspell-glob - find-up: - specifier: ^6.3.0 - version: 6.3.0 + find-up-simple: + specifier: ^1.0.0 + version: 1.0.0 packages/cspell-glob: dependencies: @@ -615,9 +615,6 @@ importers: fast-equals: specifier: ^5.0.1 version: 5.0.1 - find-up: - specifier: ^6.3.0 - version: 6.3.0 gensequence: specifier: ^6.0.0 version: 6.0.0 @@ -1523,7 +1520,6 @@ packages: /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} - requiresBuild: true dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 @@ -4560,8 +4556,8 @@ packages: resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==} dev: false - /@octokit/openapi-types@19.1.0: - resolution: {integrity: sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==} + /@octokit/openapi-types@19.0.2: + resolution: {integrity: sha512-8li32fUDUeml/ACRp/njCWTsk5t17cfTM1jp9n08pBrqs5cDFJubtjsSnuz56r5Tad6jdEPJld7LxNp9dNcyjQ==} dev: true /@octokit/plugin-enterprise-rest@6.0.1: @@ -4606,8 +4602,8 @@ packages: '@octokit/core': 5.0.2 dev: true - /@octokit/plugin-rest-endpoint-methods@10.2.0(@octokit/core@5.0.2): - resolution: {integrity: sha512-ePbgBMYtGoRNXDyKGvr9cyHjQ163PbwD0y1MkDJCpkO2YH4OeXX40c4wYHKikHGZcpGPbcRLuy0unPUuafco8Q==} + /@octokit/plugin-rest-endpoint-methods@10.1.5(@octokit/core@5.0.2): + resolution: {integrity: sha512-LMEdsMV8TTMjMTqVoqMzV95XTbv0ZsWxCxQtjAunQOCdwoDH4BVF/Ke5JMSZEVCWGI2kzxnUNbFnK/MxwV7NjA==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=5' @@ -4687,7 +4683,7 @@ packages: '@octokit/core': 5.0.2 '@octokit/plugin-paginate-rest': 9.1.4(@octokit/core@5.0.2) '@octokit/plugin-request-log': 4.0.0(@octokit/core@5.0.2) - '@octokit/plugin-rest-endpoint-methods': 10.2.0(@octokit/core@5.0.2) + '@octokit/plugin-rest-endpoint-methods': 10.1.5(@octokit/core@5.0.2) dev: true /@octokit/tsconfig@1.0.2: @@ -4703,7 +4699,7 @@ packages: /@octokit/types@12.3.0: resolution: {integrity: sha512-nJ8X2HRr234q3w/FcovDlA+ttUU4m1eJAourvfUUtwAWeqL8AsyRqfnLvVnYn3NFbUnsmzQCzLNdFerPwdmcDQ==} dependencies: - '@octokit/openapi-types': 19.1.0 + '@octokit/openapi-types': 19.0.2 dev: true /@octokit/types@9.3.2: @@ -4772,7 +4768,7 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.6.0) + '@rollup/pluginutils': 5.0.5(rollup@4.6.0) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 @@ -4790,7 +4786,7 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.6.0) + '@rollup/pluginutils': 5.0.5(rollup@4.6.0) rollup: 4.6.0 dev: true @@ -4817,7 +4813,7 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.6.0) + '@rollup/pluginutils': 5.0.5(rollup@4.6.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 @@ -4854,7 +4850,7 @@ packages: tslib: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.6.0) + '@rollup/pluginutils': 5.0.5(rollup@4.6.0) resolve: 1.22.8 rollup: 4.6.0 tslib: 2.6.2 @@ -4873,8 +4869,8 @@ packages: rollup: 4.6.0 dev: true - /@rollup/pluginutils@5.1.0(rollup@4.6.0): - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + /@rollup/pluginutils@5.0.5(rollup@4.6.0): + resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -6651,7 +6647,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001565 - electron-to-chromium: 1.4.596 + electron-to-chromium: 1.4.595 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) @@ -6840,7 +6836,6 @@ packages: /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} - requiresBuild: true dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 @@ -8044,8 +8039,8 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /electron-to-chromium@1.4.596: - resolution: {integrity: sha512-zW3zbZ40Icb2BCWjm47nxwcFGYlIgdXkAx85XDO7cyky9J4QQfq8t0W19/TLZqq3JPQXtlv8BPIGmfa9Jb4scg==} + /electron-to-chromium@1.4.595: + resolution: {integrity: sha512-+ozvXuamBhDOKvMNUQvecxfbyICmIAwS4GpLmR0bsiSBlGnLaOcs2Cj7J8XSbW+YEaN3Xl3ffgpm+srTUWFwFQ==} /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -8999,6 +8994,11 @@ packages: common-path-prefix: 3.0.0 pkg-dir: 7.0.0 + /find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + dev: false + /find-up@2.1.0: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'}