@pie-element/cli 0.1.2-next.6 → 0.1.2-next.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ export type BrowserEditorRuntime = {
2
+ name: string;
3
+ version: string;
4
+ views: Record<string, string>;
5
+ };
6
+ /**
7
+ * True when `dependencies`, directly or through the workspace @pie-lib packages they reach,
8
+ * include the editor engine, so the element's browser build bundles it.
9
+ */
10
+ export declare function reachesEditorEngine(root: string, dependencies: Record<string, string>): boolean;
11
+ /**
12
+ * pie.browserEditorRuntime for an element with the given ./browser/* views: the runtime's name,
13
+ * its current workspace version, and each view's variant. Null when the workspace has no runtime.
14
+ */
15
+ export declare function browserEditorRuntimeDeclaration(root: string, views: ReadonlySet<string>): BrowserEditorRuntime | null;
@@ -0,0 +1,55 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { WORKSPACE } from './sync-constants.js';
4
+ import { findWorkspacePieLibPackages } from './workspace-pie-lib.js';
5
+ const EDITOR_RUNTIME_MANIFEST = 'packages/shared/editor-runtime/package.json';
6
+ // tiptap and ProseMirror, which @pie-element/shared-editor-runtime provides. @tiptap/react stays
7
+ // inside the element.
8
+ const EDITOR_ENGINE_PACKAGE = /^(?:@tiptap\/(?!react$)|prosemirror-)/;
9
+ const VARIANT_VIEWS = ['delivery', 'author', 'print', 'controller'];
10
+ const readDependencies = (manifestPath) => {
11
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));
12
+ return { ...manifest.dependencies, ...manifest.optionalDependencies };
13
+ };
14
+ /**
15
+ * True when `dependencies`, directly or through the workspace @pie-lib packages they reach,
16
+ * include the editor engine, so the element's browser build bundles it.
17
+ */
18
+ export function reachesEditorEngine(root, dependencies) {
19
+ const libraries = findWorkspacePieLibPackages(root);
20
+ const visited = new Set();
21
+ const pending = Object.keys(dependencies);
22
+ while (pending.length > 0) {
23
+ const name = pending.pop();
24
+ if (visited.has(name))
25
+ continue;
26
+ visited.add(name);
27
+ if (EDITOR_ENGINE_PACKAGE.test(name))
28
+ return true;
29
+ const libraryDir = name.startsWith(WORKSPACE.PIE_LIB_PREFIX)
30
+ ? libraries.get(name.slice(WORKSPACE.PIE_LIB_PREFIX.length))
31
+ : undefined;
32
+ if (libraryDir)
33
+ pending.push(...Object.keys(readDependencies(join(libraryDir, 'package.json'))));
34
+ }
35
+ return false;
36
+ }
37
+ /**
38
+ * pie.browserEditorRuntime for an element with the given ./browser/* views: the runtime's name,
39
+ * its current workspace version, and each view's variant. Null when the workspace has no runtime.
40
+ */
41
+ export function browserEditorRuntimeDeclaration(root, views) {
42
+ const manifestPath = join(root, EDITOR_RUNTIME_MANIFEST);
43
+ if (!existsSync(manifestPath))
44
+ return null;
45
+ const runtime = JSON.parse(readFileSync(manifestPath, 'utf8'));
46
+ return {
47
+ name: runtime.name,
48
+ version: runtime.version,
49
+ views: Object.fromEntries(VARIANT_VIEWS.filter((view) => views.has(view)).map((view) => [
50
+ view,
51
+ `editor-runtime/${view}`,
52
+ ])),
53
+ };
54
+ }
55
+ //# sourceMappingURL=editor-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-runtime.js","sourceRoot":"","sources":["../../../src/lib/upstream/editor-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,uBAAuB,GAAG,6CAA6C,CAAC;AAC9E,iGAAiG;AACjG,sBAAsB;AACtB,MAAM,qBAAqB,GAAG,uCAAuC,CAAC;AACtE,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAU,CAAC;AAQ7E,MAAM,gBAAgB,GAAG,CAAC,YAAoB,EAA0B,EAAE;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,OAAO,EAAE,GAAG,QAAQ,CAAC,YAAY,EAAE,GAAG,QAAQ,CAAC,oBAAoB,EAAE,CAAC;AACxE,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,YAAoC;IACpF,MAAM,SAAS,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAY,CAAC;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC;YAC1D,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC5D,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,UAAU;YACZ,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAC7C,IAAY,EACZ,KAA0B;IAE1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,MAAM,CAAC,WAAW,CACvB,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5D,IAAI;YACJ,kBAAkB,IAAI,EAAE;SACzB,CAAC,CACH;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { WORKSPACE } from './sync-constants.js';\nimport { findWorkspacePieLibPackages } from './workspace-pie-lib.js';\n\nconst EDITOR_RUNTIME_MANIFEST = 'packages/shared/editor-runtime/package.json';\n// tiptap and ProseMirror, which @pie-element/shared-editor-runtime provides. @tiptap/react stays\n// inside the element.\nconst EDITOR_ENGINE_PACKAGE = /^(?:@tiptap\\/(?!react$)|prosemirror-)/;\nconst VARIANT_VIEWS = ['delivery', 'author', 'print', 'controller'] as const;\n\nexport type BrowserEditorRuntime = {\n name: string;\n version: string;\n views: Record<string, string>;\n};\n\nconst readDependencies = (manifestPath: string): Record<string, string> => {\n const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));\n return { ...manifest.dependencies, ...manifest.optionalDependencies };\n};\n\n/**\n * True when `dependencies`, directly or through the workspace @pie-lib packages they reach,\n * include the editor engine, so the element's browser build bundles it.\n */\nexport function reachesEditorEngine(root: string, dependencies: Record<string, string>): boolean {\n const libraries = findWorkspacePieLibPackages(root);\n const visited = new Set<string>();\n const pending = Object.keys(dependencies);\n while (pending.length > 0) {\n const name = pending.pop() as string;\n if (visited.has(name)) continue;\n visited.add(name);\n if (EDITOR_ENGINE_PACKAGE.test(name)) return true;\n const libraryDir = name.startsWith(WORKSPACE.PIE_LIB_PREFIX)\n ? libraries.get(name.slice(WORKSPACE.PIE_LIB_PREFIX.length))\n : undefined;\n if (libraryDir)\n pending.push(...Object.keys(readDependencies(join(libraryDir, 'package.json'))));\n }\n return false;\n}\n\n/**\n * pie.browserEditorRuntime for an element with the given ./browser/* views: the runtime's name,\n * its current workspace version, and each view's variant. Null when the workspace has no runtime.\n */\nexport function browserEditorRuntimeDeclaration(\n root: string,\n views: ReadonlySet<string>\n): BrowserEditorRuntime | null {\n const manifestPath = join(root, EDITOR_RUNTIME_MANIFEST);\n if (!existsSync(manifestPath)) return null;\n const runtime = JSON.parse(readFileSync(manifestPath, 'utf8'));\n return {\n name: runtime.name,\n version: runtime.version,\n views: Object.fromEntries(\n VARIANT_VIEWS.filter((view) => views.has(view)).map((view) => [\n view,\n `editor-runtime/${view}`,\n ])\n ),\n };\n}\n"]}
@@ -40,10 +40,16 @@ export declare const PACKAGE_DEFAULTS: {
40
40
  readonly FILES: readonly ["dist", "src"];
41
41
  };
42
42
  export declare const ELEMENT_BROWSER_VITE_CONFIG = "../../../tools/vite/element-browser.config.ts";
43
+ export declare const ELEMENT_BROWSER_EDITOR_RUNTIME_VITE_CONFIG = "../../../tools/vite/element-browser-editor-runtime.config.ts";
43
44
  export declare const ELEMENT_LEGACY_PRINT_VITE_CONFIG = "../../../tools/vite/element-legacy-print.config.ts";
