diff --git a/.changeset/per-variant-dist-dirs.md b/.changeset/per-variant-dist-dirs.md new file mode 100644 index 0000000000..4d518be326 --- /dev/null +++ b/.changeset/per-variant-dist-dirs.md @@ -0,0 +1,65 @@ +--- +"@prosopo/account": patch +"@prosopo/api-express-router": patch +"@prosopo/api": patch +"@prosopo/api-route": patch +"@prosopo/audio-assets": patch +"@prosopo/captcha-severity": patch +"@prosopo/client-bundle-example": patch +"@prosopo/client-example-server": patch +"@prosopo/cli": patch +"@prosopo/common": patch +"@prosopo/config": patch +"@prosopo/cypress-shared": patch +"@prosopo/database": patch +"@prosopo/datasets": patch +"@prosopo/datasets-fs": patch +"@prosopo/detector-botd": patch +"@prosopo/detector": patch +"@prosopo/dotenv": patch +"@prosopo/env": patch +"@prosopo/fingerprint": patch +"@prosopo/icon-order-assets": patch +"@prosopo/ipinfo": patch +"@prosopo/keyring": patch +"@prosopo/lint": patch +"@prosopo/load-balancer": patch +"@prosopo/locale": patch +"@prosopo/logger": patch +"@prosopo/native-ja4": patch +"@prosopo/native-merkle": patch +"@prosopo/native-puzzle": patch +"@prosopo/procaptcha-audio": patch +"@prosopo/procaptcha-bundle": patch +"@prosopo/procaptcha-common": patch +"@prosopo/procaptcha": patch +"@prosopo/procaptcha-frictionless": patch +"@prosopo/procaptcha-icon-order": patch +"@prosopo/procaptcha-integration-build-config": patch +"@prosopo/procaptcha-pow": patch +"@prosopo/procaptcha-puzzle": patch +"@prosopo/procaptcha-react": patch +"@prosopo/procaptcha-wrapper": patch +"@prosopo/prosoponator-bot": patch +"@prosopo/provider": patch +"@prosopo/provider-mock": patch +"@prosopo/puzzle-assets": patch +"@prosopo/redis-client": patch +"@prosopo/scripts": patch +"@prosopo/server": patch +"@prosopo/types-database": patch +"@prosopo/types-env": patch +"@prosopo/types": patch +"@prosopo/user-access-policy": patch +"@prosopo/util-crypto": patch +"@prosopo/util": patch +"@prosopo/web-bot-auth": patch +"@prosopo/widget-skeleton": patch +"@prosopo/workspace": patch +--- + +Each kind of build now writes to its own folder under dist: dist/esm (vite ESM), dist/cjs (vite CommonJS), dist/types (declarations), dist/tsc (plain tsc), dist/bundle and dist/bundle-webpack (bundles) and dist/native (the Rust addons). Turbo caches each folder separately, so building one variant no longer overwrites or invalidates another. Package exports point at the new folders; anything importing a file from dist by path has to add the variant folder. + +The Rust addons are no longer committed. They are built into dist/native, in debug for development and tests and fully optimised when NODE_ENV=production, so building them now needs a Rust toolchain. + +Code that found the repo root or its certificates by climbing a fixed number of folders up from its own file now starts from its package's folder instead (new `packageDir` in @prosopo/util/node). The fixed count stopped working once the build output moved one folder deeper. diff --git a/.github/workflows/locales.yml b/.github/workflows/locales.yml index 180b4bb166..731236279e 100644 --- a/.github/workflows/locales.yml +++ b/.github/workflows/locales.yml @@ -62,9 +62,8 @@ jobs: # vite.test.config.ts imports the built @prosopo/config and needs an # .env.test, and the type tests resolve locale's other workspace - # dependencies (such as @prosopo/util) through their dist/*.d.ts, which - # only build:tsc emits — `build` is a vite bundle with no declarations. - - run: pnpm exec turbo run @prosopo/config#build build:tsc --filter='@prosopo/locale^...' + # dependencies (such as @prosopo/util) through their dist/types. + - run: pnpm exec turbo run @prosopo/config#build build:types --filter='@prosopo/locale^...' - run: cp dev/scripts/env.test .env.test diff --git a/.gitignore b/.gitignore index 7a30e77664..be157b1f65 100644 --- a/.gitignore +++ b/.gitignore @@ -179,11 +179,6 @@ docker/dns-tenants.json # ANDROID_HOME and breaks the build everywhere else, CI included. local.properties -# napi builds only the linux target (see `napi.targets` in each native package), -# and that artefact is committed. A local build on any other platform is not. -packages/native-*/index.*.node -!packages/native-*/index.linux-x64-gnu.node - # Private key material, by shape rather than by path. A path-specific ignore # only covers the directory someone thought of; this covers the shape. Nothing # matching these is tracked, so there are no exceptions. If a public certificate diff --git a/demos/client-bundle-example/package.json b/demos/client-bundle-example/package.json index d3c6e058c5..cfa4e42f21 100644 --- a/demos/client-bundle-example/package.json +++ b/demos/client-bundle-example/package.json @@ -1,11 +1,11 @@ { "name": "@prosopo/client-bundle-example", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, @@ -14,13 +14,12 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "bundle": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "start": "NODE_ENV=${NODE_ENV:-development}; vite serve ./src --port 9232 --config vite.config.ts --mode=$NODE_ENV", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts" }, diff --git a/demos/client-bundle-example/tsconfig.types.json b/demos/client-bundle-example/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/demos/client-bundle-example/tsconfig.types.json +++ b/demos/client-bundle-example/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/demos/client-bundle-example/vite.config.ts b/demos/client-bundle-example/vite.config.ts index 26530bd196..30ef6e29aa 100644 --- a/demos/client-bundle-example/vite.config.ts +++ b/demos/client-bundle-example/vite.config.ts @@ -190,7 +190,7 @@ export default defineConfig(({ command, mode }) => { commonjsOptions: { transformMixedEsModules: true, }, - outDir: "dist", + outDir: "dist/bundle", emptyOutDir: false, rollupOptions: { input: { @@ -287,35 +287,35 @@ export default defineConfig(({ command, mode }) => { name: "copy-files", closeBundle() { // This runs after all other plugins have processed files - console.log("Copying additional files from src to dist..."); + console.log("Copying additional files from src to dist/bundle..."); // Only copy assets and other non-HTML files since HTML files are processed by Vite const srcAssetsDir = path.resolve(__dirname, "src/assets"); - const destAssetsDir = path.resolve(__dirname, "dist/assets"); + const destAssetsDir = path.resolve(__dirname, "dist/bundle/assets"); if (fs.existsSync(srcAssetsDir)) { copyDirContents(srcAssetsDir, destAssetsDir); } // Copy any other necessary directories const srcPluginsDir = path.resolve(__dirname, "src/plugins"); - const destPluginsDir = path.resolve(__dirname, "dist/plugins"); + const destPluginsDir = path.resolve(__dirname, "dist/bundle/plugins"); if (fs.existsSync(srcPluginsDir)) { copyDirContents(srcPluginsDir, destPluginsDir); } // Final step: move any content from dist/src to dist root - const distSrcDir = path.resolve(__dirname, "dist/src"); - const distDir = path.resolve(__dirname, "dist"); + const distSrcDir = path.resolve(__dirname, "dist/bundle/src"); + const distDir = path.resolve(__dirname, "dist/bundle"); if (fs.existsSync(distSrcDir)) { - console.log("Moving files from dist/src to dist root..."); + console.log("Moving files from dist/bundle/src to dist/bundle..."); moveDirectoryContents(distSrcDir, distDir, true); // Try to remove the now-empty dist/src directory try { fs.rmdirSync(distSrcDir); - console.log("Removed empty dist/src directory"); + console.log("Removed empty dist/bundle/src directory"); } catch (err) { - console.warn("Could not remove dist/src directory:", err); + console.warn("Could not remove dist/bundle/src directory:", err); } } }, diff --git a/demos/client-example-server/package.json b/demos/client-example-server/package.json index 74177d3a8f..c5960237f7 100644 --- a/demos/client-example-server/package.json +++ b/demos/client-example-server/package.json @@ -2,13 +2,13 @@ "name": "@prosopo/client-example-server", "version": "2.7.184", "description": "Backend for client-example", - "main": "dist/app.js", - "types": "dist/app.d.ts", + "main": "dist/esm/app.js", + "types": "dist/types/app.d.ts", "exports": { ".": { - "import": "./dist/index.js", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs", - "types": "./dist/app.d.ts" + "types": "./dist/types/app.d.ts" } }, "type": "module", @@ -17,16 +17,15 @@ }, "scripts": { "dev": "NODE_ENV=${NODE_ENV:-development}; vite serve --mode=$NODE_ENV --config ./vite.config.ts --host", - "start": "NODE_ENV=${NODE_ENV:-development}; node ./dist/app.js", + "start": "NODE_ENV=${NODE_ENV:-development}; node ./dist/esm/app.js", "start:bundle": "node ./dist/bundle/prosopo_client_example_server.app.bundle.js", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "docker-tag": "node ../../docker/docker-tag.mjs", "build:docker": "docker buildx build --progress=plain --tag $(pnpm run --silent docker-tag) --platform linux/amd64 -f ./Dockerfile ../..", "publish:docker": "docker push $(pnpm run --silent docker-tag)", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts", diff --git a/demos/client-example-server/src/app.ts b/demos/client-example-server/src/app.ts index d27244217c..553920d287 100644 --- a/demos/client-example-server/src/app.ts +++ b/demos/client-example-server/src/app.ts @@ -18,13 +18,13 @@ import type { Server } from "node:http"; import https from "node:https"; import type { ServerOptions } from "node:https"; import path from "node:path"; -import { fileURLToPath } from "node:url"; import { ProsopoError } from "@prosopo/common"; import { loadEnv } from "@prosopo/dotenv"; import { getLogger } from "@prosopo/logger"; import { getServerConfig } from "@prosopo/server"; import type { ProsopoServerConfigOutput } from "@prosopo/types"; import { at, isMain } from "@prosopo/util"; +import { packageDir } from "@prosopo/util/node"; import cors from "cors"; import express from "express"; import routesFactory from "./routes/routes.js"; @@ -120,10 +120,10 @@ export const resolvePort = (config: ProsopoServerConfigOutput): number => { export const startServer = ( app: express.Express, port: number, - dirname: string = path.dirname(fileURLToPath(import.meta.url)), + pkgDir: string | undefined = packageDir(import.meta.url), ): Server => { - if (isDevelopmentOrTest()) { - const certsDir = path.resolve(dirname, "../../../certs"); + if (isDevelopmentOrTest() && pkgDir !== undefined) { + const certsDir = path.resolve(pkgDir, "../../certs"); const keyPath = path.join(certsDir, "server.key"); const certPath = path.join(certsDir, "server.crt"); diff --git a/demos/client-example-server/src/tests/app.unit.test.ts b/demos/client-example-server/src/tests/app.unit.test.ts index 8c91af8f29..690cd7050e 100644 --- a/demos/client-example-server/src/tests/app.unit.test.ts +++ b/demos/client-example-server/src/tests/app.unit.test.ts @@ -300,9 +300,9 @@ describe("startServer", () => { test("serves HTTPS in development when the certificates exist", async () => { process.env.NODE_ENV = "development"; const root = certDir(); - // startServer resolves ../../../certs relative to the module, so the - // fake module directory sits three levels below the cert directory. - const moduleDir = path.join(root, "certs", "a", "b"); + // startServer resolves ../../certs from the package directory, so the + // fake package sits two levels below the repo holding the certs. + const moduleDir = path.join(root, "certs", "a"); fs.mkdirSync(moduleDir, { recursive: true }); const certs = path.join(root, "certs"); // A throwaway self-signed pair would need openssl; the files only have @@ -316,7 +316,7 @@ describe("startServer", () => { .mockReturnValue( fake as unknown as ReturnType, ); - startServer(express(), 1234, path.join(certs, "a", "b")); + startServer(express(), 1234, path.join(certs, "a")); expect(createServer).toHaveBeenCalledTimes(1); const options = createServer.mock.calls[0]?.[0] as { key: Buffer; diff --git a/demos/client-example-server/tsconfig.json b/demos/client-example-server/tsconfig.json index 2b1f51d56f..748c222a93 100644 --- a/demos/client-example-server/tsconfig.json +++ b/demos/client-example-server/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["dom", "dom.iterable", "esnext"] }, "include": [ diff --git a/demos/client-example-server/tsconfig.types.json b/demos/client-example-server/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/demos/client-example-server/tsconfig.types.json +++ b/demos/client-example-server/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/demos/cypress-shared/package.json b/demos/cypress-shared/package.json index e9746f3b05..6e16afb764 100644 --- a/demos/cypress-shared/package.json +++ b/demos/cypress-shared/package.json @@ -3,12 +3,12 @@ "version": "2.8.160", "private": true, "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, @@ -45,11 +45,10 @@ "vitest": "5.0.4" }, "scripts": { - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "cypress:open:client-bundle-example:image": "NODE_TLS_REJECT_UNAUTHORIZED=0 CAPTCHA_TYPE=image CYPRESS_BASE_URL='https://localhost:9232' cypress open --config-file cypress.image.config.js", "cypress:run:client-bundle-example:image": "NODE_TLS_REJECT_UNAUTHORIZED=0 CAPTCHA_TYPE=image CYPRESS_BASE_URL='https://localhost:9232' cypress run --browser ${PROSOPO_CYPRESS_BROWSER:-chrome} --config-file cypress.image.config.js", diff --git a/demos/cypress-shared/tsconfig.types.json b/demos/cypress-shared/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/demos/cypress-shared/tsconfig.types.json +++ b/demos/cypress-shared/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/demos/detector-botd/package.json b/demos/detector-botd/package.json index 3008b3c200..12aea404f8 100644 --- a/demos/detector-botd/package.json +++ b/demos/detector-botd/package.json @@ -10,10 +10,10 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "vite build --config vite.config.ts", + "clean": "del-cli --verbose dist", + "bundle": "vite build --config vite.config.ts", "build:tsc": "tsc --build --verbose", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "pool": "tsx src/pool.ts", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts" }, diff --git a/demos/detector-botd/src/pool.ts b/demos/detector-botd/src/pool.ts index a6fe3d5d1a..588dc5d368 100644 --- a/demos/detector-botd/src/pool.ts +++ b/demos/detector-botd/src/pool.ts @@ -72,7 +72,7 @@ const main = (): void => { ); if (!existsSync(detectorPath)) { throw new Error( - "no built detector: run `pnpm --filter @prosopo/detector-botd run build` first", + "no built detector: run `pnpm --filter @prosopo/detector-botd run bundle` first", ); } const out = resolve(process.env.INIT_CWD ?? process.cwd(), values.out); diff --git a/demos/detector-botd/tsconfig.json b/demos/detector-botd/tsconfig.json index 86c3a7cdf2..7786c1b883 100644 --- a/demos/detector-botd/tsconfig.json +++ b/demos/detector-botd/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "module": "NodeNext", "lib": ["es2022", "dom"] }, diff --git a/demos/detector-botd/tsconfig.types.json b/demos/detector-botd/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/demos/detector-botd/tsconfig.types.json +++ b/demos/detector-botd/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/demos/provider-mock/package.json b/demos/provider-mock/package.json index 1238bdafb3..f36f53453f 100644 --- a/demos/provider-mock/package.json +++ b/demos/provider-mock/package.json @@ -4,12 +4,12 @@ "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, @@ -17,14 +17,13 @@ "node": "^24" }, "scripts": { - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "docker-tag": "node ../../docker/docker-tag.mjs", "build:docker": "docker buildx build --progress=plain --tag $(pnpm run --silent docker-tag) --platform linux/amd64 -f ./Dockerfile ../..", "publish:docker": "docker push $(pnpm run --silent docker-tag)", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "bundle": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.config.ts --mode $NODE_ENV", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", diff --git a/demos/provider-mock/tsconfig.json b/demos/provider-mock/tsconfig.json index db1073c151..bbfa21e022 100644 --- a/demos/provider-mock/tsconfig.json +++ b/demos/provider-mock/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "module": "NodeNext" }, "include": [ diff --git a/demos/provider-mock/tsconfig.types.json b/demos/provider-mock/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/demos/provider-mock/tsconfig.types.json +++ b/demos/provider-mock/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/dev/config/package.json b/dev/config/package.json index 72ccea7640..e218fb49fa 100644 --- a/dev/config/package.json +++ b/dev/config/package.json @@ -4,12 +4,11 @@ "description": "Prosopo config library", "type": "module", "scripts": { - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-production}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "typecheck": "tsc --project tsconfig.types.json", + "clean": "del-cli --verbose dist", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts --mode $NODE_ENV" }, "engines": { @@ -84,20 +83,22 @@ "registry": "https://registry.npmjs.org" }, "sideEffects": false, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" }, "./webpack": { - "import": "./dist/webpack/index.js", - "require": "./dist/webpack/cjs/index.cjs" + "types": "./dist/types/webpack/index.d.ts", + "import": "./dist/esm/webpack/index.js", + "require": "./dist/cjs/webpack/index.cjs" }, "./webpack/webpack.config": { - "import": "./dist/webpack/webpack.config.js", + "types": "./dist/types/webpack/webpack.config.d.ts", + "import": "./dist/esm/webpack/webpack.config.js", "require": "./dist/cjs/webpack/webpack.config.cjs" } } diff --git a/dev/config/src/vite/NodejsPolarsNativeFilePlugin.ts b/dev/config/src/vite/NodejsPolarsNativeFilePlugin.ts index 6a416bfe30..a4ecfe4949 100644 --- a/dev/config/src/vite/NodejsPolarsNativeFilePlugin.ts +++ b/dev/config/src/vite/NodejsPolarsNativeFilePlugin.ts @@ -20,8 +20,7 @@ import type { Rollup } from "vite"; * Each entry is either a plain path (copied under its original basename) or * `{ src, dest }` where `dest` is the basename to write into `outDir`. * Explicit `dest` lets consumers avoid collisions when they copy multiple - * .node files that napi-rs happens to name the same thing (each package it - * generates puts its binary at `index..node`). + * .node files that share a basename. */ export type NativeFileEntry = string | { src: string; dest: string }; diff --git a/dev/config/src/vite/bundleConfigs.test.ts b/dev/config/src/vite/bundleConfigs.test.ts index 43020bf4f8..2ce73ce1d8 100644 --- a/dev/config/src/vite/bundleConfigs.test.ts +++ b/dev/config/src/vite/bundleConfigs.test.ts @@ -115,7 +115,7 @@ describe("ViteEsmConfig", () => { entry: "src/index.ts", }); expect(config.build?.target).toBe("node24"); - expect(config.build?.outDir).toBe("dist"); + expect(config.build?.outDir).toBe("dist/esm"); }); it("accepts an explicit entry, including a multi-entry map", async () => { diff --git a/dev/config/src/vite/vite.commonjs.config.ts b/dev/config/src/vite/vite.commonjs.config.ts index 45a54e6ce5..6bc2c42b84 100644 --- a/dev/config/src/vite/vite.commonjs.config.ts +++ b/dev/config/src/vite/vite.commonjs.config.ts @@ -67,7 +67,7 @@ export default async function ( }), VitePluginCopy({ srcDir: "src", - destDir: "dist", + destDir: "dist/cjs", include: ["**/*.json"], }), tsconfigPaths({ projects: [path.resolve(tsConfigPath)] }), diff --git a/dev/config/src/vite/vite.esm.config.ts b/dev/config/src/vite/vite.esm.config.ts index 85a67006c5..d0ca66643e 100644 --- a/dev/config/src/vite/vite.esm.config.ts +++ b/dev/config/src/vite/vite.esm.config.ts @@ -58,7 +58,7 @@ export default async function ( }), VitePluginCopy({ srcDir: "src", - destDir: "dist", + destDir: "dist/esm", include: ["**/*.json"], }), tsconfigPaths({ projects: [path.resolve(tsConfigPath)] }), @@ -68,7 +68,7 @@ export default async function ( emptyOutDir: false, ssr: true, target: "node24", - outDir: "dist", + outDir: "dist/esm", lib: { name, formats: ["es"], diff --git a/dev/config/src/webpack/webpack.config.ts b/dev/config/src/webpack/webpack.config.ts index 21a29688bd..a875c1a4ad 100644 --- a/dev/config/src/webpack/webpack.config.ts +++ b/dev/config/src/webpack/webpack.config.ts @@ -64,7 +64,7 @@ export default (mode: string) => { entry: resolveEntryFile(), output: { filename: `${libraryName}.[name].bundle.js`, - path: path.resolve("./dist"), + path: path.resolve("./dist/bundle-webpack"), publicPath: "/", }, module: { diff --git a/dev/config/tsconfig.json b/dev/config/tsconfig.json index 1949c06298..ec8c8df4af 100644 --- a/dev/config/tsconfig.json +++ b/dev/config/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "types": ["vite/client"] }, "include": [ diff --git a/dev/config/tsconfig.types.json b/dev/config/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/dev/config/tsconfig.types.json +++ b/dev/config/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/dev/config/turbo.json b/dev/config/turbo.json index 80e8a827e2..8c0ea2f4b8 100644 --- a/dev/config/turbo.json +++ b/dev/config/turbo.json @@ -1,36 +1,20 @@ { "extends": ["//"], "tasks": { - "build": { - "dependsOn": ["^build"], - "outputs": ["dist/**", "*.tsbuildinfo"] - }, - "build:tsc": { - "dependsOn": ["^build:tsc"], - "outputs": ["dist/**", "*.tsbuildinfo"] + "build:esm": { + "dependsOn": ["^build:esm"], + "outputs": ["dist/esm/**"] }, "build:cjs": { "dependsOn": ["^build:cjs"], - "outputs": ["dist/**", "*.tsbuildinfo"] + "outputs": ["dist/cjs/**"] }, "bundle": { - "outputs": ["dist/**", "*.tsbuildinfo"] + "outputs": ["dist/bundle/**"] }, "bundle:webpack": { - "outputs": ["dist/**", "*.tsbuildinfo"] - }, - "typecheck": { - "dependsOn": ["^typecheck"], - "outputs": ["dist/**", "*.tsbuildinfo"] - }, - "test": {}, - "lint": { "dependsOn": ["^lint"] }, - "clean": { - "cache": false + "outputs": ["dist/bundle-webpack/**"] }, - "clean:deps": { - "dependsOn": ["clean", "^clean"], - "cache": false - } + "test": {} } } diff --git a/dev/lint/package.json b/dev/lint/package.json index ffed95d2c7..280c79dd11 100644 --- a/dev/lint/package.json +++ b/dev/lint/package.json @@ -5,13 +5,12 @@ "private": true, "type": "module", "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", - "start": "node dist/index.js", + "build:types": "tsc --project tsconfig.types.json", + "start": "node dist/esm/index.js", "test": "vitest run" }, "author": "", @@ -30,12 +29,12 @@ "vite": "8.1.6", "vitest": "5.0.4" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, diff --git a/dev/lint/tsconfig.json b/dev/lint/tsconfig.json index 98075d8cab..3af5061607 100644 --- a/dev/lint/tsconfig.json +++ b/dev/lint/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/dev/lint/tsconfig.types.json b/dev/lint/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/dev/lint/tsconfig.types.json +++ b/dev/lint/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/dev/prosoponator-bot/package.json b/dev/prosoponator-bot/package.json index 33ca9e0b42..74037e8a12 100644 --- a/dev/prosoponator-bot/package.json +++ b/dev/prosoponator-bot/package.json @@ -5,11 +5,10 @@ "private": true, "type": "module", "scripts": { - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "start": "pnpm exec tsx src/index.ts", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", @@ -36,13 +35,13 @@ "vite": "8.1.6", "vitest": "5.0.4" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "import": "./dist/index.js", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs", - "types": "./dist/index.d.ts" + "types": "./dist/types/index.d.ts" } }, "engines": { diff --git a/dev/prosoponator-bot/tsconfig.json b/dev/prosoponator-bot/tsconfig.json index 415d234034..0226ab8cf0 100644 --- a/dev/prosoponator-bot/tsconfig.json +++ b/dev/prosoponator-bot/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/dev/prosoponator-bot/tsconfig.types.json b/dev/prosoponator-bot/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/dev/prosoponator-bot/tsconfig.types.json +++ b/dev/prosoponator-bot/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/dev/scripts/package.json b/dev/scripts/package.json index 9d6af5baa8..b1aa7633e1 100644 --- a/dev/scripts/package.json +++ b/dev/scripts/package.json @@ -2,13 +2,13 @@ "name": "@prosopo/scripts", "version": "3.1.211", "description": "Dev scripts for working with prosopo packages", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "import": "./dist/index.js", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs", - "types": "./dist/index.d.ts" + "types": "./dist/types/index.d.ts" } }, "type": "module", @@ -16,14 +16,13 @@ "node": "^24" }, "scripts": { - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts --mode $NODE_ENV", - "cli": "node dist/cli/index.js", - "setup": "node dist/cli/index.js setup" + "cli": "node dist/esm/cli/index.js", + "setup": "node dist/esm/cli/index.js setup" }, "author": "Prosopo Limited", "license": "Apache-2.0", diff --git a/dev/scripts/src/scripts/generateSelfHostedEnv.ts b/dev/scripts/src/scripts/generateSelfHostedEnv.ts index 1354b5e27d..621b92e16c 100644 --- a/dev/scripts/src/scripts/generateSelfHostedEnv.ts +++ b/dev/scripts/src/scripts/generateSelfHostedEnv.ts @@ -17,6 +17,7 @@ import fs from "node:fs"; import path from "node:path"; import { generateMnemonic } from "@prosopo/keyring"; import { LogLevel, getLogger, parseLogLevel } from "@prosopo/logger"; +import { getCliPkgDir } from "@prosopo/workspace"; const logger = getLogger( parseLogLevel(process.env.PROSOPO_LOG_LEVEL || LogLevel.enum.info), @@ -176,10 +177,7 @@ MAXMIND_ASN_DB_PATH=./GeoLite2-ASN.mmdb // The provider image is tagged with the CLI package's version, which is the // release this checkout was cut from. const readProviderImageVersion = (): string => { - const manifestPath = path.resolve( - import.meta.dirname, - "../../../../packages/cli/package.json", - ); + const manifestPath = path.join(getCliPkgDir(), "package.json"); const { version } = JSON.parse(fs.readFileSync(manifestPath, "utf8")) as { version?: unknown; }; diff --git a/dev/scripts/tsconfig.json b/dev/scripts/tsconfig.json index b44c53fcae..bccb6ff154 100644 --- a/dev/scripts/tsconfig.json +++ b/dev/scripts/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["dom", "dom.iterable", "esnext"] }, "include": [ diff --git a/dev/scripts/tsconfig.types.json b/dev/scripts/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/dev/scripts/tsconfig.types.json +++ b/dev/scripts/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/dev/workspace/package.json b/dev/workspace/package.json index 3a381cd176..4026978ff2 100644 --- a/dev/workspace/package.json +++ b/dev/workspace/package.json @@ -3,22 +3,21 @@ "version": "3.2.4", "description": "Prosopo workspace library", "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "import": "./dist/index.js", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs", - "types": "./dist/index.d.ts" + "types": "./dist/types/index.d.ts" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts" }, "engines": { diff --git a/dev/workspace/src/projectInfo.ts b/dev/workspace/src/projectInfo.ts index b5c89b9409..c445f11e8c 100644 --- a/dev/workspace/src/projectInfo.ts +++ b/dev/workspace/src/projectInfo.ts @@ -19,20 +19,26 @@ import { fileURLToPath } from "node:url"; // Top Level /** - * The repository root — three levels up from this module, which sits at - * `dev/workspace/{src,dist}/`. Both the source and the built layout are the - * same depth, so this holds whether it is imported from `src` under vitest or - * from `dist` by a consumer. + * The repository root: two levels above this package (`dev/workspace`), found + * by walking up to the package's package.json. The module itself sits at + * different depths in `src/` and `dist//`, so a fixed `../` count + * from it holds for only one layout. * * `fileURLToPath` rather than `new URL(...).pathname`: `pathname` is * percent-encoded, so a checkout under a path containing a space or a `#` * yields `%20`/`%23` and every derived path fails to resolve. - * - * `path.resolve` drops the trailing separator that URL resolution leaves on a - * directory, which is what the previous `.slice(0, -1)` was doing by hand. */ -export const getRootDir = (): string => - path.resolve(fileURLToPath(new URL("../../..", import.meta.url))); +export const getRootDir = (): string => { + let dir = path.dirname(fileURLToPath(import.meta.url)); + while (!fs.existsSync(path.join(dir, "package.json"))) { + const parent = path.dirname(dir); + if (parent === dir) { + throw new Error("@prosopo/workspace: no package.json above module"); + } + dir = parent; + } + return path.resolve(dir, "../.."); +}; export const getCacheDir = () => `${getRootDir()}/.cache`; diff --git a/dev/workspace/src/tests/projectInfo.unit.test.ts b/dev/workspace/src/tests/projectInfo.unit.test.ts index 20d82bd683..0deccc1859 100644 --- a/dev/workspace/src/tests/projectInfo.unit.test.ts +++ b/dev/workspace/src/tests/projectInfo.unit.test.ts @@ -86,8 +86,8 @@ describe("getRootDir", () => { }); test("locates the root the same way whether imported from src or dist", () => { - // Both layouts sit at the same depth (dev/workspace/{src,dist}), which is - // what makes the fixed `../../..` correct. If either moves, this breaks. + // The root is found from the package, not the module, so src and the + // deeper dist/ layouts agree. expect(path.basename(path.dirname(getDevDir()))).toBe( path.basename(getRootDir()), ); diff --git a/dev/workspace/tsconfig.json b/dev/workspace/tsconfig.json index af550eb9eb..26cf6d19eb 100644 --- a/dev/workspace/tsconfig.json +++ b/dev/workspace/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "./src/**/*.ts", diff --git a/dev/workspace/tsconfig.types.json b/dev/workspace/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/dev/workspace/tsconfig.types.json +++ b/dev/workspace/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/docker/images/parent.image.server.dockerfile b/docker/images/parent.image.server.dockerfile index 6b52cb923d..0e0e4b8469 100644 --- a/docker/images/parent.image.server.dockerfile +++ b/docker/images/parent.image.server.dockerfile @@ -10,4 +10,6 @@ COPY ./dist /usr/src/app/dist EXPOSE 3000 -CMD [ "node", "./dist/index.js" ] +USER node + +CMD [ "node", "./dist/esm/index.js" ] diff --git a/integration/procaptcha-integration-build-config/package.json b/integration/procaptcha-integration-build-config/package.json index a75396228d..421108e20e 100644 --- a/integration/procaptcha-integration-build-config/package.json +++ b/integration/procaptcha-integration-build-config/package.json @@ -5,22 +5,21 @@ "engines": { "node": "^24" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts" diff --git a/integration/procaptcha-integration-build-config/tsconfig.json b/integration/procaptcha-integration-build-config/tsconfig.json index 157c8ae30d..2a8ee4e30c 100644 --- a/integration/procaptcha-integration-build-config/tsconfig.json +++ b/integration/procaptcha-integration-build-config/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "./src", diff --git a/integration/procaptcha-integration-build-config/tsconfig.types.json b/integration/procaptcha-integration-build-config/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/integration/procaptcha-integration-build-config/tsconfig.types.json +++ b/integration/procaptcha-integration-build-config/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/account/package.json b/packages/account/package.json index 2e528f3e31..0fa28d16f6 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -2,37 +2,38 @@ "name": "@prosopo/account", "version": "2.8.114", "description": "Services and Utils for Prosopo account gen and management", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" }, "./extension/ExtensionWeb2": { - "import": "./dist/extension/ExtensionWeb2.js", + "types": "./dist/types/extension/ExtensionWeb2.d.ts", + "import": "./dist/esm/extension/ExtensionWeb2.js", "require": "./dist/cjs/extension/ExtensionWeb2.cjs", - "default": "./dist/extension/ExtensionWeb2.js" + "default": "./dist/esm/extension/ExtensionWeb2.js" }, "./extension/ExtensionWeb3": { - "import": "./dist/extension/ExtensionWeb3.js", + "types": "./dist/types/extension/ExtensionWeb3.d.ts", + "import": "./dist/esm/extension/ExtensionWeb3.js", "require": "./dist/cjs/extension/ExtensionWeb3.cjs", - "default": "./dist/extension/ExtensionWeb3.js" + "default": "./dist/esm/extension/ExtensionWeb3.js" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", - "build:tsc": "pnpm run typecheck && pnpm run build", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", + "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "typecheck": "tsc --project tsconfig.types.json" + "build:types": "tsc --project tsconfig.types.json" }, "repository": { "type": "git", diff --git a/packages/account/tsconfig.json b/packages/account/tsconfig.json index 9291ee1caa..2d0c2a0fda 100644 --- a/packages/account/tsconfig.json +++ b/packages/account/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"], "allowJs": true }, diff --git a/packages/account/tsconfig.types.json b/packages/account/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/account/tsconfig.types.json +++ b/packages/account/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/api-express-router/package.json b/packages/api-express-router/package.json index 4b98c1919c..ec42d3cc54 100644 --- a/packages/api-express-router/package.json +++ b/packages/api-express-router/package.json @@ -1,26 +1,25 @@ { "name": "@prosopo/api-express-router", "version": "3.3.3", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts" }, "dependencies": { diff --git a/packages/api-express-router/tsconfig.json b/packages/api-express-router/tsconfig.json index 77754e1296..17e0c7a0ca 100644 --- a/packages/api-express-router/tsconfig.json +++ b/packages/api-express-router/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "./src", diff --git a/packages/api-express-router/tsconfig.types.json b/packages/api-express-router/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/api-express-router/tsconfig.types.json +++ b/packages/api-express-router/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/api-route/package.json b/packages/api-route/package.json index 8689a12365..222325928c 100644 --- a/packages/api-route/package.json +++ b/packages/api-route/package.json @@ -1,26 +1,25 @@ { "name": "@prosopo/api-route", "version": "2.6.65", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest watch --config ./vite.test.config.ts" }, diff --git a/packages/api-route/tsconfig.json b/packages/api-route/tsconfig.json index ff2a9b513c..75cc87f876 100644 --- a/packages/api-route/tsconfig.json +++ b/packages/api-route/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "./src", diff --git a/packages/api-route/tsconfig.types.json b/packages/api-route/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/api-route/tsconfig.types.json +++ b/packages/api-route/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/api/package.json b/packages/api/package.json index 423996a822..e0cb6bdbb2 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -2,26 +2,25 @@ "name": "@prosopo/api", "version": "4.7.6", "description": "Wrapper for the provider API", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest watch --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts" diff --git a/packages/api/tsconfig.json b/packages/api/tsconfig.json index eac1fc4a02..349ed4eb47 100644 --- a/packages/api/tsconfig.json +++ b/packages/api/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/api/tsconfig.types.json b/packages/api/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/api/tsconfig.types.json +++ b/packages/api/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/audio-assets/package.json b/packages/audio-assets/package.json index 3de3deabab..63470455cd 100644 --- a/packages/audio-assets/package.json +++ b/packages/audio-assets/package.json @@ -2,28 +2,27 @@ "name": "@prosopo/audio-assets", "version": "0.2.2", "description": "Procedural speech synthesis for the audio captcha", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "preview": "tsx scripts/preview.ts", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "typecheck": "tsc --project tsconfig.types.json" + "build:types": "tsc --project tsconfig.types.json" }, "repository": { "type": "git", diff --git a/packages/audio-assets/tsconfig.json b/packages/audio-assets/tsconfig.json index 87131190ca..79dd32cd29 100644 --- a/packages/audio-assets/tsconfig.json +++ b/packages/audio-assets/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/audio-assets/tsconfig.types.json b/packages/audio-assets/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/audio-assets/tsconfig.types.json +++ b/packages/audio-assets/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/captcha-severity/package.json b/packages/captcha-severity/package.json index add3101943..c740a340b4 100644 --- a/packages/captcha-severity/package.json +++ b/packages/captcha-severity/package.json @@ -2,26 +2,25 @@ "name": "@prosopo/captcha-severity", "version": "1.3.3", "description": "Relative severity of the captcha types, and the helpers for picking the strictest when policies compete", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "typecheck": "tsc --project tsconfig.types.json" + "build:types": "tsc --project tsconfig.types.json" }, "type": "module", "sideEffects": false, diff --git a/packages/captcha-severity/tsconfig.json b/packages/captcha-severity/tsconfig.json index 85982e5318..dbfe784cfc 100644 --- a/packages/captcha-severity/tsconfig.json +++ b/packages/captcha-severity/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/captcha-severity/tsconfig.types.json b/packages/captcha-severity/tsconfig.types.json index 0e62586239..1e856cd309 100644 --- a/packages/captcha-severity/tsconfig.types.json +++ b/packages/captcha-severity/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": false, "composite": false, diff --git a/packages/cli/Dockerfile b/packages/cli/Dockerfile index 1f363dfa1e..16b08f2ca9 100644 --- a/packages/cli/Dockerfile +++ b/packages/cli/Dockerfile @@ -20,7 +20,7 @@ RUN apt-get update && \ COPY ./packages/cli/dist/bundle/ ./ -COPY ./packages/locale/dist/locales/ ./locales/ +COPY ./packages/locale/dist/esm/locales/ ./locales/ # Created here so it reaches the runtime image owned by the runtime user. A # named volume mounted on it starts with that ownership; one mounted on a path diff --git a/packages/cli/package.json b/packages/cli/package.json index 57be340922..e7c98da68a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -2,35 +2,34 @@ "name": "@prosopo/cli", "version": "3.9.2", "description": "CLI for Prosopo Provider", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "docker-tag": "node ../../docker/docker-tag.mjs", "build:docker": "docker buildx build --progress=plain --tag $(pnpm run --silent docker-tag) --platform linux/amd64 -f ./Dockerfile ../..", "publish:docker": "docker push $(pnpm run --silent docker-tag)", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "bundle": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.config.ts --mode $NODE_ENV", - "cli": "node ./dist/cli.js", - "start": "node ./dist/cli.js --api", - "start:admin": "node ./dist/cli.js --api --adminApi", - "start:dev": "node ./dist/cli.js --api --dev" + "cli": "node ./dist/esm/cli.js", + "start": "node ./dist/esm/cli.js --api", + "start:admin": "node ./dist/esm/cli.js --api --adminApi", + "start:dev": "node ./dist/esm/cli.js --api --dev" }, "dependencies": { "@polkadot/types-codec": "17.0.2", diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index ca6e36eb4c..ed699b3641 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "module": "NodeNext" }, "include": [ diff --git a/packages/cli/tsconfig.types.json b/packages/cli/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/cli/tsconfig.types.json +++ b/packages/cli/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/cli/vite.config.ts b/packages/cli/vite.config.ts index 6c3a5e2191..e2d0643c09 100644 --- a/packages/cli/vite.config.ts +++ b/packages/cli/vite.config.ts @@ -39,22 +39,22 @@ process.env.TS_NODE_PROJECT = path.resolve("./tsconfig.json"); // their absolute paths so nodejsPolarsNativeFilePlugin can copy them into // dist/bundle at bundle time. const nativeRequire = createRequire(import.meta.url); -// napi-rs writes every package's binary as `index..node`, so we -// have to rename on copy or the second overwrites the first in dist/bundle. const nativeBinaryPaths = [ { - src: nativeRequire.resolve("@prosopo/native-ja4/index.linux-x64-gnu.node"), + src: nativeRequire.resolve( + "@prosopo/native-ja4/dist/native/prosopo-native-ja4.linux-x64-gnu.node", + ), dest: "prosopo-native-ja4.node", }, { src: nativeRequire.resolve( - "@prosopo/native-merkle/index.linux-x64-gnu.node", + "@prosopo/native-merkle/dist/native/prosopo-native-merkle.linux-x64-gnu.node", ), dest: "prosopo-native-merkle.node", }, { src: nativeRequire.resolve( - "@prosopo/native-puzzle/index.linux-x64-gnu.node", + "@prosopo/native-puzzle/dist/native/prosopo-native-puzzle.linux-x64-gnu.node", ), dest: "prosopo-native-puzzle.node", }, diff --git a/packages/common/package.json b/packages/common/package.json index 89f023ace6..c1a5faa959 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -2,31 +2,30 @@ "name": "@prosopo/common", "version": "3.3.0", "description": "Prosopo common library", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" }, "./utils": { - "types": "./dist/utils/.export.d.ts", - "import": "./dist/utils/.export.js", + "types": "./dist/types/utils/.export.d.ts", + "import": "./dist/esm/utils/.export.js", "require": "./dist/cjs/utils/.export.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts" }, "author": "Prosopo Limited", diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index cd084c68cb..6553306310 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/common/tsconfig.types.json b/packages/common/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/common/tsconfig.types.json +++ b/packages/common/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/database/package.json b/packages/database/package.json index 1f9bb31366..fe21a9120a 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -2,27 +2,26 @@ "name": "@prosopo/database", "version": "4.2.10", "description": "Prosopo database plugins for provider", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "typecheck": "tsc --project tsconfig.types.json" + "build:types": "tsc --project tsconfig.types.json" }, "repository": { "type": "git", diff --git a/packages/database/tsconfig.json b/packages/database/tsconfig.json index 63b363a589..4257cae91a 100644 --- a/packages/database/tsconfig.json +++ b/packages/database/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/database/tsconfig.types.json b/packages/database/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/database/tsconfig.types.json +++ b/packages/database/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/datasets-fs/package.json b/packages/datasets-fs/package.json index 22b0ff49af..caee87d0eb 100644 --- a/packages/datasets-fs/package.json +++ b/packages/datasets-fs/package.json @@ -8,22 +8,21 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "cli": "node ./dist/cli.js" + "cli": "node ./dist/esm/cli.js" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, diff --git a/packages/datasets-fs/tsconfig.json b/packages/datasets-fs/tsconfig.json index 56467b9630..cc8af0fc02 100644 --- a/packages/datasets-fs/tsconfig.json +++ b/packages/datasets-fs/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/datasets-fs/tsconfig.types.json b/packages/datasets-fs/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/datasets-fs/tsconfig.types.json +++ b/packages/datasets-fs/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/datasets/package.json b/packages/datasets/package.json index 968f64d387..ac5be6ef94 100644 --- a/packages/datasets/package.json +++ b/packages/datasets/package.json @@ -8,35 +8,34 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "cli": "node ./dist/cli.js" + "cli": "node ./dist/esm/cli.js" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" }, "./captcha": { - "types": "./dist/captcha/index.d.ts", - "import": "./dist/captcha/index.js", + "types": "./dist/types/captcha/index.d.ts", + "import": "./dist/esm/captcha/index.js", "require": "./dist/cjs/captcha/index.cjs", - "default": "./dist/captcha/index.js" + "default": "./dist/esm/captcha/index.js" } }, "typesVersions": { "*": { - "types": ["dist/types"], - "captcha": ["dist/captcha"] + "types": ["dist/types/types"], + "captcha": ["dist/types/captcha"] } }, "dependencies": { diff --git a/packages/datasets/tsconfig.json b/packages/datasets/tsconfig.json index aceca3cdf0..be21bfba65 100644 --- a/packages/datasets/tsconfig.json +++ b/packages/datasets/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/datasets/tsconfig.types.json b/packages/datasets/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/datasets/tsconfig.types.json +++ b/packages/datasets/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/detector/package.json b/packages/detector/package.json index 1354860f6b..b5270e3eea 100644 --- a/packages/detector/package.json +++ b/packages/detector/package.json @@ -1,26 +1,25 @@ { "name": "@prosopo/detector", "version": "3.5.63", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "typecheck": "tsc --project tsconfig.types.json" + "build:types": "tsc --project tsconfig.types.json" }, "type": "module", "dependencies": { diff --git a/packages/detector/tsconfig.json b/packages/detector/tsconfig.json index e4e0458903..41041f2f8c 100644 --- a/packages/detector/tsconfig.json +++ b/packages/detector/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/detector/tsconfig.types.json b/packages/detector/tsconfig.types.json index 0e62586239..1e856cd309 100644 --- a/packages/detector/tsconfig.types.json +++ b/packages/detector/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": false, "composite": false, diff --git a/packages/dotenv/package.json b/packages/dotenv/package.json index 0c302ef8ce..2265c5a66d 100644 --- a/packages/dotenv/package.json +++ b/packages/dotenv/package.json @@ -1,12 +1,12 @@ { "name": "@prosopo/dotenv", "version": "3.0.62", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, @@ -17,14 +17,13 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "cli": "node ./dist/js/cli.js" + "cli": "node ./dist/esm/js/cli.js" }, "type": "module", "dependencies": { diff --git a/packages/dotenv/tsconfig.json b/packages/dotenv/tsconfig.json index e6ada3e99b..bfeb690a5e 100644 --- a/packages/dotenv/tsconfig.json +++ b/packages/dotenv/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/dotenv/tsconfig.types.json b/packages/dotenv/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/dotenv/tsconfig.types.json +++ b/packages/dotenv/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/env/package.json b/packages/env/package.json index e85d0f620c..30e2381e61 100644 --- a/packages/env/package.json +++ b/packages/env/package.json @@ -2,27 +2,26 @@ "name": "@prosopo/env", "version": "3.6.80", "description": "Path env prosopo environment", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json" + "build:types": "tsc --project tsconfig.types.json" }, "dependencies": { "@prosopo/ipinfo": "workspace:*", diff --git a/packages/env/tsconfig.json b/packages/env/tsconfig.json index 7e730afc0e..80af4c1e2c 100644 --- a/packages/env/tsconfig.json +++ b/packages/env/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/env/tsconfig.types.json b/packages/env/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/env/tsconfig.types.json +++ b/packages/env/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/fingerprint/package.json b/packages/fingerprint/package.json index a6ea3ea218..3bc2a37081 100644 --- a/packages/fingerprint/package.json +++ b/packages/fingerprint/package.json @@ -2,32 +2,31 @@ "name": "@prosopo/fingerprint", "version": "2.8.2", "description": "Provider fingerprint", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" }, "./summary": { - "types": "./dist/summary.d.ts", - "import": "./dist/summary.js", + "types": "./dist/types/summary.d.ts", + "import": "./dist/esm/summary.js", "require": "./dist/cjs/summary.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "typecheck": "tsc --project tsconfig.types.json" + "build:types": "tsc --project tsconfig.types.json" }, "repository": { "type": "git", diff --git a/packages/fingerprint/tsconfig.json b/packages/fingerprint/tsconfig.json index 3c3c14d9ff..f2d198a8b9 100644 --- a/packages/fingerprint/tsconfig.json +++ b/packages/fingerprint/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/fingerprint/tsconfig.types.json b/packages/fingerprint/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/fingerprint/tsconfig.types.json +++ b/packages/fingerprint/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/fingerprintjs b/packages/fingerprintjs index cd11fe5110..6ff8b07d70 160000 --- a/packages/fingerprintjs +++ b/packages/fingerprintjs @@ -1 +1 @@ -Subproject commit cd11fe5110f63877a8d18cc7f8297c26934926c3 +Subproject commit 6ff8b07d70717d0a45a024fefc801d4d8cbdfece diff --git a/packages/icon-order-assets/package.json b/packages/icon-order-assets/package.json index 31e4a545b4..c92dd130ff 100644 --- a/packages/icon-order-assets/package.json +++ b/packages/icon-order-assets/package.json @@ -2,28 +2,27 @@ "name": "@prosopo/icon-order-assets", "version": "0.2.2", "description": "Procedural imagery for the ordered-icon selection captcha", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "preview": "tsx scripts/preview.ts", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "typecheck": "tsc --project tsconfig.types.json" + "build:types": "tsc --project tsconfig.types.json" }, "repository": { "type": "git", diff --git a/packages/icon-order-assets/tsconfig.json b/packages/icon-order-assets/tsconfig.json index 5fb6f2c06b..e35fd7d3b0 100644 --- a/packages/icon-order-assets/tsconfig.json +++ b/packages/icon-order-assets/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/icon-order-assets/tsconfig.types.json b/packages/icon-order-assets/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/icon-order-assets/tsconfig.types.json +++ b/packages/icon-order-assets/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/ipinfo/package.json b/packages/ipinfo/package.json index 542db07723..7bfdc6601b 100644 --- a/packages/ipinfo/package.json +++ b/packages/ipinfo/package.json @@ -2,26 +2,25 @@ "name": "@prosopo/ipinfo", "version": "0.4.24", "description": "IP information service with MaxMind and ipapi.is backends", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest watch --config ./vite.test.config.ts" }, diff --git a/packages/ipinfo/tsconfig.json b/packages/ipinfo/tsconfig.json index 4e13e2cc78..d561418392 100644 --- a/packages/ipinfo/tsconfig.json +++ b/packages/ipinfo/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/ipinfo/tsconfig.types.json b/packages/ipinfo/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/ipinfo/tsconfig.types.json +++ b/packages/ipinfo/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/keyring/package.json b/packages/keyring/package.json index e46d6b4c0f..50889debf6 100644 --- a/packages/keyring/package.json +++ b/packages/keyring/package.json @@ -2,12 +2,12 @@ "name": "@prosopo/keyring", "version": "2.10.11", "description": "Keypair generator for Prosopo", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, @@ -16,12 +16,11 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts --mode $NODE_ENV" }, "repository": { diff --git a/packages/keyring/tsconfig.json b/packages/keyring/tsconfig.json index 491855022b..0b2d197a29 100644 --- a/packages/keyring/tsconfig.json +++ b/packages/keyring/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"], "allowJs": true }, diff --git a/packages/keyring/tsconfig.types.json b/packages/keyring/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/keyring/tsconfig.types.json +++ b/packages/keyring/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/load-balancer/package.json b/packages/load-balancer/package.json index d475a78b39..f29ef8869c 100644 --- a/packages/load-balancer/package.json +++ b/packages/load-balancer/package.json @@ -2,27 +2,26 @@ "name": "@prosopo/load-balancer", "version": "2.11.15", "description": "Provider load balancer", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json" + "build:types": "tsc --project tsconfig.types.json" }, "repository": { "type": "git", diff --git a/packages/load-balancer/tsconfig.json b/packages/load-balancer/tsconfig.json index 734bac838f..6b1899a5b2 100644 --- a/packages/load-balancer/tsconfig.json +++ b/packages/load-balancer/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/load-balancer/tsconfig.types.json b/packages/load-balancer/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/load-balancer/tsconfig.types.json +++ b/packages/load-balancer/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/locale/package.json b/packages/locale/package.json index 7fe83bda59..d57d40bb8a 100644 --- a/packages/locale/package.json +++ b/packages/locale/package.json @@ -6,34 +6,33 @@ "engines": { "node": "^24" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" }, "./locales/en/translation.json": { - "import": "./dist/locales/en/translation.json", - "require": "./dist/locales/en/translation.json" + "import": "./dist/esm/locales/en/translation.json", + "require": "./dist/cjs/locales/en/translation.json" }, "./locales/en/widget.json": { - "import": "./dist/locales/en/widget.json", - "require": "./dist/locales/en/widget.json" + "import": "./dist/esm/locales/en/widget.json", + "require": "./dist/cjs/locales/en/widget.json" }, "./locales/en/target.json": { - "import": "./dist/locales/en/target.json", - "require": "./dist/locales/en/target.json" + "import": "./dist/esm/locales/en/target.json", + "require": "./dist/cjs/locales/en/target.json" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json && node -e \"require('node:fs').cpSync('src/locales', 'dist/types/locales', { recursive: true })\"", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts" }, "author": "Prosopo Limited", diff --git a/packages/locale/src/i18nBackend.ts b/packages/locale/src/i18nBackend.ts index 30f6ae2b4f..95c5ddd74c 100644 --- a/packages/locale/src/i18nBackend.ts +++ b/packages/locale/src/i18nBackend.ts @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; import i18n, { type BackendModule, type NewableModule } from "i18next"; @@ -22,24 +21,12 @@ import { createRequestLanguageDetector } from "./requestLanguageDetector.js"; import { NAMESPACES } from "./translationKey.js"; import { isServerSide } from "./util.js"; -// The catalogues sit in `locales/` beside the ESM build (and the source), but -// the CJS build runs from `dist/cjs/`, one level below them. Browser bundles -// stub `fs` with an empty module, so it is reached through the default import -// and only on the server. -export const localesDirectory = ( - moduleDirectory: string, - exists: (file: string) => boolean = fs.existsSync, -): string => { - const beside = path.join(moduleDirectory, "locales"); - const above = path.join(moduleDirectory, "..", "locales"); - const hasCatalogues = (directory: string): boolean => - exists(path.join(directory, "en", `${NAMESPACES.server}.json`)); - return !hasCatalogues(beside) && hasCatalogues(above) ? above : beside; -}; - +// Each build (dist/esm, dist/cjs) carries its own copy of the catalogues in +// `locales/` beside it, as the source does. const cataloguePath = (): string => path.join( - localesDirectory(path.dirname(fileURLToPath(import.meta.url))), + path.dirname(fileURLToPath(import.meta.url)), + "locales", "{{lng}}", "{{ns}}.json", ); diff --git a/packages/locale/src/tests/i18nBackend.unit.test.ts b/packages/locale/src/tests/i18nBackend.unit.test.ts index 4f62b12d84..7009c3e7f0 100644 --- a/packages/locale/src/tests/i18nBackend.unit.test.ts +++ b/packages/locale/src/tests/i18nBackend.unit.test.ts @@ -110,10 +110,6 @@ const load = async (options: { }): Promise<{ initializeI18n: (callback?: (value: i18n) => void) => i18n; fsBackend: (loaded?: unknown) => NewableModule; - localesDirectory: ( - moduleDirectory: string, - exists?: (file: string) => boolean, - ) => string; harness: Harness; }> => { vi.resetModules(); @@ -136,7 +132,6 @@ const load = async (options: { return { initializeI18n: imported.default, fsBackend: imported.fsBackend, - localesDirectory: imported.localesDirectory, harness, }; }; @@ -264,53 +259,6 @@ describe("i18nBackend on a server, not yet initialised", () => { }); }); -describe("localesDirectory", () => { - const only = - (...present: string[]): ((file: string) => boolean) => - (file: string): boolean => - present.includes(file); - - test("uses locales beside the module, as in the ESM build", async () => { - const { localesDirectory } = await load({}); - expect( - localesDirectory( - "/pkg/dist", - only("/pkg/dist/locales/en/translation.json"), - ), - ).toBe("/pkg/dist/locales"); - }); - - test("uses locales one level up, as in the CJS build", async () => { - const { localesDirectory } = await load({}); - expect( - localesDirectory( - "/pkg/dist/cjs", - only("/pkg/dist/locales/en/translation.json"), - ), - ).toBe("/pkg/dist/locales"); - }); - - test("prefers locales beside the module when both exist", async () => { - const { localesDirectory } = await load({}); - expect( - localesDirectory( - "/pkg/dist/cjs", - only( - "/pkg/dist/cjs/locales/en/translation.json", - "/pkg/dist/locales/en/translation.json", - ), - ), - ).toBe("/pkg/dist/cjs/locales"); - }); - - test("falls back to locales beside the module when neither exists", async () => { - const { localesDirectory } = await load({}); - expect(localesDirectory("/pkg/dist/cjs", only())).toBe( - "/pkg/dist/cjs/locales", - ); - }); -}); - describe("fsBackend", () => { test("returns the backend class the CJS entry exports", async () => { const { fsBackend } = await load({}); diff --git a/packages/locale/tsconfig.json b/packages/locale/tsconfig.json index 7cb4ba591b..21b529dc2c 100644 --- a/packages/locale/tsconfig.json +++ b/packages/locale/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/locale/tsconfig.types.json b/packages/locale/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/locale/tsconfig.types.json +++ b/packages/locale/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/locale/turbo.json b/packages/locale/turbo.json deleted file mode 100644 index c9d3b6f34d..0000000000 --- a/packages/locale/turbo.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "typecheck": { - "dependsOn": ["^typecheck", "build"] - } - } -} diff --git a/packages/logger/package.json b/packages/logger/package.json index 36765ebfd5..fa557bf904 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -2,26 +2,25 @@ "name": "@prosopo/logger", "version": "2.1.5", "description": "Prosopo logger library", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts" }, "author": "Prosopo Limited", diff --git a/packages/logger/tsconfig.json b/packages/logger/tsconfig.json index 5ebc555169..5718ff0d75 100644 --- a/packages/logger/tsconfig.json +++ b/packages/logger/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/logger/tsconfig.types.json b/packages/logger/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/logger/tsconfig.types.json +++ b/packages/logger/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/native-ja4/index.js b/packages/native-ja4/index.js index 6552cd2d7c..6e2952c909 100644 --- a/packages/native-ja4/index.js +++ b/packages/native-ja4/index.js @@ -2,314 +2,25 @@ /* eslint-disable */ /* prettier-ignore */ -/* auto-generated by NAPI-RS */ - -const { existsSync, readFileSync } = require('fs') -const { join } = require('path') +// Loader for the single target this package builds (see `napi.targets`). +// The @napi-rs/cli in this workspace does not emit its own multi-platform +// loader, so this is hand-maintained: adding a target to package.json means +// adding a branch here. The require stays a string literal so the cli bundle's +// native-file plugin can swap it for the copy it places beside the bundle. const { platform, arch } = process -let nativeBinding = null -let localFileExisted = false -let loadError = null - -function isMusl() { - // For Node 10 - if (!process.report || typeof process.report.getReport !== 'function') { - try { - const lddPath = require('child_process').execSync('which ldd').toString().trim() - return readFileSync(lddPath, 'utf8').includes('musl') - } catch (e) { - return true - } - } else { - const { glibcVersionRuntime } = process.report.getReport().header - return !glibcVersionRuntime - } -} - -switch (platform) { - case 'android': - switch (arch) { - case 'arm64': - localFileExisted = existsSync(join(__dirname, 'index.android-arm64.node')) - try { - if (localFileExisted) { - nativeBinding = require('./index.android-arm64.node') - } else { - nativeBinding = require('@prosopo/native-ja4-android-arm64') - } - } catch (e) { - loadError = e - } - break - case 'arm': - localFileExisted = existsSync(join(__dirname, 'index.android-arm-eabi.node')) - try { - if (localFileExisted) { - nativeBinding = require('./index.android-arm-eabi.node') - } else { - nativeBinding = require('@prosopo/native-ja4-android-arm-eabi') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on Android ${arch}`) - } - break - case 'win32': - switch (arch) { - case 'x64': - localFileExisted = existsSync( - join(__dirname, 'index.win32-x64-msvc.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.win32-x64-msvc.node') - } else { - nativeBinding = require('@prosopo/native-ja4-win32-x64-msvc') - } - } catch (e) { - loadError = e - } - break - case 'ia32': - localFileExisted = existsSync( - join(__dirname, 'index.win32-ia32-msvc.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.win32-ia32-msvc.node') - } else { - nativeBinding = require('@prosopo/native-ja4-win32-ia32-msvc') - } - } catch (e) { - loadError = e - } - break - case 'arm64': - localFileExisted = existsSync( - join(__dirname, 'index.win32-arm64-msvc.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.win32-arm64-msvc.node') - } else { - nativeBinding = require('@prosopo/native-ja4-win32-arm64-msvc') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on Windows: ${arch}`) - } - break - case 'darwin': - localFileExisted = existsSync(join(__dirname, 'index.darwin-universal.node')) - try { - if (localFileExisted) { - nativeBinding = require('./index.darwin-universal.node') - } else { - nativeBinding = require('@prosopo/native-ja4-darwin-universal') - } - break - } catch {} - switch (arch) { - case 'x64': - localFileExisted = existsSync(join(__dirname, 'index.darwin-x64.node')) - try { - if (localFileExisted) { - nativeBinding = require('./index.darwin-x64.node') - } else { - nativeBinding = require('@prosopo/native-ja4-darwin-x64') - } - } catch (e) { - loadError = e - } - break - case 'arm64': - localFileExisted = existsSync( - join(__dirname, 'index.darwin-arm64.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.darwin-arm64.node') - } else { - nativeBinding = require('@prosopo/native-ja4-darwin-arm64') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on macOS: ${arch}`) - } - break - case 'freebsd': - if (arch !== 'x64') { - throw new Error(`Unsupported architecture on FreeBSD: ${arch}`) - } - localFileExisted = existsSync(join(__dirname, 'index.freebsd-x64.node')) - try { - if (localFileExisted) { - nativeBinding = require('./index.freebsd-x64.node') - } else { - nativeBinding = require('@prosopo/native-ja4-freebsd-x64') - } - } catch (e) { - loadError = e - } - break - case 'linux': - switch (arch) { - case 'x64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'index.linux-x64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-x64-musl.node') - } else { - nativeBinding = require('@prosopo/native-ja4-linux-x64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'index.linux-x64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-x64-gnu.node') - } else { - nativeBinding = require('@prosopo/native-ja4-linux-x64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 'arm64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'index.linux-arm64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-arm64-musl.node') - } else { - nativeBinding = require('@prosopo/native-ja4-linux-arm64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'index.linux-arm64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-arm64-gnu.node') - } else { - nativeBinding = require('@prosopo/native-ja4-linux-arm64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 'arm': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'index.linux-arm-musleabihf.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-arm-musleabihf.node') - } else { - nativeBinding = require('@prosopo/native-ja4-linux-arm-musleabihf') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'index.linux-arm-gnueabihf.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-arm-gnueabihf.node') - } else { - nativeBinding = require('@prosopo/native-ja4-linux-arm-gnueabihf') - } - } catch (e) { - loadError = e - } - } - break - case 'riscv64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'index.linux-riscv64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-riscv64-musl.node') - } else { - nativeBinding = require('@prosopo/native-ja4-linux-riscv64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'index.linux-riscv64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-riscv64-gnu.node') - } else { - nativeBinding = require('@prosopo/native-ja4-linux-riscv64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 's390x': - localFileExisted = existsSync( - join(__dirname, 'index.linux-s390x-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-s390x-gnu.node') - } else { - nativeBinding = require('@prosopo/native-ja4-linux-s390x-gnu') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on Linux: ${arch}`) - } - break - default: - throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) +if (platform !== 'linux' || arch !== 'x64') { + throw new Error( + `@prosopo/native-ja4: unsupported platform ${platform}-${arch} (built for linux-x64 only)`, + ) } -if (!nativeBinding) { - if (loadError) { - throw loadError - } - throw new Error(`Failed to load native binding`) +try { + module.exports = require('./dist/native/prosopo-native-ja4.linux-x64-gnu.node') +} catch (cause) { + throw new Error( + '@prosopo/native-ja4: cannot load dist/native/prosopo-native-ja4.linux-x64-gnu.node — run `pnpm --filter @prosopo/native-ja4 run build:native`', + { cause }, + ) } - -const { calculateJa4 } = nativeBinding - -module.exports.calculateJa4 = calculateJa4 diff --git a/packages/native-ja4/index.linux-x64-gnu.node b/packages/native-ja4/index.linux-x64-gnu.node deleted file mode 100755 index b7782a0def..0000000000 Binary files a/packages/native-ja4/index.linux-x64-gnu.node and /dev/null differ diff --git a/packages/native-ja4/package.json b/packages/native-ja4/package.json index 7889d15aa7..34911d22f2 100644 --- a/packages/native-ja4/package.json +++ b/packages/native-ja4/package.json @@ -11,7 +11,7 @@ }, "main": "index.js", "types": "index.d.ts", - "files": ["index.js", "index.d.ts", "*.node"], + "files": ["index.js", "index.d.ts", "dist/native/*.node"], "engines": { "node": "^24" }, @@ -20,12 +20,12 @@ "targets": ["x86_64-unknown-linux-gnu"] }, "scripts": { - "build": "if [ \"$NODE_ENV\" = production ]; then pnpm run build:release; else pnpm run build:debug; fi", - "build:debug": "napi build --platform", - "build:release": "napi build --platform --release", + "build:native": "if [ \"$NODE_ENV\" = production ]; then pnpm run build:release; else pnpm run build:debug; fi", + "build:debug": "napi build --platform --output-dir dist/native", + "build:release": "napi build --platform --release --output-dir dist/native", "test": "node --test \"tests/**/*.test.ts\"", "test:cargo": "cargo test", - "clean": "cargo clean && rm -f *.node index.js index.d.ts" + "clean": "cargo clean && rm -rf dist" }, "devDependencies": { "@napi-rs/cli": "3.10.8" diff --git a/packages/native-merkle/index.js b/packages/native-merkle/index.js index fd7138f9c7..91bf1cfbd5 100644 --- a/packages/native-merkle/index.js +++ b/packages/native-merkle/index.js @@ -2,317 +2,25 @@ /* eslint-disable */ /* prettier-ignore */ -/* auto-generated by NAPI-RS */ - -const { existsSync, readFileSync } = require('fs') -const { join } = require('path') +// Loader for the single target this package builds (see `napi.targets`). +// The @napi-rs/cli in this workspace does not emit its own multi-platform +// loader, so this is hand-maintained: adding a target to package.json means +// adding a branch here. The require stays a string literal so the cli bundle's +// native-file plugin can swap it for the copy it places beside the bundle. const { platform, arch } = process -let nativeBinding = null -let localFileExisted = false -let loadError = null - -function isMusl() { - // For Node 10 - if (!process.report || typeof process.report.getReport !== 'function') { - try { - const lddPath = require('child_process').execSync('which ldd').toString().trim() - return readFileSync(lddPath, 'utf8').includes('musl') - } catch (e) { - return true - } - } else { - const { glibcVersionRuntime } = process.report.getReport().header - return !glibcVersionRuntime - } -} - -switch (platform) { - case 'android': - switch (arch) { - case 'arm64': - localFileExisted = existsSync(join(__dirname, 'index.android-arm64.node')) - try { - if (localFileExisted) { - nativeBinding = require('./index.android-arm64.node') - } else { - nativeBinding = require('@prosopo/native-merkle-android-arm64') - } - } catch (e) { - loadError = e - } - break - case 'arm': - localFileExisted = existsSync(join(__dirname, 'index.android-arm-eabi.node')) - try { - if (localFileExisted) { - nativeBinding = require('./index.android-arm-eabi.node') - } else { - nativeBinding = require('@prosopo/native-merkle-android-arm-eabi') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on Android ${arch}`) - } - break - case 'win32': - switch (arch) { - case 'x64': - localFileExisted = existsSync( - join(__dirname, 'index.win32-x64-msvc.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.win32-x64-msvc.node') - } else { - nativeBinding = require('@prosopo/native-merkle-win32-x64-msvc') - } - } catch (e) { - loadError = e - } - break - case 'ia32': - localFileExisted = existsSync( - join(__dirname, 'index.win32-ia32-msvc.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.win32-ia32-msvc.node') - } else { - nativeBinding = require('@prosopo/native-merkle-win32-ia32-msvc') - } - } catch (e) { - loadError = e - } - break - case 'arm64': - localFileExisted = existsSync( - join(__dirname, 'index.win32-arm64-msvc.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.win32-arm64-msvc.node') - } else { - nativeBinding = require('@prosopo/native-merkle-win32-arm64-msvc') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on Windows: ${arch}`) - } - break - case 'darwin': - localFileExisted = existsSync(join(__dirname, 'index.darwin-universal.node')) - try { - if (localFileExisted) { - nativeBinding = require('./index.darwin-universal.node') - } else { - nativeBinding = require('@prosopo/native-merkle-darwin-universal') - } - break - } catch {} - switch (arch) { - case 'x64': - localFileExisted = existsSync(join(__dirname, 'index.darwin-x64.node')) - try { - if (localFileExisted) { - nativeBinding = require('./index.darwin-x64.node') - } else { - nativeBinding = require('@prosopo/native-merkle-darwin-x64') - } - } catch (e) { - loadError = e - } - break - case 'arm64': - localFileExisted = existsSync( - join(__dirname, 'index.darwin-arm64.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.darwin-arm64.node') - } else { - nativeBinding = require('@prosopo/native-merkle-darwin-arm64') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on macOS: ${arch}`) - } - break - case 'freebsd': - if (arch !== 'x64') { - throw new Error(`Unsupported architecture on FreeBSD: ${arch}`) - } - localFileExisted = existsSync(join(__dirname, 'index.freebsd-x64.node')) - try { - if (localFileExisted) { - nativeBinding = require('./index.freebsd-x64.node') - } else { - nativeBinding = require('@prosopo/native-merkle-freebsd-x64') - } - } catch (e) { - loadError = e - } - break - case 'linux': - switch (arch) { - case 'x64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'index.linux-x64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-x64-musl.node') - } else { - nativeBinding = require('@prosopo/native-merkle-linux-x64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'index.linux-x64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-x64-gnu.node') - } else { - nativeBinding = require('@prosopo/native-merkle-linux-x64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 'arm64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'index.linux-arm64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-arm64-musl.node') - } else { - nativeBinding = require('@prosopo/native-merkle-linux-arm64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'index.linux-arm64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-arm64-gnu.node') - } else { - nativeBinding = require('@prosopo/native-merkle-linux-arm64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 'arm': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'index.linux-arm-musleabihf.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-arm-musleabihf.node') - } else { - nativeBinding = require('@prosopo/native-merkle-linux-arm-musleabihf') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'index.linux-arm-gnueabihf.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-arm-gnueabihf.node') - } else { - nativeBinding = require('@prosopo/native-merkle-linux-arm-gnueabihf') - } - } catch (e) { - loadError = e - } - } - break - case 'riscv64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'index.linux-riscv64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-riscv64-musl.node') - } else { - nativeBinding = require('@prosopo/native-merkle-linux-riscv64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'index.linux-riscv64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-riscv64-gnu.node') - } else { - nativeBinding = require('@prosopo/native-merkle-linux-riscv64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 's390x': - localFileExisted = existsSync( - join(__dirname, 'index.linux-s390x-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./index.linux-s390x-gnu.node') - } else { - nativeBinding = require('@prosopo/native-merkle-linux-s390x-gnu') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on Linux: ${arch}`) - } - break - default: - throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) +if (platform !== 'linux' || arch !== 'x64') { + throw new Error( + `@prosopo/native-merkle: unsupported platform ${platform}-${arch} (built for linux-x64 only)`, + ) } -if (!nativeBinding) { - if (loadError) { - throw loadError - } - throw new Error(`Failed to load native binding`) +try { + module.exports = require('./dist/native/prosopo-native-merkle.linux-x64-gnu.node') +} catch (cause) { + throw new Error( + '@prosopo/native-merkle: cannot load dist/native/prosopo-native-merkle.linux-x64-gnu.node — run `pnpm --filter @prosopo/native-merkle run build:native`', + { cause }, + ) } - -const { hexHash, hexHashArray, computeCaptchaSolutionHash, buildMerkleLayers } = nativeBinding - -module.exports.hexHash = hexHash -module.exports.hexHashArray = hexHashArray -module.exports.computeCaptchaSolutionHash = computeCaptchaSolutionHash -module.exports.buildMerkleLayers = buildMerkleLayers diff --git a/packages/native-merkle/index.linux-x64-gnu.node b/packages/native-merkle/index.linux-x64-gnu.node deleted file mode 100755 index 934f0b643d..0000000000 Binary files a/packages/native-merkle/index.linux-x64-gnu.node and /dev/null differ diff --git a/packages/native-merkle/package.json b/packages/native-merkle/package.json index 91f8a0196c..5e91683c76 100644 --- a/packages/native-merkle/package.json +++ b/packages/native-merkle/package.json @@ -11,7 +11,7 @@ }, "main": "index.js", "types": "index.d.ts", - "files": ["index.js", "index.d.ts", "*.node"], + "files": ["index.js", "index.d.ts", "dist/native/*.node"], "engines": { "node": "^24" }, @@ -20,11 +20,11 @@ "targets": ["x86_64-unknown-linux-gnu"] }, "scripts": { - "build": "if [ \"$NODE_ENV\" = production ]; then pnpm run build:release; else pnpm run build:debug; fi", - "build:debug": "napi build --platform", - "build:release": "napi build --platform --release", + "build:native": "if [ \"$NODE_ENV\" = production ]; then pnpm run build:release; else pnpm run build:debug; fi", + "build:debug": "napi build --platform --output-dir dist/native", + "build:release": "napi build --platform --release --output-dir dist/native", "test:cargo": "cargo test", - "clean": "cargo clean && rm -f *.node index.js index.d.ts" + "clean": "cargo clean && rm -rf dist" }, "devDependencies": { "@napi-rs/cli": "3.10.8" diff --git a/packages/native-puzzle/index.js b/packages/native-puzzle/index.js index f8e8fa7dfb..02f094c664 100644 --- a/packages/native-puzzle/index.js +++ b/packages/native-puzzle/index.js @@ -5,10 +5,8 @@ // Loader for the single target this package builds (see `napi.targets`). // The @napi-rs/cli in this workspace does not emit its own multi-platform // loader, so this is hand-maintained: adding a target to package.json means -// adding a branch here. - -const { existsSync } = require('fs') -const { join } = require('path') +// adding a branch here. The require stays a string literal so the cli bundle's +// native-file plugin can swap it for the copy it places beside the bundle. const { platform, arch } = process @@ -18,11 +16,11 @@ if (platform !== 'linux' || arch !== 'x64') { ) } -const local = join(__dirname, 'index.linux-x64-gnu.node') -if (!existsSync(local)) { +try { + module.exports = require('./dist/native/prosopo-native-puzzle.linux-x64-gnu.node') +} catch (cause) { throw new Error( - '@prosopo/native-puzzle: index.linux-x64-gnu.node missing — run `pnpm --filter @prosopo/native-puzzle run build`', + '@prosopo/native-puzzle: cannot load dist/native/prosopo-native-puzzle.linux-x64-gnu.node — run `pnpm --filter @prosopo/native-puzzle run build:native`', + { cause }, ) } - -module.exports = require(local) diff --git a/packages/native-puzzle/index.linux-x64-gnu.node b/packages/native-puzzle/index.linux-x64-gnu.node deleted file mode 100755 index 0ddc290390..0000000000 Binary files a/packages/native-puzzle/index.linux-x64-gnu.node and /dev/null differ diff --git a/packages/native-puzzle/package.json b/packages/native-puzzle/package.json index 8ec1165c3c..9582528443 100644 --- a/packages/native-puzzle/package.json +++ b/packages/native-puzzle/package.json @@ -11,22 +11,22 @@ }, "main": "index.js", "types": "index.d.ts", - "files": ["index.js", "index.d.ts", "*.node"], + "files": ["index.js", "index.d.ts", "dist/native/*.node"], "engines": { "node": "^24" }, "napi": { - "binaryName": "index", + "binaryName": "prosopo-native-puzzle", "targets": ["x86_64-unknown-linux-gnu"] }, "scripts": { - "build": "if [ \"$NODE_ENV\" = production ]; then pnpm run build:release; else pnpm run build:debug; fi", - "build:debug": "napi build --platform", - "build:release": "napi build --platform --release", + "build:native": "if [ \"$NODE_ENV\" = production ]; then pnpm run build:release; else pnpm run build:debug; fi", + "build:debug": "napi build --platform --output-dir dist/native", + "build:release": "napi build --platform --release --output-dir dist/native", "bench": "pnpm run build:release && node bench.mjs", "test:cargo": "cargo test", "test": "node --test tests/dimensions.test.ts", - "clean": "cargo clean && rm -f *.node" + "clean": "cargo clean && rm -rf dist" }, "devDependencies": { "@napi-rs/cli": "3.10.8" diff --git a/packages/procaptcha-audio/package.json b/packages/procaptcha-audio/package.json index 3c581340f2..1c07384395 100644 --- a/packages/procaptcha-audio/package.json +++ b/packages/procaptcha-audio/package.json @@ -3,7 +3,7 @@ "version": "0.2.9", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/esm/index.js", "type": "module", "sideEffects": false, "engines": { @@ -11,20 +11,19 @@ }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, - "types": "dist/index.d.ts", + "types": "dist/types/index.d.ts", "source": "./src/index.ts", "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts" diff --git a/packages/procaptcha-audio/tsconfig.json b/packages/procaptcha-audio/tsconfig.json index 92806bd8ad..bd6abcdd20 100644 --- a/packages/procaptcha-audio/tsconfig.json +++ b/packages/procaptcha-audio/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"] }, "include": [ diff --git a/packages/procaptcha-audio/tsconfig.types.json b/packages/procaptcha-audio/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/procaptcha-audio/tsconfig.types.json +++ b/packages/procaptcha-audio/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/procaptcha-bundle/package.json b/packages/procaptcha-bundle/package.json index 27051033f3..3f75f75872 100644 --- a/packages/procaptcha-bundle/package.json +++ b/packages/procaptcha-bundle/package.json @@ -3,7 +3,7 @@ "version": "4.5.18", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/esm/index.js", "type": "module", "sideEffects": false, "engines": { @@ -11,24 +11,24 @@ }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" }, "./components": { - "import": "./dist/components.js", - "require": "./dist/components.cjs" + "types": "./dist/types/components.d.ts", + "import": "./dist/esm/components.js", + "require": "./dist/cjs/components.cjs" } }, - "types": "dist/index.d.ts", + "types": "dist/types/index.d.ts", "source": "./src/index.tsx", "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "bundle": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.config.ts --mode $NODE_ENV", "bundle:iife": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.iife.config.ts --mode $NODE_ENV", "start": "NODE_ENV=${NODE_ENV:-development}; vite serve --mode $NODE_ENV --host", diff --git a/packages/procaptcha-bundle/tsconfig.json b/packages/procaptcha-bundle/tsconfig.json index e557f55d25..5b609f1006 100644 --- a/packages/procaptcha-bundle/tsconfig.json +++ b/packages/procaptcha-bundle/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"] }, "include": [ diff --git a/packages/procaptcha-bundle/tsconfig.types.json b/packages/procaptcha-bundle/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/procaptcha-bundle/tsconfig.types.json +++ b/packages/procaptcha-bundle/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/procaptcha-bundle/vite.config.ts b/packages/procaptcha-bundle/vite.config.ts index 13e7d67f9e..97292b2544 100644 --- a/packages/procaptcha-bundle/vite.config.ts +++ b/packages/procaptcha-bundle/vite.config.ts @@ -112,7 +112,9 @@ export default defineConfig(async ({ command, mode }) => { ...frontendConfig.build?.rollupOptions?.output, manualChunks(id: string) { if ( - id.includes("packages/procaptcha-common/dist/components/honeypot") + id.includes( + "packages/procaptcha-common/dist/esm/components/honeypot", + ) ) { return honeypotChunkName; } @@ -134,7 +136,7 @@ export default defineConfig(async ({ command, mode }) => { return "web3Chunk"; } // Split up the extension code into 2 chunks - if (id.includes("packages/account/dist/extension")) { + if (id.includes("packages/account/dist/esm/extension")) { if (id.includes("ExtensionWeb3.js")) { return "web3Chunk"; } diff --git a/packages/procaptcha-common/package.json b/packages/procaptcha-common/package.json index 34ca82db3d..a950b10ad9 100644 --- a/packages/procaptcha-common/package.json +++ b/packages/procaptcha-common/package.json @@ -3,7 +3,7 @@ "version": "2.21.8", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/esm/index.js", "type": "module", "sideEffects": false, "engines": { @@ -11,20 +11,19 @@ }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, - "types": "dist/index.d.ts", + "types": "dist/types/index.d.ts", "source": "./src/index.ts", "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts" diff --git a/packages/procaptcha-common/tsconfig.json b/packages/procaptcha-common/tsconfig.json index 6b0ac8b3ef..beb00ad62a 100644 --- a/packages/procaptcha-common/tsconfig.json +++ b/packages/procaptcha-common/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"] }, "include": [ diff --git a/packages/procaptcha-common/tsconfig.types.json b/packages/procaptcha-common/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/procaptcha-common/tsconfig.types.json +++ b/packages/procaptcha-common/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/procaptcha-frictionless/package.json b/packages/procaptcha-frictionless/package.json index 5afd6bce16..1a541468ea 100644 --- a/packages/procaptcha-frictionless/package.json +++ b/packages/procaptcha-frictionless/package.json @@ -3,7 +3,7 @@ "version": "2.21.8", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/esm/index.js", "type": "module", "sideEffects": false, "engines": { @@ -11,21 +11,20 @@ }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, - "types": "dist/index.d.ts", + "types": "dist/types/index.d.ts", "source": "./src/index.ts", "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", + "clean": "del-cli --verbose dist", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json" + "build:types": "tsc --project tsconfig.types.json" }, "browserslist": ["> 0.5%, last 2 versions, not dead"], "dependencies": { diff --git a/packages/procaptcha-frictionless/tsconfig.json b/packages/procaptcha-frictionless/tsconfig.json index f26cdd3529..4902690693 100644 --- a/packages/procaptcha-frictionless/tsconfig.json +++ b/packages/procaptcha-frictionless/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"], "allowJs": true }, diff --git a/packages/procaptcha-frictionless/tsconfig.types.json b/packages/procaptcha-frictionless/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/procaptcha-frictionless/tsconfig.types.json +++ b/packages/procaptcha-frictionless/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/procaptcha-icon-order/package.json b/packages/procaptcha-icon-order/package.json index b03575fcd2..c7e769eac9 100644 --- a/packages/procaptcha-icon-order/package.json +++ b/packages/procaptcha-icon-order/package.json @@ -3,7 +3,7 @@ "version": "0.2.9", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/esm/index.js", "type": "module", "sideEffects": false, "engines": { @@ -11,20 +11,19 @@ }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, - "types": "dist/index.d.ts", + "types": "dist/types/index.d.ts", "source": "./src/index.ts", "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts" diff --git a/packages/procaptcha-icon-order/tsconfig.json b/packages/procaptcha-icon-order/tsconfig.json index 92806bd8ad..bd6abcdd20 100644 --- a/packages/procaptcha-icon-order/tsconfig.json +++ b/packages/procaptcha-icon-order/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"] }, "include": [ diff --git a/packages/procaptcha-icon-order/tsconfig.types.json b/packages/procaptcha-icon-order/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/procaptcha-icon-order/tsconfig.types.json +++ b/packages/procaptcha-icon-order/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/procaptcha-pow/package.json b/packages/procaptcha-pow/package.json index a36bc411b2..b22d598d3a 100644 --- a/packages/procaptcha-pow/package.json +++ b/packages/procaptcha-pow/package.json @@ -3,7 +3,7 @@ "version": "2.13.18", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/esm/index.js", "type": "module", "sideEffects": false, "engines": { @@ -11,20 +11,19 @@ }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, - "types": "dist/index.d.ts", + "types": "dist/types/index.d.ts", "source": "./src/index.ts", "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts" diff --git a/packages/procaptcha-pow/tsconfig.json b/packages/procaptcha-pow/tsconfig.json index 1fd69cb4ae..74e18ea3bb 100644 --- a/packages/procaptcha-pow/tsconfig.json +++ b/packages/procaptcha-pow/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"] }, "include": [ diff --git a/packages/procaptcha-pow/tsconfig.types.json b/packages/procaptcha-pow/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/procaptcha-pow/tsconfig.types.json +++ b/packages/procaptcha-pow/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/procaptcha-puzzle/package.json b/packages/procaptcha-puzzle/package.json index 0b1bee1546..66655513c1 100644 --- a/packages/procaptcha-puzzle/package.json +++ b/packages/procaptcha-puzzle/package.json @@ -3,7 +3,7 @@ "version": "2.17.8", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/esm/index.js", "type": "module", "sideEffects": false, "engines": { @@ -11,20 +11,19 @@ }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, - "types": "dist/index.d.ts", + "types": "dist/types/index.d.ts", "source": "./src/index.ts", "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts" diff --git a/packages/procaptcha-puzzle/tsconfig.json b/packages/procaptcha-puzzle/tsconfig.json index 92806bd8ad..bd6abcdd20 100644 --- a/packages/procaptcha-puzzle/tsconfig.json +++ b/packages/procaptcha-puzzle/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"] }, "include": [ diff --git a/packages/procaptcha-puzzle/tsconfig.types.json b/packages/procaptcha-puzzle/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/procaptcha-puzzle/tsconfig.types.json +++ b/packages/procaptcha-puzzle/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/procaptcha-react/package.json b/packages/procaptcha-react/package.json index 3d84041332..4e1c52b7e4 100644 --- a/packages/procaptcha-react/package.json +++ b/packages/procaptcha-react/package.json @@ -3,7 +3,7 @@ "version": "2.14.9", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/esm/index.js", "type": "module", "sideEffects": false, "engines": { @@ -11,20 +11,19 @@ }, "exports": { ".": { - "import": "./dist/index.js", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs", - "types": "./dist/index.d.ts" + "types": "./dist/types/index.d.ts" } }, - "types": "dist/index.d.ts", + "types": "dist/types/index.d.ts", "source": "./src/index.ts", "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts" diff --git a/packages/procaptcha-react/tsconfig.json b/packages/procaptcha-react/tsconfig.json index 0ee61d6c4e..45802d886d 100644 --- a/packages/procaptcha-react/tsconfig.json +++ b/packages/procaptcha-react/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom", "dom.iterable"] }, "include": [ diff --git a/packages/procaptcha-react/tsconfig.types.json b/packages/procaptcha-react/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/procaptcha-react/tsconfig.types.json +++ b/packages/procaptcha-react/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/procaptcha-wrapper/package.json b/packages/procaptcha-wrapper/package.json index 4acc0e5d5d..f590d0ff27 100644 --- a/packages/procaptcha-wrapper/package.json +++ b/packages/procaptcha-wrapper/package.json @@ -5,22 +5,21 @@ "engines": { "node": "^24" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts" diff --git a/packages/procaptcha-wrapper/tsconfig.json b/packages/procaptcha-wrapper/tsconfig.json index 93f63cb19d..50f9c0d7f9 100644 --- a/packages/procaptcha-wrapper/tsconfig.json +++ b/packages/procaptcha-wrapper/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "./src", diff --git a/packages/procaptcha-wrapper/tsconfig.types.json b/packages/procaptcha-wrapper/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/procaptcha-wrapper/tsconfig.types.json +++ b/packages/procaptcha-wrapper/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/procaptcha/package.json b/packages/procaptcha/package.json index bdef0684f2..e0719659cf 100644 --- a/packages/procaptcha/package.json +++ b/packages/procaptcha/package.json @@ -3,34 +3,33 @@ "version": "2.11.35", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", - "main": "./dist/index.js", + "main": "./dist/esm/index.js", "type": "module", - "types": "./dist/index.d.ts", + "types": "./dist/types/index.d.ts", "engines": { "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest watch --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" }, "./modules/Manager": { - "types": "./dist/modules/Manager.d.ts", - "import": "./dist/modules/Manager.js", + "types": "./dist/types/modules/Manager.d.ts", + "import": "./dist/esm/modules/Manager.js", "require": "./dist/cjs/modules/Manager.cjs", - "default": "./dist/modules/Manager.js" + "default": "./dist/esm/modules/Manager.js" } }, "dependencies": { diff --git a/packages/procaptcha/tsconfig.json b/packages/procaptcha/tsconfig.json index c44d67febf..9f89e0179a 100644 --- a/packages/procaptcha/tsconfig.json +++ b/packages/procaptcha/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"] }, "include": [ diff --git a/packages/procaptcha/tsconfig.types.json b/packages/procaptcha/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/procaptcha/tsconfig.types.json +++ b/packages/procaptcha/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/provider/package.json b/packages/provider/package.json index f94c90372f..9f3d529620 100644 --- a/packages/provider/package.json +++ b/packages/provider/package.json @@ -8,13 +8,12 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "build:edge": "node ./scripts/buildEdgeScript.mjs", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test:unit": "NODE_ENV=${NODE_ENV:-test}; TEST_TYPE=unit pnpm exec vitest run --config ./vite.test.config.ts", "test:integration": "NODE_ENV=${NODE_ENV:-test}; TEST_TYPE=integration DECISION_MACHINE_ARTIFACT_CACHE_TTL_MS=1 pnpm exec vitest run --config ./vite.threads.test.config.ts", "test": "pnpm run test:unit && pnpm run test:integration", @@ -97,12 +96,12 @@ }, "homepage": "https://github.com/prosopo/captcha#readme", "sideEffects": false, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } } diff --git a/packages/provider/src/api/startProviderApi.ts b/packages/provider/src/api/startProviderApi.ts index edb0c7ca8e..4a99d1335f 100644 --- a/packages/provider/src/api/startProviderApi.ts +++ b/packages/provider/src/api/startProviderApi.ts @@ -16,7 +16,6 @@ import fs from "node:fs"; import https from "node:https"; import type { Server } from "node:net"; import path from "node:path"; -import { fileURLToPath } from "node:url"; import { apiExpressRouterFactory, authMiddleware, @@ -36,6 +35,7 @@ import { getExpressApiRuleRateLimits, } from "@prosopo/user-access-policy/api"; import type { JWT } from "@prosopo/util-crypto"; +import { packageDir } from "@prosopo/util/node"; import cors, { type CorsOptions } from "cors"; import express from "express"; import type { Request } from "express"; @@ -71,15 +71,25 @@ import { prosopoVerifyRouter } from "./verify.js"; */ const DETECTOR_POOL_BODY_LIMIT = "128mb"; -const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const certPath = path.resolve(__dirname, "../../../../certs"); -const keyPath = path.join(certPath, "server.key"); -const crtPath = path.join(certPath, "server.crt"); - /** - * Check if TLS certificates are available - * @returns True if both key and cert files exist + * The repo's TLS key and certificate, when both exist. A bundle copied alone + * into an image has no package above it, so it has none and serves HTTP. */ +const tlsFiles = (): { key: string; cert: string } | undefined => { + const pkg = packageDir(import.meta.url); + if (pkg === undefined) { + return undefined; + } + const certs = path.resolve(pkg, "../../certs"); + const files = { + key: path.join(certs, "server.key"), + cert: path.join(certs, "server.crt"), + }; + return fs.existsSync(files.key) && fs.existsSync(files.cert) + ? files + : undefined; +}; + /** * CORS for the client API. See the comment where it is applied. * `Prosopo-Lang` carries the widget's language list (see @prosopo/locale). @@ -100,9 +110,7 @@ export const providerCorsOptions: CorsOptions = { maxAge: 86400, }; -export const isTlsAvailable = (): boolean => { - return fs.existsSync(keyPath) && fs.existsSync(crtPath); -}; +export const isTlsAvailable = (): boolean => tlsFiles() !== undefined; export const getServerVerifyPaths = (): ClientApiPaths[] => Object.values(ClientApiPaths).filter((path) => path.endsWith("/verify")); @@ -454,13 +462,13 @@ export async function startProviderApi( apiApp.use(prosopoRouter(env)); // Check if certificates exist and create HTTPS server if available - const useTls = fs.existsSync(keyPath) && fs.existsSync(crtPath); + const tls = tlsFiles(); - if (useTls) { + if (tls) { env.logger.info(() => ({ msg: "Starting Provider API with HTTPS" })); const httpsOptions = { - key: fs.readFileSync(keyPath), - cert: fs.readFileSync(crtPath), + key: fs.readFileSync(tls.key), + cert: fs.readFileSync(tls.cert), }; const httpsServer = https .createServer(httpsOptions, apiApp) diff --git a/packages/provider/src/tasks/detection/decoderModules.ts b/packages/provider/src/tasks/detection/decoderModules.ts index 463349e9e3..30b42fa93f 100644 --- a/packages/provider/src/tasks/detection/decoderModules.ts +++ b/packages/provider/src/tasks/detection/decoderModules.ts @@ -22,9 +22,9 @@ * construct. * * Resolution works unchanged in both layouts because each is relative to this - * module: from `dist/tasks/detection/` in development (tsc copies the .js - * decoders through, `allowJs`), and from beside `provider.cli.bundle.js` in - * production, where `copyAssetsPlugin` puts them under these exact names. + * module: from `dist/esm/tasks/detection/` in development (the ESM build + * copies the .js decoders through), and from beside `provider.cli.bundle.js` + * in production, where `copyAssetsPlugin` puts them under these exact names. */ export const DECODERS = ["payload", "simd", "behaviour"] as const; diff --git a/packages/provider/tsconfig.json b/packages/provider/tsconfig.json index 4fab42001c..7bb9792edd 100644 --- a/packages/provider/tsconfig.json +++ b/packages/provider/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "allowJs": true }, "include": [ diff --git a/packages/provider/tsconfig.types.json b/packages/provider/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/provider/tsconfig.types.json +++ b/packages/provider/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/provider/vite.esm.config.ts b/packages/provider/vite.esm.config.ts index 538544dc57..cfe3bc7c83 100644 --- a/packages/provider/vite.esm.config.ts +++ b/packages/provider/vite.esm.config.ts @@ -26,7 +26,7 @@ export default async function () { plugins: [ VitePluginCopy({ srcDir: "src", - destDir: "dist", + destDir: "dist/esm", include: ["**/detection/*.js"], }), ], diff --git a/packages/puzzle-assets/package.json b/packages/puzzle-assets/package.json index f1fb155f8a..b0747c23f9 100644 --- a/packages/puzzle-assets/package.json +++ b/packages/puzzle-assets/package.json @@ -2,33 +2,32 @@ "name": "@prosopo/puzzle-assets", "version": "0.2.3", "description": "Procedural imagery for the slider puzzle captcha", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" }, "./browser": { - "types": "./dist/browser.d.ts", - "import": "./dist/browser.js", + "types": "./dist/types/browser.d.ts", + "import": "./dist/esm/browser.js", "require": "./dist/cjs/browser.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", "preview": "tsx scripts/preview.ts", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "typecheck": "tsc --project tsconfig.types.json" + "build:types": "tsc --project tsconfig.types.json" }, "repository": { "type": "git", diff --git a/packages/puzzle-assets/tsconfig.json b/packages/puzzle-assets/tsconfig.json index 6ae62bb651..de18742144 100644 --- a/packages/puzzle-assets/tsconfig.json +++ b/packages/puzzle-assets/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/puzzle-assets/tsconfig.types.json b/packages/puzzle-assets/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/puzzle-assets/tsconfig.types.json +++ b/packages/puzzle-assets/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/puzzle-assets/vite.esm.config.ts b/packages/puzzle-assets/vite.esm.config.ts index 83a576cfd3..3635ea1a7f 100644 --- a/packages/puzzle-assets/vite.esm.config.ts +++ b/packages/puzzle-assets/vite.esm.config.ts @@ -16,7 +16,7 @@ import path from "node:path"; import { ViteEsmConfig } from "@prosopo/config"; // Both `.` and `./browser` are advertised in package.json exports. Vite -// only emits `dist/browser.js` if it's declared as an entry — otherwise +// only emits `dist/esm/browser.js` if it's declared as an entry — otherwise // downstream browser consumers can't resolve @prosopo/puzzle-assets/browser // after the ESM build runs. export default function () { diff --git a/packages/redis-client/package.json b/packages/redis-client/package.json index 695607f4c1..504427bd05 100644 --- a/packages/redis-client/package.json +++ b/packages/redis-client/package.json @@ -2,26 +2,25 @@ "name": "@prosopo/redis-client", "version": "1.0.42", "description": "Pluggable Redis client for non-blocking connections with smart index creation", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test:integration": "NODE_ENV=${NODE_ENV:-test}; TEST_TYPE=integration pnpm exec vitest run --config ./vite.test.config.ts", "test:unit": "NODE_ENV=${NODE_ENV:-test}; TEST_TYPE=unit pnpm exec vitest run --config ./vite.test.config.ts", "test": "pnpm run test:unit && pnpm run test:integration" diff --git a/packages/redis-client/tsconfig.json b/packages/redis-client/tsconfig.json index a264d9b925..bad66645b7 100644 --- a/packages/redis-client/tsconfig.json +++ b/packages/redis-client/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "paths": { "#policy/*": ["./src/*"] } diff --git a/packages/redis-client/tsconfig.types.json b/packages/redis-client/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/redis-client/tsconfig.types.json +++ b/packages/redis-client/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/server/package.json b/packages/server/package.json index 1e7c70bc01..f7a557e469 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -2,26 +2,25 @@ "name": "@prosopo/server", "version": "2.14.0", "description": "NodeJS package for server side communication with the prosopo captcha client", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts" }, "repository": { diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json index f319d79949..d258813ac2 100644 --- a/packages/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"] }, "include": [ diff --git a/packages/server/tsconfig.types.json b/packages/server/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/server/tsconfig.types.json +++ b/packages/server/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/types-database/package.json b/packages/types-database/package.json index 9d6cf8c4ad..ae2f9c7dfa 100644 --- a/packages/types-database/package.json +++ b/packages/types-database/package.json @@ -3,12 +3,12 @@ "version": "5.11.2", "description": "Types for prosopo database", "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, @@ -16,12 +16,11 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts --mode $NODE_ENV" }, "repository": { diff --git a/packages/types-database/tsconfig.json b/packages/types-database/tsconfig.json index b85bc3295f..8bec3f2762 100644 --- a/packages/types-database/tsconfig.json +++ b/packages/types-database/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/types-database/tsconfig.types.json b/packages/types-database/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/types-database/tsconfig.types.json +++ b/packages/types-database/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/types-env/package.json b/packages/types-env/package.json index 30dca26057..937d7b09ea 100644 --- a/packages/types-env/package.json +++ b/packages/types-env/package.json @@ -2,26 +2,25 @@ "name": "@prosopo/types-env", "version": "2.11.26", "description": "Types for prosopo environment", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "type": "module", "engines": { "node": "^24" }, "exports": { ".": { - "import": "./dist/index.js", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs", - "types": "./dist/index.d.ts" + "types": "./dist/types/index.d.ts" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --coverage --config ./vite.test.config.ts" diff --git a/packages/types-env/tsconfig.json b/packages/types-env/tsconfig.json index e76e3fc417..fde42b59cf 100644 --- a/packages/types-env/tsconfig.json +++ b/packages/types-env/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/types-env/tsconfig.types.json b/packages/types-env/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/types-env/tsconfig.types.json +++ b/packages/types-env/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/types/package.json b/packages/types/package.json index 2327b9331e..d4a7718972 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -3,12 +3,12 @@ "version": "5.18.0", "description": "Types for prosopo TypeScript packages", "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, @@ -16,12 +16,11 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts --mode $NODE_ENV" }, "repository": { diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json index 5ff92c02c1..aa96be4979 100644 --- a/packages/types/tsconfig.json +++ b/packages/types/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/types/tsconfig.types.json b/packages/types/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/types/tsconfig.types.json +++ b/packages/types/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/user-access-policy/entries.ts b/packages/user-access-policy/entries.ts index 1dbbdeec27..1c18eadf1d 100644 --- a/packages/user-access-policy/entries.ts +++ b/packages/user-access-policy/entries.ts @@ -14,7 +14,7 @@ import fg from "fast-glob"; -// package.json maps "#policy/*" to "./dist/*", so every emitted module is +// package.json maps "#policy/*" to "./dist/esm/*", so every emitted module is // importable by consumers (the unit tests do exactly that). vite-plugin-no-bundle // emits one file per source module either way, but rolldown prunes named exports // that no *in-graph* module imports — rollup kept them. Left as just the four diff --git a/packages/user-access-policy/package.json b/packages/user-access-policy/package.json index bf05bd0370..13578acaf6 100644 --- a/packages/user-access-policy/package.json +++ b/packages/user-access-policy/package.json @@ -7,36 +7,38 @@ }, "exports": { ".": { - "types": "./dist/.export.d.ts", - "import": "./dist/.export.js", + "types": "./dist/types/.export.d.ts", + "import": "./dist/esm/.export.js", "require": "./dist/cjs/.export.cjs" }, "./api": { - "types": "./dist/api/.export.d.ts", - "import": "./dist/api/.export.js", + "types": "./dist/types/api/.export.d.ts", + "import": "./dist/esm/api/.export.js", "require": "./dist/cjs/api/.export.cjs" }, "./redis": { - "types": "./dist/redis/.export.d.ts", - "import": "./dist/redis/.export.js", + "types": "./dist/types/redis/.export.d.ts", + "import": "./dist/esm/redis/.export.js", "require": "./dist/cjs/redis/.export.cjs" }, "./mongoose": { - "types": "./dist/mongoose/.export.d.ts", - "import": "./dist/mongoose/.export.js", + "types": "./dist/types/mongoose/.export.d.ts", + "import": "./dist/esm/mongoose/.export.js", "require": "./dist/cjs/mongoose/.export.cjs" } }, "imports": { - "#policy/*": "./dist/*" + "#policy/*": { + "types": "./dist/types/*", + "default": "./dist/esm/*" + } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test:unit": "NODE_ENV=${NODE_ENV:-test}; TEST_TYPE=unit pnpm exec vitest run --config ./vite.test.config.ts", "test:integration": "NODE_ENV=${NODE_ENV:-test}; TEST_TYPE=integration pnpm exec vitest run --config ./vite.test.config.ts", "test": "pnpm run test:unit && pnpm run test:integration" diff --git a/packages/user-access-policy/tsconfig.json b/packages/user-access-policy/tsconfig.json index b717a27e63..383f6d7b50 100644 --- a/packages/user-access-policy/tsconfig.json +++ b/packages/user-access-policy/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "paths": { "#policy/*": ["./src/*"] } diff --git a/packages/user-access-policy/tsconfig.types.json b/packages/user-access-policy/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/user-access-policy/tsconfig.types.json +++ b/packages/user-access-policy/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/util-crypto/package.json b/packages/util-crypto/package.json index 7a066fe73a..3c3cf6ee9f 100644 --- a/packages/util-crypto/package.json +++ b/packages/util-crypto/package.json @@ -9,21 +9,20 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts", - "cli": "node ./dist/js/cli.js" + "cli": "node ./dist/esm/js/cli.js" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, diff --git a/packages/util-crypto/tsconfig.json b/packages/util-crypto/tsconfig.json index f5e764b56e..e9249c4807 100644 --- a/packages/util-crypto/tsconfig.json +++ b/packages/util-crypto/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/util-crypto/tsconfig.types.json b/packages/util-crypto/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/util-crypto/tsconfig.types.json +++ b/packages/util-crypto/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/util/package.json b/packages/util/package.json index dfa96fdf18..e9f49ab10d 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -8,37 +8,36 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", - "cli": "node ./dist/js/cli.js", + "build:types": "tsc --project tsconfig.types.json", + "cli": "node ./dist/esm/js/cli.js", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts" }, - "main": "dist/index.js", + "main": "dist/esm/index.js", "type": "module", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" }, "./lodash": { - "types": "./dist/lodash.d.ts", - "import": "./dist/lodash.js", + "types": "./dist/types/lodash.d.ts", + "import": "./dist/esm/lodash.js", "require": "./dist/cjs/lodash.cjs", - "default": "./dist/lodash.js" + "default": "./dist/esm/lodash.js" }, "./node": { - "types": "./dist/node.d.ts", - "import": "./dist/node.js", + "types": "./dist/types/node.d.ts", + "import": "./dist/esm/node.js", "require": "./dist/cjs/node.cjs", - "default": "./dist/node.js" + "default": "./dist/esm/node.js" } }, - "types": "dist/index.d.ts", + "types": "dist/types/index.d.ts", "dependencies": { "@noble/hashes": "2.4.0", "ip-address": "10.7.4", diff --git a/packages/util/src/node.ts b/packages/util/src/node.ts index 96ba39f4b7..bef8c7b2f0 100644 --- a/packages/util/src/node.ts +++ b/packages/util/src/node.ts @@ -12,3 +12,4 @@ // See the License for the specific language governing permissions and // limitations under the License. export * from "./cacheFile.js"; +export * from "./packageDir.js"; diff --git a/packages/util/src/packageDir.ts b/packages/util/src/packageDir.ts new file mode 100644 index 0000000000..51399fd942 --- /dev/null +++ b/packages/util/src/packageDir.ts @@ -0,0 +1,37 @@ +// Copyright 2021-2026 Prosopo (UK) Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +/** + * The directory of the package that contains the module at `moduleUrl`: + * the nearest ancestor holding a package.json. Resolve package-relative paths + * from here rather than climbing `../` from the module itself, whose depth + * differs between `src/`, `dist//` and a single-file bundle. + * Undefined when nothing above has one, e.g. a bundle copied alone into an + * image. + */ +export const packageDir = (moduleUrl: string | URL): string | undefined => { + const start = path.dirname(fileURLToPath(moduleUrl)); + for (let dir = start; ; dir = path.dirname(dir)) { + if (fs.existsSync(path.join(dir, "package.json"))) { + return dir; + } + if (path.dirname(dir) === dir) { + return undefined; + } + } +}; diff --git a/packages/util/src/tests/packageDir.unit.test.ts b/packages/util/src/tests/packageDir.unit.test.ts new file mode 100644 index 0000000000..3cc29d17fa --- /dev/null +++ b/packages/util/src/tests/packageDir.unit.test.ts @@ -0,0 +1,70 @@ +// Copyright 2021-2026 Prosopo (UK) Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { packageDir } from "../packageDir.js"; + +describe("packageDir", () => { + let root: string; + + beforeEach(() => { + root = fs.mkdtempSync(path.join(os.tmpdir(), "packageDir-")); + fs.writeFileSync(path.join(root, "package.json"), "{}"); + }); + + afterEach(() => { + fs.rmSync(root, { recursive: true, force: true }); + }); + + const moduleUrl = (...segments: string[]): URL => + pathToFileURL(path.join(root, ...segments)); + + it("finds the package from a module in src", () => { + expect(packageDir(moduleUrl("src", "index.ts"))).toBe(root); + }); + + it("finds the same package from a deeper build variant", () => { + expect(packageDir(moduleUrl("dist", "esm", "api", "x.js"))).toBe(root); + }); + + it("accepts the url as a string", () => { + expect(packageDir(moduleUrl("src", "a.ts").href)).toBe(root); + }); + + it("stops at the nearest package.json", () => { + const nested = path.join(root, "node_modules", "dep"); + fs.mkdirSync(path.join(nested, "lib"), { recursive: true }); + fs.writeFileSync(path.join(nested, "package.json"), "{}"); + expect(packageDir(pathToFileURL(path.join(nested, "lib", "i.js")))).toBe( + nested, + ); + }); + + it("is undefined when no package.json is above the module", () => { + fs.rmSync(path.join(root, "package.json")); + expect(packageDir(moduleUrl("src", "a.ts"))).toBeUndefined(); + }); + + it("finds this package from its own module", () => { + const own = packageDir(import.meta.url) ?? ""; + const manifest = JSON.parse( + fs.readFileSync(path.join(own, "package.json"), "utf8"), + ) as { name?: unknown }; + expect(manifest.name).toBe("@prosopo/util"); + }); +}); diff --git a/packages/util/tsconfig.json b/packages/util/tsconfig.json index f5e764b56e..e9249c4807 100644 --- a/packages/util/tsconfig.json +++ b/packages/util/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/util/tsconfig.types.json b/packages/util/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/util/tsconfig.types.json +++ b/packages/util/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/web-bot-auth/package.json b/packages/web-bot-auth/package.json index bab62ca607..938d2ce88e 100644 --- a/packages/web-bot-auth/package.json +++ b/packages/web-bot-auth/package.json @@ -1,12 +1,12 @@ { "name": "@prosopo/web-bot-auth", "version": "0.1.4", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, @@ -17,12 +17,11 @@ "node": "^24" }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts" }, "type": "module", diff --git a/packages/web-bot-auth/tsconfig.json b/packages/web-bot-auth/tsconfig.json index f5e764b56e..e9249c4807 100644 --- a/packages/web-bot-auth/tsconfig.json +++ b/packages/web-bot-auth/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo" }, "include": [ "src", diff --git a/packages/web-bot-auth/tsconfig.types.json b/packages/web-bot-auth/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/web-bot-auth/tsconfig.types.json +++ b/packages/web-bot-auth/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/packages/widget-skeleton/package.json b/packages/widget-skeleton/package.json index df5d9e0078..5b7be2e2a4 100644 --- a/packages/widget-skeleton/package.json +++ b/packages/widget-skeleton/package.json @@ -6,22 +6,21 @@ "engines": { "node": "^24" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/esm/index.js", + "types": "dist/types/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" } }, "scripts": { - "clean": "del-cli --verbose dist tsconfig.tsbuildinfo", - "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}", - "build:cross-env": "vite build --config vite.esm.config.ts", + "clean": "del-cli --verbose dist", + "build:esm": "vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}", "build:tsc": "tsc --build --verbose", "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV", - "typecheck": "tsc --project tsconfig.types.json", + "build:types": "tsc --project tsconfig.types.json", "test": "NODE_ENV=${NODE_ENV:-test}; TEST_TYPE=unit pnpm exec vitest run --config ./vite.test.config.ts", "test:watch": "NODE_ENV=${NODE_ENV:-test}; TEST_TYPE=unit pnpm exec vitest --config ./vite.test.config.ts", "test:coverage": "NODE_ENV=${NODE_ENV:-test}; TEST_TYPE=unit pnpm exec vitest run --coverage --config ./vite.test.config.ts", diff --git a/packages/widget-skeleton/tsconfig.json b/packages/widget-skeleton/tsconfig.json index 668e207c49..02ba1e5fe6 100644 --- a/packages/widget-skeleton/tsconfig.json +++ b/packages/widget-skeleton/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist", + "outDir": "./dist/tsc", + "tsBuildInfoFile": "./dist/tsc/tsconfig.tsbuildinfo", "lib": ["es6", "dom"], "jsxImportSource": "@emotion/react" }, diff --git a/packages/widget-skeleton/tsconfig.types.json b/packages/widget-skeleton/tsconfig.types.json index e2d2929993..507558fdbb 100644 --- a/packages/widget-skeleton/tsconfig.types.json +++ b/packages/widget-skeleton/tsconfig.types.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "emitDeclarationOnly": true, + "outDir": "./dist/types", + "tsBuildInfoFile": null, "declaration": true, "declarationMap": true, "composite": false diff --git a/turbo.json b/turbo.json index ac52789339..d149ea5198 100644 --- a/turbo.json +++ b/turbo.json @@ -15,21 +15,42 @@ "daemon": false, "envMode": "loose", "tasks": { + // Each build variant writes only its own dist/ dir, so turbo can + // cache and restore every variant on its own. `build` is the aggregate a + // package needs at runtime: its ESM, its declarations and, for the napi + // packages, the native addon. "build": { - "dependsOn": ["^build", "@prosopo/config#build"], - "outputs": ["dist/**", "*.tsbuildinfo"] + "dependsOn": ["^build", "build:esm", "build:types", "build:native"], + "outputs": [] }, + "build:esm": { + "dependsOn": ["^build:esm", "@prosopo/config#build"], + "outputs": ["dist/esm/**"] + }, + "build:types": { + "dependsOn": ["^build:types"], + "outputs": ["dist/types/**"] + }, + // Workspace dependencies resolve through `exports.types`, which is + // dist/types, not the dist/tsc this task emits. "build:tsc": { - "dependsOn": ["^build:tsc"], - "outputs": ["dist/**", "*.tsbuildinfo"] + "dependsOn": ["^build:tsc", "^build:types"], + "outputs": ["dist/tsc/**"] }, "build:cjs": { "dependsOn": ["^build:cjs", "@prosopo/config#build"], - "outputs": ["dist/**", "*.tsbuildinfo"] + "outputs": ["dist/cjs/**"] + }, + // Debug builds unless NODE_ENV=production; NODE_ENV is a global env var, + // so the two profiles are cached apart. + "build:native": { + "dependsOn": ["^build:native"], + "outputs": ["dist/native/**"] }, + // The cli bundle copies the native addons in beside itself. "bundle": { - "dependsOn": ["@prosopo/config#build"], - "outputs": ["dist/**", "*.tsbuildinfo"] + "dependsOn": ["@prosopo/config#build", "^build:native"], + "outputs": ["dist/bundle/**", "!dist/bundle/procaptcha.bundle.iife.js*"] }, // Image builds copy dist/bundle out of the build context, so they wait on // the bundle task. Not cached: the artefact is an image in the docker @@ -67,27 +88,25 @@ "dependsOn": ["build:docker"], "cache": false }, + // The IIFE fallback ships beside the ESM bundle, from the same folder the + // deployer uploads, so it shares dist/bundle and owns only its own files. + // It runs after `bundle`, which empties dist/bundle before writing. "bundle:iife": { - "dependsOn": ["@prosopo/config#build"], - "outputs": ["dist/**", "*.tsbuildinfo"] + "dependsOn": ["@prosopo/config#build", "bundle"], + "outputs": ["dist/bundle/procaptcha.bundle.iife.js*"] }, "bundle:webpack": { "dependsOn": ["@prosopo/config#build"], - "outputs": ["dist/**", "*.tsbuildinfo"] + "outputs": ["dist/bundle-webpack/**"] }, "typecheck": { - "dependsOn": ["^typecheck"] + "dependsOn": ["build:types"] }, "test": { - // Also depends on ^build:tsc, not just ^build: every package resolves - // its workspace dependencies through `exports.types` -> dist/*.d.ts, - // and only build:tsc emits those. `build` is a vite bundle, so it - // leaves dist as bare JS. Without the declarations tsc falls back to - // type-checking a dependency's compiled JavaScript, which floods the - // run with implicit-any errors and — because a .js file exports - // values, not types — makes vitest type tests fail on names that are - // perfectly valid types in source. Runtime tests never noticed. - "dependsOn": ["@prosopo/config#build", "^build:tsc"] + // Tests resolve workspace dependencies through their package exports, + // so they need each dependency's dist/esm and dist/types (^build); the + // napi packages' own tests load their own addon. + "dependsOn": ["@prosopo/config#build", "^build", "build:native"] }, "lint": { "dependsOn": ["^lint"] }, "clean": {