From 1eb91582be8d89b6abcd506950d3b07509dc4041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Chalifour?= Date: Tue, 20 Oct 2026 16:36:26 +0200 Subject: [PATCH 1/2] refactor(app): use the published file preview launcher Adopt data-app 0.73.0 and run data-app-preview from the cached preview project. Remove the generated server script so the package owns dependency resolution, startup, and signal cleanup, while the CLI retains scope validation and the credential proxy. --- cli/bun.lock | 4 +-- cli/package.json | 2 +- cli/scripts/smoke-data-app.ts | 2 +- cli/src/commands/app/lib/distribution.test.ts | 6 ++-- .../commands/app/lib/file-dev-server.ts.txt | 17 ----------- cli/src/commands/app/lib/file-dev.test.ts | 6 ++-- cli/src/commands/app/lib/file-dev.ts | 4 +-- data-app/README.md | 5 ++++ data-app/starter/bun.lock | 28 +++++++++---------- data-app/starter/package.json | 6 ++-- data-app/tests/bun.lock | 4 +-- data-app/tests/package.json | 2 +- 12 files changed, 35 insertions(+), 51 deletions(-) delete mode 100644 cli/src/commands/app/lib/file-dev-server.ts.txt diff --git a/cli/bun.lock b/cli/bun.lock index e8c6923..dd60518 100644 --- a/cli/bun.lock +++ b/cli/bun.lock @@ -5,7 +5,7 @@ "": { "name": "cli", "dependencies": { - "@altertable/data-app-manifest": "0.72.0", + "@altertable/data-app-manifest": "0.73.0", "@clack/prompts": "1.7.0", "oauth4webapi": "3.8.7", "yaml": "2.9.0", @@ -24,7 +24,7 @@ }, }, "packages": { - "@altertable/data-app-manifest": ["@altertable/data-app-manifest@0.72.0", "", { "dependencies": { "typescript": "5.9.3" } }, "sha512-404JXukgR2zGt52NbgDohuvtlx2kt8v54Yb8EWs2b2RjDKmOwQ2gnQJBQzAIUtsFu1Gup6awv4gc9qj7eazvPA=="], + "@altertable/data-app-manifest": ["@altertable/data-app-manifest@0.73.0", "", { "dependencies": { "typescript": "5.9.3" } }, "sha512-68NC4KuB2YoyCU9+MGdRHpnUJX43D/DJ8UnmBZ7dG5LezgClBf/w7wpRfX9jx/OTwGsa0+bFgGnCLOEA+5cnqA=="], "@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], diff --git a/cli/package.json b/cli/package.json index a09e13a..a4b4c07 100644 --- a/cli/package.json +++ b/cli/package.json @@ -49,7 +49,7 @@ "test:watch": "bun test --watch" }, "dependencies": { - "@altertable/data-app-manifest": "0.72.0", + "@altertable/data-app-manifest": "0.73.0", "@clack/prompts": "1.7.0", "oauth4webapi": "3.8.7", "yaml": "2.9.0" diff --git a/cli/scripts/smoke-data-app.ts b/cli/scripts/smoke-data-app.ts index 84516a9..399eb94 100644 --- a/cli/scripts/smoke-data-app.ts +++ b/cli/scripts/smoke-data-app.ts @@ -170,7 +170,7 @@ export async function smokeDataApp( '@altertable/data-app-react', '@altertable/data-app-bun', ]) { - if (manifest.dependencies?.[name] !== '0.72.0') + if (manifest.dependencies?.[name] !== '0.73.0') throw new Error( `Packaged starter must pin ${name} to the tested release` ); diff --git a/cli/src/commands/app/lib/distribution.test.ts b/cli/src/commands/app/lib/distribution.test.ts index cd3c434..c48c8d6 100644 --- a/cli/src/commands/app/lib/distribution.test.ts +++ b/cli/src/commands/app/lib/distribution.test.ts @@ -48,9 +48,9 @@ test('distribution embeds a deterministic starter with an exact package pin and JSON.parse(files['package.json']!).dependencies['@altertable/data-app'] ).toBe(recommendedDataAppVersion()); expect(JSON.parse(files['package.json']!).dependencies).toMatchObject({ - '@altertable/data-app': '0.72.0', - '@altertable/data-app-react': '0.72.0', - '@altertable/data-app-bun': '0.72.0', + '@altertable/data-app': '0.73.0', + '@altertable/data-app-react': '0.73.0', + '@altertable/data-app-bun': '0.73.0', }); expect(files['src/main.tsx']).toContain("from '@altertable/data-app-react'"); expect(files['src/preview.ts']).toContain( diff --git a/cli/src/commands/app/lib/file-dev-server.ts.txt b/cli/src/commands/app/lib/file-dev-server.ts.txt deleted file mode 100644 index 0ba47a5..0000000 --- a/cli/src/commands/app/lib/file-dev-server.ts.txt +++ /dev/null @@ -1,17 +0,0 @@ -import { localLakehouse } from "@altertable/data-app-bun"; -import { serveAppFile } from "@altertable/data-app-bun/preview"; - -const preview = await serveAppFile({ - file: process.env.ALTERTABLE_APP_FILE, - port: Number(process.env.PORT), - lakehouse: localLakehouse(), - resolveDependency: (specifier) => Bun.resolveSync(specifier, import.meta.dir), -}); - -for (const signal of ["SIGINT", "SIGTERM"]) { - process.once(signal, async () => { - await preview.stop(); - process.exit(0); - }); -} -console.log(`Data app running at ${preview.url} (${process.env.ALTERTABLE_APP_FILE})`); diff --git a/cli/src/commands/app/lib/file-dev.test.ts b/cli/src/commands/app/lib/file-dev.test.ts index de6d460..baa2006 100644 --- a/cli/src/commands/app/lib/file-dev.test.ts +++ b/cli/src/commands/app/lib/file-dev.test.ts @@ -48,13 +48,11 @@ throw new Error("must not execute");` ); const starter = JSON.parse(dataAppPayload.starter['package.json']!); expect(manifest.dependencies).toEqual(starter.dependencies); - expect(manifest.scripts).toEqual({ dev: 'bun server.ts' }); + expect(manifest.scripts).toEqual({ dev: 'data-app-preview' }); expect(await readFile(join(directory, 'bun.lock'), 'utf8')).toBe( dataAppPayload.starter['bun.lock']! ); - expect(await readFile(join(directory, 'server.ts'), 'utf8')).toContain( - '@altertable/data-app-bun/preview' - ); + expect(existsSync(join(directory, 'server.ts'))).toBe(false); expect( await prepare(app('{ organization: "acme", environment: "production" }')) ).toBe(directory); diff --git a/cli/src/commands/app/lib/file-dev.ts b/cli/src/commands/app/lib/file-dev.ts index cfe8a57..477d21b 100644 --- a/cli/src/commands/app/lib/file-dev.ts +++ b/cli/src/commands/app/lib/file-dev.ts @@ -1,7 +1,6 @@ import { mkdir, writeFile } from 'node:fs/promises'; import { join } from 'node:path'; -import serverScript from '@/commands/app/lib/file-dev-server.ts.txt'; import { recommendedDataAppVersion } from '@/commands/app/lib/package.ts'; import { dataAppPayload } from '@/commands/app/lib/payload.ts'; import { readRequiredFile } from '@/commands/app/lib/remote.ts'; @@ -37,13 +36,12 @@ export async function prepareFilePreview( ); const starter = dataAppPayload.starter; const packageJson = JSON.parse(starter['package.json']!); - packageJson.scripts = { dev: 'bun server.ts' }; + packageJson.scripts = { dev: 'data-app-preview' }; await mkdir(directory, { recursive: true }); const files = { 'package.json': `${JSON.stringify(packageJson, null, 2)}\n`, 'bun.lock': starter['bun.lock']!, 'bunfig.toml': starter['bunfig.toml']!, - 'server.ts': serverScript, }; await Promise.all( Object.entries(files).map(([name, content]) => diff --git a/data-app/README.md b/data-app/README.md index dc3f178..341db66 100644 --- a/data-app/README.md +++ b/data-app/README.md @@ -35,6 +35,11 @@ Each consumer declares only the packages it uses: | `@altertable/data-app-react` | Starter UI and browser-test fixtures | | `@altertable/data-app-bun` | Starter local server and single-file preview | +`app dev --file` runs the published `data-app-preview` launcher from +`@altertable/data-app-bun` in a cached project with the starter's pinned dependencies. +The CLI verifies profile scope and supplies a credential proxy; the launcher owns +preview startup and shutdown. + Browser-test fixtures live under `starter/` and resolve React authoring from the starter's own dependencies. Keep the browser-test server's manifest limited to its direct dependencies. diff --git a/data-app/starter/bun.lock b/data-app/starter/bun.lock index 8987569..37c1bc6 100644 --- a/data-app/starter/bun.lock +++ b/data-app/starter/bun.lock @@ -5,9 +5,9 @@ "": { "name": "data-app-starter", "dependencies": { - "@altertable/data-app": "0.72.0", - "@altertable/data-app-bun": "0.72.0", - "@altertable/data-app-react": "0.72.0", + "@altertable/data-app": "0.73.0", + "@altertable/data-app-bun": "0.73.0", + "@altertable/data-app-react": "0.73.0", "react": "19.3.0", "react-dom": "19.3.0", }, @@ -23,11 +23,11 @@ }, }, "packages": { - "@altertable/data-app": ["@altertable/data-app@0.72.0", "", { "dependencies": { "@internationalized/date": "3.12.4" } }, "sha512-F1wgk5ANgxrl2y48w2D0PpWkv8SHTiPapBbmGrlrb4OQjgj2JAjmitVBUW/luMj0M3E7hwVAjOvld4JT6KbloQ=="], + "@altertable/data-app": ["@altertable/data-app@0.73.0", "", { "dependencies": { "@internationalized/date": "3.12.4" } }, "sha512-JiNaFWAq0xryikh0B6rHQAEEHnxU22Hve+bOTy/6uQNBYEhkuogrXE6VoI4YBuWJdzj9KqQKO+uho+vOU7ZCIQ=="], - "@altertable/data-app-bun": ["@altertable/data-app-bun@0.72.0", "", { "dependencies": { "@altertable/data-app": "0.72.0", "@altertable/lakehouse": "0.4.1", "get-tsconfig": "4.14.3" } }, "sha512-fMjSn8TIBo5oSQbimlHHyfUauZ/xxKvKCl7Jze7xUrIPSLccZXAesHjBIHwoKmKjXstBheWp47asrjooN5pLgw=="], + "@altertable/data-app-bun": ["@altertable/data-app-bun@0.73.0", "", { "dependencies": { "@altertable/data-app": "0.73.0", "@altertable/lakehouse": "0.4.1", "get-tsconfig": "4.14.3" }, "bin": { "data-app-preview": "bin/preview.js" } }, "sha512-bhgXGb0AHjSpfOljD+lwiyJzr+dDqmoMhnBc6YDx2BL8hAW7iSm9dpCqpoYsQGjyLW7dISxshUIfPlZ6TRiAaw=="], - "@altertable/data-app-react": ["@altertable/data-app-react@0.72.0", "", { "dependencies": { "@altertable/data-app": "0.72.0", "@floating-ui/react": "0.27.20", "@internationalized/date": "3.12.4", "@tanstack/react-query": "5.104.0", "fflate": "0.8.3", "fuzzysort": "4.0.2", "html-to-image": "1.11.13", "lucide-react": "1.48.0", "react-aria-components": "1.21.1", "recharts": "3.10.1" }, "peerDependencies": { "react": ">=19.2.0", "react-dom": ">=19.2.0" } }, "sha512-SEJ3tHdZ6oUZm+pJLiesfnknYQfSd3/Aymhip3qA08gu3uJCQ1I2ocXLmzj6zcZZXFmtDwGhkWprVGXiomtxGA=="], + "@altertable/data-app-react": ["@altertable/data-app-react@0.73.0", "", { "dependencies": { "@altertable/data-app": "0.73.0", "@floating-ui/react": "0.27.20", "@internationalized/date": "3.12.4", "@tanstack/react-query": "5.104.3", "fflate": "0.8.3", "fuzzysort": "4.0.2", "html-to-image": "1.11.13", "lucide-react": "1.59.0", "react-aria-components": "1.22.1", "recharts": "3.10.1" }, "peerDependencies": { "react": ">=19.2.0", "react-dom": ">=19.2.0" } }, "sha512-EJiGeX5YSnR6+qZLR6d6WQBOCx/IIvQj1xck+s6b1A45kdLK2GozBcfexQveuBq1RGG568oIdEvY2Zzel3UXTA=="], "@altertable/lakehouse": ["@altertable/lakehouse@0.4.1", "", {}, "sha512-m7d15cWt+WUGW7lVw2KYGD+Se8MzO25G7SWSuFd+OasBxWmOJNa2IrgvOHGVEbnZ+kexTUy9NjAGQ69sG4V91w=="], @@ -43,7 +43,7 @@ "@internationalized/date": ["@internationalized/date@3.12.4", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-M1dEn4c1U1HsSlaVR8upZtSqvXrTkHDfv18H01uCSJyjVLDxnBR38v/fMxecmlwXKR4i9HeZcmgQAPE6A+aGJQ=="], - "@internationalized/number": ["@internationalized/number@3.6.8", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-8UmMFia46DUt+k97zKd9fKWXcWHR+k8ae3eYzILETuT2KbIvLyOfac7zesw+sJdRAAZ7Q9pM1Mk22aXp2LD0Ig=="], + "@internationalized/number": ["@internationalized/number@3.6.9", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-GgWy2caO/+hV9sT/oCTWGHvbjmJMPT9kkXzoKRLnkEq7adghhR7UprhvY9sXrKfrp3NcDfhF6QQHXR1KfQbB8g=="], "@internationalized/string": ["@internationalized/string@3.2.10", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-PDx6//vHSpRnHfxqMqto11zQvhsaU74O3mKv2F/0eicGZcl9NLjQmGlbHz/LsJh5tLKp4A4L7ZVTzN1/MmMTvA=="], @@ -135,7 +135,7 @@ "@oxlint/binding-win32-x64-msvc": ["@oxlint/binding-win32-x64-msvc@1.86.0", "", { "os": "win32", "cpu": "x64" }, "sha512-az4dzifCRzES1crwu6pDFXzJTIanrdxXFL9TbiJWrx9LKcuacbR83aPvxDA1LKLNswi/RoqitC7Afcflhu3zBQ=="], - "@react-types/shared": ["@react-types/shared@3.36.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag=="], + "@react-types/shared": ["@react-types/shared@3.37.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-VNlZuifu4tHdxWPfHvoMfKsHA9kVTCGkduv5vKVTdinm8wHFJNhyVB5RzIMiRFj0q3RKoCbP68u2zaoBSiFueg=="], "@reduxjs/toolkit": ["@reduxjs/toolkit@2.13.0", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@standard-schema/utils": "^0.3.0", "immer": "^11.0.0", "redux": "^5.0.1", "redux-thunk": "^3.1.0", "reselect": "^5.1.0" }, "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" }, "optionalPeers": ["react", "react-redux"] }, "sha512-f6jwVRfwW30+tnllz4YcsHHpPYYOE7abcHkyUCovD+P7DyhdAI5prz2Fh/8TLhakjpN+7aIEion1s5L/tvlYlA=="], @@ -145,9 +145,9 @@ "@swc/helpers": ["@swc/helpers@0.5.23", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw=="], - "@tanstack/query-core": ["@tanstack/query-core@5.104.0", "", {}, "sha512-JrC2r/JQlXt7khBSdUpsgxNvybzOg+aITa+ARRMlP2AFo93Y8vIqz077rp+e61mJetSZ0T6AJbwW1JHer1vrPQ=="], + "@tanstack/query-core": ["@tanstack/query-core@5.104.3", "", {}, "sha512-DZY9TuJAOgU3UyHUhXb4CcTYEHNZszlwkPg4VViIwTxOKzLprPUU+rbaPZQd3srqkGOtpaDdKpW972UV/LKlcg=="], - "@tanstack/react-query": ["@tanstack/react-query@5.104.0", "", { "dependencies": { "@tanstack/query-core": "5.104.0" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-e1TZmDCQnWIfiDVryIHeA6Idj+Lfx1hORLOhXS/l5wcgvtVD4yYqbTDl378sGQKIi2cSgb0TEMC9cKK8GGoJEw=="], + "@tanstack/react-query": ["@tanstack/react-query@5.104.3", "", { "dependencies": { "@tanstack/query-core": "5.104.3" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-5Ts1ImwJKqoJgPkLxl9WrPQy1JEoEmti3MaaODCfBamHUGFk57IFrc+AIksPq+BAm10EsroX56qm398Z42LG7w=="], "@types/bun": ["@types/bun@1.4.3", "", { "dependencies": { "bun-types": "1.4.3" } }, "sha512-N67Pqy8JXbAY/j0tNraS3V5mubGvc6rrrNDmDCtZLlFzccbUJPDb0tvgUBC5q4m8ybkP93Jcn1QB+RYQ6PvBhw=="], @@ -267,7 +267,7 @@ "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="], - "lucide-react": ["lucide-react@1.48.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-R0CIKY/fXiC6y9xRBADgsK+VW2p/pcTJOMhLZf1T+uG+vJUvyUR02nGOgmIIC7MPkiNK4Ox8QDnbqF8rJYWPZQ=="], + "lucide-react": ["lucide-react@1.59.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-5qgMyyCPU6OvnKpLS2t693+ZtiqA8oaSweWoUows0BLFKFf6V75m4+CptpmohZHpD5IuOVIBXHBBiv2vpLJmtw=="], "oxfmt": ["oxfmt@0.71.0", "", { "dependencies": { "tinypool": "2.2.0" }, "optionalDependencies": { "@oxfmt/binding-android-arm-eabi": "0.71.0", "@oxfmt/binding-android-arm64": "0.71.0", "@oxfmt/binding-darwin-arm64": "0.71.0", "@oxfmt/binding-darwin-x64": "0.71.0", "@oxfmt/binding-freebsd-x64": "0.71.0", "@oxfmt/binding-linux-arm-gnueabihf": "0.71.0", "@oxfmt/binding-linux-arm-musleabihf": "0.71.0", "@oxfmt/binding-linux-arm64-gnu": "0.71.0", "@oxfmt/binding-linux-arm64-musl": "0.71.0", "@oxfmt/binding-linux-ppc64-gnu": "0.71.0", "@oxfmt/binding-linux-riscv64-gnu": "0.71.0", "@oxfmt/binding-linux-riscv64-musl": "0.71.0", "@oxfmt/binding-linux-s390x-gnu": "0.71.0", "@oxfmt/binding-linux-x64-gnu": "0.71.0", "@oxfmt/binding-linux-x64-musl": "0.71.0", "@oxfmt/binding-openharmony-arm64": "0.71.0", "@oxfmt/binding-win32-arm64-msvc": "0.71.0", "@oxfmt/binding-win32-ia32-msvc": "0.71.0", "@oxfmt/binding-win32-x64-msvc": "0.71.0" }, "peerDependencies": { "svelte": "^5.0.0", "vite-plus": "*" }, "optionalPeers": ["svelte", "vite-plus"], "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-lUPUl0d/+Io5pDrsPXWs6rB4N/bpB78oj9CTDpnbulfDz+0r3XXcHPlQ7kRPJ2GjIT4nX+/mcqunOeP9BvsEtg=="], @@ -277,9 +277,9 @@ "react": ["react@19.3.0", "", {}, "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog=="], - "react-aria": ["react-aria@3.52.1", "", { "dependencies": { "@internationalized/date": "^3.12.4", "@internationalized/number": "^3.6.8", "@internationalized/string": "^3.2.10", "@react-types/shared": "^3.36.1", "@swc/helpers": "^0.5.0", "aria-hidden": "^1.2.3", "clsx": "^2.0.0", "react-stately": "3.50.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-fdZZruC9/x/joCg0mhKGs5aHpwrXLCSZ4GOJmhhYyiE0ffyEsk9MLFt9LCOCF9tn8ErTD+UDQP4oDUSlZkmpCg=="], + "react-aria": ["react-aria@3.53.1", "", { "dependencies": { "@internationalized/date": "^3.12.4", "@internationalized/number": "^3.6.9", "@internationalized/string": "^3.2.10", "@react-types/shared": "^3.37.0", "@swc/helpers": "^0.5.0", "aria-hidden": "^1.2.3", "clsx": "^2.0.0", "react-stately": "3.51.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-dikisyOjJd3D2fFrIDWmVWzqiLz5B86GzZv1zxs7xI4dVc0JIz/1Wa52I20gYvVL2WXeFXlygYsle/QcOMhtcg=="], - "react-aria-components": ["react-aria-components@1.21.1", "", { "dependencies": { "@internationalized/date": "^3.12.4", "@internationalized/string": "^3.2.10", "@react-types/shared": "^3.36.1", "@swc/helpers": "^0.5.0", "client-only": "^0.0.1", "react-aria": "3.52.1", "react-stately": "3.50.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-J88WflYY0z+EhLX0ce+GjFlQ3ag3ubIgfUTjpKSrBQBu92Xtl4Ub9o118HItUddtbk1Ido0jzyPy94/klZy1hg=="], + "react-aria-components": ["react-aria-components@1.22.1", "", { "dependencies": { "@internationalized/date": "^3.12.4", "@internationalized/string": "^3.2.10", "@react-types/shared": "^3.37.0", "@swc/helpers": "^0.5.0", "client-only": "^0.0.1", "react-aria": "3.53.1", "react-stately": "3.51.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-UTHaYHOaM71bOCjGPF50DcLywlrwAodE63IP64LB4kO+OizatQEL8TesVEOM8+TkBeSgHoflJ45388IlJfa7aw=="], "react-dom": ["react-dom@19.3.0", "", { "dependencies": { "scheduler": "^0.28.0" }, "peerDependencies": { "react": "^19.3.0" } }, "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q=="], @@ -287,7 +287,7 @@ "react-redux": ["react-redux@9.3.0", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "@types/react": "^18.2.25 || ^19", "react": "^18.0 || ^19", "redux": "^5.0.0" }, "optionalPeers": ["@types/react", "redux"] }, "sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g=="], - "react-stately": ["react-stately@3.50.0", "", { "dependencies": { "@internationalized/date": "^3.12.4", "@internationalized/number": "^3.6.8", "@internationalized/string": "^3.2.10", "@react-types/shared": "^3.36.1", "@swc/helpers": "^0.5.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-TnckvpDQGU0672wEaLZqdzvhuSeXWjgW6vijMWxiKOxc8CosQUfPGISdcZyfHqjX3XMjEtRxj4w9HumvX4h4mw=="], + "react-stately": ["react-stately@3.51.0", "", { "dependencies": { "@internationalized/date": "^3.12.4", "@internationalized/number": "^3.6.9", "@internationalized/string": "^3.2.10", "@react-types/shared": "^3.37.0", "@swc/helpers": "^0.5.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-YJcmkAXu2XOQP97hO/qz/cC3qv9kni3oVhwBlxWr358BHePJUpY15XwL3YSRMKxYt4EkslPqAz11JRirMfANGw=="], "recharts": ["recharts@3.10.1", "", { "dependencies": { "@reduxjs/toolkit": "^1.9.0 || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^11.1.8", "react-redux": "8.x.x || 9.x.x", "reselect": "5.2.0", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-QXFrvt6IVcw7eeZCoyXTwkIJAX3Dv1nyVhMicXJ47GsGDDpcN8z6o644DibE9XjpBTThtsomLKnTV6lc+cVFUA=="], diff --git a/data-app/starter/package.json b/data-app/starter/package.json index 75fba8c..7f102f5 100644 --- a/data-app/starter/package.json +++ b/data-app/starter/package.json @@ -15,9 +15,9 @@ "build": "bun build src/index.html --outdir=dist --production" }, "dependencies": { - "@altertable/data-app": "0.72.0", - "@altertable/data-app-bun": "0.72.0", - "@altertable/data-app-react": "0.72.0", + "@altertable/data-app": "0.73.0", + "@altertable/data-app-bun": "0.73.0", + "@altertable/data-app-react": "0.73.0", "react": "19.3.0", "react-dom": "19.3.0" }, diff --git a/data-app/tests/bun.lock b/data-app/tests/bun.lock index dd5bd58..d4e65bd 100644 --- a/data-app/tests/bun.lock +++ b/data-app/tests/bun.lock @@ -5,7 +5,7 @@ "": { "name": "data-app-browser-tests", "dependencies": { - "@altertable/data-app": "0.72.0", + "@altertable/data-app": "0.73.0", }, "devDependencies": { "@playwright/test": "1.63.0", @@ -16,7 +16,7 @@ }, }, "packages": { - "@altertable/data-app": ["@altertable/data-app@0.72.0", "", { "dependencies": { "@internationalized/date": "3.12.4" } }, "sha512-F1wgk5ANgxrl2y48w2D0PpWkv8SHTiPapBbmGrlrb4OQjgj2JAjmitVBUW/luMj0M3E7hwVAjOvld4JT6KbloQ=="], + "@altertable/data-app": ["@altertable/data-app@0.73.0", "", { "dependencies": { "@internationalized/date": "3.12.4" } }, "sha512-JiNaFWAq0xryikh0B6rHQAEEHnxU22Hve+bOTy/6uQNBYEhkuogrXE6VoI4YBuWJdzj9KqQKO+uho+vOU7ZCIQ=="], "@internationalized/date": ["@internationalized/date@3.12.4", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-M1dEn4c1U1HsSlaVR8upZtSqvXrTkHDfv18H01uCSJyjVLDxnBR38v/fMxecmlwXKR4i9HeZcmgQAPE6A+aGJQ=="], diff --git a/data-app/tests/package.json b/data-app/tests/package.json index 01fd7ed..6fdc26f 100644 --- a/data-app/tests/package.json +++ b/data-app/tests/package.json @@ -16,6 +16,6 @@ "typescript": "7.0.2" }, "dependencies": { - "@altertable/data-app": "0.72.0" + "@altertable/data-app": "0.73.0" } } From 1b448d3969206b7951727743366975623f32fcfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Chalifour?= Date: Tue, 20 Oct 2026 16:40:42 +0200 Subject: [PATCH 2/2] docs(app): remove preview implementation details --- data-app/README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/data-app/README.md b/data-app/README.md index 341db66..dc3f178 100644 --- a/data-app/README.md +++ b/data-app/README.md @@ -35,11 +35,6 @@ Each consumer declares only the packages it uses: | `@altertable/data-app-react` | Starter UI and browser-test fixtures | | `@altertable/data-app-bun` | Starter local server and single-file preview | -`app dev --file` runs the published `data-app-preview` launcher from -`@altertable/data-app-bun` in a cached project with the starter's pinned dependencies. -The CLI verifies profile scope and supplies a credential proxy; the launcher owns -preview startup and shutdown. - Browser-test fixtures live under `starter/` and resolve React authoring from the starter's own dependencies. Keep the browser-test server's manifest limited to its direct dependencies.