@w5s/dev 3.4.9 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/ESLintConfig.ts +1 -2
- package/src/Project.ts +7 -7
package/dist/index.cjs
CHANGED
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../src/ESLintConfig.ts","../src/interopDefault.ts","../src/meta.ts","../src/Project.ts","../src/ProjectScript.ts"],"sourcesContent":["import type { Linter } from 'eslint';\n\n/**\n * Concat multiple flat configs into a single flat config array.\n *\n * It also resolves promises and flattens the result.\n *\n * @example\n *\n * ```ts\n * import eslint from '@eslint/js'\n *\n * export default ESLintConfig.concat(\n * {\n * plugins: {},\n * rules: {},\n * },\n * // It can also takes a array of configs:\n * [\n * {\n * plugins: {},\n * rules: {},\n * }\n * // ...\n * ],\n * // Or promises:\n * Promise.resolve({\n * files: ['*.ts'],\n * rules: {},\n * })\n * );\n * ```\n * @param configs\n */\nasync function concat<T extends Linter.Config = Linter.Config>(\n ...configs: Array<Promise<ReadonlyArray<T>> | Promise<T> | ReadonlyArray<T> | T>\n): Promise<Array<T>> {\n const resolved = await Promise.all(configs);\n return resolved.flat() as Array<T>;\n}\n\n/**\n * Always return 'off'. `_status` is the previous rule value.\n *\n * @param _status\n */\nfunction fixme(_status: [number | string, ...any[]] | number | string | undefined) {\n return 'off' as const;\n}\n\n/**\n * Return a new merged flat configuration\n *\n * @param configs\n */\nfunction merge<T extends Linter.Config = Linter.Config>(...configs: Array<T>): T {\n const keys = new Set(configs.flatMap((i) => Object.keys(i)));\n const merged = configs.reduce((acc, cur) => {\n return {\n ...acc,\n ...cur,\n files: [\n ...(acc.files ?? []),\n ...(cur.files ?? []),\n ],\n ignores: [\n ...(acc.ignores ?? []),\n ...(cur.ignores ?? []),\n ],\n languageOptions: {\n ...acc.languageOptions,\n ...cur.languageOptions,\n },\n linterOptions: {\n ...acc.linterOptions,\n ...cur.linterOptions,\n },\n plugins: {\n ...acc.plugins,\n ...cur.plugins,\n },\n rules: {\n ...acc.rules,\n ...cur.rules,\n },\n };\n // eslint-disable-next-line ts/consistent-type-assertions\n }, {} as T);\n\n // Remove unused keys\n for (const key of Object.keys(merged)) {\n if (!keys.has(key))\n // eslint-disable-next-line ts/no-dynamic-delete\n delete (merged as any)[key];\n }\n\n return merged as T;\n}\n\n/**\n * Renames rules in the given object according to the given map.\n *\n * Given a map `{ 'old-prefix': 'new-prefix' }`, and a rule object\n * `{ 'old-prefix/rule-name': 'error' }`, this function will return\n * `{ 'new-prefix/rule-name': 'error' }`.\n *\n * @param rules The object containing the rules to rename.\n * @param map The object containing the rename map.\n */\nfunction renameRules(rules: Record<string, any>, map: Record<string, string>): Record<string, any> {\n return Object.fromEntries(\n Object.entries(rules).map(([key, value]) => {\n for (const [from, to] of Object.entries(map)) {\n if (key.startsWith(`${from}/`)) return [to + key.slice(from.length), value];\n else if (from === '' && !key.includes('/') && to !== '') return [to + key, value];\n }\n return [key, value];\n }),\n );\n}\n\n/**\n * @namespace\n */\nexport const ESLintConfig = Object.freeze({\n concat,\n fixme,\n merge,\n renameRules,\n});\n","const getDefaultOrElse = (_: any) => _?.default ?? _;\n\n/**\n * Resolves a module or promise-like object, returning the default export if available.\n *\n * @example\n * ```ts\n * // modules.ts\n * export default {\n * foo: true\n * };\n * // Async API\n * const modPromise = import('./module');\n * interopDefault(modPromise); // == Promise.resolve({ foo: true })\n * // Sync API\n * const mod = await import('./module');\n * interopDefault(mod); // == { foo: true }\n * ```\n *\n * @template T - The type of the module or promise-like object.\n * @param m The module or promise-like object to resolve.\n */\nexport function interopDefault<T>(m: PromiseLike<T>): Promise<T extends { default: infer U } ? U : T>;\nexport function interopDefault<T>(m: T): T extends { default: infer U } ? U : T;\nexport function interopDefault<T>(m: PromiseLike<T> | T): Promise<T extends { default: infer U } ? U : T> {\n // @ts-ignore We know what we are doing\n // eslint-disable-next-line unicorn/prefer-await\n return m != null && typeof m.then === 'function' ? Promise.resolve(m).then(getDefaultOrElse) : getDefaultOrElse(m);\n}\n","export const meta = Object.freeze({\n // @ts-ignore - these variables are injected at build time\n buildNumber: 1 as number, // (typeof __PACKAGE_BUILD_NUMBER__ === 'undefined' ? 0 : __PACKAGE_BUILD_NUMBER__) as number,\n // @ts-ignore - these variables are injected at build time\n name: (typeof __PACKAGE_NAME__ === 'undefined' ? '' : __PACKAGE_NAME__) as string,\n // @ts-ignore - these variables are injected at build time\n version: (typeof __PACKAGE_VERSION__ === 'undefined' ? '' : __PACKAGE_VERSION__) as string,\n});\n","import type { LanguageId } from './LanguageId.js';\n\n/**\n * A type of a file extension\n */\nexport type Extension = `.${string}`;\n\n/**\n * Object hash of all well-known file extension category to file extensions mapping\n */\nexport type ExtensionRegistry = { [K in LanguageId]: readonly Extension[] };\n\n/**\n * Supported ECMA version\n *\n * @example\n * ```ts\n * Project.ecmaVersion() // 2022\n * ```\n */\nfunction ecmaVersion() {\n return 2022 as const;\n}\n\nfunction escapeRegExp(value: string) {\n // eslint-disable-next-line unicorn/prefer-string-raw\n return value.replaceAll(/[$()*+.?[\\\\\\]^{|}]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nconst registry: ExtensionRegistry = {\n css: ['.css'],\n graphql: ['.gql', '.graphql'],\n javascript: ['.js', '.cjs', '.mjs'],\n javascriptreact: ['.jsx'],\n jpeg: ['.jpg', '.jpeg'],\n json: ['.json'],\n jsonc: ['.jsonc'],\n less: ['.less'],\n markdown: ['.markdown', '.mdown', '.mkd', '.md'],\n sass: ['.sass'],\n scss: ['.scss'],\n typescript: ['.ts', '.cts', '.mts'],\n typescriptreact: ['.tsx'],\n vue: ['.vue'],\n yaml: ['.yaml', '.yml'],\n};\n\n/**\n * Return a list of extensions\n *\n * @example\n * ```ts\n * Project.queryExtensions(['javascript']); // ['.js', '.cjs', ...]\n * Project.queryExtensions(['typescript', 'typescriptreact']); // ['.ts', '.mts', ..., '.tsx']\n * ```\n *\n * @param languages\n */\nfunction queryExtensions(languages: LanguageId[]): readonly Extension[] {\n return languages\n .reduce<Extension[]>((previousValue, currentValue) =>\n\n previousValue.concat(registry[currentValue] ?? ([] as Extension[])), [])\n // eslint-disable-next-line unicorn/no-array-sort\n .sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Supported file extensions\n *\n * @example\n * ```ts\n * Project.sourceExtensions() // ['.ts', '.js', ...]\n * ```\n */\nfunction sourceExtensions() {\n return queryExtensions(['javascript', 'javascriptreact', 'typescript', 'typescriptreact']);\n}\n\nconst RESOURCE_EXTENSIONS: readonly Extension[] = Object.freeze([\n '.gif',\n '.png',\n '.svg',\n ...queryExtensions(['css', 'graphql', 'jpeg', 'less', 'sass', 'sass', 'yaml']),\n]);\n\n/**\n * Resource file extensions\n *\n * @example\n * ```ts\n * Project.resourceExtensions() // ['.css', '.sass', ...]\n * ```\n */\nfunction resourceExtensions() {\n return RESOURCE_EXTENSIONS;\n}\n\nconst IGNORED = Object.freeze([\n 'node_modules/',\n 'build/',\n 'cjs/',\n 'coverage/',\n 'dist/',\n 'dts/',\n 'esm/',\n 'lib/',\n 'mjs/',\n 'umd/',\n]);\n\n/**\n * Return a RegExp that will match any list of extensions\n *\n * @param extensions\n * @example\n * ```ts\n * Project.extensionsToMatcher(['.js', '.ts']) // RegExp = /(\\.js|\\.ts)$/\n * ```\n */\nfunction extensionsToMatcher(extensions: readonly Extension[]): RegExp {\n return new RegExp(`(${extensions.map(escapeRegExp).join('|')})$`);\n}\n\n/**\n * Files and folders to always ignore\n *\n * @example\n * ```ts\n * IGNORED // ['node_modules/', 'build/', ...]\n * ```\n */\nfunction ignored() {\n return IGNORED;\n}\n\nconst reExtension = /^\\./;\n\n/**\n * Return a glob matcher that will match any list of extensions\n *\n * @param extensions\n * @example\n * ```ts\n * Project.extensionsToGlob(['.js', '.ts']) // '*.+(js|ts)'\n * ```\n */\nfunction extensionsToGlob(extensions: readonly Extension[]): string {\n return `*.+(${extensions.map((_) => _.replace(reExtension, '')).join('|')})`;\n}\n\nexport const Project = Object.freeze({\n ecmaVersion,\n extensionsToGlob,\n extensionsToMatcher,\n ignored,\n queryExtensions,\n resourceExtensions,\n sourceExtensions,\n});\n","/**\n * Project common scripts\n */\nexport const ProjectScript = {\n Build: 'build',\n Clean: 'clean',\n CodeAnalysis: 'code-analysis',\n Coverage: 'coverage',\n Develop: 'develop',\n Docs: 'docs',\n Format: 'format',\n Install: 'install',\n Lint: 'lint',\n Prepare: 'prepare',\n Release: 'release',\n Rescue: 'rescue',\n Spellcheck: 'spellcheck',\n Test: 'test',\n Typecheck: 'typecheck',\n Validate: 'validate',\n} as const;\nexport type ProjectScript = (typeof ProjectScript)[keyof typeof ProjectScript];\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../src/ESLintConfig.ts","../src/interopDefault.ts","../src/meta.ts","../src/Project.ts","../src/ProjectScript.ts"],"sourcesContent":["import type { Linter } from 'eslint';\n\n/**\n * Concat multiple flat configs into a single flat config array.\n *\n * It also resolves promises and flattens the result.\n *\n * @example\n *\n * ```ts\n * import eslint from '@eslint/js'\n *\n * export default ESLintConfig.concat(\n * {\n * plugins: {},\n * rules: {},\n * },\n * // It can also takes a array of configs:\n * [\n * {\n * plugins: {},\n * rules: {},\n * }\n * // ...\n * ],\n * // Or promises:\n * Promise.resolve({\n * files: ['*.ts'],\n * rules: {},\n * })\n * );\n * ```\n * @param configs\n */\nasync function concat<T extends Linter.Config = Linter.Config>(\n ...configs: Array<Promise<ReadonlyArray<T>> | Promise<T> | ReadonlyArray<T> | T>\n): Promise<Array<T>> {\n const resolved = await Promise.all(configs);\n return resolved.flat() as Array<T>;\n}\n\n/**\n * Always return 'off'. `_status` is the previous rule value.\n *\n * @param _status\n */\nfunction fixme(_status: [number | string, ...Array<any>] | number | string | undefined) {\n return 'off' as const;\n}\n\n/**\n * Return a new merged flat configuration\n *\n * @param configs\n */\nfunction merge<T extends Linter.Config = Linter.Config>(...configs: Array<T>): T {\n const keys = new Set(configs.flatMap((i) => Object.keys(i)));\n const merged = configs.reduce((acc, cur) => {\n return {\n ...acc,\n ...cur,\n files: [\n ...(acc.files ?? []),\n ...(cur.files ?? []),\n ],\n ignores: [\n ...(acc.ignores ?? []),\n ...(cur.ignores ?? []),\n ],\n languageOptions: {\n ...acc.languageOptions,\n ...cur.languageOptions,\n },\n linterOptions: {\n ...acc.linterOptions,\n ...cur.linterOptions,\n },\n plugins: {\n ...acc.plugins,\n ...cur.plugins,\n },\n rules: {\n ...acc.rules,\n ...cur.rules,\n },\n };\n }, {} as T);\n\n // Remove unused keys\n for (const key of Object.keys(merged)) {\n if (!keys.has(key))\n // eslint-disable-next-line ts/no-dynamic-delete\n delete (merged as any)[key];\n }\n\n return merged as T;\n}\n\n/**\n * Renames rules in the given object according to the given map.\n *\n * Given a map `{ 'old-prefix': 'new-prefix' }`, and a rule object\n * `{ 'old-prefix/rule-name': 'error' }`, this function will return\n * `{ 'new-prefix/rule-name': 'error' }`.\n *\n * @param rules The object containing the rules to rename.\n * @param map The object containing the rename map.\n */\nfunction renameRules(rules: Record<string, any>, map: Record<string, string>): Record<string, any> {\n return Object.fromEntries(\n Object.entries(rules).map(([key, value]) => {\n for (const [from, to] of Object.entries(map)) {\n if (key.startsWith(`${from}/`)) return [to + key.slice(from.length), value];\n else if (from === '' && !key.includes('/') && to !== '') return [to + key, value];\n }\n return [key, value];\n }),\n );\n}\n\n/**\n * @namespace\n */\nexport const ESLintConfig = Object.freeze({\n concat,\n fixme,\n merge,\n renameRules,\n});\n","const getDefaultOrElse = (_: any) => _?.default ?? _;\n\n/**\n * Resolves a module or promise-like object, returning the default export if available.\n *\n * @example\n * ```ts\n * // modules.ts\n * export default {\n * foo: true\n * };\n * // Async API\n * const modPromise = import('./module');\n * interopDefault(modPromise); // == Promise.resolve({ foo: true })\n * // Sync API\n * const mod = await import('./module');\n * interopDefault(mod); // == { foo: true }\n * ```\n *\n * @template T - The type of the module or promise-like object.\n * @param m The module or promise-like object to resolve.\n */\nexport function interopDefault<T>(m: PromiseLike<T>): Promise<T extends { default: infer U } ? U : T>;\nexport function interopDefault<T>(m: T): T extends { default: infer U } ? U : T;\nexport function interopDefault<T>(m: PromiseLike<T> | T): Promise<T extends { default: infer U } ? U : T> {\n // @ts-ignore We know what we are doing\n // eslint-disable-next-line unicorn/prefer-await\n return m != null && typeof m.then === 'function' ? Promise.resolve(m).then(getDefaultOrElse) : getDefaultOrElse(m);\n}\n","export const meta = Object.freeze({\n // @ts-ignore - these variables are injected at build time\n buildNumber: 1 as number, // (typeof __PACKAGE_BUILD_NUMBER__ === 'undefined' ? 0 : __PACKAGE_BUILD_NUMBER__) as number,\n // @ts-ignore - these variables are injected at build time\n name: (typeof __PACKAGE_NAME__ === 'undefined' ? '' : __PACKAGE_NAME__) as string,\n // @ts-ignore - these variables are injected at build time\n version: (typeof __PACKAGE_VERSION__ === 'undefined' ? '' : __PACKAGE_VERSION__) as string,\n});\n","import type { LanguageId } from './LanguageId.js';\n\n/**\n * A type of a file extension\n */\nexport type Extension = `.${string}`;\n\n/**\n * Object hash of all well-known file extension category to file extensions mapping\n */\nexport type ExtensionRegistry = Record<LanguageId, ReadonlyArray<Extension>>;\n\n/**\n * Supported ECMA version\n *\n * @example\n * ```ts\n * Project.ecmaVersion() // 2022\n * ```\n */\nfunction ecmaVersion() {\n return 2022 as const;\n}\n\nfunction escapeRegExp(value: string) {\n // eslint-disable-next-line unicorn/prefer-string-raw\n return value.replaceAll(/[$()*+.?[\\\\\\]^{|}]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nconst registry: ExtensionRegistry = {\n css: ['.css'],\n graphql: ['.gql', '.graphql'],\n javascript: ['.js', '.cjs', '.mjs'],\n javascriptreact: ['.jsx'],\n jpeg: ['.jpg', '.jpeg'],\n json: ['.json'],\n jsonc: ['.jsonc'],\n less: ['.less'],\n markdown: ['.markdown', '.mdown', '.mkd', '.md'],\n sass: ['.sass'],\n scss: ['.scss'],\n typescript: ['.ts', '.cts', '.mts'],\n typescriptreact: ['.tsx'],\n vue: ['.vue'],\n yaml: ['.yaml', '.yml'],\n};\n\n/**\n * Return a list of extensions\n *\n * @example\n * ```ts\n * Project.queryExtensions(['javascript']); // ['.js', '.cjs', ...]\n * Project.queryExtensions(['typescript', 'typescriptreact']); // ['.ts', '.mts', ..., '.tsx']\n * ```\n *\n * @param languages\n */\nfunction queryExtensions(languages: Array<LanguageId>): ReadonlyArray<Extension> {\n return languages\n .reduce<Array<Extension>>((previousValue, currentValue) =>\n\n previousValue.concat(registry[currentValue] ?? ([] as Array<Extension>)), [])\n // eslint-disable-next-line unicorn/no-array-sort\n .sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Supported file extensions\n *\n * @example\n * ```ts\n * Project.sourceExtensions() // ['.ts', '.js', ...]\n * ```\n */\nfunction sourceExtensions() {\n return queryExtensions(['javascript', 'javascriptreact', 'typescript', 'typescriptreact']);\n}\n\nconst RESOURCE_EXTENSIONS: ReadonlyArray<Extension> = Object.freeze([\n '.gif',\n '.png',\n '.svg',\n ...queryExtensions(['css', 'graphql', 'jpeg', 'less', 'sass', 'sass', 'yaml']),\n]);\n\n/**\n * Resource file extensions\n *\n * @example\n * ```ts\n * Project.resourceExtensions() // ['.css', '.sass', ...]\n * ```\n */\nfunction resourceExtensions() {\n return RESOURCE_EXTENSIONS;\n}\n\nconst IGNORED = Object.freeze([\n 'node_modules/',\n 'build/',\n 'cjs/',\n 'coverage/',\n 'dist/',\n 'dts/',\n 'esm/',\n 'lib/',\n 'mjs/',\n 'umd/',\n]);\n\n/**\n * Return a RegExp that will match any list of extensions\n *\n * @param extensions\n * @example\n * ```ts\n * Project.extensionsToMatcher(['.js', '.ts']) // RegExp = /(\\.js|\\.ts)$/\n * ```\n */\nfunction extensionsToMatcher(extensions: ReadonlyArray<Extension>): RegExp {\n return new RegExp(`(${extensions.map(escapeRegExp).join('|')})$`);\n}\n\n/**\n * Files and folders to always ignore\n *\n * @example\n * ```ts\n * IGNORED // ['node_modules/', 'build/', ...]\n * ```\n */\nfunction ignored() {\n return IGNORED;\n}\n\nconst reExtension = /^\\./;\n\n/**\n * Return a glob matcher that will match any list of extensions\n *\n * @param extensions\n * @example\n * ```ts\n * Project.extensionsToGlob(['.js', '.ts']) // '*.+(js|ts)'\n * ```\n */\nfunction extensionsToGlob(extensions: ReadonlyArray<Extension>): string {\n return `*.+(${extensions.map((_) => _.replace(reExtension, '')).join('|')})`;\n}\n\nexport const Project = Object.freeze({\n ecmaVersion,\n extensionsToGlob,\n extensionsToMatcher,\n ignored,\n queryExtensions,\n resourceExtensions,\n sourceExtensions,\n});\n","/**\n * Project common scripts\n */\nexport const ProjectScript = {\n Build: 'build',\n Clean: 'clean',\n CodeAnalysis: 'code-analysis',\n Coverage: 'coverage',\n Develop: 'develop',\n Docs: 'docs',\n Format: 'format',\n Install: 'install',\n Lint: 'lint',\n Prepare: 'prepare',\n Release: 'release',\n Rescue: 'rescue',\n Spellcheck: 'spellcheck',\n Test: 'test',\n Typecheck: 'typecheck',\n Validate: 'validate',\n} as const;\nexport type ProjectScript = (typeof ProjectScript)[keyof typeof ProjectScript];\n"],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -39,7 +39,7 @@ declare function concat<T extends Linter.Config = Linter.Config>(...configs: Arr
|
|
|
39
39
|
*
|
|
40
40
|
* @param _status
|
|
41
41
|
*/
|
|
42
|
-
declare function fixme(_status: [number | string, ...any
|
|
42
|
+
declare function fixme(_status: [number | string, ...Array<any>] | number | string | undefined): "off";
|
|
43
43
|
/**
|
|
44
44
|
* Return a new merged flat configuration
|
|
45
45
|
*
|
|
@@ -133,7 +133,7 @@ type Extension = `.${string}`;
|
|
|
133
133
|
/**
|
|
134
134
|
* Object hash of all well-known file extension category to file extensions mapping
|
|
135
135
|
*/
|
|
136
|
-
type ExtensionRegistry =
|
|
136
|
+
type ExtensionRegistry = Record<LanguageId, ReadonlyArray<Extension>>;
|
|
137
137
|
/**
|
|
138
138
|
* Supported ECMA version
|
|
139
139
|
*
|
|
@@ -154,7 +154,7 @@ declare function ecmaVersion(): 2022;
|
|
|
154
154
|
*
|
|
155
155
|
* @param languages
|
|
156
156
|
*/
|
|
157
|
-
declare function queryExtensions(languages: LanguageId
|
|
157
|
+
declare function queryExtensions(languages: Array<LanguageId>): ReadonlyArray<Extension>;
|
|
158
158
|
/**
|
|
159
159
|
* Supported file extensions
|
|
160
160
|
*
|
|
@@ -182,7 +182,7 @@ declare function resourceExtensions(): readonly `.${string}`[];
|
|
|
182
182
|
* Project.extensionsToMatcher(['.js', '.ts']) // RegExp = /(\.js|\.ts)$/
|
|
183
183
|
* ```
|
|
184
184
|
*/
|
|
185
|
-
declare function extensionsToMatcher(extensions:
|
|
185
|
+
declare function extensionsToMatcher(extensions: ReadonlyArray<Extension>): RegExp;
|
|
186
186
|
/**
|
|
187
187
|
* Files and folders to always ignore
|
|
188
188
|
*
|
|
@@ -201,7 +201,7 @@ declare function ignored(): readonly string[];
|
|
|
201
201
|
* Project.extensionsToGlob(['.js', '.ts']) // '*.+(js|ts)'
|
|
202
202
|
* ```
|
|
203
203
|
*/
|
|
204
|
-
declare function extensionsToGlob(extensions:
|
|
204
|
+
declare function extensionsToGlob(extensions: ReadonlyArray<Extension>): string;
|
|
205
205
|
declare const Project: Readonly<{
|
|
206
206
|
ecmaVersion: typeof ecmaVersion;
|
|
207
207
|
extensionsToGlob: typeof extensionsToGlob;
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/ESLintConfig.ts","../src/interopDefault.ts","../src/LanguageId.ts","../src/meta.ts","../src/Project.ts","../src/ProjectScript.ts"],"mappings":";;;;;AAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCtB,MAAA,WAAiB,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA,KAClD,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,aAAA,CAAc,CAAA,KAAM,OAAA,CAAQ,CAAA,IAAK,aAAA,CAAc,CAAA,IAAK,CAAA,IAC7E,OAAA,CAAQ,KAAA,CAAM,CAAA;;;;;;iBAUR,KAAA,CAAM,
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/ESLintConfig.ts","../src/interopDefault.ts","../src/LanguageId.ts","../src/meta.ts","../src/Project.ts","../src/ProjectScript.ts"],"mappings":";;;;;AAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCtB,MAAA,WAAiB,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA,KAClD,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,aAAA,CAAc,CAAA,KAAM,OAAA,CAAQ,CAAA,IAAK,aAAA,CAAc,CAAA,IAAK,CAAA,IAC7E,OAAA,CAAQ,KAAA,CAAM,CAAA;;;;;;iBAUR,KAAA,CAAM,OAAuE,uBAAzC,KAAK;;AAVhC;AAAA;;;iBAmBT,KAAA,WAAgB,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA,KAAW,OAAA,EAAS,KAAA,CAAM,CAAA,IAAK,CAAA;AATO;AAAA;;;;;;;;;AAAA,iBA8D7E,WAAA,CAAY,KAAA,EAAO,MAAA,eAAqB,GAAA,EAAK,MAAA,mBAAyB,MAAA;;;;cAelE,YAAA,EAAY,QAAA;;;;;;;;;;;AA3HY;;;;;;;;;;;;;;;;;iBCsBrB,cAAA,IAAkB,CAAA,EAAG,WAAA,CAAY,CAAA,IAAK,OAAA,CAAQ,CAAA;EAAY,OAAA;AAAA,IAAqB,CAAA,GAAI,CAAA;AAAA,iBACnF,cAAA,IAAkB,CAAA,EAAG,CAAA,GAAI,CAAA;EAAY,OAAA;AAAA,IAAqB,CAAA,GAAI,CAAA;;;;;;KCpBlE,UAAA,SAAmB,aAAa;AAAA,UAE3B,aAAA;EACf,GAAA;EACA,OAAA;EACA,UAAA;EACA,eAAA;EACA,IAAA;EACA,IAAA;EACA,KAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,IAAA;EACA,UAAA;EACA,eAAA;EACA,GAAA;EACA,IAAA;AAAA;;;cCpBW,IAAA,EAAI,QAAA;;;;;;;;;AHAoB;KIKzB,SAAA;;;;KAKA,iBAAA,GAAoB,MAAA,CAAO,UAAA,EAAY,aAAA,CAAc,SAAA;;;;;;;;;iBAUxD,WAAA;;;;;;;;;;;;iBAsCA,eAAA,CAAgB,SAAA,EAAW,KAAA,CAAM,UAAA,IAAc,aAAA,CAAc,SAAA;;;;;;;;;iBAiB7D,gBAAA;;;AJvCS;AAAA;;;;AAUoE;iBIgD7E,kBAAA;;;;;;;;;;iBA0BA,mBAAA,CAAoB,UAAA,EAAY,aAAA,CAAc,SAAA,IAAa,MAAA;;;;;;;;;iBAY3D,OAAA;AJ7EuE;AAAA;;;;;;;;AAAA,iBI4FvE,gBAAA,CAAiB,UAAA,EAAY,aAAa,CAAC,SAAA;AAAA,cAIvC,OAAA,EAAO,QAAA;;;;;;;;;;;;;;cCpJP,aAAA;EAAA;;;;;;;;;;;;;;;;;KAkBD,aAAA,WAAwB,aAAA,eAA4B,aAAa"}
|
package/dist/index.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ declare function concat<T extends Linter.Config = Linter.Config>(...configs: Arr
|
|
|
39
39
|
*
|
|
40
40
|
* @param _status
|
|
41
41
|
*/
|
|
42
|
-
declare function fixme(_status: [number | string, ...any
|
|
42
|
+
declare function fixme(_status: [number | string, ...Array<any>] | number | string | undefined): "off";
|
|
43
43
|
/**
|
|
44
44
|
* Return a new merged flat configuration
|
|
45
45
|
*
|
|
@@ -133,7 +133,7 @@ type Extension = `.${string}`;
|
|
|
133
133
|
/**
|
|
134
134
|
* Object hash of all well-known file extension category to file extensions mapping
|
|
135
135
|
*/
|
|
136
|
-
type ExtensionRegistry =
|
|
136
|
+
type ExtensionRegistry = Record<LanguageId, ReadonlyArray<Extension>>;
|
|
137
137
|
/**
|
|
138
138
|
* Supported ECMA version
|
|
139
139
|
*
|
|
@@ -154,7 +154,7 @@ declare function ecmaVersion(): 2022;
|
|
|
154
154
|
*
|
|
155
155
|
* @param languages
|
|
156
156
|
*/
|
|
157
|
-
declare function queryExtensions(languages: LanguageId
|
|
157
|
+
declare function queryExtensions(languages: Array<LanguageId>): ReadonlyArray<Extension>;
|
|
158
158
|
/**
|
|
159
159
|
* Supported file extensions
|
|
160
160
|
*
|
|
@@ -182,7 +182,7 @@ declare function resourceExtensions(): readonly `.${string}`[];
|
|
|
182
182
|
* Project.extensionsToMatcher(['.js', '.ts']) // RegExp = /(\.js|\.ts)$/
|
|
183
183
|
* ```
|
|
184
184
|
*/
|
|
185
|
-
declare function extensionsToMatcher(extensions:
|
|
185
|
+
declare function extensionsToMatcher(extensions: ReadonlyArray<Extension>): RegExp;
|
|
186
186
|
/**
|
|
187
187
|
* Files and folders to always ignore
|
|
188
188
|
*
|
|
@@ -201,7 +201,7 @@ declare function ignored(): readonly string[];
|
|
|
201
201
|
* Project.extensionsToGlob(['.js', '.ts']) // '*.+(js|ts)'
|
|
202
202
|
* ```
|
|
203
203
|
*/
|
|
204
|
-
declare function extensionsToGlob(extensions:
|
|
204
|
+
declare function extensionsToGlob(extensions: ReadonlyArray<Extension>): string;
|
|
205
205
|
declare const Project: Readonly<{
|
|
206
206
|
ecmaVersion: typeof ecmaVersion;
|
|
207
207
|
extensionsToGlob: typeof extensionsToGlob;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/ESLintConfig.ts","../src/interopDefault.ts","../src/LanguageId.ts","../src/meta.ts","../src/Project.ts","../src/ProjectScript.ts"],"mappings":";;;;;AAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCtB,MAAA,WAAiB,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA,KAClD,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,aAAA,CAAc,CAAA,KAAM,OAAA,CAAQ,CAAA,IAAK,aAAA,CAAc,CAAA,IAAK,CAAA,IAC7E,OAAA,CAAQ,KAAA,CAAM,CAAA;;;;;;iBAUR,KAAA,CAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/ESLintConfig.ts","../src/interopDefault.ts","../src/LanguageId.ts","../src/meta.ts","../src/Project.ts","../src/ProjectScript.ts"],"mappings":";;;;;AAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCtB,MAAA,WAAiB,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA,KAClD,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,aAAA,CAAc,CAAA,KAAM,OAAA,CAAQ,CAAA,IAAK,aAAA,CAAc,CAAA,IAAK,CAAA,IAC7E,OAAA,CAAQ,KAAA,CAAM,CAAA;;;;;;iBAUR,KAAA,CAAM,OAAuE,uBAAzC,KAAK;;AAVhC;AAAA;;;iBAmBT,KAAA,WAAgB,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA,KAAW,OAAA,EAAS,KAAA,CAAM,CAAA,IAAK,CAAA;AATO;AAAA;;;;;;;;;AAAA,iBA8D7E,WAAA,CAAY,KAAA,EAAO,MAAA,eAAqB,GAAA,EAAK,MAAA,mBAAyB,MAAA;;;;cAelE,YAAA,EAAY,QAAA;;;;;;;;;;;AA3HY;;;;;;;;;;;;;;;;;iBCsBrB,cAAA,IAAkB,CAAA,EAAG,WAAA,CAAY,CAAA,IAAK,OAAA,CAAQ,CAAA;EAAY,OAAA;AAAA,IAAqB,CAAA,GAAI,CAAA;AAAA,iBACnF,cAAA,IAAkB,CAAA,EAAG,CAAA,GAAI,CAAA;EAAY,OAAA;AAAA,IAAqB,CAAA,GAAI,CAAA;;;;;;KCpBlE,UAAA,SAAmB,aAAa;AAAA,UAE3B,aAAA;EACf,GAAA;EACA,OAAA;EACA,UAAA;EACA,eAAA;EACA,IAAA;EACA,IAAA;EACA,KAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,IAAA;EACA,UAAA;EACA,eAAA;EACA,GAAA;EACA,IAAA;AAAA;;;cCpBW,IAAA,EAAI,QAAA;;;;;;;;;AHAoB;KIKzB,SAAA;;;;KAKA,iBAAA,GAAoB,MAAA,CAAO,UAAA,EAAY,aAAA,CAAc,SAAA;;;;;;;;;iBAUxD,WAAA;;;;;;;;;;;;iBAsCA,eAAA,CAAgB,SAAA,EAAW,KAAA,CAAM,UAAA,IAAc,aAAA,CAAc,SAAA;;;;;;;;;iBAiB7D,gBAAA;;;AJvCS;AAAA;;;;AAUoE;iBIgD7E,kBAAA;;;;;;;;;;iBA0BA,mBAAA,CAAoB,UAAA,EAAY,aAAA,CAAc,SAAA,IAAa,MAAA;;;;;;;;;iBAY3D,OAAA;AJ7EuE;AAAA;;;;;;;;AAAA,iBI4FvE,gBAAA,CAAiB,UAAA,EAAY,aAAa,CAAC,SAAA;AAAA,cAIvC,OAAA,EAAO,QAAA;;;;;;;;;;;;;;cCpJP,aAAA;EAAA;;;;;;;;;;;;;;;;;KAkBD,aAAA,WAAwB,aAAA,eAA4B,aAAa"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/ESLintConfig.ts","../src/interopDefault.ts","../src/meta.ts","../src/Project.ts","../src/ProjectScript.ts"],"sourcesContent":["import type { Linter } from 'eslint';\n\n/**\n * Concat multiple flat configs into a single flat config array.\n *\n * It also resolves promises and flattens the result.\n *\n * @example\n *\n * ```ts\n * import eslint from '@eslint/js'\n *\n * export default ESLintConfig.concat(\n * {\n * plugins: {},\n * rules: {},\n * },\n * // It can also takes a array of configs:\n * [\n * {\n * plugins: {},\n * rules: {},\n * }\n * // ...\n * ],\n * // Or promises:\n * Promise.resolve({\n * files: ['*.ts'],\n * rules: {},\n * })\n * );\n * ```\n * @param configs\n */\nasync function concat<T extends Linter.Config = Linter.Config>(\n ...configs: Array<Promise<ReadonlyArray<T>> | Promise<T> | ReadonlyArray<T> | T>\n): Promise<Array<T>> {\n const resolved = await Promise.all(configs);\n return resolved.flat() as Array<T>;\n}\n\n/**\n * Always return 'off'. `_status` is the previous rule value.\n *\n * @param _status\n */\nfunction fixme(_status: [number | string, ...any[]] | number | string | undefined) {\n return 'off' as const;\n}\n\n/**\n * Return a new merged flat configuration\n *\n * @param configs\n */\nfunction merge<T extends Linter.Config = Linter.Config>(...configs: Array<T>): T {\n const keys = new Set(configs.flatMap((i) => Object.keys(i)));\n const merged = configs.reduce((acc, cur) => {\n return {\n ...acc,\n ...cur,\n files: [\n ...(acc.files ?? []),\n ...(cur.files ?? []),\n ],\n ignores: [\n ...(acc.ignores ?? []),\n ...(cur.ignores ?? []),\n ],\n languageOptions: {\n ...acc.languageOptions,\n ...cur.languageOptions,\n },\n linterOptions: {\n ...acc.linterOptions,\n ...cur.linterOptions,\n },\n plugins: {\n ...acc.plugins,\n ...cur.plugins,\n },\n rules: {\n ...acc.rules,\n ...cur.rules,\n },\n };\n // eslint-disable-next-line ts/consistent-type-assertions\n }, {} as T);\n\n // Remove unused keys\n for (const key of Object.keys(merged)) {\n if (!keys.has(key))\n // eslint-disable-next-line ts/no-dynamic-delete\n delete (merged as any)[key];\n }\n\n return merged as T;\n}\n\n/**\n * Renames rules in the given object according to the given map.\n *\n * Given a map `{ 'old-prefix': 'new-prefix' }`, and a rule object\n * `{ 'old-prefix/rule-name': 'error' }`, this function will return\n * `{ 'new-prefix/rule-name': 'error' }`.\n *\n * @param rules The object containing the rules to rename.\n * @param map The object containing the rename map.\n */\nfunction renameRules(rules: Record<string, any>, map: Record<string, string>): Record<string, any> {\n return Object.fromEntries(\n Object.entries(rules).map(([key, value]) => {\n for (const [from, to] of Object.entries(map)) {\n if (key.startsWith(`${from}/`)) return [to + key.slice(from.length), value];\n else if (from === '' && !key.includes('/') && to !== '') return [to + key, value];\n }\n return [key, value];\n }),\n );\n}\n\n/**\n * @namespace\n */\nexport const ESLintConfig = Object.freeze({\n concat,\n fixme,\n merge,\n renameRules,\n});\n","const getDefaultOrElse = (_: any) => _?.default ?? _;\n\n/**\n * Resolves a module or promise-like object, returning the default export if available.\n *\n * @example\n * ```ts\n * // modules.ts\n * export default {\n * foo: true\n * };\n * // Async API\n * const modPromise = import('./module');\n * interopDefault(modPromise); // == Promise.resolve({ foo: true })\n * // Sync API\n * const mod = await import('./module');\n * interopDefault(mod); // == { foo: true }\n * ```\n *\n * @template T - The type of the module or promise-like object.\n * @param m The module or promise-like object to resolve.\n */\nexport function interopDefault<T>(m: PromiseLike<T>): Promise<T extends { default: infer U } ? U : T>;\nexport function interopDefault<T>(m: T): T extends { default: infer U } ? U : T;\nexport function interopDefault<T>(m: PromiseLike<T> | T): Promise<T extends { default: infer U } ? U : T> {\n // @ts-ignore We know what we are doing\n // eslint-disable-next-line unicorn/prefer-await\n return m != null && typeof m.then === 'function' ? Promise.resolve(m).then(getDefaultOrElse) : getDefaultOrElse(m);\n}\n","export const meta = Object.freeze({\n // @ts-ignore - these variables are injected at build time\n buildNumber: 1 as number, // (typeof __PACKAGE_BUILD_NUMBER__ === 'undefined' ? 0 : __PACKAGE_BUILD_NUMBER__) as number,\n // @ts-ignore - these variables are injected at build time\n name: (typeof __PACKAGE_NAME__ === 'undefined' ? '' : __PACKAGE_NAME__) as string,\n // @ts-ignore - these variables are injected at build time\n version: (typeof __PACKAGE_VERSION__ === 'undefined' ? '' : __PACKAGE_VERSION__) as string,\n});\n","import type { LanguageId } from './LanguageId.js';\n\n/**\n * A type of a file extension\n */\nexport type Extension = `.${string}`;\n\n/**\n * Object hash of all well-known file extension category to file extensions mapping\n */\nexport type ExtensionRegistry = { [K in LanguageId]: readonly Extension[] };\n\n/**\n * Supported ECMA version\n *\n * @example\n * ```ts\n * Project.ecmaVersion() // 2022\n * ```\n */\nfunction ecmaVersion() {\n return 2022 as const;\n}\n\nfunction escapeRegExp(value: string) {\n // eslint-disable-next-line unicorn/prefer-string-raw\n return value.replaceAll(/[$()*+.?[\\\\\\]^{|}]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nconst registry: ExtensionRegistry = {\n css: ['.css'],\n graphql: ['.gql', '.graphql'],\n javascript: ['.js', '.cjs', '.mjs'],\n javascriptreact: ['.jsx'],\n jpeg: ['.jpg', '.jpeg'],\n json: ['.json'],\n jsonc: ['.jsonc'],\n less: ['.less'],\n markdown: ['.markdown', '.mdown', '.mkd', '.md'],\n sass: ['.sass'],\n scss: ['.scss'],\n typescript: ['.ts', '.cts', '.mts'],\n typescriptreact: ['.tsx'],\n vue: ['.vue'],\n yaml: ['.yaml', '.yml'],\n};\n\n/**\n * Return a list of extensions\n *\n * @example\n * ```ts\n * Project.queryExtensions(['javascript']); // ['.js', '.cjs', ...]\n * Project.queryExtensions(['typescript', 'typescriptreact']); // ['.ts', '.mts', ..., '.tsx']\n * ```\n *\n * @param languages\n */\nfunction queryExtensions(languages: LanguageId[]): readonly Extension[] {\n return languages\n .reduce<Extension[]>((previousValue, currentValue) =>\n\n previousValue.concat(registry[currentValue] ?? ([] as Extension[])), [])\n // eslint-disable-next-line unicorn/no-array-sort\n .sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Supported file extensions\n *\n * @example\n * ```ts\n * Project.sourceExtensions() // ['.ts', '.js', ...]\n * ```\n */\nfunction sourceExtensions() {\n return queryExtensions(['javascript', 'javascriptreact', 'typescript', 'typescriptreact']);\n}\n\nconst RESOURCE_EXTENSIONS: readonly Extension[] = Object.freeze([\n '.gif',\n '.png',\n '.svg',\n ...queryExtensions(['css', 'graphql', 'jpeg', 'less', 'sass', 'sass', 'yaml']),\n]);\n\n/**\n * Resource file extensions\n *\n * @example\n * ```ts\n * Project.resourceExtensions() // ['.css', '.sass', ...]\n * ```\n */\nfunction resourceExtensions() {\n return RESOURCE_EXTENSIONS;\n}\n\nconst IGNORED = Object.freeze([\n 'node_modules/',\n 'build/',\n 'cjs/',\n 'coverage/',\n 'dist/',\n 'dts/',\n 'esm/',\n 'lib/',\n 'mjs/',\n 'umd/',\n]);\n\n/**\n * Return a RegExp that will match any list of extensions\n *\n * @param extensions\n * @example\n * ```ts\n * Project.extensionsToMatcher(['.js', '.ts']) // RegExp = /(\\.js|\\.ts)$/\n * ```\n */\nfunction extensionsToMatcher(extensions: readonly Extension[]): RegExp {\n return new RegExp(`(${extensions.map(escapeRegExp).join('|')})$`);\n}\n\n/**\n * Files and folders to always ignore\n *\n * @example\n * ```ts\n * IGNORED // ['node_modules/', 'build/', ...]\n * ```\n */\nfunction ignored() {\n return IGNORED;\n}\n\nconst reExtension = /^\\./;\n\n/**\n * Return a glob matcher that will match any list of extensions\n *\n * @param extensions\n * @example\n * ```ts\n * Project.extensionsToGlob(['.js', '.ts']) // '*.+(js|ts)'\n * ```\n */\nfunction extensionsToGlob(extensions: readonly Extension[]): string {\n return `*.+(${extensions.map((_) => _.replace(reExtension, '')).join('|')})`;\n}\n\nexport const Project = Object.freeze({\n ecmaVersion,\n extensionsToGlob,\n extensionsToMatcher,\n ignored,\n queryExtensions,\n resourceExtensions,\n sourceExtensions,\n});\n","/**\n * Project common scripts\n */\nexport const ProjectScript = {\n Build: 'build',\n Clean: 'clean',\n CodeAnalysis: 'code-analysis',\n Coverage: 'coverage',\n Develop: 'develop',\n Docs: 'docs',\n Format: 'format',\n Install: 'install',\n Lint: 'lint',\n Prepare: 'prepare',\n Release: 'release',\n Rescue: 'rescue',\n Spellcheck: 'spellcheck',\n Test: 'test',\n Typecheck: 'typecheck',\n Validate: 'validate',\n} as const;\nexport type ProjectScript = (typeof ProjectScript)[keyof typeof ProjectScript];\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/ESLintConfig.ts","../src/interopDefault.ts","../src/meta.ts","../src/Project.ts","../src/ProjectScript.ts"],"sourcesContent":["import type { Linter } from 'eslint';\n\n/**\n * Concat multiple flat configs into a single flat config array.\n *\n * It also resolves promises and flattens the result.\n *\n * @example\n *\n * ```ts\n * import eslint from '@eslint/js'\n *\n * export default ESLintConfig.concat(\n * {\n * plugins: {},\n * rules: {},\n * },\n * // It can also takes a array of configs:\n * [\n * {\n * plugins: {},\n * rules: {},\n * }\n * // ...\n * ],\n * // Or promises:\n * Promise.resolve({\n * files: ['*.ts'],\n * rules: {},\n * })\n * );\n * ```\n * @param configs\n */\nasync function concat<T extends Linter.Config = Linter.Config>(\n ...configs: Array<Promise<ReadonlyArray<T>> | Promise<T> | ReadonlyArray<T> | T>\n): Promise<Array<T>> {\n const resolved = await Promise.all(configs);\n return resolved.flat() as Array<T>;\n}\n\n/**\n * Always return 'off'. `_status` is the previous rule value.\n *\n * @param _status\n */\nfunction fixme(_status: [number | string, ...Array<any>] | number | string | undefined) {\n return 'off' as const;\n}\n\n/**\n * Return a new merged flat configuration\n *\n * @param configs\n */\nfunction merge<T extends Linter.Config = Linter.Config>(...configs: Array<T>): T {\n const keys = new Set(configs.flatMap((i) => Object.keys(i)));\n const merged = configs.reduce((acc, cur) => {\n return {\n ...acc,\n ...cur,\n files: [\n ...(acc.files ?? []),\n ...(cur.files ?? []),\n ],\n ignores: [\n ...(acc.ignores ?? []),\n ...(cur.ignores ?? []),\n ],\n languageOptions: {\n ...acc.languageOptions,\n ...cur.languageOptions,\n },\n linterOptions: {\n ...acc.linterOptions,\n ...cur.linterOptions,\n },\n plugins: {\n ...acc.plugins,\n ...cur.plugins,\n },\n rules: {\n ...acc.rules,\n ...cur.rules,\n },\n };\n }, {} as T);\n\n // Remove unused keys\n for (const key of Object.keys(merged)) {\n if (!keys.has(key))\n // eslint-disable-next-line ts/no-dynamic-delete\n delete (merged as any)[key];\n }\n\n return merged as T;\n}\n\n/**\n * Renames rules in the given object according to the given map.\n *\n * Given a map `{ 'old-prefix': 'new-prefix' }`, and a rule object\n * `{ 'old-prefix/rule-name': 'error' }`, this function will return\n * `{ 'new-prefix/rule-name': 'error' }`.\n *\n * @param rules The object containing the rules to rename.\n * @param map The object containing the rename map.\n */\nfunction renameRules(rules: Record<string, any>, map: Record<string, string>): Record<string, any> {\n return Object.fromEntries(\n Object.entries(rules).map(([key, value]) => {\n for (const [from, to] of Object.entries(map)) {\n if (key.startsWith(`${from}/`)) return [to + key.slice(from.length), value];\n else if (from === '' && !key.includes('/') && to !== '') return [to + key, value];\n }\n return [key, value];\n }),\n );\n}\n\n/**\n * @namespace\n */\nexport const ESLintConfig = Object.freeze({\n concat,\n fixme,\n merge,\n renameRules,\n});\n","const getDefaultOrElse = (_: any) => _?.default ?? _;\n\n/**\n * Resolves a module or promise-like object, returning the default export if available.\n *\n * @example\n * ```ts\n * // modules.ts\n * export default {\n * foo: true\n * };\n * // Async API\n * const modPromise = import('./module');\n * interopDefault(modPromise); // == Promise.resolve({ foo: true })\n * // Sync API\n * const mod = await import('./module');\n * interopDefault(mod); // == { foo: true }\n * ```\n *\n * @template T - The type of the module or promise-like object.\n * @param m The module or promise-like object to resolve.\n */\nexport function interopDefault<T>(m: PromiseLike<T>): Promise<T extends { default: infer U } ? U : T>;\nexport function interopDefault<T>(m: T): T extends { default: infer U } ? U : T;\nexport function interopDefault<T>(m: PromiseLike<T> | T): Promise<T extends { default: infer U } ? U : T> {\n // @ts-ignore We know what we are doing\n // eslint-disable-next-line unicorn/prefer-await\n return m != null && typeof m.then === 'function' ? Promise.resolve(m).then(getDefaultOrElse) : getDefaultOrElse(m);\n}\n","export const meta = Object.freeze({\n // @ts-ignore - these variables are injected at build time\n buildNumber: 1 as number, // (typeof __PACKAGE_BUILD_NUMBER__ === 'undefined' ? 0 : __PACKAGE_BUILD_NUMBER__) as number,\n // @ts-ignore - these variables are injected at build time\n name: (typeof __PACKAGE_NAME__ === 'undefined' ? '' : __PACKAGE_NAME__) as string,\n // @ts-ignore - these variables are injected at build time\n version: (typeof __PACKAGE_VERSION__ === 'undefined' ? '' : __PACKAGE_VERSION__) as string,\n});\n","import type { LanguageId } from './LanguageId.js';\n\n/**\n * A type of a file extension\n */\nexport type Extension = `.${string}`;\n\n/**\n * Object hash of all well-known file extension category to file extensions mapping\n */\nexport type ExtensionRegistry = Record<LanguageId, ReadonlyArray<Extension>>;\n\n/**\n * Supported ECMA version\n *\n * @example\n * ```ts\n * Project.ecmaVersion() // 2022\n * ```\n */\nfunction ecmaVersion() {\n return 2022 as const;\n}\n\nfunction escapeRegExp(value: string) {\n // eslint-disable-next-line unicorn/prefer-string-raw\n return value.replaceAll(/[$()*+.?[\\\\\\]^{|}]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nconst registry: ExtensionRegistry = {\n css: ['.css'],\n graphql: ['.gql', '.graphql'],\n javascript: ['.js', '.cjs', '.mjs'],\n javascriptreact: ['.jsx'],\n jpeg: ['.jpg', '.jpeg'],\n json: ['.json'],\n jsonc: ['.jsonc'],\n less: ['.less'],\n markdown: ['.markdown', '.mdown', '.mkd', '.md'],\n sass: ['.sass'],\n scss: ['.scss'],\n typescript: ['.ts', '.cts', '.mts'],\n typescriptreact: ['.tsx'],\n vue: ['.vue'],\n yaml: ['.yaml', '.yml'],\n};\n\n/**\n * Return a list of extensions\n *\n * @example\n * ```ts\n * Project.queryExtensions(['javascript']); // ['.js', '.cjs', ...]\n * Project.queryExtensions(['typescript', 'typescriptreact']); // ['.ts', '.mts', ..., '.tsx']\n * ```\n *\n * @param languages\n */\nfunction queryExtensions(languages: Array<LanguageId>): ReadonlyArray<Extension> {\n return languages\n .reduce<Array<Extension>>((previousValue, currentValue) =>\n\n previousValue.concat(registry[currentValue] ?? ([] as Array<Extension>)), [])\n // eslint-disable-next-line unicorn/no-array-sort\n .sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Supported file extensions\n *\n * @example\n * ```ts\n * Project.sourceExtensions() // ['.ts', '.js', ...]\n * ```\n */\nfunction sourceExtensions() {\n return queryExtensions(['javascript', 'javascriptreact', 'typescript', 'typescriptreact']);\n}\n\nconst RESOURCE_EXTENSIONS: ReadonlyArray<Extension> = Object.freeze([\n '.gif',\n '.png',\n '.svg',\n ...queryExtensions(['css', 'graphql', 'jpeg', 'less', 'sass', 'sass', 'yaml']),\n]);\n\n/**\n * Resource file extensions\n *\n * @example\n * ```ts\n * Project.resourceExtensions() // ['.css', '.sass', ...]\n * ```\n */\nfunction resourceExtensions() {\n return RESOURCE_EXTENSIONS;\n}\n\nconst IGNORED = Object.freeze([\n 'node_modules/',\n 'build/',\n 'cjs/',\n 'coverage/',\n 'dist/',\n 'dts/',\n 'esm/',\n 'lib/',\n 'mjs/',\n 'umd/',\n]);\n\n/**\n * Return a RegExp that will match any list of extensions\n *\n * @param extensions\n * @example\n * ```ts\n * Project.extensionsToMatcher(['.js', '.ts']) // RegExp = /(\\.js|\\.ts)$/\n * ```\n */\nfunction extensionsToMatcher(extensions: ReadonlyArray<Extension>): RegExp {\n return new RegExp(`(${extensions.map(escapeRegExp).join('|')})$`);\n}\n\n/**\n * Files and folders to always ignore\n *\n * @example\n * ```ts\n * IGNORED // ['node_modules/', 'build/', ...]\n * ```\n */\nfunction ignored() {\n return IGNORED;\n}\n\nconst reExtension = /^\\./;\n\n/**\n * Return a glob matcher that will match any list of extensions\n *\n * @param extensions\n * @example\n * ```ts\n * Project.extensionsToGlob(['.js', '.ts']) // '*.+(js|ts)'\n * ```\n */\nfunction extensionsToGlob(extensions: ReadonlyArray<Extension>): string {\n return `*.+(${extensions.map((_) => _.replace(reExtension, '')).join('|')})`;\n}\n\nexport const Project = Object.freeze({\n ecmaVersion,\n extensionsToGlob,\n extensionsToMatcher,\n ignored,\n queryExtensions,\n resourceExtensions,\n sourceExtensions,\n});\n","/**\n * Project common scripts\n */\nexport const ProjectScript = {\n Build: 'build',\n Clean: 'clean',\n CodeAnalysis: 'code-analysis',\n Coverage: 'coverage',\n Develop: 'develop',\n Docs: 'docs',\n Format: 'format',\n Install: 'install',\n Lint: 'lint',\n Prepare: 'prepare',\n Release: 'release',\n Rescue: 'rescue',\n Spellcheck: 'spellcheck',\n Test: 'test',\n Typecheck: 'typecheck',\n Validate: 'validate',\n} as const;\nexport type ProjectScript = (typeof ProjectScript)[keyof typeof ProjectScript];\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@w5s/dev",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"description": "Shared development constants and functions",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"config",
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"access": "public"
|
|
48
48
|
},
|
|
49
49
|
"sideEffect": false,
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "2d215d8f8c7c57653b9f0ef5674ffc2e7beeea5c"
|
|
51
51
|
}
|
package/src/ESLintConfig.ts
CHANGED
|
@@ -44,7 +44,7 @@ async function concat<T extends Linter.Config = Linter.Config>(
|
|
|
44
44
|
*
|
|
45
45
|
* @param _status
|
|
46
46
|
*/
|
|
47
|
-
function fixme(_status: [number | string, ...any
|
|
47
|
+
function fixme(_status: [number | string, ...Array<any>] | number | string | undefined) {
|
|
48
48
|
return 'off' as const;
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -84,7 +84,6 @@ function merge<T extends Linter.Config = Linter.Config>(...configs: Array<T>): T
|
|
|
84
84
|
...cur.rules,
|
|
85
85
|
},
|
|
86
86
|
};
|
|
87
|
-
// eslint-disable-next-line ts/consistent-type-assertions
|
|
88
87
|
}, {} as T);
|
|
89
88
|
|
|
90
89
|
// Remove unused keys
|
package/src/Project.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type Extension = `.${string}`;
|
|
|
8
8
|
/**
|
|
9
9
|
* Object hash of all well-known file extension category to file extensions mapping
|
|
10
10
|
*/
|
|
11
|
-
export type ExtensionRegistry =
|
|
11
|
+
export type ExtensionRegistry = Record<LanguageId, ReadonlyArray<Extension>>;
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Supported ECMA version
|
|
@@ -56,11 +56,11 @@ const registry: ExtensionRegistry = {
|
|
|
56
56
|
*
|
|
57
57
|
* @param languages
|
|
58
58
|
*/
|
|
59
|
-
function queryExtensions(languages: LanguageId
|
|
59
|
+
function queryExtensions(languages: Array<LanguageId>): ReadonlyArray<Extension> {
|
|
60
60
|
return languages
|
|
61
|
-
.reduce<Extension
|
|
61
|
+
.reduce<Array<Extension>>((previousValue, currentValue) =>
|
|
62
62
|
|
|
63
|
-
previousValue.concat(registry[currentValue] ?? ([] as Extension
|
|
63
|
+
previousValue.concat(registry[currentValue] ?? ([] as Array<Extension>)), [])
|
|
64
64
|
// eslint-disable-next-line unicorn/no-array-sort
|
|
65
65
|
.sort((left, right) => left.localeCompare(right));
|
|
66
66
|
}
|
|
@@ -77,7 +77,7 @@ function sourceExtensions() {
|
|
|
77
77
|
return queryExtensions(['javascript', 'javascriptreact', 'typescript', 'typescriptreact']);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
const RESOURCE_EXTENSIONS:
|
|
80
|
+
const RESOURCE_EXTENSIONS: ReadonlyArray<Extension> = Object.freeze([
|
|
81
81
|
'.gif',
|
|
82
82
|
'.png',
|
|
83
83
|
'.svg',
|
|
@@ -118,7 +118,7 @@ const IGNORED = Object.freeze([
|
|
|
118
118
|
* Project.extensionsToMatcher(['.js', '.ts']) // RegExp = /(\.js|\.ts)$/
|
|
119
119
|
* ```
|
|
120
120
|
*/
|
|
121
|
-
function extensionsToMatcher(extensions:
|
|
121
|
+
function extensionsToMatcher(extensions: ReadonlyArray<Extension>): RegExp {
|
|
122
122
|
return new RegExp(`(${extensions.map(escapeRegExp).join('|')})$`);
|
|
123
123
|
}
|
|
124
124
|
|
|
@@ -145,7 +145,7 @@ const reExtension = /^\./;
|
|
|
145
145
|
* Project.extensionsToGlob(['.js', '.ts']) // '*.+(js|ts)'
|
|
146
146
|
* ```
|
|
147
147
|
*/
|
|
148
|
-
function extensionsToGlob(extensions:
|
|
148
|
+
function extensionsToGlob(extensions: ReadonlyArray<Extension>): string {
|
|
149
149
|
return `*.+(${extensions.map((_) => _.replace(reExtension, '')).join('|')})`;
|
|
150
150
|
}
|
|
151
151
|
|