diff --git a/docs/design/10-domains/deploy-cli.md b/docs/design/10-domains/deploy-cli.md index f4810edc6..ef0e8d3d7 100644 --- a/docs/design/10-domains/deploy-cli.md +++ b/docs/design/10-domains/deploy-cli.md @@ -43,15 +43,15 @@ not exist on `dev` (clipanion rejects them as unknown flags). `prisma-composer build` and topology emission are out of scope (see § Out of scope). **Runtime.** The bin is runtime-agnostic — no bun-only APIs anywhere in the -CLI or assembly code — so it runs under both bun and node (≥ 22.18, where -type stripping imports the user's `.ts` entry natively). Under node, the CLI -also registers a synchronous resolve hook (`node:module` `registerHooks`) so -that relative imports inside the entry graph may use `./x.js` or extensionless -`./x` specifiers for `.ts` source files without requiring -`allowImportingTsExtensions`; `.mjs` and `.cjs` specifiers map to `.mts` and -`.cts` respectively. Bun resolves these natively and the hook is a no-op there. One inherent caveat: an app whose service module imports -bun APIs can only deploy under bun, since loading the graph imports that module -— the app's choice, not a CLI limit. +CLI or assembly code — so it runs under both bun and node. Under node, the CLI +registers tsx (`tsx/esm/api` `register`) so that relative imports inside the +entry graph may use `./x.js` or extensionless `./x` specifiers for `.ts` +source files; `.mjs` specifiers map to `.mts`. Bun resolves these natively and +tsx registration is skipped there. The alchemy converge child also runs under +tsx on node (`node alchemy.js`) so entry-graph TypeScript resolution +is consistent across the main process and the child. One inherent caveat: an +app whose service module imports bun APIs can only deploy under bun, since +loading the graph imports that module — the app's choice, not a CLI limit. ## The pipeline diff --git a/examples/js-ext-imports/module.ts b/examples/js-ext-imports/module.ts new file mode 100644 index 000000000..0ed312c91 --- /dev/null +++ b/examples/js-ext-imports/module.ts @@ -0,0 +1,10 @@ +// @ts-nocheck -- service.js resolves to service.ts under tsx; TypeScript sees +// the .js extension as missing (no .js file exists), so this file is excluded +// from type-checking. It acts as a loadability guard: `prisma-composer deploy` +// must be able to import ./service.js via tsx without failing. +import { module } from '@prisma/composer'; +import guardService from './service.js'; + +export default module('js-ext-imports', ({ provision }) => { + provision(guardService); +}); diff --git a/examples/js-ext-imports/package.json b/examples/js-ext-imports/package.json new file mode 100644 index 000000000..d602fd88c --- /dev/null +++ b/examples/js-ext-imports/package.json @@ -0,0 +1,27 @@ +{ + "name": "@prisma/example-js-ext-imports", + "version": "0.10.0", + "private": true, + "type": "module", + "scripts": { + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@prisma/composer": "workspace:0.10.0", + "@prisma/composer-cli": "workspace:0.10.0", + "@prisma/composer-prisma-cloud": "workspace:0.10.0" + }, + "devDependencies": { + "@types/bun": "^1.3.13", + "typescript": "^6.0.3" + }, + "overrides": { + "effect": "4.0.0-beta.103", + "@effect/sql-d1": "4.0.0-beta.103", + "@effect/sql-pg": "4.0.0-beta.103", + "@effect/vitest": "4.0.0-beta.103", + "@effect/platform-bun": "4.0.0-beta.103", + "@effect/platform-node": "4.0.0-beta.103", + "@effect/platform-node-shared": "4.0.0-beta.103" + } +} diff --git a/examples/js-ext-imports/prisma-composer.config.ts b/examples/js-ext-imports/prisma-composer.config.ts new file mode 100644 index 000000000..2c085a38f --- /dev/null +++ b/examples/js-ext-imports/prisma-composer.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from '@prisma/composer/config'; +import { nodeBuild } from '@prisma/composer/node/control'; +import { prismaCloud, prismaState } from '@prisma/composer-prisma-cloud/control'; + +export default defineConfig({ + extensions: [prismaCloud(), nodeBuild()], + state: prismaState(), +}); diff --git a/examples/js-ext-imports/service.ts b/examples/js-ext-imports/service.ts new file mode 100644 index 000000000..e5d96aa1b --- /dev/null +++ b/examples/js-ext-imports/service.ts @@ -0,0 +1,13 @@ +import node from '@prisma/composer/node'; +import { compute } from '@prisma/composer-prisma-cloud'; + +/** + * A minimal compute service used solely as the target of a .js-extension + * import in module.ts. Its purpose is to prove that tsx resolves ./service.js + * to this .ts source under Node — it is not meant to be deployed. + */ +export default compute({ + name: 'js-ext-guard', + deps: {}, + build: node({ module: import.meta.url, entry: 'server.js' }), +}); diff --git a/examples/js-ext-imports/tsconfig.json b/examples/js-ext-imports/tsconfig.json new file mode 100644 index 000000000..ee0457649 --- /dev/null +++ b/examples/js-ext-imports/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "types": ["bun"] + }, + "include": ["service.ts"] +} diff --git a/examples/store/modules/storefront/package.json b/examples/store/modules/storefront/package.json index e69abda41..492c83217 100644 --- a/examples/store/modules/storefront/package.json +++ b/examples/store/modules/storefront/package.json @@ -2,6 +2,7 @@ "name": "@store/storefront", "version": "0.10.0", "private": true, + "type": "module", "exports": { ".": "./src/service.ts" }, diff --git a/packages/0-framework/3-tooling/cli/package.json b/packages/0-framework/3-tooling/cli/package.json index d529c4400..df4a73b1c 100644 --- a/packages/0-framework/3-tooling/cli/package.json +++ b/packages/0-framework/3-tooling/cli/package.json @@ -23,7 +23,8 @@ "@internal/foundation": "workspace:0.10.0", "@prisma/cli-engine": "0.2.0", "c12": "^3.3.4", - "chokidar": "^4.0.3" + "chokidar": "^4.0.3", + "tsx": "^4.19.3" }, "devDependencies": { "@internal/tsdown-config": "workspace:0.10.0", diff --git a/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/cjs-ext-service.cts b/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/cjs-ext-service.cts deleted file mode 100644 index b49430582..000000000 --- a/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/cjs-ext-service.cts +++ /dev/null @@ -1,4 +0,0 @@ -// Fixture for the Node resolve-hook test: a .cts (CJS TypeScript) module. -// The hook maps ./cjs-ext-service.cjs to this file at runtime. -// Not a Composer node — the test only needs to prove the file is found. -module.exports = {}; diff --git a/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-cjs-ext-import.ts b/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-cjs-ext-import.ts deleted file mode 100644 index 0de101e21..000000000 --- a/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-cjs-ext-import.ts +++ /dev/null @@ -1,4 +0,0 @@ -// @ts-nocheck -- fixture for the Node resolve-hook test; uses a .cjs -// specifier for a .cts file. The hook in entry-resolution.ts maps it to -// cjs-ext-service.cts at runtime. -export { default } from './cjs-ext-service.cjs'; diff --git a/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-js-ext-import.ts b/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-js-ext-import.ts index 6a20ef5d9..c99f25f68 100644 --- a/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-js-ext-import.ts +++ b/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-js-ext-import.ts @@ -1,5 +1,5 @@ -// @ts-nocheck -- fixture for the Node resolve-hook test; uses a .js -// specifier for a .ts file. The hook in entry-resolution.ts maps it to -// js-ext-service.ts at runtime. Not typechecked because TypeScript would -// report the .js file as missing (it doesn't exist; only the .ts does). +// @ts-nocheck -- fixture for the Node tsx-runner test; uses a .js +// specifier for a .ts file. tsx maps it to js-ext-service.ts at runtime. +// Not typechecked because TypeScript would report the .js file as missing +// (it doesn't exist; only the .ts does). export { default } from './js-ext-service.js'; diff --git a/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-mjs-ext-import.ts b/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-mjs-ext-import.ts index b5a5101da..08a87100b 100644 --- a/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-mjs-ext-import.ts +++ b/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-mjs-ext-import.ts @@ -1,4 +1,3 @@ -// @ts-nocheck -- fixture for the Node resolve-hook test; uses a .mjs -// specifier for a .mts file. The hook in entry-resolution.ts maps it to -// mjs-ext-service.mts at runtime. +// @ts-nocheck -- fixture for the Node tsx-runner test; uses a .mjs +// specifier for a .mts file. tsx maps it to mjs-ext-service.mts at runtime. export { default } from './mjs-ext-service.mjs'; diff --git a/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-no-ext-import.ts b/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-no-ext-import.ts index 866896b1d..a1a270e26 100644 --- a/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-no-ext-import.ts +++ b/packages/0-framework/3-tooling/cli/src/__tests__/fixtures/entry-no-ext-import.ts @@ -1,5 +1,5 @@ -// @ts-nocheck -- fixture for the Node resolve-hook test; uses an extensionless -// specifier for a .ts file. The hook in entry-resolution.ts maps it to -// no-ext-service.ts at runtime. Not typechecked because TypeScript would -// report the module as missing (only the .ts source exists). +// @ts-nocheck -- fixture for the Node tsx-runner test; uses an extensionless +// specifier for a .ts file. tsx maps it to no-ext-service.ts at runtime. +// Not typechecked because TypeScript would report the module as missing +// (only the .ts source exists). export { default } from './no-ext-service'; diff --git a/packages/0-framework/3-tooling/cli/src/__tests__/load-entry.test.ts b/packages/0-framework/3-tooling/cli/src/__tests__/load-entry.test.ts index 78c8602b1..c6130393e 100644 --- a/packages/0-framework/3-tooling/cli/src/__tests__/load-entry.test.ts +++ b/packages/0-framework/3-tooling/cli/src/__tests__/load-entry.test.ts @@ -1,11 +1,15 @@ import { describe, expect, test } from 'bun:test'; import { spawnSync } from 'node:child_process'; import * as path from 'node:path'; +import { fileURLToPath } from 'node:url'; import { CliStructuredError } from '@internal/foundation/errors'; import { loadEntry } from '../load-entry.ts'; const fixture = (name: string) => path.join(import.meta.dir, 'fixtures', name); +// Resolve the tsx CLI path once. Under Bun, import.meta.resolve is synchronous. +const tsxCli = fileURLToPath(import.meta.resolve('tsx/cli')); + describe('loadEntry()', () => { test('accepts a service default export', async () => { const entry = await loadEntry(fixture('valid-service.ts'), import.meta.dir); @@ -50,84 +54,53 @@ describe('loadEntry()', () => { expect(error.cause).toBeDefined(); }); - // Bun's own module loader transforms JSX — this failure is node-specific - // (the CLI's shebang runtime; see node-compat.test.ts), so it's reproduced - // by spawning real node against a small standalone driver rather than - // calling loadEntry() in-process here. - test('a .tsx transitively imported by the entry gets a tailored error under node', () => { - const result = spawnSync('node', [fixture('run-load-entry.ts'), fixture('jsx-in-graph.ts')], { - encoding: 'utf8', - }); - - expect(result.status).not.toBe(0); - expect(result.stderr).toContain(fixture('jsx-in-graph.tsx')); - expect(result.stderr).toContain("node's own module loader"); - expect(result.stderr).toContain('JSX transform'); - expect(result.stderr).toContain('examples/email/scripts/build.ts'); - // where.path carries the entry (ruling on `where`: the natural path). - expect(result.stderr).toContain(`Where: ${fixture('jsx-in-graph.ts')}`); - }, 15000); - - // The resolve hook is node-specific (Bun resolves .js→.ts natively). - // These tests spawn real node so the hook registration path is exercised. + // tsx runs under Node and transpiles TypeScript for the entry graph. These + // tests spawn real node with the tsx CLI to exercise the tsx registration + // path that loadEntry() calls before importing the entry. - test('a .js-extension import resolves to the .ts source under node', () => { + test('a .js-extension import resolves to the .ts source under node via tsx', () => { const result = spawnSync( 'node', - [fixture('run-load-entry.ts'), fixture('entry-js-ext-import.ts')], + [tsxCli, fixture('run-load-entry.ts'), fixture('entry-js-ext-import.ts')], { encoding: 'utf8' }, ); expect(result.status).toBe(0); }, 15000); - test('an extensionless import resolves to the .ts source under node', () => { + test('an extensionless import resolves to the .ts source under node via tsx', () => { const result = spawnSync( 'node', - [fixture('run-load-entry.ts'), fixture('entry-no-ext-import.ts')], + [tsxCli, fixture('run-load-entry.ts'), fixture('entry-no-ext-import.ts')], { encoding: 'utf8' }, ); expect(result.status).toBe(0); }, 15000); - test('a .mjs-extension import resolves to the .mts source under node', () => { + test('a .mjs-extension import resolves to the .mts source under node via tsx', () => { const result = spawnSync( 'node', - [fixture('run-load-entry.ts'), fixture('entry-mjs-ext-import.ts')], + [tsxCli, fixture('run-load-entry.ts'), fixture('entry-mjs-ext-import.ts')], { encoding: 'utf8' }, ); expect(result.status).toBe(0); }, 15000); - test('a .cjs-extension import resolves to the .cts source under node', () => { - const result = spawnSync( - 'node', - [fixture('run-load-entry.ts'), fixture('entry-cjs-ext-import.ts')], - { encoding: 'utf8' }, - ); - - // The hook resolved .cjs → .cts; resolution succeeded, but the fixture's - // export is not a Composer node, so the failure is ENTRY_EXPORT_INVALID. - expect(result.stderr).not.toContain('Cannot find module'); - expect(result.stderr).toContain('must default-export a node'); - }, 15000); - - test('a genuinely missing relative import still fails with the original error under node', () => { + test('a genuinely missing relative import still fails with a module-not-found error under node', () => { const result = spawnSync( 'node', - [fixture('run-load-entry.ts'), fixture('entry-truly-missing-import.ts')], + [tsxCli, fixture('run-load-entry.ts'), fixture('entry-truly-missing-import.ts')], { encoding: 'utf8' }, ); expect(result.status).not.toBe(0); - // The hook exhausted all candidates; the original ERR_MODULE_NOT_FOUND is re-thrown. expect(result.stderr).toContain('truly-missing'); }, 15000); - // Bun resolves .js→.ts natively — load in-process to confirm the hook is a - // no-op (nothing is registered) and the imports still work. + // Bun resolves .js→.ts natively — load in-process to confirm tsx registration + // is a no-op (nothing is registered under Bun) and the imports still work. test('a .js-extension import loads correctly in-process under bun', async () => { const entry = await loadEntry(fixture('entry-js-ext-import.ts'), import.meta.dir); expect(entry.root.kind).toBe('service'); diff --git a/packages/0-framework/3-tooling/cli/src/__tests__/run-alchemy.test.ts b/packages/0-framework/3-tooling/cli/src/__tests__/run-alchemy.test.ts index 73cd8fd86..f2c4b3d79 100644 --- a/packages/0-framework/3-tooling/cli/src/__tests__/run-alchemy.test.ts +++ b/packages/0-framework/3-tooling/cli/src/__tests__/run-alchemy.test.ts @@ -14,6 +14,8 @@ import { alchemyCommandLine, alchemyInvocation, resolveAlchemyBin, + resolveAlchemyJs, + resolveTsxCli, spawnAlchemy, } from '../run-alchemy.ts'; @@ -93,12 +95,13 @@ describe('alchemyInvocation()', () => { }); }); - test('becomes ` --yes --stage ` against the resolved bin', () => { + // Tests run under bun, so the bun branch is taken: command = process.execPath (bun), args[0] = alchemy.js. + test('becomes ` --yes --stage ` against the resolved bin', async () => { const dir = makeTmpDir(); - const bin = installFakeAlchemy(dir); + const js = installFakeAlchemyJs(dir); expect( - alchemyCommandLine( + await alchemyCommandLine( alchemyInvocation({ command: 'deploy', stackFileRelativePath: '.prisma-composer/alchemy.run.ts', @@ -108,46 +111,51 @@ describe('alchemyInvocation()', () => { }), ), ).toEqual({ - command: bin, - args: ['deploy', '.prisma-composer/alchemy.run.ts', '--yes', '--stage', 'ci-42'], + command: process.execPath, + args: [js, 'deploy', '.prisma-composer/alchemy.run.ts', '--yes', '--stage', 'ci-42'], cwd: dir, env: {}, }); }); - test('destroy passes --stage too — the stage is never left to alchemy’s machine-dependent default', () => { + test("destroy passes --stage too — the stage is never left to alchemy's machine-dependent default", async () => { const dir = makeTmpDir(); - installFakeAlchemy(dir); + const js = installFakeAlchemyJs(dir); expect( - alchemyCommandLine( + ( + await alchemyCommandLine( + alchemyInvocation({ + command: 'destroy', + stackFileRelativePath: '.prisma-composer/alchemy.run.ts', + cwd: dir, + stage: 'br_test123', + containerEnv: {}, + }), + ) + ).args, + ).toEqual([js, 'destroy', '.prisma-composer/alchemy.run.ts', '--yes', '--stage', 'br_test123']); + }); + + test('the stage never comes from the environment: identical argv whatever USER is', async () => { + const dir = makeTmpDir(); + const js = installFakeAlchemyJs(dir); + + const argv = ( + await alchemyCommandLine( alchemyInvocation({ - command: 'destroy', + command: 'deploy', stackFileRelativePath: '.prisma-composer/alchemy.run.ts', cwd: dir, stage: 'br_test123', containerEnv: {}, }), - ).args, - ).toEqual(['destroy', '.prisma-composer/alchemy.run.ts', '--yes', '--stage', 'br_test123']); - }); - - test('the stage never comes from the environment: identical argv whatever USER is', () => { - const dir = makeTmpDir(); - installFakeAlchemy(dir); - - const argv = alchemyCommandLine( - alchemyInvocation({ - command: 'deploy', - stackFileRelativePath: '.prisma-composer/alchemy.run.ts', - cwd: dir, - stage: 'br_test123', - containerEnv: {}, - }), + ) ).args; expect(argv).not.toContain(os.userInfo().username); expect(argv).toEqual([ + js, 'deploy', '.prisma-composer/alchemy.run.ts', '--yes', @@ -158,7 +166,7 @@ describe('alchemyInvocation()', () => { test('env carries only the ADDITIONS — the containers plus the extra pointers, never a whole environment', () => { const dir = makeTmpDir(); - installFakeAlchemy(dir); + installFakeAlchemyJs(dir); expect( alchemyInvocation({ @@ -180,8 +188,8 @@ describe('spawnAlchemy()', () => { test('runs the invocation in its cwd with its env additions merged over the invoking environment', async () => { const dir = makeTmpDir(); const captureFile = path.join(dir, 'capture.json'); - installFakeAlchemy(dir, [ - 'const fs = require("node:fs");', + installFakeAlchemyJs(dir, [ + 'import fs from "node:fs";', 'fs.writeFileSync(process.env.CAPTURE_FILE, JSON.stringify({', ' argv: process.argv.slice(2),', ' cwd: process.cwd(),', @@ -221,7 +229,7 @@ describe('spawnAlchemy()', () => { test("returns a failing child's status verbatim rather than collapsing it", async () => { const dir = makeTmpDir(); - installFakeAlchemy(dir, ['process.exit(3);']); + installFakeAlchemyJs(dir, ['process.exit(3);']); expect( await spawnAlchemy({ @@ -244,7 +252,7 @@ describe('spawnAlchemy()', () => { */ test('a signal-killed child comes back as the signal with a null exit code', async () => { const dir = makeTmpDir(); - installFakeAlchemy(dir, [ + installFakeAlchemyJs(dir, [ 'process.kill(process.pid, "SIGTERM");', 'setTimeout(() => {}, 5000);', ]); @@ -276,3 +284,44 @@ describe('spawnAlchemy()', () => { ).rejects.toThrow(/Could not find an installed `alchemy` bin/); }); }); + +/** A fake `alchemy.js` at `/node_modules/alchemy/bin/alchemy.js`. */ +function installFakeAlchemyJs(dir: string, body: readonly string[] = []): string { + const binDir = path.join(dir, 'node_modules', 'alchemy', 'bin'); + fs.mkdirSync(binDir, { recursive: true }); + const js = path.join(binDir, 'alchemy.js'); + fs.writeFileSync(js, body.join('\n')); + return js; +} + +describe('resolveAlchemyJs()', () => { + test('finds node_modules/alchemy/bin/alchemy.js in the given directory', () => { + const dir = makeTmpDir(); + const js = installFakeAlchemyJs(dir); + + expect(resolveAlchemyJs(dir)).toBe(js); + }); + + test('walks up through parent directories', () => { + const root = makeTmpDir(); + const js = installFakeAlchemyJs(root); + const nested = path.join(root, 'examples', 'app'); + fs.mkdirSync(nested, { recursive: true }); + + expect(resolveAlchemyJs(nested)).toBe(js); + }); + + test('throws when no alchemy.js is found', () => { + const dir = makeTmpDir(); + expect(() => resolveAlchemyJs(dir)).toThrow(/Could not find an installed `alchemy` bin/); + }); +}); + +describe('resolveTsxCli()', () => { + test('returns the path to the tsx CLI entry that exists on disk', async () => { + const tsxCliPath = await resolveTsxCli(); + + expect(tsxCliPath).toMatch(/tsx/); + expect(fs.existsSync(tsxCliPath)).toBe(true); + }); +}); diff --git a/packages/0-framework/3-tooling/cli/src/entry-resolution.ts b/packages/0-framework/3-tooling/cli/src/entry-resolution.ts deleted file mode 100644 index 88a424204..000000000 --- a/packages/0-framework/3-tooling/cli/src/entry-resolution.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Synchronous Node resolve hook so that entry modules may import relative - * files using the specifier forms TypeScript accepts by default — - * extensionless `./service` and `./service.js` for a `.ts` source file — - * without requiring `allowImportingTsExtensions` in every consumer's tsconfig. - * - * Resolution only; uses TypeScript's own documented mapping: for a specifier - * Node could not resolve, strip any JS-family extension and probe the - * corresponding TypeScript source; first candidate that exists on disk wins. - * Format-specific rules: `.mjs` → `.mts`; `.cjs` → `.cts`; `.js` and - * extensionless → `.ts`, `.mts`, `.tsx`, then `./index.ts`. Bare and package - * specifiers are never touched. Existing `./x.ts` imports keep working — - * Node resolves them before the hook fires (ADR-0005: no transform, no - * guessing, deterministic TypeScript rule). - * - * Bun resolves `./x.js` and `./x` to `x.ts` natively, so the hook is a - * no-op under Bun. Nothing is registered there. - */ - -import { existsSync } from 'node:fs'; -import * as mod from 'node:module'; -import { fileURLToPath } from 'node:url'; - -let registered = false; - -/** - * Registers the resolve hook once (idempotent). Call at the start of - * `loadEntry` so every module in the entry graph benefits, including those - * imported lazily after the entry itself loads. - */ -export function registerEntryResolution(): void { - if (registered || typeof process.versions.bun === 'string') return; - // registerHooks landed in Node 22.15; the engine floor is 22.18. - // Guard here covers any non-standard environment. - if (typeof mod.registerHooks !== 'function') return; - registered = true; - mod.registerHooks({ - resolve(specifier, context, nextResolve) { - try { - return nextResolve(specifier, context); - } catch (error) { - if ( - !isRelativeSpecifier(specifier) || - context.parentURL === undefined || - !isModuleNotFoundError(error) - ) { - throw error; - } - for (const candidate of sourceCandidates(new URL(specifier, context.parentURL))) { - if (existsSync(fileURLToPath(candidate))) { - return nextResolve(candidate.href, context); - } - } - throw error; - } - }, - }); -} - -/** - * TypeScript's extension mapping: for a JS-family or extensionless URL, - * produce the source candidates to probe. Format-specific: `.mjs` maps only - * to `.mts`; `.cjs` maps only to `.cts`; `.js` and extensionless probe - * `.ts`, `.mts`, `.tsx` (keeping `.tsx` so the JSX diagnostic fires), then - * `./index.ts`. - */ -function sourceCandidates(resolved: URL): URL[] { - const href = resolved.href; - if (href.endsWith('.mjs')) { - const base = href.slice(0, -4); - return [new URL(`${base}.mts`)]; - } - if (href.endsWith('.cjs')) { - const base = href.slice(0, -4); - return [new URL(`${base}.cts`)]; - } - const base = href.endsWith('.js') ? href.slice(0, -3) : href; - return [ - new URL(`${base}.ts`), - new URL(`${base}.mts`), - new URL(`${base}.tsx`), - new URL(`${base}/index.ts`), - ]; -} - -function isRelativeSpecifier(specifier: string): boolean { - return specifier.startsWith('./') || specifier.startsWith('../'); -} - -function isModuleNotFoundError(error: unknown): boolean { - if (!(error instanceof Error)) return false; - if (!('code' in error)) return false; - return error.code === 'ERR_MODULE_NOT_FOUND'; -} diff --git a/packages/0-framework/3-tooling/cli/src/family/__tests__/deploy-destroy.test.ts b/packages/0-framework/3-tooling/cli/src/family/__tests__/deploy-destroy.test.ts index 3da1d0d82..d63185eb2 100644 --- a/packages/0-framework/3-tooling/cli/src/family/__tests__/deploy-destroy.test.ts +++ b/packages/0-framework/3-tooling/cli/src/family/__tests__/deploy-destroy.test.ts @@ -37,6 +37,9 @@ const CWD = (() => { const bin = path.join(dir, 'node_modules', '.bin'); fs.mkdirSync(bin, { recursive: true }); fs.writeFileSync(path.join(bin, 'alchemy'), '#!/usr/bin/env node\n', { mode: 0o755 }); + const alchemyBin = path.join(dir, 'node_modules', 'alchemy', 'bin'); + fs.mkdirSync(alchemyBin, { recursive: true }); + fs.writeFileSync(path.join(alchemyBin, 'alchemy.js'), ''); return dir; })(); diff --git a/packages/0-framework/3-tooling/cli/src/family/converge.ts b/packages/0-framework/3-tooling/cli/src/family/converge.ts index 97ddbf33c..bd97f6b67 100644 --- a/packages/0-framework/3-tooling/cli/src/family/converge.ts +++ b/packages/0-framework/3-tooling/cli/src/family/converge.ts @@ -56,7 +56,7 @@ export interface ConvergeContext { * terminal reaches alchemy natively and the engine owns signal policy. */ export function convergeSpawn(ctx: ConvergeContext): RunAlchemy { return async (invocation) => { - const line = alchemyCommandLine(invocation); + const line = await alchemyCommandLine(invocation); return await ctx.spawn({ command: line.command, args: line.args, diff --git a/packages/0-framework/3-tooling/cli/src/load-config.ts b/packages/0-framework/3-tooling/cli/src/load-config.ts index d83ac12d7..8baee4c43 100644 --- a/packages/0-framework/3-tooling/cli/src/load-config.ts +++ b/packages/0-framework/3-tooling/cli/src/load-config.ts @@ -26,6 +26,7 @@ import { blindCast } from '@internal/foundation/casts'; import { CliStructuredError } from '@internal/foundation/errors'; import * as c12 from 'c12'; import { effectResolutionDiagnostic } from './check-effect-resolution.ts'; +import { registerTsRuntime } from './runtime-loader.ts'; export const CONFIG_FILENAME = 'prisma-composer.config.ts'; @@ -177,6 +178,7 @@ async function evaluateConfig( configPath: string, verifySamePath: boolean, ): Promise<{ value: unknown; diagnostics: readonly CliStructuredError[] }> { + await registerTsRuntime(); let result: Awaited>; try { result = await c12.loadConfig({ diff --git a/packages/0-framework/3-tooling/cli/src/load-entry.ts b/packages/0-framework/3-tooling/cli/src/load-entry.ts index f77e85071..7921ee1ff 100644 --- a/packages/0-framework/3-tooling/cli/src/load-entry.ts +++ b/packages/0-framework/3-tooling/cli/src/load-entry.ts @@ -10,8 +10,8 @@ import type { ModuleNode, ServiceNode } from '@internal/core'; import { isNode } from '@internal/core'; import { blindCast } from '@internal/foundation/casts'; import { CliStructuredError } from '@internal/foundation/errors'; -import { registerEntryResolution } from './entry-resolution.ts'; import { explainJsxLoadError } from './jsx-load-error.ts'; +import { registerTsRuntime } from './runtime-loader.ts'; export interface LoadedEntry { /** The resolved absolute path to the entry module on disk. */ @@ -20,7 +20,7 @@ export interface LoadedEntry { } export async function loadEntry(entryArg: string, cwd: string): Promise { - registerEntryResolution(); + await registerTsRuntime(); const resolvedPath = path.resolve(cwd, entryArg); let mod: unknown; try { diff --git a/packages/0-framework/3-tooling/cli/src/operations/execute-deploy-destroy.ts b/packages/0-framework/3-tooling/cli/src/operations/execute-deploy-destroy.ts index d4c6d9373..efc9f8fb3 100644 --- a/packages/0-framework/3-tooling/cli/src/operations/execute-deploy-destroy.ts +++ b/packages/0-framework/3-tooling/cli/src/operations/execute-deploy-destroy.ts @@ -451,7 +451,10 @@ async function runStackPipelineInner( return notOk(toStructured('DEPLOY.STACK_WRITE_FAILED', error)); } - const reproduceCommand = `alchemy ${action} ${GENERATED_STACK_RELATIVE_PATH} --yes --stage ${alchemyStage}`; + const reproduceCommand = + typeof process.versions.bun === 'string' + ? `alchemy ${action} ${GENERATED_STACK_RELATIVE_PATH} --yes --stage ${alchemyStage}` + : `npx tsx node_modules/alchemy/bin/alchemy.js ${action} ${GENERATED_STACK_RELATIVE_PATH} --yes --stage ${alchemyStage}`; // Hand the terminal to alchemy against the generated file. let outcome: AlchemyOutcome; diff --git a/packages/0-framework/3-tooling/cli/src/operations/execute-dev.ts b/packages/0-framework/3-tooling/cli/src/operations/execute-dev.ts index 76b70c702..07ed6fa3d 100644 --- a/packages/0-framework/3-tooling/cli/src/operations/execute-dev.ts +++ b/packages/0-framework/3-tooling/cli/src/operations/execute-dev.ts @@ -124,7 +124,10 @@ export async function executeDev( throw error; } - const reproduceCommand = `alchemy deploy ${DEV_STACK_RELATIVE_PATH} --yes --stage dev`; + const reproduceCommand = + typeof process.versions.bun === 'string' + ? `alchemy deploy ${DEV_STACK_RELATIVE_PATH} --yes --stage dev` + : `npx tsx node_modules/alchemy/bin/alchemy.js deploy ${DEV_STACK_RELATIVE_PATH} --yes --stage dev`; const converge = async (): Promise<{ outcome: AlchemyOutcome; stackPath: string }> => { let stackPath: string; diff --git a/packages/0-framework/3-tooling/cli/src/run-alchemy.ts b/packages/0-framework/3-tooling/cli/src/run-alchemy.ts index 245d3778d..b3a484c59 100644 --- a/packages/0-framework/3-tooling/cli/src/run-alchemy.ts +++ b/packages/0-framework/3-tooling/cli/src/run-alchemy.ts @@ -1,11 +1,16 @@ /** * Pipeline step 7 (deploy-cli.md § The pipeline; design-notes.md's "Driving - * Alchemy" call): hand the terminal to the generated stack file. Resolves the - * workspace's own installed `alchemy` bin (walking up `node_modules/.bin` - * from the generated file's package dir) rather than going through - * `bunx`/`npx`, so this works the same under node and bun — the resolved - * bin's own launcher (`alchemy/bin/cli.js`) does its own node/bun dispatch - * from there, driven by the env it inherits. + * Alchemy" call): hand the terminal to the generated stack file. + * + * Under Bun, runs `alchemy.js` directly under `process.execPath` (bun) so + * the converge child always inherits the CLI's own runtime — no launcher, no + * env heuristics. + * + * Under Node, bypasses the alchemy launcher and runs `alchemy.js` directly + * under tsx (`node ...`). tsx + * handles TypeScript resolution for the stack file and the entry graph it + * imports, which is the same registration `loadEntry` applies in the CLI + * process itself. * * This module composes the invocation; it does not decide how the child is * started. Under the CLI the engine starts it (`ctx.spawn`), which is what @@ -16,6 +21,7 @@ import { spawn } from 'node:child_process'; import * as fs from 'node:fs'; import * as path from 'node:path'; +import { fileURLToPath } from 'node:url'; import { CliStructuredError } from '@internal/foundation/errors'; /** Walks up from `startDir` looking for `node_modules/.bin/alchemy`. */ @@ -36,6 +42,33 @@ export function resolveAlchemyBin(startDir: string): string { } } +/** + * Walks up from `startDir` looking for `node_modules/alchemy/bin/alchemy.js` — + * the compiled JS entry that the tsx-based Node invocation runs directly, + * bypassing the alchemy launcher's node/bun dispatch. + */ +export function resolveAlchemyJs(startDir: string): string { + let dir = startDir; + while (true) { + const candidate = path.join(dir, 'node_modules', 'alchemy', 'bin', 'alchemy.js'); + if (fs.existsSync(candidate)) return candidate; + const parent = path.dirname(dir); + if (parent === dir) { + throw new CliStructuredError( + 'DEPLOY.ALCHEMY_BIN_MISSING', + `Could not find an installed \`alchemy\` bin above "${startDir}".`, + { fix: 'Add "alchemy" as a dependency of your app.' }, + ); + } + dir = parent; + } +} + +/** Resolves the tsx CLI entry from the installed tsx package. */ +export async function resolveTsxCli(): Promise { + return fileURLToPath(await import.meta.resolve('tsx/cli')); +} + /** * WHAT to converge. Deliberately not a command line: which alchemy binary to * run is a question about this machine's installed tree, and answering it @@ -64,21 +97,44 @@ export interface AlchemyCommandLine { readonly env: Readonly>; } +const alchemyArgs = (invocation: AlchemyInvocation): string[] => [ + invocation.action, + invocation.stackFileRelativePath, + '--yes', + '--stage', + invocation.stage, +]; + /** * Resolves the invocation against this machine — the step every adapter takes * and no caller should. Raises DEPLOY.ALCHEMY_BIN_MISSING when the app has no * alchemy installed. + * + * Under Bun, runs `alchemy.js` directly under `process.execPath` (bun) — the + * converge child always inherits the CLI's own runtime, explicitly. + * Under Node, runs `node ` so tsx provides + * TypeScript resolution for the stack file and the entry graph it imports. */ -export function alchemyCommandLine(invocation: AlchemyInvocation): AlchemyCommandLine { +export async function alchemyCommandLine( + invocation: AlchemyInvocation, +): Promise { + if (typeof process.versions.bun === 'string') { + return { + command: process.execPath, + args: [resolveAlchemyJs(invocation.cwd), ...alchemyArgs(invocation)], + cwd: invocation.cwd, + env: invocation.env, + }; + } + + const [tsxCliPath, alchemyJsPath] = await Promise.all([ + resolveTsxCli(), + Promise.resolve(resolveAlchemyJs(invocation.cwd)), + ]); + return { - command: resolveAlchemyBin(invocation.cwd), - args: [ - invocation.action, - invocation.stackFileRelativePath, - '--yes', - '--stage', - invocation.stage, - ], + command: process.execPath, + args: [tsxCliPath, alchemyJsPath, ...alchemyArgs(invocation)], cwd: invocation.cwd, env: invocation.env, }; @@ -128,7 +184,7 @@ export function alchemyInvocation(input: AlchemyInvocationInput): AlchemyInvocat * Ctrl-C'd deploy report itself as a failure. */ export const spawnAlchemy: RunAlchemy = async (invocation) => { - const line = alchemyCommandLine(invocation); + const line = await alchemyCommandLine(invocation); return new Promise((resolve, reject) => { const child = spawn(line.command, [...line.args], { cwd: line.cwd, diff --git a/packages/0-framework/3-tooling/cli/src/runtime-loader.ts b/packages/0-framework/3-tooling/cli/src/runtime-loader.ts new file mode 100644 index 000000000..b34246370 --- /dev/null +++ b/packages/0-framework/3-tooling/cli/src/runtime-loader.ts @@ -0,0 +1,15 @@ +/** + * Registers tsx's ESM hook once in the CLI process so that user TypeScript — + * the entry graph and the config file — loads under Node without requiring + * `allowImportingTsExtensions` in the user's tsconfig. Idempotent and a no-op + * under Bun, which resolves .ts/.js/extensionless natively. + */ + +let registered = false; + +export async function registerTsRuntime(): Promise { + if (registered || typeof process.versions.bun === 'string') return; + registered = true; + const { register } = await import('tsx/esm/api'); + register(); +} diff --git a/packages/9-public/composer-cli/package.json b/packages/9-public/composer-cli/package.json index 4e4d2170f..311101139 100644 --- a/packages/9-public/composer-cli/package.json +++ b/packages/9-public/composer-cli/package.json @@ -25,7 +25,8 @@ "alchemy": "2.0.0-beta.67", "c12": "^3.3.4", "effect": "4.0.0-beta.103", - "esbuild": "^0.28.1" + "esbuild": "^0.28.1", + "tsx": "^4.19.3" }, "peerDependencies": { "@prisma/cli-engine": "0.2.0" diff --git a/packages/9-public/composer-cli/tsdown.config.ts b/packages/9-public/composer-cli/tsdown.config.ts index abbb0d48d..7cc60c056 100644 --- a/packages/9-public/composer-cli/tsdown.config.ts +++ b/packages/9-public/composer-cli/tsdown.config.ts @@ -31,7 +31,9 @@ export default defineConfig([ // fail every cross-package instanceof. scripts/check-cli-engine-pin.mjs // enforces both that and the exact-version agreement between the // manifests. - external: ['esbuild', '@prisma/cli-engine'], + // tsx ships worker files and must not be bundled — it must remain a real + // import so its own file layout is intact at runtime. + external: ['esbuild', '@prisma/cli-engine', 'tsx'], noExternal: [/^@internal\//], }, { @@ -51,7 +53,8 @@ export default defineConfig([ // different things. scripts/check-cli-engine-pin.mjs checks dist/bin.mjs // by name for exactly this, and check-family-static-graph.mjs walks its // graph. - external: ['esbuild', '@prisma/cli-engine'], + // tsx ships worker files and must not be bundled. + external: ['esbuild', '@prisma/cli-engine', 'tsx'], noExternal: [/^@internal\//], }, ]); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d9b70329..61de71cb6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -60,7 +60,7 @@ importers: version: link:../../packages/9-public/composer-prisma-cloud '@prisma/orm-postgres': specifier: 8.0.0-rc.4 - version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) arktype: specifier: ^2.2.3 version: 2.2.3 @@ -94,7 +94,7 @@ importers: version: link:../../packages/9-public/composer-prisma-cloud alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) effect: specifier: 4.0.0-beta.103 version: 4.0.0-beta.103 @@ -119,7 +119,7 @@ importers: version: link:../../packages/9-public/composer-prisma-cloud alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) arktype: specifier: ^2.2.3 version: 2.2.3 @@ -199,6 +199,25 @@ importers: specifier: ^6.0.3 version: 6.0.3 + examples/js-ext-imports: + dependencies: + '@prisma/composer': + specifier: workspace:0.10.0 + version: link:../../packages/9-public/composer + '@prisma/composer-cli': + specifier: workspace:0.10.0 + version: link:../../packages/9-public/composer-cli + '@prisma/composer-prisma-cloud': + specifier: workspace:0.10.0 + version: link:../../packages/9-public/composer-prisma-cloud + devDependencies: + '@types/bun': + specifier: ^1.3.13 + version: 1.3.14 + typescript: + specifier: ^6.0.3 + version: 6.0.3 + examples/pn-widgets: dependencies: '@prisma/composer': @@ -209,7 +228,7 @@ importers: version: link:../../packages/9-public/composer-prisma-cloud '@prisma/orm-postgres': specifier: 8.0.0-rc.4 - version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) effect: specifier: 4.0.0-beta.103 version: 4.0.0-beta.103 @@ -246,7 +265,7 @@ importers: version: link:../../packages/9-public/composer-prisma-cloud alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) effect: specifier: 4.0.0-beta.103 version: 4.0.0-beta.103 @@ -289,7 +308,7 @@ importers: version: link:modules/storefront alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) arktype: specifier: ^2.2.3 version: 2.2.3 @@ -308,7 +327,7 @@ importers: dependencies: '@prisma/orm-postgres': specifier: 8.0.0-rc.4 - version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) arktype: specifier: ^2.2.3 version: 2.2.3 @@ -336,7 +355,7 @@ importers: dependencies: '@prisma/orm-postgres': specifier: 8.0.0-rc.4 - version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@store/catalog': specifier: workspace:0.10.0 version: link:../catalog @@ -429,7 +448,7 @@ importers: version: 6.0.3 vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) examples/storefront-auth: dependencies: @@ -450,7 +469,7 @@ importers: version: link:modules/storefront alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) arktype: specifier: ^2.2.3 version: 2.2.3 @@ -528,7 +547,7 @@ importers: version: 6.0.3 vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) examples/streams: dependencies: @@ -547,7 +566,7 @@ importers: version: 1.3.14 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -563,7 +582,7 @@ importers: version: link:../tsdown-config tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -572,7 +591,7 @@ importers: devDependencies: tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -587,7 +606,7 @@ importers: version: 1.1.0 alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) effect: specifier: 4.0.0-beta.103 version: 4.0.0-beta.103 @@ -600,13 +619,13 @@ importers: version: 1.3.14 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) packages/0-framework/2-authoring/bundle-paths: devDependencies: @@ -615,7 +634,7 @@ importers: version: link:../../0-foundation/tsdown-config tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -643,7 +662,7 @@ importers: version: 26.1.1 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -674,7 +693,7 @@ importers: version: 26.1.1 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -702,13 +721,13 @@ importers: version: 1.3.14 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) packages/0-framework/3-tooling/assemble: dependencies: @@ -730,7 +749,7 @@ importers: version: 26.1.1 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -755,6 +774,9 @@ importers: chokidar: specifier: ^4.0.3 version: 4.0.3 + tsx: + specifier: ^4.19.3 + version: 4.23.12 devDependencies: '@internal/tsdown-config': specifier: workspace:0.10.0 @@ -767,7 +789,7 @@ importers: version: 26.1.1 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -813,7 +835,7 @@ importers: version: 8.22.0 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -837,7 +859,7 @@ importers: version: link:../s3-protocol alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) effect: specifier: 4.0.0-beta.103 version: 4.0.0-beta.103 @@ -859,7 +881,7 @@ importers: version: 26.1.1 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -880,7 +902,7 @@ importers: version: 1.60.0 alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) effect: specifier: 4.0.0-beta.103 version: 4.0.0-beta.103 @@ -896,7 +918,7 @@ importers: version: 26.1.1 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -920,7 +942,7 @@ importers: version: 26.1.1 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -953,16 +975,16 @@ importers: version: link:../../../0-framework/2-authoring/service-rpc '@prisma/orm-postgres': specifier: 8.0.0-rc.4 - version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@prisma/orm-toolchain': specifier: 8.0.0-rc.4 - version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@standard-schema/spec': specifier: ^1.1.0 version: 1.1.0 alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) arktype: specifier: ^2.2.3 version: 2.2.3 @@ -987,13 +1009,13 @@ importers: version: 1.3.14 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) packages/1-prisma-cloud/2-shared-modules/auth: dependencies: @@ -1017,16 +1039,16 @@ importers: version: link:../../../0-framework/2-authoring/service-rpc '@prisma/orm-postgres': specifier: 8.0.0-rc.4 - version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@prisma/orm-toolchain': specifier: 8.0.0-rc.4 - version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) arktype: specifier: ^2.2.3 version: 2.2.3 better-auth: specifier: 1.6.24 - version: 1.6.24(@cloudflare/workers-types@5.20260804.1)(mongodb@6.21.0(@aws-sdk/credential-providers@3.1077.0))(mysql2@3.22.5(@types/node@26.1.1))(next@16.2.10(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.22.0)(prisma@7.9.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))) + version: 1.6.24(@cloudflare/workers-types@5.20260804.1)(mongodb@6.21.0(@aws-sdk/credential-providers@3.1077.0))(mysql2@3.22.5(@types/node@26.1.1))(next@16.2.10(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.22.0)(prisma@7.9.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))) jose: specifier: ^6.1.3 version: 6.2.4 @@ -1042,13 +1064,13 @@ importers: version: 1.3.14 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) packages/1-prisma-cloud/2-shared-modules/cron: dependencies: @@ -1079,13 +1101,13 @@ importers: version: 1.3.14 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) packages/1-prisma-cloud/2-shared-modules/email: dependencies: @@ -1122,13 +1144,13 @@ importers: version: 8.0.1 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) packages/1-prisma-cloud/2-shared-modules/storage: dependencies: @@ -1159,13 +1181,13 @@ importers: version: 1.3.14 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) packages/1-prisma-cloud/2-shared-modules/streams: dependencies: @@ -1193,7 +1215,7 @@ importers: devDependencies: '@durable-streams/server-conformance-tests': specifier: 0.2.3 - version: 0.2.3(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 0.2.3(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@internal/tsdown-config': specifier: workspace:0.10.0 version: link:../../../0-framework/0-foundation/tsdown-config @@ -1202,13 +1224,13 @@ importers: version: 1.3.14 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) packages/9-public/composer: dependencies: @@ -1220,7 +1242,7 @@ importers: version: 1.1.0 alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) arktype: specifier: ^2.2.3 version: 2.2.3 @@ -1236,7 +1258,7 @@ importers: devDependencies: '@effect/vitest': specifier: 4.0.0-beta.103 - version: 4.0.0-beta.103(effect@4.0.0-beta.103)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0))) + version: 4.0.0-beta.103(effect@4.0.0-beta.103)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))) '@internal/assemble': specifier: workspace:0.10.0 version: link:../../0-framework/3-tooling/assemble @@ -1269,7 +1291,7 @@ importers: version: 26.1.1 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -1281,7 +1303,7 @@ importers: version: link:../composer alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) c12: specifier: ^3.3.4 version: 3.3.4 @@ -1291,6 +1313,9 @@ importers: esbuild: specifier: ^0.28.1 version: 0.28.1 + tsx: + specifier: ^4.19.3 + version: 4.23.12 devDependencies: '@internal/cli': specifier: workspace:0.10.0 @@ -1306,7 +1331,7 @@ importers: version: 26.1.1 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -1330,13 +1355,13 @@ importers: version: 1.60.0 '@prisma/orm-toolchain': specifier: 8.0.0-rc.4 - version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@standard-schema/spec': specifier: ^1.1.0 version: 1.1.0 alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) arktype: specifier: ^2.2.3 version: 2.2.3 @@ -1354,7 +1379,7 @@ importers: version: 8.22.0 tsdown: specifier: ^0.22.7 - version: 0.22.12(typescript@6.0.3) + version: 0.22.12(tsx@4.23.12)(typescript@6.0.3) devDependencies: '@internal/auth': specifier: workspace:0.10.0 @@ -1406,7 +1431,7 @@ importers: version: link:../../0-framework/0-foundation/tsdown-config '@prisma/orm-postgres': specifier: 8.0.0-rc.4 - version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + version: 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@types/node': specifier: ^26.0.1 version: 26.1.1 @@ -1439,7 +1464,7 @@ importers: version: 26.1.1 alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) prisma: specifier: 7.9.0 version: 7.9.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@6.0.3) @@ -1457,7 +1482,7 @@ importers: version: link:../packages/9-public/composer-prisma-cloud alchemy: specifier: 2.0.0-beta.67 - version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) + version: 2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1) devDependencies: '@prisma/composer-cli': specifier: workspace:0.10.0 @@ -5473,6 +5498,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.23.12: + resolution: {integrity: sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q==} + engines: {node: '>=18.0.0'} + hasBin: true + turbo@2.10.5: resolution: {integrity: sha512-07Y/C7OUp23l4P92PJoYtFNbHjLhftrZH5Ce7dbczS4kX2Re+wtbXvZLoxn/pUtzgsQaRCBaRuZPJp4zmAn0WQ==} hasBin: true @@ -6166,25 +6196,25 @@ snapshots: '@distilled.cloud/core': 0.30.3(effect@4.0.0-beta.103) effect: 4.0.0-beta.103 - '@distilled.cloud/cloudflare-rolldown-plugin@0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260704.1)': + '@distilled.cloud/cloudflare-rolldown-plugin@0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(workerd@1.20260704.1)': dependencies: '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260704.1) magic-string: 0.30.21 unenv: 2.0.0-rc.24 optionalDependencies: rolldown: 1.1.5 - vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0) + vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0) transitivePeerDependencies: - workerd - '@distilled.cloud/cloudflare-rolldown-plugin@0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260704.1)': + '@distilled.cloud/cloudflare-rolldown-plugin@0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(workerd@1.20260704.1)': dependencies: '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260704.1) magic-string: 0.30.21 unenv: 2.0.0-rc.24 optionalDependencies: rolldown: 1.1.5 - vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0) + vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0) transitivePeerDependencies: - workerd @@ -6198,13 +6228,13 @@ snapshots: '@effect/platform-bun': 4.0.0-beta.103(effect@4.0.0-beta.103) '@effect/platform-node': 4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1) - '@distilled.cloud/cloudflare-vite-plugin@0.15.0(@distilled.cloud/cloudflare-runtime@0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103))(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103)(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260704.1)': + '@distilled.cloud/cloudflare-vite-plugin@0.15.0(@distilled.cloud/cloudflare-runtime@0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103))(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103)(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(workerd@1.20260704.1)': dependencies: '@distilled.cloud/cloudflare': 0.30.3(effect@4.0.0-beta.103) - '@distilled.cloud/cloudflare-rolldown-plugin': 0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260704.1) + '@distilled.cloud/cloudflare-rolldown-plugin': 0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(workerd@1.20260704.1) '@distilled.cloud/cloudflare-runtime': 0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103) effect: 4.0.0-beta.103 - vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0) + vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0) optionalDependencies: '@effect/platform-bun': 4.0.0-beta.103(effect@4.0.0-beta.103) '@effect/platform-node': 4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1) @@ -6212,13 +6242,13 @@ snapshots: - rolldown - workerd - '@distilled.cloud/cloudflare-vite-plugin@0.15.0(@distilled.cloud/cloudflare-runtime@0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103))(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103)(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260704.1)': + '@distilled.cloud/cloudflare-vite-plugin@0.15.0(@distilled.cloud/cloudflare-runtime@0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103))(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103)(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(workerd@1.20260704.1)': dependencies: '@distilled.cloud/cloudflare': 0.30.3(effect@4.0.0-beta.103) - '@distilled.cloud/cloudflare-rolldown-plugin': 0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260704.1) + '@distilled.cloud/cloudflare-rolldown-plugin': 0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(workerd@1.20260704.1) '@distilled.cloud/cloudflare-runtime': 0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103) effect: 4.0.0-beta.103 - vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0) + vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0) optionalDependencies: '@effect/platform-bun': 4.0.0-beta.103(effect@4.0.0-beta.103) '@effect/platform-node': 4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1) @@ -6255,11 +6285,11 @@ snapshots: '@microsoft/fetch-event-source': 2.0.1 fastq: 1.20.1 - '@durable-streams/server-conformance-tests@0.2.3(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))': + '@durable-streams/server-conformance-tests@0.2.3(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@durable-streams/client': 0.2.3 fast-check: 4.9.0 - vitest: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + vitest: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) transitivePeerDependencies: - '@edge-runtime/vm' - '@opentelemetry/api' @@ -6308,15 +6338,15 @@ snapshots: '@cloudflare/workers-types': 5.20260804.1 effect: 4.0.0-beta.103 - '@effect/vitest@4.0.0-beta.103(effect@4.0.0-beta.103)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0)))': + '@effect/vitest@4.0.0-beta.103(effect@4.0.0-beta.103)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))': dependencies: effect: 4.0.0-beta.103 - vitest: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0)) + vitest: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) - '@effect/vitest@4.0.0-beta.103(effect@4.0.0-beta.103)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))': + '@effect/vitest@4.0.0-beta.103(effect@4.0.0-beta.103)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))': dependencies: effect: 4.0.0-beta.103 - vitest: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + vitest: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@electric-sql/pglite-socket@0.0.20(@electric-sql/pglite@0.3.15)': dependencies: @@ -6971,10 +7001,10 @@ snapshots: dependencies: openapi-fetch: 0.14.0 - '@prisma/orm-family-sql@8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))': + '@prisma/orm-family-sql@8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@prisma/orm-framework': 8.0.0-rc.4(typescript@6.0.3) - '@prisma/orm-toolchain': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + '@prisma/orm-toolchain': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@standard-schema/spec': 1.1.0 arktype: 2.2.3 pathe: 2.0.3 @@ -6997,12 +7027,12 @@ snapshots: optionalDependencies: typescript: 6.0.3 - '@prisma/orm-postgres@8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))': + '@prisma/orm-postgres@8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))': dependencies: - '@prisma/orm-family-sql': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + '@prisma/orm-family-sql': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@prisma/orm-framework': 8.0.0-rc.4(typescript@6.0.3) - '@prisma/orm-target-postgres': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) - '@prisma/orm-toolchain': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + '@prisma/orm-target-postgres': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) + '@prisma/orm-toolchain': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@types/pg': 8.20.4 pathe: 2.0.3 pg: 8.22.0 @@ -7015,11 +7045,11 @@ snapshots: - typanion - vite - '@prisma/orm-target-postgres@8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))': + '@prisma/orm-target-postgres@8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))': dependencies: - '@prisma/orm-family-sql': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + '@prisma/orm-family-sql': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@prisma/orm-framework': 8.0.0-rc.4(typescript@6.0.3) - '@prisma/orm-toolchain': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + '@prisma/orm-toolchain': 8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@standard-schema/spec': 1.1.0 '@types/pg': 8.20.4 arktype: 2.2.3 @@ -7035,7 +7065,7 @@ snapshots: - typanion - vite - '@prisma/orm-toolchain@8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))': + '@prisma/orm-toolchain@8.0.0-rc.4(@prisma/cli-engine@0.2.0)(typanion@3.14.0)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@prisma/cli-engine': 0.2.0 '@prisma/orm-framework': 8.0.0-rc.4(typescript@6.0.3) @@ -7058,7 +7088,7 @@ snapshots: wrap-ansi: 10.0.0 optionalDependencies: typescript: 6.0.3 - vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0) + vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0) transitivePeerDependencies: - magicast - typanion @@ -7757,21 +7787,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.10(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0))': + '@vitest/mocker@4.1.10(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0) + vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0) - '@vitest/mocker@4.1.10(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))': + '@vitest/mocker@4.1.10(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0) + vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0) '@vitest/pretty-format@4.1.10': dependencies: @@ -7896,7 +7926,7 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - alchemy@2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1): + alchemy@2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1): dependencies: '@alchemy.run/node-utils': 0.0.5(patch_hash=6faf37cc2077b96dea5bf0d1906285c3f32e99f34af71943256985056678b266) '@aws-sdk/credential-providers': 3.1077.0 @@ -7904,14 +7934,14 @@ snapshots: '@distilled.cloud/aws': 0.30.3(effect@4.0.0-beta.103) '@distilled.cloud/axiom': 0.30.3(effect@4.0.0-beta.103) '@distilled.cloud/cloudflare': 0.30.3(effect@4.0.0-beta.103) - '@distilled.cloud/cloudflare-rolldown-plugin': 0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260704.1) + '@distilled.cloud/cloudflare-rolldown-plugin': 0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(workerd@1.20260704.1) '@distilled.cloud/cloudflare-runtime': 0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103) - '@distilled.cloud/cloudflare-vite-plugin': 0.15.0(@distilled.cloud/cloudflare-runtime@0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103))(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103)(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260704.1) + '@distilled.cloud/cloudflare-vite-plugin': 0.15.0(@distilled.cloud/cloudflare-runtime@0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103))(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103)(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(workerd@1.20260704.1) '@distilled.cloud/core': 0.30.3(effect@4.0.0-beta.103) '@distilled.cloud/neon': 0.30.3(effect@4.0.0-beta.103) '@distilled.cloud/planetscale': 0.30.3(effect@4.0.0-beta.103) '@effect/sql-d1': 4.0.0-beta.103(effect@4.0.0-beta.103) - '@effect/vitest': 4.0.0-beta.103(effect@4.0.0-beta.103)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0))) + '@effect/vitest': 4.0.0-beta.103(effect@4.0.0-beta.103)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))) '@libsql/client': 0.17.4 '@octokit/rest': 22.0.1 '@octokit/webhooks': 14.2.0 @@ -7941,7 +7971,7 @@ snapshots: optionalDependencies: '@effect/platform-bun': 4.0.0-beta.103(effect@4.0.0-beta.103) '@effect/platform-node': 4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1) - vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0) + vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0) ws: 8.21.1 transitivePeerDependencies: - '@mongodb-js/zstd' @@ -7963,7 +7993,7 @@ snapshots: - vitest - workerd - alchemy@2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1): + alchemy@2.0.0-beta.67(patch_hash=b4f53c9c951c28d72ce7373ac88b38bd85718e114e5001fa7b2a8f7f869d6fac)(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(@types/node@26.1.1)(@types/react@19.2.17)(effect@4.0.0-beta.103)(typescript@6.0.3)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)))(workerd@1.20260704.1)(ws@8.21.1): dependencies: '@alchemy.run/node-utils': 0.0.5(patch_hash=6faf37cc2077b96dea5bf0d1906285c3f32e99f34af71943256985056678b266) '@aws-sdk/credential-providers': 3.1077.0 @@ -7971,14 +8001,14 @@ snapshots: '@distilled.cloud/aws': 0.30.3(effect@4.0.0-beta.103) '@distilled.cloud/axiom': 0.30.3(effect@4.0.0-beta.103) '@distilled.cloud/cloudflare': 0.30.3(effect@4.0.0-beta.103) - '@distilled.cloud/cloudflare-rolldown-plugin': 0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260704.1) + '@distilled.cloud/cloudflare-rolldown-plugin': 0.15.0(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(workerd@1.20260704.1) '@distilled.cloud/cloudflare-runtime': 0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103) - '@distilled.cloud/cloudflare-vite-plugin': 0.15.0(@distilled.cloud/cloudflare-runtime@0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103))(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103)(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))(workerd@1.20260704.1) + '@distilled.cloud/cloudflare-vite-plugin': 0.15.0(@distilled.cloud/cloudflare-runtime@0.15.0(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103))(@distilled.cloud/cloudflare@0.30.3(effect@4.0.0-beta.103))(@effect/platform-bun@4.0.0-beta.103(effect@4.0.0-beta.103))(@effect/platform-node@4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1))(effect@4.0.0-beta.103)(rolldown@1.1.5)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))(workerd@1.20260704.1) '@distilled.cloud/core': 0.30.3(effect@4.0.0-beta.103) '@distilled.cloud/neon': 0.30.3(effect@4.0.0-beta.103) '@distilled.cloud/planetscale': 0.30.3(effect@4.0.0-beta.103) '@effect/sql-d1': 4.0.0-beta.103(effect@4.0.0-beta.103) - '@effect/vitest': 4.0.0-beta.103(effect@4.0.0-beta.103)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))) + '@effect/vitest': 4.0.0-beta.103(effect@4.0.0-beta.103)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))) '@libsql/client': 0.17.4 '@octokit/rest': 22.0.1 '@octokit/webhooks': 14.2.0 @@ -8008,7 +8038,7 @@ snapshots: optionalDependencies: '@effect/platform-bun': 4.0.0-beta.103(effect@4.0.0-beta.103) '@effect/platform-node': 4.0.0-beta.103(effect@4.0.0-beta.103)(ioredis@5.11.1) - vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0) + vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0) ws: 8.21.1 transitivePeerDependencies: - '@mongodb-js/zstd' @@ -8074,7 +8104,7 @@ snapshots: before-after-hook@4.0.0: {} - better-auth@1.6.24(@cloudflare/workers-types@5.20260804.1)(mongodb@6.21.0(@aws-sdk/credential-providers@3.1077.0))(mysql2@3.22.5(@types/node@26.1.1))(next@16.2.10(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.22.0)(prisma@7.9.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0))): + better-auth@1.6.24(@cloudflare/workers-types@5.20260804.1)(mongodb@6.21.0(@aws-sdk/credential-providers@3.1077.0))(mysql2@3.22.5(@types/node@26.1.1))(next@16.2.10(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.22.0)(prisma@7.9.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0))): dependencies: '@better-auth/core': 1.6.24(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@cloudflare/workers-types@5.20260804.1)(better-call@1.3.7(zod@4.4.3))(jose@6.2.4)(kysely@0.29.4)(nanostores@1.4.1) '@better-auth/drizzle-adapter': 1.6.24(@better-auth/core@1.6.24(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@cloudflare/workers-types@5.20260804.1)(better-call@1.3.7(zod@4.4.3))(jose@6.2.4)(kysely@0.29.4)(nanostores@1.4.1))(@better-auth/utils@0.4.2) @@ -8101,7 +8131,7 @@ snapshots: prisma: 7.9.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@6.0.3) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) - vitest: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + vitest: 4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) transitivePeerDependencies: - '@cloudflare/workers-types' - '@opentelemetry/api' @@ -9694,7 +9724,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdown@0.22.12(typescript@6.0.3): + tsdown@0.22.12(tsx@4.23.12)(typescript@6.0.3): dependencies: ansis: 4.3.1 cac: 7.0.0 @@ -9712,6 +9742,7 @@ snapshots: unconfig-core: 7.5.0 verkit: 0.1.2 optionalDependencies: + tsx: 4.23.12 typescript: 6.0.3 transitivePeerDependencies: - '@ts-macro/tsc' @@ -9721,6 +9752,12 @@ snapshots: tslib@2.8.1: {} + tsx@4.23.12: + dependencies: + esbuild: 0.28.2 + optionalDependencies: + fsevents: 2.3.3 + turbo@2.10.5: optionalDependencies: '@turbo/darwin-64': 2.10.5 @@ -9804,7 +9841,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0): + vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -9816,9 +9853,10 @@ snapshots: esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.6.1 + tsx: 4.23.12 yaml: 2.9.0 - vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0): + vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -9830,12 +9868,13 @@ snapshots: esbuild: 0.28.2 fsevents: 2.3.3 jiti: 2.6.1 + tsx: 4.23.12 yaml: 2.9.0 - vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0)): + vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -9852,17 +9891,17 @@ snapshots: tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(yaml@2.9.0) + vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 26.1.1 transitivePeerDependencies: - msw - vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)): + vitest@4.1.10(@types/node@26.1.1)(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -9879,7 +9918,7 @@ snapshots: tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.0) + vite: 8.1.2(@types/node@26.1.1)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 26.1.1