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.
- package/README.md +2 -0
- package/dist/cjs/browser.js +2 -2
- package/dist/cjs/cli.js +58 -46
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/core-browser.js.map +1 -1
- package/dist/cjs/core-nodejs.js +114 -25
- package/dist/cjs/core-nodejs.js.map +1 -1
- package/dist/cjs/core.js +7869 -7394
- package/dist/cjs/core.js.map +1 -1
- package/dist/cjs/elements.js +2 -2
- package/dist/cjs/elements.js.map +1 -1
- package/dist/cjs/html-validate.js +68 -51
- package/dist/cjs/html-validate.js.map +1 -1
- package/dist/cjs/index.js +5 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/jest-diff.js +6 -7
- package/dist/cjs/jest-diff.js.map +1 -1
- package/dist/cjs/jest.js +2 -2
- package/dist/cjs/jest.js.map +1 -1
- package/dist/cjs/matcher-utils.js.map +1 -1
- package/dist/cjs/matchers-jestonly.js.map +1 -1
- package/dist/cjs/matchers.js.map +1 -1
- package/dist/cjs/meta-helper.js.map +1 -1
- package/dist/cjs/test-utils.js +3 -2
- package/dist/cjs/test-utils.js.map +1 -1
- package/dist/cjs/tsdoc-metadata.json +1 -1
- package/dist/cjs/utils/natural-join.js.map +1 -1
- package/dist/cjs/vitest.js +2 -2
- package/dist/cjs/vitest.js.map +1 -1
- package/dist/es/browser.js +2 -2
- package/dist/es/cli.js +60 -48
- package/dist/es/cli.js.map +1 -1
- package/dist/es/core-browser.js.map +1 -1
- package/dist/es/core-nodejs.js +113 -26
- package/dist/es/core-nodejs.js.map +1 -1
- package/dist/es/core.js +7867 -7392
- package/dist/es/core.js.map +1 -1
- package/dist/es/elements.js +2 -2
- package/dist/es/elements.js.map +1 -1
- package/dist/es/html-validate.js +46 -29
- package/dist/es/html-validate.js.map +1 -1
- package/dist/es/index.js +5 -4
- package/dist/es/index.js.map +1 -1
- package/dist/es/jest-diff.js +6 -7
- package/dist/es/jest-diff.js.map +1 -1
- package/dist/es/jest.js +2 -2
- package/dist/es/jest.js.map +1 -1
- package/dist/es/matcher-utils.js.map +1 -1
- package/dist/es/matchers-jestonly.js.map +1 -1
- package/dist/es/matchers.js.map +1 -1
- package/dist/es/meta-helper.js.map +1 -1
- package/dist/es/test-utils.js +3 -2
- package/dist/es/test-utils.js.map +1 -1
- package/dist/es/utils/natural-join.js.map +1 -1
- package/dist/es/vitest.js +2 -2
- package/dist/es/vitest.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/dist/types/browser.d.ts +26 -84
- package/dist/types/index.d.ts +64 -95
- package/dist/types/test-utils.d.ts +4 -4
- package/package.json +9 -162
package/dist/cjs/core-nodejs.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var fs = require('node:fs');
|
|
3
|
+
var fs$1 = require('node:fs/promises');
|
|
4
4
|
var path = require('node:path');
|
|
5
5
|
var core = require('./core.js');
|
|
6
|
+
var fs = require('node:fs');
|
|
6
7
|
var kleur = require('kleur');
|
|
7
8
|
|
|
8
9
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
10
|
|
|
10
|
-
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
11
|
+
var fs__default$1 = /*#__PURE__*/_interopDefault(fs$1);
|
|
11
12
|
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
13
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
12
14
|
var kleur__default = /*#__PURE__*/_interopDefault(kleur);
|
|
13
15
|
|
|
14
16
|
function requireUncached(require, moduleId) {
|
|
15
17
|
const filename = require.resolve(moduleId);
|
|
16
18
|
const m = require.cache[filename];
|
|
17
|
-
if (m
|
|
19
|
+
if (m?.parent) {
|
|
18
20
|
const { parent } = m;
|
|
19
21
|
for (let i = parent.children.length - 1; i >= 0; i--) {
|
|
20
22
|
if (parent.children[i].id === filename) {
|
|
@@ -59,10 +61,10 @@ function expandRelativePath(value, { cwd }) {
|
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
63
|
|
|
62
|
-
function isRequireError(error) {
|
|
64
|
+
function isRequireError$1(error) {
|
|
63
65
|
return Boolean(error && typeof error === "object" && "code" in error);
|
|
64
66
|
}
|
|
65
|
-
function isTransformer(value) {
|
|
67
|
+
function isTransformer$1(value) {
|
|
66
68
|
return typeof value === "function";
|
|
67
69
|
}
|
|
68
70
|
function cjsResolver(options = {}) {
|
|
@@ -76,7 +78,7 @@ function cjsResolver(options = {}) {
|
|
|
76
78
|
return requireUncached(legacyRequire, moduleName);
|
|
77
79
|
}
|
|
78
80
|
} catch (err) {
|
|
79
|
-
if (isRequireError(err) && err.code === "MODULE_NOT_FOUND") {
|
|
81
|
+
if (isRequireError$1(err) && err.code === "MODULE_NOT_FOUND") {
|
|
80
82
|
return null;
|
|
81
83
|
}
|
|
82
84
|
throw err;
|
|
@@ -113,7 +115,7 @@ function cjsResolver(options = {}) {
|
|
|
113
115
|
if (!mod) {
|
|
114
116
|
return null;
|
|
115
117
|
}
|
|
116
|
-
if (isTransformer(mod)) {
|
|
118
|
+
if (isTransformer$1(mod)) {
|
|
117
119
|
return mod;
|
|
118
120
|
}
|
|
119
121
|
if (mod.transformer) {
|
|
@@ -129,26 +131,105 @@ function nodejsResolver(options = {}) {
|
|
|
129
131
|
return cjsResolver(options);
|
|
130
132
|
}
|
|
131
133
|
|
|
134
|
+
function isRequireError(error) {
|
|
135
|
+
return Boolean(error && typeof error === "object" && "code" in error);
|
|
136
|
+
}
|
|
137
|
+
function isTransformer(value) {
|
|
138
|
+
return typeof value === "function";
|
|
139
|
+
}
|
|
140
|
+
let cachebuster = 1;
|
|
141
|
+
function getModuleName(id, { cache, rootDir }) {
|
|
142
|
+
const moduleName = id.replace("<rootDir>", rootDir);
|
|
143
|
+
if (cache) {
|
|
144
|
+
return `${moduleName}?cachebuster=${String(cachebuster++)}`;
|
|
145
|
+
} else {
|
|
146
|
+
return moduleName;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function esmResolver(options = {}) {
|
|
150
|
+
const rootDir = options.rootDir ?? determineRootDir();
|
|
151
|
+
async function internalImport(id, { cache }) {
|
|
152
|
+
if (id.endsWith(".json")) {
|
|
153
|
+
const content = await fs__default$1.default.readFile(id, "utf-8");
|
|
154
|
+
return JSON.parse(content);
|
|
155
|
+
}
|
|
156
|
+
const moduleName = getModuleName(id, { cache, rootDir });
|
|
157
|
+
try {
|
|
158
|
+
const { default: defaultImport } = await import(moduleName);
|
|
159
|
+
if (!defaultImport) {
|
|
160
|
+
throw new core.UserError(`"${id}" does not have a default export`);
|
|
161
|
+
}
|
|
162
|
+
return defaultImport;
|
|
163
|
+
} catch (err) {
|
|
164
|
+
if (isRequireError(err) && err.code === "MODULE_NOT_FOUND") {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
throw err;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
name: "esm-resolver",
|
|
172
|
+
resolveElements(id, options2) {
|
|
173
|
+
return internalImport(id, options2);
|
|
174
|
+
},
|
|
175
|
+
async resolveConfig(id, options2) {
|
|
176
|
+
const configData = await internalImport(id, options2);
|
|
177
|
+
if (!configData) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
const cwd = path__default.default.dirname(id);
|
|
181
|
+
const expand = (value) => expandRelativePath(value, { cwd });
|
|
182
|
+
if (Array.isArray(configData.elements)) {
|
|
183
|
+
configData.elements = configData.elements.map(expand);
|
|
184
|
+
}
|
|
185
|
+
if (Array.isArray(configData.extends)) {
|
|
186
|
+
configData.extends = configData.extends.map(expand);
|
|
187
|
+
}
|
|
188
|
+
if (Array.isArray(configData.plugins)) {
|
|
189
|
+
configData.plugins = configData.plugins.map(expand);
|
|
190
|
+
}
|
|
191
|
+
return configData;
|
|
192
|
+
},
|
|
193
|
+
resolvePlugin(id, options2) {
|
|
194
|
+
return internalImport(id, options2);
|
|
195
|
+
},
|
|
196
|
+
async resolveTransformer(id, options2) {
|
|
197
|
+
const mod = await internalImport(id, options2);
|
|
198
|
+
if (!mod) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
if (isTransformer(mod)) {
|
|
202
|
+
return mod;
|
|
203
|
+
}
|
|
204
|
+
if (mod.transformer) {
|
|
205
|
+
throw new core.ConfigError(
|
|
206
|
+
`Module "${id}" is not a valid transformer. This looks like a plugin, did you forget to load the plugin first?`
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
throw new core.ConfigError(`Module "${id}" is not a valid transformer.`);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
132
214
|
function findConfigurationFiles(fs2, directory) {
|
|
133
|
-
return ["json", "cjs", "js"].map((extension) => path__default.default.join(directory, `.htmlvalidate.${extension}`)).filter((filePath) => fs2.existsSync(filePath));
|
|
215
|
+
return ["json", "mjs", "cjs", "js"].map((extension) => path__default.default.join(directory, `.htmlvalidate.${extension}`)).filter((filePath) => fs2.existsSync(filePath));
|
|
134
216
|
}
|
|
135
217
|
const defaultResolvers = [cjsResolver()];
|
|
136
218
|
function hasResolver(value) {
|
|
137
219
|
return Array.isArray(value[0]);
|
|
138
220
|
}
|
|
139
221
|
class FileSystemConfigLoader extends core.ConfigLoader {
|
|
222
|
+
cache;
|
|
223
|
+
fs;
|
|
140
224
|
constructor(...args) {
|
|
141
|
-
var __super = (...args) => {
|
|
142
|
-
super(...args);
|
|
143
|
-
};
|
|
144
225
|
if (hasResolver(args)) {
|
|
145
226
|
const [resolvers, config, options = {}] = args;
|
|
146
|
-
|
|
227
|
+
super(resolvers, config);
|
|
147
228
|
this.fs = /* istanbul ignore next */
|
|
148
229
|
options.fs ?? fs__default.default;
|
|
149
230
|
} else {
|
|
150
231
|
const [config, options = {}] = args;
|
|
151
|
-
|
|
232
|
+
super(defaultResolvers, config);
|
|
152
233
|
this.fs = /* istanbul ignore next */
|
|
153
234
|
options.fs ?? fs__default.default;
|
|
154
235
|
}
|
|
@@ -167,7 +248,7 @@ class FileSystemConfigLoader extends core.ConfigLoader {
|
|
|
167
248
|
return this._resolveAsync(filename, override2);
|
|
168
249
|
});
|
|
169
250
|
} else {
|
|
170
|
-
return this.
|
|
251
|
+
return this._resolveSync1(filename, override);
|
|
171
252
|
}
|
|
172
253
|
}
|
|
173
254
|
/**
|
|
@@ -262,41 +343,48 @@ class FileSystemConfigLoader extends core.ConfigLoader {
|
|
|
262
343
|
this.cache.set(filename, config);
|
|
263
344
|
return config;
|
|
264
345
|
}
|
|
265
|
-
|
|
346
|
+
_merge(globalConfig, override, config) {
|
|
266
347
|
const merged = config ? config.merge(this.resolvers, override) : globalConfig.merge(this.resolvers, override);
|
|
267
|
-
merged.init();
|
|
268
348
|
return merged.resolve();
|
|
269
349
|
}
|
|
270
|
-
|
|
350
|
+
_resolveSync1(filename, override) {
|
|
271
351
|
if (override.isRootFound()) {
|
|
272
|
-
override.init();
|
|
273
352
|
return override.resolve();
|
|
274
353
|
}
|
|
275
|
-
const globalConfig = this.
|
|
354
|
+
const globalConfig = this.getGlobalConfig();
|
|
355
|
+
if (core.isThenable(globalConfig)) {
|
|
356
|
+
return globalConfig.then((globalConfig2) => {
|
|
357
|
+
return this._resolveSync2(filename, override, globalConfig2);
|
|
358
|
+
});
|
|
359
|
+
} else {
|
|
360
|
+
return this._resolveSync2(filename, override, globalConfig);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
_resolveSync2(filename, override, globalConfig) {
|
|
276
364
|
if (globalConfig.isRootFound()) {
|
|
277
365
|
const merged = globalConfig.merge(this.resolvers, override);
|
|
278
|
-
merged.init();
|
|
279
366
|
return merged.resolve();
|
|
280
367
|
}
|
|
281
368
|
const config = this.fromFilename(filename);
|
|
282
369
|
if (core.isThenable(config)) {
|
|
283
|
-
|
|
370
|
+
return config.then((config2) => {
|
|
371
|
+
return this._merge(globalConfig, override, config2);
|
|
372
|
+
});
|
|
373
|
+
} else {
|
|
374
|
+
return this._merge(globalConfig, override, config);
|
|
284
375
|
}
|
|
285
|
-
return this._mergeSync(globalConfig, override, config);
|
|
286
376
|
}
|
|
287
377
|
async _resolveAsync(filename, override) {
|
|
288
378
|
if (override.isRootFound()) {
|
|
289
|
-
override.init();
|
|
290
379
|
return override.resolve();
|
|
291
380
|
}
|
|
292
381
|
const globalConfig = await this.getGlobalConfig();
|
|
293
382
|
if (globalConfig.isRootFound()) {
|
|
294
383
|
const merged = globalConfig.merge(this.resolvers, override);
|
|
295
|
-
merged.init();
|
|
296
384
|
return merged.resolve();
|
|
297
385
|
}
|
|
298
386
|
const config = await this.fromFilenameAsync(filename);
|
|
299
|
-
return this.
|
|
387
|
+
return this._merge(globalConfig, override, config);
|
|
300
388
|
}
|
|
301
389
|
/**
|
|
302
390
|
* @internal For testing only
|
|
@@ -326,6 +414,7 @@ function compatibilityCheck(name, declared, options) {
|
|
|
326
414
|
exports.FileSystemConfigLoader = FileSystemConfigLoader;
|
|
327
415
|
exports.cjsResolver = cjsResolver;
|
|
328
416
|
exports.compatibilityCheck = compatibilityCheck;
|
|
417
|
+
exports.esmResolver = esmResolver;
|
|
329
418
|
exports.legacyRequire = legacyRequire;
|
|
330
419
|
exports.nodejsResolver = nodejsResolver;
|
|
331
420
|
//# 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","path","options","ConfigError","ConfigLoader","isThenable","override","UserError","Config","version","kleur","compatibilityCheckImpl"],"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","path","isRequireError","isTransformer","options","ConfigError","UserError","ConfigLoader","isThenable","override","globalConfig","config","Config","version","kleur","compatibilityCheckImpl"],"mappings":"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"}
|