diff --git a/package.json b/package.json index 9a328158..05ff53a0 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,8 @@ }, "imports": { "#node-imports": { + "markdownlint-imports-browser": "./lib/node-imports-browser.mjs", + "markdownlint-imports-node": "./lib/node-imports-node.mjs", "browser": "./lib/node-imports-browser.mjs", "default": "./lib/node-imports-node.mjs" } @@ -99,6 +101,7 @@ "markdown-it-sub": "2.0.0", "markdown-it-sup": "2.0.0", "markdownlint-rule-extended-ascii": "0.1.0", + "nano-spawn": "0.2.0", "npm-run-all": "4.1.5", "terser-webpack-plugin": "5.3.11", "toml": "3.0.0", diff --git a/test/markdownlint-test.mjs b/test/markdownlint-test.mjs index 3a85630a..06fdd992 100644 --- a/test/markdownlint-test.mjs +++ b/test/markdownlint-test.mjs @@ -13,6 +13,7 @@ import pluginInline from "markdown-it-for-inline"; import pluginSub from "markdown-it-sub"; import pluginSup from "markdown-it-sup"; import test from "ava"; +import spawn from "nano-spawn"; import { getVersion } from "markdownlint"; import { lint as lintAsync } from "markdownlint/async"; import { lint as lintPromise } from "markdownlint/promise"; @@ -1398,3 +1399,29 @@ for (const [ exportName, exportPath ] of exportMappings) { t.is(importExportName, importExportPath); }); } + +test("subpathImports", async(t) => { + t.plan(8); + const scenarios = [ + { "conditions": "browser", "throws": true }, + { "conditions": "default", "throws": false }, + { "conditions": "markdownlint-imports-browser", "throws": true }, + { "conditions": "markdownlint-imports-node", "throws": false } + ]; + for (const scenario of scenarios) { + const { conditions, throws } = scenario; + try { + // eslint-disable-next-line no-await-in-loop + await spawn("node", [ `--conditions=${conditions}`, "./standalone.mjs" ], { "cwd": "./example" }); + t.true(!throws, conditions); + } catch { + t.true(throws, conditions); + } + } + // Fake "100%" coverage for node-imports-browser.mjs + const { "fs": browserFs } = await import("../lib/node-imports-browser.mjs"); + t.throws(() => browserFs.access()); + t.throws(() => browserFs.accessSync()); + t.throws(() => browserFs.readFile()); + t.throws(() => browserFs.readFileSync()); +});