@pie-element/cli 0.1.2-next.10 → 0.1.2-next.13
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/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/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 +1 -11
- package/dist/lib/upstream/sync-constants.js +26 -15
- package/dist/lib/upstream/sync-constants.js.map +1 -1
- package/dist/lib/upstream/sync-imports.d.ts +0 -21
- package/dist/lib/upstream/sync-imports.js +0 -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 +47 -24
- package/dist/lib/upstream/sync-package-manager.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-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/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
|
@@ -3,6 +3,7 @@ import { Logger } from '../../utils/logger.js';
|
|
|
3
3
|
import { existsSync } from 'node:fs';
|
|
4
4
|
import { readdir, readFile, writeFile, stat as fsStat } from 'node:fs/promises';
|
|
5
5
|
import { join } from 'node:path';
|
|
6
|
+
import { elementSharedRuntimeDependencies } from '../../lib/upstream/sync-package-manager.js';
|
|
6
7
|
const ELEMENTS_REACT_DIR = 'packages/elements-react';
|
|
7
8
|
export default class CreateReactElements extends Command {
|
|
8
9
|
static description = 'Create package.json files for synced React elements';
|
|
@@ -37,12 +38,12 @@ export default class CreateReactElements extends Command {
|
|
|
37
38
|
continue;
|
|
38
39
|
}
|
|
39
40
|
// Scan for dependencies
|
|
40
|
-
const { deps
|
|
41
|
+
const { deps } = await this.scanElement(elementDir);
|
|
41
42
|
// Add controller package as a dependency
|
|
42
43
|
const controllerPkg = `@pie-element/${element}-controller`;
|
|
43
44
|
deps.add(controllerPkg);
|
|
44
45
|
// Generate package.json
|
|
45
|
-
const packageContent = this.generatePackageJson(element, Array.from(deps)
|
|
46
|
+
const packageContent = this.generatePackageJson(element, Array.from(deps));
|
|
46
47
|
// Write package.json
|
|
47
48
|
await writeFile(packageJsonPath, packageContent, 'utf-8');
|
|
48
49
|
// Generate vite.config.ts
|
|
@@ -55,7 +56,7 @@ export default class CreateReactElements extends Command {
|
|
|
55
56
|
if (!existsSync(tsconfigPath)) {
|
|
56
57
|
await writeFile(tsconfigPath, this.generateTsConfig(), 'utf-8');
|
|
57
58
|
}
|
|
58
|
-
this.logger.success(` ✅ ${element}: Created package.json (${deps.size} deps
|
|
59
|
+
this.logger.success(` ✅ ${element}: Created package.json (${deps.size} deps)`);
|
|
59
60
|
created++;
|
|
60
61
|
}
|
|
61
62
|
this.logger.section(`\n📊 Summary: ${created} created, ${skipped} skipped`);
|
|
@@ -63,9 +64,8 @@ export default class CreateReactElements extends Command {
|
|
|
63
64
|
async scanElement(elementDir) {
|
|
64
65
|
const srcDir = join(elementDir, 'src');
|
|
65
66
|
const deps = new Set();
|
|
66
|
-
const peerDeps = new Set();
|
|
67
67
|
if (!existsSync(srcDir)) {
|
|
68
|
-
return { deps
|
|
68
|
+
return { deps };
|
|
69
69
|
}
|
|
70
70
|
// Recursively scan all .ts and .tsx files
|
|
71
71
|
const scanDir = async (dir) => {
|
|
@@ -78,19 +78,16 @@ export default class CreateReactElements extends Command {
|
|
|
78
78
|
else if (item.name.endsWith('.ts') || item.name.endsWith('.tsx')) {
|
|
79
79
|
const content = await readFile(itemPath, 'utf-8');
|
|
80
80
|
const fileDeps = this.extractDeps(content);
|
|
81
|
-
for (const dep of fileDeps
|
|
81
|
+
for (const dep of fileDeps)
|
|
82
82
|
deps.add(dep);
|
|
83
|
-
for (const dep of fileDeps.peerDeps)
|
|
84
|
-
peerDeps.add(dep);
|
|
85
83
|
}
|
|
86
84
|
}
|
|
87
85
|
};
|
|
88
86
|
await scanDir(srcDir);
|
|
89
|
-
return { deps
|
|
87
|
+
return { deps };
|
|
90
88
|
}
|
|
91
89
|
extractDeps(content) {
|
|
92
90
|
const deps = new Set();
|
|
93
|
-
const peerDeps = new Set();
|
|
94
91
|
// Match import statements
|
|
95
92
|
const importRegex = /^import .* from ['"]([^'"]+)['"]/gm;
|
|
96
93
|
const matches = content.matchAll(importRegex);
|
|
@@ -99,15 +96,6 @@ export default class CreateReactElements extends Command {
|
|
|
99
96
|
// Skip relative imports
|
|
100
97
|
if (dep.startsWith('.'))
|
|
101
98
|
continue;
|
|
102
|
-
// React is a peer dependency
|
|
103
|
-
if (dep === 'react' || dep.startsWith('react/')) {
|
|
104
|
-
peerDeps.add('react');
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
if (dep === 'react-dom' || dep.startsWith('react-dom/')) {
|
|
108
|
-
peerDeps.add('react-dom');
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
99
|
// Add @pie-lib packages
|
|
112
100
|
if (dep.startsWith('@pie-lib/')) {
|
|
113
101
|
deps.add(dep.split('/').slice(0, 2).join('/'));
|
|
@@ -129,14 +117,12 @@ export default class CreateReactElements extends Command {
|
|
|
129
117
|
deps.add(dep.split('/')[0]);
|
|
130
118
|
}
|
|
131
119
|
}
|
|
132
|
-
return
|
|
133
|
-
deps: Array.from(deps).sort(),
|
|
134
|
-
peerDeps: Array.from(peerDeps).sort(),
|
|
135
|
-
};
|
|
120
|
+
return Array.from(deps).sort();
|
|
136
121
|
}
|
|
137
|
-
generatePackageJson(name, deps
|
|
122
|
+
generatePackageJson(name, deps) {
|
|
138
123
|
const dependencies = {};
|
|
139
|
-
|
|
124
|
+
// React and React DOM are dependencies at the browser ESM policy version, never peers.
|
|
125
|
+
const sharedRuntimeDeps = elementSharedRuntimeDependencies(process.cwd());
|
|
140
126
|
// Add dependencies (use * for external deps, they're in root package.json)
|
|
141
127
|
for (const dep of deps) {
|
|
142
128
|
// Use workspace protocol for internal packages
|
|
@@ -144,13 +130,9 @@ export default class CreateReactElements extends Command {
|
|
|
144
130
|
dependencies[dep] = 'workspace:*';
|
|
145
131
|
}
|
|
146
132
|
else {
|
|
147
|
-
dependencies[dep] = '*';
|
|
133
|
+
dependencies[dep] = sharedRuntimeDeps[dep] ?? '*';
|
|
148
134
|
}
|
|
149
135
|
}
|
|
150
|
-
// Add peer dependencies
|
|
151
|
-
for (const dep of peerDeps) {
|
|
152
|
-
peerDependencies[dep] = '^18.0.0';
|
|
153
|
-
}
|
|
154
136
|
const pkg = {
|
|
155
137
|
name: `@pie-element/${name}`,
|
|
156
138
|
version: '0.1.0',
|
|
@@ -185,7 +167,6 @@ export default class CreateReactElements extends Command {
|
|
|
185
167
|
'lint:fix': 'biome check --write .',
|
|
186
168
|
},
|
|
187
169
|
dependencies: Object.keys(dependencies).length > 0 ? dependencies : undefined,
|
|
188
|
-
peerDependencies: Object.keys(peerDependencies).length > 0 ? peerDependencies : undefined,
|
|
189
170
|
devDependencies: {
|
|
190
171
|
'@types/react': '^18.2.0',
|
|
191
172
|
'@types/react-dom': '^18.2.0',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-react-elements.js","sourceRoot":"","sources":["../../../src/commands/packages/create-react-elements.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport { Logger } from '../../utils/logger.js';\nimport { existsSync } from 'node:fs';\nimport { readdir, readFile, writeFile, stat as fsStat } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nconst ELEMENTS_REACT_DIR = 'packages/elements-react';\n\ninterface ElementDeps {\n deps: Set<string>;\n peerDeps: Set<string>;\n}\n\nexport default class CreateReactElements extends Command {\n static override description = 'Create package.json files for synced React elements';\n\n static override examples = ['<%= config.bin %> <%= command.id %>'];\n\n static override flags = {\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n };\n\n private logger = new Logger();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(CreateReactElements);\n\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('📦 Creating package.json files for React elements');\n\n const elements = await readdir(ELEMENTS_REACT_DIR);\n let created = 0;\n let skipped = 0;\n\n for (const element of elements) {\n const elementDir = join(ELEMENTS_REACT_DIR, element);\n const packageJsonPath = join(elementDir, 'package.json');\n\n // Skip if not a directory\n const statResult = await fsStat(elementDir).catch(() => null);\n if (!statResult?.isDirectory()) {\n continue;\n }\n\n // Skip if package.json already exists\n if (existsSync(packageJsonPath)) {\n this.logger.info(` ⏭️ ${element}: package.json already exists`);\n skipped++;\n continue;\n }\n\n // Scan for dependencies\n const { deps, peerDeps } = await this.scanElement(elementDir);\n\n // Add controller package as a dependency\n const controllerPkg = `@pie-element/${element}-controller`;\n deps.add(controllerPkg);\n\n // Generate package.json\n const packageContent = this.generatePackageJson(\n element,\n Array.from(deps),\n Array.from(peerDeps)\n );\n\n // Write package.json\n await writeFile(packageJsonPath, packageContent, 'utf-8');\n\n // Generate vite.config.ts\n const viteConfigPath = join(elementDir, 'vite.config.ts');\n if (!existsSync(viteConfigPath)) {\n await writeFile(viteConfigPath, this.generateViteConfig(), 'utf-8');\n }\n\n // Generate tsconfig.json\n const tsconfigPath = join(elementDir, 'tsconfig.json');\n if (!existsSync(tsconfigPath)) {\n await writeFile(tsconfigPath, this.generateTsConfig(), 'utf-8');\n }\n\n this.logger.success(\n ` ✅ ${element}: Created package.json (${deps.size} deps, ${peerDeps.size} peer deps)`\n );\n created++;\n }\n\n this.logger.section(`\\n📊 Summary: ${created} created, ${skipped} skipped`);\n }\n\n private async scanElement(elementDir: string): Promise<ElementDeps> {\n const srcDir = join(elementDir, 'src');\n const deps = new Set<string>();\n const peerDeps = new Set<string>();\n\n if (!existsSync(srcDir)) {\n return { deps, peerDeps };\n }\n\n // Recursively scan all .ts and .tsx files\n const scanDir = async (dir: string): Promise<void> => {\n const items = await readdir(dir, { withFileTypes: true });\n\n for (const item of items) {\n const itemPath = join(dir, item.name);\n\n if (item.isDirectory()) {\n await scanDir(itemPath);\n } else if (item.name.endsWith('.ts') || item.name.endsWith('.tsx')) {\n const content = await readFile(itemPath, 'utf-8');\n const fileDeps = this.extractDeps(content);\n\n for (const dep of fileDeps.deps) deps.add(dep);\n for (const dep of fileDeps.peerDeps) peerDeps.add(dep);\n }\n }\n };\n\n await scanDir(srcDir);\n\n return { deps, peerDeps };\n }\n\n private extractDeps(content: string): { deps: string[]; peerDeps: string[] } {\n const deps = new Set<string>();\n const peerDeps = new Set<string>();\n\n // Match import statements\n const importRegex = /^import .* from ['\"]([^'\"]+)['\"]/gm;\n const matches = content.matchAll(importRegex);\n\n for (const match of matches) {\n const dep = match[1];\n\n // Skip relative imports\n if (dep.startsWith('.')) continue;\n\n // React is a peer dependency\n if (dep === 'react' || dep.startsWith('react/')) {\n peerDeps.add('react');\n continue;\n }\n if (dep === 'react-dom' || dep.startsWith('react-dom/')) {\n peerDeps.add('react-dom');\n continue;\n }\n\n // Add @pie-lib packages\n if (dep.startsWith('@pie-lib/')) {\n deps.add(dep.split('/').slice(0, 2).join('/'));\n }\n // Add @pie-element packages (controller packages)\n else if (dep.startsWith('@pie-element/')) {\n deps.add(dep.split('/').slice(0, 2).join('/'));\n }\n // Add other scoped packages\n else if (dep.startsWith('@')) {\n deps.add(dep.split('/').slice(0, 2).join('/'));\n }\n // Add non-scoped packages\n else if (!dep.includes('/')) {\n deps.add(dep);\n } else {\n // Package with sub-path (e.g., lodash/get)\n deps.add(dep.split('/')[0]);\n }\n }\n\n return {\n deps: Array.from(deps).sort(),\n peerDeps: Array.from(peerDeps).sort(),\n };\n }\n\n private generatePackageJson(name: string, deps: string[], peerDeps: string[]): string {\n const dependencies: Record<string, string> = {};\n const peerDependencies: Record<string, string> = {};\n\n // Add dependencies (use * for external deps, they're in root package.json)\n for (const dep of deps) {\n // Use workspace protocol for internal packages\n if (dep.startsWith('@pie-element/')) {\n dependencies[dep] = 'workspace:*';\n } else {\n dependencies[dep] = '*';\n }\n }\n\n // Add peer dependencies\n for (const dep of peerDeps) {\n peerDependencies[dep] = '^18.0.0';\n }\n\n const pkg = {\n name: `@pie-element/${name}`,\n version: '0.1.0',\n description: `React implementation of ${name} element synced from pie-elements`,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n default: './dist/index.js',\n },\n './delivery': {\n types: './dist/delivery/index.d.ts',\n default: './dist/delivery/index.js',\n },\n './configure': {\n types: './dist/configure/index.d.ts',\n default: './dist/configure/index.js',\n },\n './controller': {\n types: './dist/controller/index.d.ts',\n default: './dist/controller/index.js',\n },\n },\n files: ['dist', 'src'],\n scripts: {\n dev: 'vite',\n build: 'vite build && tsc --emitDeclarationOnly',\n test: 'vitest run',\n lint: 'biome check .',\n 'lint:fix': 'biome check --write .',\n },\n dependencies: Object.keys(dependencies).length > 0 ? dependencies : undefined,\n peerDependencies: Object.keys(peerDependencies).length > 0 ? peerDependencies : undefined,\n devDependencies: {\n '@types/react': '^18.2.0',\n '@types/react-dom': '^18.2.0',\n '@vitejs/plugin-react': '^4.2.0',\n typescript: '^5.9.3',\n vite: '^6.0.0',\n vitest: '^2.1.0',\n },\n keywords: ['pie', 'pie-element', 'react', name, 'assessment'],\n license: 'ISC',\n repository: {\n type: 'git',\n url: 'https://github.com/pie-framework/pie-elements-ng.git',\n directory: `packages/elements-react/${name}`,\n },\n };\n\n // Remove undefined fields\n const cleaned = JSON.parse(JSON.stringify(pkg));\n\n return `${JSON.stringify(cleaned, null, 2)}\\n`;\n }\n\n private generateViteConfig(): string {\n return `import react from '@vitejs/plugin-react';\nimport { defineConfig } from 'vite';\nimport { resolve } from 'node:path';\n\nexport default defineConfig({\n plugins: [react()],\n build: {\n lib: {\n entry: {\n index: resolve(__dirname, 'src/index.ts'),\n 'delivery/index': resolve(__dirname, 'src/index.ts'),\n 'configure/index': resolve(__dirname, 'src/configure/index.ts'),\n },\n formats: ['es'],\n },\n rollupOptions: {\n external: [\n /^react($|\\\\/)/,\n /^react-dom($|\\\\/)/,\n /^@pie-lib/,\n /^@pie-element/,\n /^@pie-framework/,\n /^@mui/,\n ],\n output: {\n preserveModules: true,\n preserveModulesRoot: 'src',\n },\n },\n },\n});\n`;\n }\n\n private generateTsConfig(): string {\n return `{\n \"extends\": \"../../../tsconfig.declarations.json\",\n \"compilerOptions\": {\n \"outDir\": \"./dist\",\n \"rootDir\": \"./src\",\n \"jsx\": \"react-jsx\",\n \"declaration\": true\n },\n \"include\": [\"src/**/*\"],\n \"exclude\": [\"node_modules\", \"dist\", \"**/*.test.ts\", \"**/*.test.tsx\"]\n}\n`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"create-react-elements.js","sourceRoot":"","sources":["../../../src/commands/packages/create-react-elements.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport { Logger } from '../../utils/logger.js';\nimport { existsSync } from 'node:fs';\nimport { readdir, readFile, writeFile, stat as fsStat } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { elementSharedRuntimeDependencies } from '../../lib/upstream/sync-package-manager.js';\n\nconst ELEMENTS_REACT_DIR = 'packages/elements-react';\n\ninterface ElementDeps {\n deps: Set<string>;\n}\n\nexport default class CreateReactElements extends Command {\n static override description = 'Create package.json files for synced React elements';\n\n static override examples = ['<%= config.bin %> <%= command.id %>'];\n\n static override flags = {\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n };\n\n private logger = new Logger();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(CreateReactElements);\n\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('📦 Creating package.json files for React elements');\n\n const elements = await readdir(ELEMENTS_REACT_DIR);\n let created = 0;\n let skipped = 0;\n\n for (const element of elements) {\n const elementDir = join(ELEMENTS_REACT_DIR, element);\n const packageJsonPath = join(elementDir, 'package.json');\n\n // Skip if not a directory\n const statResult = await fsStat(elementDir).catch(() => null);\n if (!statResult?.isDirectory()) {\n continue;\n }\n\n // Skip if package.json already exists\n if (existsSync(packageJsonPath)) {\n this.logger.info(` ⏭️ ${element}: package.json already exists`);\n skipped++;\n continue;\n }\n\n // Scan for dependencies\n const { deps } = await this.scanElement(elementDir);\n\n // Add controller package as a dependency\n const controllerPkg = `@pie-element/${element}-controller`;\n deps.add(controllerPkg);\n\n // Generate package.json\n const packageContent = this.generatePackageJson(element, Array.from(deps));\n\n // Write package.json\n await writeFile(packageJsonPath, packageContent, 'utf-8');\n\n // Generate vite.config.ts\n const viteConfigPath = join(elementDir, 'vite.config.ts');\n if (!existsSync(viteConfigPath)) {\n await writeFile(viteConfigPath, this.generateViteConfig(), 'utf-8');\n }\n\n // Generate tsconfig.json\n const tsconfigPath = join(elementDir, 'tsconfig.json');\n if (!existsSync(tsconfigPath)) {\n await writeFile(tsconfigPath, this.generateTsConfig(), 'utf-8');\n }\n\n this.logger.success(` ✅ ${element}: Created package.json (${deps.size} deps)`);\n created++;\n }\n\n this.logger.section(`\\n📊 Summary: ${created} created, ${skipped} skipped`);\n }\n\n private async scanElement(elementDir: string): Promise<ElementDeps> {\n const srcDir = join(elementDir, 'src');\n const deps = new Set<string>();\n\n if (!existsSync(srcDir)) {\n return { deps };\n }\n\n // Recursively scan all .ts and .tsx files\n const scanDir = async (dir: string): Promise<void> => {\n const items = await readdir(dir, { withFileTypes: true });\n\n for (const item of items) {\n const itemPath = join(dir, item.name);\n\n if (item.isDirectory()) {\n await scanDir(itemPath);\n } else if (item.name.endsWith('.ts') || item.name.endsWith('.tsx')) {\n const content = await readFile(itemPath, 'utf-8');\n const fileDeps = this.extractDeps(content);\n\n for (const dep of fileDeps) deps.add(dep);\n }\n }\n };\n\n await scanDir(srcDir);\n\n return { deps };\n }\n\n private extractDeps(content: string): string[] {\n const deps = new Set<string>();\n\n // Match import statements\n const importRegex = /^import .* from ['\"]([^'\"]+)['\"]/gm;\n const matches = content.matchAll(importRegex);\n\n for (const match of matches) {\n const dep = match[1];\n\n // Skip relative imports\n if (dep.startsWith('.')) continue;\n\n // Add @pie-lib packages\n if (dep.startsWith('@pie-lib/')) {\n deps.add(dep.split('/').slice(0, 2).join('/'));\n }\n // Add @pie-element packages (controller packages)\n else if (dep.startsWith('@pie-element/')) {\n deps.add(dep.split('/').slice(0, 2).join('/'));\n }\n // Add other scoped packages\n else if (dep.startsWith('@')) {\n deps.add(dep.split('/').slice(0, 2).join('/'));\n }\n // Add non-scoped packages\n else if (!dep.includes('/')) {\n deps.add(dep);\n } else {\n // Package with sub-path (e.g., lodash/get)\n deps.add(dep.split('/')[0]);\n }\n }\n\n return Array.from(deps).sort();\n }\n\n private generatePackageJson(name: string, deps: string[]): string {\n const dependencies: Record<string, string> = {};\n // React and React DOM are dependencies at the browser ESM policy version, never peers.\n const sharedRuntimeDeps = elementSharedRuntimeDependencies(process.cwd());\n\n // Add dependencies (use * for external deps, they're in root package.json)\n for (const dep of deps) {\n // Use workspace protocol for internal packages\n if (dep.startsWith('@pie-element/')) {\n dependencies[dep] = 'workspace:*';\n } else {\n dependencies[dep] = sharedRuntimeDeps[dep] ?? '*';\n }\n }\n\n const pkg = {\n name: `@pie-element/${name}`,\n version: '0.1.0',\n description: `React implementation of ${name} element synced from pie-elements`,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n default: './dist/index.js',\n },\n './delivery': {\n types: './dist/delivery/index.d.ts',\n default: './dist/delivery/index.js',\n },\n './configure': {\n types: './dist/configure/index.d.ts',\n default: './dist/configure/index.js',\n },\n './controller': {\n types: './dist/controller/index.d.ts',\n default: './dist/controller/index.js',\n },\n },\n files: ['dist', 'src'],\n scripts: {\n dev: 'vite',\n build: 'vite build && tsc --emitDeclarationOnly',\n test: 'vitest run',\n lint: 'biome check .',\n 'lint:fix': 'biome check --write .',\n },\n dependencies: Object.keys(dependencies).length > 0 ? dependencies : undefined,\n devDependencies: {\n '@types/react': '^18.2.0',\n '@types/react-dom': '^18.2.0',\n '@vitejs/plugin-react': '^4.2.0',\n typescript: '^5.9.3',\n vite: '^6.0.0',\n vitest: '^2.1.0',\n },\n keywords: ['pie', 'pie-element', 'react', name, 'assessment'],\n license: 'ISC',\n repository: {\n type: 'git',\n url: 'https://github.com/pie-framework/pie-elements-ng.git',\n directory: `packages/elements-react/${name}`,\n },\n };\n\n // Remove undefined fields\n const cleaned = JSON.parse(JSON.stringify(pkg));\n\n return `${JSON.stringify(cleaned, null, 2)}\\n`;\n }\n\n private generateViteConfig(): string {\n return `import react from '@vitejs/plugin-react';\nimport { defineConfig } from 'vite';\nimport { resolve } from 'node:path';\n\nexport default defineConfig({\n plugins: [react()],\n build: {\n lib: {\n entry: {\n index: resolve(__dirname, 'src/index.ts'),\n 'delivery/index': resolve(__dirname, 'src/index.ts'),\n 'configure/index': resolve(__dirname, 'src/configure/index.ts'),\n },\n formats: ['es'],\n },\n rollupOptions: {\n external: [\n /^react($|\\\\/)/,\n /^react-dom($|\\\\/)/,\n /^@pie-lib/,\n /^@pie-element/,\n /^@pie-framework/,\n /^@mui/,\n ],\n output: {\n preserveModules: true,\n preserveModulesRoot: 'src',\n },\n },\n },\n});\n`;\n }\n\n private generateTsConfig(): string {\n return `{\n \"extends\": \"../../../tsconfig.declarations.json\",\n \"compilerOptions\": {\n \"outDir\": \"./dist\",\n \"rootDir\": \"./src\",\n \"jsx\": \"react-jsx\",\n \"declaration\": true\n },\n \"include\": [\"src/**/*\"],\n \"exclude\": [\"node_modules\", \"dist\", \"**/*.test.ts\", \"**/*.test.tsx\"]\n}\n`;\n }\n}\n"]}
|
|
@@ -3,6 +3,7 @@ import { Logger } from '../../utils/logger.js';
|
|
|
3
3
|
import { existsSync } from 'node:fs';
|
|
4
4
|
import { readdir, readFile, writeFile, stat as fsStat } from 'node:fs/promises';
|
|
5
5
|
import { join } from 'node:path';
|
|
6
|
+
import { elementSharedRuntimeDependencies } from '../../lib/upstream/sync-package-manager.js';
|
|
6
7
|
const ELEMENTS_REACT_DIR = 'packages/elements-react';
|
|
7
8
|
const PIE_ELEMENTS_DIR = '../pie-elements/packages';
|
|
8
9
|
export default class InitSyncedElements extends Command {
|
|
@@ -140,11 +141,8 @@ export default class InitSyncedElements extends Command {
|
|
|
140
141
|
lint: 'biome check .',
|
|
141
142
|
'lint:fix': 'biome check --write .',
|
|
142
143
|
},
|
|
143
|
-
dependencies
|
|
144
|
-
|
|
145
|
-
react: '^18.0.0',
|
|
146
|
-
'react-dom': '^18.0.0',
|
|
147
|
-
},
|
|
144
|
+
// React and React DOM are dependencies at the browser ESM policy version, never peers.
|
|
145
|
+
dependencies: { ...deps, ...elementSharedRuntimeDependencies(process.cwd()) },
|
|
148
146
|
devDependencies: {
|
|
149
147
|
'@types/react': '^18.2.0',
|
|
150
148
|
'@types/react-dom': '^18.2.0',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-synced-elements.js","sourceRoot":"","sources":["../../../src/commands/packages/init-synced-elements.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport { Logger } from '../../utils/logger.js';\nimport { existsSync } from 'node:fs';\nimport { readdir, readFile, writeFile, stat as fsStat } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nconst ELEMENTS_REACT_DIR = 'packages/elements-react';\nconst PIE_ELEMENTS_DIR = '../pie-elements/packages';\n\ninterface PackageTemplate {\n name: string;\n private: boolean;\n version: string;\n description: string;\n type: string;\n main: string;\n types: string;\n exports: Record<string, unknown>;\n files: string[];\n scripts: Record<string, string>;\n dependencies: Record<string, string>;\n peerDependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n keywords: string[];\n license: string;\n repository: {\n type: string;\n url: string;\n directory: string;\n };\n}\n\nexport default class InitSyncedElements extends Command {\n static override description =\n 'Initialize package.json and vite.config.ts files for synced React elements';\n\n static override examples = [\n '<%= config.bin %> <%= command.id %>',\n '<%= config.bin %> <%= command.id %> --element=categorize',\n '<%= config.bin %> <%= command.id %> --dry-run',\n ];\n\n static override flags = {\n element: Flags.string({\n description: 'Initialize only specified element',\n }),\n 'dry-run': Flags.boolean({\n description: 'Show what would be created without making changes',\n default: false,\n }),\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n };\n\n private logger = new Logger();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(InitSyncedElements);\n\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('🔧 Initializing synced React elements');\n\n if (flags['dry-run']) {\n this.logger.info(' Mode: DRY RUN\\n');\n }\n\n const elements = await readdir(ELEMENTS_REACT_DIR);\n let created = 0;\n let skipped = 0;\n\n for (const element of elements) {\n // Skip if filtering by element and this isn't it\n if (flags.element && element !== flags.element) {\n continue;\n }\n\n const elementDir = join(ELEMENTS_REACT_DIR, element);\n\n // Skip if not a directory\n const statResult = await fsStat(elementDir).catch(() => null);\n if (!statResult?.isDirectory()) {\n continue;\n }\n\n // Skip if src directory doesn't exist\n if (!existsSync(join(elementDir, 'src'))) {\n continue;\n }\n\n const packageJsonPath = join(elementDir, 'package.json');\n\n // Skip if package.json already exists\n if (existsSync(packageJsonPath)) {\n if (flags.verbose) {\n this.logger.info(` ⏭️ ${element}: package.json already exists`);\n }\n skipped++;\n continue;\n }\n\n // Read upstream package.json\n const upstreamPkg = await this.readUpstreamPackageJson(element);\n if (!upstreamPkg) {\n this.logger.warn(` ⚠️ ${element}: Could not read upstream package.json`);\n continue;\n }\n\n // Generate package.json\n const pkg = this.generatePackageJson(element, upstreamPkg);\n\n if (!flags['dry-run']) {\n await writeFile(packageJsonPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf-8');\n this.logger.success(` ✨ ${element}: Created package.json`);\n } else {\n this.logger.info(` 🔍 ${element}: Would create package.json`);\n }\n\n // Generate vite.config.ts\n const viteConfigPath = join(elementDir, 'vite.config.ts');\n if (!existsSync(viteConfigPath)) {\n if (!flags['dry-run']) {\n await writeFile(viteConfigPath, this.generateViteConfig(), 'utf-8');\n this.logger.success(` ✨ ${element}: Created vite.config.ts`);\n } else {\n this.logger.info(` 🔍 ${element}: Would create vite.config.ts`);\n }\n }\n\n created++;\n }\n\n this.logger.section(\n `\\n📊 Summary: ${created} ${flags['dry-run'] ? 'would be created' : 'created'}, ${skipped} skipped`\n );\n }\n\n private async readUpstreamPackageJson(\n elementName: string\n ): Promise<Record<string, unknown> | null> {\n const upstreamPath = join(PIE_ELEMENTS_DIR, elementName, 'package.json');\n\n if (!existsSync(upstreamPath)) {\n return null;\n }\n\n try {\n const content = await readFile(upstreamPath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n }\n\n private generatePackageJson(\n elementName: string,\n upstreamPkg: Record<string, unknown>\n ): PackageTemplate {\n const deps: Record<string, string> = {};\n\n // Map upstream dependencies to workspace:* for @pie-lib packages\n const upstreamDeps = upstreamPkg.dependencies as Record<string, string> | undefined;\n if (upstreamDeps) {\n for (const [name] of Object.entries(upstreamDeps)) {\n if (name.startsWith('@pie-lib/')) {\n deps[name] = 'workspace:*';\n } else if (!name.startsWith('react') && name !== 'react-dom') {\n deps[name] = '*';\n }\n }\n }\n\n return {\n name: `@pie-element/${elementName}`,\n private: true,\n version: '0.1.0',\n description: `React implementation of ${elementName} element synced from pie-elements`,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n default: './dist/index.js',\n },\n },\n files: ['dist', 'src'],\n scripts: {\n dev: 'vite',\n build: 'vite build && tsc --emitDeclarationOnly',\n test: 'vitest run',\n lint: 'biome check .',\n 'lint:fix': 'biome check --write .',\n },\n dependencies: deps,\n peerDependencies: {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n },\n devDependencies: {\n '@types/react': '^18.2.0',\n '@types/react-dom': '^18.2.0',\n '@vitejs/plugin-react': '^4.2.0',\n typescript: '^5.9.3',\n vite: '^6.0.0',\n vitest: '^2.1.0',\n },\n keywords: ['pie', 'pie-element', 'react', 'assessment', elementName],\n license: 'ISC',\n repository: {\n type: 'git',\n url: 'https://github.com/pie-framework/pie-elements-ng.git',\n directory: `packages/elements-react/${elementName}`,\n },\n };\n }\n\n private generateViteConfig(): string {\n return `import { resolve } from 'node:path';\nimport react from '@vitejs/plugin-react';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n plugins: [react()],\n build: {\n lib: {\n entry: {\n index: resolve(__dirname, 'src/index.ts'),\n },\n formats: ['es'],\n },\n rollupOptions: {\n external: (id) => {\n return (\n /^react($|\\\\/)/.test(id) ||\n /^react-dom($|\\\\/)/.test(id) ||\n /^@pie-lib\\\\//.test(id) ||\n /^@pie-element\\\\//.test(id) ||\n /^@pie-framework\\\\//.test(id) ||\n /^@mui\\\\//.test(id) ||\n /^d3-/.test(id) ||\n id === 'lodash' ||\n /^lodash\\\\//.test(id) ||\n ['prop-types', 'debug'].includes(id)\n );\n },\n output: {\n preserveModules: true,\n preserveModulesRoot: 'src',\n },\n },\n },\n});\n`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"init-synced-elements.js","sourceRoot":"","sources":["../../../src/commands/packages/init-synced-elements.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport { Logger } from '../../utils/logger.js';\nimport { existsSync } from 'node:fs';\nimport { readdir, readFile, writeFile, stat as fsStat } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { elementSharedRuntimeDependencies } from '../../lib/upstream/sync-package-manager.js';\n\nconst ELEMENTS_REACT_DIR = 'packages/elements-react';\nconst PIE_ELEMENTS_DIR = '../pie-elements/packages';\n\ninterface PackageTemplate {\n name: string;\n private: boolean;\n version: string;\n description: string;\n type: string;\n main: string;\n types: string;\n exports: Record<string, unknown>;\n files: string[];\n scripts: Record<string, string>;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n keywords: string[];\n license: string;\n repository: {\n type: string;\n url: string;\n directory: string;\n };\n}\n\nexport default class InitSyncedElements extends Command {\n static override description =\n 'Initialize package.json and vite.config.ts files for synced React elements';\n\n static override examples = [\n '<%= config.bin %> <%= command.id %>',\n '<%= config.bin %> <%= command.id %> --element=categorize',\n '<%= config.bin %> <%= command.id %> --dry-run',\n ];\n\n static override flags = {\n element: Flags.string({\n description: 'Initialize only specified element',\n }),\n 'dry-run': Flags.boolean({\n description: 'Show what would be created without making changes',\n default: false,\n }),\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n };\n\n private logger = new Logger();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(InitSyncedElements);\n\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('🔧 Initializing synced React elements');\n\n if (flags['dry-run']) {\n this.logger.info(' Mode: DRY RUN\\n');\n }\n\n const elements = await readdir(ELEMENTS_REACT_DIR);\n let created = 0;\n let skipped = 0;\n\n for (const element of elements) {\n // Skip if filtering by element and this isn't it\n if (flags.element && element !== flags.element) {\n continue;\n }\n\n const elementDir = join(ELEMENTS_REACT_DIR, element);\n\n // Skip if not a directory\n const statResult = await fsStat(elementDir).catch(() => null);\n if (!statResult?.isDirectory()) {\n continue;\n }\n\n // Skip if src directory doesn't exist\n if (!existsSync(join(elementDir, 'src'))) {\n continue;\n }\n\n const packageJsonPath = join(elementDir, 'package.json');\n\n // Skip if package.json already exists\n if (existsSync(packageJsonPath)) {\n if (flags.verbose) {\n this.logger.info(` ⏭️ ${element}: package.json already exists`);\n }\n skipped++;\n continue;\n }\n\n // Read upstream package.json\n const upstreamPkg = await this.readUpstreamPackageJson(element);\n if (!upstreamPkg) {\n this.logger.warn(` ⚠️ ${element}: Could not read upstream package.json`);\n continue;\n }\n\n // Generate package.json\n const pkg = this.generatePackageJson(element, upstreamPkg);\n\n if (!flags['dry-run']) {\n await writeFile(packageJsonPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf-8');\n this.logger.success(` ✨ ${element}: Created package.json`);\n } else {\n this.logger.info(` 🔍 ${element}: Would create package.json`);\n }\n\n // Generate vite.config.ts\n const viteConfigPath = join(elementDir, 'vite.config.ts');\n if (!existsSync(viteConfigPath)) {\n if (!flags['dry-run']) {\n await writeFile(viteConfigPath, this.generateViteConfig(), 'utf-8');\n this.logger.success(` ✨ ${element}: Created vite.config.ts`);\n } else {\n this.logger.info(` 🔍 ${element}: Would create vite.config.ts`);\n }\n }\n\n created++;\n }\n\n this.logger.section(\n `\\n📊 Summary: ${created} ${flags['dry-run'] ? 'would be created' : 'created'}, ${skipped} skipped`\n );\n }\n\n private async readUpstreamPackageJson(\n elementName: string\n ): Promise<Record<string, unknown> | null> {\n const upstreamPath = join(PIE_ELEMENTS_DIR, elementName, 'package.json');\n\n if (!existsSync(upstreamPath)) {\n return null;\n }\n\n try {\n const content = await readFile(upstreamPath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n }\n\n private generatePackageJson(\n elementName: string,\n upstreamPkg: Record<string, unknown>\n ): PackageTemplate {\n const deps: Record<string, string> = {};\n\n // Map upstream dependencies to workspace:* for @pie-lib packages\n const upstreamDeps = upstreamPkg.dependencies as Record<string, string> | undefined;\n if (upstreamDeps) {\n for (const [name] of Object.entries(upstreamDeps)) {\n if (name.startsWith('@pie-lib/')) {\n deps[name] = 'workspace:*';\n } else if (!name.startsWith('react') && name !== 'react-dom') {\n deps[name] = '*';\n }\n }\n }\n\n return {\n name: `@pie-element/${elementName}`,\n private: true,\n version: '0.1.0',\n description: `React implementation of ${elementName} element synced from pie-elements`,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n default: './dist/index.js',\n },\n },\n files: ['dist', 'src'],\n scripts: {\n dev: 'vite',\n build: 'vite build && tsc --emitDeclarationOnly',\n test: 'vitest run',\n lint: 'biome check .',\n 'lint:fix': 'biome check --write .',\n },\n // React and React DOM are dependencies at the browser ESM policy version, never peers.\n dependencies: { ...deps, ...elementSharedRuntimeDependencies(process.cwd()) },\n devDependencies: {\n '@types/react': '^18.2.0',\n '@types/react-dom': '^18.2.0',\n '@vitejs/plugin-react': '^4.2.0',\n typescript: '^5.9.3',\n vite: '^6.0.0',\n vitest: '^2.1.0',\n },\n keywords: ['pie', 'pie-element', 'react', 'assessment', elementName],\n license: 'ISC',\n repository: {\n type: 'git',\n url: 'https://github.com/pie-framework/pie-elements-ng.git',\n directory: `packages/elements-react/${elementName}`,\n },\n };\n }\n\n private generateViteConfig(): string {\n return `import { resolve } from 'node:path';\nimport react from '@vitejs/plugin-react';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n plugins: [react()],\n build: {\n lib: {\n entry: {\n index: resolve(__dirname, 'src/index.ts'),\n },\n formats: ['es'],\n },\n rollupOptions: {\n external: (id) => {\n return (\n /^react($|\\\\/)/.test(id) ||\n /^react-dom($|\\\\/)/.test(id) ||\n /^@pie-lib\\\\//.test(id) ||\n /^@pie-element\\\\//.test(id) ||\n /^@pie-framework\\\\//.test(id) ||\n /^@mui\\\\//.test(id) ||\n /^d3-/.test(id) ||\n id === 'lodash' ||\n /^lodash\\\\//.test(id) ||\n ['prop-types', 'debug'].includes(id)\n );\n },\n output: {\n preserveModules: true,\n preserveModulesRoot: 'src',\n },\n },\n },\n});\n`;\n }\n}\n"]}
|
|
@@ -18,11 +18,3 @@ export type SubdirectoryType = 'src' | 'configure' | 'controller';
|
|
|
18
18
|
* @returns true if compatible or no report available, false if incompatible
|
|
19
19
|
*/
|
|
20
20
|
export declare function isSubdirectoryCompatible(elementName: string, subdir: SubdirectoryType, context: SyncContext): boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Check if an element is ESM-compatible overall
|
|
23
|
-
*/
|
|
24
|
-
export declare function isElementCompatible(elementName: string, context: SyncContext): boolean;
|
|
25
|
-
/**
|
|
26
|
-
* Get compatibility blockers for an element subdirectory
|
|
27
|
-
*/
|
|
28
|
-
export declare function getCompatibilityBlockers(elementName: string, subdir: SubdirectoryType, context: SyncContext): string[];
|
|
@@ -36,35 +36,4 @@ export function isSubdirectoryCompatible(elementName, subdir, context) {
|
|
|
36
36
|
return elementDetail.compatible;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
/**
|
|
40
|
-
* Check if an element is ESM-compatible overall
|
|
41
|
-
*/
|
|
42
|
-
export function isElementCompatible(elementName, context) {
|
|
43
|
-
if (!context.compatibilityReport) {
|
|
44
|
-
return true;
|
|
45
|
-
}
|
|
46
|
-
return context.compatibilityReport.elements.includes(elementName);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Get compatibility blockers for an element subdirectory
|
|
50
|
-
*/
|
|
51
|
-
export function getCompatibilityBlockers(elementName, subdir, context) {
|
|
52
|
-
if (!context.compatibilityReport) {
|
|
53
|
-
return [];
|
|
54
|
-
}
|
|
55
|
-
const elementDetail = context.compatibilityReport.elementDetails[elementName];
|
|
56
|
-
if (!elementDetail) {
|
|
57
|
-
return [];
|
|
58
|
-
}
|
|
59
|
-
switch (subdir) {
|
|
60
|
-
case 'configure':
|
|
61
|
-
return elementDetail.configure?.blockers ?? [];
|
|
62
|
-
case 'controller':
|
|
63
|
-
return elementDetail.controller?.blockers ?? [];
|
|
64
|
-
case 'src':
|
|
65
|
-
return elementDetail.studentUI?.blockers ?? [];
|
|
66
|
-
default:
|
|
67
|
-
return [];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
39
|
//# sourceMappingURL=sync-compatibility.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-compatibility.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-compatibility.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,MAAwB,EACxB,OAAoB;IAEpB,yEAAyE;IACzE,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,CAAC,2CAA2C;IAC1D,CAAC;IAED,4CAA4C;IAC5C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,aAAa,CAAC,SAAS,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QACzE,KAAK,YAAY;YACf,OAAO,aAAa,CAAC,UAAU,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QAC1E,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,SAAS,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QACzE;YACE,OAAO,aAAa,CAAC,UAAU,CAAC;IACpC,CAAC;AACH,CAAC
|
|
1
|
+
{"version":3,"file":"sync-compatibility.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-compatibility.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,MAAwB,EACxB,OAAoB;IAEpB,yEAAyE;IACzE,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,CAAC,2CAA2C;IAC1D,CAAC;IAED,4CAA4C;IAC5C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,aAAa,CAAC,SAAS,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QACzE,KAAK,YAAY;YACf,OAAO,aAAa,CAAC,UAAU,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QAC1E,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,SAAS,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QACzE;YACE,OAAO,aAAa,CAAC,UAAU,CAAC;IACpC,CAAC;AACH,CAAC","sourcesContent":["/**\n * Compatibility checking utilities for upstream sync operations\n *\n * Consolidates subdirectory-level ESM compatibility checks that were\n * duplicated across controllers-strategy and react-strategy.\n */\n\nimport type { SyncContext } from './sync-strategy.js';\n\nexport type SubdirectoryType = 'src' | 'configure' | 'controller';\n\n/**\n * Check if a subdirectory is ESM-compatible based on the compatibility report\n *\n * This function consolidates the duplicated compatibility checking logic from\n * ControllersStrategy and ReactComponentsStrategy.\n *\n * @param elementName - Name of the element (e.g., \"multiple-choice\")\n * @param subdir - Subdirectory to check (\"src\", \"configure\", or \"controller\")\n * @param context - Sync context containing the compatibility report\n * @returns true if compatible or no report available, false if incompatible\n */\nexport function isSubdirectoryCompatible(\n elementName: string,\n subdir: SubdirectoryType,\n context: SyncContext\n): boolean {\n // If no compatibility report, assume compatible (backward compatibility)\n if (!context.compatibilityReport) {\n return true;\n }\n\n const elementDetail = context.compatibilityReport.elementDetails[elementName];\n if (!elementDetail) {\n return true; // Element not in report, assume compatible\n }\n\n // Check subdirectory-specific compatibility\n switch (subdir) {\n case 'configure':\n return elementDetail.configure?.compatible ?? elementDetail.compatible;\n case 'controller':\n return elementDetail.controller?.compatible ?? elementDetail.compatible;\n case 'src':\n return elementDetail.studentUI?.compatible ?? elementDetail.compatible;\n default:\n return elementDetail.compatible;\n }\n}\n"]}
|
|
@@ -25,26 +25,16 @@ export declare const WORKSPACE: {
|
|
|
25
25
|
};
|
|
26
26
|
export declare const EXCLUDED_UPSTREAM_ELEMENTS: readonly ["boilerplate-item-type"];
|
|
27
27
|
export declare const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES: readonly ["math-rendering", "translator"];
|
|
28
|
+
export declare const RETIRED_UPSTREAM_SOURCE_FILES: ReadonlySet<string>;
|
|
28
29
|
export declare const BUILD_TOOLS: {
|
|
29
30
|
readonly VITE: "^8.0.1";
|
|
30
31
|
readonly TYPESCRIPT: "^5.9.3";
|
|
31
32
|
readonly VITE_REACT_PLUGIN: "^6.0.1";
|
|
32
33
|
};
|
|
33
34
|
export declare const REACT: {
|
|
34
|
-
readonly ELEMENT_PEER_RANGE: "^18.2.0 || ^19.0.0";
|
|
35
35
|
readonly LIBRARY_PEER_RANGE: "^18.0.0 || ^19.0.0";
|
|
36
36
|
readonly TYPES_VERSION: "^18.2.0";
|
|
37
37
|
};
|
|
38
|
-
export declare const SKIP_PATTERNS: {
|
|
39
|
-
readonly TEST_DIRS: readonly ["__tests__", "__mocks__"];
|
|
40
|
-
readonly FILE_EXTENSIONS: readonly [".js", ".jsx", ".ts", ".tsx"];
|
|
41
|
-
};
|
|
42
|
-
export declare const FILE_TYPES: {
|
|
43
|
-
readonly JS: ".js";
|
|
44
|
-
readonly JSX: ".jsx";
|
|
45
|
-
readonly TS: ".ts";
|
|
46
|
-
readonly TSX: ".tsx";
|
|
47
|
-
};
|
|
48
38
|
export declare const PACKAGE_DEFAULTS: {
|
|
49
39
|
readonly TYPE: "module";
|
|
50
40
|
readonly SIDE_EFFECTS: false;
|
|
@@ -32,31 +32,42 @@ export const EXCLUDED_UPSTREAM_ELEMENTS = ['boilerplate-item-type'];
|
|
|
32
32
|
// math-rendering stays local (wrapper re-exports shared MathJax adapter).
|
|
33
33
|
// translator lives in packages/shared: its strings serve the Svelte elements too.
|
|
34
34
|
export const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES = ['math-rendering', 'translator'];
|
|
35
|
+
// Upstream source files that sync does not re-emit. Each was reachable from no entry of its
|
|
36
|
+
// package and was deleted here; the values are the files' `@synced-from` paths.
|
|
37
|
+
export const RETIRED_UPSTREAM_SOURCE_FILES = new Set([
|
|
38
|
+
'pie-elements/packages/graphing/src/utils.js',
|
|
39
|
+
'pie-elements/packages/image-cloze-association/src/constants.js',
|
|
40
|
+
'pie-elements/packages/likert/src/session-updater.js',
|
|
41
|
+
'pie-elements/packages/match/configure/src/common.jsx',
|
|
42
|
+
'pie-elements/packages/matrix/src/session-updater.js',
|
|
43
|
+
'pie-elements/packages/number-line/src/number-line/point-chooser/styles.js',
|
|
44
|
+
'pie-elements/packages/placement-ordering/configure/src/help.jsx',
|
|
45
|
+
'pie-lib/packages/charting/src/tool-menu.jsx',
|
|
46
|
+
'pie-lib/packages/drag/src/drag-type.js',
|
|
47
|
+
'pie-lib/packages/drag/src/preview-component.jsx',
|
|
48
|
+
'pie-lib/packages/editable-html-tip-tap/src/components/media/MediaWrapper.jsx',
|
|
49
|
+
'pie-lib/packages/editable-html-tip-tap/src/styles/editorContainerStyles.js',
|
|
50
|
+
'pie-lib/packages/editable-html-tip-tap/src/theme.js',
|
|
51
|
+
'pie-lib/packages/graphing-solution-set/src/toggle-bar.jsx',
|
|
52
|
+
'pie-lib/packages/graphing-solution-set/src/tools/polygon/line.jsx',
|
|
53
|
+
'pie-lib/packages/graphing-solution-set/src/tools/shared/line/line-path.jsx',
|
|
54
|
+
'pie-lib/packages/graphing-solution-set/src/tools/shared/line/with-root-edge.jsx',
|
|
55
|
+
'pie-lib/packages/mask-markup/src/components/correct-input.jsx',
|
|
56
|
+
'pie-lib/packages/mask-markup/src/components/input.jsx',
|
|
57
|
+
'pie-lib/packages/math-input/src/math-input.jsx',
|
|
58
|
+
]);
|
|
35
59
|
// Build tool versions
|
|
36
60
|
export const BUILD_TOOLS = {
|
|
37
61
|
VITE: '^8.0.1',
|
|
38
62
|
TYPESCRIPT: '^5.9.3',
|
|
39
63
|
VITE_REACT_PLUGIN: '^6.0.1',
|
|
40
64
|
};
|
|
41
|
-
// React versions.
|
|
42
|
-
// version
|
|
65
|
+
// React versions. Library packages take React as a peer from the element that renders them;
|
|
66
|
+
// element packages depend on React at the browser ESM policy version and declare no React peer.
|
|
43
67
|
export const REACT = {
|
|
44
|
-
ELEMENT_PEER_RANGE: '^18.2.0 || ^19.0.0',
|
|
45
68
|
LIBRARY_PEER_RANGE: '^18.0.0 || ^19.0.0',
|
|
46
69
|
TYPES_VERSION: '^18.2.0',
|
|
47
70
|
};
|
|
48
|
-
// Directory patterns to skip
|
|
49
|
-
export const SKIP_PATTERNS = {
|
|
50
|
-
TEST_DIRS: ['__tests__', '__mocks__'],
|
|
51
|
-
FILE_EXTENSIONS: ['.js', '.jsx', '.ts', '.tsx'],
|
|
52
|
-
};
|
|
53
|
-
// File types
|
|
54
|
-
export const FILE_TYPES = {
|
|
55
|
-
JS: '.js',
|
|
56
|
-
JSX: '.jsx',
|
|
57
|
-
TS: '.ts',
|
|
58
|
-
TSX: '.tsx',
|
|
59
|
-
};
|
|
60
71
|
// Package.json defaults
|
|
61
72
|
export const PACKAGE_DEFAULTS = {
|
|
62
73
|
TYPE: 'module',
|
|
@@ -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/**\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.\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"]}
|
|
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.\nexport const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES = ['math-rendering', 'translator'] 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"]}
|
|
@@ -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
|
*
|
|
@@ -97,11 +81,6 @@ export declare function transformReactInputAutosizeToLocal(content: string, sour
|
|
|
97
81
|
* parsing.
|
|
98
82
|
*/
|
|
99
83
|
export declare function transformConfigUiMathjsToLocalFraction(content: string, sourcePath?: string): string;
|
|
100
|
-
/**
|
|
101
|
-
* Compatibility wrapper retained for older callers. Lodash imports now target
|
|
102
|
-
* the vendored shared package rather than lodash-es deep modules.
|
|
103
|
-
*/
|
|
104
|
-
export declare function transformLodashEsDeepImportsToFullySpecified(content: string): string;
|
|
105
84
|
/**
|
|
106
85
|
* Ensure known strict-ESM deep imports include explicit file extensions.
|
|
107
86
|
*
|