@pie-element/cli 0.1.2-next.2 → 0.1.2-next.20261002100925
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.
- package/README.md +5 -5
- package/dist/commands/packages/create-react-elements.js +12 -31
- package/dist/commands/packages/create-react-elements.js.map +1 -1
- package/dist/commands/packages/init-synced-elements.js +3 -5
- package/dist/commands/packages/init-synced-elements.js.map +1 -1
- package/dist/commands/upstream/analyze-esm.js +1 -34
- package/dist/commands/upstream/analyze-esm.js.map +1 -1
- package/dist/commands/upstream/sync.js +10 -15
- package/dist/commands/upstream/sync.js.map +1 -1
- package/dist/lib/upstream/editor-runtime.d.ts +15 -0
- package/dist/lib/upstream/editor-runtime.js +55 -0
- package/dist/lib/upstream/editor-runtime.js.map +1 -0
- package/dist/lib/upstream/sync-compatibility.d.ts +0 -8
- package/dist/lib/upstream/sync-compatibility.js +0 -31
- package/dist/lib/upstream/sync-compatibility.js.map +1 -1
- package/dist/lib/upstream/sync-constants.d.ts +20 -12
- package/dist/lib/upstream/sync-constants.js +50 -15
- package/dist/lib/upstream/sync-constants.js.map +1 -1
- package/dist/lib/upstream/sync-demo-metadata.js +117 -109
- package/dist/lib/upstream/sync-demo-metadata.js.map +1 -1
- package/dist/lib/upstream/sync-imports.d.ts +14 -21
- package/dist/lib/upstream/sync-imports.js +106 -77
- package/dist/lib/upstream/sync-imports.js.map +1 -1
- package/dist/lib/upstream/sync-package-json.d.ts +0 -19
- package/dist/lib/upstream/sync-package-json.js +0 -58
- package/dist/lib/upstream/sync-package-json.js.map +1 -1
- package/dist/lib/upstream/sync-package-manager.d.ts +6 -0
- package/dist/lib/upstream/sync-package-manager.js +84 -31
- package/dist/lib/upstream/sync-package-manager.js.map +1 -1
- package/dist/lib/upstream/sync-presets.d.ts +2 -0
- package/dist/lib/upstream/sync-presets.js +34 -0
- package/dist/lib/upstream/sync-presets.js.map +1 -1
- package/dist/lib/upstream/sync-react-strategy.js +3 -3
- package/dist/lib/upstream/sync-react-strategy.js.map +1 -1
- package/dist/lib/upstream/sync-source-tree.js +3 -1
- package/dist/lib/upstream/sync-source-tree.js.map +1 -1
- package/dist/lib/upstream/sync-transforms.d.ts +2 -2
- package/dist/lib/upstream/sync-transforms.js +5 -3
- package/dist/lib/upstream/sync-transforms.js.map +1 -1
- package/dist/lib/upstream/sync-vite-config.d.ts +0 -4
- package/dist/lib/upstream/sync-vite-config.js +1 -12
- package/dist/lib/upstream/sync-vite-config.js.map +1 -1
- package/dist/lib/upstream/workspace-pie-lib.d.ts +2 -0
- package/dist/lib/upstream/workspace-pie-lib.js +29 -0
- package/dist/lib/upstream/workspace-pie-lib.js.map +1 -0
- package/dist/utils/compatibility.d.ts +0 -15
- package/dist/utils/compatibility.js +0 -34
- package/dist/utils/compatibility.js.map +1 -1
- package/dist/utils/conversion.d.ts +0 -5
- package/dist/utils/conversion.js +0 -21
- package/dist/utils/conversion.js.map +1 -1
- package/dist/utils/git.d.ts +0 -1
- package/dist/utils/git.js +0 -8
- package/dist/utils/git.js.map +1 -1
- package/package.json +2 -2
|
@@ -6,6 +6,17 @@ export declare const DEFAULT_PATHS: {
|
|
|
6
6
|
readonly PIE_LIB: "../pie-lib";
|
|
7
7
|
readonly PIE_ELEMENTS_NG: ".";
|
|
8
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* Module source substituted for `debug` in per-element IIFE builds. Carries the
|
|
11
|
+
* module-level `debug.log` and the instance methods element code calls.
|
|
12
|
+
*/
|
|
13
|
+
export declare const IIFE_DEBUG_SHIM_SOURCE = "const noop = () => {}; function debug() { const log = function () {}; log.enabled = false; log.log = noop; log.extend = () => log; log.destroy = noop; return log; } debug.log = noop; debug.enable = noop; debug.disable = () => ''; debug.enabled = () => false; export default debug;";
|
|
14
|
+
/**
|
|
15
|
+
* Module source substituted for `prop-types` in per-element IIFE builds. It mirrors
|
|
16
|
+
* prop-types' production shims: every validator is callable and carries `isRequired`,
|
|
17
|
+
* so `PropTypes.oneOf([...]).isRequired` evaluates at module load.
|
|
18
|
+
*/
|
|
19
|
+
export declare const IIFE_PROP_TYPES_SHIM_SOURCE = "const shim = function () { return null; }; shim.isRequired = shim; const getShim = () => shim; export const array = shim, bigint = shim, bool = shim, func = shim, number = shim, object = shim, string = shim, symbol = shim, any = shim, element = shim, elementType = shim, node = shim; export const arrayOf = getShim, instanceOf = getShim, objectOf = getShim, oneOf = getShim, oneOfType = getShim, shape = getShim, exact = getShim; export const checkPropTypes = () => {}; export const resetWarningCache = () => {}; const types = { array, bigint, bool, func, number, object, string, symbol, any, element, elementType, node, arrayOf, instanceOf, objectOf, oneOf, oneOfType, shape, exact, checkPropTypes, resetWarningCache }; types.PropTypes = types; export { types as PropTypes }; export default types;";
|
|
9
20
|
export declare const WORKSPACE: {
|
|
10
21
|
readonly VERSION: "workspace:*";
|
|
11
22
|
readonly PIE_LIB_PREFIX: "@pie-lib/";
|
|
@@ -13,36 +24,33 @@ export declare const WORKSPACE: {
|
|
|
13
24
|
readonly PIE_FRAMEWORK_PREFIX: "@pie-framework/";
|
|
14
25
|
};
|
|
15
26
|
export declare const EXCLUDED_UPSTREAM_ELEMENTS: readonly ["boilerplate-item-type"];
|
|
16
|
-
export declare const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES: readonly ["math-rendering"];
|
|
27
|
+
export declare const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES: readonly ["controller-utils", "math-rendering", "translator"];
|
|
28
|
+
export declare const RETIRED_UPSTREAM_SOURCE_FILES: ReadonlySet<string>;
|
|
17
29
|
export declare const BUILD_TOOLS: {
|
|
18
30
|
readonly VITE: "^8.0.1";
|
|
19
31
|
readonly TYPESCRIPT: "^5.9.3";
|
|
20
32
|
readonly VITE_REACT_PLUGIN: "^6.0.1";
|
|
21
33
|
};
|
|
22
34
|
export declare const REACT: {
|
|
23
|
-
readonly
|
|
35
|
+
readonly LIBRARY_PEER_RANGE: "^18.0.0 || ^19.0.0";
|
|
24
36
|
readonly TYPES_VERSION: "^18.2.0";
|
|
25
37
|
};
|
|
26
|
-
export declare const SKIP_PATTERNS: {
|
|
27
|
-
readonly TEST_DIRS: readonly ["__tests__", "__mocks__"];
|
|
28
|
-
readonly FILE_EXTENSIONS: readonly [".js", ".jsx", ".ts", ".tsx"];
|
|
29
|
-
};
|
|
30
|
-
export declare const FILE_TYPES: {
|
|
31
|
-
readonly JS: ".js";
|
|
32
|
-
readonly JSX: ".jsx";
|
|
33
|
-
readonly TS: ".ts";
|
|
34
|
-
readonly TSX: ".tsx";
|
|
35
|
-
};
|
|
36
38
|
export declare const PACKAGE_DEFAULTS: {
|
|
37
39
|
readonly TYPE: "module";
|
|
38
40
|
readonly SIDE_EFFECTS: false;
|
|
39
41
|
readonly FILES: readonly ["dist", "src"];
|
|
40
42
|
};
|
|
41
43
|
export declare const ELEMENT_BROWSER_VITE_CONFIG = "../../../tools/vite/element-browser.config.ts";
|
|
44
|
+
export declare const ELEMENT_BROWSER_EDITOR_RUNTIME_VITE_CONFIG = "../../../tools/vite/element-browser-editor-runtime.config.ts";
|
|
42
45
|
export declare const ELEMENT_LEGACY_PRINT_VITE_CONFIG = "../../../tools/vite/element-legacy-print.config.ts";
|
|
43
46
|
export type ElementBuildLanes = {
|
|
44
47
|
/** dist/browser/** - the browser ESM surface consumed by pie-players. */
|
|
45
48
|
browser?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* dist/browser/editor-runtime/** - the browser build with the editor engine imported from
|
|
51
|
+
* @pie-element/shared-editor-runtime, declared in pie.browserEditorRuntime. Needs `browser`.
|
|
52
|
+
*/
|
|
53
|
+
editorRuntime?: boolean;
|
|
46
54
|
/**
|
|
47
55
|
* module/print.js - a self-contained print bundle (React inlined, zero
|
|
48
56
|
* externals) for the unmodified @pie-framework/pie-print client loader, which
|
|
@@ -7,6 +7,17 @@ export const DEFAULT_PATHS = {
|
|
|
7
7
|
PIE_LIB: '../pie-lib',
|
|
8
8
|
PIE_ELEMENTS_NG: '.',
|
|
9
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* Module source substituted for `debug` in per-element IIFE builds. Carries the
|
|
12
|
+
* module-level `debug.log` and the instance methods element code calls.
|
|
13
|
+
*/
|
|
14
|
+
export const IIFE_DEBUG_SHIM_SOURCE = "const noop = () => {}; function debug() { const log = function () {}; log.enabled = false; log.log = noop; log.extend = () => log; log.destroy = noop; return log; } debug.log = noop; debug.enable = noop; debug.disable = () => ''; debug.enabled = () => false; export default debug;";
|
|
15
|
+
/**
|
|
16
|
+
* Module source substituted for `prop-types` in per-element IIFE builds. It mirrors
|
|
17
|
+
* prop-types' production shims: every validator is callable and carries `isRequired`,
|
|
18
|
+
* so `PropTypes.oneOf([...]).isRequired` evaluates at module load.
|
|
19
|
+
*/
|
|
20
|
+
export const IIFE_PROP_TYPES_SHIM_SOURCE = 'const shim = function () { return null; }; shim.isRequired = shim; const getShim = () => shim; export const array = shim, bigint = shim, bool = shim, func = shim, number = shim, object = shim, string = shim, symbol = shim, any = shim, element = shim, elementType = shim, node = shim; export const arrayOf = getShim, instanceOf = getShim, objectOf = getShim, oneOf = getShim, oneOfType = getShim, shape = getShim, exact = getShim; export const checkPropTypes = () => {}; export const resetWarningCache = () => {}; const types = { array, bigint, bool, func, number, object, string, symbol, any, element, elementType, node, arrayOf, instanceOf, objectOf, oneOf, oneOfType, shape, exact, checkPropTypes, resetWarningCache }; types.PropTypes = types; export { types as PropTypes }; export default types;';
|
|
10
21
|
// Workspace dependency patterns
|
|
11
22
|
export const WORKSPACE = {
|
|
12
23
|
VERSION: 'workspace:*',
|
|
@@ -19,30 +30,50 @@ export const WORKSPACE = {
|
|
|
19
30
|
export const EXCLUDED_UPSTREAM_ELEMENTS = ['boilerplate-item-type'];
|
|
20
31
|
// Upstream @pie-lib packages intentionally excluded from sync.
|
|
21
32
|
// math-rendering stays local (wrapper re-exports shared MathJax adapter).
|
|
22
|
-
|
|
33
|
+
// translator lives in packages/shared: its strings serve the Svelte elements too.
|
|
34
|
+
// controller-utils lives in packages/shared as shared-controller-utils, which the sync rewrites
|
|
35
|
+
// every `@pie-lib/controller-utils` import to.
|
|
36
|
+
export const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES = [
|
|
37
|
+
'controller-utils',
|
|
38
|
+
'math-rendering',
|
|
39
|
+
'translator',
|
|
40
|
+
];
|
|
41
|
+
// Upstream source files that sync does not re-emit. Each was reachable from no entry of its
|
|
42
|
+
// package and was deleted here; the values are the files' `@synced-from` paths.
|
|
43
|
+
export const RETIRED_UPSTREAM_SOURCE_FILES = new Set([
|
|
44
|
+
'pie-elements/packages/graphing/src/utils.js',
|
|
45
|
+
'pie-elements/packages/image-cloze-association/src/constants.js',
|
|
46
|
+
'pie-elements/packages/likert/src/session-updater.js',
|
|
47
|
+
'pie-elements/packages/match/configure/src/common.jsx',
|
|
48
|
+
'pie-elements/packages/matrix/src/session-updater.js',
|
|
49
|
+
'pie-elements/packages/number-line/src/number-line/point-chooser/styles.js',
|
|
50
|
+
'pie-elements/packages/placement-ordering/configure/src/help.jsx',
|
|
51
|
+
'pie-lib/packages/charting/src/tool-menu.jsx',
|
|
52
|
+
'pie-lib/packages/drag/src/drag-type.js',
|
|
53
|
+
'pie-lib/packages/drag/src/preview-component.jsx',
|
|
54
|
+
'pie-lib/packages/editable-html-tip-tap/src/components/media/MediaWrapper.jsx',
|
|
55
|
+
'pie-lib/packages/editable-html-tip-tap/src/styles/editorContainerStyles.js',
|
|
56
|
+
'pie-lib/packages/editable-html-tip-tap/src/theme.js',
|
|
57
|
+
'pie-lib/packages/graphing-solution-set/src/toggle-bar.jsx',
|
|
58
|
+
'pie-lib/packages/graphing-solution-set/src/tools/polygon/line.jsx',
|
|
59
|
+
'pie-lib/packages/graphing-solution-set/src/tools/shared/line/line-path.jsx',
|
|
60
|
+
'pie-lib/packages/graphing-solution-set/src/tools/shared/line/with-root-edge.jsx',
|
|
61
|
+
'pie-lib/packages/mask-markup/src/components/correct-input.jsx',
|
|
62
|
+
'pie-lib/packages/mask-markup/src/components/input.jsx',
|
|
63
|
+
'pie-lib/packages/math-input/src/math-input.jsx',
|
|
64
|
+
]);
|
|
23
65
|
// Build tool versions
|
|
24
66
|
export const BUILD_TOOLS = {
|
|
25
67
|
VITE: '^8.0.1',
|
|
26
68
|
TYPESCRIPT: '^5.9.3',
|
|
27
69
|
VITE_REACT_PLUGIN: '^6.0.1',
|
|
28
70
|
};
|
|
29
|
-
// React versions
|
|
71
|
+
// React versions. Library packages take React as a peer from the element that renders them;
|
|
72
|
+
// element packages depend on React at the browser ESM policy version and declare no React peer.
|
|
30
73
|
export const REACT = {
|
|
31
|
-
|
|
74
|
+
LIBRARY_PEER_RANGE: '^18.0.0 || ^19.0.0',
|
|
32
75
|
TYPES_VERSION: '^18.2.0',
|
|
33
76
|
};
|
|
34
|
-
// Directory patterns to skip
|
|
35
|
-
export const SKIP_PATTERNS = {
|
|
36
|
-
TEST_DIRS: ['__tests__', '__mocks__'],
|
|
37
|
-
FILE_EXTENSIONS: ['.js', '.jsx', '.ts', '.tsx'],
|
|
38
|
-
};
|
|
39
|
-
// File types
|
|
40
|
-
export const FILE_TYPES = {
|
|
41
|
-
JS: '.js',
|
|
42
|
-
JSX: '.jsx',
|
|
43
|
-
TS: '.ts',
|
|
44
|
-
TSX: '.tsx',
|
|
45
|
-
};
|
|
46
77
|
// Package.json defaults
|
|
47
78
|
export const PACKAGE_DEFAULTS = {
|
|
48
79
|
TYPE: 'module',
|
|
@@ -51,6 +82,7 @@ export const PACKAGE_DEFAULTS = {
|
|
|
51
82
|
};
|
|
52
83
|
// Build scripts
|
|
53
84
|
export const ELEMENT_BROWSER_VITE_CONFIG = '../../../tools/vite/element-browser.config.ts';
|
|
85
|
+
export const ELEMENT_BROWSER_EDITOR_RUNTIME_VITE_CONFIG = '../../../tools/vite/element-browser-editor-runtime.config.ts';
|
|
54
86
|
export const ELEMENT_LEGACY_PRINT_VITE_CONFIG = '../../../tools/vite/element-legacy-print.config.ts';
|
|
55
87
|
/**
|
|
56
88
|
* Compose a synced element's build script from the lanes it needs.
|
|
@@ -67,6 +99,9 @@ export function composeElementBuildScript(lanes = {}) {
|
|
|
67
99
|
const steps = ['bun x vite build'];
|
|
68
100
|
if (lanes.browser) {
|
|
69
101
|
steps.push(`bun x vite build --config ${ELEMENT_BROWSER_VITE_CONFIG}`);
|
|
102
|
+
if (lanes.editorRuntime) {
|
|
103
|
+
steps.push(`bun x vite build --config ${ELEMENT_BROWSER_EDITOR_RUNTIME_VITE_CONFIG}`);
|
|
104
|
+
}
|
|
70
105
|
}
|
|
71
106
|
if (lanes.legacyPrint) {
|
|
72
107
|
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":"AAAA;;GAEG;AAEH,2BAA2B;AAC3B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY,EAAE,iBAAiB;IAC/B,OAAO,EAAE,YAAY;IACrB,eAAe,EAAE,GAAG;CACZ,CAAC;AAEX,gCAAgC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,aAAa;IACtB,cAAc,EAAE,WAAW;IAC3B,kBAAkB,EAAE,eAAe;IACnC,oBAAoB,EAAE,iBAAiB;CAC/B,CAAC;AAEX,8DAA8D;AAC9D,2DAA2D;AAC3D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,uBAAuB,CAAU,CAAC;AAE7E,+DAA+D;AAC/D,0EAA0E;AAC1E,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,gBAAgB,CAAU,CAAC;AAE9E,sBAAsB;AACtB,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,iBAAiB,EAAE,QAAQ;CACnB,CAAC;AAEX,iBAAiB;AACjB,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,SAAS;CAChB,CAAC;AAEX,6BAA6B;AAC7B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;IACrC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;CACvC,CAAC;AAEX,aAAa;AACb,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,KAAK;IACT,GAAG,EAAE,MAAM;IACX,EAAE,EAAE,KAAK;IACT,GAAG,EAAE,MAAM;CACH,CAAC;AAEX,wBAAwB;AACxB,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,QAAQ;IACd,YAAY,EAAE,KAAK;IACnB,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;CACd,CAAC;AAEX,gBAAgB;AAChB,MAAM,CAAC,MAAM,2BAA2B,GAAG,+CAA+C,CAAC;AAC3F,MAAM,CAAC,MAAM,gCAAgC,GAC3C,oDAAoD,CAAC;AAgBvD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA2B,EAAE;IACrE,MAAM,KAAK,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,6BAA6B,2BAA2B,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,6BAA6B,gCAAgC,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC9D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,iFAAiF;AACjF,gFAAgF;AAChF,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE,yBAAyB,EAAE;IAClC,kBAAkB,EAAE,yBAAyB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChE,eAAe,EAAE,yBAAyB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1D,2BAA2B,EAAE,yBAAyB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACrF,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,wBAAwB;IAC9B,IAAI,EAAE,kBAAkB;CAChB,CAAC;AAEX,4BAA4B;AAC5B,MAAM,CAAC,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AAEjE,wBAAwB;AACxB,MAAM,CAAC,MAAM,YAAY,GAAG,6BAA6B,CAAC","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).\nexport const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES = ['math-rendering'] 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\nexport const REACT = {\n VERSION: '^18.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/**\n * Module source substituted for `debug` in per-element IIFE builds. Carries the\n * module-level `debug.log` and the instance methods element code calls.\n */\nexport const IIFE_DEBUG_SHIM_SOURCE =\n \"const noop = () => {}; function debug() { const log = function () {}; log.enabled = false; log.log = noop; log.extend = () => log; log.destroy = noop; return log; } debug.log = noop; debug.enable = noop; debug.disable = () => ''; debug.enabled = () => false; export default debug;\";\n\n/**\n * Module source substituted for `prop-types` in per-element IIFE builds. It mirrors\n * prop-types' production shims: every validator is callable and carries `isRequired`,\n * so `PropTypes.oneOf([...]).isRequired` evaluates at module load.\n */\nexport const IIFE_PROP_TYPES_SHIM_SOURCE =\n 'const shim = function () { return null; }; shim.isRequired = shim; const getShim = () => shim; export const array = shim, bigint = shim, bool = shim, func = shim, number = shim, object = shim, string = shim, symbol = shim, any = shim, element = shim, elementType = shim, node = shim; export const arrayOf = getShim, instanceOf = getShim, objectOf = getShim, oneOf = getShim, oneOfType = getShim, shape = getShim, exact = getShim; export const checkPropTypes = () => {}; export const resetWarningCache = () => {}; const types = { array, bigint, bool, func, number, object, string, symbol, any, element, elementType, node, arrayOf, instanceOf, objectOf, oneOf, oneOfType, shape, exact, checkPropTypes, resetWarningCache }; types.PropTypes = types; export { types as PropTypes }; export default types;';\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.\n// controller-utils lives in packages/shared as shared-controller-utils, which the sync rewrites\n// every `@pie-lib/controller-utils` import to.\nexport const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES = [\n 'controller-utils',\n 'math-rendering',\n 'translator',\n] as const;\n\n// Upstream source files that sync does not re-emit. Each was reachable from no entry of its\n// package and was deleted here; the values are the files' `@synced-from` paths.\nexport const RETIRED_UPSTREAM_SOURCE_FILES: ReadonlySet<string> = new Set([\n 'pie-elements/packages/graphing/src/utils.js',\n 'pie-elements/packages/image-cloze-association/src/constants.js',\n 'pie-elements/packages/likert/src/session-updater.js',\n 'pie-elements/packages/match/configure/src/common.jsx',\n 'pie-elements/packages/matrix/src/session-updater.js',\n 'pie-elements/packages/number-line/src/number-line/point-chooser/styles.js',\n 'pie-elements/packages/placement-ordering/configure/src/help.jsx',\n 'pie-lib/packages/charting/src/tool-menu.jsx',\n 'pie-lib/packages/drag/src/drag-type.js',\n 'pie-lib/packages/drag/src/preview-component.jsx',\n 'pie-lib/packages/editable-html-tip-tap/src/components/media/MediaWrapper.jsx',\n 'pie-lib/packages/editable-html-tip-tap/src/styles/editorContainerStyles.js',\n 'pie-lib/packages/editable-html-tip-tap/src/theme.js',\n 'pie-lib/packages/graphing-solution-set/src/toggle-bar.jsx',\n 'pie-lib/packages/graphing-solution-set/src/tools/polygon/line.jsx',\n 'pie-lib/packages/graphing-solution-set/src/tools/shared/line/line-path.jsx',\n 'pie-lib/packages/graphing-solution-set/src/tools/shared/line/with-root-edge.jsx',\n 'pie-lib/packages/mask-markup/src/components/correct-input.jsx',\n 'pie-lib/packages/mask-markup/src/components/input.jsx',\n 'pie-lib/packages/math-input/src/math-input.jsx',\n]);\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. Library packages take React as a peer from the element that renders them;\n// element packages depend on React at the browser ESM policy version and declare no React peer.\nexport const REACT = {\n LIBRARY_PEER_RANGE: '^18.0.0 || ^19.0.0',\n TYPES_VERSION: '^18.2.0',\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"]}
|
|
@@ -1,76 +1,133 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generate demo metadata for SvelteKit demo app
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* 3. Sample sessions converted to JSON from each element
|
|
4
|
+
* Scans packages/elements-react and packages/elements-svelte and rewrites the element registry
|
|
5
|
+
* (lib/elements/registry.ts). Each element's demos live in lib/samples/<element>.json, which the
|
|
6
|
+
* demo app reads; an element's docs/demo/config.mjs seeds that file only when it does not exist.
|
|
8
7
|
*/
|
|
8
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
9
9
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
10
10
|
import { join, dirname } from 'node:path';
|
|
11
11
|
import { fileURLToPath } from 'node:url';
|
|
12
12
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
13
|
const REPO_ROOT = join(__dirname, '../../../../..');
|
|
14
14
|
const DEMO_APP_PATH = join(REPO_ROOT, 'apps/element-demo');
|
|
15
|
-
const
|
|
15
|
+
const REGISTRY_PATH = join(DEMO_APP_PATH, 'src/lib/elements/registry.ts');
|
|
16
|
+
const SAMPLES_PATH = join(DEMO_APP_PATH, 'src/lib/samples');
|
|
17
|
+
const ELEMENT_ROOTS = ['packages/elements-react', 'packages/elements-svelte'];
|
|
16
18
|
/**
|
|
17
|
-
*
|
|
19
|
+
* Read the current registry entries, whose hand-set title and hasSession survive regeneration
|
|
18
20
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
function readExistingRegistry() {
|
|
22
|
+
if (!existsSync(REGISTRY_PATH))
|
|
23
|
+
return new Map();
|
|
24
|
+
const content = readFileSync(REGISTRY_PATH, 'utf-8');
|
|
25
|
+
const match = content.match(/export const ELEMENT_REGISTRY[^=]*=\s*(\[[\s\S]*?\]);/);
|
|
26
|
+
if (!match)
|
|
27
|
+
throw new Error(`Could not find ELEMENT_REGISTRY in ${REGISTRY_PATH}`);
|
|
28
|
+
const entries = JSON.parse(match[1]);
|
|
29
|
+
return new Map(entries.map((entry) => [entry.name, entry]));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Convert old format (models array) to new format (demos array)
|
|
33
|
+
*/
|
|
34
|
+
function toDemosFormat(configData) {
|
|
35
|
+
if (!configData?.models || configData?.demos)
|
|
36
|
+
return configData;
|
|
37
|
+
return {
|
|
38
|
+
demos: configData.models.map((model, index) => ({
|
|
39
|
+
id: index === 0 ? 'default' : `demo-${index + 1}`,
|
|
40
|
+
title: index === 0 ? 'Default Demo' : `Demo ${index + 1}`,
|
|
41
|
+
description: 'Default configuration',
|
|
42
|
+
tags: [],
|
|
43
|
+
model: model,
|
|
44
|
+
session: { value: [] },
|
|
45
|
+
})),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Load an element's samples JSON, seeding it from docs/demo/config.mjs when it does not exist
|
|
50
|
+
*/
|
|
51
|
+
async function loadSamples(name, elementPath) {
|
|
52
|
+
const samplesPath = join(SAMPLES_PATH, `${name}.json`);
|
|
53
|
+
const configPath = join(elementPath, 'docs/demo/config.mjs');
|
|
54
|
+
const existing = existsSync(samplesPath)
|
|
55
|
+
? JSON.parse(readFileSync(samplesPath, 'utf-8'))
|
|
56
|
+
: undefined;
|
|
57
|
+
if (!existsSync(configPath))
|
|
58
|
+
return existing;
|
|
59
|
+
let configData;
|
|
60
|
+
try {
|
|
61
|
+
configData = toDemosFormat((await import(`file://${configPath}`)).default);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
console.warn(`[demo-metadata] Failed to convert config for ${name}:`, e);
|
|
65
|
+
return existing;
|
|
24
66
|
}
|
|
67
|
+
if (existing) {
|
|
68
|
+
if (JSON.stringify(configData) !== JSON.stringify(existing)) {
|
|
69
|
+
console.warn(`[demo-metadata] ${name}: docs/demo/config.mjs differs from samples/${name}.json; ` +
|
|
70
|
+
'kept the samples file (delete it to regenerate from config.mjs)');
|
|
71
|
+
}
|
|
72
|
+
return existing;
|
|
73
|
+
}
|
|
74
|
+
await mkdir(SAMPLES_PATH, { recursive: true });
|
|
75
|
+
await writeFile(samplesPath, JSON.stringify(configData, null, 2) + '\n', 'utf-8');
|
|
76
|
+
console.log(`[demo-metadata] Seeded samples/${name}.json from docs/demo/config.mjs`);
|
|
77
|
+
return configData;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Scan the element package directories for all elements
|
|
81
|
+
*/
|
|
82
|
+
async function scanElements(existing) {
|
|
25
83
|
const elements = [];
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const stat = statSync(elementPath);
|
|
30
|
-
if (!stat.isDirectory())
|
|
31
|
-
continue;
|
|
32
|
-
// Check for required structure
|
|
33
|
-
const srcPath = join(elementPath, 'src');
|
|
34
|
-
const deliveryPath = join(srcPath, 'delivery');
|
|
35
|
-
if (!fsExistsSync(deliveryPath))
|
|
84
|
+
for (const root of ELEMENT_ROOTS) {
|
|
85
|
+
const rootPath = join(REPO_ROOT, root);
|
|
86
|
+
if (!existsSync(rootPath))
|
|
36
87
|
continue;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
88
|
+
for (const dir of readdirSync(rootPath, { withFileTypes: true })) {
|
|
89
|
+
if (!dir.isDirectory())
|
|
90
|
+
continue;
|
|
91
|
+
// Check for required structure
|
|
92
|
+
const elementPath = join(rootPath, dir.name);
|
|
93
|
+
const srcPath = join(elementPath, 'src');
|
|
94
|
+
if (!existsSync(join(srcPath, 'delivery')))
|
|
95
|
+
continue;
|
|
96
|
+
const pkg = JSON.parse(readFileSync(join(elementPath, 'package.json'), 'utf-8'));
|
|
97
|
+
const samples = await loadSamples(dir.name, elementPath);
|
|
98
|
+
const previous = existing.get(dir.name);
|
|
99
|
+
if (!previous) {
|
|
100
|
+
console.log(`[demo-metadata] Added ${dir.name}; check its title and hasSession in registry.ts`);
|
|
101
|
+
}
|
|
102
|
+
elements.push({
|
|
103
|
+
name: dir.name,
|
|
104
|
+
// Generate title from name (e.g., "multiple-choice" -> "Multiple Choice")
|
|
105
|
+
title: previous?.title ??
|
|
106
|
+
dir.name
|
|
107
|
+
.split('-')
|
|
108
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
109
|
+
.join(' '),
|
|
110
|
+
packageName: pkg.name,
|
|
111
|
+
hasAuthor: existsSync(join(srcPath, 'author')),
|
|
112
|
+
hasPrint: existsSync(join(srcPath, 'print')),
|
|
113
|
+
hasConfig: samples !== undefined,
|
|
114
|
+
hasSession: previous?.hasSession ?? true,
|
|
115
|
+
demoCount: Array.isArray(samples?.demos) ? samples.demos.length : 0,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
59
118
|
}
|
|
60
|
-
return elements;
|
|
119
|
+
return elements.sort((a, b) => a.name.localeCompare(b.name));
|
|
61
120
|
}
|
|
62
121
|
/**
|
|
63
122
|
* Generate registry.ts file
|
|
64
123
|
*/
|
|
65
124
|
async function generateRegistry(elements) {
|
|
66
|
-
const registryPath = join(DEMO_APP_PATH, 'src/lib/elements/registry.ts');
|
|
67
125
|
const content = `/**
|
|
68
126
|
* Element Registry
|
|
69
127
|
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* Generated: ${new Date().toISOString()}
|
|
128
|
+
* Generated by \`bun tools/generate-demo-metadata.mjs\` from packages/elements-react and
|
|
129
|
+
* packages/elements-svelte. Edit \`title\` and \`hasSession\` here; regeneration keeps them and
|
|
130
|
+
* overwrites the other fields.
|
|
74
131
|
*/
|
|
75
132
|
|
|
76
133
|
export interface ElementMetadata {
|
|
@@ -90,76 +147,27 @@ export function getElement(name: string): ElementMetadata | undefined {
|
|
|
90
147
|
return ELEMENT_REGISTRY.find((el) => el.name === name);
|
|
91
148
|
}
|
|
92
149
|
|
|
93
|
-
export function getAllElements(): ElementMetadata[] {
|
|
150
|
+
export function getAllElements(): readonly ElementMetadata[] {
|
|
94
151
|
return ELEMENT_REGISTRY;
|
|
95
152
|
}
|
|
96
153
|
`;
|
|
97
|
-
await mkdir(dirname(
|
|
98
|
-
await writeFile(
|
|
154
|
+
await mkdir(dirname(REGISTRY_PATH), { recursive: true });
|
|
155
|
+
await writeFile(REGISTRY_PATH, content, 'utf-8');
|
|
99
156
|
console.log(`[demo-metadata] Generated registry with ${elements.length} elements`);
|
|
100
157
|
}
|
|
101
|
-
/**
|
|
102
|
-
* Convert and copy sample configs for an element as JSON
|
|
103
|
-
*/
|
|
104
|
-
async function copySampleConfigs(elements) {
|
|
105
|
-
for (const element of elements) {
|
|
106
|
-
const sourcePath = join(ELEMENTS_REACT_PATH, element.name, 'docs/demo');
|
|
107
|
-
const targetDir = join(DEMO_APP_PATH, 'src/lib/samples');
|
|
108
|
-
await mkdir(targetDir, { recursive: true });
|
|
109
|
-
// Convert config.mjs to JSON
|
|
110
|
-
if (element.hasConfig) {
|
|
111
|
-
const sourceConfig = join(sourcePath, 'config.mjs');
|
|
112
|
-
const targetConfig = join(targetDir, `${element.name}.json`);
|
|
113
|
-
try {
|
|
114
|
-
// Dynamic import the .mjs file
|
|
115
|
-
const configModule = await import(`file://${sourceConfig}`);
|
|
116
|
-
let configData = configModule.default;
|
|
117
|
-
// Convert old format (models array) to new format (demos array)
|
|
118
|
-
if (configData?.models && !configData?.demos) {
|
|
119
|
-
console.log(`[demo-metadata] Converting ${element.name} from old format to new format`);
|
|
120
|
-
configData = {
|
|
121
|
-
demos: configData.models.map((model, index) => ({
|
|
122
|
-
id: index === 0 ? 'default' : `demo-${index + 1}`,
|
|
123
|
-
title: index === 0 ? 'Default Demo' : `Demo ${index + 1}`,
|
|
124
|
-
description: 'Default configuration',
|
|
125
|
-
tags: [],
|
|
126
|
-
model: model,
|
|
127
|
-
session: { value: [] },
|
|
128
|
-
})),
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
// Count demos (now all in 'demos' format)
|
|
132
|
-
if (configData?.demos && Array.isArray(configData.demos)) {
|
|
133
|
-
element.demoCount = configData.demos.length;
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
element.demoCount = 0;
|
|
137
|
-
}
|
|
138
|
-
// Write as JSON
|
|
139
|
-
await writeFile(targetConfig, JSON.stringify(configData, null, 2) + '\n', 'utf-8');
|
|
140
|
-
}
|
|
141
|
-
catch (e) {
|
|
142
|
-
console.warn(`[demo-metadata] Failed to convert config for ${element.name}:`, e);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
// Note: session.mjs files are no longer copied as separate files.
|
|
146
|
-
// Sessions are now embedded within each demo object in the config.
|
|
147
|
-
// Old format session files are automatically converted during config import above.
|
|
148
|
-
}
|
|
149
|
-
console.log(`[demo-metadata] Converted sample configs to JSON for ${elements.length} elements`);
|
|
150
|
-
}
|
|
151
158
|
/**
|
|
152
159
|
* Main entry point
|
|
153
160
|
*/
|
|
154
161
|
export async function generateDemoMetadata() {
|
|
155
162
|
console.log('[demo-metadata] Scanning elements...');
|
|
156
|
-
const
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
+
const existing = readExistingRegistry();
|
|
164
|
+
const elements = await scanElements(existing);
|
|
165
|
+
for (const name of existing.keys()) {
|
|
166
|
+
if (!elements.some((element) => element.name === name)) {
|
|
167
|
+
console.log(`[demo-metadata] Removed ${name}; no element package found`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
await generateRegistry(elements);
|
|
163
171
|
console.log('[demo-metadata] ✓ Demo metadata generation complete');
|
|
164
172
|
}
|
|
165
173
|
//# sourceMappingURL=sync-demo-metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-demo-metadata.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-demo-metadata.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Generate demo metadata for SvelteKit demo app\n *\n * This module generates:\n * 1. Element registry (lib/elements/registry.ts)\n * 2. Sample configs converted to JSON from each element\n * 3. Sample sessions converted to JSON from each element\n */\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst REPO_ROOT = join(__dirname, '../../../../..');\nconst DEMO_APP_PATH = join(REPO_ROOT, 'apps/element-demo');\nconst ELEMENTS_REACT_PATH = join(REPO_ROOT, 'packages/elements-react');\n\nexport interface ElementMetadata {\n name: string;\n title: string;\n packageName: string;\n hasAuthor: boolean;\n hasPrint: boolean;\n hasConfig: boolean;\n hasSession: boolean;\n demoCount: number;\n}\n\n/**\n * Scan elements-react directory for all elements\n */\nasync function scanReactElements(): Promise<ElementMetadata[]> {\n const { readdirSync, existsSync: fsExistsSync, statSync } = await import('node:fs');\n\n if (!fsExistsSync(ELEMENTS_REACT_PATH)) {\n console.log('[demo-metadata] elements-react directory not found, skipping');\n return [];\n }\n\n const elements: ElementMetadata[] = [];\n const dirs = readdirSync(ELEMENTS_REACT_PATH);\n\n for (const dir of dirs) {\n const elementPath = join(ELEMENTS_REACT_PATH, dir);\n const stat = statSync(elementPath);\n\n if (!stat.isDirectory()) continue;\n\n // Check for required structure\n const srcPath = join(elementPath, 'src');\n const deliveryPath = join(srcPath, 'delivery');\n if (!fsExistsSync(deliveryPath)) continue;\n\n // Check for author and print\n const hasAuthor = fsExistsSync(join(srcPath, 'author'));\n const hasPrint = fsExistsSync(join(srcPath, 'print'));\n\n // Check for demo files\n const docsPath = join(elementPath, 'docs/demo');\n const hasConfig = fsExistsSync(join(docsPath, 'config.mjs'));\n const hasSession = fsExistsSync(join(docsPath, 'session.mjs'));\n\n // Generate title from name (e.g., \"multiple-choice\" -> \"Multiple Choice\")\n const title = dir\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n\n elements.push({\n name: dir,\n title,\n packageName: `@pie-element/${dir}`,\n hasAuthor,\n hasPrint,\n hasConfig,\n hasSession,\n demoCount: 0, // Will be updated in copySampleConfigs\n });\n }\n\n return elements;\n}\n\n/**\n * Generate registry.ts file\n */\nasync function generateRegistry(elements: ElementMetadata[]): Promise<void> {\n const registryPath = join(DEMO_APP_PATH, 'src/lib/elements/registry.ts');\n\n const content = `/**\n * Element Registry\n *\n * AUTO-GENERATED by upstream:sync command.\n * DO NOT EDIT MANUALLY - changes will be overwritten.\n *\n * Generated: ${new Date().toISOString()}\n */\n\nexport interface ElementMetadata {\n name: string;\n title: string;\n packageName: string;\n hasAuthor: boolean;\n hasPrint: boolean;\n hasConfig: boolean;\n hasSession: boolean;\n demoCount: number;\n}\n\nexport const ELEMENT_REGISTRY: readonly ElementMetadata[] = ${JSON.stringify(elements, null, 2)};\n\nexport function getElement(name: string): ElementMetadata | undefined {\n return ELEMENT_REGISTRY.find((el) => el.name === name);\n}\n\nexport function getAllElements(): ElementMetadata[] {\n return ELEMENT_REGISTRY;\n}\n`;\n\n await mkdir(dirname(registryPath), { recursive: true });\n await writeFile(registryPath, content, 'utf-8');\n console.log(`[demo-metadata] Generated registry with ${elements.length} elements`);\n}\n\n/**\n * Convert and copy sample configs for an element as JSON\n */\nasync function copySampleConfigs(elements: ElementMetadata[]): Promise<void> {\n for (const element of elements) {\n const sourcePath = join(ELEMENTS_REACT_PATH, element.name, 'docs/demo');\n const targetDir = join(DEMO_APP_PATH, 'src/lib/samples');\n await mkdir(targetDir, { recursive: true });\n\n // Convert config.mjs to JSON\n if (element.hasConfig) {\n const sourceConfig = join(sourcePath, 'config.mjs');\n const targetConfig = join(targetDir, `${element.name}.json`);\n try {\n // Dynamic import the .mjs file\n const configModule = await import(`file://${sourceConfig}`);\n let configData = configModule.default;\n\n // Convert old format (models array) to new format (demos array)\n if (configData?.models && !configData?.demos) {\n console.log(`[demo-metadata] Converting ${element.name} from old format to new format`);\n configData = {\n demos: configData.models.map((model: any, index: number) => ({\n id: index === 0 ? 'default' : `demo-${index + 1}`,\n title: index === 0 ? 'Default Demo' : `Demo ${index + 1}`,\n description: 'Default configuration',\n tags: [],\n model: model,\n session: { value: [] },\n })),\n };\n }\n\n // Count demos (now all in 'demos' format)\n if (configData?.demos && Array.isArray(configData.demos)) {\n element.demoCount = configData.demos.length;\n } else {\n element.demoCount = 0;\n }\n\n // Write as JSON\n await writeFile(targetConfig, JSON.stringify(configData, null, 2) + '\\n', 'utf-8');\n } catch (e) {\n console.warn(`[demo-metadata] Failed to convert config for ${element.name}:`, e);\n }\n }\n\n // Note: session.mjs files are no longer copied as separate files.\n // Sessions are now embedded within each demo object in the config.\n // Old format session files are automatically converted during config import above.\n }\n\n console.log(`[demo-metadata] Converted sample configs to JSON for ${elements.length} elements`);\n}\n\n/**\n * Main entry point\n */\nexport async function generateDemoMetadata(): Promise<void> {\n console.log('[demo-metadata] Scanning elements...');\n\n const reactElements = await scanReactElements();\n const allElements = [...reactElements].sort((a, b) => a.name.localeCompare(b.name));\n\n console.log(`[demo-metadata] Found ${reactElements.length} React elements`);\n\n // Copy sample configs first so demoCount gets populated\n await copySampleConfigs(allElements);\n\n // Then generate registry with updated demoCount values\n await generateRegistry(allElements);\n\n console.log('[demo-metadata] ✓ Demo metadata generation complete');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sync-demo-metadata.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-demo-metadata.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Generate demo metadata for SvelteKit demo app\n *\n * Scans packages/elements-react and packages/elements-svelte and rewrites the element registry\n * (lib/elements/registry.ts). Each element's demos live in lib/samples/<element>.json, which the\n * demo app reads; an element's docs/demo/config.mjs seeds that file only when it does not exist.\n */\nimport { existsSync, readdirSync, readFileSync } from 'node:fs';\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst REPO_ROOT = join(__dirname, '../../../../..');\nconst DEMO_APP_PATH = join(REPO_ROOT, 'apps/element-demo');\nconst REGISTRY_PATH = join(DEMO_APP_PATH, 'src/lib/elements/registry.ts');\nconst SAMPLES_PATH = join(DEMO_APP_PATH, 'src/lib/samples');\nconst ELEMENT_ROOTS = ['packages/elements-react', 'packages/elements-svelte'];\n\nexport interface ElementMetadata {\n name: string;\n title: string;\n packageName: string;\n hasAuthor: boolean;\n hasPrint: boolean;\n hasConfig: boolean;\n hasSession: boolean;\n demoCount: number;\n}\n\n/**\n * Read the current registry entries, whose hand-set title and hasSession survive regeneration\n */\nfunction readExistingRegistry(): Map<string, ElementMetadata> {\n if (!existsSync(REGISTRY_PATH)) return new Map();\n\n const content = readFileSync(REGISTRY_PATH, 'utf-8');\n const match = content.match(/export const ELEMENT_REGISTRY[^=]*=\\s*(\\[[\\s\\S]*?\\]);/);\n if (!match) throw new Error(`Could not find ELEMENT_REGISTRY in ${REGISTRY_PATH}`);\n\n const entries: ElementMetadata[] = JSON.parse(match[1]);\n return new Map(entries.map((entry) => [entry.name, entry]));\n}\n\n/**\n * Convert old format (models array) to new format (demos array)\n */\nfunction toDemosFormat(configData: any): any {\n if (!configData?.models || configData?.demos) return configData;\n\n return {\n demos: configData.models.map((model: any, index: number) => ({\n id: index === 0 ? 'default' : `demo-${index + 1}`,\n title: index === 0 ? 'Default Demo' : `Demo ${index + 1}`,\n description: 'Default configuration',\n tags: [],\n model: model,\n session: { value: [] },\n })),\n };\n}\n\n/**\n * Load an element's samples JSON, seeding it from docs/demo/config.mjs when it does not exist\n */\nasync function loadSamples(name: string, elementPath: string): Promise<any | undefined> {\n const samplesPath = join(SAMPLES_PATH, `${name}.json`);\n const configPath = join(elementPath, 'docs/demo/config.mjs');\n const existing = existsSync(samplesPath)\n ? JSON.parse(readFileSync(samplesPath, 'utf-8'))\n : undefined;\n\n if (!existsSync(configPath)) return existing;\n\n let configData: any;\n try {\n configData = toDemosFormat((await import(`file://${configPath}`)).default);\n } catch (e) {\n console.warn(`[demo-metadata] Failed to convert config for ${name}:`, e);\n return existing;\n }\n\n if (existing) {\n if (JSON.stringify(configData) !== JSON.stringify(existing)) {\n console.warn(\n `[demo-metadata] ${name}: docs/demo/config.mjs differs from samples/${name}.json; ` +\n 'kept the samples file (delete it to regenerate from config.mjs)'\n );\n }\n return existing;\n }\n\n await mkdir(SAMPLES_PATH, { recursive: true });\n await writeFile(samplesPath, JSON.stringify(configData, null, 2) + '\\n', 'utf-8');\n console.log(`[demo-metadata] Seeded samples/${name}.json from docs/demo/config.mjs`);\n return configData;\n}\n\n/**\n * Scan the element package directories for all elements\n */\nasync function scanElements(existing: Map<string, ElementMetadata>): Promise<ElementMetadata[]> {\n const elements: ElementMetadata[] = [];\n\n for (const root of ELEMENT_ROOTS) {\n const rootPath = join(REPO_ROOT, root);\n if (!existsSync(rootPath)) continue;\n\n for (const dir of readdirSync(rootPath, { withFileTypes: true })) {\n if (!dir.isDirectory()) continue;\n\n // Check for required structure\n const elementPath = join(rootPath, dir.name);\n const srcPath = join(elementPath, 'src');\n if (!existsSync(join(srcPath, 'delivery'))) continue;\n\n const pkg = JSON.parse(readFileSync(join(elementPath, 'package.json'), 'utf-8'));\n const samples = await loadSamples(dir.name, elementPath);\n const previous = existing.get(dir.name);\n\n if (!previous) {\n console.log(\n `[demo-metadata] Added ${dir.name}; check its title and hasSession in registry.ts`\n );\n }\n\n elements.push({\n name: dir.name,\n // Generate title from name (e.g., \"multiple-choice\" -> \"Multiple Choice\")\n title:\n previous?.title ??\n dir.name\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' '),\n packageName: pkg.name,\n hasAuthor: existsSync(join(srcPath, 'author')),\n hasPrint: existsSync(join(srcPath, 'print')),\n hasConfig: samples !== undefined,\n hasSession: previous?.hasSession ?? true,\n demoCount: Array.isArray(samples?.demos) ? samples.demos.length : 0,\n });\n }\n }\n\n return elements.sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/**\n * Generate registry.ts file\n */\nasync function generateRegistry(elements: ElementMetadata[]): Promise<void> {\n const content = `/**\n * Element Registry\n *\n * Generated by \\`bun tools/generate-demo-metadata.mjs\\` from packages/elements-react and\n * packages/elements-svelte. Edit \\`title\\` and \\`hasSession\\` here; regeneration keeps them and\n * overwrites the other fields.\n */\n\nexport interface ElementMetadata {\n name: string;\n title: string;\n packageName: string;\n hasAuthor: boolean;\n hasPrint: boolean;\n hasConfig: boolean;\n hasSession: boolean;\n demoCount: number;\n}\n\nexport const ELEMENT_REGISTRY: readonly ElementMetadata[] = ${JSON.stringify(elements, null, 2)};\n\nexport function getElement(name: string): ElementMetadata | undefined {\n return ELEMENT_REGISTRY.find((el) => el.name === name);\n}\n\nexport function getAllElements(): readonly ElementMetadata[] {\n return ELEMENT_REGISTRY;\n}\n`;\n\n await mkdir(dirname(REGISTRY_PATH), { recursive: true });\n await writeFile(REGISTRY_PATH, content, 'utf-8');\n console.log(`[demo-metadata] Generated registry with ${elements.length} elements`);\n}\n\n/**\n * Main entry point\n */\nexport async function generateDemoMetadata(): Promise<void> {\n console.log('[demo-metadata] Scanning elements...');\n\n const existing = readExistingRegistry();\n const elements = await scanElements(existing);\n\n for (const name of existing.keys()) {\n if (!elements.some((element) => element.name === name)) {\n console.log(`[demo-metadata] Removed ${name}; no element package found`);\n }\n }\n\n await generateRegistry(elements);\n\n console.log('[demo-metadata] ✓ Demo metadata generation complete');\n}\n"]}
|
|
@@ -35,21 +35,6 @@ export declare function reexportTokenTypes(code: string, filePath: string): stri
|
|
|
35
35
|
* when configure directory is not synced (ESM-incompatible due to Slate v0.x)
|
|
36
36
|
*/
|
|
37
37
|
export declare function inlineConfigureDefaults(code: string): string;
|
|
38
|
-
/**
|
|
39
|
-
* Determine if a file should have .tsx extension based on content
|
|
40
|
-
*/
|
|
41
|
-
export declare function shouldUseTsxExtension(content: string, originalPath: string): boolean;
|
|
42
|
-
/**
|
|
43
|
-
* Convert CommonJS module.exports to ES module exports
|
|
44
|
-
*
|
|
45
|
-
* Handles patterns like:
|
|
46
|
-
* module.exports = { foo: ..., bar: ... }
|
|
47
|
-
*
|
|
48
|
-
* Converts to:
|
|
49
|
-
* export const foo = ...;
|
|
50
|
-
* export const bar = ...;
|
|
51
|
-
*/
|
|
52
|
-
export declare function convertModuleExportsToEsm(content: string): string;
|
|
53
38
|
/**
|
|
54
39
|
* Transform lodash and lodash-es imports to the vendored shared lodash package.
|
|
55
40
|
*
|
|
@@ -58,7 +43,6 @@ export declare function convertModuleExportsToEsm(content: string): string;
|
|
|
58
43
|
* resolution while keeping import shapes tree-shakeable.
|
|
59
44
|
*/
|
|
60
45
|
export declare function transformLodashToVendoredLodash(content: string): string;
|
|
61
|
-
export declare const transformLodashToLodashEs: typeof transformLodashToVendoredLodash;
|
|
62
46
|
/**
|
|
63
47
|
* Transform classnames imports to clsx.
|
|
64
48
|
*
|
|
@@ -66,6 +50,20 @@ export declare const transformLodashToLodashEs: typeof transformLodashToVendored
|
|
|
66
50
|
* entrypoint, so synced source should prefer it over the CommonJS-era package.
|
|
67
51
|
*/
|
|
68
52
|
export declare function transformClassnamesToClsx(content: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Rewrite js-combinatorics 0.5 `combination(seed, size)` calls to the 2.x `Combination` class.
|
|
55
|
+
*
|
|
56
|
+
* Upstream depends on 0.5, a UMD script with no ESM entrypoint; synced packages depend on 2.x,
|
|
57
|
+
* where `combination(n, k)` counts combinations as a BigInt and throws when given an array.
|
|
58
|
+
* `new Combination(seed, size)` enumerates the same pairs in the same order.
|
|
59
|
+
*/
|
|
60
|
+
export declare function transformJsCombinatoricsToV2(content: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* Rewrite named imports from COMMONJS_DEFAULT_IMPORTS packages to a default import plus a
|
|
63
|
+
* destructure, so `import { camelizeKeys } from 'humps'` becomes
|
|
64
|
+
* `import humps from 'humps'; const { camelizeKeys } = humps;`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function transformCommonJsNamedImports(content: string): string;
|
|
69
67
|
/**
|
|
70
68
|
* Replace react-input-autosize with the local ESM autosize input component.
|
|
71
69
|
*
|
|
@@ -83,11 +81,6 @@ export declare function transformReactInputAutosizeToLocal(content: string, sour
|
|
|
83
81
|
* parsing.
|
|
84
82
|
*/
|
|
85
83
|
export declare function transformConfigUiMathjsToLocalFraction(content: string, sourcePath?: string): string;
|
|
86
|
-
/**
|
|
87
|
-
* Compatibility wrapper retained for older callers. Lodash imports now target
|
|
88
|
-
* the vendored shared package rather than lodash-es deep modules.
|
|
89
|
-
*/
|
|
90
|
-
export declare function transformLodashEsDeepImportsToFullySpecified(content: string): string;
|
|
91
84
|
/**
|
|
92
85
|
* Ensure known strict-ESM deep imports include explicit file extensions.
|
|
93
86
|
*
|