Skip to content
This repository was archived by the owner on Oct 26, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .changeset/25685-one-react-line.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
"@object-ui/app-shell": patch
"@object-ui/auth": patch
"@object-ui/cli": patch
"@object-ui/collaboration": patch
"@object-ui/components": patch
"@object-ui/console": patch
"@object-ui/fields": patch
"@object-ui/i18n": patch
"@object-ui/layout": patch
"@object-ui/mobile": patch
"@object-ui/permissions": patch
"@object-ui/plugin-ai": patch
"@object-ui/plugin-calendar": patch
"@object-ui/plugin-charts": patch
"@object-ui/plugin-chatbot": patch
"@object-ui/plugin-dashboard": patch
"@object-ui/plugin-designer": patch
"@object-ui/plugin-detail": patch
"@object-ui/plugin-editor": patch
"@object-ui/plugin-gantt": patch
"@object-ui/plugin-kanban": patch
"@object-ui/plugin-list": patch
"@object-ui/plugin-map": patch
"@object-ui/plugin-markdown": patch
"@object-ui/plugin-report": patch
"@object-ui/plugin-timeline": patch
"@object-ui/plugin-tree": patch
"@object-ui/providers": patch
"@object-ui/react": patch
"@object-ui/runner": patch
---

Clause-②: no
Metadata-protocol: none

One react line: every manifest that pins `react` / `react-dom` now pins 19.3.0, and every `@types/react` / `@types/react-dom` pin is 19.3.0, matching the root `pnpm.overrides`. The objectstack monorepo's `@objectstack/client-react` requires react `^19.3.0`, and a second `@types/react` copy broke `@object-ui/plugin-view`'s declaration build in the merged tree. The CLI's scaffold (`REACT_RANGE` and the shared dev-dependency map in `scaffold-dependencies.ts`) quotes the same pins, as its anchor test requires.
11 changes: 11 additions & 0 deletions .changeset/25685-one-zod-range.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
"@object-ui/app-shell": patch
"@object-ui/components": patch
"@object-ui/plugin-timeline": patch
"@object-ui/types": patch
---

Clause-②: no
Metadata-protocol: none

