diff --git a/modules/gitea/.gitignore b/modules/gitea/.gitignore new file mode 100644 index 00000000..b5e90585 --- /dev/null +++ b/modules/gitea/.gitignore @@ -0,0 +1,2 @@ +# The test script compiles the sources beside themselves before the tests import them (package.json, issue 1891). +*.js diff --git a/modules/gitea/package.json b/modules/gitea/package.json index 008e85a7..8c6171fe 100644 --- a/modules/gitea/package.json +++ b/modules/gitea/package.json @@ -6,7 +6,7 @@ "private": true, "scripts": { "build": "tsc client.ts token.ts index.ts provisioner/index.ts provisioner/teams.ts tools/index.ts --module NodeNext --moduleResolution NodeNext --target ES2022 --outDir dist", - "test": "npm run build && node --import ./test/resolve-ts.mjs --test --experimental-strip-types 'test/*.test.ts'" + "test": "npm run build && tsc --module NodeNext --moduleResolution NodeNext --target ES2022 --types node --rootDir . --outDir . $(find . -name '*.ts' ! -name '*.d.ts' ! -path './test/*' ! -path './node_modules/*' ! -path './dist/*') && node --test --experimental-strip-types 'test/*.test.ts'" }, "dependencies": { "@novox/mesh-sdk": "^0.1.1" diff --git a/modules/gitea/test/resolve-ts.mjs b/modules/gitea/test/resolve-ts.mjs deleted file mode 100644 index e7197721..00000000 --- a/modules/gitea/test/resolve-ts.mjs +++ /dev/null @@ -1,37 +0,0 @@ -// The tests import the module's TypeScript sources (node --experimental-strip-types), and the sources import each other -// by the .js name tsc compiles them to (NodeNext). Nothing compiles them beside themselves before the tests run: the -// Node build module runs `tsc -p .` and then `npm test` (novox/hq issue 1891). So this hook resolves a relative .js import -// from a .ts file, when no such .js is there, to the .ts beside it, and compiles that file with the toolchain's own -// TypeScript (transpileModule: no type-check, which `tsc -p .` did), since a source may use what type stripping refuses -// (a parameter property). Every other import resolves and loads as Node does. -import { readFileSync } from "node:fs"; -import { registerHooks } from "node:module"; -import { fileURLToPath } from "node:url"; -import ts from "typescript"; - -const compiled = new Set(); - -registerHooks({ - resolve(specifier, context, nextResolve) { - try { - return nextResolve(specifier, context); - } catch (err) { - const relative = specifier.startsWith("./") || specifier.startsWith("../"); - if (err?.code !== "ERR_MODULE_NOT_FOUND" || !relative || !specifier.endsWith(".js") || !context.parentURL?.endsWith(".ts")) { - throw err; - } - const resolved = nextResolve(specifier.slice(0, -".js".length) + ".ts", context); - compiled.add(resolved.url); - return resolved; - } - }, - load(url, context, nextLoad) { - if (!compiled.has(url)) return nextLoad(url, context); - const file = fileURLToPath(url); - const out = ts.transpileModule(readFileSync(file, "utf8"), { - fileName: file, - compilerOptions: { module: ts.ModuleKind.ESNext, target: ts.ScriptTarget.ES2022, sourceMap: false }, - }); - return { format: "module", source: out.outputText, shortCircuit: true }; - }, -}); diff --git a/modules/minio/.gitignore b/modules/minio/.gitignore new file mode 100644 index 00000000..b5e90585 --- /dev/null +++ b/modules/minio/.gitignore @@ -0,0 +1,2 @@ +# The test script compiles the sources beside themselves before the tests import them (package.json, issue 1891). +*.js diff --git a/modules/minio/package.json b/modules/minio/package.json index d3351990..f756a5f7 100644 --- a/modules/minio/package.json +++ b/modules/minio/package.json @@ -5,7 +5,7 @@ "type": "module", "private": true, "scripts": { - "test": "node --import ./test/resolve-ts.mjs --test --experimental-strip-types 'test/*.test.ts'" + "test": "tsc --module NodeNext --moduleResolution NodeNext --target ES2022 --types node --rootDir . --outDir . $(find . -name '*.ts' ! -name '*.d.ts' ! -path './test/*' ! -path './node_modules/*' ! -path './dist/*') && node --test --experimental-strip-types 'test/*.test.ts'" }, "dependencies": { "@novox/mesh-sdk": "^0.1.7" diff --git a/modules/minio/test/resolve-ts.mjs b/modules/minio/test/resolve-ts.mjs deleted file mode 100644 index e7197721..00000000 --- a/modules/minio/test/resolve-ts.mjs +++ /dev/null @@ -1,37 +0,0 @@ -// The tests import the module's TypeScript sources (node --experimental-strip-types), and the sources import each other -// by the .js name tsc compiles them to (NodeNext). Nothing compiles them beside themselves before the tests run: the -// Node build module runs `tsc -p .` and then `npm test` (novox/hq issue 1891). So this hook resolves a relative .js import -// from a .ts file, when no such .js is there, to the .ts beside it, and compiles that file with the toolchain's own -// TypeScript (transpileModule: no type-check, which `tsc -p .` did), since a source may use what type stripping refuses -// (a parameter property). Every other import resolves and loads as Node does. -import { readFileSync } from "node:fs"; -import { registerHooks } from "node:module"; -import { fileURLToPath } from "node:url"; -import ts from "typescript"; - -const compiled = new Set(); - -registerHooks({ - resolve(specifier, context, nextResolve) { - try { - return nextResolve(specifier, context); - } catch (err) { - const relative = specifier.startsWith("./") || specifier.startsWith("../"); - if (err?.code !== "ERR_MODULE_NOT_FOUND" || !relative || !specifier.endsWith(".js") || !context.parentURL?.endsWith(".ts")) { - throw err; - } - const resolved = nextResolve(specifier.slice(0, -".js".length) + ".ts", context); - compiled.add(resolved.url); - return resolved; - } - }, - load(url, context, nextLoad) { - if (!compiled.has(url)) return nextLoad(url, context); - const file = fileURLToPath(url); - const out = ts.transpileModule(readFileSync(file, "utf8"), { - fileName: file, - compilerOptions: { module: ts.ModuleKind.ESNext, target: ts.ScriptTarget.ES2022, sourceMap: false }, - }); - return { format: "module", source: out.outputText, shortCircuit: true }; - }, -});