44
45
  export type ElementBuildLanes = {
45
46
  /** dist/browser/** - the browser ESM surface consumed by pie-players. */
46
47
  browser?: boolean;
48
+ /**
49
+ * dist/browser/editor-runtime/** - the browser build with the editor engine imported from
50
+ * @pie-element/shared-editor-runtime, declared in pie.browserEditorRuntime. Needs `browser`.
51
+ */
52
+ editorRuntime?: boolean;
47
53
  /**
48
54
  * module/print.js - a self-contained print bundle (React inlined, zero
49
55
  * externals) for the unmodified @pie-framework/pie-print client loader, which
@@ -54,6 +54,7 @@ export const PACKAGE_DEFAULTS = {
54
54
  };
55
55
  // Build scripts
56
56
  export const ELEMENT_BROWSER_VITE_CONFIG = '../../../tools/vite/element-browser.config.ts';
57
+ export const ELEMENT_BROWSER_EDITOR_RUNTIME_VITE_CONFIG = '../../../tools/vite/element-browser-editor-runtime.config.ts';
57
58
  export const ELEMENT_LEGACY_PRINT_VITE_CONFIG = '../../../tools/vite/element-legacy-print.config.ts';
58
59
  /**
59
60
  * Compose a synced element's build script from the lanes it needs.
@@ -70,6 +71,9 @@ export function composeElementBuildScript(lanes = {}) {
70
71
  const steps = ['bun x vite build'];
71
72
  if (lanes.browser) {
72
73
  steps.push(`bun x vite build --config ${ELEMENT_BROWSER_VITE_CONFIG}`);
74
+ if (lanes.editorRuntime) {
75
+ steps.push(`bun x vite build --config ${ELEMENT_BROWSER_EDITOR_RUNTIME_VITE_CONFIG}`);
76
+ }
73
77
  }
74
78
  if (lanes.legacyPrint) {
75
79
  steps.push(`bun x vite build --config ${ELEMENT_LEGACY_PRINT_VITE_CONFIG}`);
@@ -1 +1 @@
1
- {"version":3,"file":"sync-constants.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-constants.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared constants for upstream sync operations\n */\n\n// Default repository paths\nexport const DEFAULT_PATHS = {\n PIE_ELEMENTS: '../pie-elements',\n PIE_LIB: '../pie-lib',\n PIE_ELEMENTS_NG: '.',\n} as const;\n\n// Workspace dependency patterns\nexport const WORKSPACE = {\n VERSION: 'workspace:*',\n PIE_LIB_PREFIX: '@pie-lib/',\n PIE_ELEMENT_PREFIX: '@pie-element/',\n PIE_FRAMEWORK_PREFIX: '@pie-framework/',\n} as const;\n\n// Upstream element packages intentionally excluded from sync.\n// These templates are not used in pie-elements-ng runtime.\nexport const EXCLUDED_UPSTREAM_ELEMENTS = ['boilerplate-item-type'] as const;\n\n// Upstream @pie-lib packages intentionally excluded from sync.\n// math-rendering stays local (wrapper re-exports shared MathJax adapter).\n// translator lives in packages/shared: its strings serve the Svelte elements too.\nexport const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES = ['math-rendering', 'translator'] as const;\n\n// Build tool versions\nexport const BUILD_TOOLS = {\n VITE: '^8.0.1',\n TYPESCRIPT: '^5.9.3',\n VITE_REACT_PLUGIN: '^6.0.1',\n} as const;\n\n// React versions. Element packages also depend on React from ^18.2.0, the browser ESM policy\n// version, so their peer range starts there.\nexport const REACT = {\n ELEMENT_PEER_RANGE: '^18.2.0 || ^19.0.0',\n LIBRARY_PEER_RANGE: '^18.0.0 || ^19.0.0',\n TYPES_VERSION: '^18.2.0',\n} as const;\n\n// Directory patterns to skip\nexport const SKIP_PATTERNS = {\n TEST_DIRS: ['__tests__', '__mocks__'],\n FILE_EXTENSIONS: ['.js', '.jsx', '.ts', '.tsx'],\n} as const;\n\n// File types\nexport const FILE_TYPES = {\n JS: '.js',\n JSX: '.jsx',\n TS: '.ts',\n TSX: '.tsx',\n} as const;\n\n// Package.json defaults\nexport const PACKAGE_DEFAULTS = {\n TYPE: 'module',\n SIDE_EFFECTS: false,\n FILES: ['dist', 'src'],\n} as const;\n\n// Build scripts\nexport const ELEMENT_BROWSER_VITE_CONFIG = '../../../tools/vite/element-browser.config.ts';\nexport const ELEMENT_LEGACY_PRINT_VITE_CONFIG =\n '../../../tools/vite/element-legacy-print.config.ts';\n\nexport type ElementBuildLanes = {\n /** dist/browser/** - the browser ESM surface consumed by pie-players. */\n browser?: boolean;\n /**\n * module/print.js - a self-contained print bundle (React inlined, zero\n * externals) for the unmodified @pie-framework/pie-print client loader, which\n * uses a bare import() with no import map and so cannot read exports[\"./print\"].\n * See PIE-839 and docs/PRINT_SUPPORT.md.\n */\n legacyPrint?: boolean;\n /** dist/index.iife.js - the fully self-contained script-tag surface. */\n iife?: boolean;\n};\n\n/**\n * Compose a synced element's build script from the lanes it needs.\n *\n * Composed rather than enumerated on purpose. This used to be four hardcoded\n * constants covering the browser/iife combinations, so when PIE-839 added the\n * legacy print lane there was nowhere for it to live: it was written straight\n * into the twelve print-enabled manifests, and the next sync regenerated\n * `scripts.build` from the constants and silently dropped it. Print then broke\n * for every synced element with no failing check. Adding a lane here keeps it in\n * the generated output instead of relying on a hand-edited manifest surviving.\n */\nexport function composeElementBuildScript(lanes: ElementBuildLanes = {}): string {\n const steps = ['bun x vite build'];\n if (lanes.browser) {\n steps.push(`bun x vite build --config ${ELEMENT_BROWSER_VITE_CONFIG}`);\n }\n if (lanes.legacyPrint) {\n steps.push(`bun x vite build --config ${ELEMENT_LEGACY_PRINT_VITE_CONFIG}`);\n }\n if (lanes.iife) {\n steps.push('bun x vite build --config vite.config.iife.ts');\n }\n steps.push('bun x tsc --emitDeclarationOnly');\n return steps.join(' && ');\n}\n\n// Derived from composeElementBuildScript so the named variants cannot drift from\n// the composer. Prefer calling the composer directly for new lane combinations.\nexport const SCRIPTS = {\n BUILD: composeElementBuildScript(),\n BUILD_WITH_BROWSER: composeElementBuildScript({ browser: true }),\n BUILD_WITH_IIFE: composeElementBuildScript({ iife: true }),\n BUILD_WITH_IIFE_AND_BROWSER: composeElementBuildScript({ browser: true, iife: true }),\n DEV: 'bun x vite',\n DEMO: 'bun x vite --mode demo',\n TEST: 'bun x vitest run',\n} as const;\n\n// Compatibility report file\nexport const COMPATIBILITY_FILE = './.compatibility/report.json';\n\n// Upstream history file\nexport const HISTORY_FILE = '.upstream-sync-history.json';\n"]}
1
+ {"version":3,"file":"sync-constants.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-constants.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared constants for upstream sync operations\n */\n\n// Default repository paths\nexport const DEFAULT_PATHS = {\n PIE_ELEMENTS: '../pie-elements',\n PIE_LIB: '../pie-lib',\n PIE_ELEMENTS_NG: '.',\n} as const;\n\n// Workspace dependency patterns\nexport const WORKSPACE = {\n VERSION: 'workspace:*',\n PIE_LIB_PREFIX: '@pie-lib/',\n PIE_ELEMENT_PREFIX: '@pie-element/',\n PIE_FRAMEWORK_PREFIX: '@pie-framework/',\n} as const;\n\n// Upstream element packages intentionally excluded from sync.\n// These templates are not used in pie-elements-ng runtime.\nexport const EXCLUDED_UPSTREAM_ELEMENTS = ['boilerplate-item-type'] as const;\n\n// Upstream @pie-lib packages intentionally excluded from sync.\n// math-rendering stays local (wrapper re-exports shared MathJax adapter).\n// translator lives in packages/shared: its strings serve the Svelte elements too.\nexport const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES = ['math-rendering', 'translator'] as const;\n\n// Build tool versions\nexport const BUILD_TOOLS = {\n VITE: '^8.0.1',\n TYPESCRIPT: '^5.9.3',\n VITE_REACT_PLUGIN: '^6.0.1',\n} as const;\n\n// React versions. Element packages also depend on React from ^18.2.0, the browser ESM policy\n// version, so their peer range starts there.\nexport const REACT = {\n ELEMENT_PEER_RANGE: '^18.2.0 || ^19.0.0',\n LIBRARY_PEER_RANGE: '^18.0.0 || ^19.0.0',\n TYPES_VERSION: '^18.2.0',\n} as const;\n\n// Directory patterns to skip\nexport const SKIP_PATTERNS = {\n TEST_DIRS: ['__tests__', '__mocks__'],\n FILE_EXTENSIONS: ['.js', '.jsx', '.ts', '.tsx'],\n} as const;\n\n// File types\nexport const FILE_TYPES = {\n JS: '.js',\n JSX: '.jsx',\n TS: '.ts',\n TSX: '.tsx',\n} as const;\n\n// Package.json defaults\nexport const PACKAGE_DEFAULTS = {\n TYPE: 'module',\n SIDE_EFFECTS: false,\n FILES: ['dist', 'src'],\n} as const;\n\n// Build scripts\nexport const ELEMENT_BROWSER_VITE_CONFIG = '../../../tools/vite/element-browser.config.ts';\nexport const ELEMENT_BROWSER_EDITOR_RUNTIME_VITE_CONFIG =\n '../../../tools/vite/element-browser-editor-runtime.config.ts';\nexport const ELEMENT_LEGACY_PRINT_VITE_CONFIG =\n '../../../tools/vite/element-legacy-print.config.ts';\n\nexport type ElementBuildLanes = {\n /** dist/browser/** - the browser ESM surface consumed by pie-players. */\n browser?: boolean;\n /**\n * dist/browser/editor-runtime/** - the browser build with the editor engine imported from\n * @pie-element/shared-editor-runtime, declared in pie.browserEditorRuntime. Needs `browser`.\n */\n editorRuntime?: boolean;\n /**\n * module/print.js - a self-contained print bundle (React inlined, zero\n * externals) for the unmodified @pie-framework/pie-print client loader, which\n * uses a bare import() with no import map and so cannot read exports[\"./print\"].\n * See PIE-839 and docs/PRINT_SUPPORT.md.\n */\n legacyPrint?: boolean;\n /** dist/index.iife.js - the fully self-contained script-tag surface. */\n iife?: boolean;\n};\n\n/**\n * Compose a synced element's build script from the lanes it needs.\n *\n * Composed rather than enumerated on purpose. This used to be four hardcoded\n * constants covering the browser/iife combinations, so when PIE-839 added the\n * legacy print lane there was nowhere for it to live: it was written straight\n * into the twelve print-enabled manifests, and the next sync regenerated\n * `scripts.build` from the constants and silently dropped it. Print then broke\n * for every synced element with no failing check. Adding a lane here keeps it in\n * the generated output instead of relying on a hand-edited manifest surviving.\n */\nexport function composeElementBuildScript(lanes: ElementBuildLanes = {}): string {\n const steps = ['bun x vite build'];\n if (lanes.browser) {\n steps.push(`bun x vite build --config ${ELEMENT_BROWSER_VITE_CONFIG}`);\n if (lanes.editorRuntime) {\n steps.push(`bun x vite build --config ${ELEMENT_BROWSER_EDITOR_RUNTIME_VITE_CONFIG}`);\n }\n }\n if (lanes.legacyPrint) {\n steps.push(`bun x vite build --config ${ELEMENT_LEGACY_PRINT_VITE_CONFIG}`);\n }\n if (lanes.iife) {\n steps.push('bun x vite build --config vite.config.iife.ts');\n }\n steps.push('bun x tsc --emitDeclarationOnly');\n return steps.join(' && ');\n}\n\n// Derived from composeElementBuildScript so the named variants cannot drift from\n// the composer. Prefer calling the composer directly for new lane combinations.\nexport const SCRIPTS = {\n BUILD: composeElementBuildScript(),\n BUILD_WITH_BROWSER: composeElementBuildScript({ browser: true }),\n BUILD_WITH_IIFE: composeElementBuildScript({ iife: true }),\n BUILD_WITH_IIFE_AND_BROWSER: composeElementBuildScript({ browser: true, iife: true }),\n DEV: 'bun x vite',\n DEMO: 'bun x vite --mode demo',\n TEST: 'bun x vitest run',\n} as const;\n\n// Compatibility report file\nexport const COMPATIBILITY_FILE = './.compatibility/report.json';\n\n// Upstream history file\nexport const HISTORY_FILE = '.upstream-sync-history.json';\n"]}
@@ -8,6 +8,7 @@ import { existsSync, readFileSync } from 'node:fs';
8
8
  import { mkdir, readFile, unlink, writeFile } from 'node:fs/promises';
9
9
  import { dirname, join, resolve } from 'node:path';
10
10
  import { loadPackageJson } from '../../utils/package-json.js';
11
+ import { browserEditorRuntimeDeclaration, reachesEditorEngine } from './editor-runtime.js';
11
12
  import { existsAny } from './sync-filesystem.js';
12
13
  import { applyPackageJsonTransforms } from './sync-transforms.js';
13
14
  import { BUILD_TOOLS, PACKAGE_DEFAULTS, REACT, SCRIPTS, WORKSPACE, composeElementBuildScript, } from './sync-constants.js';