One zod range: `@object-ui/app-shell`, `@object-ui/components`, `@object-ui/types` and `@object-ui/plugin-timeline` declare `zod` as `^4.6.5`, the range the objectstack monorepo declares, so the merged lockfile resolves one zod rather than two. The console bundle already carried a single copy; what changes is the declared floor.
12 changes: 6 additions & 6 deletions apps/console/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@
"dev": "vite",
"build:plugin": "tsc -p tsconfig.plugin.json",
"build:sdui-manifest": "tsx scripts/build-sdui-manifest.ts",
"build": "tsc && vite build && pnpm build:sdui-manifest && pnpm build:plugin",
"type-check": "tsc --noEmit && tsc -b tsconfig.node.json --force",
"build": "NODE_OPTIONS=--max-old-space-size=4096 tsc && vite build && pnpm build:sdui-manifest && pnpm build:plugin",
"type-check": "NODE_OPTIONS=--max-old-space-size=4096 tsc --noEmit && tsc -b tsconfig.node.json --force",
"lint": "eslint .",
"build:analyze": "pnpm build && echo 'Bundle analysis available at dist/stats.html'",
"preview": "vite preview",
Expand Down Expand Up @@ -100,16 +100,16 @@
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.4",
"@types/node": "^26.2.0",
"@types/react": "19.2.18",
"@types/react-dom": "19.2.4",
"@types/react": "19.3.0",
"@types/react-dom": "19.3.0",
"@vitejs/plugin-react": "^6.0.5",
"@vitest/ui": "^4.1.10",
"autoprefixer": "^10.5.4",
"happy-dom": "^20.11.2",
"lucide-react": "^1.43.0",
"postcss": "^8.5.26",
"react": "19.2.8",
"react-dom": "19.2.8",
"react": "19.3.0",
"react-dom": "19.3.0",
"react-map-gl": "^8.1.2",
"react-router-dom": "^7.18.2",
"sonner": "^2.0.8",
Expand Down
21 changes: 16 additions & 5 deletions apps/console/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
resolveSpecDistInjection,
} from '../../scripts/vite-objectstack-spec-dist.ts';
import { viteIneffectiveDynamicImports } from '../../scripts/vite-ineffective-dynamic-imports.ts';
import { frameworkPackagesDir, workspaceChunkTests } from '../../scripts/vite-objectstack-workspace.ts';
import { viteDeclaredLazyViews } from '../../scripts/vite-declared-lazy-views.ts';
import { viteTypesZodLazy } from '../../scripts/vite-types-zod-lazy.ts';
import { compression } from 'vite-plugin-compression2';
Expand Down Expand Up @@ -106,7 +107,7 @@ function preloadCriticalChunks(): Plugin {
* instead of quietly ceasing to guard anything.
*/
function assertLazyLinterStaysLazy(specTest: RegExp): Plugin {
const LINT = /@objectstack[\\/+]lint/;
const LINT = WORKSPACE_CHUNK_TESTS.lint;

return {
name: 'assert-lazy-linter-stays-lazy',
Expand Down Expand Up @@ -739,8 +740,17 @@ const OPTIMIZE_DEPS_INCLUDE = [
// The lookaheads are deliberately tight: `lint[\\/]` and `lint@` match the
// `lint` package only, so a future `@objectstack/lint-*` sibling still groups
// here rather than silently scattering into its importers' chunks.
const VENDOR_OBJECTSTACK_TEST =
/([\\/]node_modules[\\/]@objectstack[\\/](?!lint[\\/])|[\\/]@objectstack\+(?!lint@))/;
//
// objectstack ruling D1: inside the objectstack monorepo (objectui as `ui/`)
// the framework packages are workspace links, so Vite sees their REAL paths
// (`<monorepo root>/packages/<name>/dist/...`), never a node_modules spelling.
// The monorepo's own `packages/` directory therefore joins this test, the
// spec counter-probe and the lazy-linter guard below as one more alternative;
// standalone that directory does not exist and the alternative matches
// nothing. The three tests are built in `scripts/vite-objectstack-workspace.ts`
// so a unit test can read them -- its header carries the measurement.
const WORKSPACE_CHUNK_TESTS = workspaceChunkTests(frameworkPackagesDir(import.meta.dirname));
const VENDOR_OBJECTSTACK_TEST = WORKSPACE_CHUNK_TESTS.vendor;

// "This module id IS `@objectstack/spec`" — the subject of the counter-probe in
// `assertLazyLinterStaysLazy` above, kept separate from the group test on
Expand All @@ -749,8 +759,9 @@ const VENDOR_OBJECTSTACK_TEST =
// can see the SPEC chunk the counter-probe exists to find — reusing it there
// would keep the build green by lowering the bar, which is the one outcome
// objectui#5388 must not produce. Both spellings are covered: a plain install
// (`/node_modules/@objectstack/spec/…`) and pnpm's store (`/@objectstack+spec@…`).
const SPEC_MODULE_TEST = /@objectstack[\\/+]spec/;
// (`/node_modules/@objectstack/spec/…`) and pnpm's store (`/@objectstack+spec@…`),
// plus the monorepo's workspace path (see `WORKSPACE_CHUNK_TESTS` above).
const SPEC_MODULE_TEST = WORKSPACE_CHUNK_TESTS.spec;

// Opt-in override of the installed `@objectstack/spec` — the spec twin of
// OBJECTSTACK_CLIENT_DIST above, so a framework build can bundle the console
Expand Down
8 changes: 4 additions & 4 deletions apps/site/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,16 @@
"fumadocs-ui": "16.15.4",
"lucide-react": "^1.43.0",
"next": "16.3.8",
"react": "19.2.8",
"react-dom": "19.2.8",
"react": "19.3.0",
"react-dom": "19.3.0",
"tailwind-merge": "^3.6.0"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.3.3",
"@types/mdx": "^2.0.14",
"@types/node": "^26.2.0",
"@types/react": "19.2.18",
"@types/react-dom": "19.2.4",
"@types/react": "19.3.0",
"@types/react-dom": "19.3.0",
"postcss": "^8.5.26",
"tailwindcss": "^4.3.3",
"tailwindcss-animate": "^1.0.7",
Expand Down
8 changes: 4 additions & 4 deletions examples/byo-backend-console/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@
"@object-ui/providers": "workspace:*",
"@object-ui/react": "workspace:*",
"@object-ui/types": "workspace:*",
"react": "19.2.8",
"react-dom": "19.2.8",
"react": "19.3.0",
"react-dom": "19.3.0",
"react-router-dom": "^7.18.2"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.3.3",
"@types/react": "19.2.18",
"@types/react-dom": "19.2.4",
"@types/react": "19.3.0",
"@types/react-dom": "19.3.0",
"@vitejs/plugin-react": "^6.0.5",
"autoprefixer": "^10.5.4",
"postcss": "^8.5.26",
Expand Down
8 changes: 4 additions & 4 deletions examples/console-starter/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@
"@object-ui/providers": "workspace:*",
"@object-ui/react-runtime": "workspace:*",
"@object-ui/sdui-parser": "workspace:*",
"react": "19.2.8",
"react-dom": "19.2.8",
"react": "19.3.0",
"react-dom": "19.3.0",
"react-router-dom": "^7.18.2",
"sonner": "^2.0.8"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.3.3",
"@types/react": "19.2.18",
"@types/react-dom": "19.2.4",
"@types/react": "19.3.0",
"@types/react-dom": "19.3.0",
"@vitejs/plugin-react": "^6.0.5",
"tailwindcss": "^4.3.3",
"typescript": "^6.0.3",
Expand Down
4 changes: 2 additions & 2 deletions examples/hello-world/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
"@object-ui/components": "workspace:*",
"@object-ui/core": "workspace:*",
"@object-ui/react": "workspace:*",
"react": "19.2.8",
"react-dom": "19.2.8"
"react": "19.3.0",
"react-dom": "19.3.0"
},
"scripts": {
"lint": "eslint ."
Expand Down
18 changes: 10 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"lint:coverage": "node scripts/check-lint-coverage.mjs",
"check:lint-rule-coverage": "node scripts/check-lint-rule-coverage.mjs",
"type-check": "turbo run type-check",
"typecheck": "turbo run type-check",
"type-check:coverage": "node scripts/check-type-check-coverage.mjs",
"type-check:e2e": "tsc -p tsconfig.e2e.json",
"type-check:scripts": "tsc -p tsconfig.scripts.json",
Expand Down Expand Up @@ -102,6 +103,7 @@
"merge-queue-head": "node scripts/check-merge-queue-head.mjs",
"check:pre-install-import-graph": "node scripts/check-pre-install-import-graph.mjs",
"check:test-path-roots": "node scripts/check-test-path-roots.mjs",
"check:ui-root-lookups": "node scripts/check-ui-root-lookups.mjs",
"check:vi-mock-specifiers": "node scripts/check-vi-mock-specifiers.mjs",
"check:vi-mock-inherit": "node scripts/check-vi-mock-inherit.mjs",
"check:vi-mock-override-shape": "node scripts/check-vi-mock-override-shape.mjs",
Expand Down Expand Up @@ -154,8 +156,8 @@
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.4",
"@types/node": "^26.2.0",
"@types/react": "19.2.18",
"@types/react-dom": "19.2.4",
"@types/react": "19.3.0",
"@types/react-dom": "19.3.0",
"@vitest/coverage-v8": "^4.1.10",
"@vitest/ui": "^4.1.10",
"autoprefixer": "^10.5.4",
Expand All @@ -169,8 +171,8 @@
"jsdom": "^29.1.1",
"msw": "^2.15.0",
"playwright": "^1.62.1",
"react": "19.2.8",
"react-dom": "19.2.8",
"react": "19.3.0",
"react-dom": "19.3.0",
"react-i18next": "^17.0.11",
"react-router-dom": "^7.18.2",
"remark-mdx": "^3.1.1",
Expand All @@ -192,10 +194,10 @@
},
"pnpm": {
"overrides": {
"react": "19.2.8",
"react-dom": "19.2.8",
"@types/react": "19.2.18",
"@types/react-dom": "19.2.4",
"react": "19.3.0",
"react-dom": "19.3.0",
"@types/react": "19.3.0",
"@types/react-dom": "19.3.0",
"dompurify": "^3.4.5",
"qs@<6.15.2": "^6.15.2",
"shell-quote@<1.8.4": "^1.8.4",
Expand Down
14 changes: 7 additions & 7 deletions packages/app-shell/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@
"./styles.css": "./src/styles.css"
},
"scripts": {
"build": "tsc && node ../../scripts/check-dist-completeness.mjs",
"build": "NODE_OPTIONS=--max-old-space-size=4096 tsc && node ../../scripts/check-dist-completeness.mjs",
"test": "vitest run --root ../.. packages/app-shell/",
"type-check": "tsc --noEmit && tsc -p tsconfig.test.json",
"type-check": "NODE_OPTIONS=--max-old-space-size=4096 tsc --noEmit && NODE_OPTIONS=--max-old-space-size=4096 tsc -p tsconfig.test.json",
"lint": "eslint ."
},
"dependencies": {
Expand Down Expand Up @@ -95,7 +95,7 @@
"lucide-react": "^1.43.0",
"qrcode": "^1.5.4",
"sonner": "^2.0.8",
"zod": "^4.6.1"
"zod": "^4.6.5"
},
"peerDependencies": {
"@object-ui/plugin-calendar": "workspace:^",
Expand Down Expand Up @@ -130,10 +130,10 @@
"@object-ui/test-support": "workspace:*",
"@types/node": "^26.2.0",
"@types/qrcode": "^1.5.6",
"@types/react": "19.2.18",
"@types/react-dom": "19.2.4",
"react": "19.2.8",
"react-dom": "19.2.8",
"@types/react": "19.3.0",
"@types/react-dom": "19.3.0",
"react": "19.3.0",
"react-dom": "19.3.0",
"react-router-dom": "^7.18.2",
"sonner": "^2.0.8",
"typescript": "^6.0.3",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,11 @@
*/

import { describe, it, expect } from 'vitest';
import { existsSync, readFileSync, readdirSync } from 'node:fs';
import { readFileSync, readdirSync } from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { BLOCK_CONFIG, type BlockPropField, type PlaceholderSpec } from '../block-config';
import { t } from '../../i18n';
import { uiRoot } from '../../../../../../../scripts/ui-root.mjs';

const PREFIX = 'engine.inspector.pageBlock';

Expand Down Expand Up @@ -535,18 +535,7 @@ describe('placeholders that must NOT be translated (#3979)', () => {
* doc line) must not resurrect one. */
const POSITIONAL_FAMILIES = new Set(['field', 'add', 'option', 'placeholder']);

/** Repo root, found by walking UP to the workspace manifest rather than by
* counting `..` segments, so moving this file retargets nothing silently. */
function repoRoot(): string {
let dir = path.dirname(fileURLToPath(import.meta.url));
for (let i = 0; i < 12; i += 1) {
if (existsSync(path.join(dir, 'pnpm-workspace.yaml'))) return dir;
dir = path.dirname(dir);
}
throw new Error('could not locate the repo root (no pnpm-workspace.yaml above this file)');
}

const ROOT = repoRoot();
const ROOT = uiRoot();
const I18N_SOURCE_PATH = path.join(
ROOT,
'packages/app-shell/src/views/metadata-admin/i18n.ts',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,32 +54,15 @@
*/

import { describe, it, expect } from 'vitest';
import { readFileSync, existsSync } from 'node:fs';
import { dirname, join, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
import { readFileSync } from 'node:fs';
import { join } from 'node:path';

import { stripComments } from 'jsonc-parser';

import { FlowSchema } from '@objectstack/spec/automation';
import { uiRoot } from '../../../../../../scripts/ui-root.mjs';

/**
* Walk up to the workspace root, so the README is found by repo layout.
*
* Anchored on this file's own naked `import.meta.url`, never on
* `process.cwd()`: the cwd differs between a repo-root vitest invocation and a
* package-level one, and an assertion that reads the filesystem would otherwise
* grade a different tree depending on how it was started.
*/
function repoRoot(): string {
let dir = dirname(fileURLToPath(import.meta.url));
for (let i = 0; i < 12; i += 1) {
if (existsSync(join(dir, 'pnpm-workspace.yaml'))) return dir;
dir = resolve(dir, '..');
}
throw new Error('repo root (pnpm-workspace.yaml) not found from this test file');
}

const README = join(repoRoot(), 'packages/app-shell/README.md');
const README = join(uiRoot(), 'packages/app-shell/README.md');

const SECTION_HEADING = '\n### Visual flow canvas\n';
const ANCHOR = '**JSON shape** (a `flow` draft):';
Expand Down
4 changes: 2 additions & 2 deletions packages/auth/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@
"better-auth": "^1.7.2"
},
"devDependencies": {
"@types/react": "19.2.18",
"react": "19.2.8",
"@types/react": "19.3.0",
"react": "19.3.0",
"typescript": "^6.0.3",
"vitest": "^4.1.10"
},
Expand Down
6 changes: 3 additions & 3 deletions packages/cli/src/utils/scaffold-dependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ export function platformPackageRange(): string {
* tests: the second is not even wrong about the major, which is exactly how it
* survived unnoticed.
*/
export const REACT_RANGE = '19.2.8';
export const REACT_RANGE = '19.3.0';

/**
* `devDependencies` shared by every generated manifest (identical in all three).
Expand All @@ -136,8 +136,8 @@ export const REACT_RANGE = '19.2.8';
*/
export const SCAFFOLD_DEV_DEPENDENCIES: Record<string, string> = {
'@tailwindcss/postcss': '^4.3.3',
'@types/react': '19.2.18',
'@types/react-dom': '19.2.4',
'@types/react': '19.3.0',
'@types/react-dom': '19.3.0',
'@vitejs/plugin-react': '^6.0.5',
autoprefixer: '^10.5.4',
postcss: '^8.5.26',
Expand Down
Loading
Loading