From 5520b559b7fb5153d02efa8bd3fb98adb1d97a66 Mon Sep 17 00:00:00 2001 From: David Anson Date: Sun, 15 Dec 2024 23:07:05 -0800 Subject: [PATCH] Use import() only (no more require()) when loading modules for custom rules, plugins, output formatters, and configuration. --- markdownlint-cli2.mjs | 138 +++++++++--------- package.json | 4 +- resolve-and-require.mjs | 17 --- resolve-module.mjs | 16 ++ .../dir/subdir/.markdownlint-cli2.jsonc | 2 +- .../customRules/dir2/.markdownlint-cli2.jsonc | 2 +- .../customRules/dir3/.markdownlint-cli2.jsonc | 2 +- test/customRules/dir4/.markdownlint-cli2.mjs | 4 + test/markdownlint-cli2-test-cases.mjs | 36 ++--- test/markdownlint-cli2-test-exec.mjs | 4 +- test/markdownlint-cli2-test-fs.mjs | 6 +- test/markdownlint-cli2-test-main.mjs | 6 +- test/markdownlint-cli2-test.mjs | 14 +- .../.markdownlint-cli2.jsonc | 2 + ...quire-test.mjs => resolve-module-test.mjs} | 38 ++--- .../markdownlint-cli2-test-exec.mjs.md | 13 +- .../markdownlint-cli2-test-exec.mjs.snap | Bin 18507 -> 18546 bytes .../markdownlint-cli2-test-main.mjs.md | 13 +- .../markdownlint-cli2-test-main.mjs.snap | Bin 14366 -> 14403 bytes 19 files changed, 168 insertions(+), 149 deletions(-) delete mode 100644 resolve-and-require.mjs create mode 100644 resolve-module.mjs rename test/{resolve-and-require-test.mjs => resolve-module-test.mjs} (63%) diff --git a/markdownlint-cli2.mjs b/markdownlint-cli2.mjs index 46c3cb72..f3d046d9 100755 --- a/markdownlint-cli2.mjs +++ b/markdownlint-cli2.mjs @@ -1,6 +1,6 @@ // @ts-ignore -// Requires +// Imports import fsNode from "node:fs"; import { createRequire } from "node:module"; const dynamicRequire = createRequire(import.meta.url); @@ -15,7 +15,7 @@ import { lint, extendConfig, readConfig } from "markdownlint/promise"; import { expandTildePath } from "markdownlint/helpers"; import appendToArray from "./append-to-array.mjs"; import mergeOptions from "./merge-options.mjs"; -import resolveAndRequire from "./resolve-and-require.mjs"; +import resolveModule from "./resolve-module.mjs"; import parsers from "./parsers/parsers.mjs"; import jsoncParse from "./parsers/jsonc-parse.mjs"; import yamlParse from "./parsers/yaml-parse.mjs"; @@ -65,73 +65,65 @@ const readConfigFile = (fs, dir, name, otherwise) => () => { ); }; -// Import or resolve/require a module ID with a custom directory in the path -const importOrRequireResolve = async (dirOrDirs, id, noRequire) => { - if (typeof id === "string") { - if (noRequire) { - return null; - } - const dirs = Array.isArray(dirOrDirs) ? dirOrDirs : [ dirOrDirs ]; - const expandId = expandTildePath(id, os); - const errors = []; - // Try to load via require(...) - try { - const isModule = /\.mjs$/iu.test(expandId); - if (!isModule) { - // Try not to use require for modules due to breaking change in Node 22.12: - // https://github.com/nodejs/node/releases/tag/v22.12.0 - return resolveAndRequire(dynamicRequire, expandId, dirs); - } - } catch (error) { - errors.push(error); - } - // Try to load via import(...) +// Import a module ID with a custom directory in the path +const importModule = async (dirOrDirs, id, noImport) => { + if (typeof id !== "string") { + return id; + } else if (noImport) { + return null; + } + const dirs = Array.isArray(dirOrDirs) ? dirOrDirs : [ dirOrDirs ]; + const expandId = expandTildePath(id, os); + const errors = []; + let moduleName = null; + try { try { - // eslint-disable-next-line n/no-unsupported-features/node-builtins - const isURL = !pathDefault.isAbsolute(expandId) && URL.canParse(expandId); - const urlString = ( - isURL ? new URL(expandId) : pathToFileURL(pathDefault.resolve(dirs[0], expandId)) - ).toString(); - // eslint-disable-next-line no-inline-comments - const module = await import(/* webpackIgnore: true */ urlString); - return module.default; + moduleName = pathToFileURL(resolveModule(dynamicRequire, expandId, dirs)); } catch (error) { errors.push(error); + moduleName = + // eslint-disable-next-line n/no-unsupported-features/node-builtins + (!pathDefault.isAbsolute(expandId) && URL.canParse(expandId)) + ? new URL(expandId) + : pathToFileURL(pathDefault.resolve(dirs[0], expandId)); } - // Give up + // eslint-disable-next-line no-inline-comments + const module = await import(/* webpackIgnore: true */ moduleName); + return module.default; + } catch (error) { + errors.push(error); throw new AggregateError( errors, - `Unable to require or import module '${id}'.` + `Unable to import module '${id}'.` ); } - return id; }; -// Import or require an array of modules by ID -const importOrRequireIds = (dirs, ids, noRequire) => ( +// Import an array of modules by ID +const importModuleIds = (dirs, ids, noImport) => ( Promise.all( ids.map( - (id) => importOrRequireResolve(dirs, id, noRequire) + (id) => importModule(dirs, id, noImport) ) ).then((results) => results.filter(Boolean)) ); -// Import or require an array of modules by ID (preserving parameters) -const importOrRequireIdsAndParams = (dirs, idsAndParams, noRequire) => ( +// Import an array of modules by ID (preserving parameters) +const importModuleIdsAndParams = (dirs, idsAndParams, noImport) => ( Promise.all( idsAndParams.map( - (idAndParams) => importOrRequireResolve(dirs, idAndParams[0], noRequire). + (idAndParams) => importModule(dirs, idAndParams[0], noImport). then((module) => module && [ module, ...idAndParams.slice(1) ]) ) ).then((results) => results.filter(Boolean)) ); -// Import or require a JavaScript file and return the exported object -const importOrRequireConfig = (fs, dir, name, noRequire, otherwise) => () => { +// Import a JavaScript file and return the exported object +const importConfig = (fs, dir, name, noImport, otherwise) => () => { const file = pathPosix.join(dir, name); return fs.promises.access(file). then( - () => importOrRequireResolve(dir, name, noRequire), + () => importModule(dir, name, noImport), otherwise ); }; @@ -151,7 +143,7 @@ const getExtendedConfig = (config, configPath, fs) => { }; // Read an options or config file in any format and return the object -const readOptionsOrConfig = async (configPath, fs, noRequire) => { +const readOptionsOrConfig = async (configPath, fs, noImport) => { const basename = pathPosix.basename(configPath); const dirname = pathPosix.dirname(configPath); let options = null; @@ -165,7 +157,7 @@ const readOptionsOrConfig = async (configPath, fs, noRequire) => { basename.endsWith(".markdownlint-cli2.cjs") || basename.endsWith(".markdownlint-cli2.mjs") ) { - options = await importOrRequireResolve(dirname, basename, noRequire); + options = await importModule(dirname, basename, noImport); } else if ( basename.endsWith(".markdownlint.jsonc") || basename.endsWith(".markdownlint.json") || @@ -177,7 +169,7 @@ const readOptionsOrConfig = async (configPath, fs, noRequire) => { basename.endsWith(".markdownlint.cjs") || basename.endsWith(".markdownlint.mjs") ) { - config = await importOrRequireResolve(dirname, basename, noRequire); + config = await importModule(dirname, basename, noImport); } else { throw new Error( "File name should be (or end with) one of the supported types " + @@ -288,7 +280,7 @@ const getAndProcessDirInfo = ( dirToDirInfo, dir, relativeDir, - noRequire, + noImport, allowPackageJson ) => { // Create dirInfo @@ -322,10 +314,10 @@ const getAndProcessDirInfo = ( () => fs.promises.readFile(file, utf8).then(yamlParse), () => fs.promises.access(captureFile(markdownlintCli2Cjs)). then( - () => importOrRequireResolve(dir, file, noRequire), + () => importModule(dir, file, noImport), () => fs.promises.access(captureFile(markdownlintCli2Mjs)). then( - () => importOrRequireResolve(dir, file, noRequire), + () => importModule(dir, file, noImport), () => (allowPackageJson ? fs.promises.access(captureFile(packageJson)) // eslint-disable-next-line prefer-promise-reject-errors @@ -379,16 +371,16 @@ const getAndProcessDirInfo = ( fs, dir, ".markdownlint.yml", - importOrRequireConfig( + importConfig( fs, dir, ".markdownlint.cjs", - noRequire, - importOrRequireConfig( + noImport, + importConfig( fs, dir, ".markdownlint.mjs", - noRequire, + noImport, noop ) ) @@ -417,7 +409,7 @@ const getBaseOptions = async ( options, fixDefault, noGlobs, - noRequire + noImport ) => { const tasks = []; const dirToDirInfo = {}; @@ -427,7 +419,7 @@ const getBaseOptions = async ( dirToDirInfo, baseDir, relativeDir, - noRequire, + noImport, true ); await Promise.all(tasks); @@ -468,7 +460,7 @@ const enumerateFiles = async ( dirToDirInfo, gitignore, ignoreFiles, - noRequire + noImport ) => { const tasks = []; /** @type {import("globby").Options} */ @@ -536,7 +528,7 @@ const enumerateFiles = async ( dirToDirInfo, dir, null, - noRequire, + noImport, false ); dirInfo.files.push(file); @@ -549,7 +541,7 @@ const enumerateParents = async ( fs, baseDir, dirToDirInfo, - noRequire + noImport ) => { const tasks = []; @@ -578,7 +570,7 @@ const enumerateParents = async ( dirToDirInfo, dir, null, - noRequire, + noImport, false ); lastDirInfo.parent = dirInfo; @@ -603,7 +595,7 @@ const createDirInfos = async ( optionsOverride, gitignore, ignoreFiles, - noRequire + noImport ) => { await enumerateFiles( fs, @@ -613,13 +605,13 @@ const createDirInfos = async ( dirToDirInfo, gitignore, ignoreFiles, - noRequire + noImport ); await enumerateParents( fs, baseDir, dirToDirInfo, - noRequire + noImport ); // Merge file lists with identical configuration @@ -650,10 +642,10 @@ const createDirInfos = async ( ); if (markdownlintOptions && markdownlintOptions.customRules) { tasks.push( - importOrRequireIds( + importModuleIds( [ effectiveDir, ...effectiveModulePaths ], markdownlintOptions.customRules, - noRequire + noImport ).then((customRules) => { // Expand nested arrays (for packages that export multiple rules) markdownlintOptions.customRules = customRules.flat(); @@ -662,10 +654,10 @@ const createDirInfos = async ( } if (markdownlintOptions && markdownlintOptions.markdownItPlugins) { tasks.push( - importOrRequireIdsAndParams( + importModuleIdsAndParams( [ effectiveDir, ...effectiveModulePaths ], markdownlintOptions.markdownItPlugins, - noRequire + noImport ).then((markdownItPlugins) => { markdownlintOptions.markdownItPlugins = markdownItPlugins; }) @@ -858,7 +850,7 @@ const outputSummary = async ( modulePaths, logMessage, logError, - noRequire + noImport ) => { const errorsPresent = (summary.length > 0); if (errorsPresent || outputFormatters) { @@ -871,7 +863,7 @@ const outputSummary = async ( const dir = relativeDir || baseDir; const dirs = [ dir, ...modulePaths ]; const formattersAndParams = outputFormatters - ? await importOrRequireIdsAndParams(dirs, outputFormatters, noRequire) + ? await importModuleIdsAndParams(dirs, outputFormatters, noImport) // eslint-disable-next-line no-inline-comments, unicorn/no-await-expression-member : [ [ (await import(/* webpackMode: "eager" */ "markdownlint-cli2-formatter-default")).default ] ]; await Promise.all(formattersAndParams.map((formatterAndParams) => { @@ -891,7 +883,7 @@ export const main = async (params) => { optionsDefault, optionsOverride, fileContents, - noRequire, + noImport, allowStdin } = params; let { @@ -948,7 +940,7 @@ export const main = async (params) => { const resolvedConfigPath = posixPath(pathDefault.resolve(baseDirSystem, configPath)); optionsArgv = - await readOptionsOrConfig(resolvedConfigPath, fs, noRequire); + await readOptionsOrConfig(resolvedConfigPath, fs, noImport); relativeDir = pathPosix.dirname(resolvedConfigPath); } // Process arguments and get base options @@ -961,7 +953,7 @@ export const main = async (params) => { optionsArgv || optionsDefault, fixDefault, noGlobs, - noRequire + noImport ); } finally { if (!baseOptions?.baseMarkdownlintOptions.noBanner) { @@ -1020,7 +1012,7 @@ export const main = async (params) => { optionsOverride, gitignore, ignoreFiles, - noRequire + noImport ); // Output linting status if (showProgress) { @@ -1058,7 +1050,7 @@ export const main = async (params) => { modulePaths, logMessage, logError, - noRequire + noImport ); // Return result return errorsPresent ? 1 : 0; diff --git a/package.json b/package.json index 700dfa10..b7e4cf7f 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "playwright-test": "playwright test --config ./webworker/playwright.config.mjs", "playwright-test-docker": "docker run --rm --volume $PWD:/home/workdir --workdir /home/workdir --ipc=host mcr.microsoft.com/playwright:v1.49.1 npm run playwright-test", "schema": "cpy ./node_modules/markdownlint/schema/markdownlint-config-schema.json ./schema --flat", - "test": "ava --timeout=1m test/append-to-array-test.mjs test/fs-mock-test.mjs test/fs-virtual-test.mjs test/markdownlint-cli2-test.mjs test/markdownlint-cli2-test-exec.mjs test/markdownlint-cli2-test-exports.mjs test/markdownlint-cli2-test-fs.mjs test/markdownlint-cli2-test-main.mjs test/merge-options-test.mjs test/resolve-and-require-test.mjs", + "test": "ava --timeout=1m test/append-to-array-test.mjs test/fs-mock-test.mjs test/fs-virtual-test.mjs test/markdownlint-cli2-test.mjs test/markdownlint-cli2-test-exec.mjs test/markdownlint-cli2-test-exports.mjs test/markdownlint-cli2-test-fs.mjs test/markdownlint-cli2-test-main.mjs test/merge-options-test.mjs test/resolve-module-test.mjs", "test-cover": "c8 --100 npm test", "test-docker-hub-image": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker image rm davidanson/markdownlint-cli2:v$VERSION davidanson/markdownlint-cli2:latest || true && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2:v$VERSION \"*.md\" && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2:latest \"*.md\"", "test-docker-hub-image-rules": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker image rm davidanson/markdownlint-cli2-rules:v$VERSION davidanson/markdownlint-cli2-rules:latest || true && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2-rules:v$VERSION \"*.md\" && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2-rules:latest \"*.md\"", @@ -68,7 +68,7 @@ "parsers/jsonc-parse.mjs", "parsers/yaml-parse.mjs", "README.md", - "resolve-and-require.mjs", + "resolve-module.mjs", "schema/markdownlint-cli2-config-schema.json", "schema/markdownlint-config-schema.json", "schema/ValidatingConfiguration.md" diff --git a/resolve-and-require.mjs b/resolve-and-require.mjs deleted file mode 100644 index 8650ee2e..00000000 --- a/resolve-and-require.mjs +++ /dev/null @@ -1,17 +0,0 @@ -// @ts-check - -/** - * Wrapper for calling Node's require.resolve/require with an additional path. - * @param {object} req Node's require implementation (or equivalent). - * @param {string} id Package identifier to require. - * @param {string[]} dirs Directories to include when resolving paths. - * @returns {object} Exported module content. - */ -const resolveAndRequire = (req, id, dirs) => { - const resolvePaths = req.resolve.paths ? req.resolve.paths("") : []; - const paths = [ ...dirs, ...resolvePaths ]; - const resolved = req.resolve(id, { paths }); - return req(resolved); -}; - -export default resolveAndRequire; diff --git a/resolve-module.mjs b/resolve-module.mjs new file mode 100644 index 00000000..13c87ac5 --- /dev/null +++ b/resolve-module.mjs @@ -0,0 +1,16 @@ +// @ts-check + +/** + * Wrapper for calling Node's require.resolve with additional paths. + * @param {object} require Node's require implementation (or equivalent). + * @param {string} request Module path to require. + * @param {string[]} paths Paths to resolve module location from. + * @returns {string} Resolved file name. + */ +const resolveModule = (require, request, paths) => { + const resolvePaths = require.resolve.paths ? require.resolve.paths("") : []; + const allPaths = [ ...paths, ...resolvePaths ]; + return require.resolve(request, { "paths": allPaths }); +}; + +export default resolveModule; diff --git a/test/customRules/dir/subdir/.markdownlint-cli2.jsonc b/test/customRules/dir/subdir/.markdownlint-cli2.jsonc index 66c3cb4b..5bb6868d 100644 --- a/test/customRules/dir/subdir/.markdownlint-cli2.jsonc +++ b/test/customRules/dir/subdir/.markdownlint-cli2.jsonc @@ -1,7 +1,7 @@ { "customRules": [ "../../rules/first-line.cjs", - "../../node_modules/markdownlint-rule-sample-commonjs", + "../../node_modules/markdownlint-rule-sample-commonjs/sample-rule.cjs", "../../node_modules/markdownlint-rule-sample-module/sample-rule.mjs", "markdownlint-rule-extended-ascii" ] diff --git a/test/customRules/dir2/.markdownlint-cli2.jsonc b/test/customRules/dir2/.markdownlint-cli2.jsonc index 8a668d71..9c7b3fec 100644 --- a/test/customRules/dir2/.markdownlint-cli2.jsonc +++ b/test/customRules/dir2/.markdownlint-cli2.jsonc @@ -1,6 +1,6 @@ { "customRules": [ "markdownlint-rule-sample-commonjs", - "../node_modules/markdownlint-rule-sample-module/sample-rule.mjs" + "markdownlint-rule-sample-module" ] } diff --git a/test/customRules/dir3/.markdownlint-cli2.jsonc b/test/customRules/dir3/.markdownlint-cli2.jsonc index e9a71c6c..a931ee9b 100644 --- a/test/customRules/dir3/.markdownlint-cli2.jsonc +++ b/test/customRules/dir3/.markdownlint-cli2.jsonc @@ -2,6 +2,6 @@ "customRules": [ "../rules/all-rules.cjs", "../node_modules/markdownlint-rule-sample-commonjs", - "../node_modules/markdownlint-rule-sample-module/sample-rule.mjs" + "../node_modules/markdownlint-rule-sample-module" ] } diff --git a/test/customRules/dir4/.markdownlint-cli2.mjs b/test/customRules/dir4/.markdownlint-cli2.mjs index f3d232e0..06e30e27 100644 --- a/test/customRules/dir4/.markdownlint-cli2.mjs +++ b/test/customRules/dir4/.markdownlint-cli2.mjs @@ -2,6 +2,10 @@ const options = { "customRules": [ + (new URL( + "../node_modules/markdownlint-rule-sample-commonjs/sample-rule.cjs", + import.meta.url + )).toString(), (new URL( "../node_modules/markdownlint-rule-sample-module/sample-rule.mjs", import.meta.url diff --git a/test/markdownlint-cli2-test-cases.mjs b/test/markdownlint-cli2-test-cases.mjs index ac654fac..41f1c50b 100644 --- a/test/markdownlint-cli2-test-cases.mjs +++ b/test/markdownlint-cli2-test-cases.mjs @@ -19,7 +19,7 @@ const testCases = ({ host, invoke, absolute, - includeNoRequire, + includeNoImport, includeEnv, includeScript, includeRequire, @@ -38,7 +38,7 @@ const testCases = ({ stderrRe, pre, post, - noRequire, + noImport, usesRequire } = options; const usesEnv = Boolean(env); @@ -46,7 +46,7 @@ const testCases = ({ // eslint-disable-next-line unicorn/no-array-callback-reference const usesAbsolute = args.some(path.isAbsolute); if ( - (noRequire && !includeNoRequire) || + (noImport && !includeNoImport) || (usesEnv && !includeEnv) || (usesRequire && !includeRequire) || (usesScript && !includeScript) || @@ -58,7 +58,7 @@ const testCases = ({ t.plan(3); const directory = path.join(__dirname(import.meta), cwd || name); return ((pre || noop)(name, shadow) || Promise.resolve()). - then(invoke(directory, args, noRequire, env, script)). + then(invoke(directory, args, noImport, env, script)). then((result) => Promise.all([ result, fs.readFile( @@ -359,7 +359,7 @@ const testCases = ({ "name": "markdownlint-cjs-invalid", "args": [ ".*" ], "exitCode": 2, - "stderrRe": /Unable to require or import module '.*\.markdownlint\.cjs'/u, + "stderrRe": /Unable to import module '.*\.markdownlint\.cjs'/u, "usesRequire": true }); @@ -367,7 +367,7 @@ const testCases = ({ "name": "markdownlint-mjs-invalid", "args": [ ".*" ], "exitCode": 2, - "stderrRe": /Unable to require or import module '.*\.markdownlint\.mjs'/u, + "stderrRe": /Unable to import module '.*\.markdownlint\.mjs'/u, "usesRequire": true }); @@ -491,7 +491,7 @@ const testCases = ({ "name": "markdownlint-cli2-cjs-invalid", "args": [ ".*" ], "exitCode": 2, - "stderrRe": /'[^']*\.markdownlint-cli2\.cjs'.*Unable to require or import module '/u, + "stderrRe": /'[^']*\.markdownlint-cli2\.cjs'.*Unable to import module '/u, "usesRequire": true }); @@ -499,7 +499,7 @@ const testCases = ({ "name": "markdownlint-cli2-mjs-invalid", "args": [ ".*" ], "exitCode": 2, - "stderrRe": /'[^']*\.markdownlint-cli2\.mjs'.*Unable to require or import module '/u, + "stderrRe": /'[^']*\.markdownlint-cli2\.mjs'.*Unable to import module '/u, "usesRequire": true }); @@ -679,7 +679,7 @@ const testCases = ({ } const unableToParseJsonc = "Unable to parse JSONC content"; - const unableToRequireOrImport = "Unable to require or import module"; + const unableToRequireOrImport = "Unable to import module"; const invalidConfigFiles = [ [ "invalid.markdownlint-cli2.jsonc", unableToParseJsonc ], [ "invalid.markdownlint-cli2.cjs", unableToRequireOrImport ], @@ -813,7 +813,7 @@ const testCases = ({ "name": "customRules-missing", "args": [ ".*" ], "exitCode": 2, - "stderrRe": /Unable to require or import module 'missing-package'\./u, + "stderrRe": /Unable to import module 'missing-package'\./u, "usesRequire": true }); @@ -843,7 +843,7 @@ const testCases = ({ "name": "markdownItPlugins-missing", "args": [ ".*" ], "exitCode": 2, - "stderrRe": /Unable to require or import module 'missing-package'\./u, + "stderrRe": /Unable to import module 'missing-package'\./u, "usesRequire": true }); @@ -929,7 +929,7 @@ const testCases = ({ "name": "outputFormatters-missing", "args": [ ".*" ], "exitCode": 2, - "stderrRe": /Unable to require or import module 'missing-package'\./u, + "stderrRe": /Unable to import module 'missing-package'\./u, "usesRequire": true }); @@ -990,7 +990,7 @@ const testCases = ({ "args": [ "**/*.md" ], "exitCode": 1, "cwd": "markdownlint-cjs", - "noRequire": true + "noImport": true }); testCase({ @@ -998,7 +998,7 @@ const testCases = ({ "args": [ "**/*.md" ], "exitCode": 1, "cwd": "markdownlint-mjs", - "noRequire": true + "noImport": true }); testCase({ @@ -1006,7 +1006,7 @@ const testCases = ({ "args": [ "**/*.md" ], "exitCode": 1, "cwd": "markdownlint-cli2-cjs", - "noRequire": true + "noImport": true }); testCase({ @@ -1014,7 +1014,7 @@ const testCases = ({ "args": [ "**/*.md" ], "exitCode": 1, "cwd": "markdownlint-cli2-mjs", - "noRequire": true + "noImport": true }); testCase({ @@ -1022,7 +1022,7 @@ const testCases = ({ "args": [ "**/*.md" ], "exitCode": 1, "cwd": "customRules", - "noRequire": true + "noImport": true }); testCase({ @@ -1030,7 +1030,7 @@ const testCases = ({ "args": [ "**/*.md" ], "exitCode": 1, "cwd": "markdownItPlugins", - "noRequire": true + "noImport": true }); if (sameFileSystem) { diff --git a/test/markdownlint-cli2-test-exec.mjs b/test/markdownlint-cli2-test-exec.mjs index 25749219..bff481b2 100644 --- a/test/markdownlint-cli2-test-exec.mjs +++ b/test/markdownlint-cli2-test-exec.mjs @@ -10,7 +10,7 @@ import { __dirname } from "./esm-helpers.mjs"; const absolute = (rootDir, file) => path.join(rootDir, file); const repositoryPath = (name) => path.join(__dirname(import.meta), "..", name); -const invoke = (directory, args, noRequire, env, script) => async () => { +const invoke = (directory, args, noImport, env, script) => async () => { await fs.access(directory); return spawn( "node", @@ -34,7 +34,7 @@ testCases({ "host": "exec", invoke, absolute, - "includeNoRequire": false, + "includeNoImport": false, "includeEnv": true, "includeScript": true, "includeRequire": true, diff --git a/test/markdownlint-cli2-test-fs.mjs b/test/markdownlint-cli2-test-fs.mjs index 8306a1c2..8ca84531 100644 --- a/test/markdownlint-cli2-test-fs.mjs +++ b/test/markdownlint-cli2-test-fs.mjs @@ -9,7 +9,7 @@ const mockDirectory = "/mock"; const linesEndingWithNewLine = (lines) => lines.map((line) => `${line}\n`).join(""); -const invoke = (directory, args, noRequire) => () => { +const invoke = (directory, args, noImport) => () => { const stdouts = []; const stderrs = []; return markdownlintCli2({ @@ -17,7 +17,7 @@ const invoke = (directory, args, noRequire) => () => { "argv": args, "logMessage": (msg) => stdouts.push(msg), "logError": (msg) => stderrs.push(msg), - noRequire, + noImport, "fs": new FsMock(directory) }). then( @@ -40,7 +40,7 @@ testCases({ "host": "fs", invoke, absolute, - "includeNoRequire": true, + "includeNoImport": true, "includeEnv": false, "includeScript": false, "includeRequire": false, diff --git a/test/markdownlint-cli2-test-main.mjs b/test/markdownlint-cli2-test-main.mjs index 067e3bec..2f17c551 100644 --- a/test/markdownlint-cli2-test-main.mjs +++ b/test/markdownlint-cli2-test-main.mjs @@ -7,7 +7,7 @@ import testCases from "./markdownlint-cli2-test-cases.mjs"; const linesEndingWithNewLine = (lines) => lines.map((line) => `${line}\n`).join(""); -const invoke = (directory, args, noRequire) => () => { +const invoke = (directory, args, noImport) => () => { const stdouts = []; const stderrs = []; return markdownlintCli2({ @@ -15,7 +15,7 @@ const invoke = (directory, args, noRequire) => () => { "argv": args, "logMessage": (msg) => stdouts.push(msg), "logError": (msg) => stderrs.push(msg), - noRequire + noImport }). then( (exitCode) => exitCode, @@ -37,7 +37,7 @@ testCases({ "host": "main", invoke, absolute, - "includeNoRequire": true, + "includeNoImport": true, "includeEnv": false, "includeScript": false, "includeRequire": true, diff --git a/test/markdownlint-cli2-test.mjs b/test/markdownlint-cli2-test.mjs index 5e56419e..2f8dd6a9 100644 --- a/test/markdownlint-cli2-test.mjs +++ b/test/markdownlint-cli2-test.mjs @@ -475,7 +475,7 @@ test("custom fs, extension scenario for untitled", (t) => { writeFile } }, - "noRequire": true + "noImport": true }). then((exitCode) => { t.is(exitCode, 1); @@ -570,7 +570,7 @@ test("custom fs, using node:fs", (t) => { }); }); -test("custom fs, using node:fs and noRequire=false", (t) => { +test("custom fs, using node:fs and noImport=false", (t) => { t.plan(2); return markdownlintCli2({ "directory": "test/markdownlint-cjs", @@ -579,14 +579,14 @@ test("custom fs, using node:fs and noRequire=false", (t) => { "outputFormatters": [ [ outputFormatterLengthIs(t, 11) ] ] }, "fs": nodeFs, - "noRequire": false + "noImport": false }). then((exitCode) => { t.is(exitCode, 1); }); }); -test("custom fs, using node:fs and noRequire=true", (t) => { +test("custom fs, using node:fs and noImport=true", (t) => { t.plan(2); return markdownlintCli2({ "directory": "test/markdownlint-cjs", @@ -595,7 +595,7 @@ test("custom fs, using node:fs and noRequire=true", (t) => { "outputFormatters": [ [ outputFormatterLengthIs(t, 14) ] ] }, "fs": nodeFs, - "noRequire": true + "noImport": true }). then((exitCode) => { t.is(exitCode, 1); @@ -611,7 +611,7 @@ test("custom fs, using fsMock", (t) => { "outputFormatters": [ [ outputFormatterLengthIs(t, 10) ] ] }, "fs": new FsMock(path.join(__dirname(import.meta), "markdownlint-cli2-jsonc")), - "noRequire": true + "noImport": true }). then((exitCode) => { t.is(exitCode, 1); @@ -627,7 +627,7 @@ test("custom fs, using fsMock simulating symbolic links", (t) => { "outputFormatters": [ [ outputFormatterLengthIs(t, 10) ] ] }, "fs": new FsMock(path.join(__dirname(import.meta), "markdownlint-cli2-jsonc"), true), - "noRequire": true + "noImport": true }). then((exitCode) => { t.is(exitCode, 1); diff --git a/test/outputFormatters-module/.markdownlint-cli2.jsonc b/test/outputFormatters-module/.markdownlint-cli2.jsonc index f64f929a..3769a370 100644 --- a/test/outputFormatters-module/.markdownlint-cli2.jsonc +++ b/test/outputFormatters-module/.markdownlint-cli2.jsonc @@ -1,6 +1,8 @@ { "outputFormatters": [ [ "output-formatter-sample-commonjs" ], + [ "output-formatter-sample-module" ], + [ "./node_modules/output-formatter-sample-commonjs/sample-formatter.cjs" ], [ "./node_modules/output-formatter-sample-module/sample-formatter.mjs" ] ] } diff --git a/test/resolve-and-require-test.mjs b/test/resolve-module-test.mjs similarity index 63% rename from test/resolve-and-require-test.mjs rename to test/resolve-module-test.mjs index 54049592..2db0f549 100644 --- a/test/resolve-and-require-test.mjs +++ b/test/resolve-module-test.mjs @@ -3,7 +3,7 @@ import test from "ava"; import path from "node:path"; import { __dirname } from "./esm-helpers.mjs"; -import resolveAndRequire from "../resolve-and-require.mjs"; +import resolve from "../resolve-module.mjs"; import { createRequire } from "node:module"; const require = createRequire(import.meta.url); @@ -11,24 +11,24 @@ const require = createRequire(import.meta.url); test("built-in module", (t) => { t.plan(1); t.deepEqual( - require("node:fs"), - resolveAndRequire(require, "fs", [ __dirname(import.meta) ]) + require.resolve("node:fs"), + resolve(require, "node:fs", [ __dirname(import.meta) ]) ); }); test("locally-installed module", (t) => { t.plan(1); t.deepEqual( - require("micromatch"), - resolveAndRequire(require, "micromatch", [ __dirname(import.meta) ]) + require.resolve("micromatch"), + resolve(require, "micromatch", [ __dirname(import.meta) ]) ); }); test("relative (to __dirname(import.meta)) path to module", (t) => { t.plan(1); t.deepEqual( - require("./customRules/node_modules/markdownlint-rule-sample-commonjs"), - resolveAndRequire( + require.resolve("./customRules/node_modules/markdownlint-rule-sample-commonjs"), + resolve( require, "./customRules/node_modules/markdownlint-rule-sample-commonjs", [ __dirname(import.meta) ] @@ -40,12 +40,12 @@ test("module in alternate node_modules", (t) => { t.plan(2); t.throws( // @ts-ignore - () => require("markdownlint-rule-sample-commonjs"), + () => require.resolve("markdownlint-rule-sample-commonjs"), { "code": "MODULE_NOT_FOUND" } ); t.deepEqual( - require("./customRules/node_modules/markdownlint-rule-sample-commonjs"), - resolveAndRequire( + require.resolve("./customRules/node_modules/markdownlint-rule-sample-commonjs"), + resolve( require, "markdownlint-rule-sample-commonjs", [ path.join(__dirname(import.meta), "customRules") ] @@ -59,12 +59,12 @@ test("module in alternate node_modules and no require.resolve.paths", (t) => { delete require.resolve.paths; t.throws( // @ts-ignore - () => require("markdownlint-rule-sample-commonjs"), + () => require.resolve("markdownlint-rule-sample-commonjs"), { "code": "MODULE_NOT_FOUND" } ); t.deepEqual( - require("./customRules/node_modules/markdownlint-rule-sample-commonjs"), - resolveAndRequire( + require.resolve("./customRules/node_modules/markdownlint-rule-sample-commonjs"), + resolve( require, "markdownlint-rule-sample-commonjs", [ path.join(__dirname(import.meta), "customRules") ] @@ -79,20 +79,20 @@ test("module local, relative, and in alternate node_modules", (t) => { path.join(__dirname(import.meta), "customRules") ]; t.deepEqual( - require("micromatch"), - resolveAndRequire(require, "micromatch", dirs) + require.resolve("micromatch"), + resolve(require, "micromatch", dirs) ); t.deepEqual( - require("./customRules/node_modules/markdownlint-rule-sample-commonjs"), - resolveAndRequire( + require.resolve("./customRules/node_modules/markdownlint-rule-sample-commonjs"), + resolve( require, "./customRules/node_modules/markdownlint-rule-sample-commonjs", dirs ) ); t.deepEqual( - require("./customRules/node_modules/markdownlint-rule-sample-commonjs"), - resolveAndRequire( + require.resolve("./customRules/node_modules/markdownlint-rule-sample-commonjs"), + resolve( require, "markdownlint-rule-sample-commonjs", dirs diff --git a/test/snapshots/markdownlint-cli2-test-exec.mjs.md b/test/snapshots/markdownlint-cli2-test-exec.mjs.md index 8df1378b..314fb669 100644 --- a/test/snapshots/markdownlint-cli2-test-exec.mjs.md +++ b/test/snapshots/markdownlint-cli2-test-exec.mjs.md @@ -2726,6 +2726,7 @@ Generated by [AVA](https://avajs.dev). dir3/hr.md:2 second-line Rule that reports an error for the second line␊ dir3/hr.md:3 sample-rule-commonjs Sample rule (commonjs) [Sample error for hr]␊ dir3/hr.md:3 sample-rule-module Sample rule (module) [Sample error for hr]␊ + dir4/hr.md:3 sample-rule-commonjs Sample rule (commonjs) [Sample error for hr]␊ dir4/hr.md:3 sample-rule-module Sample rule (module) [Sample error for hr]␊ viewme.md:1 every-n-lines Rule that reports an error every N lines [This rule threw an exception: getLineMetadata is not a function]␊ viewme.md:1 first-line Rule that reports an error for the first line␊ @@ -2738,7 +2739,7 @@ Generated by [AVA](https://avajs.dev). stdout: `markdownlint-cli2 vX.Y.Z (markdownlint vX.Y.Z)␊ Finding: **/*.md␊ Linting: 9 file(s)␊ - Summary: 44 error(s)`, + Summary: 45 error(s)`, } ## customRules-pre-imported (exec) @@ -5705,6 +5706,16 @@ Generated by [AVA](https://avajs.dev). mjs: viewme.md 5 MD012/no-multiple-blanks␊ mjs: viewme.md 6 MD025/single-title/single-h1␊ mjs: viewme.md 12 MD019/no-multiple-space-atx␊ + mjs: viewme.md 14 MD047/single-trailing-newline␊ + cjs: viewme.md 3 MD009/no-trailing-spaces␊ + cjs: viewme.md 5 MD012/no-multiple-blanks␊ + cjs: viewme.md 6 MD025/single-title/single-h1␊ + cjs: viewme.md 12 MD019/no-multiple-space-atx␊ + cjs: viewme.md 14 MD047/single-trailing-newline␊ + mjs: viewme.md 3 MD009/no-trailing-spaces␊ + mjs: viewme.md 5 MD012/no-multiple-blanks␊ + mjs: viewme.md 6 MD025/single-title/single-h1␊ + mjs: viewme.md 12 MD019/no-multiple-space-atx␊ mjs: viewme.md 14 MD047/single-trailing-newline`, stdout: `markdownlint-cli2 vX.Y.Z (markdownlint vX.Y.Z)␊ Finding: **/*.md␊ diff --git a/test/snapshots/markdownlint-cli2-test-exec.mjs.snap b/test/snapshots/markdownlint-cli2-test-exec.mjs.snap index 3250a6be8e5943bf6094a1e60676be175317c74c..b09248bc12242a39b2b17fc62240e84880f83fba 100644 GIT binary patch delta 16994 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 delta 16994 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 Tl9?N-H~s$s<5j4Kk%a^RCS{( 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 z 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

