html-validate 9.0.0-rc.2 → 9.0.0-rc.3

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.
Files changed (61) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/browser.js +2 -2
  3. package/dist/cjs/cli.js +58 -46
  4. package/dist/cjs/cli.js.map +1 -1
  5. package/dist/cjs/core-browser.js.map +1 -1
  6. package/dist/cjs/core-nodejs.js +114 -25
  7. package/dist/cjs/core-nodejs.js.map +1 -1
  8. package/dist/cjs/core.js +7869 -7394
  9. package/dist/cjs/core.js.map +1 -1
  10. package/dist/cjs/elements.js +2 -2
  11. package/dist/cjs/elements.js.map +1 -1
  12. package/dist/cjs/html-validate.js +68 -51
  13. package/dist/cjs/html-validate.js.map +1 -1
  14. package/dist/cjs/index.js +5 -3
  15. package/dist/cjs/index.js.map +1 -1
  16. package/dist/cjs/jest-diff.js +6 -7
  17. package/dist/cjs/jest-diff.js.map +1 -1
  18. package/dist/cjs/jest.js +2 -2
  19. package/dist/cjs/jest.js.map +1 -1
  20. package/dist/cjs/matcher-utils.js.map +1 -1
  21. package/dist/cjs/matchers-jestonly.js.map +1 -1
  22. package/dist/cjs/matchers.js.map +1 -1
  23. package/dist/cjs/meta-helper.js.map +1 -1
  24. package/dist/cjs/test-utils.js +3 -2
  25. package/dist/cjs/test-utils.js.map +1 -1
  26. package/dist/cjs/tsdoc-metadata.json +1 -1
  27. package/dist/cjs/utils/natural-join.js.map +1 -1
  28. package/dist/cjs/vitest.js +2 -2
  29. package/dist/cjs/vitest.js.map +1 -1
  30. package/dist/es/browser.js +2 -2
  31. package/dist/es/cli.js +60 -48
  32. package/dist/es/cli.js.map +1 -1
  33. package/dist/es/core-browser.js.map +1 -1
  34. package/dist/es/core-nodejs.js +113 -26
  35. package/dist/es/core-nodejs.js.map +1 -1
  36. package/dist/es/core.js +7867 -7392
  37. package/dist/es/core.js.map +1 -1
  38. package/dist/es/elements.js +2 -2
  39. package/dist/es/elements.js.map +1 -1
  40. package/dist/es/html-validate.js +46 -29
  41. package/dist/es/html-validate.js.map +1 -1
  42. package/dist/es/index.js +5 -4
  43. package/dist/es/index.js.map +1 -1
  44. package/dist/es/jest-diff.js +6 -7
  45. package/dist/es/jest-diff.js.map +1 -1
  46. package/dist/es/jest.js +2 -2
  47. package/dist/es/jest.js.map +1 -1
  48. package/dist/es/matcher-utils.js.map +1 -1
  49. package/dist/es/matchers-jestonly.js.map +1 -1
  50. package/dist/es/matchers.js.map +1 -1
  51. package/dist/es/meta-helper.js.map +1 -1
  52. package/dist/es/test-utils.js +3 -2
  53. package/dist/es/test-utils.js.map +1 -1
  54. package/dist/es/utils/natural-join.js.map +1 -1
  55. package/dist/es/vitest.js +2 -2
  56. package/dist/es/vitest.js.map +1 -1
  57. package/dist/tsdoc-metadata.json +1 -1
  58. package/dist/types/browser.d.ts +26 -84
  59. package/dist/types/index.d.ts +64 -95
  60. package/dist/types/test-utils.d.ts +4 -4
  61. package/package.json +9 -162
@@ -1,13 +1,14 @@
1
- import fs from 'node:fs';
1
+ import fs$1 from 'node:fs/promises';
2
2
  import path from 'node:path';
3
- import { a as ConfigError, b as ConfigLoader, K as isThenable, U as UserError, C as Config, J as compatibilityCheckImpl, v as version } from './core.js';
3
+ import { a as ConfigError, U as UserError, b as ConfigLoader, K as isThenable, C as Config, J as compatibilityCheckImpl, v as version } from './core.js';
4
+ import fs from 'node:fs';
4
5
  import { createRequire } from 'node:module';
5
6
  import kleur from 'kleur';
6
7
 