@@ -611,6 +612,23 @@ export async function ensureElementPackageJson(elementName, elementDir, config,
611
612
  else {
612
613
  delete nextPieMetadata.browserSharedDependencies;
613
614
  }
615
+ // An element whose browser build bundles the editor engine also builds the editor-runtime
616
+ // variant, which imports the engine from @pie-element/shared-editor-runtime.
617
+ const browserEditorRuntime = includeBrowserExports &&
618
+ reachesEditorEngine(config.pieElementsNg, pkg.dependencies ?? {})
619
+ ? browserEditorRuntimeDeclaration(config.pieElementsNg, new Set([
620
+ entryPoints.hasDelivery && 'delivery',
621
+ entryPoints.hasAuthor && 'author',
622
+ entryPoints.hasPrint && 'print',
623
+ entryPoints.hasController && 'controller',
624
+ ].filter((view) => typeof view === 'string')))
625
+ : null;
626
+ if (browserEditorRuntime) {
627
+ nextPieMetadata.browserEditorRuntime = browserEditorRuntime;
628
+ }
629
+ else {
630
+ delete nextPieMetadata.browserEditorRuntime;
631
+ }
614
632
  if (Object.keys(nextPieMetadata).length > 0) {
615
633
  pkg.pie = nextPieMetadata;
616
634
  }
@@ -693,6 +711,7 @@ export async function ensureElementPackageJson(elementName, elementDir, config,
693
711
  // module/print.js is emitted for the current @pie-framework/pie-print loader.
694
712
  scripts.build = composeElementBuildScript({
695
713
  browser: hasBrowserBuild,
714
+ editorRuntime: browserEditorRuntime !== null,
696
715
  legacyPrint: entryPoints.hasPrint,
697
716
  iife: hasIifeEntry,
698
717
  });
@@ -1 +1 @@
1
- {"version":3,"file":"sync-package-manager.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Centralized package.json management for upstream sync operations\n *\n * This module consolidates all package.json generation and management logic\n * to eliminate the massive duplication between controllers-strategy and react-strategy.\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { mkdir, readFile, unlink, writeFile } from 'node:fs/promises';\nimport { dirname, join, resolve } from 'node:path';\nimport { loadPackageJson, type PackageJson } from '../../utils/package-json.js';\nimport type { SyncConfig } from './sync-strategy.js';\nimport { existsAny } from './sync-filesystem.js';\nimport { applyPackageJsonTransforms } from './sync-transforms.js';\nimport {\n BUILD_TOOLS,\n PACKAGE_DEFAULTS,\n REACT,\n SCRIPTS,\n WORKSPACE,\n composeElementBuildScript,\n} from './sync-constants.js';\nimport {\n applyPieLibDependencyVersionPins,\n getPieLibDependencyAugmentations,\n getPieLibDependencyOverride,\n shouldGenerateConfigUiFractionHelper,\n shouldGenerateAutosizeInputComponent,\n} from './sync-presets.js';\n\ninterface EntryPointMap {\n hasIndex: boolean;\n hasDelivery: boolean;\n hasAuthor: boolean;\n hasController: boolean;\n hasConfigure: boolean;\n hasPrint: boolean;\n hasRuntimeSupport: boolean;\n hasTypes: boolean;\n}\n\ninterface BrowserEsmPolicy {\n sharedDependencyVersions?: Record<string, string>;\n}\n\ntype LegacyConfigureEntry = 'author' | 'configure';\n\nfunction getLegacyConfigureEntry(entryPoints: EntryPointMap): LegacyConfigureEntry | null {\n if (entryPoints.hasConfigure) {\n return 'configure';\n }\n if (entryPoints.hasAuthor) {\n return 'author';\n }\n return null;\n}\n\nfunction distEntryExport(entry: LegacyConfigureEntry): Record<string, string> {\n return {\n types: `./dist/${entry}/index.d.ts`,\n default: `./dist/${entry}/index.js`,\n };\n}\n\nfunction readBrowserEsmPolicy(rootDir: string): BrowserEsmPolicy {\n const policyPath = join(rootDir, 'tools/vite/browser-esm-policy.json');\n if (!existsSync(policyPath)) {\n return {};\n }\n try {\n return JSON.parse(readFileSync(policyPath, 'utf-8')) as BrowserEsmPolicy;\n } catch {\n return {};\n }\n}\n\n/**\n * Detect available entry points in an element package\n */\nexport function detectEntryPoints(elementDir: string): EntryPointMap {\n return {\n hasIndex: existsAny([\n join(elementDir, 'src/index.ts'),\n join(elementDir, 'src/index.tsx'),\n join(elementDir, 'src/index.js'),\n join(elementDir, 'src/index.jsx'),\n ]),\n hasDelivery: existsAny([\n join(elementDir, 'src/delivery/index.ts'),\n join(elementDir, 'src/delivery/index.tsx'),\n join(elementDir, 'src/delivery/index.js'),\n join(elementDir, 'src/delivery/index.jsx'),\n ]),\n hasAuthor: existsAny([\n join(elementDir, 'src/author/index.ts'),\n join(elementDir, 'src/author/index.tsx'),\n join(elementDir, 'src/author/index.js'),\n join(elementDir, 'src/author/index.jsx'),\n ]),\n hasController: existsAny([\n join(elementDir, 'src/controller/index.ts'),\n join(elementDir, 'src/controller/index.tsx'),\n join(elementDir, 'src/controller/index.js'),\n join(elementDir, 'src/controller/index.jsx'),\n ]),\n hasConfigure: existsAny([\n join(elementDir, 'src/configure/index.ts'),\n join(elementDir, 'src/configure/index.tsx'),\n join(elementDir, 'src/configure/index.js'),\n join(elementDir, 'src/configure/index.jsx'),\n ]),\n hasPrint: existsAny([\n join(elementDir, 'src/print/index.ts'),\n join(elementDir, 'src/print/index.tsx'),\n join(elementDir, 'src/print/index.js'),\n join(elementDir, 'src/print/index.jsx'),\n ]),\n hasRuntimeSupport: existsAny([\n join(elementDir, 'src/runtime-support.ts'),\n join(elementDir, 'src/runtime-support.tsx'),\n join(elementDir, 'src/runtime-support.js'),\n join(elementDir, 'src/runtime-support.jsx'),\n ]),\n hasTypes: existsAny([\n join(elementDir, 'src/types/index.ts'),\n join(elementDir, 'src/types/index.tsx'),\n join(elementDir, 'src/types/index.js'),\n join(elementDir, 'src/types/index.jsx'),\n ]),\n };\n}\n\n/**\n * Generate exports object based on available entry points\n */\nexport function generateExportsObject(\n entryPoints: EntryPointMap,\n options: { includeBrowserExports?: boolean } = {}\n): Record<string, unknown> {\n const includeBrowserExports = options.includeBrowserExports ?? false;\n const exports: Record<string, unknown> = {\n '.': {\n types: './dist/index.d.ts',\n default: './dist/index.js',\n },\n };\n\n if (entryPoints.hasDelivery) {\n exports['./delivery'] = {\n types: './dist/delivery/index.d.ts',\n default: './dist/delivery/index.js',\n };\n if (includeBrowserExports) {\n exports['./browser/delivery'] = {\n default: './dist/browser/delivery/index.js',\n };\n }\n }\n\n if (entryPoints.hasAuthor) {\n exports['./author'] = {\n types: './dist/author/index.d.ts',\n default: './dist/author/index.js',\n };\n if (includeBrowserExports) {\n exports['./browser/author'] = {\n default: './dist/browser/author/index.js',\n };\n }\n }\n\n const legacyConfigureEntry = getLegacyConfigureEntry(entryPoints);\n if (legacyConfigureEntry) {\n exports['./configure'] = distEntryExport(legacyConfigureEntry);\n }\n\n if (entryPoints.hasController) {\n exports['./controller'] = {\n types: './dist/controller/index.d.ts',\n default: './dist/controller/index.js',\n };\n exports['./controller.js'] = {\n types: './dist/controller/index.d.ts',\n default: './dist/controller/index.js',\n };\n if (includeBrowserExports) {\n exports['./browser/controller'] = {\n default: './dist/browser/controller/index.js',\n };\n }\n }\n\n if (entryPoints.hasPrint) {\n exports['./print'] = {\n types: './dist/print/index.d.ts',\n default: './dist/print/index.js',\n };\n exports['./print.js'] = {\n types: './dist/print/index.d.ts',\n default: './dist/print/index.js',\n };\n if (includeBrowserExports) {\n exports['./browser/print'] = {\n default: './dist/browser/print/index.js',\n };\n }\n }\n\n if (entryPoints.hasTypes) {\n exports['./types'] = {\n types: './dist/types/index.d.ts',\n default: './dist/types/index.js',\n };\n }\n\n if (entryPoints.hasRuntimeSupport) {\n exports['./runtime-support'] = {\n types: './dist/runtime-support.d.ts',\n default: './dist/runtime-support.js',\n };\n }\n\n exports['./package.json'] = './package.json';\n\n return exports;\n}\n\nfunction generateRuntimeSupportSource(elementName: string, entryPoints: EntryPointMap): string {\n const packageName = `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}`;\n return `export const runtimeSupport = {\n schemaVersion: 1,\n packageName: '${packageName}',\n supports: {\n esm: {\n delivery: ${entryPoints.hasDelivery},\n author: ${entryPoints.hasAuthor},\n print: ${entryPoints.hasPrint},\n },\n },\n};\n\nexport default runtimeSupport;\n`;\n}\n\nasync function ensureBrowserRuntimeSupportSource(\n elementName: string,\n elementDir: string,\n entryPoints: EntryPointMap\n): Promise<boolean> {\n const runtimeSupportPath = join(elementDir, 'src', 'runtime-support.ts');\n const nextContent = generateRuntimeSupportSource(elementName, entryPoints);\n const currentContent = existsSync(runtimeSupportPath)\n ? await readFile(runtimeSupportPath, 'utf-8').catch(() => null)\n : null;\n\n if (currentContent === nextContent) {\n return false;\n }\n\n await mkdir(dirname(runtimeSupportPath), { recursive: true });\n await writeFile(runtimeSupportPath, nextContent, 'utf-8');\n return true;\n}\n\n/**\n * Extract imports from source files to determine runtime dependencies\n */\nexport async function extractImportsFromSources(elementDir: string): Promise<Set<string>> {\n const imports = new Set<string>();\n const srcDir = join(elementDir, 'src');\n\n if (!existsSync(srcDir)) {\n return imports;\n }\n\n // Recursively find all .ts, .tsx, .js, .jsx files\n const { readdir: readdirRecursive } = await import('node:fs/promises');\n\n async function scanDirectory(dir: string): Promise<void> {\n try {\n const entries = await readdirRecursive(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n\n if (entry.isDirectory()) {\n await scanDirectory(fullPath);\n } else if (entry.isFile() && /\\.(ts|tsx|js|jsx)$/.test(entry.name)) {\n try {\n const content = await readFile(fullPath, 'utf-8');\n // Match import statements: import ... from 'package' or import('package')\n const importRegex = /import\\s+(?:[\\w{},\\s*]+\\s+from\\s+)?['\"]([^'\"]+)['\"]/g;\n const dynamicImportRegex = /import\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n\n let match: RegExpExecArray | null;\n\n match = importRegex.exec(content);\n while (match !== null) {\n const importPath = match[1];\n // Only track package imports (not relative imports)\n if (!importPath.startsWith('.') && !importPath.startsWith('/')) {\n const normalized = normalizePackageImport(importPath);\n if (normalized) imports.add(normalized);\n }\n match = importRegex.exec(content);\n }\n\n match = dynamicImportRegex.exec(content);\n while (match !== null) {\n const importPath = match[1];\n if (!importPath.startsWith('.') && !importPath.startsWith('/')) {\n const normalized = normalizePackageImport(importPath);\n if (normalized) imports.add(normalized);\n }\n match = dynamicImportRegex.exec(content);\n }\n } catch (err) {\n // Skip files that can't be read\n }\n }\n }\n } catch (err) {\n // Skip directories that can't be read\n }\n }\n\n await scanDirectory(srcDir);\n return imports;\n}\n\nfunction normalizePackageImport(specifier: string): string | null {\n if (!specifier || specifier.startsWith('.') || specifier.startsWith('/')) {\n return null;\n }\n if (specifier.startsWith('@')) {\n const parts = specifier.split('/');\n return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : null;\n }\n return specifier.split('/')[0] || null;\n}\n\n// Upstream manifests declare these as runtime dependencies, and no synced module imports them:\n// @emotion/style is a deprecated 0.8 package, and @pie-lib/test-utils is a test helper whose\n// testing-library dependencies would install into every host.\nconst UPSTREAM_DEPENDENCIES_TO_DROP = new Set(['@emotion/style', '@pie-lib/test-utils']);\n\nasync function findInstalledPackageJson(\n packageName: string,\n fromDir: string\n): Promise<PackageJson | null> {\n try {\n const { createRequire } = await import('node:module');\n const req = createRequire(resolve(fromDir, 'package.json'));\n const resolvedEntry = req.resolve(packageName);\n\n let currentDir = dirname(resolvedEntry);\n while (true) {\n const candidate = join(currentDir, 'package.json');\n if (existsSync(candidate)) {\n const pkg = await loadPackageJson(candidate).catch(() => null);\n if (pkg && pkg.name === packageName) {\n return pkg;\n }\n }\n\n const parent = dirname(currentDir);\n if (parent === currentDir) {\n break;\n }\n currentDir = parent;\n }\n } catch {\n // Package not resolvable from this location.\n }\n return null;\n}\n\nasync function addTransitivePeerDependencies(\n deps: Record<string, string>,\n fromDir: string,\n declaredPeerDeps: Set<string> = new Set()\n): Promise<void> {\n const depNames = Object.keys(deps);\n\n for (const depName of depNames) {\n if (\n depName.startsWith(WORKSPACE.PIE_LIB_PREFIX) ||\n depName.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX) ||\n depName.startsWith(WORKSPACE.PIE_FRAMEWORK_PREFIX)\n ) {\n continue;\n }\n\n const installedPkg = await findInstalledPackageJson(depName, fromDir);\n const peerDeps = (installedPkg?.peerDependencies as Record<string, string> | undefined) ?? {};\n const optionalPeers = new Set(\n Object.entries(\n (installedPkg?.peerDependenciesMeta as Record<string, { optional?: boolean }>) ?? {}\n )\n .filter(([, meta]) => meta?.optional)\n .map(([peerName]) => peerName)\n );\n\n for (const [peerName, peerVersion] of Object.entries(peerDeps)) {\n if (deps[peerName] || declaredPeerDeps.has(peerName) || optionalPeers.has(peerName)) {\n continue;\n }\n\n if (\n peerName.startsWith(WORKSPACE.PIE_LIB_PREFIX) ||\n peerName.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX) ||\n peerName.startsWith(WORKSPACE.PIE_FRAMEWORK_PREFIX)\n ) {\n deps[peerName] = WORKSPACE.VERSION;\n } else {\n deps[peerName] = peerVersion;\n }\n }\n }\n}\n\nasync function inferPeerVersionFromDeclaredDeps(\n targetDep: string,\n deps: Record<string, string>,\n fromDir: string\n): Promise<string | null> {\n for (const depName of Object.keys(deps)) {\n if (\n depName.startsWith(WORKSPACE.PIE_LIB_PREFIX) ||\n depName.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX) ||\n depName.startsWith(WORKSPACE.PIE_FRAMEWORK_PREFIX)\n ) {\n continue;\n }\n\n const installedPkg = await findInstalledPackageJson(depName, fromDir);\n const peerDeps = (installedPkg?.peerDependencies as Record<string, string> | undefined) ?? {};\n if (peerDeps[targetDep]) {\n return peerDeps[targetDep];\n }\n }\n\n return null;\n}\n\nfunction addKnownPeerFallbacks(deps: Record<string, string>): void {\n // Some widely used packages rely on peers that upstream metadata can omit\n // or that may not be inferable from local resolution during sync.\n if ((deps.recharts || deps['styled-components']) && !deps['react-is']) {\n deps['react-is'] = '^18.3.1';\n }\n\n if (deps['@tiptap/extension-character-count'] && !deps['@tiptap/extensions']) {\n deps['@tiptap/extensions'] = '^3.20.0';\n }\n\n if (deps['@tiptap/extension-list-item'] && !deps['@tiptap/extension-list']) {\n const tiptapVersion = deps['@tiptap/extension-list-item'];\n deps['@tiptap/extension-list'] = tiptapVersion;\n }\n\n if (deps['@testing-library/user-event'] && !deps['@testing-library/dom']) {\n deps['@testing-library/dom'] = '^10.4.1';\n }\n\n if (deps['@visx/curve'] && !deps['d3-shape']) {\n deps['d3-shape'] = '^3.2.0';\n }\n}\n\n/**\n * Extract and normalize dependencies from upstream package.json\n */\nexport function extractUpstreamDependencies(\n upstreamPkg: PackageJson | null\n): Record<string, string> {\n if (!upstreamPkg) return {};\n\n const upstreamDeps = (upstreamPkg.dependencies as Record<string, string> | undefined) ?? {};\n let expectedDeps: Record<string, string> = {};\n\n for (const [name, version] of Object.entries(upstreamDeps)) {\n if (UPSTREAM_DEPENDENCIES_TO_DROP.has(name)) {\n continue;\n }\n if (name.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n expectedDeps[name] = WORKSPACE.VERSION;\n } else if (name !== 'react' && name !== 'react-dom') {\n expectedDeps[name] = version;\n }\n }\n\n return expectedDeps;\n}\n\nfunction resolveSyncedVersion(\n upstreamPkg: PackageJson | null,\n existingPkg: PackageJson | null\n): string {\n const existingVersion = typeof existingPkg?.version === 'string' ? existingPkg.version : null;\n if (existingVersion) {\n return existingVersion;\n }\n const upstreamVersion = typeof upstreamPkg?.version === 'string' ? upstreamPkg.version : null;\n return upstreamVersion || '0.1.0';\n}\n\n/**\n * Ensure devDependencies include all required build tools.\n *\n * The pinned versions in BUILD_TOOLS / REACT are the source of truth for the\n * monorepo's toolchain, so we overwrite any existing entries instead of only\n * filling in missing ones. This prevents an upstream package.json from\n * silently downgrading vite / @vitejs/plugin-react / typescript across the\n * pie-lib packages during `upstream:update`.\n */\nexport function ensureBuildToolDependencies(pkg: PackageJson): void {\n if (!pkg.devDependencies || typeof pkg.devDependencies !== 'object') {\n pkg.devDependencies = {};\n }\n\n const devDeps = pkg.devDependencies as Record<string, string>;\n\n devDeps.vite = BUILD_TOOLS.VITE;\n devDeps.typescript = BUILD_TOOLS.TYPESCRIPT;\n devDeps['@vitejs/plugin-react'] = BUILD_TOOLS.VITE_REACT_PLUGIN;\n devDeps['@types/react'] = REACT.TYPES_VERSION;\n devDeps['@types/react-dom'] = REACT.TYPES_VERSION;\n}\n\n/**\n * Check if a @pie-framework or @pie-element/shared- package exists in the workspace\n *\n * Supports both legacy @pie-framework naming and new @pie-element/shared- naming.\n */\nfunction isPieFrameworkWorkspacePackage(packageName: string, config: SyncConfig): boolean {\n let pkgName: string;\n\n if (packageName.startsWith(WORKSPACE.PIE_FRAMEWORK_PREFIX)) {\n // Legacy @pie-framework/* packages\n pkgName = packageName.replace(WORKSPACE.PIE_FRAMEWORK_PREFIX, '');\n } else if (packageName.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX + 'shared-')) {\n // New @pie-element/shared-* packages\n pkgName = packageName.replace(WORKSPACE.PIE_ELEMENT_PREFIX + 'shared-', '');\n } else {\n return false;\n }\n\n const sharedPackagePath = join(config.pieElementsNg, 'packages/shared', pkgName, 'package.json');\n return existsSync(sharedPackagePath);\n}\n\n/**\n * Generate or update element package.json\n *\n * This function consolidates the ~400 lines of duplicated package.json management\n * logic from controllers-strategy and react-strategy into a single, maintainable function.\n */\nexport async function ensureElementPackageJson(\n elementName: string,\n elementDir: string,\n config: SyncConfig,\n options: { includeBrowserExports?: boolean } = {}\n): Promise<boolean> {\n if (!existsSync(elementDir)) {\n return false;\n }\n\n const pkgPath = join(elementDir, 'package.json');\n const upstreamPkgPath = join(config.pieElements, 'packages', elementName, 'package.json');\n const includeBrowserExports = options.includeBrowserExports ?? false;\n\n // Load existing package.json\n let pkg: PackageJson | null = null;\n if (existsSync(pkgPath)) {\n pkg = await loadPackageJson(pkgPath).catch(() => null);\n }\n\n // Load upstream package.json for dependency info\n const upstreamPkg = existsSync(upstreamPkgPath)\n ? await loadPackageJson(upstreamPkgPath).catch(() => null)\n : null;\n\n // Extract and normalize upstream dependencies\n const expectedDeps = extractUpstreamDependencies(upstreamPkg);\n const declaredPeerDeps = new Set([\n ...Object.keys((pkg?.peerDependencies as Record<string, string> | undefined) ?? {}),\n 'react',\n 'react-dom',\n ]);\n\n // Scan source files for actual imports to catch dependencies from skipped directories\n const importedPackages = await extractImportsFromSources(elementDir);\n\n // Add workspace dependencies found in imports\n const currentPackageName = `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}`;\n for (const imported of importedPackages) {\n // Skip self-dependencies (package importing from itself)\n if (imported === currentPackageName) {\n continue;\n }\n if (imported === 'react' || imported === 'react-dom') {\n continue;\n }\n\n if (imported.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n expectedDeps[imported] = WORKSPACE.VERSION;\n } else if (imported.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX)) {\n expectedDeps[imported] = WORKSPACE.VERSION;\n } else if (imported.startsWith(WORKSPACE.PIE_FRAMEWORK_PREFIX)) {\n // Only add as workspace dependency if it actually exists in packages/shared/\n if (isPieFrameworkWorkspacePackage(imported, config)) {\n expectedDeps[imported] = WORKSPACE.VERSION;\n } else {\n // External @pie-framework package - add with latest version if not already in deps\n if (!expectedDeps[imported]) {\n expectedDeps[imported] = '^1.0.0'; // Use latest 1.x version as default\n }\n }\n } else if (!expectedDeps[imported]) {\n // Keep element package.json aligned with actual runtime imports from src/.\n // Upstream package.json can miss third-party deps after source transforms.\n const installedPkg = await findInstalledPackageJson(imported, elementDir);\n if (installedPkg?.version) {\n expectedDeps[imported] = `^${installedPkg.version}`;\n } else {\n const inferredPeerVersion = await inferPeerVersionFromDeclaredDeps(\n imported,\n expectedDeps,\n elementDir\n );\n if (inferredPeerVersion) {\n expectedDeps[imported] = inferredPeerVersion;\n }\n }\n }\n }\n await addTransitivePeerDependencies(expectedDeps, elementDir, declaredPeerDeps);\n addKnownPeerFallbacks(expectedDeps);\n\n // Create minimal package.json if missing\n if (!pkg) {\n pkg = {\n name: `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}`,\n private: true,\n version: resolveSyncedVersion(upstreamPkg, null),\n description:\n (upstreamPkg?.description as string | undefined) ??\n `React implementation of ${elementName} element synced from pie-elements`,\n dependencies: expectedDeps,\n peerDependencies: {\n react: REACT.ELEMENT_PEER_RANGE,\n 'react-dom': REACT.ELEMENT_PEER_RANGE,\n },\n };\n }\n\n // Update dependencies to match upstream\n if (Object.keys(expectedDeps).length > 0) {\n pkg.dependencies = expectedDeps;\n }\n pkg.peerDependencies = {\n ...((pkg.peerDependencies as Record<string, string> | undefined) ?? {}),\n react: REACT.ELEMENT_PEER_RANGE,\n 'react-dom': REACT.ELEMENT_PEER_RANGE,\n };\n\n // Preserve pie metadata (if present upstream or locally)\n const pieMetadata = ((upstreamPkg as PackageJson | null | undefined)?.pie ??\n (pkg as PackageJson | null | undefined)?.pie ??\n undefined) as\n | {\n capabilities?: string[];\n controller?: string;\n configure?: string;\n browserSharedDependencies?: Record<string, string>;\n }\n | undefined;\n\n // Apply all standard transformations\n pkg = applyPackageJsonTransforms(pkg);\n\n // React must also be a real dependency, not only a peer. Legacy webpack\n // bundlers (builder.pie-api.com) install `dependencies` and never install\n // peers, so peer-only React leaves node_modules/react absent in the build\n // snapshot and every @mui / @emotion / @dnd-kit peer fails with\n // \"Module not found: Can't resolve 'react'\".\n //\n // This must run AFTER applyPackageJsonTransforms: transformPackageJsonBrowserEsmDependencies\n // unconditionally deletes react/react-dom from dependencies to drop whatever\n // arbitrary range upstream declared. We re-add them here as the final word,\n // pinned to the policy version.\n //\n // Install metadata only. The browser runtime singleton contract stays governed\n // by pie.browserSharedDependencies plus the player import map, and isExternal()\n // in sync-externals.ts keeps React external in every bundle regardless of what\n // is declared here, so bundle output is unaffected.\n //\n // Versions come from tools/vite/browser-esm-policy.json - the same source as\n // pie.browserSharedDependencies below.\n //\n // Declared as a caret range, NOT an exact pin. An exact pin resolves to its own\n // copy alongside the root's `^`-resolved one, and two React instances break\n // hooks at runtime (\"Invalid hook call\", useRef of null). The installed version\n // only has to resolve for the legacy webpack path, so a range is sufficient.\n const sharedRuntimeDeps = readBrowserEsmPolicy(config.pieElementsNg).sharedDependencyVersions;\n if (sharedRuntimeDeps && Object.keys(sharedRuntimeDeps).length > 0) {\n const rangedRuntimeDeps = Object.fromEntries(\n Object.entries(sharedRuntimeDeps).map(([name, version]) => [name, `^${version}`])\n );\n pkg.dependencies = {\n ...((pkg.dependencies as Record<string, string> | undefined) ?? {}),\n ...rangedRuntimeDeps,\n };\n }\n\n // Detect available entry points\n const entryPoints = detectEntryPoints(elementDir);\n const wroteRuntimeSupport =\n includeBrowserExports && !entryPoints.hasRuntimeSupport\n ? await ensureBrowserRuntimeSupportSource(elementName, elementDir, entryPoints)\n : false;\n if (includeBrowserExports) {\n entryPoints.hasRuntimeSupport = true;\n }\n\n // Generate dist-only exports based on entry points. Do not preserve\n // source-backed `development` conditions; PIE-605 makes raw source paths a\n // private implementation detail and keeps public package surfaces dist-only.\n const nextPieMetadata = pieMetadata ? { ...pieMetadata } : {};\n if (entryPoints.hasController) {\n nextPieMetadata.controller = `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}/controller`;\n } else {\n delete nextPieMetadata.controller;\n }\n const legacyConfigureEntry = getLegacyConfigureEntry(entryPoints);\n if (legacyConfigureEntry) {\n nextPieMetadata.configure = `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}/configure`;\n } else {\n delete nextPieMetadata.configure;\n }\n if (includeBrowserExports) {\n const browserEsmPolicy = readBrowserEsmPolicy(config.pieElementsNg);\n if (browserEsmPolicy.sharedDependencyVersions) {\n nextPieMetadata.browserSharedDependencies = browserEsmPolicy.sharedDependencyVersions;\n }\n } else {\n delete nextPieMetadata.browserSharedDependencies;\n }\n\n if (Object.keys(nextPieMetadata).length > 0) {\n pkg.pie = nextPieMetadata;\n } else {\n delete pkg.pie;\n }\n\n const hasBrowserBuild = includeBrowserExports;\n pkg.exports = generateExportsObject(entryPoints, { includeBrowserExports: hasBrowserBuild });\n\n // Warn when metadata/structure disagree for core capabilities\n const metadataCapabilities = Array.isArray(pieMetadata?.capabilities)\n ? new Set(pieMetadata.capabilities)\n : null;\n\n if (!entryPoints.hasDelivery || !entryPoints.hasController) {\n console.warn(\n `[upstream:update] ${elementName} missing required entry points:` +\n `${entryPoints.hasDelivery ? '' : ' delivery'}` +\n `${entryPoints.hasController ? '' : ' controller'}`\n );\n }\n\n if (metadataCapabilities) {\n if (metadataCapabilities.has('author') && !entryPoints.hasAuthor) {\n console.warn(\n `[upstream:update] ${elementName} metadata includes author but no src/author entry`\n );\n }\n if (metadataCapabilities.has('print') && !entryPoints.hasPrint) {\n console.warn(\n `[upstream:update] ${elementName} metadata includes print but no src/print entry`\n );\n }\n } else {\n if (entryPoints.hasAuthor) {\n console.warn(\n `[upstream:update] ${elementName} has src/author but no pie.capabilities metadata`\n );\n }\n if (entryPoints.hasPrint) {\n console.warn(\n `[upstream:update] ${elementName} has src/print but no pie.capabilities metadata`\n );\n }\n }\n\n // Set core package.json fields\n pkg.name = `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}`;\n pkg.version = resolveSyncedVersion(upstreamPkg, pkg);\n pkg.type = PACKAGE_DEFAULTS.TYPE;\n pkg.main = './dist/index.js';\n pkg.types = './dist/index.d.ts';\n\n // Ensure publish surface is dist-only. Source remains available in the repo,\n // but must not be published as a public package API. Controller-bearing\n // elements additionally publish the root shim required by legacy builders.\n const files = Array.isArray(pkg.files) ? (pkg.files as unknown[]) : [];\n const normalizedFiles = new Set<string>(files.filter((v): v is string => typeof v === 'string'));\n normalizedFiles.add('dist');\n normalizedFiles.delete('src');\n if (entryPoints.hasController) {\n normalizedFiles.add('controller.js');\n } else {\n normalizedFiles.delete('controller.js');\n }\n if (legacyConfigureEntry) {\n normalizedFiles.add('configure.js');\n } else {\n normalizedFiles.delete('configure.js');\n }\n if (entryPoints.hasPrint) {\n normalizedFiles.add('print.js');\n } else {\n normalizedFiles.delete('print.js');\n }\n pkg.files = Array.from(normalizedFiles).sort();\n\n // Set sideEffects\n if (typeof pkg.sideEffects === 'undefined') {\n pkg.sideEffects = PACKAGE_DEFAULTS.SIDE_EFFECTS;\n }\n\n // Ensure devDependencies\n ensureBuildToolDependencies(pkg);\n\n // Ensure build scripts\n if (!pkg.scripts || typeof pkg.scripts !== 'object') {\n pkg.scripts = {};\n }\n\n const scripts = pkg.scripts as Record<string, string>;\n const hasIifeEntry =\n existsSync(join(elementDir, 'src/index.iife.ts')) ||\n existsSync(join(elementDir, 'vite.config.iife.ts'));\n\n // A print entry point means this package also needs the legacy print lane, so\n // module/print.js is emitted for the current @pie-framework/pie-print loader.\n scripts.build = composeElementBuildScript({\n browser: hasBrowserBuild,\n legacyPrint: entryPoints.hasPrint,\n iife: hasIifeEntry,\n });\n scripts.dev = SCRIPTS.DEV;\n scripts.demo = SCRIPTS.DEMO;\n scripts.test = SCRIPTS.TEST;\n\n const controllerShimPath = join(elementDir, 'controller.js');\n const controllerShimContent = \"export * from './dist/controller/index.js';\\n\";\n const hasControllerShim = existsSync(controllerShimPath);\n const currentControllerShim = hasControllerShim\n ? await readFile(controllerShimPath, 'utf-8').catch(() => null)\n : null;\n const shouldWriteControllerShim =\n entryPoints.hasController && currentControllerShim !== controllerShimContent;\n const shouldRemoveControllerShim = !entryPoints.hasController && hasControllerShim;\n const configureShimPath = join(elementDir, 'configure.js');\n const configureShimContent = legacyConfigureEntry\n ? `export { default } from './dist/${legacyConfigureEntry}/index.js';\\nexport * from './dist/${legacyConfigureEntry}/index.js';\\n`\n : null;\n const hasConfigureShim = existsSync(configureShimPath);\n const currentConfigureShim = hasConfigureShim\n ? await readFile(configureShimPath, 'utf-8').catch(() => null)\n : null;\n const shouldWriteConfigureShim =\n configureShimContent !== null && currentConfigureShim !== configureShimContent;\n const shouldRemoveConfigureShim = configureShimContent === null && hasConfigureShim;\n // The IIFE bundlers alias `@pie-element/<element>` to a directory, so a `/print`\n // request resolves as a literal path and never consults `exports`. The root shim is\n // what makes that request land on the built print entry, the same way controller.js\n // and configure.js do for their views.\n const printShimPath = join(elementDir, 'print.js');\n const printShimContent = entryPoints.hasPrint\n ? \"export { default } from './dist/print/index.js';\\nexport * from './dist/print/index.js';\\n\"\n : null;\n const hasPrintShim = existsSync(printShimPath);\n const currentPrintShim = hasPrintShim\n ? await readFile(printShimPath, 'utf-8').catch(() => null)\n : null;\n const shouldWritePrintShim = printShimContent !== null && currentPrintShim !== printShimContent;\n const shouldRemovePrintShim = printShimContent === null && hasPrintShim;\n\n // Check if content changed\n const nextContent = `${JSON.stringify(pkg, null, 2)}\\n`;\n const currentContent = existsSync(pkgPath)\n ? await readFile(pkgPath, 'utf-8').catch(() => null)\n : null;\n\n if (\n currentContent === nextContent &&\n !wroteRuntimeSupport &&\n !shouldWriteControllerShim &&\n !shouldRemoveControllerShim &&\n !shouldWriteConfigureShim &&\n !shouldRemoveConfigureShim &&\n !shouldWritePrintShim &&\n !shouldRemovePrintShim\n ) {\n return false;\n }\n\n // Write updated package.json\n if (currentContent !== nextContent) {\n await writeFile(pkgPath, nextContent, 'utf-8');\n }\n if (shouldWriteControllerShim) {\n await writeFile(controllerShimPath, controllerShimContent, 'utf-8');\n } else if (shouldRemoveControllerShim) {\n await unlink(controllerShimPath).catch(() => {});\n }\n if (shouldWriteConfigureShim && configureShimContent !== null) {\n await writeFile(configureShimPath, configureShimContent, 'utf-8');\n } else if (shouldRemoveConfigureShim) {\n await unlink(configureShimPath).catch(() => {});\n }\n if (shouldWritePrintShim && printShimContent !== null) {\n await writeFile(printShimPath, printShimContent, 'utf-8');\n } else if (shouldRemovePrintShim) {\n await unlink(printShimPath).catch(() => {});\n }\n return true;\n}\n\n/**\n * Generate or update pie-lib package.json\n */\nexport async function ensurePieLibPackageJson(\n pkgName: string,\n pkgDir: string,\n config: SyncConfig\n): Promise<boolean> {\n if (!existsSync(pkgDir)) {\n return false;\n }\n\n const pkgPath = join(pkgDir, 'package.json');\n const upstreamPkgPath = join(config.pieLib, 'packages', pkgName, 'package.json');\n\n let pkg: PackageJson | null = null;\n if (existsSync(pkgPath)) {\n pkg = await loadPackageJson(pkgPath).catch(() => null);\n }\n\n const upstreamPkg = existsSync(upstreamPkgPath)\n ? await loadPackageJson(upstreamPkgPath).catch(() => null)\n : null;\n\n // Extract upstream dependencies\n const upstreamDeps = (upstreamPkg?.dependencies as Record<string, string> | undefined) ?? {};\n let expectedDeps: Record<string, string> = {};\n\n for (const [name, version] of Object.entries(upstreamDeps)) {\n if (UPSTREAM_DEPENDENCIES_TO_DROP.has(name)) {\n continue;\n }\n if (name.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n expectedDeps[name] = WORKSPACE.VERSION;\n } else {\n expectedDeps[name] = version;\n }\n }\n\n const importedPackages = await extractImportsFromSources(pkgDir);\n for (const importedPkg of importedPackages) {\n if (importedPkg.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n expectedDeps[importedPkg] = WORKSPACE.VERSION;\n continue;\n }\n if (importedPkg.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX)) {\n expectedDeps[importedPkg] = WORKSPACE.VERSION;\n continue;\n }\n\n // Keep pie-lib package.json aligned with actual runtime imports from src/.\n // Upstream package.json can miss some third-party dependencies.\n if (!expectedDeps[importedPkg]) {\n const installedPkg = await findInstalledPackageJson(importedPkg, pkgDir);\n if (installedPkg?.version) {\n expectedDeps[importedPkg] = `^${installedPkg.version}`;\n } else {\n const inferredPeerVersion = await inferPeerVersionFromDeclaredDeps(\n importedPkg,\n expectedDeps,\n pkgDir\n );\n if (inferredPeerVersion) {\n expectedDeps[importedPkg] = inferredPeerVersion;\n }\n }\n }\n }\n\n await addTransitivePeerDependencies(expectedDeps, pkgDir);\n addKnownPeerFallbacks(expectedDeps);\n\n const dependencyAugmentations = getPieLibDependencyAugmentations(pkgName);\n for (const [depName, version] of Object.entries(dependencyAugmentations)) {\n if (!expectedDeps[depName]) {\n expectedDeps[depName] = version;\n }\n }\n\n const declaresReactRuntime =\n typeof expectedDeps.react === 'string' || typeof expectedDeps['react-dom'] === 'string';\n\n expectedDeps =\n (applyPackageJsonTransforms({ dependencies: expectedDeps } as PackageJson, {\n removeReactInputAutosize: shouldGenerateAutosizeInputComponent(pkgName),\n removeMathjs:\n shouldGenerateConfigUiFractionHelper(pkgName) && !importedPackages.has('mathjs'),\n }).dependencies as Record<string, string> | undefined) ?? {};\n\n // Last word on versions, so it beats both the upstream manifest and the installed-version\n // inference above. Without it a sync walks @tiptap/* back to upstream's 3.20.0.\n expectedDeps = applyPieLibDependencyVersionPins(expectedDeps);\n\n // Create minimal package.json if missing\n if (!pkg) {\n pkg = {\n name: `${WORKSPACE.PIE_LIB_PREFIX}${pkgName}`,\n private: true,\n version: resolveSyncedVersion(upstreamPkg, null),\n description:\n (upstreamPkg?.description as string | undefined) ??\n `React implementation of @pie-lib/${pkgName} synced from pie-lib`,\n dependencies: expectedDeps,\n };\n }\n\n // Update dependencies\n if (Object.keys(expectedDeps).length > 0) {\n pkg.dependencies = expectedDeps;\n }\n\n const dependencyOverride = getPieLibDependencyOverride(pkgName);\n if (dependencyOverride) {\n pkg.dependencies = dependencyOverride;\n }\n\n if (declaresReactRuntime) {\n pkg.peerDependencies = {\n ...((pkg.peerDependencies as Record<string, string> | undefined) ?? {}),\n react: REACT.LIBRARY_PEER_RANGE,\n 'react-dom': REACT.LIBRARY_PEER_RANGE,\n };\n }\n\n // Generate dist-only exports. Pie-lib packages expose only their compiled\n // top-level entry; raw source paths are intentionally not public.\n const exportsObj: Record<string, unknown> = {};\n\n exportsObj['.'] = {\n types: './dist/index.d.ts',\n default: './dist/index.js',\n };\n\n pkg.name = `${WORKSPACE.PIE_LIB_PREFIX}${pkgName}`;\n pkg.version = resolveSyncedVersion(upstreamPkg, pkg);\n pkg.type = PACKAGE_DEFAULTS.TYPE;\n pkg.main = './dist/index.js';\n pkg.types = './dist/index.d.ts';\n pkg.exports = exportsObj;\n\n // Ensure publish surface is dist-only. Source remains available in the repo,\n // but must not be published as a public package API.\n pkg.files = ['dist'];\n\n if (typeof pkg.sideEffects === 'undefined') {\n pkg.sideEffects = PACKAGE_DEFAULTS.SIDE_EFFECTS;\n }\n\n // Pie-lib packages use a vite.config.ts that imports @vitejs/plugin-react,\n // so their devDependencies must include the same build toolchain that\n // element packages do. Without this, a fresh `bun install` (no hoisting)\n // fails to resolve the plugin when turbo runs `vite build` per package.\n ensureBuildToolDependencies(pkg);\n\n // Ensure build scripts\n if (!pkg.scripts || typeof pkg.scripts !== 'object') {\n pkg.scripts = {};\n }\n\n const scripts = pkg.scripts as Record<string, string>;\n scripts.build = SCRIPTS.BUILD;\n scripts.dev = SCRIPTS.DEV;\n scripts.test = SCRIPTS.TEST;\n\n const nextContent = `${JSON.stringify(pkg, null, 2)}\\n`;\n const currentContent = existsSync(pkgPath)\n ? await readFile(pkgPath, 'utf-8').catch(() => null)\n : null;\n\n if (currentContent === nextContent) {\n return false;\n }\n\n await writeFile(pkgPath, nextContent, 'utf-8');\n return true;\n}\n"]}
1
+ {"version":3,"file":"sync-package-manager.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Centralized package.json management for upstream sync operations\n *\n * This module consolidates all package.json generation and management logic\n * to eliminate the massive duplication between controllers-strategy and react-strategy.\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { mkdir, readFile, unlink, writeFile } from 'node:fs/promises';\nimport { dirname, join, resolve } from 'node:path';\nimport { loadPackageJson, type PackageJson } from '../../utils/package-json.js';\nimport type { SyncConfig } from './sync-strategy.js';\nimport { browserEditorRuntimeDeclaration, reachesEditorEngine } from './editor-runtime.js';\nimport { existsAny } from './sync-filesystem.js';\nimport { applyPackageJsonTransforms } from './sync-transforms.js';\nimport {\n BUILD_TOOLS,\n PACKAGE_DEFAULTS,\n REACT,\n SCRIPTS,\n WORKSPACE,\n composeElementBuildScript,\n} from './sync-constants.js';\nimport {\n applyPieLibDependencyVersionPins,\n getPieLibDependencyAugmentations,\n getPieLibDependencyOverride,\n shouldGenerateConfigUiFractionHelper,\n shouldGenerateAutosizeInputComponent,\n} from './sync-presets.js';\n\ninterface EntryPointMap {\n hasIndex: boolean;\n hasDelivery: boolean;\n hasAuthor: boolean;\n hasController: boolean;\n hasConfigure: boolean;\n hasPrint: boolean;\n hasRuntimeSupport: boolean;\n hasTypes: boolean;\n}\n\ninterface BrowserEsmPolicy {\n sharedDependencyVersions?: Record<string, string>;\n}\n\ntype LegacyConfigureEntry = 'author' | 'configure';\n\nfunction getLegacyConfigureEntry(entryPoints: EntryPointMap): LegacyConfigureEntry | null {\n if (entryPoints.hasConfigure) {\n return 'configure';\n }\n if (entryPoints.hasAuthor) {\n return 'author';\n }\n return null;\n}\n\nfunction distEntryExport(entry: LegacyConfigureEntry): Record<string, string> {\n return {\n types: `./dist/${entry}/index.d.ts`,\n default: `./dist/${entry}/index.js`,\n };\n}\n\nfunction readBrowserEsmPolicy(rootDir: string): BrowserEsmPolicy {\n const policyPath = join(rootDir, 'tools/vite/browser-esm-policy.json');\n if (!existsSync(policyPath)) {\n return {};\n }\n try {\n return JSON.parse(readFileSync(policyPath, 'utf-8')) as BrowserEsmPolicy;\n } catch {\n return {};\n }\n}\n\n/**\n * Detect available entry points in an element package\n */\nexport function detectEntryPoints(elementDir: string): EntryPointMap {\n return {\n hasIndex: existsAny([\n join(elementDir, 'src/index.ts'),\n join(elementDir, 'src/index.tsx'),\n join(elementDir, 'src/index.js'),\n join(elementDir, 'src/index.jsx'),\n ]),\n hasDelivery: existsAny([\n join(elementDir, 'src/delivery/index.ts'),\n join(elementDir, 'src/delivery/index.tsx'),\n join(elementDir, 'src/delivery/index.js'),\n join(elementDir, 'src/delivery/index.jsx'),\n ]),\n hasAuthor: existsAny([\n join(elementDir, 'src/author/index.ts'),\n join(elementDir, 'src/author/index.tsx'),\n join(elementDir, 'src/author/index.js'),\n join(elementDir, 'src/author/index.jsx'),\n ]),\n hasController: existsAny([\n join(elementDir, 'src/controller/index.ts'),\n join(elementDir, 'src/controller/index.tsx'),\n join(elementDir, 'src/controller/index.js'),\n join(elementDir, 'src/controller/index.jsx'),\n ]),\n hasConfigure: existsAny([\n join(elementDir, 'src/configure/index.ts'),\n join(elementDir, 'src/configure/index.tsx'),\n join(elementDir, 'src/configure/index.js'),\n join(elementDir, 'src/configure/index.jsx'),\n ]),\n hasPrint: existsAny([\n join(elementDir, 'src/print/index.ts'),\n join(elementDir, 'src/print/index.tsx'),\n join(elementDir, 'src/print/index.js'),\n join(elementDir, 'src/print/index.jsx'),\n ]),\n hasRuntimeSupport: existsAny([\n join(elementDir, 'src/runtime-support.ts'),\n join(elementDir, 'src/runtime-support.tsx'),\n join(elementDir, 'src/runtime-support.js'),\n join(elementDir, 'src/runtime-support.jsx'),\n ]),\n hasTypes: existsAny([\n join(elementDir, 'src/types/index.ts'),\n join(elementDir, 'src/types/index.tsx'),\n join(elementDir, 'src/types/index.js'),\n join(elementDir, 'src/types/index.jsx'),\n ]),\n };\n}\n\n/**\n * Generate exports object based on available entry points\n */\nexport function generateExportsObject(\n entryPoints: EntryPointMap,\n options: { includeBrowserExports?: boolean } = {}\n): Record<string, unknown> {\n const includeBrowserExports = options.includeBrowserExports ?? false;\n const exports: Record<string, unknown> = {\n '.': {\n types: './dist/index.d.ts',\n default: './dist/index.js',\n },\n };\n\n if (entryPoints.hasDelivery) {\n exports['./delivery'] = {\n types: './dist/delivery/index.d.ts',\n default: './dist/delivery/index.js',\n };\n if (includeBrowserExports) {\n exports['./browser/delivery'] = {\n default: './dist/browser/delivery/index.js',\n };\n }\n }\n\n if (entryPoints.hasAuthor) {\n exports['./author'] = {\n types: './dist/author/index.d.ts',\n default: './dist/author/index.js',\n };\n if (includeBrowserExports) {\n exports['./browser/author'] = {\n default: './dist/browser/author/index.js',\n };\n }\n }\n\n const legacyConfigureEntry = getLegacyConfigureEntry(entryPoints);\n if (legacyConfigureEntry) {\n exports['./configure'] = distEntryExport(legacyConfigureEntry);\n }\n\n if (entryPoints.hasController) {\n exports['./controller'] = {\n types: './dist/controller/index.d.ts',\n default: './dist/controller/index.js',\n };\n exports['./controller.js'] = {\n types: './dist/controller/index.d.ts',\n default: './dist/controller/index.js',\n };\n if (includeBrowserExports) {\n exports['./browser/controller'] = {\n default: './dist/browser/controller/index.js',\n };\n }\n }\n\n if (entryPoints.hasPrint) {\n exports['./print'] = {\n types: './dist/print/index.d.ts',\n default: './dist/print/index.js',\n };\n exports['./print.js'] = {\n types: './dist/print/index.d.ts',\n default: './dist/print/index.js',\n };\n if (includeBrowserExports) {\n exports['./browser/print'] = {\n default: './dist/browser/print/index.js',\n };\n }\n }\n\n if (entryPoints.hasTypes) {\n exports['./types'] = {\n types: './dist/types/index.d.ts',\n default: './dist/types/index.js',\n };\n }\n\n if (entryPoints.hasRuntimeSupport) {\n exports['./runtime-support'] = {\n types: './dist/runtime-support.d.ts',\n default: './dist/runtime-support.js',\n };\n }\n\n exports['./package.json'] = './package.json';\n\n return exports;\n}\n\nfunction generateRuntimeSupportSource(elementName: string, entryPoints: EntryPointMap): string {\n const packageName = `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}`;\n return `export const runtimeSupport = {\n schemaVersion: 1,\n packageName: '${packageName}',\n supports: {\n esm: {\n delivery: ${entryPoints.hasDelivery},\n author: ${entryPoints.hasAuthor},\n print: ${entryPoints.hasPrint},\n },\n },\n};\n\nexport default runtimeSupport;\n`;\n}\n\nasync function ensureBrowserRuntimeSupportSource(\n elementName: string,\n elementDir: string,\n entryPoints: EntryPointMap\n): Promise<boolean> {\n const runtimeSupportPath = join(elementDir, 'src', 'runtime-support.ts');\n const nextContent = generateRuntimeSupportSource(elementName, entryPoints);\n const currentContent = existsSync(runtimeSupportPath)\n ? await readFile(runtimeSupportPath, 'utf-8').catch(() => null)\n : null;\n\n if (currentContent === nextContent) {\n return false;\n }\n\n await mkdir(dirname(runtimeSupportPath), { recursive: true });\n await writeFile(runtimeSupportPath, nextContent, 'utf-8');\n return true;\n}\n\n/**\n * Extract imports from source files to determine runtime dependencies\n */\nexport async function extractImportsFromSources(elementDir: string): Promise<Set<string>> {\n const imports = new Set<string>();\n const srcDir = join(elementDir, 'src');\n\n if (!existsSync(srcDir)) {\n return imports;\n }\n\n // Recursively find all .ts, .tsx, .js, .jsx files\n const { readdir: readdirRecursive } = await import('node:fs/promises');\n\n async function scanDirectory(dir: string): Promise<void> {\n try {\n const entries = await readdirRecursive(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n\n if (entry.isDirectory()) {\n await scanDirectory(fullPath);\n } else if (entry.isFile() && /\\.(ts|tsx|js|jsx)$/.test(entry.name)) {\n try {\n const content = await readFile(fullPath, 'utf-8');\n // Match import statements: import ... from 'package' or import('package')\n const importRegex = /import\\s+(?:[\\w{},\\s*]+\\s+from\\s+)?['\"]([^'\"]+)['\"]/g;\n const dynamicImportRegex = /import\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n\n let match: RegExpExecArray | null;\n\n match = importRegex.exec(content);\n while (match !== null) {\n const importPath = match[1];\n // Only track package imports (not relative imports)\n if (!importPath.startsWith('.') && !importPath.startsWith('/')) {\n const normalized = normalizePackageImport(importPath);\n if (normalized) imports.add(normalized);\n }\n match = importRegex.exec(content);\n }\n\n match = dynamicImportRegex.exec(content);\n while (match !== null) {\n const importPath = match[1];\n if (!importPath.startsWith('.') && !importPath.startsWith('/')) {\n const normalized = normalizePackageImport(importPath);\n if (normalized) imports.add(normalized);\n }\n match = dynamicImportRegex.exec(content);\n }\n } catch (err) {\n // Skip files that can't be read\n }\n }\n }\n } catch (err) {\n // Skip directories that can't be read\n }\n }\n\n await scanDirectory(srcDir);\n return imports;\n}\n\nfunction normalizePackageImport(specifier: string): string | null {\n if (!specifier || specifier.startsWith('.') || specifier.startsWith('/')) {\n return null;\n }\n if (specifier.startsWith('@')) {\n const parts = specifier.split('/');\n return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : null;\n }\n return specifier.split('/')[0] || null;\n}\n\n// Upstream manifests declare these as runtime dependencies, and no synced module imports them:\n// @emotion/style is a deprecated 0.8 package, and @pie-lib/test-utils is a test helper whose\n// testing-library dependencies would install into every host.\nconst UPSTREAM_DEPENDENCIES_TO_DROP = new Set(['@emotion/style', '@pie-lib/test-utils']);\n\nasync function findInstalledPackageJson(\n packageName: string,\n fromDir: string\n): Promise<PackageJson | null> {\n try {\n const { createRequire } = await import('node:module');\n const req = createRequire(resolve(fromDir, 'package.json'));\n const resolvedEntry = req.resolve(packageName);\n\n let currentDir = dirname(resolvedEntry);\n while (true) {\n const candidate = join(currentDir, 'package.json');\n if (existsSync(candidate)) {\n const pkg = await loadPackageJson(candidate).catch(() => null);\n if (pkg && pkg.name === packageName) {\n return pkg;\n }\n }\n\n const parent = dirname(currentDir);\n if (parent === currentDir) {\n break;\n }\n currentDir = parent;\n }\n } catch {\n // Package not resolvable from this location.\n }\n return null;\n}\n\nasync function addTransitivePeerDependencies(\n deps: Record<string, string>,\n fromDir: string,\n declaredPeerDeps: Set<string> = new Set()\n): Promise<void> {\n const depNames = Object.keys(deps);\n\n for (const depName of depNames) {\n if (\n depName.startsWith(WORKSPACE.PIE_LIB_PREFIX) ||\n depName.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX) ||\n depName.startsWith(WORKSPACE.PIE_FRAMEWORK_PREFIX)\n ) {\n continue;\n }\n\n const installedPkg = await findInstalledPackageJson(depName, fromDir);\n const peerDeps = (installedPkg?.peerDependencies as Record<string, string> | undefined) ?? {};\n const optionalPeers = new Set(\n Object.entries(\n (installedPkg?.peerDependenciesMeta as Record<string, { optional?: boolean }>) ?? {}\n )\n .filter(([, meta]) => meta?.optional)\n .map(([peerName]) => peerName)\n );\n\n for (const [peerName, peerVersion] of Object.entries(peerDeps)) {\n if (deps[peerName] || declaredPeerDeps.has(peerName) || optionalPeers.has(peerName)) {\n continue;\n }\n\n if (\n peerName.startsWith(WORKSPACE.PIE_LIB_PREFIX) ||\n peerName.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX) ||\n peerName.startsWith(WORKSPACE.PIE_FRAMEWORK_PREFIX)\n ) {\n deps[peerName] = WORKSPACE.VERSION;\n } else {\n deps[peerName] = peerVersion;\n }\n }\n }\n}\n\nasync function inferPeerVersionFromDeclaredDeps(\n targetDep: string,\n deps: Record<string, string>,\n fromDir: string\n): Promise<string | null> {\n for (const depName of Object.keys(deps)) {\n if (\n depName.startsWith(WORKSPACE.PIE_LIB_PREFIX) ||\n depName.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX) ||\n depName.startsWith(WORKSPACE.PIE_FRAMEWORK_PREFIX)\n ) {\n continue;\n }\n\n const installedPkg = await findInstalledPackageJson(depName, fromDir);\n const peerDeps = (installedPkg?.peerDependencies as Record<string, string> | undefined) ?? {};\n if (peerDeps[targetDep]) {\n return peerDeps[targetDep];\n }\n }\n\n return null;\n}\n\nfunction addKnownPeerFallbacks(deps: Record<string, string>): void {\n // Some widely used packages rely on peers that upstream metadata can omit\n // or that may not be inferable from local resolution during sync.\n if ((deps.recharts || deps['styled-components']) && !deps['react-is']) {\n deps['react-is'] = '^18.3.1';\n }\n\n if (deps['@tiptap/extension-character-count'] && !deps['@tiptap/extensions']) {\n deps['@tiptap/extensions'] = '^3.20.0';\n }\n\n if (deps['@tiptap/extension-list-item'] && !deps['@tiptap/extension-list']) {\n const tiptapVersion = deps['@tiptap/extension-list-item'];\n deps['@tiptap/extension-list'] = tiptapVersion;\n }\n\n if (deps['@testing-library/user-event'] && !deps['@testing-library/dom']) {\n deps['@testing-library/dom'] = '^10.4.1';\n }\n\n if (deps['@visx/curve'] && !deps['d3-shape']) {\n deps['d3-shape'] = '^3.2.0';\n }\n}\n\n/**\n * Extract and normalize dependencies from upstream package.json\n */\nexport function extractUpstreamDependencies(\n upstreamPkg: PackageJson | null\n): Record<string, string> {\n if (!upstreamPkg) return {};\n\n const upstreamDeps = (upstreamPkg.dependencies as Record<string, string> | undefined) ?? {};\n let expectedDeps: Record<string, string> = {};\n\n for (const [name, version] of Object.entries(upstreamDeps)) {\n if (UPSTREAM_DEPENDENCIES_TO_DROP.has(name)) {\n continue;\n }\n if (name.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n expectedDeps[name] = WORKSPACE.VERSION;\n } else if (name !== 'react' && name !== 'react-dom') {\n expectedDeps[name] = version;\n }\n }\n\n return expectedDeps;\n}\n\nfunction resolveSyncedVersion(\n upstreamPkg: PackageJson | null,\n existingPkg: PackageJson | null\n): string {\n const existingVersion = typeof existingPkg?.version === 'string' ? existingPkg.version : null;\n if (existingVersion) {\n return existingVersion;\n }\n const upstreamVersion = typeof upstreamPkg?.version === 'string' ? upstreamPkg.version : null;\n return upstreamVersion || '0.1.0';\n}\n\n/**\n * Ensure devDependencies include all required build tools.\n *\n * The pinned versions in BUILD_TOOLS / REACT are the source of truth for the\n * monorepo's toolchain, so we overwrite any existing entries instead of only\n * filling in missing ones. This prevents an upstream package.json from\n * silently downgrading vite / @vitejs/plugin-react / typescript across the\n * pie-lib packages during `upstream:update`.\n */\nexport function ensureBuildToolDependencies(pkg: PackageJson): void {\n if (!pkg.devDependencies || typeof pkg.devDependencies !== 'object') {\n pkg.devDependencies = {};\n }\n\n const devDeps = pkg.devDependencies as Record<string, string>;\n\n devDeps.vite = BUILD_TOOLS.VITE;\n devDeps.typescript = BUILD_TOOLS.TYPESCRIPT;\n devDeps['@vitejs/plugin-react'] = BUILD_TOOLS.VITE_REACT_PLUGIN;\n devDeps['@types/react'] = REACT.TYPES_VERSION;\n devDeps['@types/react-dom'] = REACT.TYPES_VERSION;\n}\n\n/**\n * Check if a @pie-framework or @pie-element/shared- package exists in the workspace\n *\n * Supports both legacy @pie-framework naming and new @pie-element/shared- naming.\n */\nfunction isPieFrameworkWorkspacePackage(packageName: string, config: SyncConfig): boolean {\n let pkgName: string;\n\n if (packageName.startsWith(WORKSPACE.PIE_FRAMEWORK_PREFIX)) {\n // Legacy @pie-framework/* packages\n pkgName = packageName.replace(WORKSPACE.PIE_FRAMEWORK_PREFIX, '');\n } else if (packageName.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX + 'shared-')) {\n // New @pie-element/shared-* packages\n pkgName = packageName.replace(WORKSPACE.PIE_ELEMENT_PREFIX + 'shared-', '');\n } else {\n return false;\n }\n\n const sharedPackagePath = join(config.pieElementsNg, 'packages/shared', pkgName, 'package.json');\n return existsSync(sharedPackagePath);\n}\n\n/**\n * Generate or update element package.json\n *\n * This function consolidates the ~400 lines of duplicated package.json management\n * logic from controllers-strategy and react-strategy into a single, maintainable function.\n */\nexport async function ensureElementPackageJson(\n elementName: string,\n elementDir: string,\n config: SyncConfig,\n options: { includeBrowserExports?: boolean } = {}\n): Promise<boolean> {\n if (!existsSync(elementDir)) {\n return false;\n }\n\n const pkgPath = join(elementDir, 'package.json');\n const upstreamPkgPath = join(config.pieElements, 'packages', elementName, 'package.json');\n const includeBrowserExports = options.includeBrowserExports ?? false;\n\n // Load existing package.json\n let pkg: PackageJson | null = null;\n if (existsSync(pkgPath)) {\n pkg = await loadPackageJson(pkgPath).catch(() => null);\n }\n\n // Load upstream package.json for dependency info\n const upstreamPkg = existsSync(upstreamPkgPath)\n ? await loadPackageJson(upstreamPkgPath).catch(() => null)\n : null;\n\n // Extract and normalize upstream dependencies\n const expectedDeps = extractUpstreamDependencies(upstreamPkg);\n const declaredPeerDeps = new Set([\n ...Object.keys((pkg?.peerDependencies as Record<string, string> | undefined) ?? {}),\n 'react',\n 'react-dom',\n ]);\n\n // Scan source files for actual imports to catch dependencies from skipped directories\n const importedPackages = await extractImportsFromSources(elementDir);\n\n // Add workspace dependencies found in imports\n const currentPackageName = `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}`;\n for (const imported of importedPackages) {\n // Skip self-dependencies (package importing from itself)\n if (imported === currentPackageName) {\n continue;\n }\n if (imported === 'react' || imported === 'react-dom') {\n continue;\n }\n\n if (imported.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n expectedDeps[imported] = WORKSPACE.VERSION;\n } else if (imported.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX)) {\n expectedDeps[imported] = WORKSPACE.VERSION;\n } else if (imported.startsWith(WORKSPACE.PIE_FRAMEWORK_PREFIX)) {\n // Only add as workspace dependency if it actually exists in packages/shared/\n if (isPieFrameworkWorkspacePackage(imported, config)) {\n expectedDeps[imported] = WORKSPACE.VERSION;\n } else {\n // External @pie-framework package - add with latest version if not already in deps\n if (!expectedDeps[imported]) {\n expectedDeps[imported] = '^1.0.0'; // Use latest 1.x version as default\n }\n }\n } else if (!expectedDeps[imported]) {\n // Keep element package.json aligned with actual runtime imports from src/.\n // Upstream package.json can miss third-party deps after source transforms.\n const installedPkg = await findInstalledPackageJson(imported, elementDir);\n if (installedPkg?.version) {\n expectedDeps[imported] = `^${installedPkg.version}`;\n } else {\n const inferredPeerVersion = await inferPeerVersionFromDeclaredDeps(\n imported,\n expectedDeps,\n elementDir\n );\n if (inferredPeerVersion) {\n expectedDeps[imported] = inferredPeerVersion;\n }\n }\n }\n }\n await addTransitivePeerDependencies(expectedDeps, elementDir, declaredPeerDeps);\n addKnownPeerFallbacks(expectedDeps);\n\n // Create minimal package.json if missing\n if (!pkg) {\n pkg = {\n name: `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}`,\n private: true,\n version: resolveSyncedVersion(upstreamPkg, null),\n description:\n (upstreamPkg?.description as string | undefined) ??\n `React implementation of ${elementName} element synced from pie-elements`,\n dependencies: expectedDeps,\n peerDependencies: {\n react: REACT.ELEMENT_PEER_RANGE,\n 'react-dom': REACT.ELEMENT_PEER_RANGE,\n },\n };\n }\n\n // Update dependencies to match upstream\n if (Object.keys(expectedDeps).length > 0) {\n pkg.dependencies = expectedDeps;\n }\n pkg.peerDependencies = {\n ...((pkg.peerDependencies as Record<string, string> | undefined) ?? {}),\n react: REACT.ELEMENT_PEER_RANGE,\n 'react-dom': REACT.ELEMENT_PEER_RANGE,\n };\n\n // Preserve pie metadata (if present upstream or locally)\n const pieMetadata = ((upstreamPkg as PackageJson | null | undefined)?.pie ??\n (pkg as PackageJson | null | undefined)?.pie ??\n undefined) as\n | {\n capabilities?: string[];\n controller?: string;\n configure?: string;\n browserSharedDependencies?: Record<string, string>;\n browserEditorRuntime?: unknown;\n }\n | undefined;\n\n // Apply all standard transformations\n pkg = applyPackageJsonTransforms(pkg);\n\n // React must also be a real dependency, not only a peer. Legacy webpack\n // bundlers (builder.pie-api.com) install `dependencies` and never install\n // peers, so peer-only React leaves node_modules/react absent in the build\n // snapshot and every @mui / @emotion / @dnd-kit peer fails with\n // \"Module not found: Can't resolve 'react'\".\n //\n // This must run AFTER applyPackageJsonTransforms: transformPackageJsonBrowserEsmDependencies\n // unconditionally deletes react/react-dom from dependencies to drop whatever\n // arbitrary range upstream declared. We re-add them here as the final word,\n // pinned to the policy version.\n //\n // Install metadata only. The browser runtime singleton contract stays governed\n // by pie.browserSharedDependencies plus the player import map, and isExternal()\n // in sync-externals.ts keeps React external in every bundle regardless of what\n // is declared here, so bundle output is unaffected.\n //\n // Versions come from tools/vite/browser-esm-policy.json - the same source as\n // pie.browserSharedDependencies below.\n //\n // Declared as a caret range, NOT an exact pin. An exact pin resolves to its own\n // copy alongside the root's `^`-resolved one, and two React instances break\n // hooks at runtime (\"Invalid hook call\", useRef of null). The installed version\n // only has to resolve for the legacy webpack path, so a range is sufficient.\n const sharedRuntimeDeps = readBrowserEsmPolicy(config.pieElementsNg).sharedDependencyVersions;\n if (sharedRuntimeDeps && Object.keys(sharedRuntimeDeps).length > 0) {\n const rangedRuntimeDeps = Object.fromEntries(\n Object.entries(sharedRuntimeDeps).map(([name, version]) => [name, `^${version}`])\n );\n pkg.dependencies = {\n ...((pkg.dependencies as Record<string, string> | undefined) ?? {}),\n ...rangedRuntimeDeps,\n };\n }\n\n // Detect available entry points\n const entryPoints = detectEntryPoints(elementDir);\n const wroteRuntimeSupport =\n includeBrowserExports && !entryPoints.hasRuntimeSupport\n ? await ensureBrowserRuntimeSupportSource(elementName, elementDir, entryPoints)\n : false;\n if (includeBrowserExports) {\n entryPoints.hasRuntimeSupport = true;\n }\n\n // Generate dist-only exports based on entry points. Do not preserve\n // source-backed `development` conditions; PIE-605 makes raw source paths a\n // private implementation detail and keeps public package surfaces dist-only.\n const nextPieMetadata = pieMetadata ? { ...pieMetadata } : {};\n if (entryPoints.hasController) {\n nextPieMetadata.controller = `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}/controller`;\n } else {\n delete nextPieMetadata.controller;\n }\n const legacyConfigureEntry = getLegacyConfigureEntry(entryPoints);\n if (legacyConfigureEntry) {\n nextPieMetadata.configure = `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}/configure`;\n } else {\n delete nextPieMetadata.configure;\n }\n if (includeBrowserExports) {\n const browserEsmPolicy = readBrowserEsmPolicy(config.pieElementsNg);\n if (browserEsmPolicy.sharedDependencyVersions) {\n nextPieMetadata.browserSharedDependencies = browserEsmPolicy.sharedDependencyVersions;\n }\n } else {\n delete nextPieMetadata.browserSharedDependencies;\n }\n // An element whose browser build bundles the editor engine also builds the editor-runtime\n // variant, which imports the engine from @pie-element/shared-editor-runtime.\n const browserEditorRuntime =\n includeBrowserExports &&\n reachesEditorEngine(\n config.pieElementsNg,\n (pkg.dependencies as Record<string, string> | undefined) ?? {}\n )\n ? browserEditorRuntimeDeclaration(\n config.pieElementsNg,\n new Set(\n [\n entryPoints.hasDelivery && 'delivery',\n entryPoints.hasAuthor && 'author',\n entryPoints.hasPrint && 'print',\n entryPoints.hasController && 'controller',\n ].filter((view): view is string => typeof view === 'string')\n )\n )\n : null;\n if (browserEditorRuntime) {\n nextPieMetadata.browserEditorRuntime = browserEditorRuntime;\n } else {\n delete nextPieMetadata.browserEditorRuntime;\n }\n\n if (Object.keys(nextPieMetadata).length > 0) {\n pkg.pie = nextPieMetadata;\n } else {\n delete pkg.pie;\n }\n\n const hasBrowserBuild = includeBrowserExports;\n pkg.exports = generateExportsObject(entryPoints, { includeBrowserExports: hasBrowserBuild });\n\n // Warn when metadata/structure disagree for core capabilities\n const metadataCapabilities = Array.isArray(pieMetadata?.capabilities)\n ? new Set(pieMetadata.capabilities)\n : null;\n\n if (!entryPoints.hasDelivery || !entryPoints.hasController) {\n console.warn(\n `[upstream:update] ${elementName} missing required entry points:` +\n `${entryPoints.hasDelivery ? '' : ' delivery'}` +\n `${entryPoints.hasController ? '' : ' controller'}`\n );\n }\n\n if (metadataCapabilities) {\n if (metadataCapabilities.has('author') && !entryPoints.hasAuthor) {\n console.warn(\n `[upstream:update] ${elementName} metadata includes author but no src/author entry`\n );\n }\n if (metadataCapabilities.has('print') && !entryPoints.hasPrint) {\n console.warn(\n `[upstream:update] ${elementName} metadata includes print but no src/print entry`\n );\n }\n } else {\n if (entryPoints.hasAuthor) {\n console.warn(\n `[upstream:update] ${elementName} has src/author but no pie.capabilities metadata`\n );\n }\n if (entryPoints.hasPrint) {\n console.warn(\n `[upstream:update] ${elementName} has src/print but no pie.capabilities metadata`\n );\n }\n }\n\n // Set core package.json fields\n pkg.name = `${WORKSPACE.PIE_ELEMENT_PREFIX}${elementName}`;\n pkg.version = resolveSyncedVersion(upstreamPkg, pkg);\n pkg.type = PACKAGE_DEFAULTS.TYPE;\n pkg.main = './dist/index.js';\n pkg.types = './dist/index.d.ts';\n\n // Ensure publish surface is dist-only. Source remains available in the repo,\n // but must not be published as a public package API. Controller-bearing\n // elements additionally publish the root shim required by legacy builders.\n const files = Array.isArray(pkg.files) ? (pkg.files as unknown[]) : [];\n const normalizedFiles = new Set<string>(files.filter((v): v is string => typeof v === 'string'));\n normalizedFiles.add('dist');\n normalizedFiles.delete('src');\n if (entryPoints.hasController) {\n normalizedFiles.add('controller.js');\n } else {\n normalizedFiles.delete('controller.js');\n }\n if (legacyConfigureEntry) {\n normalizedFiles.add('configure.js');\n } else {\n normalizedFiles.delete('configure.js');\n }\n if (entryPoints.hasPrint) {\n normalizedFiles.add('print.js');\n } else {\n normalizedFiles.delete('print.js');\n }\n pkg.files = Array.from(normalizedFiles).sort();\n\n // Set sideEffects\n if (typeof pkg.sideEffects === 'undefined') {\n pkg.sideEffects = PACKAGE_DEFAULTS.SIDE_EFFECTS;\n }\n\n // Ensure devDependencies\n ensureBuildToolDependencies(pkg);\n\n // Ensure build scripts\n if (!pkg.scripts || typeof pkg.scripts !== 'object') {\n pkg.scripts = {};\n }\n\n const scripts = pkg.scripts as Record<string, string>;\n const hasIifeEntry =\n existsSync(join(elementDir, 'src/index.iife.ts')) ||\n existsSync(join(elementDir, 'vite.config.iife.ts'));\n\n // A print entry point means this package also needs the legacy print lane, so\n // module/print.js is emitted for the current @pie-framework/pie-print loader.\n scripts.build = composeElementBuildScript({\n browser: hasBrowserBuild,\n editorRuntime: browserEditorRuntime !== null,\n legacyPrint: entryPoints.hasPrint,\n iife: hasIifeEntry,\n });\n scripts.dev = SCRIPTS.DEV;\n scripts.demo = SCRIPTS.DEMO;\n scripts.test = SCRIPTS.TEST;\n\n const controllerShimPath = join(elementDir, 'controller.js');\n const controllerShimContent = \"export * from './dist/controller/index.js';\\n\";\n const hasControllerShim = existsSync(controllerShimPath);\n const currentControllerShim = hasControllerShim\n ? await readFile(controllerShimPath, 'utf-8').catch(() => null)\n : null;\n const shouldWriteControllerShim =\n entryPoints.hasController && currentControllerShim !== controllerShimContent;\n const shouldRemoveControllerShim = !entryPoints.hasController && hasControllerShim;\n const configureShimPath = join(elementDir, 'configure.js');\n const configureShimContent = legacyConfigureEntry\n ? `export { default } from './dist/${legacyConfigureEntry}/index.js';\\nexport * from './dist/${legacyConfigureEntry}/index.js';\\n`\n : null;\n const hasConfigureShim = existsSync(configureShimPath);\n const currentConfigureShim = hasConfigureShim\n ? await readFile(configureShimPath, 'utf-8').catch(() => null)\n : null;\n const shouldWriteConfigureShim =\n configureShimContent !== null && currentConfigureShim !== configureShimContent;\n const shouldRemoveConfigureShim = configureShimContent === null && hasConfigureShim;\n // The IIFE bundlers alias `@pie-element/<element>` to a directory, so a `/print`\n // request resolves as a literal path and never consults `exports`. The root shim is\n // what makes that request land on the built print entry, the same way controller.js\n // and configure.js do for their views.\n const printShimPath = join(elementDir, 'print.js');\n const printShimContent = entryPoints.hasPrint\n ? \"export { default } from './dist/print/index.js';\\nexport * from './dist/print/index.js';\\n\"\n : null;\n const hasPrintShim = existsSync(printShimPath);\n const currentPrintShim = hasPrintShim\n ? await readFile(printShimPath, 'utf-8').catch(() => null)\n : null;\n const shouldWritePrintShim = printShimContent !== null && currentPrintShim !== printShimContent;\n const shouldRemovePrintShim = printShimContent === null && hasPrintShim;\n\n // Check if content changed\n const nextContent = `${JSON.stringify(pkg, null, 2)}\\n`;\n const currentContent = existsSync(pkgPath)\n ? await readFile(pkgPath, 'utf-8').catch(() => null)\n : null;\n\n if (\n currentContent === nextContent &&\n !wroteRuntimeSupport &&\n !shouldWriteControllerShim &&\n !shouldRemoveControllerShim &&\n !shouldWriteConfigureShim &&\n !shouldRemoveConfigureShim &&\n !shouldWritePrintShim &&\n !shouldRemovePrintShim\n ) {\n return false;\n }\n\n // Write updated package.json\n if (currentContent !== nextContent) {\n await writeFile(pkgPath, nextContent, 'utf-8');\n }\n if (shouldWriteControllerShim) {\n await writeFile(controllerShimPath, controllerShimContent, 'utf-8');\n } else if (shouldRemoveControllerShim) {\n await unlink(controllerShimPath).catch(() => {});\n }\n if (shouldWriteConfigureShim && configureShimContent !== null) {\n await writeFile(configureShimPath, configureShimContent, 'utf-8');\n } else if (shouldRemoveConfigureShim) {\n await unlink(configureShimPath).catch(() => {});\n }\n if (shouldWritePrintShim && printShimContent !== null) {\n await writeFile(printShimPath, printShimContent, 'utf-8');\n } else if (shouldRemovePrintShim) {\n await unlink(printShimPath).catch(() => {});\n }\n return true;\n}\n\n/**\n * Generate or update pie-lib package.json\n */\nexport async function ensurePieLibPackageJson(\n pkgName: string,\n pkgDir: string,\n config: SyncConfig\n): Promise<boolean> {\n if (!existsSync(pkgDir)) {\n return false;\n }\n\n const pkgPath = join(pkgDir, 'package.json');\n const upstreamPkgPath = join(config.pieLib, 'packages', pkgName, 'package.json');\n\n let pkg: PackageJson | null = null;\n if (existsSync(pkgPath)) {\n pkg = await loadPackageJson(pkgPath).catch(() => null);\n }\n\n const upstreamPkg = existsSync(upstreamPkgPath)\n ? await loadPackageJson(upstreamPkgPath).catch(() => null)\n : null;\n\n // Extract upstream dependencies\n const upstreamDeps = (upstreamPkg?.dependencies as Record<string, string> | undefined) ?? {};\n let expectedDeps: Record<string, string> = {};\n\n for (const [name, version] of Object.entries(upstreamDeps)) {\n if (UPSTREAM_DEPENDENCIES_TO_DROP.has(name)) {\n continue;\n }\n if (name.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n expectedDeps[name] = WORKSPACE.VERSION;\n } else {\n expectedDeps[name] = version;\n }\n }\n\n const importedPackages = await extractImportsFromSources(pkgDir);\n for (const importedPkg of importedPackages) {\n if (importedPkg.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n expectedDeps[importedPkg] = WORKSPACE.VERSION;\n continue;\n }\n if (importedPkg.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX)) {\n expectedDeps[importedPkg] = WORKSPACE.VERSION;\n continue;\n }\n\n // Keep pie-lib package.json aligned with actual runtime imports from src/.\n // Upstream package.json can miss some third-party dependencies.\n if (!expectedDeps[importedPkg]) {\n const installedPkg = await findInstalledPackageJson(importedPkg, pkgDir);\n if (installedPkg?.version) {\n expectedDeps[importedPkg] = `^${installedPkg.version}`;\n } else {\n const inferredPeerVersion = await inferPeerVersionFromDeclaredDeps(\n importedPkg,\n expectedDeps,\n pkgDir\n );\n if (inferredPeerVersion) {\n expectedDeps[importedPkg] = inferredPeerVersion;\n }\n }\n }\n }\n\n await addTransitivePeerDependencies(expectedDeps, pkgDir);\n addKnownPeerFallbacks(expectedDeps);\n\n const dependencyAugmentations = getPieLibDependencyAugmentations(pkgName);\n for (const [depName, version] of Object.entries(dependencyAugmentations)) {\n if (!expectedDeps[depName]) {\n expectedDeps[depName] = version;\n }\n }\n\n const declaresReactRuntime =\n typeof expectedDeps.react === 'string' || typeof expectedDeps['react-dom'] === 'string';\n\n expectedDeps =\n (applyPackageJsonTransforms({ dependencies: expectedDeps } as PackageJson, {\n removeReactInputAutosize: shouldGenerateAutosizeInputComponent(pkgName),\n removeMathjs:\n shouldGenerateConfigUiFractionHelper(pkgName) && !importedPackages.has('mathjs'),\n }).dependencies as Record<string, string> | undefined) ?? {};\n\n // Last word on versions, so it beats both the upstream manifest and the installed-version\n // inference above. Without it a sync walks @tiptap/* back to upstream's 3.20.0.\n expectedDeps = applyPieLibDependencyVersionPins(expectedDeps);\n\n // Create minimal package.json if missing\n if (!pkg) {\n pkg = {\n name: `${WORKSPACE.PIE_LIB_PREFIX}${pkgName}`,\n private: true,\n version: resolveSyncedVersion(upstreamPkg, null),\n description:\n (upstreamPkg?.description as string | undefined) ??\n `React implementation of @pie-lib/${pkgName} synced from pie-lib`,\n dependencies: expectedDeps,\n };\n }\n\n // Update dependencies\n if (Object.keys(expectedDeps).length > 0) {\n pkg.dependencies = expectedDeps;\n }\n\n const dependencyOverride = getPieLibDependencyOverride(pkgName);\n if (dependencyOverride) {\n pkg.dependencies = dependencyOverride;\n }\n\n if (declaresReactRuntime) {\n pkg.peerDependencies = {\n ...((pkg.peerDependencies as Record<string, string> | undefined) ?? {}),\n react: REACT.LIBRARY_PEER_RANGE,\n 'react-dom': REACT.LIBRARY_PEER_RANGE,\n };\n }\n\n // Generate dist-only exports. Pie-lib packages expose only their compiled\n // top-level entry; raw source paths are intentionally not public.\n const exportsObj: Record<string, unknown> = {};\n\n exportsObj['.'] = {\n types: './dist/index.d.ts',\n default: './dist/index.js',\n };\n\n pkg.name = `${WORKSPACE.PIE_LIB_PREFIX}${pkgName}`;\n pkg.version = resolveSyncedVersion(upstreamPkg, pkg);\n pkg.type = PACKAGE_DEFAULTS.TYPE;\n pkg.main = './dist/index.js';\n pkg.types = './dist/index.d.ts';\n pkg.exports = exportsObj;\n\n // Ensure publish surface is dist-only. Source remains available in the repo,\n // but must not be published as a public package API.\n pkg.files = ['dist'];\n\n if (typeof pkg.sideEffects === 'undefined') {\n pkg.sideEffects = PACKAGE_DEFAULTS.SIDE_EFFECTS;\n }\n\n // Pie-lib packages use a vite.config.ts that imports @vitejs/plugin-react,\n // so their devDependencies must include the same build toolchain that\n // element packages do. Without this, a fresh `bun install` (no hoisting)\n // fails to resolve the plugin when turbo runs `vite build` per package.\n ensureBuildToolDependencies(pkg);\n\n // Ensure build scripts\n if (!pkg.scripts || typeof pkg.scripts !== 'object') {\n pkg.scripts = {};\n }\n\n const scripts = pkg.scripts as Record<string, string>;\n scripts.build = SCRIPTS.BUILD;\n scripts.dev = SCRIPTS.DEV;\n scripts.test = SCRIPTS.TEST;\n\n const nextContent = `${JSON.stringify(pkg, null, 2)}\\n`;\n const currentContent = existsSync(pkgPath)\n ? await readFile(pkgPath, 'utf-8').catch(() => null)\n : null;\n\n if (currentContent === nextContent) {\n return false;\n }\n\n await writeFile(pkgPath, nextContent, 'utf-8');\n return true;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/cli",
3
- "version": "0.1.2-next.6",
3
+ "version": "0.1.2-next.7",
4
4
  "description": "CLI tools for managing PIE Elements NG",
5
5
  "type": "module",
6
6
  "bin": {