Ooh^#oi9@TU(Kk!Wa-w-r?~c%M z4#qmAF)sS_xmE=Y)5NvMikUk5Vrz(sDiPb(7J?ewzNx%*F@y#mN71WtYd3<}G!*7j zCG}ijXlau;SmD|Et1i?z)(mCXV}H$QmEPx>gl(CuIS3?LENRRa%i)54eo$ORDj(^a zO6Dz?sU=DuHtfj7?H{wefS@*xdCtmG!DU8eLo%RLw9dY8aZrxOqWm}v=7aPayrr3z z#zTtVUL}n=Ohn7%jbzRfMf@43NcDBGaI>u|qBEmVD|6~UoGky%U68c$Zp?bgI+>F` ztIy@KMhq1BT6#^{vXP-E?L=3<7&}0pgV)jQmy~4niV&ng zAcBXYm!!bAg{_ikg;pK=MNViaJP3)bR+8D}aDbkRdh(OJ6v_W^Kw=qqT$6*0ihH6= z{=`wUU}Y*0aUrMGe_G?~F{+rCPPkT~zshTNH!3_KpS%wx{Vb}_bj<$CXtgq4x{p>s znA*A5DBXG3wuvD9|IxmC^*wX#vWAbH zlpz^D@%&WV4vs0%(dnbZ5cQhCdYXUTTf$FAI#mp@^`ffzw3XH*nM`)1^t|~Znx|86 zBH>!_cCzYb88mPWOMv;$A8t-fF?*{E+y@N~tvUVjc0ME*41#OWP87ErUQ$kk9k}Uz z3oYG(^s1lPuvVVj+tA`IikGFHV?Db<|LP}$z8yaazd4atcPjJ@YZwk2hBRw5IWOi7jF5V2%3LS?PRTm@n+w?fX-3o05lgpm!MllE< zCX-+k0Vz7`o8K6J|HwoLT0{^LN&}jj$;s+NvLW%! zxf})is9{>lulANh0WPK;GXBnnHI8#9!flkUrOg6p`_twdK9@ghPYkCOY%4gwUboAd z-3=bgHYUREhdpm_=d4vmV_`!+S~@^ZxDOmVn>N?KzuG1t(7Nqtr+AOhV^u-0yM)fp zU+?|Tv90uTjgh*$w*iN~(bU2_D^|fKgo|qqPRFAH{HqV&+=>ZPg_Y3l)0Ap2lj?48 zp)dRiF2cu?BFd9XYzXp#wdAdta{C3+WQ=qDX1Hv)?bAVHO+aspNlUM<`x5iG z>k}znngx5#Ngww1LfWy%+X|4AUviTcwN7<-7E6GZ6Sc7D1?hL9iQwT^sB^`?Fh?n} zO+V#xSvu|=_=GV?L<>XA&1mXd`;^h+_+LhzBaE1(C$PofUl*GqP>!TD_i1rz)9m+s zy*vmzw^t2~u4)W2;wtt-{3|^FoZL5A^sLwnQ!^;10{f@ex(U&>sntQ1?*?d5`W+qH zhA`0a^mpG!iRqB0#Ww4Z5(Top6ja@i?aB#Rt zqf+|-MvWe8&p<6V#AQxOr(NOSLf)y1#MKk)eQCP)*VPdSQ`v`;Qgjds-j>M=odN_k zm?c1dPtO>YoJ{uXv#X~3iuq6l=#?SQp2+*x^#go3bjJIJu%Hee#54nFEri*7c(W2o z5|8>MN%U3$ON3$fr3^YZ>*X;4$FG@E_PB&W9t+#}uOz7W=oZT&PoaET zdJDHyP0Xnf|E5#F0M3MG4UYf}nMJxSqLeYx!Nzp+S2Xte@23uu8)Rt0%2q#`)0^YZ zntt}rP;;k=-GI)X1Gg4s$MUHN(tpb` zUrWVui~JrL#{Ibo z{o2geAa}8CM(s0s z9-5ndh9@Cx;MqLoi>BPF>@f1-;NLs-g$W?x89Jps4bJZ;7g}>$*AMHa`J?}gk8;Gj za_ZaDJE+jWlwR3hf#I)?X_g@VEh(T1IQz{QbZdn;-9LR_$NJ_Or2651FoIM-7qO$5 z%02VGj}9A_$y72ZOgxZG=D&ED6{@3xnVD4LX@4xJh#rF;MCp=@34idxzIw-y4VQqEnYSz`fhXv2s{E@OgPg_iugkd& zI)vPyFbjOH6;!7VJ3$V2>shIsY7Y)NNN%O9DOsgWszBT-VF{-5DBw`2TfeKs`sX;L z`~N{;c2qg00{gf2E|PpYPSnC+5_4wf!}}!c!3AEb|F;6X5+G}08-O9nY8I62s!k`! zO{dsl@4Jg`jA8mX&e;_l$u>I!0Z-dz|AYTfhFIx`SnIN_(%16LK}YyUXoH{G!@Vn=y6ERBt>taYaT8 z_8lelqa6!@dCO9HOc87r<>!WCtw8<7|dT zCeQN>qu{&Jq;?F_9}4q+uOWrEZWfdE=x!kOC8!zpHYHL;XOR6(Zd~1fmriq`Ig@IT zYKH(*z9t1sB=LE~oKibUS2s%G=9o2+dq_pjq6g>X_*<0`;?mQv#YN^fwe+i+f&Clj zc7CE8l<=-JQ2YA}CTaivjU@36${4TK9*;E7TQdhc@$s2Dj|ZmGjsPF|{<0#E#{+F~ z2uPiKe;ka5z5f$64oL^Lt3MIk**vHWiU@y?%fs{>MH=RRM!=Aza(M&p4lvb0)+P^k zah10lbbJxiSNd&hO0^kp%L#BZ(j7v1r*=QTad_DcaMIX$w>Iq&>{O$7RT*=G>Dx)$ z_Xs*MyPBABBSR6le9m@%uD3+&STKS9sJ;)o3MIis(?#hjt{W`=B@4jVsr8IB=|vgaQ{D=^A2uNDD<9EBIrYU#Csu32%jXmdYtGR zrQJv|uXy~h*MH#c$J1YFpE;**)4ReWtbZ?-RTm7LE0g+nR-c9xfE_F7$ENqyo~>GQ zO{P5=$~A=#)s1Z@GvKGery6~@G)?uGkz(oqTAa)mr zd~=9P7`f8lPWkQ#n6UC?F84eSFQXY_+=jOPhb5!9i~-%0k8UQinhKkbI;uNwsnQyA zJ)^AC|45FQf1UDHK{f}lB;Hr3&5iUfj`$PZb)d&JXU!&7AsA4_8hD-)VEKhc?_30a{T6|PAIJfRYBd)Yg_S~wEkm_@20gW*+F2w zFCuOAotIi~v&l6qBp_3kjAyJ!&7Ek#XKC%?V|u|sMHcF64Sne`zQyp&Ry3(q``nH? z&o8hS8}xjuAP#v2!|nd1aHWmOtsFF#P`(lBCJAb}Qia!~WTlM&E*O?AX)nRtjixxJ z#Qkp#Hq=sgu?z)=;GCkDPw;)8!|KZ0FMx~41!h%6=U(aqE0FcZuhJ$^xfF9XE##;C z!R&GA0MG_vB8{ZQD9P*%3$L&)Oee#rq*jJEHsg6b@_r_etHUq@B~q;gi`gv-RJ4-;m^?%%rvRx^AZaEk7N!}o-t^4sIT<yn6xtD+ zo&MH0S*Ncjo29WZac^l+%0SI1)k_EQ+3+ zXwVlpraBJr4l$VhpiD&YnU%aFY=L;ip+{*#eshkcJWsUWIah~qE=?nYHwy5yXw#8b z`ynpLKm*0fQc&Sl6cFy<6x&z}(7+OM?FOnkLW%0zfXxxOPDRKj^7BoVNTcodkG^pP z%-Vp!B9p;qBNt0op@v3Np+&ls32##n@n(ek)89b@o#D2t1dc|jbupL%LMa7_?<`cL z1Q%gUnw~bm7`rNtRHn%=#~EP3VvIxUy*DEd<5Ohs_`M(#RE5>0l+90G5)EBgNx7t- zhh!9XX>si5Djo#Y4qsIQY<3wxE0tt2k_&{%!=h+Pf}$B6G%0R6^v2fa#LkI92BgX< zBg$h*X>rh`HQ&Q07i7j%aET$AnjJsY0lP%saw~ZHs-v~(1(+_=lcJQQ3)J`HEpdqa zfF%u&38t^PwTXNsswdtm7Q|R|vTAWZVyX@JCX2;aZ0cKIS-fwm!i2v)x0nj3>B|9I zwcO^crxxui237LOh;YfvE5Uw(=05CRVO)Pw zP>hN2tuo8u^$^50>H%V{D^TAt};bgL2>5n<+*(+XF+cqJt5-jI=-`l$?0 zuzoLkBgsHkbizBbQy+=g?ef1tZL|dI>)Id;t<6ml1fIZN1MWc0AIpP5Ieu zY`fICsD_9O2>)}-RzGPXkaWBt2Rq-%hx2%Y|Kp12N+p3;ai3kr{MVvq%b4zS36Y}a z5_a7qB-gdhU?f*d&v z#1s60P=Sm+EBz%;1IXH%6~-ED9xNYR1TqK)3>l2To{Phq%Kr~a2nrY}m=Ksh*bCTi z@IAi=)tc<64xs<^`D+${4d2_D=3XiHahU`(iSp?t3odWJ0@LIgSp z0StSXa9#5M#n&-1xjA3}4IB8=ZI7f483=fD>@5)4#g~#kS+~Q*pBz+gZmn)zxGOKP zzj9jjC9TxG_RREVp8A#1VQ2m`Og)Qx?5e7Jl`R(9EJdsqtRn8q(o{+L;=L}rT0~lA z1$%v#`By0E{UzOb^*tPSJZtxu^Op*u9xfZJ>NCx&h1Iqv9Y&Zya5Iqw$`K3mzthvt z9NrOKd)q55L-Npo$#R{dPBNkxxwJT1DRo<^8&xB>eID<#gouicao8ymoVz6T{@^pa zzNf#^ZhrN?|A;0*LJlxeZ|*5qst--CjT9xAOuvx_xPmKSs0TP!AK)by(o`@`Ek{PQ zxR^}+DJ&^xw^67EaTWq|M$HWTut2c$=g*CL#lk!-3pnR%t&YuS|GfO;n2B9RZ) zX)<}07Ex3Rc4q-s+c0v}3eNfFlZ>!(WeOhk?wkH;t{xVkVFD5115@@oJ=b|~S}GN} z{GTFpHHvhxoIU>_lB{?#UihSBV|Q{URGD*qyF*liI5atgE89! z(S{7%Egr<6bUs!O_l(Q}502See-W5tWf1PI{!{{=ity6S#LmMa?BzsN6vI@^P$7u89&;!dQTn1AwW zoSdiO28MlwY*6CsQHX~>XX7aeJ#TTe@e5Ue-i0kJj=YqdI4F#SEUcD&JMbIuAq-l! z15?o!qG)$eCN~Nde6={4QrIkfCkg{aB_~X3j`A!LZr2go)4`Mig(Kp3?Y-%J0@*S= zB@{{t8$R|HejqEZ5rowO8xZa?oGdgW{yu+5F%19pMoA@Ay1D=1KmoJB1@X@|1q}Ui zW8(7j#TRtXV_}vf!dG&5by9m;%iQ{9uH*APC9P1&_#g@$vKEdvC;+S;HQ)FTj)$|@ zFv>A5X+|eC)2QSOa-5gdUjT#e)~>zR(@jO?X1ghq+(7A(j?*kejqcCYX_osjNqyQL RmCV1Wl(NnH(y&lq{}=K-_kI8X