7
8
  function requireUncached(require, moduleId) {
8
9
  const filename = require.resolve(moduleId);
9
10
  const m = require.cache[filename];
10
- if (m == null ? void 0 : m.parent) {
11
+ if (m?.parent) {
11
12
  const { parent } = m;
12
13
  for (let i = parent.children.length - 1; i >= 0; i--) {
13
14
  if (parent.children[i].id === filename) {
@@ -52,10 +53,10 @@ function expandRelativePath(value, { cwd }) {
52
53
  }
53
54
  }
54
55
 
55
- function isRequireError(error) {
56
+ function isRequireError$1(error) {
56
57
  return Boolean(error && typeof error === "object" && "code" in error);
57
58
  }
58
- function isTransformer(value) {
59
+ function isTransformer$1(value) {
59
60
  return typeof value === "function";
60
61
  }
61
62
  function cjsResolver(options = {}) {
@@ -69,7 +70,7 @@ function cjsResolver(options = {}) {
69
70
  return requireUncached(legacyRequire, moduleName);
70
71
  }
71
72
  } catch (err) {
72
- if (isRequireError(err) && err.code === "MODULE_NOT_FOUND") {
73
+ if (isRequireError$1(err) && err.code === "MODULE_NOT_FOUND") {
73
74
  return null;
74
75
  }
75
76
  throw err;
@@ -106,7 +107,7 @@ function cjsResolver(options = {}) {
106
107
  if (!mod) {
107
108
  return null;
108
109
  }
109
- if (isTransformer(mod)) {
110
+ if (isTransformer$1(mod)) {
110
111
  return mod;
111
112
  }
112
113
  if (mod.transformer) {
@@ -122,26 +123,105 @@ function nodejsResolver(options = {}) {
122
123
  return cjsResolver(options);
123
124
  }
124
125
 
126
+ function isRequireError(error) {
127
+ return Boolean(error && typeof error === "object" && "code" in error);
128
+ }
129
+ function isTransformer(value) {
130
+ return typeof value === "function";
131
+ }
132
+ let cachebuster = 1;
133
+ function getModuleName(id, { cache, rootDir }) {
134
+ const moduleName = id.replace("<rootDir>", rootDir);
135
+ if (cache) {
136
+ return `${moduleName}?cachebuster=${String(cachebuster++)}`;
137
+ } else {
138
+ return moduleName;
139
+ }
140
+ }
141
+ function esmResolver(options = {}) {
142
+ const rootDir = options.rootDir ?? determineRootDir();
143
+ async function internalImport(id, { cache }) {
144
+ if (id.endsWith(".json")) {
145
+ const content = await fs$1.readFile(id, "utf-8");
146
+ return JSON.parse(content);
147
+ }
148
+ const moduleName = getModuleName(id, { cache, rootDir });
149
+ try {
150
+ const { default: defaultImport } = await import(moduleName);
151
+ if (!defaultImport) {
152
+ throw new UserError(`"${id}" does not have a default export`);
153
+ }
154
+ return defaultImport;
155
+ } catch (err) {
156
+ if (isRequireError(err) && err.code === "MODULE_NOT_FOUND") {
157
+ return null;
158
+ }
159
+ throw err;
160
+ }
161
+ }
162
+ return {
163
+ name: "esm-resolver",
164
+ resolveElements(id, options2) {
165
+ return internalImport(id, options2);
166
+ },
167
+ async resolveConfig(id, options2) {
168
+ const configData = await internalImport(id, options2);
169
+ if (!configData) {
170
+ return null;
171
+ }
172
+ const cwd = path.dirname(id);
173
+ const expand = (value) => expandRelativePath(value, { cwd });
174
+ if (Array.isArray(configData.elements)) {
175
+ configData.elements = configData.elements.map(expand);
176
+ }
177
+ if (Array.isArray(configData.extends)) {
178
+ configData.extends = configData.extends.map(expand);
179
+ }
180
+ if (Array.isArray(configData.plugins)) {
181
+ configData.plugins = configData.plugins.map(expand);
182
+ }
183
+ return configData;
184
+ },
185
+ resolvePlugin(id, options2) {
186
+ return internalImport(id, options2);
187
+ },
188
+ async resolveTransformer(id, options2) {
189
+ const mod = await internalImport(id, options2);
190
+ if (!mod) {
191
+ return null;
192
+ }
193
+ if (isTransformer(mod)) {
194
+ return mod;
195
+ }
196
+ if (mod.transformer) {
197
+ throw new ConfigError(
198
+ `Module "${id}" is not a valid transformer. This looks like a plugin, did you forget to load the plugin first?`
199
+ );
200
+ }
201
+ throw new ConfigError(`Module "${id}" is not a valid transformer.`);
202
+ }
203
+ };
204
+ }
205
+
125
206
  function findConfigurationFiles(fs2, directory) {
126
- return ["json", "cjs", "js"].map((extension) => path.join(directory, `.htmlvalidate.${extension}`)).filter((filePath) => fs2.existsSync(filePath));
207
+ return ["json", "mjs", "cjs", "js"].map((extension) => path.join(directory, `.htmlvalidate.${extension}`)).filter((filePath) => fs2.existsSync(filePath));
127
208
  }
128
209
  const defaultResolvers = [cjsResolver()];
129
210
  function hasResolver(value) {
130
211
  return Array.isArray(value[0]);
131
212
  }
132
213
  class FileSystemConfigLoader extends ConfigLoader {
214
+ cache;
215
+ fs;
133
216
  constructor(...args) {
134
- var __super = (...args) => {
135
- super(...args);
136
- };
137
217
  if (hasResolver(args)) {
138
218
  const [resolvers, config, options = {}] = args;
139
- __super(resolvers, config);
219
+ super(resolvers, config);
140
220
  this.fs = /* istanbul ignore next */
141
221
  options.fs ?? fs;
142
222
  } else {
143
223
  const [config, options = {}] = args;
144
- __super(defaultResolvers, config);
224
+ super(defaultResolvers, config);
145
225
  this.fs = /* istanbul ignore next */
146
226
  options.fs ?? fs;
147
227
  }
@@ -160,7 +240,7 @@ class FileSystemConfigLoader extends ConfigLoader {
160
240
  return this._resolveAsync(filename, override2);
161
241
  });
162
242
  } else {
163
- return this._resolveSync(filename, override);
243
+ return this._resolveSync1(filename, override);
164
244
  }
165
245
  }
166
246
  /**
@@ -255,41 +335,48 @@ class FileSystemConfigLoader extends ConfigLoader {
255
335
  this.cache.set(filename, config);
256
336
  return config;
257
337
  }
258
- _mergeSync(globalConfig, override, config) {
338
+ _merge(globalConfig, override, config) {
259
339
  const merged = config ? config.merge(this.resolvers, override) : globalConfig.merge(this.resolvers, override);
260
- merged.init();
261
340
  return merged.resolve();
262
341
  }
263
- _resolveSync(filename, override) {
342
+ _resolveSync1(filename, override) {
264
343
  if (override.isRootFound()) {
265
- override.init();
266
344
  return override.resolve();
267
345
  }
268
- const globalConfig = this.getGlobalConfigSync();
346
+ const globalConfig = this.getGlobalConfig();
347
+ if (isThenable(globalConfig)) {
348
+ return globalConfig.then((globalConfig2) => {
349
+ return this._resolveSync2(filename, override, globalConfig2);
350
+ });
351
+ } else {
352
+ return this._resolveSync2(filename, override, globalConfig);
353
+ }
354
+ }
355
+ _resolveSync2(filename, override, globalConfig) {
269
356
  if (globalConfig.isRootFound()) {
270
357
  const merged = globalConfig.merge(this.resolvers, override);
271
- merged.init();
272
358
  return merged.resolve();
273
359
  }
274
360
  const config = this.fromFilename(filename);
275
361
  if (isThenable(config)) {
276
- throw new UserError("Cannot load async config from sync function");
362
+ return config.then((config2) => {
363
+ return this._merge(globalConfig, override, config2);
364
+ });
365
+ } else {
366
+ return this._merge(globalConfig, override, config);
277
367
  }
278
- return this._mergeSync(globalConfig, override, config);
279
368
  }
280
369
  async _resolveAsync(filename, override) {
281
370
  if (override.isRootFound()) {
282
- override.init();
283
371
  return override.resolve();
284
372
  }
285
373
  const globalConfig = await this.getGlobalConfig();
286
374
  if (globalConfig.isRootFound()) {
287
375
  const merged = globalConfig.merge(this.resolvers, override);
288
- merged.init();
289
376
  return merged.resolve();
290
377
  }
291
378
  const config = await this.fromFilenameAsync(filename);
292
- return this._mergeSync(globalConfig, override, config);
379
+ return this._merge(globalConfig, override, config);
293
380
  }
294
381
  /**
295
382
  * @internal For testing only
@@ -316,5 +403,5 @@ function compatibilityCheck(name, declared, options) {
316
403
  });
317
404
  }
318
405
 
319
- export { FileSystemConfigLoader as F, compatibilityCheck as a, cjsResolver as c, legacyRequire as l, nodejsResolver as n };
406
+ export { FileSystemConfigLoader as F, compatibilityCheck as a, cjsResolver as c, esmResolver as e, legacyRequire as l, nodejsResolver as n };
320
407
  //# sourceMappingURL=core-nodejs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"core-nodejs.js","sources":["../../src/utils/require-uncached.ts","../../src/config/resolver/nodejs/determine-root-dir.ts","../../src/config/resolver/nodejs/expand-relative-path.ts","../../src/config/resolver/nodejs/cjs-resolver.ts","../../src/config/loaders/file-system.ts","../../src/utils/compatibility-check.nodejs.ts"],"sourcesContent":["/**\n * Similar to `require(..)` but removes the cached copy first.\n */\nexport function requireUncached(require: NodeJS.Require, moduleId: string): unknown {\n\tconst filename = require.resolve(moduleId);\n\n\t/* remove references from the parent module to prevent memory leak */\n\tconst m = require.cache[filename];\n\tif (m?.parent) {\n\t\tconst { parent } = m;\n\t\tfor (let i = parent.children.length - 1; i >= 0; i--) {\n\t\t\tif (parent.children[i].id === filename) {\n\t\t\t\tparent.children.splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\t/* remove old module from cache */\n\t/* eslint-disable-next-line @typescript-eslint/no-dynamic-delete -- needed to perform its function */\n\tdelete require.cache[filename];\n\n\t/* eslint-disable-next-line import/no-dynamic-require, security/detect-non-literal-require -- as expected but should be moved to upcoming resolver class */\n\treturn require(filename);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\n\nlet cachedRootDir: string | null = null;\n\ninterface FSLike {\n\texistsSync(path: string): boolean;\n}\n\n/**\n * @internal\n */\nexport function determineRootDirImpl(intial: string, fs: FSLike): string {\n\t/* try to locate package.json */\n\tlet current = intial;\n\n\t// eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition -- break outs when filesystem is traversed\n\twhile (true) {\n\t\tconst search = path.join(current, \"package.json\");\n\t\tif (fs.existsSync(search)) {\n\t\t\treturn current;\n\t\t}\n\n\t\t/* get the parent directory */\n\t\tconst child = current;\n\t\tcurrent = path.dirname(current);\n\n\t\t/* stop if this is the root directory */\n\t\tif (current === child) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* default to working directory if no package.json is found */\n\treturn intial;\n}\n\n/**\n * Try to determine root directory based on the location of the closest\n * `package.json`. Fallbacks on `process.cwd()` if no package.json was found.\n *\n * @internal\n */\n/* istanbul ignore next: cached version of determineRootDirImpl, no need to test */\nexport function determineRootDir(): string {\n\tif (cachedRootDir === null) {\n\t\tcachedRootDir = determineRootDirImpl(process.cwd(), fs);\n\t}\n\treturn cachedRootDir;\n}\n","import path from \"node:path\";\n\n/**\n * @internal\n */\nexport function expandRelativePath<T>(value: string | T, { cwd }: { cwd: string }): string | T {\n\tif (typeof value === \"string\" && value.startsWith(\".\")) {\n\t\treturn path.normalize(path.join(cwd, value));\n\t} else {\n\t\treturn value;\n\t}\n}\n","import path from \"node:path\";\nimport { type MetaDataTable } from \"../../../meta\";\nimport { type Plugin } from \"../../../plugin\";\nimport { legacyRequire } from \"../../../resolve\";\nimport { type Transformer } from \"../../../transform\";\nimport { requireUncached } from \"../../../utils\";\nimport { type ConfigData } from \"../../config-data\";\nimport { ConfigError } from \"../../error\";\nimport { type Resolver, type ResolverOptions } from \"../resolver\";\nimport { determineRootDir } from \"./determine-root-dir\";\nimport { expandRelativePath } from \"./expand-relative-path\";\n\n/**\n * @internal\n */\nexport interface RequireError extends Error {\n\tcode: string;\n}\n\nfunction isRequireError(error: unknown): error is RequireError {\n\treturn Boolean(error && typeof error === \"object\" && \"code\" in error);\n}\n\nfunction isTransformer(value: Transformer | Plugin): value is Transformer {\n\treturn typeof value === \"function\";\n}\n\n/**\n * CommonJS resolver.\n *\n * @public\n * @since 8.8.0\n */\nexport type CommonJSResolver = Required<Resolver>;\n\n/**\n * CommonJS resolver.\n *\n * @public\n * @deprecated Deprecated alias for [[CommonJSResolver]].\n * @since 8.0.0\n */\nexport type NodeJSResolver = Required<Resolver>;\n\n/**\n * Create a new resolver for NodeJS packages using `require(..)`.\n *\n * If the module name contains `<rootDir>` (e.g. `<rootDir/foo`) it will be\n * expanded relative to the root directory either explicitly set by the\n * `rootDir` parameter or determined automatically by the closest `package.json`\n * file (starting at the current working directory).\n *\n * @public\n * @since 8.8.0\n */\nexport function cjsResolver(options: { rootDir?: string } = {}): CommonJSResolver {\n\tconst rootDir = options.rootDir ?? determineRootDir();\n\n\tfunction internalRequire<T = unknown>(id: string, { cache }: ResolverOptions): T | null {\n\t\tconst moduleName = id.replace(\"<rootDir>\", rootDir);\n\t\ttry {\n\t\t\t/* istanbul ignore else: the tests only runs the cached versions to get\n\t\t\t * unmodified access to `require`, the implementation of `requireUncached`\n\t\t\t * is assumed to be tested elsewhere */\n\t\t\tif (cache) {\n\t\t\t\treturn legacyRequire(moduleName) as T;\n\t\t\t} else {\n\t\t\t\treturn requireUncached(legacyRequire, moduleName) as T;\n\t\t\t}\n\t\t} catch (err: unknown) {\n\t\t\tif (isRequireError(err) && err.code === \"MODULE_NOT_FOUND\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\treturn {\n\t\tname: \"nodejs-resolver\",\n\n\t\tresolveElements(id: string, options: ResolverOptions): MetaDataTable | null {\n\t\t\treturn internalRequire(id, options);\n\t\t},\n\n\t\tresolveConfig(id: string, options: ResolverOptions): ConfigData | null {\n\t\t\tconst configData = internalRequire<ConfigData>(id, options);\n\t\t\tif (!configData) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t/* expand any relative paths */\n\t\t\tconst cwd = path.dirname(id);\n\t\t\tconst expand = <T>(value: string | T): string | T => expandRelativePath(value, { cwd });\n\n\t\t\tif (Array.isArray(configData.elements)) {\n\t\t\t\tconfigData.elements = configData.elements.map(expand);\n\t\t\t}\n\n\t\t\tif (Array.isArray(configData.extends)) {\n\t\t\t\tconfigData.extends = configData.extends.map(expand);\n\t\t\t}\n\n\t\t\tif (Array.isArray(configData.plugins)) {\n\t\t\t\tconfigData.plugins = configData.plugins.map(expand);\n\t\t\t}\n\n\t\t\treturn configData;\n\t\t},\n\n\t\tresolvePlugin(id: string, options: ResolverOptions): Plugin | null {\n\t\t\treturn internalRequire<Plugin>(id, options);\n\t\t},\n\n\t\tresolveTransformer(id: string, options: ResolverOptions): Transformer | null {\n\t\t\tconst mod = internalRequire<Transformer | Plugin>(id, options);\n\t\t\tif (!mod) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (isTransformer(mod)) {\n\t\t\t\treturn mod;\n\t\t\t}\n\n\t\t\t/* this is not a proper transformer, is it a plugin exposing a transformer? */\n\t\t\tif (mod.transformer) {\n\t\t\t\tthrow new ConfigError(\n\t\t\t\t\t`Module \"${id}\" is not a valid transformer. This looks like a plugin, did you forget to load the plugin first?`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new ConfigError(`Module \"${id}\" is not a valid transformer.`);\n\t\t},\n\t};\n}\n\n/**\n * Create a new resolver for NodeJS packages using `require(..)`.\n *\n * If the module name contains `<rootDir>` (e.g. `<rootDir/foo`) it will be\n * expanded relative to the root directory either explicitly set by the\n * `rootDir` parameter or determined automatically by the closest `package.json`\n * file (starting at the current working directory).\n *\n * @public\n * @deprecated Deprecated alias for [[commonjsResolver]].\n * @since 8.0.0\n */\n/* istanbul ignore next -- deprecated alias */\nexport function nodejsResolver(options: { rootDir?: string } = {}): NodeJSResolver {\n\treturn cjsResolver(options);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Config } from \"../config\";\nimport { type ConfigData } from \"../config-data\";\nimport { ConfigLoader } from \"../config-loader\";\nimport { type ResolvedConfig } from \"../resolved-config\";\nimport { type Resolver } from \"../resolver\";\nimport { type FSLike, cjsResolver } from \"../resolver/nodejs\";\nimport { isThenable } from \"../../utils\";\nimport { UserError } from \"../../error\";\n\n/**\n * Options for [[FileSystemConfigLoader]].\n *\n * @public\n */\nexport interface FileSystemConfigLoaderOptions {\n\t/** An implementation of `fs` as needed by [[FileSystemConfigLoader]] */\n\tfs: FSLike;\n}\n\n/**\n * @internal\n */\nfunction findConfigurationFiles(fs: FSLike, directory: string): string[] {\n\treturn [\"json\", \"cjs\", \"js\"]\n\t\t.map((extension) => path.join(directory, `.htmlvalidate.${extension}`))\n\t\t.filter((filePath) => fs.existsSync(filePath));\n}\n\nconst defaultResolvers: Resolver[] = [cjsResolver()];\n\ntype ConstructorParametersDefault = [ConfigData?, Partial<FileSystemConfigLoaderOptions>?];\ntype ConstructorParametersResolver = [\n\tResolver[],\n\tConfigData?,\n\tPartial<FileSystemConfigLoaderOptions>?,\n];\ntype ConstructorParameters = ConstructorParametersDefault | ConstructorParametersResolver;\n\nfunction hasResolver(value: ConstructorParameters): value is ConstructorParametersResolver {\n\treturn Array.isArray(value[0]);\n}\n\n/**\n * Loads configuration by traversing filesystem.\n *\n * Configuration is read from three sources and in the following order:\n *\n * 1. Global configuration passed to constructor.\n * 2. Configuration files found when traversing the directory structure.\n * 3. Override passed to this function.\n *\n * The following configuration filenames are searched:\n *\n * - `.htmlvalidate.json`\n * - `.htmlvalidate.js`\n * - `.htmlvalidate.cjs`\n *\n * Global configuration is used when no configuration file is found. The\n * result is always merged with override if present.\n *\n * The `root` property set to `true` affects the configuration as following:\n *\n * 1. If set in override the override is returned as-is.\n * 2. If set in the global config the override is merged into global and\n * returned. No configuration files are searched.\n * 3. Setting `root` in configuration file only stops directory traversal.\n *\n * @public\n */\nexport class FileSystemConfigLoader extends ConfigLoader {\n\tprotected cache: Map<string, Config | null>;\n\tprivate fs: FSLike;\n\n\t/**\n\t * Create a filesystem configuration loader with default resolvers.\n\t *\n\t * @param fs - `fs` implementation,\n\t * @param config - Global configuration.\n\t * @param configFactory - Optional configuration factory.\n\t */\n\tpublic constructor(config?: ConfigData, options?: Partial<FileSystemConfigLoaderOptions>);\n\n\t/**\n\t * Create a filesystem configuration loader with custom resolvers.\n\t *\n\t * @param fs - `fs` implementation,\n\t * @param resolvers - Resolvers to use.\n\t * @param config - Global configuration.\n\t * @param configFactory - Optional configuration factory.\n\t */\n\tpublic constructor(\n\t\tresolvers: Resolver[],\n\t\tconfig?: ConfigData,\n\t\toptions?: Partial<FileSystemConfigLoaderOptions>,\n\t);\n\n\tpublic constructor(...args: ConstructorParameters) {\n\t\tif (hasResolver(args)) {\n\t\t\t/* istanbul ignore next */\n\t\t\tconst [resolvers, config, options = {}] = args;\n\t\t\tsuper(resolvers, config);\n\t\t\tthis.fs = /* istanbul ignore next */ options.fs ?? fs;\n\t\t} else {\n\t\t\t/* istanbul ignore next */\n\t\t\tconst [config, options = {}] = args;\n\t\t\tsuper(defaultResolvers, config);\n\t\t\tthis.fs = /* istanbul ignore next */ options.fs ?? fs;\n\t\t}\n\t\tthis.cache = new Map();\n\t}\n\n\t/**\n\t * Get configuration for given filename.\n\t *\n\t * @param filename - Filename to get configuration for.\n\t * @param configOverride - Configuration to merge final result with.\n\t */\n\tpublic override getConfigFor(\n\t\tfilename: string,\n\t\tconfigOverride?: ConfigData,\n\t): ResolvedConfig | Promise<ResolvedConfig> {\n\t\tconst override = this.loadFromObject(configOverride ?? {});\n\t\tif (isThenable(override)) {\n\t\t\treturn override.then((override) => {\n\t\t\t\treturn this._resolveAsync(filename, override);\n\t\t\t});\n\t\t} else {\n\t\t\treturn this._resolveSync(filename, override);\n\t\t}\n\t}\n\n\t/**\n\t * Flush configuration cache.\n\t *\n\t * @param filename - If given only the cache for that file is flushed.\n\t */\n\tpublic override flushCache(filename?: string): void {\n\t\tif (filename) {\n\t\t\tthis.cache.delete(filename);\n\t\t} else {\n\t\t\tthis.cache.clear();\n\t\t}\n\t}\n\n\t/**\n\t * Load raw configuration from directory traversal.\n\t *\n\t * This configuration is not merged with global configuration and may return\n\t * `null` if no configuration files are found.\n\t */\n\tpublic fromFilename(filename: string): Config | Promise<Config | null> | null {\n\t\tif (filename === \"inline\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst cache = this.cache.get(filename);\n\t\tif (cache) {\n\t\t\treturn cache;\n\t\t}\n\n\t\tlet found = false;\n\t\tlet current = path.resolve(path.dirname(filename));\n\t\tlet config = this.empty();\n\n\t\t// eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition -- it will break out when filesystem is traversed\n\t\twhile (true) {\n\t\t\t/* search configuration files in current directory */\n\t\t\tfor (const configFile of findConfigurationFiles(this.fs, current)) {\n\t\t\t\tconst local = this.loadFromFile(configFile);\n\n\t\t\t\t/* if the loader returns an async config we exit out of the synchronous\n\t\t\t\t * processing and enter the async method so we can resolve any promises\n\t\t\t\t * as we go */\n\t\t\t\tif (isThenable(local)) {\n\t\t\t\t\treturn this.fromFilenameAsync(filename);\n\t\t\t\t}\n\n\t\t\t\tfound = true;\n\t\t\t\tconfig = local.merge(this.resolvers, config);\n\t\t\t}\n\n\t\t\t/* stop if a configuration with \"root\" is set to true */\n\t\t\tif (config.isRootFound()) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t/* get the parent directory */\n\t\t\tconst child = current;\n\t\t\tcurrent = path.dirname(current);\n\n\t\t\t/* stop if this is the root directory */\n\t\t\tif (current === child) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t/* no config was found by loader, return null and let caller decide what to do */\n\t\tif (!found) {\n\t\t\tthis.cache.set(filename, null);\n\t\t\treturn null;\n\t\t}\n\n\t\tthis.cache.set(filename, config);\n\t\treturn config;\n\t}\n\n\t/**\n\t * Async version of [[fromFilename]].\n\t *\n\t * @internal\n\t */\n\tpublic async fromFilenameAsync(filename: string): Promise<Config | null> {\n\t\tif (filename === \"inline\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst cache = this.cache.get(filename);\n\t\tif (cache) {\n\t\t\treturn cache;\n\t\t}\n\n\t\tlet found = false;\n\t\tlet current = path.resolve(path.dirname(filename));\n\t\tlet config = this.empty();\n\n\t\t// eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition -- it will break out when filesystem is traversed\n\t\twhile (true) {\n\t\t\t/* search configuration files in current directory */\n\t\t\tfor (const configFile of findConfigurationFiles(this.fs, current)) {\n\t\t\t\tconst local = await this.loadFromFile(configFile);\n\t\t\t\tfound = true;\n\t\t\t\tconfig = local.merge(this.resolvers, config);\n\t\t\t}\n\n\t\t\t/* stop if a configuration with \"root\" is set to true */\n\t\t\tif (config.isRootFound()) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t/* get the parent directory */\n\t\t\tconst child = current;\n\t\t\tcurrent = path.dirname(current);\n\n\t\t\t/* stop if this is the root directory */\n\t\t\tif (current === child) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t/* no config was found by loader, return null and let caller decide what to do */\n\t\tif (!found) {\n\t\t\tthis.cache.set(filename, null);\n\t\t\treturn null;\n\t\t}\n\n\t\tthis.cache.set(filename, config);\n\t\treturn config;\n\t}\n\n\tprivate _mergeSync(\n\t\tglobalConfig: Config,\n\t\toverride: Config,\n\t\tconfig: Config | null,\n\t): ResolvedConfig {\n\t\tconst merged = config\n\t\t\t? config.merge(this.resolvers, override)\n\t\t\t: globalConfig.merge(this.resolvers, override);\n\t\tmerged.init();\n\t\treturn merged.resolve();\n\t}\n\n\tprivate _resolveSync(filename: string, override: Config): ResolvedConfig {\n\t\tif (override.isRootFound()) {\n\t\t\toverride.init();\n\t\t\treturn override.resolve();\n\t\t}\n\n\t\tconst globalConfig = this.getGlobalConfigSync();\n\n\t\t/* special case when the global configuration is marked as root, should not\n\t\t * try to load and more configuration files */\n\t\tif (globalConfig.isRootFound()) {\n\t\t\tconst merged = globalConfig.merge(this.resolvers, override);\n\t\t\tmerged.init();\n\t\t\treturn merged.resolve();\n\t\t}\n\n\t\tconst config = this.fromFilename(filename);\n\t\tif (isThenable(config)) {\n\t\t\tthrow new UserError(\"Cannot load async config from sync function\");\n\t\t}\n\n\t\treturn this._mergeSync(globalConfig, override, config);\n\t}\n\n\tprivate async _resolveAsync(filename: string, override: Config): Promise<ResolvedConfig> {\n\t\tif (override.isRootFound()) {\n\t\t\toverride.init();\n\t\t\treturn override.resolve();\n\t\t}\n\n\t\tconst globalConfig = await this.getGlobalConfig();\n\n\t\t/* special case when the global configuration is marked as root, should not\n\t\t * try to load and more configuration files */\n\t\tif (globalConfig.isRootFound()) {\n\t\t\tconst merged = globalConfig.merge(this.resolvers, override);\n\t\t\tmerged.init();\n\t\t\treturn merged.resolve();\n\t\t}\n\n\t\tconst config = await this.fromFilenameAsync(filename);\n\t\treturn this._mergeSync(globalConfig, override, config);\n\t}\n\n\t/**\n\t * @internal For testing only\n\t */\n\tpublic _getInternalCache(): Map<string, Config | null> {\n\t\treturn this.cache;\n\t}\n\n\tprotected defaultConfig(): Config | Promise<Config> {\n\t\treturn Config.defaultConfig();\n\t}\n}\n","import kleur from \"kleur\";\nimport { version } from \"../generated/package\";\nimport { type CompatibilityOptions, compatibilityCheckImpl } from \"./compatibility-check\";\n\nconst defaults: CompatibilityOptions = {\n\tsilent: false,\n\tversion,\n\tlogger(text: string): void {\n\t\t/* eslint-disable-next-line no-console -- expected to log */\n\t\tconsole.error(kleur.red(text));\n\t},\n};\n\n/**\n * Tests if plugin is compatible with html-validate library. Unless the `silent`\n * option is used a warning is displayed on the console.\n *\n * @public\n * @since v5.0.0\n * @param name - Name of plugin\n * @param declared - What library versions the plugin support (e.g. declared peerDependencies)\n * @returns - `true` if version is compatible\n */\nexport function compatibilityCheck(\n\tname: string,\n\tdeclared: string,\n\toptions?: Partial<CompatibilityOptions>,\n): boolean {\n\treturn compatibilityCheckImpl(name, declared, {\n\t\t...defaults,\n\t\t...options,\n\t});\n}\n"],"names":["fs","options","override"],"mappings":"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"}
1
+ {"version":3,"file":"core-nodejs.js","sources":["../../src/utils/require-uncached.ts","../../src/config/resolver/nodejs/determine-root-dir.ts","../../src/config/resolver/nodejs/expand-relative-path.ts","../../src/config/resolver/nodejs/cjs-resolver.ts","../../src/config/resolver/nodejs/esm-resolver.ts","../../src/config/loaders/file-system.ts","../../src/utils/compatibility-check.nodejs.ts"],"sourcesContent":["/**\n * Similar to `require(..)` but removes the cached copy first.\n */\nexport function requireUncached(require: NodeJS.Require, moduleId: string): unknown {\n\tconst filename = require.resolve(moduleId);\n\n\t/* remove references from the parent module to prevent memory leak */\n\tconst m = require.cache[filename];\n\tif (m?.parent) {\n\t\tconst { parent } = m;\n\t\tfor (let i = parent.children.length - 1; i >= 0; i--) {\n\t\t\tif (parent.children[i].id === filename) {\n\t\t\t\tparent.children.splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\t/* remove old module from cache */\n\t/* eslint-disable-next-line @typescript-eslint/no-dynamic-delete -- needed to perform its function */\n\tdelete require.cache[filename];\n\n\t/* eslint-disable-next-line import/no-dynamic-require, security/detect-non-literal-require -- as expected but should be moved to upcoming resolver class */\n\treturn require(filename);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\n\nlet cachedRootDir: string | null = null;\n\ninterface FSLike {\n\texistsSync(path: string): boolean;\n}\n\n/**\n * @internal\n */\nexport function determineRootDirImpl(intial: string, fs: FSLike): string {\n\t/* try to locate package.json */\n\tlet current = intial;\n\n\t// eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition -- break outs when filesystem is traversed\n\twhile (true) {\n\t\tconst search = path.join(current, \"package.json\");\n\t\tif (fs.existsSync(search)) {\n\t\t\treturn current;\n\t\t}\n\n\t\t/* get the parent directory */\n\t\tconst child = current;\n\t\tcurrent = path.dirname(current);\n\n\t\t/* stop if this is the root directory */\n\t\tif (current === child) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* default to working directory if no package.json is found */\n\treturn intial;\n}\n\n/**\n * Try to determine root directory based on the location of the closest\n * `package.json`. Fallbacks on `process.cwd()` if no package.json was found.\n *\n * @internal\n */\n/* istanbul ignore next: cached version of determineRootDirImpl, no need to test */\nexport function determineRootDir(): string {\n\tif (cachedRootDir === null) {\n\t\tcachedRootDir = determineRootDirImpl(process.cwd(), fs);\n\t}\n\treturn cachedRootDir;\n}\n","import path from \"node:path\";\n\n/**\n * @internal\n */\nexport function expandRelativePath<T>(value: string | T, { cwd }: { cwd: string }): string | T {\n\tif (typeof value === \"string\" && value.startsWith(\".\")) {\n\t\treturn path.normalize(path.join(cwd, value));\n\t} else {\n\t\treturn value;\n\t}\n}\n","import path from \"node:path\";\nimport { type MetaDataTable } from \"../../../meta\";\nimport { type Plugin } from \"../../../plugin\";\nimport { legacyRequire } from \"../../../resolve\";\nimport { type Transformer } from \"../../../transform\";\nimport { requireUncached } from \"../../../utils\";\nimport { type ConfigData } from \"../../config-data\";\nimport { ConfigError } from \"../../error\";\nimport { type Resolver, type ResolverOptions } from \"../resolver\";\nimport { determineRootDir } from \"./determine-root-dir\";\nimport { expandRelativePath } from \"./expand-relative-path\";\n\n/**\n * @internal\n */\nexport interface RequireError extends Error {\n\tcode: string;\n}\n\nfunction isRequireError(error: unknown): error is RequireError {\n\treturn Boolean(error && typeof error === \"object\" && \"code\" in error);\n}\n\nfunction isTransformer(value: Transformer | Plugin): value is Transformer {\n\treturn typeof value === \"function\";\n}\n\n/**\n * CommonJS resolver.\n *\n * @public\n * @since 8.8.0\n */\nexport type CommonJSResolver = Required<Resolver>;\n\n/**\n * CommonJS resolver.\n *\n * @public\n * @deprecated Deprecated alias for [[CommonJSResolver]].\n * @since 8.0.0\n */\nexport type NodeJSResolver = Required<Resolver>;\n\n/**\n * Create a new resolver for NodeJS packages using `require(..)`.\n *\n * If the module name contains `<rootDir>` (e.g. `<rootDir/foo`) it will be\n * expanded relative to the root directory either explicitly set by the\n * `rootDir` parameter or determined automatically by the closest `package.json`\n * file (starting at the current working directory).\n *\n * @public\n * @since 8.8.0\n */\nexport function cjsResolver(options: { rootDir?: string } = {}): CommonJSResolver {\n\tconst rootDir = options.rootDir ?? determineRootDir();\n\n\tfunction internalRequire<T = unknown>(id: string, { cache }: ResolverOptions): T | null {\n\t\tconst moduleName = id.replace(\"<rootDir>\", rootDir);\n\t\ttry {\n\t\t\t/* istanbul ignore else: the tests only runs the cached versions to get\n\t\t\t * unmodified access to `require`, the implementation of `requireUncached`\n\t\t\t * is assumed to be tested elsewhere */\n\t\t\tif (cache) {\n\t\t\t\treturn legacyRequire(moduleName) as T;\n\t\t\t} else {\n\t\t\t\treturn requireUncached(legacyRequire, moduleName) as T;\n\t\t\t}\n\t\t} catch (err: unknown) {\n\t\t\tif (isRequireError(err) && err.code === \"MODULE_NOT_FOUND\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\treturn {\n\t\tname: \"nodejs-resolver\",\n\n\t\tresolveElements(id: string, options: ResolverOptions): MetaDataTable | null {\n\t\t\treturn internalRequire(id, options);\n\t\t},\n\n\t\tresolveConfig(id: string, options: ResolverOptions): ConfigData | null {\n\t\t\tconst configData = internalRequire<ConfigData>(id, options);\n\t\t\tif (!configData) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t/* expand any relative paths */\n\t\t\tconst cwd = path.dirname(id);\n\t\t\tconst expand = <T>(value: string | T): string | T => expandRelativePath(value, { cwd });\n\n\t\t\tif (Array.isArray(configData.elements)) {\n\t\t\t\tconfigData.elements = configData.elements.map(expand);\n\t\t\t}\n\n\t\t\tif (Array.isArray(configData.extends)) {\n\t\t\t\tconfigData.extends = configData.extends.map(expand);\n\t\t\t}\n\n\t\t\tif (Array.isArray(configData.plugins)) {\n\t\t\t\tconfigData.plugins = configData.plugins.map(expand);\n\t\t\t}\n\n\t\t\treturn configData;\n\t\t},\n\n\t\tresolvePlugin(id: string, options: ResolverOptions): Plugin | null {\n\t\t\treturn internalRequire<Plugin>(id, options);\n\t\t},\n\n\t\tresolveTransformer(id: string, options: ResolverOptions): Transformer | null {\n\t\t\tconst mod = internalRequire<Transformer | Plugin>(id, options);\n\t\t\tif (!mod) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (isTransformer(mod)) {\n\t\t\t\treturn mod;\n\t\t\t}\n\n\t\t\t/* this is not a proper transformer, is it a plugin exposing a transformer? */\n\t\t\tif (mod.transformer) {\n\t\t\t\tthrow new ConfigError(\n\t\t\t\t\t`Module \"${id}\" is not a valid transformer. This looks like a plugin, did you forget to load the plugin first?`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new ConfigError(`Module \"${id}\" is not a valid transformer.`);\n\t\t},\n\t};\n}\n\n/**\n * Create a new resolver for NodeJS packages using `require(..)`.\n *\n * If the module name contains `<rootDir>` (e.g. `<rootDir/foo`) it will be\n * expanded relative to the root directory either explicitly set by the\n * `rootDir` parameter or determined automatically by the closest `package.json`\n * file (starting at the current working directory).\n *\n * @public\n * @deprecated Deprecated alias for [[commonjsResolver]].\n * @since 8.0.0\n */\n/* istanbul ignore next -- deprecated alias */\nexport function nodejsResolver(options: { rootDir?: string } = {}): NodeJSResolver {\n\treturn cjsResolver(options);\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { UserError } from \"../../../error\";\nimport { type MetaDataTable } from \"../../../meta\";\nimport { type Plugin } from \"../../../plugin\";\nimport { type Transformer } from \"../../../transform\";\nimport { type ConfigData } from \"../../config-data\";\nimport { ConfigError } from \"../../error\";\nimport { type Resolver, type ResolverOptions } from \"../resolver\";\nimport { determineRootDir } from \"./determine-root-dir\";\nimport { expandRelativePath } from \"./expand-relative-path\";\n\n/**\n * @internal\n */\nexport interface RequireError extends Error {\n\tcode: string;\n}\n\nfunction isRequireError(error: unknown): error is RequireError {\n\treturn Boolean(error && typeof error === \"object\" && \"code\" in error);\n}\n\nfunction isTransformer(value: Transformer | Plugin): value is Transformer {\n\treturn typeof value === \"function\";\n}\n\n/**\n * ESM resolver.\n *\n * @public\n * @since %version%\n */\nexport type ESMResolver = Required<Resolver>;\n\nlet cachebuster = 1;\n\nfunction getModuleName(\n\tid: string,\n\t{ cache, rootDir }: { cache: boolean; rootDir: string },\n): string {\n\tconst moduleName = id.replace(\"<rootDir>\", rootDir);\n\n\t/* istanbul ignore next: the tests only runs the cached versions to get\n\t * unmodified access to `require`, the implementation of `requireUncached`\n\t * is assumed to be tested elsewhere */\n\tif (cache) {\n\t\treturn `${moduleName}?cachebuster=${String(cachebuster++)}`;\n\t} else {\n\t\treturn moduleName;\n\t}\n}\n\n/**\n * Create a new resolver for NodeJS packages using `require(..)`.\n *\n * If the module name contains `<rootDir>` (e.g. `<rootDir/foo`) it will be\n * expanded relative to the root directory either explicitly set by the\n * `rootDir` parameter or determined automatically by the closest `package.json`\n * file (starting at the current working directory).\n *\n * @public\n * @since %version%\n */\nexport function esmResolver(options: { rootDir?: string } = {}): ESMResolver {\n\tconst rootDir = options.rootDir ?? determineRootDir();\n\n\tasync function internalImport<T = unknown>(\n\t\tid: string,\n\t\t{ cache }: ResolverOptions,\n\t): Promise<T | null> {\n\t\t/* this is a workaround for rollup which mangles import attributes so we\n\t\t * cannot use `import(.., { with: { type: \"json\" } })` to import a json\n\t\t * file. */\n\t\tif (id.endsWith(\".json\")) {\n\t\t\tconst content = await fs.readFile(id, \"utf-8\");\n\t\t\treturn JSON.parse(content) as T;\n\t\t}\n\n\t\tconst moduleName = getModuleName(id, { cache, rootDir });\n\n\t\ttry {\n\t\t\tconst { default: defaultImport } = (await import(moduleName)) as { default: T };\n\t\t\tif (!defaultImport) {\n\t\t\t\tthrow new UserError(`\"${id}\" does not have a default export`);\n\t\t\t}\n\t\t\treturn defaultImport;\n\t\t} catch (err: unknown) {\n\t\t\tif (isRequireError(err) && err.code === \"MODULE_NOT_FOUND\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\treturn {\n\t\tname: \"esm-resolver\",\n\n\t\tresolveElements(id: string, options: ResolverOptions): Promise<MetaDataTable | null> {\n\t\t\treturn internalImport(id, options);\n\t\t},\n\n\t\tasync resolveConfig(id: string, options: ResolverOptions): Promise<ConfigData | null> {\n\t\t\tconst configData = await internalImport<ConfigData>(id, options);\n\t\t\tif (!configData) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t/* expand any relative paths */\n\t\t\tconst cwd = path.dirname(id);\n\t\t\tconst expand = <T>(value: string | T): string | T => expandRelativePath(value, { cwd });\n\n\t\t\tif (Array.isArray(configData.elements)) {\n\t\t\t\tconfigData.elements = configData.elements.map(expand);\n\t\t\t}\n\n\t\t\tif (Array.isArray(configData.extends)) {\n\t\t\t\tconfigData.extends = configData.extends.map(expand);\n\t\t\t}\n\n\t\t\tif (Array.isArray(configData.plugins)) {\n\t\t\t\tconfigData.plugins = configData.plugins.map(expand);\n\t\t\t}\n\n\t\t\treturn configData;\n\t\t},\n\n\t\tresolvePlugin(id: string, options: ResolverOptions): Promise<Plugin | null> {\n\t\t\treturn internalImport<Plugin>(id, options);\n\t\t},\n\n\t\tasync resolveTransformer(id: string, options: ResolverOptions): Promise<Transformer | null> {\n\t\t\tconst mod = await internalImport<Transformer | Plugin>(id, options);\n\t\t\tif (!mod) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (isTransformer(mod)) {\n\t\t\t\treturn mod;\n\t\t\t}\n\n\t\t\t/* this is not a proper transformer, is it a plugin exposing a transformer? */\n\t\t\tif (mod.transformer) {\n\t\t\t\tthrow new ConfigError(\n\t\t\t\t\t`Module \"${id}\" is not a valid transformer. This looks like a plugin, did you forget to load the plugin first?`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new ConfigError(`Module \"${id}\" is not a valid transformer.`);\n\t\t},\n\t};\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Config } from \"../config\";\nimport { type ConfigData } from \"../config-data\";\nimport { ConfigLoader } from \"../config-loader\";\nimport { type ResolvedConfig } from \"../resolved-config\";\nimport { type Resolver } from \"../resolver\";\nimport { type FSLike, cjsResolver } from \"../resolver/nodejs\";\nimport { isThenable } from \"../../utils\";\n\n/**\n * Options for [[FileSystemConfigLoader]].\n *\n * @public\n */\nexport interface FileSystemConfigLoaderOptions {\n\t/** An implementation of `fs` as needed by [[FileSystemConfigLoader]] */\n\tfs: FSLike;\n}\n\n/**\n * @internal\n */\nfunction findConfigurationFiles(fs: FSLike, directory: string): string[] {\n\treturn [\"json\", \"mjs\", \"cjs\", \"js\"]\n\t\t.map((extension) => path.join(directory, `.htmlvalidate.${extension}`))\n\t\t.filter((filePath) => fs.existsSync(filePath));\n}\n\nconst defaultResolvers: Resolver[] = [cjsResolver()];\n\ntype ConstructorParametersDefault = [ConfigData?, Partial<FileSystemConfigLoaderOptions>?];\ntype ConstructorParametersResolver = [\n\tResolver[],\n\tConfigData?,\n\tPartial<FileSystemConfigLoaderOptions>?,\n];\ntype ConstructorParameters = ConstructorParametersDefault | ConstructorParametersResolver;\n\nfunction hasResolver(value: ConstructorParameters): value is ConstructorParametersResolver {\n\treturn Array.isArray(value[0]);\n}\n\n/**\n * Loads configuration by traversing filesystem.\n *\n * Configuration is read from three sources and in the following order:\n *\n * 1. Global configuration passed to constructor.\n * 2. Configuration files found when traversing the directory structure.\n * 3. Override passed to this function.\n *\n * The following configuration filenames are searched:\n *\n * - `.htmlvalidate.json`\n * - `.htmlvalidate.js`\n * - `.htmlvalidate.cjs`\n * - `.htmlvalidate.mjs`\n *\n * Global configuration is used when no configuration file is found. The\n * result is always merged with override if present.\n *\n * The `root` property set to `true` affects the configuration as following:\n *\n * 1. If set in override the override is returned as-is.\n * 2. If set in the global config the override is merged into global and\n * returned. No configuration files are searched.\n * 3. Setting `root` in configuration file only stops directory traversal.\n *\n * @public\n */\nexport class FileSystemConfigLoader extends ConfigLoader {\n\tprotected cache: Map<string, Config | null>;\n\tprivate fs: FSLike;\n\n\t/**\n\t * Create a filesystem configuration loader with default resolvers.\n\t *\n\t * @param fs - `fs` implementation,\n\t * @param config - Global configuration.\n\t * @param configFactory - Optional configuration factory.\n\t */\n\tpublic constructor(config?: ConfigData, options?: Partial<FileSystemConfigLoaderOptions>);\n\n\t/**\n\t * Create a filesystem configuration loader with custom resolvers.\n\t *\n\t * @param fs - `fs` implementation,\n\t * @param resolvers - Resolvers to use.\n\t * @param config - Global configuration.\n\t * @param configFactory - Optional configuration factory.\n\t */\n\tpublic constructor(\n\t\tresolvers: Resolver[],\n\t\tconfig?: ConfigData,\n\t\toptions?: Partial<FileSystemConfigLoaderOptions>,\n\t);\n\n\tpublic constructor(...args: ConstructorParameters) {\n\t\tif (hasResolver(args)) {\n\t\t\t/* istanbul ignore next */\n\t\t\tconst [resolvers, config, options = {}] = args;\n\t\t\tsuper(resolvers, config);\n\t\t\tthis.fs = /* istanbul ignore next */ options.fs ?? fs;\n\t\t} else {\n\t\t\t/* istanbul ignore next */\n\t\t\tconst [config, options = {}] = args;\n\t\t\tsuper(defaultResolvers, config);\n\t\t\tthis.fs = /* istanbul ignore next */ options.fs ?? fs;\n\t\t}\n\t\tthis.cache = new Map();\n\t}\n\n\t/**\n\t * Get configuration for given filename.\n\t *\n\t * @param filename - Filename to get configuration for.\n\t * @param configOverride - Configuration to merge final result with.\n\t */\n\tpublic override getConfigFor(\n\t\tfilename: string,\n\t\tconfigOverride?: ConfigData,\n\t): ResolvedConfig | Promise<ResolvedConfig> {\n\t\tconst override = this.loadFromObject(configOverride ?? {});\n\t\tif (isThenable(override)) {\n\t\t\treturn override.then((override) => {\n\t\t\t\treturn this._resolveAsync(filename, override);\n\t\t\t});\n\t\t} else {\n\t\t\treturn this._resolveSync1(filename, override);\n\t\t}\n\t}\n\n\t/**\n\t * Flush configuration cache.\n\t *\n\t * @param filename - If given only the cache for that file is flushed.\n\t */\n\tpublic override flushCache(filename?: string): void {\n\t\tif (filename) {\n\t\t\tthis.cache.delete(filename);\n\t\t} else {\n\t\t\tthis.cache.clear();\n\t\t}\n\t}\n\n\t/**\n\t * Load raw configuration from directory traversal.\n\t *\n\t * This configuration is not merged with global configuration and may return\n\t * `null` if no configuration files are found.\n\t */\n\tpublic fromFilename(filename: string): Config | Promise<Config | null> | null {\n\t\tif (filename === \"inline\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst cache = this.cache.get(filename);\n\t\tif (cache) {\n\t\t\treturn cache;\n\t\t}\n\n\t\tlet found = false;\n\t\tlet current = path.resolve(path.dirname(filename));\n\t\tlet config = this.empty();\n\n\t\t// eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition -- it will break out when filesystem is traversed\n\t\twhile (true) {\n\t\t\t/* search configuration files in current directory */\n\t\t\tfor (const configFile of findConfigurationFiles(this.fs, current)) {\n\t\t\t\tconst local = this.loadFromFile(configFile);\n\n\t\t\t\t/* if the loader returns an async config we exit out of the synchronous\n\t\t\t\t * processing and enter the async method so we can resolve any promises\n\t\t\t\t * as we go */\n\t\t\t\tif (isThenable(local)) {\n\t\t\t\t\treturn this.fromFilenameAsync(filename);\n\t\t\t\t}\n\n\t\t\t\tfound = true;\n\t\t\t\tconfig = local.merge(this.resolvers, config);\n\t\t\t}\n\n\t\t\t/* stop if a configuration with \"root\" is set to true */\n\t\t\tif (config.isRootFound()) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t/* get the parent directory */\n\t\t\tconst child = current;\n\t\t\tcurrent = path.dirname(current);\n\n\t\t\t/* stop if this is the root directory */\n\t\t\tif (current === child) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t/* no config was found by loader, return null and let caller decide what to do */\n\t\tif (!found) {\n\t\t\tthis.cache.set(filename, null);\n\t\t\treturn null;\n\t\t}\n\n\t\tthis.cache.set(filename, config);\n\t\treturn config;\n\t}\n\n\t/**\n\t * Async version of [[fromFilename]].\n\t *\n\t * @internal\n\t */\n\tpublic async fromFilenameAsync(filename: string): Promise<Config | null> {\n\t\tif (filename === \"inline\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst cache = this.cache.get(filename);\n\t\tif (cache) {\n\t\t\treturn cache;\n\t\t}\n\n\t\tlet found = false;\n\t\tlet current = path.resolve(path.dirname(filename));\n\t\tlet config = this.empty();\n\n\t\t// eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition -- it will break out when filesystem is traversed\n\t\twhile (true) {\n\t\t\t/* search configuration files in current directory */\n\t\t\tfor (const configFile of findConfigurationFiles(this.fs, current)) {\n\t\t\t\tconst local = await this.loadFromFile(configFile);\n\t\t\t\tfound = true;\n\t\t\t\tconfig = local.merge(this.resolvers, config);\n\t\t\t}\n\n\t\t\t/* stop if a configuration with \"root\" is set to true */\n\t\t\tif (config.isRootFound()) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t/* get the parent directory */\n\t\t\tconst child = current;\n\t\t\tcurrent = path.dirname(current);\n\n\t\t\t/* stop if this is the root directory */\n\t\t\tif (current === child) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t/* no config was found by loader, return null and let caller decide what to do */\n\t\tif (!found) {\n\t\t\tthis.cache.set(filename, null);\n\t\t\treturn null;\n\t\t}\n\n\t\tthis.cache.set(filename, config);\n\t\treturn config;\n\t}\n\n\tprivate _merge(\n\t\tglobalConfig: Config,\n\t\toverride: Config,\n\t\tconfig: Config | null,\n\t): ResolvedConfig | Promise<ResolvedConfig> {\n\t\tconst merged = config\n\t\t\t? config.merge(this.resolvers, override)\n\t\t\t: globalConfig.merge(this.resolvers, override);\n\t\treturn merged.resolve();\n\t}\n\n\tprivate _resolveSync1(\n\t\tfilename: string,\n\t\toverride: Config,\n\t): ResolvedConfig | Promise<ResolvedConfig> {\n\t\tif (override.isRootFound()) {\n\t\t\treturn override.resolve();\n\t\t}\n\n\t\tconst globalConfig = this.getGlobalConfig();\n\t\tif (isThenable(globalConfig)) {\n\t\t\treturn globalConfig.then((globalConfig) => {\n\t\t\t\treturn this._resolveSync2(filename, override, globalConfig);\n\t\t\t});\n\t\t} else {\n\t\t\treturn this._resolveSync2(filename, override, globalConfig);\n\t\t}\n\t}\n\n\tprivate _resolveSync2(\n\t\tfilename: string,\n\t\toverride: Config,\n\t\tglobalConfig: Config,\n\t): ResolvedConfig | Promise<ResolvedConfig> {\n\t\t/* special case when the global configuration is marked as root, should not\n\t\t * try to load and more configuration files */\n\t\tif (globalConfig.isRootFound()) {\n\t\t\tconst merged = globalConfig.merge(this.resolvers, override);\n\t\t\treturn merged.resolve();\n\t\t}\n\n\t\tconst config = this.fromFilename(filename);\n\t\tif (isThenable(config)) {\n\t\t\treturn config.then((config) => {\n\t\t\t\treturn this._merge(globalConfig, override, config);\n\t\t\t});\n\t\t} else {\n\t\t\treturn this._merge(globalConfig, override, config);\n\t\t}\n\t}\n\n\tprivate async _resolveAsync(filename: string, override: Config): Promise<ResolvedConfig> {\n\t\tif (override.isRootFound()) {\n\t\t\treturn override.resolve();\n\t\t}\n\n\t\tconst globalConfig = await this.getGlobalConfig();\n\n\t\t/* special case when the global configuration is marked as root, should not\n\t\t * try to load and more configuration files */\n\t\tif (globalConfig.isRootFound()) {\n\t\t\tconst merged = globalConfig.merge(this.resolvers, override);\n\t\t\treturn merged.resolve();\n\t\t}\n\n\t\tconst config = await this.fromFilenameAsync(filename);\n\t\treturn this._merge(globalConfig, override, config);\n\t}\n\n\t/**\n\t * @internal For testing only\n\t */\n\tpublic _getInternalCache(): Map<string, Config | null> {\n\t\treturn this.cache;\n\t}\n\n\tprotected defaultConfig(): Config | Promise<Config> {\n\t\treturn Config.defaultConfig();\n\t}\n}\n","import kleur from \"kleur\";\nimport { version } from \"../generated/package\";\nimport { type CompatibilityOptions, compatibilityCheckImpl } from \"./compatibility-check\";\n\nconst defaults: CompatibilityOptions = {\n\tsilent: false,\n\tversion,\n\tlogger(text: string): void {\n\t\t/* eslint-disable-next-line no-console -- expected to log */\n\t\tconsole.error(kleur.red(text));\n\t},\n};\n\n/**\n * Tests if plugin is compatible with html-validate library. Unless the `silent`\n * option is used a warning is displayed on the console.\n *\n * @public\n * @since v5.0.0\n * @param name - Name of plugin\n * @param declared - What library versions the plugin support (e.g. declared peerDependencies)\n * @returns - `true` if version is compatible\n */\nexport function compatibilityCheck(\n\tname: string,\n\tdeclared: string,\n\toptions?: Partial<CompatibilityOptions>,\n): boolean {\n\treturn compatibilityCheckImpl(name, declared, {\n\t\t...defaults,\n\t\t...options,\n\t});\n}\n"],"names":["fs","isRequireError","isTransformer","options","override","globalConfig","config"],"mappings":"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"}