@pie-element/cli 0.1.2-next.2 → 0.1.2-next.4
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/upstream/sync.js +10 -14
- package/dist/commands/upstream/sync.js.map +1 -1
- package/dist/lib/upstream/sync-constants.d.ts +1 -1
- package/dist/lib/upstream/sync-constants.js +2 -1
- package/dist/lib/upstream/sync-constants.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/package.json +2 -2
|
@@ -10,6 +10,7 @@ import { readFile, stat as fsStat, writeFile } from 'node:fs/promises';
|
|
|
10
10
|
import { join } from 'node:path';
|
|
11
11
|
import { readdir } from '../../lib/upstream/sync-filesystem.js';
|
|
12
12
|
import { getAllDeps } from '../../lib/upstream/sync-package-json.js';
|
|
13
|
+
import { findWorkspacePieLibPackages } from '../../lib/upstream/workspace-pie-lib.js';
|
|
13
14
|
import { ControllersStrategy } from '../../lib/upstream/sync-controllers-strategy.js';
|
|
14
15
|
import { ReactComponentsStrategy } from '../../lib/upstream/sync-react-strategy.js';
|
|
15
16
|
import { PieLibStrategy } from '../../lib/upstream/sync-pielib-strategy.js';
|
|
@@ -605,8 +606,7 @@ export default class Sync extends Command {
|
|
|
605
606
|
// Internal workspace packages should stay workspace-linked.
|
|
606
607
|
if (dep.startsWith('@pie-lib/')) {
|
|
607
608
|
const libName = dep.replace('@pie-lib/', '');
|
|
608
|
-
|
|
609
|
-
if (existsSync(localPath)) {
|
|
609
|
+
if (findWorkspacePieLibPackages(config.pieElementsNg).has(libName)) {
|
|
610
610
|
return 'workspace:*';
|
|
611
611
|
}
|
|
612
612
|
}
|
|
@@ -707,16 +707,8 @@ export default class Sync extends Command {
|
|
|
707
707
|
const libReactDir = join(config.pieElementsNg, 'packages/lib-react');
|
|
708
708
|
const elementsReactDir = join(config.pieElementsNg, 'packages/elements-react');
|
|
709
709
|
const sharedDir = join(config.pieElementsNg, 'packages/shared');
|
|
710
|
-
const availableLibPackages = new Set();
|
|
710
|
+
const availableLibPackages = new Set(findWorkspacePieLibPackages(config.pieElementsNg).keys());
|
|
711
711
|
const availableElementPackages = new Set();
|
|
712
|
-
if (existsSync(libReactDir)) {
|
|
713
|
-
const libPackages = await readdir(libReactDir);
|
|
714
|
-
for (const pkg of libPackages) {
|
|
715
|
-
if (existsSync(join(libReactDir, pkg, 'package.json'))) {
|
|
716
|
-
availableLibPackages.add(pkg);
|
|
717
|
-
}
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
712
|
if (existsSync(elementsReactDir)) {
|
|
721
713
|
const elementPackages = await readdir(elementsReactDir);
|
|
722
714
|
for (const pkg of elementPackages) {
|
|
@@ -736,13 +728,17 @@ export default class Sync extends Command {
|
|
|
736
728
|
}
|
|
737
729
|
}
|
|
738
730
|
}
|
|
739
|
-
this.logger.info(` Found ${availableLibPackages.size} lib
|
|
731
|
+
this.logger.info(` Found ${availableLibPackages.size} @pie-lib packages`);
|
|
740
732
|
this.logger.info(` Found ${availableElementPackages.size} elements-react packages (including shared)\n`);
|
|
741
733
|
// Scan and rewrite package.json files
|
|
742
734
|
const packagesToCheck = [];
|
|
743
735
|
// Add lib-react packages
|
|
744
|
-
|
|
745
|
-
|
|
736
|
+
if (existsSync(libReactDir)) {
|
|
737
|
+
for (const pkg of await readdir(libReactDir)) {
|
|
738
|
+
if (existsSync(join(libReactDir, pkg, 'package.json'))) {
|
|
739
|
+
packagesToCheck.push(join(libReactDir, pkg));
|
|
740
|
+
}
|
|
741
|
+
}
|
|
746
742
|
}
|
|
747
743
|
// Add elements-react packages (non-shared)
|
|
748
744
|
if (existsSync(elementsReactDir)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/upstream/sync.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport { Logger } from '../../utils/logger.js';\nimport {\n formatCompatibilityReportLastAnalyzed,\n loadCompatibilityReport,\n type CompatibilityReport,\n} from '../../utils/compatibility.js';\nimport { getCurrentCommit } from '../../utils/git.js';\nimport { printSyncSummary, createEmptySummary } from '../../lib/upstream/sync-summary.js';\nimport { loadPackageJson, writePackageJson, type PackageJson } from '../../utils/package-json.js';\nimport { spawn } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { readFile, stat as fsStat, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { readdir } from '../../lib/upstream/sync-filesystem.js';\nimport { getAllDeps } from '../../lib/upstream/sync-package-json.js';\nimport { ControllersStrategy } from '../../lib/upstream/sync-controllers-strategy.js';\nimport { ReactComponentsStrategy } from '../../lib/upstream/sync-react-strategy.js';\nimport { PieLibStrategy } from '../../lib/upstream/sync-pielib-strategy.js';\nimport type { SyncStrategy, SyncContext } from '../../lib/upstream/sync-strategy.js';\nimport { DEFAULT_PATHS, COMPATIBILITY_FILE, WORKSPACE } from '../../lib/upstream/sync-constants.js';\nimport { assertReposExist } from '../../lib/upstream/repo-utils.js';\nimport { rewriteRelativeSpecifiersForNodeEsm } from '../../lib/upstream/sync-imports.js';\nimport {\n analyzePackageDependencyIntegrity,\n collectWorkspacePackageDirs,\n type ImportIntegrityStatus,\n} from '../../utils/dependency-integrity.js';\nimport { getPostSyncTextPatches } from '../../lib/upstream/sync-presets.js';\n\ninterface SyncConfig {\n pieElements: string;\n pieLib: string;\n pieElementsNg: string;\n\n // What to sync\n syncControllers: boolean;\n syncReactComponents: boolean;\n syncPieLibPackages: boolean;\n\n // Filters\n elements?: string[];\n pieLibPackages?: string[];\n elementsSpecifiedByUser: boolean;\n pieLibPackagesSpecifiedByUser: boolean;\n\n // ESM compatibility\n useEsmFilter: boolean;\n compatibilityFile: string;\n\n // Options\n dryRun: boolean;\n verbose: boolean;\n rewritePackageJson: boolean;\n skipBuild: boolean;\n\n // Internal: auto-sync pie-lib deps for selected elements\n autoSyncPieLibDeps: boolean;\n}\n\ninterface SyncResult {\n filesChecked: number;\n filesCopied: number;\n filesSkipped: number;\n filesUpdated: number;\n errors: string[];\n warnings: string[];\n}\n\ninterface DependencyIntegrityRegression {\n packageName: string;\n packagePath: string;\n dependency: string;\n status: Exclude<ImportIntegrityStatus, 'direct' | 'transitive'>;\n}\n\ninterface DependencyAutoFixResult {\n packagesUpdated: number;\n dependenciesAdded: number;\n unresolved: Array<{ packageName: string; dependency: string }>;\n}\n\nexport default class Sync extends Command {\n static override description = 'Synchronize code from upstream pie-elements repository';\n\n static override examples = [\n '<%= config.bin %> <%= command.id %> --dry-run',\n '<%= config.bin %> <%= command.id %> --element=multiple-choice',\n '<%= config.bin %> <%= command.id %>',\n ];\n\n static override flags = {\n 'dry-run': Flags.boolean({\n description: 'Show what would be synced without making changes',\n default: false,\n }),\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n element: Flags.string({\n description: 'Sync only specified element (if ESM-compatible)',\n }),\n };\n\n private logger = new Logger();\n private touchedElementPackages = new Set<string>();\n private touchedPieLibPackages = new Set<string>();\n private preSyncProblemIntegrityByImport = new Map<string, ImportIntegrityStatus>();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Sync);\n\n this.logger = new Logger(flags.verbose);\n\n const config: SyncConfig = {\n pieElements: DEFAULT_PATHS.PIE_ELEMENTS,\n pieLib: DEFAULT_PATHS.PIE_LIB,\n pieElementsNg: DEFAULT_PATHS.PIE_ELEMENTS_NG,\n syncControllers: true,\n syncReactComponents: true,\n syncPieLibPackages: false,\n useEsmFilter: true,\n compatibilityFile: COMPATIBILITY_FILE,\n dryRun: flags['dry-run'],\n verbose: flags.verbose,\n rewritePackageJson: true,\n skipBuild: false,\n autoSyncPieLibDeps: true,\n elementsSpecifiedByUser: !!flags.element,\n pieLibPackagesSpecifiedByUser: false,\n };\n\n // Configure filters\n if (flags.element) {\n config.elements = [flags.element];\n }\n\n await this.syncUpstream(config);\n }\n\n private async syncUpstream(config: SyncConfig): Promise<void> {\n const syncSummary = createEmptySummary();\n\n const result: SyncResult = {\n filesChecked: 0,\n filesCopied: 0,\n filesSkipped: 0,\n filesUpdated: 0,\n errors: [],\n warnings: [],\n };\n\n // Reset touched packages for this run\n this.touchedElementPackages = new Set<string>();\n this.touchedPieLibPackages = new Set<string>();\n this.preSyncProblemIntegrityByImport = new Map<string, ImportIntegrityStatus>();\n\n this.logger.section('🔄 Syncing from upstream');\n this.logger.info(` Source: ${config.pieElements}`);\n this.logger.info(` Destination: ${config.pieElementsNg}/packages/`);\n this.logger.info(` Mode: ${config.dryRun ? 'DRY RUN' : 'LIVE'}\\n`);\n\n // Apply ESM compatibility filter (also returns report for summary)\n const compatibilityReport = await this.applyEsmFilter(config);\n\n // Auto-sync pie-lib dependencies for selected elements (unless explicit pie-lib mode)\n if (config.autoSyncPieLibDeps) {\n const elementsToSync = await this.listElementPackages(config);\n const requiredPieLib = await this.collectPieLibDepsFromElements(config, elementsToSync);\n if (requiredPieLib.length > 0) {\n config.syncPieLibPackages = true;\n config.pieLibPackages = requiredPieLib;\n if (config.verbose) {\n this.logger.info(\n ` Auto pie-lib deps: ${requiredPieLib.length} package(s) required by selected elements`\n );\n }\n }\n }\n\n // Merge with ESM-compatible pie-lib packages from compatibility report\n // (This ensures packages like controller-utils that are imported in controllers but not declared in package.json get synced)\n // BUT: Only merge ALL packages when doing a full sync (no specific elements specified)\n // When syncing specific elements, only sync the required deps (don't merge all 23 compat packages)\n if (compatibilityReport?.pieLibPackages && compatibilityReport.pieLibPackages.length > 0) {\n config.syncPieLibPackages = true;\n const autoDeps = new Set(config.pieLibPackages || []);\n\n // Only merge all compatible packages when doing a full sync\n if (!config.elementsSpecifiedByUser) {\n const compatiblePkgs = compatibilityReport.pieLibPackages;\n const merged = new Set([...autoDeps, ...compatiblePkgs]);\n config.pieLibPackages = Array.from(merged);\n\n const additionalCount = config.pieLibPackages.length - autoDeps.size;\n if (config.verbose && additionalCount > 0) {\n this.logger.info(\n ` Additional ESM-compatible pie-lib: ${additionalCount} package(s) from compatibility report`\n );\n }\n } else {\n // For targeted element sync, only sync required deps (don't bloat with all 23 packages)\n if (config.verbose && autoDeps.size > 0) {\n this.logger.info(\n ` Targeted sync: ${autoDeps.size} pie-lib package(s) required by ${config.elements?.[0]}`\n );\n }\n }\n }\n\n // Verify repos exist\n try {\n assertReposExist([{ label: 'pie-elements', path: config.pieElements }]);\n } catch (error) {\n this.logger.error(error instanceof Error ? error.message : String(error));\n this.error('Sync failed', { exit: 1 });\n }\n\n if (config.dryRun) {\n this.logger.section('🧪 Dry run');\n this.logger.info(' No files will be modified.');\n\n const elementsPlanned = config.syncReactComponents\n ? await this.listElementPackages(config)\n : [];\n const pieLibPlanned =\n config.syncPieLibPackages && config.pieLibPackages ? [...config.pieLibPackages] : [];\n\n syncSummary.controllersSync = config.syncControllers ? elementsPlanned.length : 0;\n syncSummary.reactComponentsSynced = elementsPlanned.length;\n syncSummary.pieLibPackagesSynced = pieLibPlanned.length;\n syncSummary.totalPackagesSynced = elementsPlanned.length + pieLibPlanned.length;\n syncSummary.syncedPackageNames = [\n ...elementsPlanned,\n ...pieLibPlanned.map((pkg) => `@pie-lib/${pkg}`),\n ];\n\n if (compatibilityReport) {\n syncSummary.blockedElements = Object.keys(compatibilityReport.blockedElements).length;\n syncSummary.blockedPieLib = Object.values(compatibilityReport.pieLibDetails).filter(\n (d) => !d.compatible\n ).length;\n }\n\n printSyncSummary(syncSummary, compatibilityReport, config.pieElementsNg, this.logger);\n return;\n }\n\n // Capture current dependency integrity gaps before sync so we only fail on new regressions.\n this.preSyncProblemIntegrityByImport =\n await this.captureCurrentProblemIntegrityBaseline(config);\n\n // Clean target directories first (ensures a clean slate for full syncs)\n await this.cleanTargetDirectories(config);\n\n // Execute sync strategies\n const strategies: SyncStrategy[] = [\n new ControllersStrategy(),\n new ReactComponentsStrategy(),\n new PieLibStrategy(),\n ];\n\n const context: SyncContext = {\n config: {\n pieElements: config.pieElements,\n pieLib: config.pieLib,\n pieElementsNg: config.pieElementsNg,\n syncControllers: config.syncControllers,\n syncReactComponents: config.syncReactComponents,\n syncPieLib: config.syncPieLibPackages,\n pieLibPackages: config.pieLibPackages,\n skipDemos: true,\n dryRun: config.dryRun,\n upstreamCommit: getCurrentCommit(config.pieElements),\n },\n logger: this.logger,\n // Only set packageFilter if user explicitly specified a single element\n packageFilter: config.elementsSpecifiedByUser ? config.elements?.[0] : undefined,\n compatibilityReport: compatibilityReport || undefined,\n };\n\n for (const strategy of strategies) {\n if (strategy.shouldRun(context.config)) {\n const result = await strategy.execute(context);\n\n // Track by strategy type\n const desc = strategy.getDescription();\n if (desc === 'controllers') {\n syncSummary.controllersSync = result.count;\n } else if (desc === 'React components') {\n syncSummary.reactComponentsSynced = result.count;\n // Track touched React element packages for build\n for (const pkgName of result.packageNames) {\n // Only add element packages (not @pie-lib packages)\n if (!pkgName.startsWith('@pie-lib/')) {\n this.touchedElementPackages.add(pkgName);\n }\n }\n } else if (desc === '@pie-lib packages') {\n syncSummary.pieLibPackagesSynced = result.count;\n // Track touched pie-lib packages for build\n for (const pkgName of result.packageNames) {\n if (pkgName.startsWith('@pie-lib/')) {\n const libName = pkgName.replace('@pie-lib/', '');\n this.touchedPieLibPackages.add(libName);\n }\n }\n }\n syncSummary.totalPackagesSynced += result.count;\n // Add unique package names (avoid duplicates from multiple strategies syncing same package)\n for (const pkgName of result.packageNames) {\n if (!syncSummary.syncedPackageNames.includes(pkgName)) {\n syncSummary.syncedPackageNames.push(pkgName);\n }\n }\n }\n }\n\n // Ensure external dependencies from synced packages are available at repo root.\n if (!config.dryRun) {\n await this.rewriteWorkspaceDependencies(config);\n }\n\n // Auto-fix missing direct dependency declarations in touched package manifests.\n // This makes sync resilient to upstream package.json drift.\n {\n const autoFix = await this.autoFixTouchedPackageDependencyDeclarations(config);\n if (autoFix.unresolved.length > 0) {\n for (const unresolved of autoFix.unresolved) {\n result.warnings.push(\n `Could not infer version for ${unresolved.dependency} in ${unresolved.packageName}`\n );\n }\n }\n }\n\n // Apply targeted post-sync source patches for known declaration-emit issues.\n if (!config.dryRun) {\n await this.applyPostSyncBuildStabilizers(config);\n }\n\n // Normalize relative ESM specifiers to explicit .js paths for NodeNext.\n if (!config.dryRun) {\n await this.applyNodeEsmSpecifierRewrites(config);\n }\n\n // Verify synced packages for dependency integrity regressions (broken/hoist-reliant imports).\n // This catches runtime failures like unresolved \"prop-types\" and newly introduced hoist reliance.\n {\n const integrityRegressions = await this.verifyTouchedPackageDependencyIntegrity(config);\n if (integrityRegressions.length > 0) {\n for (const issue of integrityRegressions) {\n result.errors.push(\n `${issue.packageName} (${issue.packagePath}) has new ${issue.status} dependency: ${issue.dependency}`\n );\n }\n }\n }\n\n // Build by default (unless dry-run or explicitly skipped)\n if (!config.dryRun && !config.skipBuild && result.errors.length === 0) {\n await this.buildTouchedPackages(config, result);\n }\n\n // Add blocked package counts from compatibility report\n if (compatibilityReport) {\n syncSummary.blockedElements = Object.keys(compatibilityReport.blockedElements).length;\n syncSummary.blockedPieLib = Object.values(compatibilityReport.pieLibDetails).filter(\n (d) => !d.compatible\n ).length;\n }\n\n // Demo metadata generation removed - demos are now tracked in git\n // and managed directly in this repository (not synced from upstream)\n\n // Print summary and handle errors\n printSyncSummary(syncSummary, compatibilityReport, config.pieElementsNg, this.logger);\n\n if (result.warnings.length > 0) {\n this.logger.warn('Sync completed with warnings:');\n for (const warning of result.warnings) {\n this.logger.warn(` - ${warning}`);\n }\n this.log('');\n }\n\n if (result.errors.length > 0) {\n this.error('Sync completed with errors', { exit: 1 });\n }\n }\n\n private async applyEsmFilter(config: SyncConfig): Promise<CompatibilityReport | null> {\n if (!config.useEsmFilter) {\n return null;\n }\n\n let report: CompatibilityReport | null = null;\n try {\n report = await loadCompatibilityReport(config.compatibilityFile);\n } catch (error) {\n this.logger.warn(`⚠️ ESM compatibility file not found at ${config.compatibilityFile}`);\n this.logger.warn(' Run: bun cli upstream:analyze-esm to generate it');\n this.logger.warn(' Proceeding without ESM filter...\\n');\n return null;\n }\n\n if (!report) {\n return null;\n }\n\n this.logger.info(`📋 Using ESM compatibility filter from ${config.compatibilityFile}`);\n this.logger.info(` Last analyzed: ${formatCompatibilityReportLastAnalyzed(report)}`);\n this.logger.info(` Compatible elements: ${report.elements.length}`);\n this.logger.info(` Compatible pie-lib packages: ${report.pieLibPackages.length}`);\n\n if (Object.keys(report.blockedElements).length > 0) {\n this.logger.info(` Blocked elements: ${Object.keys(report.blockedElements).length}`);\n }\n this.log('');\n\n // If user hasn't specified elements, use the compatible list\n if (!config.elements) {\n config.elements = report.elements;\n } else {\n // User specified elements - filter to only compatible ones\n const incompatible = config.elements.filter((el) => !report.elements.includes(el));\n if (incompatible.length > 0) {\n this.logger.warn('⚠️ Warning: These elements are not ESM-compatible and will be skipped:');\n for (const el of incompatible) {\n const blockers = report.blockedElements[el] || [];\n this.logger.warn(` - ${el}${blockers.length > 0 ? `: ${blockers[0]}` : ''}`);\n }\n this.log('');\n config.elements = config.elements.filter((el) => report.elements.includes(el));\n }\n }\n\n // If syncing pie-lib packages, use the compatible list\n if (config.syncPieLibPackages && !config.pieLibPackages) {\n config.pieLibPackages = report.pieLibPackages;\n }\n\n return report;\n }\n\n private async listElementPackages(config: SyncConfig): Promise<string[]> {\n if (config.elements && config.elements.length > 0) {\n return config.elements;\n }\n\n const upstreamElementsDir = join(config.pieElements, 'packages');\n return await readdir(upstreamElementsDir);\n }\n\n private async collectPieLibDepsFromElements(\n config: SyncConfig,\n elements: string[]\n ): Promise<string[]> {\n const deps = new Set<string>();\n\n for (const element of elements) {\n const pkgPath = join(config.pieElements, 'packages', element, 'package.json');\n if (!existsSync(pkgPath)) {\n continue;\n }\n const pkg = (await loadPackageJson(pkgPath)) as PackageJson | null;\n const pkgDeps = getAllDeps(pkg);\n for (const name of Object.keys(pkgDeps)) {\n if (name.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n deps.add(name.replace(WORKSPACE.PIE_LIB_PREFIX, ''));\n }\n }\n }\n\n return await this.expandPieLibDeps(config, Array.from(deps));\n }\n\n private async expandPieLibDeps(config: SyncConfig, initial: string[]): Promise<string[]> {\n const seen = new Set<string>();\n const queue = [...initial];\n\n while (queue.length > 0) {\n const pkg = queue.shift();\n if (!pkg || seen.has(pkg)) continue;\n seen.add(pkg);\n\n const pkgPath = join(config.pieLib, 'packages', pkg, 'package.json');\n if (!existsSync(pkgPath)) continue;\n const pkgJson = (await loadPackageJson(pkgPath)) as PackageJson | null;\n const deps = getAllDeps(pkgJson);\n for (const name of Object.keys(deps)) {\n if (name.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n const depName = name.replace(WORKSPACE.PIE_LIB_PREFIX, '');\n if (!seen.has(depName)) queue.push(depName);\n }\n }\n }\n\n return Array.from(seen).sort();\n }\n\n private async cleanTargetDirectories(config: SyncConfig): Promise<void> {\n if (!config.useEsmFilter || config.dryRun) return;\n\n // NOTE: We intentionally do NOT delete the entire packages/elements-react/ directory\n // because that would delete locally-maintained content like docs/demo/config.mjs files.\n // Instead, each sync strategy (ReactComponentsStrategy, PieLibStrategy, etc.) handles\n // cleaning individual package directories while preserving specific subdirectories\n // (like docs/ and controller/).\n //\n // This approach ensures:\n // 1. Demo configs (docs/demo/*.mjs) are preserved across syncs\n // 2. Controllers (src/controller/) are preserved during React component sync\n // 3. Only the files that need updating are touched\n }\n\n private async checkViteAvailable(config: SyncConfig): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n const child = spawn('bun', ['x', 'vite', '--version'], {\n cwd: config.pieElementsNg,\n stdio: 'pipe',\n env: process.env,\n });\n let output = '';\n child.stdout?.on('data', (data) => {\n output += data.toString();\n });\n child.stderr?.on('data', (data) => {\n output += data.toString();\n });\n child.on('close', (code) => {\n resolve(code === 0);\n });\n child.on('error', () => {\n resolve(false);\n });\n });\n }\n\n private async verifyTouchedPackageDependencyIntegrity(\n config: SyncConfig\n ): Promise<DependencyIntegrityRegression[]> {\n this.logger.section('🔎 Verifying dependency integrity regressions');\n\n const packageDirs: string[] = [];\n for (const element of this.touchedElementPackages) {\n packageDirs.push(join(config.pieElementsNg, 'packages/elements-react', element));\n }\n for (const pieLib of this.touchedPieLibPackages) {\n packageDirs.push(join(config.pieElementsNg, 'packages/lib-react', pieLib));\n }\n\n if (packageDirs.length === 0) {\n this.logger.info(' No touched packages to verify\\n');\n return [];\n }\n\n const regressions: DependencyIntegrityRegression[] = [];\n let existingIssuesIgnored = 0;\n\n for (const packageDir of packageDirs) {\n const analysis = await analyzePackageDependencyIntegrity(packageDir);\n if (!analysis) {\n continue;\n }\n\n for (const issue of analysis.issues) {\n if (issue.status !== 'broken' && issue.status !== 'hoist') {\n continue;\n }\n\n const key = this.integrityIssueKey(analysis.packageName, issue.dependency);\n const previous = this.preSyncProblemIntegrityByImport.get(key);\n\n if (previous === issue.status) {\n existingIssuesIgnored++;\n continue;\n }\n\n regressions.push({\n packageName: analysis.packageName,\n packagePath: analysis.packagePath,\n dependency: issue.dependency,\n status: issue.status,\n });\n }\n }\n\n if (regressions.length === 0) {\n if (existingIssuesIgnored > 0) {\n this.logger.info(\n ` ✓ No new broken/hoist regressions (ignored ${existingIssuesIgnored} pre-existing issue(s))\\n`\n );\n } else {\n this.logger.info(` ✓ No broken/hoist dependency integrity regressions\\n`);\n }\n return [];\n }\n\n this.logger.error(` Found ${regressions.length} new dependency integrity regression(s):\\n`);\n for (const regression of regressions) {\n this.logger.error(\n ` - ${regression.packageName}: ${regression.status} -> ${regression.dependency}`\n );\n }\n this.log('');\n\n return regressions;\n }\n\n private async captureCurrentProblemIntegrityBaseline(\n config: SyncConfig\n ): Promise<Map<string, ImportIntegrityStatus>> {\n const baseline = new Map<string, ImportIntegrityStatus>();\n const packageDirs = await collectWorkspacePackageDirs(config.pieElementsNg);\n\n for (const packageDir of packageDirs) {\n const analysis = await analyzePackageDependencyIntegrity(packageDir);\n if (!analysis) {\n continue;\n }\n\n for (const issue of analysis.issues) {\n if (issue.status === 'broken' || issue.status === 'hoist') {\n baseline.set(\n this.integrityIssueKey(analysis.packageName, issue.dependency),\n issue.status\n );\n }\n }\n }\n\n return baseline;\n }\n\n private integrityIssueKey(packageName: string, dependency: string): string {\n return `${packageName}::${dependency}`;\n }\n\n private async autoFixTouchedPackageDependencyDeclarations(\n config: SyncConfig\n ): Promise<DependencyAutoFixResult> {\n this.logger.section('🛠️ Auto-fixing dependency declarations');\n\n const packageDirs = this.getTouchedPackageDirs(config);\n if (packageDirs.length === 0) {\n this.logger.info(' No touched packages to auto-fix\\n');\n return { packagesUpdated: 0, dependenciesAdded: 0, unresolved: [] };\n }\n\n const catalog = await this.buildDependencyVersionCatalog(config.pieElementsNg);\n let packagesUpdated = 0;\n let dependenciesAdded = 0;\n const unresolved: Array<{ packageName: string; dependency: string }> = [];\n\n for (const packageDir of packageDirs) {\n const analysis = await analyzePackageDependencyIntegrity(packageDir);\n if (!analysis) continue;\n\n const pkgJsonPath = join(packageDir, 'package.json');\n const pkgJson = (await loadPackageJson(pkgJsonPath)) as PackageJson | null;\n if (!pkgJson) continue;\n\n const declared = new Set<string>([\n ...Object.keys(pkgJson.dependencies || {}),\n ...Object.keys(pkgJson.devDependencies || {}),\n ...Object.keys((pkgJson.peerDependencies as Record<string, string> | undefined) || {}),\n ...Object.keys((pkgJson.optionalDependencies as Record<string, string> | undefined) || {}),\n ]);\n\n let modified = false;\n if (!pkgJson.dependencies) {\n pkgJson.dependencies = {};\n }\n\n for (const issue of analysis.issues) {\n const dep = issue.dependency;\n if (declared.has(dep)) {\n continue;\n }\n\n const version = this.resolveDependencyVersion(config, dep, catalog);\n if (!version) {\n unresolved.push({ packageName: analysis.packageName, dependency: dep });\n continue;\n }\n\n pkgJson.dependencies[dep] = version;\n declared.add(dep);\n modified = true;\n dependenciesAdded++;\n }\n\n if (modified) {\n await writePackageJson(pkgJsonPath, pkgJson);\n packagesUpdated++;\n }\n }\n\n if (dependenciesAdded === 0 && unresolved.length === 0) {\n this.logger.info(' ✓ No missing declarations detected in touched packages\\n');\n return { packagesUpdated, dependenciesAdded, unresolved };\n }\n\n if (dependenciesAdded > 0) {\n this.logger.info(\n ` ✓ Added ${dependenciesAdded} dependency declaration(s) in ${packagesUpdated} package(s)`\n );\n }\n if (unresolved.length > 0) {\n this.logger.warn(` Could not infer ${unresolved.length} dependency version(s)`);\n }\n this.log('');\n\n return { packagesUpdated, dependenciesAdded, unresolved };\n }\n\n private getTouchedPackageDirs(config: SyncConfig): string[] {\n const dirs: string[] = [];\n for (const element of this.touchedElementPackages) {\n dirs.push(join(config.pieElementsNg, 'packages/elements-react', element));\n }\n for (const pieLib of this.touchedPieLibPackages) {\n dirs.push(join(config.pieElementsNg, 'packages/lib-react', pieLib));\n }\n return dirs.sort();\n }\n\n private async buildDependencyVersionCatalog(rootDir: string): Promise<Map<string, string>> {\n const catalog = new Map<string, string>();\n\n const addVersions = (record?: Record<string, string>) => {\n if (!record) return;\n for (const [name, version] of Object.entries(record)) {\n if (!catalog.has(name)) {\n catalog.set(name, version);\n }\n }\n };\n\n // Root package.json has the canonical versions we prefer.\n const rootPkgPath = join(rootDir, 'package.json');\n if (existsSync(rootPkgPath)) {\n const rootPkg = (await loadPackageJson(rootPkgPath)) as PackageJson | null;\n if (rootPkg) {\n addVersions(rootPkg.dependencies as Record<string, string> | undefined);\n addVersions(rootPkg.devDependencies as Record<string, string> | undefined);\n }\n }\n\n // Add versions seen across workspace package manifests as fallback.\n const workspacePackageDirs = await collectWorkspacePackageDirs(rootDir);\n for (const packageDir of workspacePackageDirs) {\n const pkgPath = join(packageDir, 'package.json');\n if (!existsSync(pkgPath)) continue;\n const pkg = (await loadPackageJson(pkgPath)) as PackageJson | null;\n if (!pkg) continue;\n addVersions(pkg.dependencies as Record<string, string> | undefined);\n addVersions(pkg.devDependencies as Record<string, string> | undefined);\n addVersions(pkg.peerDependencies as Record<string, string> | undefined);\n addVersions(pkg.optionalDependencies as Record<string, string> | undefined);\n }\n\n return catalog;\n }\n\n private resolveDependencyVersion(\n config: SyncConfig,\n dep: string,\n catalog: Map<string, string>\n ): string | null {\n const fallbackVersions: Record<string, string> = {\n 'js-combinatorics': '^2.1.2',\n '@testing-library/react': '^16.3.0',\n '@testing-library/dom': '^10.4.1',\n '@tiptap/extensions': '^3.20.0',\n '@tiptap/extension-list': '^3.20.0',\n '@tiptap/extension-code-block': '^3.20.0',\n 'nested-property': '^4.0.0',\n 'prosemirror-state': '^1.4.4',\n 'react-is': '^19.2.0',\n pluralize: '^8.0.0',\n };\n\n // Internal workspace packages should stay workspace-linked.\n if (dep.startsWith('@pie-lib/')) {\n const libName = dep.replace('@pie-lib/', '');\n const localPath = join(config.pieElementsNg, 'packages/lib-react', libName, 'package.json');\n if (existsSync(localPath)) {\n return 'workspace:*';\n }\n }\n\n if (dep.startsWith('@pie-element/')) {\n const elementName = dep.replace('@pie-element/', '');\n const elementPath = join(\n config.pieElementsNg,\n 'packages/elements-react',\n elementName,\n 'package.json'\n );\n if (existsSync(elementPath)) {\n return 'workspace:*';\n }\n\n // Shared packages map @pie-element/shared-foo -> packages/shared/foo.\n if (elementName.startsWith('shared-')) {\n const sharedName = elementName.replace('shared-', '');\n const sharedPath = join(\n config.pieElementsNg,\n 'packages/shared',\n sharedName,\n 'package.json'\n );\n if (existsSync(sharedPath)) {\n return 'workspace:*';\n }\n }\n }\n\n return catalog.get(dep) || fallbackVersions[dep] || null;\n }\n\n private async applyPostSyncBuildStabilizers(config: SyncConfig): Promise<void> {\n let appliedPatches = 0;\n\n const patchFile = async (\n filePath: string,\n replacements: Array<{ from: string; to: string }>,\n label: string\n ): Promise<boolean> => {\n if (!existsSync(filePath)) {\n return false;\n }\n\n let content = await readFile(filePath, 'utf-8');\n let changed = false;\n for (const replacement of replacements) {\n if (content.includes(replacement.from)) {\n content = content.replace(replacement.from, replacement.to);\n changed = true;\n }\n }\n\n if (changed) {\n await writeFile(filePath, content, 'utf-8');\n this.logger.info(` ✓ Applied post-sync patch: ${label}`);\n }\n\n return changed;\n };\n\n const patches = getPostSyncTextPatches(config.pieElementsNg);\n for (const patch of patches) {\n if (await patchFile(patch.file, patch.replacements, patch.label)) {\n appliedPatches++;\n }\n }\n\n if (appliedPatches === 0) {\n this.logger.info(' ✓ No post-sync stabilizer patches needed');\n }\n }\n\n private async applyNodeEsmSpecifierRewrites(config: SyncConfig): Promise<void> {\n this.logger.section('🔧 Rewriting relative ESM specifiers');\n\n const packageDirs = this.getTouchedPackageDirs(config);\n if (packageDirs.length === 0) {\n this.logger.info(' No touched packages to rewrite\\n');\n return;\n }\n\n let checkedFiles = 0;\n let rewrittenFiles = 0;\n\n for (const packageDir of packageDirs) {\n const sourceDir = join(packageDir, 'src');\n const sourceFiles = await this.collectTypeScriptSourceFiles(sourceDir);\n for (const filePath of sourceFiles) {\n checkedFiles++;\n if (await rewriteRelativeSpecifiersForNodeEsm(filePath)) {\n rewrittenFiles++;\n }\n }\n }\n\n if (rewrittenFiles === 0) {\n this.logger.info(` ✓ Specifiers already normalized (${checkedFiles} file(s) checked)\\n`);\n return;\n }\n\n this.logger.info(` ✓ Rewrote ${rewrittenFiles} file(s) out of ${checkedFiles} checked\\n`);\n }\n\n private async collectTypeScriptSourceFiles(dir: string): Promise<string[]> {\n if (!existsSync(dir)) {\n return [];\n }\n\n const files: string[] = [];\n const items = await readdir(dir);\n for (const item of items) {\n const fullPath = join(dir, item);\n const stats = await fsStat(fullPath);\n if (stats.isDirectory()) {\n files.push(...(await this.collectTypeScriptSourceFiles(fullPath)));\n continue;\n }\n\n if (item.endsWith('.ts') || item.endsWith('.tsx')) {\n files.push(fullPath);\n }\n }\n\n return files;\n }\n\n private async rewriteWorkspaceDependencies(config: SyncConfig): Promise<void> {\n this.logger.section('🔧 Rewriting workspace dependencies');\n\n // Discover available packages in the workspace\n const libReactDir = join(config.pieElementsNg, 'packages/lib-react');\n const elementsReactDir = join(config.pieElementsNg, 'packages/elements-react');\n const sharedDir = join(config.pieElementsNg, 'packages/shared');\n\n const availableLibPackages = new Set<string>();\n const availableElementPackages = new Set<string>();\n\n if (existsSync(libReactDir)) {\n const libPackages = await readdir(libReactDir);\n for (const pkg of libPackages) {\n if (existsSync(join(libReactDir, pkg, 'package.json'))) {\n availableLibPackages.add(pkg);\n }\n }\n }\n\n if (existsSync(elementsReactDir)) {\n const elementPackages = await readdir(elementsReactDir);\n for (const pkg of elementPackages) {\n if (existsSync(join(elementsReactDir, pkg, 'package.json'))) {\n availableElementPackages.add(pkg);\n }\n }\n }\n\n // Also scan shared packages - these are @pie-element/shared-* packages\n if (existsSync(sharedDir)) {\n const sharedPackages = await readdir(sharedDir);\n for (const pkg of sharedPackages) {\n if (existsSync(join(sharedDir, pkg, 'package.json'))) {\n // Shared packages use the pattern @pie-element/shared-{name}\n // But the directory is just {name}, so we need to add the \"shared-\" prefix\n availableElementPackages.add(`shared-${pkg}`);\n }\n }\n }\n\n this.logger.info(` Found ${availableLibPackages.size} lib-react packages`);\n this.logger.info(\n ` Found ${availableElementPackages.size} elements-react packages (including shared)\\n`\n );\n\n // Scan and rewrite package.json files\n const packagesToCheck: string[] = [];\n\n // Add lib-react packages\n for (const pkg of availableLibPackages) {\n packagesToCheck.push(join(libReactDir, pkg));\n }\n\n // Add elements-react packages (non-shared)\n if (existsSync(elementsReactDir)) {\n const elementPackages = await readdir(elementsReactDir);\n for (const pkg of elementPackages) {\n if (existsSync(join(elementsReactDir, pkg, 'package.json'))) {\n packagesToCheck.push(join(elementsReactDir, pkg));\n }\n }\n }\n\n // Note: We don't check shared packages because they are managed separately\n // and don't have dependencies on synced packages\n\n let totalRemoved = 0;\n const removedDeps: Array<{ pkg: string; dep: string }> = [];\n\n for (const pkgPath of packagesToCheck) {\n const pkgJsonPath = join(pkgPath, 'package.json');\n const pkgJson = (await loadPackageJson(pkgJsonPath)) as PackageJson | null;\n\n if (!pkgJson?.dependencies) {\n continue;\n }\n\n const pkgName = pkgJson.name || pkgPath;\n let modified = false;\n const depsToRemove: string[] = [];\n\n for (const [dep, version] of Object.entries(pkgJson.dependencies)) {\n // Only check workspace dependencies\n if (!version.startsWith('workspace:')) {\n continue;\n }\n\n // Check @pie-lib/* dependencies\n if (dep.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n const libName = dep.replace(WORKSPACE.PIE_LIB_PREFIX, '');\n if (!availableLibPackages.has(libName)) {\n depsToRemove.push(dep);\n removedDeps.push({ pkg: pkgName, dep });\n modified = true;\n }\n }\n\n // Check @pie-element/* dependencies\n if (dep.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX)) {\n const elementName = dep.replace(WORKSPACE.PIE_ELEMENT_PREFIX, '');\n if (!availableElementPackages.has(elementName)) {\n depsToRemove.push(dep);\n removedDeps.push({ pkg: pkgName, dep });\n modified = true;\n }\n }\n }\n\n if (modified) {\n // Remove the invalid dependencies\n for (const dep of depsToRemove) {\n delete pkgJson.dependencies[dep];\n totalRemoved++;\n }\n\n // Write back the modified package.json\n const fs = await import('node:fs/promises');\n await fs.writeFile(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n', 'utf-8');\n }\n }\n\n if (totalRemoved > 0) {\n this.logger.info(` Removed ${totalRemoved} invalid workspace dependencies:\\n`);\n for (const { pkg, dep } of removedDeps) {\n this.logger.info(` - ${dep} from ${pkg}`);\n }\n this.log('');\n } else {\n this.logger.info(' ✓ All workspace dependencies are valid\\n');\n }\n\n // Run bun install to update the lockfile\n this.logger.info(' Running bun install to update lockfile...');\n const exitCode = await new Promise<number>((resolve) => {\n const child = spawn('bun', ['install'], {\n cwd: config.pieElementsNg,\n stdio: 'inherit',\n env: process.env,\n });\n child.on('close', (code) => resolve(code ?? 1));\n child.on('error', () => resolve(1));\n });\n\n if (exitCode !== 0) {\n this.logger.warn(' ⚠️ bun install failed');\n } else {\n this.logger.info(' ✓ bun install completed successfully\\n');\n }\n }\n\n private async buildTouchedPackages(config: SyncConfig, result: SyncResult): Promise<void> {\n const rootPkgPath = join(config.pieElementsNg, 'package.json');\n const rootPkg = (await loadPackageJson(rootPkgPath)) as PackageJson | null;\n const workspaces = Array.isArray(rootPkg?.workspaces) ? (rootPkg?.workspaces as string[]) : [];\n const hasElementsReactWorkspace = workspaces.some((ws) =>\n ws.startsWith('packages/elements-react')\n );\n const hasLibReactWorkspace = workspaces.some((ws) => ws.startsWith('packages/lib-react'));\n\n const elementFilters = Array.from(this.touchedElementPackages)\n .sort()\n .map((el) => `--filter=@pie-element/${el}`);\n const pieLibFilters = Array.from(this.touchedPieLibPackages)\n .sort()\n .map((pkg) => `--filter=@pie-lib/${pkg}`);\n\n const filters = [...elementFilters, ...pieLibFilters];\n\n if (\n (elementFilters.length > 0 && !hasElementsReactWorkspace) ||\n (pieLibFilters.length > 0 && !hasLibReactWorkspace)\n ) {\n this.logger.info(\n '🏗️ Build: Skipped (synced packages are not part of the current workspaces)'\n );\n this.logger.info(' Hint: add packages/elements-react/* and/or packages/lib-react/* to');\n this.logger.info(' root workspaces if you want turbo to build them.');\n return;\n }\n\n if (filters.length === 0) {\n if (config.verbose) {\n this.logger.info('🏗️ Build: Skipped (no touched packages detected)');\n }\n return;\n }\n\n // Check if vite is available before attempting to build\n const viteAvailable = await this.checkViteAvailable(config);\n if (!viteAvailable) {\n this.logger.warn(\n '🏗️ Build: Skipped (vite not found). Run \"bun install\" to install dependencies, then \"bun run build\" manually.'\n );\n return;\n }\n\n this.logger.section('🏗️ Building touched packages');\n this.logger.info(` Filters: ${filters.join(' ')}\\n`);\n\n // turbo filters are passed through the root build script:\n // package.json: \"build\": \"turbo run build\"\n // bun run requires `--` to forward args to the script.\n // Always use --force to disable Turbo cache for consistency\n const args = ['run', 'build', '--', '--force', ...filters];\n\n const exitCode = await new Promise<number>((resolve) => {\n const child = spawn('bun', args, {\n cwd: config.pieElementsNg,\n stdio: 'inherit',\n env: process.env,\n });\n child.on('close', (code) => resolve(code ?? 1));\n child.on('error', () => resolve(1));\n });\n\n if (exitCode !== 0) {\n const errorMsg = `Build failed (exit code ${exitCode}). This may be due to missing dependencies. Run 'bun install' to install new devDependencies, then 'bun run build' manually.`;\n if (config.skipBuild) {\n this.logger.warn(` ⚠️ ${errorMsg}`);\n } else {\n result.errors.push(errorMsg);\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/upstream/sync.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport { Logger } from '../../utils/logger.js';\nimport {\n formatCompatibilityReportLastAnalyzed,\n loadCompatibilityReport,\n type CompatibilityReport,\n} from '../../utils/compatibility.js';\nimport { getCurrentCommit } from '../../utils/git.js';\nimport { printSyncSummary, createEmptySummary } from '../../lib/upstream/sync-summary.js';\nimport { loadPackageJson, writePackageJson, type PackageJson } from '../../utils/package-json.js';\nimport { spawn } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { readFile, stat as fsStat, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { readdir } from '../../lib/upstream/sync-filesystem.js';\nimport { getAllDeps } from '../../lib/upstream/sync-package-json.js';\nimport { findWorkspacePieLibPackages } from '../../lib/upstream/workspace-pie-lib.js';\nimport { ControllersStrategy } from '../../lib/upstream/sync-controllers-strategy.js';\nimport { ReactComponentsStrategy } from '../../lib/upstream/sync-react-strategy.js';\nimport { PieLibStrategy } from '../../lib/upstream/sync-pielib-strategy.js';\nimport type { SyncStrategy, SyncContext } from '../../lib/upstream/sync-strategy.js';\nimport { DEFAULT_PATHS, COMPATIBILITY_FILE, WORKSPACE } from '../../lib/upstream/sync-constants.js';\nimport { assertReposExist } from '../../lib/upstream/repo-utils.js';\nimport { rewriteRelativeSpecifiersForNodeEsm } from '../../lib/upstream/sync-imports.js';\nimport {\n analyzePackageDependencyIntegrity,\n collectWorkspacePackageDirs,\n type ImportIntegrityStatus,\n} from '../../utils/dependency-integrity.js';\nimport { getPostSyncTextPatches } from '../../lib/upstream/sync-presets.js';\n\ninterface SyncConfig {\n pieElements: string;\n pieLib: string;\n pieElementsNg: string;\n\n // What to sync\n syncControllers: boolean;\n syncReactComponents: boolean;\n syncPieLibPackages: boolean;\n\n // Filters\n elements?: string[];\n pieLibPackages?: string[];\n elementsSpecifiedByUser: boolean;\n pieLibPackagesSpecifiedByUser: boolean;\n\n // ESM compatibility\n useEsmFilter: boolean;\n compatibilityFile: string;\n\n // Options\n dryRun: boolean;\n verbose: boolean;\n rewritePackageJson: boolean;\n skipBuild: boolean;\n\n // Internal: auto-sync pie-lib deps for selected elements\n autoSyncPieLibDeps: boolean;\n}\n\ninterface SyncResult {\n filesChecked: number;\n filesCopied: number;\n filesSkipped: number;\n filesUpdated: number;\n errors: string[];\n warnings: string[];\n}\n\ninterface DependencyIntegrityRegression {\n packageName: string;\n packagePath: string;\n dependency: string;\n status: Exclude<ImportIntegrityStatus, 'direct' | 'transitive'>;\n}\n\ninterface DependencyAutoFixResult {\n packagesUpdated: number;\n dependenciesAdded: number;\n unresolved: Array<{ packageName: string; dependency: string }>;\n}\n\nexport default class Sync extends Command {\n static override description = 'Synchronize code from upstream pie-elements repository';\n\n static override examples = [\n '<%= config.bin %> <%= command.id %> --dry-run',\n '<%= config.bin %> <%= command.id %> --element=multiple-choice',\n '<%= config.bin %> <%= command.id %>',\n ];\n\n static override flags = {\n 'dry-run': Flags.boolean({\n description: 'Show what would be synced without making changes',\n default: false,\n }),\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n element: Flags.string({\n description: 'Sync only specified element (if ESM-compatible)',\n }),\n };\n\n private logger = new Logger();\n private touchedElementPackages = new Set<string>();\n private touchedPieLibPackages = new Set<string>();\n private preSyncProblemIntegrityByImport = new Map<string, ImportIntegrityStatus>();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Sync);\n\n this.logger = new Logger(flags.verbose);\n\n const config: SyncConfig = {\n pieElements: DEFAULT_PATHS.PIE_ELEMENTS,\n pieLib: DEFAULT_PATHS.PIE_LIB,\n pieElementsNg: DEFAULT_PATHS.PIE_ELEMENTS_NG,\n syncControllers: true,\n syncReactComponents: true,\n syncPieLibPackages: false,\n useEsmFilter: true,\n compatibilityFile: COMPATIBILITY_FILE,\n dryRun: flags['dry-run'],\n verbose: flags.verbose,\n rewritePackageJson: true,\n skipBuild: false,\n autoSyncPieLibDeps: true,\n elementsSpecifiedByUser: !!flags.element,\n pieLibPackagesSpecifiedByUser: false,\n };\n\n // Configure filters\n if (flags.element) {\n config.elements = [flags.element];\n }\n\n await this.syncUpstream(config);\n }\n\n private async syncUpstream(config: SyncConfig): Promise<void> {\n const syncSummary = createEmptySummary();\n\n const result: SyncResult = {\n filesChecked: 0,\n filesCopied: 0,\n filesSkipped: 0,\n filesUpdated: 0,\n errors: [],\n warnings: [],\n };\n\n // Reset touched packages for this run\n this.touchedElementPackages = new Set<string>();\n this.touchedPieLibPackages = new Set<string>();\n this.preSyncProblemIntegrityByImport = new Map<string, ImportIntegrityStatus>();\n\n this.logger.section('🔄 Syncing from upstream');\n this.logger.info(` Source: ${config.pieElements}`);\n this.logger.info(` Destination: ${config.pieElementsNg}/packages/`);\n this.logger.info(` Mode: ${config.dryRun ? 'DRY RUN' : 'LIVE'}\\n`);\n\n // Apply ESM compatibility filter (also returns report for summary)\n const compatibilityReport = await this.applyEsmFilter(config);\n\n // Auto-sync pie-lib dependencies for selected elements (unless explicit pie-lib mode)\n if (config.autoSyncPieLibDeps) {\n const elementsToSync = await this.listElementPackages(config);\n const requiredPieLib = await this.collectPieLibDepsFromElements(config, elementsToSync);\n if (requiredPieLib.length > 0) {\n config.syncPieLibPackages = true;\n config.pieLibPackages = requiredPieLib;\n if (config.verbose) {\n this.logger.info(\n ` Auto pie-lib deps: ${requiredPieLib.length} package(s) required by selected elements`\n );\n }\n }\n }\n\n // Merge with ESM-compatible pie-lib packages from compatibility report\n // (This ensures packages like controller-utils that are imported in controllers but not declared in package.json get synced)\n // BUT: Only merge ALL packages when doing a full sync (no specific elements specified)\n // When syncing specific elements, only sync the required deps (don't merge all 23 compat packages)\n if (compatibilityReport?.pieLibPackages && compatibilityReport.pieLibPackages.length > 0) {\n config.syncPieLibPackages = true;\n const autoDeps = new Set(config.pieLibPackages || []);\n\n // Only merge all compatible packages when doing a full sync\n if (!config.elementsSpecifiedByUser) {\n const compatiblePkgs = compatibilityReport.pieLibPackages;\n const merged = new Set([...autoDeps, ...compatiblePkgs]);\n config.pieLibPackages = Array.from(merged);\n\n const additionalCount = config.pieLibPackages.length - autoDeps.size;\n if (config.verbose && additionalCount > 0) {\n this.logger.info(\n ` Additional ESM-compatible pie-lib: ${additionalCount} package(s) from compatibility report`\n );\n }\n } else {\n // For targeted element sync, only sync required deps (don't bloat with all 23 packages)\n if (config.verbose && autoDeps.size > 0) {\n this.logger.info(\n ` Targeted sync: ${autoDeps.size} pie-lib package(s) required by ${config.elements?.[0]}`\n );\n }\n }\n }\n\n // Verify repos exist\n try {\n assertReposExist([{ label: 'pie-elements', path: config.pieElements }]);\n } catch (error) {\n this.logger.error(error instanceof Error ? error.message : String(error));\n this.error('Sync failed', { exit: 1 });\n }\n\n if (config.dryRun) {\n this.logger.section('🧪 Dry run');\n this.logger.info(' No files will be modified.');\n\n const elementsPlanned = config.syncReactComponents\n ? await this.listElementPackages(config)\n : [];\n const pieLibPlanned =\n config.syncPieLibPackages && config.pieLibPackages ? [...config.pieLibPackages] : [];\n\n syncSummary.controllersSync = config.syncControllers ? elementsPlanned.length : 0;\n syncSummary.reactComponentsSynced = elementsPlanned.length;\n syncSummary.pieLibPackagesSynced = pieLibPlanned.length;\n syncSummary.totalPackagesSynced = elementsPlanned.length + pieLibPlanned.length;\n syncSummary.syncedPackageNames = [\n ...elementsPlanned,\n ...pieLibPlanned.map((pkg) => `@pie-lib/${pkg}`),\n ];\n\n if (compatibilityReport) {\n syncSummary.blockedElements = Object.keys(compatibilityReport.blockedElements).length;\n syncSummary.blockedPieLib = Object.values(compatibilityReport.pieLibDetails).filter(\n (d) => !d.compatible\n ).length;\n }\n\n printSyncSummary(syncSummary, compatibilityReport, config.pieElementsNg, this.logger);\n return;\n }\n\n // Capture current dependency integrity gaps before sync so we only fail on new regressions.\n this.preSyncProblemIntegrityByImport =\n await this.captureCurrentProblemIntegrityBaseline(config);\n\n // Clean target directories first (ensures a clean slate for full syncs)\n await this.cleanTargetDirectories(config);\n\n // Execute sync strategies\n const strategies: SyncStrategy[] = [\n new ControllersStrategy(),\n new ReactComponentsStrategy(),\n new PieLibStrategy(),\n ];\n\n const context: SyncContext = {\n config: {\n pieElements: config.pieElements,\n pieLib: config.pieLib,\n pieElementsNg: config.pieElementsNg,\n syncControllers: config.syncControllers,\n syncReactComponents: config.syncReactComponents,\n syncPieLib: config.syncPieLibPackages,\n pieLibPackages: config.pieLibPackages,\n skipDemos: true,\n dryRun: config.dryRun,\n upstreamCommit: getCurrentCommit(config.pieElements),\n },\n logger: this.logger,\n // Only set packageFilter if user explicitly specified a single element\n packageFilter: config.elementsSpecifiedByUser ? config.elements?.[0] : undefined,\n compatibilityReport: compatibilityReport || undefined,\n };\n\n for (const strategy of strategies) {\n if (strategy.shouldRun(context.config)) {\n const result = await strategy.execute(context);\n\n // Track by strategy type\n const desc = strategy.getDescription();\n if (desc === 'controllers') {\n syncSummary.controllersSync = result.count;\n } else if (desc === 'React components') {\n syncSummary.reactComponentsSynced = result.count;\n // Track touched React element packages for build\n for (const pkgName of result.packageNames) {\n // Only add element packages (not @pie-lib packages)\n if (!pkgName.startsWith('@pie-lib/')) {\n this.touchedElementPackages.add(pkgName);\n }\n }\n } else if (desc === '@pie-lib packages') {\n syncSummary.pieLibPackagesSynced = result.count;\n // Track touched pie-lib packages for build\n for (const pkgName of result.packageNames) {\n if (pkgName.startsWith('@pie-lib/')) {\n const libName = pkgName.replace('@pie-lib/', '');\n this.touchedPieLibPackages.add(libName);\n }\n }\n }\n syncSummary.totalPackagesSynced += result.count;\n // Add unique package names (avoid duplicates from multiple strategies syncing same package)\n for (const pkgName of result.packageNames) {\n if (!syncSummary.syncedPackageNames.includes(pkgName)) {\n syncSummary.syncedPackageNames.push(pkgName);\n }\n }\n }\n }\n\n // Ensure external dependencies from synced packages are available at repo root.\n if (!config.dryRun) {\n await this.rewriteWorkspaceDependencies(config);\n }\n\n // Auto-fix missing direct dependency declarations in touched package manifests.\n // This makes sync resilient to upstream package.json drift.\n {\n const autoFix = await this.autoFixTouchedPackageDependencyDeclarations(config);\n if (autoFix.unresolved.length > 0) {\n for (const unresolved of autoFix.unresolved) {\n result.warnings.push(\n `Could not infer version for ${unresolved.dependency} in ${unresolved.packageName}`\n );\n }\n }\n }\n\n // Apply targeted post-sync source patches for known declaration-emit issues.\n if (!config.dryRun) {\n await this.applyPostSyncBuildStabilizers(config);\n }\n\n // Normalize relative ESM specifiers to explicit .js paths for NodeNext.\n if (!config.dryRun) {\n await this.applyNodeEsmSpecifierRewrites(config);\n }\n\n // Verify synced packages for dependency integrity regressions (broken/hoist-reliant imports).\n // This catches runtime failures like unresolved \"prop-types\" and newly introduced hoist reliance.\n {\n const integrityRegressions = await this.verifyTouchedPackageDependencyIntegrity(config);\n if (integrityRegressions.length > 0) {\n for (const issue of integrityRegressions) {\n result.errors.push(\n `${issue.packageName} (${issue.packagePath}) has new ${issue.status} dependency: ${issue.dependency}`\n );\n }\n }\n }\n\n // Build by default (unless dry-run or explicitly skipped)\n if (!config.dryRun && !config.skipBuild && result.errors.length === 0) {\n await this.buildTouchedPackages(config, result);\n }\n\n // Add blocked package counts from compatibility report\n if (compatibilityReport) {\n syncSummary.blockedElements = Object.keys(compatibilityReport.blockedElements).length;\n syncSummary.blockedPieLib = Object.values(compatibilityReport.pieLibDetails).filter(\n (d) => !d.compatible\n ).length;\n }\n\n // Demo metadata generation removed - demos are now tracked in git\n // and managed directly in this repository (not synced from upstream)\n\n // Print summary and handle errors\n printSyncSummary(syncSummary, compatibilityReport, config.pieElementsNg, this.logger);\n\n if (result.warnings.length > 0) {\n this.logger.warn('Sync completed with warnings:');\n for (const warning of result.warnings) {\n this.logger.warn(` - ${warning}`);\n }\n this.log('');\n }\n\n if (result.errors.length > 0) {\n this.error('Sync completed with errors', { exit: 1 });\n }\n }\n\n private async applyEsmFilter(config: SyncConfig): Promise<CompatibilityReport | null> {\n if (!config.useEsmFilter) {\n return null;\n }\n\n let report: CompatibilityReport | null = null;\n try {\n report = await loadCompatibilityReport(config.compatibilityFile);\n } catch (error) {\n this.logger.warn(`⚠️ ESM compatibility file not found at ${config.compatibilityFile}`);\n this.logger.warn(' Run: bun cli upstream:analyze-esm to generate it');\n this.logger.warn(' Proceeding without ESM filter...\\n');\n return null;\n }\n\n if (!report) {\n return null;\n }\n\n this.logger.info(`📋 Using ESM compatibility filter from ${config.compatibilityFile}`);\n this.logger.info(` Last analyzed: ${formatCompatibilityReportLastAnalyzed(report)}`);\n this.logger.info(` Compatible elements: ${report.elements.length}`);\n this.logger.info(` Compatible pie-lib packages: ${report.pieLibPackages.length}`);\n\n if (Object.keys(report.blockedElements).length > 0) {\n this.logger.info(` Blocked elements: ${Object.keys(report.blockedElements).length}`);\n }\n this.log('');\n\n // If user hasn't specified elements, use the compatible list\n if (!config.elements) {\n config.elements = report.elements;\n } else {\n // User specified elements - filter to only compatible ones\n const incompatible = config.elements.filter((el) => !report.elements.includes(el));\n if (incompatible.length > 0) {\n this.logger.warn('⚠️ Warning: These elements are not ESM-compatible and will be skipped:');\n for (const el of incompatible) {\n const blockers = report.blockedElements[el] || [];\n this.logger.warn(` - ${el}${blockers.length > 0 ? `: ${blockers[0]}` : ''}`);\n }\n this.log('');\n config.elements = config.elements.filter((el) => report.elements.includes(el));\n }\n }\n\n // If syncing pie-lib packages, use the compatible list\n if (config.syncPieLibPackages && !config.pieLibPackages) {\n config.pieLibPackages = report.pieLibPackages;\n }\n\n return report;\n }\n\n private async listElementPackages(config: SyncConfig): Promise<string[]> {\n if (config.elements && config.elements.length > 0) {\n return config.elements;\n }\n\n const upstreamElementsDir = join(config.pieElements, 'packages');\n return await readdir(upstreamElementsDir);\n }\n\n private async collectPieLibDepsFromElements(\n config: SyncConfig,\n elements: string[]\n ): Promise<string[]> {\n const deps = new Set<string>();\n\n for (const element of elements) {\n const pkgPath = join(config.pieElements, 'packages', element, 'package.json');\n if (!existsSync(pkgPath)) {\n continue;\n }\n const pkg = (await loadPackageJson(pkgPath)) as PackageJson | null;\n const pkgDeps = getAllDeps(pkg);\n for (const name of Object.keys(pkgDeps)) {\n if (name.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n deps.add(name.replace(WORKSPACE.PIE_LIB_PREFIX, ''));\n }\n }\n }\n\n return await this.expandPieLibDeps(config, Array.from(deps));\n }\n\n private async expandPieLibDeps(config: SyncConfig, initial: string[]): Promise<string[]> {\n const seen = new Set<string>();\n const queue = [...initial];\n\n while (queue.length > 0) {\n const pkg = queue.shift();\n if (!pkg || seen.has(pkg)) continue;\n seen.add(pkg);\n\n const pkgPath = join(config.pieLib, 'packages', pkg, 'package.json');\n if (!existsSync(pkgPath)) continue;\n const pkgJson = (await loadPackageJson(pkgPath)) as PackageJson | null;\n const deps = getAllDeps(pkgJson);\n for (const name of Object.keys(deps)) {\n if (name.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n const depName = name.replace(WORKSPACE.PIE_LIB_PREFIX, '');\n if (!seen.has(depName)) queue.push(depName);\n }\n }\n }\n\n return Array.from(seen).sort();\n }\n\n private async cleanTargetDirectories(config: SyncConfig): Promise<void> {\n if (!config.useEsmFilter || config.dryRun) return;\n\n // NOTE: We intentionally do NOT delete the entire packages/elements-react/ directory\n // because that would delete locally-maintained content like docs/demo/config.mjs files.\n // Instead, each sync strategy (ReactComponentsStrategy, PieLibStrategy, etc.) handles\n // cleaning individual package directories while preserving specific subdirectories\n // (like docs/ and controller/).\n //\n // This approach ensures:\n // 1. Demo configs (docs/demo/*.mjs) are preserved across syncs\n // 2. Controllers (src/controller/) are preserved during React component sync\n // 3. Only the files that need updating are touched\n }\n\n private async checkViteAvailable(config: SyncConfig): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n const child = spawn('bun', ['x', 'vite', '--version'], {\n cwd: config.pieElementsNg,\n stdio: 'pipe',\n env: process.env,\n });\n let output = '';\n child.stdout?.on('data', (data) => {\n output += data.toString();\n });\n child.stderr?.on('data', (data) => {\n output += data.toString();\n });\n child.on('close', (code) => {\n resolve(code === 0);\n });\n child.on('error', () => {\n resolve(false);\n });\n });\n }\n\n private async verifyTouchedPackageDependencyIntegrity(\n config: SyncConfig\n ): Promise<DependencyIntegrityRegression[]> {\n this.logger.section('🔎 Verifying dependency integrity regressions');\n\n const packageDirs: string[] = [];\n for (const element of this.touchedElementPackages) {\n packageDirs.push(join(config.pieElementsNg, 'packages/elements-react', element));\n }\n for (const pieLib of this.touchedPieLibPackages) {\n packageDirs.push(join(config.pieElementsNg, 'packages/lib-react', pieLib));\n }\n\n if (packageDirs.length === 0) {\n this.logger.info(' No touched packages to verify\\n');\n return [];\n }\n\n const regressions: DependencyIntegrityRegression[] = [];\n let existingIssuesIgnored = 0;\n\n for (const packageDir of packageDirs) {\n const analysis = await analyzePackageDependencyIntegrity(packageDir);\n if (!analysis) {\n continue;\n }\n\n for (const issue of analysis.issues) {\n if (issue.status !== 'broken' && issue.status !== 'hoist') {\n continue;\n }\n\n const key = this.integrityIssueKey(analysis.packageName, issue.dependency);\n const previous = this.preSyncProblemIntegrityByImport.get(key);\n\n if (previous === issue.status) {\n existingIssuesIgnored++;\n continue;\n }\n\n regressions.push({\n packageName: analysis.packageName,\n packagePath: analysis.packagePath,\n dependency: issue.dependency,\n status: issue.status,\n });\n }\n }\n\n if (regressions.length === 0) {\n if (existingIssuesIgnored > 0) {\n this.logger.info(\n ` ✓ No new broken/hoist regressions (ignored ${existingIssuesIgnored} pre-existing issue(s))\\n`\n );\n } else {\n this.logger.info(` ✓ No broken/hoist dependency integrity regressions\\n`);\n }\n return [];\n }\n\n this.logger.error(` Found ${regressions.length} new dependency integrity regression(s):\\n`);\n for (const regression of regressions) {\n this.logger.error(\n ` - ${regression.packageName}: ${regression.status} -> ${regression.dependency}`\n );\n }\n this.log('');\n\n return regressions;\n }\n\n private async captureCurrentProblemIntegrityBaseline(\n config: SyncConfig\n ): Promise<Map<string, ImportIntegrityStatus>> {\n const baseline = new Map<string, ImportIntegrityStatus>();\n const packageDirs = await collectWorkspacePackageDirs(config.pieElementsNg);\n\n for (const packageDir of packageDirs) {\n const analysis = await analyzePackageDependencyIntegrity(packageDir);\n if (!analysis) {\n continue;\n }\n\n for (const issue of analysis.issues) {\n if (issue.status === 'broken' || issue.status === 'hoist') {\n baseline.set(\n this.integrityIssueKey(analysis.packageName, issue.dependency),\n issue.status\n );\n }\n }\n }\n\n return baseline;\n }\n\n private integrityIssueKey(packageName: string, dependency: string): string {\n return `${packageName}::${dependency}`;\n }\n\n private async autoFixTouchedPackageDependencyDeclarations(\n config: SyncConfig\n ): Promise<DependencyAutoFixResult> {\n this.logger.section('🛠️ Auto-fixing dependency declarations');\n\n const packageDirs = this.getTouchedPackageDirs(config);\n if (packageDirs.length === 0) {\n this.logger.info(' No touched packages to auto-fix\\n');\n return { packagesUpdated: 0, dependenciesAdded: 0, unresolved: [] };\n }\n\n const catalog = await this.buildDependencyVersionCatalog(config.pieElementsNg);\n let packagesUpdated = 0;\n let dependenciesAdded = 0;\n const unresolved: Array<{ packageName: string; dependency: string }> = [];\n\n for (const packageDir of packageDirs) {\n const analysis = await analyzePackageDependencyIntegrity(packageDir);\n if (!analysis) continue;\n\n const pkgJsonPath = join(packageDir, 'package.json');\n const pkgJson = (await loadPackageJson(pkgJsonPath)) as PackageJson | null;\n if (!pkgJson) continue;\n\n const declared = new Set<string>([\n ...Object.keys(pkgJson.dependencies || {}),\n ...Object.keys(pkgJson.devDependencies || {}),\n ...Object.keys((pkgJson.peerDependencies as Record<string, string> | undefined) || {}),\n ...Object.keys((pkgJson.optionalDependencies as Record<string, string> | undefined) || {}),\n ]);\n\n let modified = false;\n if (!pkgJson.dependencies) {\n pkgJson.dependencies = {};\n }\n\n for (const issue of analysis.issues) {\n const dep = issue.dependency;\n if (declared.has(dep)) {\n continue;\n }\n\n const version = this.resolveDependencyVersion(config, dep, catalog);\n if (!version) {\n unresolved.push({ packageName: analysis.packageName, dependency: dep });\n continue;\n }\n\n pkgJson.dependencies[dep] = version;\n declared.add(dep);\n modified = true;\n dependenciesAdded++;\n }\n\n if (modified) {\n await writePackageJson(pkgJsonPath, pkgJson);\n packagesUpdated++;\n }\n }\n\n if (dependenciesAdded === 0 && unresolved.length === 0) {\n this.logger.info(' ✓ No missing declarations detected in touched packages\\n');\n return { packagesUpdated, dependenciesAdded, unresolved };\n }\n\n if (dependenciesAdded > 0) {\n this.logger.info(\n ` ✓ Added ${dependenciesAdded} dependency declaration(s) in ${packagesUpdated} package(s)`\n );\n }\n if (unresolved.length > 0) {\n this.logger.warn(` Could not infer ${unresolved.length} dependency version(s)`);\n }\n this.log('');\n\n return { packagesUpdated, dependenciesAdded, unresolved };\n }\n\n private getTouchedPackageDirs(config: SyncConfig): string[] {\n const dirs: string[] = [];\n for (const element of this.touchedElementPackages) {\n dirs.push(join(config.pieElementsNg, 'packages/elements-react', element));\n }\n for (const pieLib of this.touchedPieLibPackages) {\n dirs.push(join(config.pieElementsNg, 'packages/lib-react', pieLib));\n }\n return dirs.sort();\n }\n\n private async buildDependencyVersionCatalog(rootDir: string): Promise<Map<string, string>> {\n const catalog = new Map<string, string>();\n\n const addVersions = (record?: Record<string, string>) => {\n if (!record) return;\n for (const [name, version] of Object.entries(record)) {\n if (!catalog.has(name)) {\n catalog.set(name, version);\n }\n }\n };\n\n // Root package.json has the canonical versions we prefer.\n const rootPkgPath = join(rootDir, 'package.json');\n if (existsSync(rootPkgPath)) {\n const rootPkg = (await loadPackageJson(rootPkgPath)) as PackageJson | null;\n if (rootPkg) {\n addVersions(rootPkg.dependencies as Record<string, string> | undefined);\n addVersions(rootPkg.devDependencies as Record<string, string> | undefined);\n }\n }\n\n // Add versions seen across workspace package manifests as fallback.\n const workspacePackageDirs = await collectWorkspacePackageDirs(rootDir);\n for (const packageDir of workspacePackageDirs) {\n const pkgPath = join(packageDir, 'package.json');\n if (!existsSync(pkgPath)) continue;\n const pkg = (await loadPackageJson(pkgPath)) as PackageJson | null;\n if (!pkg) continue;\n addVersions(pkg.dependencies as Record<string, string> | undefined);\n addVersions(pkg.devDependencies as Record<string, string> | undefined);\n addVersions(pkg.peerDependencies as Record<string, string> | undefined);\n addVersions(pkg.optionalDependencies as Record<string, string> | undefined);\n }\n\n return catalog;\n }\n\n private resolveDependencyVersion(\n config: SyncConfig,\n dep: string,\n catalog: Map<string, string>\n ): string | null {\n const fallbackVersions: Record<string, string> = {\n 'js-combinatorics': '^2.1.2',\n '@testing-library/react': '^16.3.0',\n '@testing-library/dom': '^10.4.1',\n '@tiptap/extensions': '^3.20.0',\n '@tiptap/extension-list': '^3.20.0',\n '@tiptap/extension-code-block': '^3.20.0',\n 'nested-property': '^4.0.0',\n 'prosemirror-state': '^1.4.4',\n 'react-is': '^19.2.0',\n pluralize: '^8.0.0',\n };\n\n // Internal workspace packages should stay workspace-linked.\n if (dep.startsWith('@pie-lib/')) {\n const libName = dep.replace('@pie-lib/', '');\n if (findWorkspacePieLibPackages(config.pieElementsNg).has(libName)) {\n return 'workspace:*';\n }\n }\n\n if (dep.startsWith('@pie-element/')) {\n const elementName = dep.replace('@pie-element/', '');\n const elementPath = join(\n config.pieElementsNg,\n 'packages/elements-react',\n elementName,\n 'package.json'\n );\n if (existsSync(elementPath)) {\n return 'workspace:*';\n }\n\n // Shared packages map @pie-element/shared-foo -> packages/shared/foo.\n if (elementName.startsWith('shared-')) {\n const sharedName = elementName.replace('shared-', '');\n const sharedPath = join(\n config.pieElementsNg,\n 'packages/shared',\n sharedName,\n 'package.json'\n );\n if (existsSync(sharedPath)) {\n return 'workspace:*';\n }\n }\n }\n\n return catalog.get(dep) || fallbackVersions[dep] || null;\n }\n\n private async applyPostSyncBuildStabilizers(config: SyncConfig): Promise<void> {\n let appliedPatches = 0;\n\n const patchFile = async (\n filePath: string,\n replacements: Array<{ from: string; to: string }>,\n label: string\n ): Promise<boolean> => {\n if (!existsSync(filePath)) {\n return false;\n }\n\n let content = await readFile(filePath, 'utf-8');\n let changed = false;\n for (const replacement of replacements) {\n if (content.includes(replacement.from)) {\n content = content.replace(replacement.from, replacement.to);\n changed = true;\n }\n }\n\n if (changed) {\n await writeFile(filePath, content, 'utf-8');\n this.logger.info(` ✓ Applied post-sync patch: ${label}`);\n }\n\n return changed;\n };\n\n const patches = getPostSyncTextPatches(config.pieElementsNg);\n for (const patch of patches) {\n if (await patchFile(patch.file, patch.replacements, patch.label)) {\n appliedPatches++;\n }\n }\n\n if (appliedPatches === 0) {\n this.logger.info(' ✓ No post-sync stabilizer patches needed');\n }\n }\n\n private async applyNodeEsmSpecifierRewrites(config: SyncConfig): Promise<void> {\n this.logger.section('🔧 Rewriting relative ESM specifiers');\n\n const packageDirs = this.getTouchedPackageDirs(config);\n if (packageDirs.length === 0) {\n this.logger.info(' No touched packages to rewrite\\n');\n return;\n }\n\n let checkedFiles = 0;\n let rewrittenFiles = 0;\n\n for (const packageDir of packageDirs) {\n const sourceDir = join(packageDir, 'src');\n const sourceFiles = await this.collectTypeScriptSourceFiles(sourceDir);\n for (const filePath of sourceFiles) {\n checkedFiles++;\n if (await rewriteRelativeSpecifiersForNodeEsm(filePath)) {\n rewrittenFiles++;\n }\n }\n }\n\n if (rewrittenFiles === 0) {\n this.logger.info(` ✓ Specifiers already normalized (${checkedFiles} file(s) checked)\\n`);\n return;\n }\n\n this.logger.info(` ✓ Rewrote ${rewrittenFiles} file(s) out of ${checkedFiles} checked\\n`);\n }\n\n private async collectTypeScriptSourceFiles(dir: string): Promise<string[]> {\n if (!existsSync(dir)) {\n return [];\n }\n\n const files: string[] = [];\n const items = await readdir(dir);\n for (const item of items) {\n const fullPath = join(dir, item);\n const stats = await fsStat(fullPath);\n if (stats.isDirectory()) {\n files.push(...(await this.collectTypeScriptSourceFiles(fullPath)));\n continue;\n }\n\n if (item.endsWith('.ts') || item.endsWith('.tsx')) {\n files.push(fullPath);\n }\n }\n\n return files;\n }\n\n private async rewriteWorkspaceDependencies(config: SyncConfig): Promise<void> {\n this.logger.section('🔧 Rewriting workspace dependencies');\n\n // Discover available packages in the workspace\n const libReactDir = join(config.pieElementsNg, 'packages/lib-react');\n const elementsReactDir = join(config.pieElementsNg, 'packages/elements-react');\n const sharedDir = join(config.pieElementsNg, 'packages/shared');\n\n const availableLibPackages = new Set(findWorkspacePieLibPackages(config.pieElementsNg).keys());\n const availableElementPackages = new Set<string>();\n\n if (existsSync(elementsReactDir)) {\n const elementPackages = await readdir(elementsReactDir);\n for (const pkg of elementPackages) {\n if (existsSync(join(elementsReactDir, pkg, 'package.json'))) {\n availableElementPackages.add(pkg);\n }\n }\n }\n\n // Also scan shared packages - these are @pie-element/shared-* packages\n if (existsSync(sharedDir)) {\n const sharedPackages = await readdir(sharedDir);\n for (const pkg of sharedPackages) {\n if (existsSync(join(sharedDir, pkg, 'package.json'))) {\n // Shared packages use the pattern @pie-element/shared-{name}\n // But the directory is just {name}, so we need to add the \"shared-\" prefix\n availableElementPackages.add(`shared-${pkg}`);\n }\n }\n }\n\n this.logger.info(` Found ${availableLibPackages.size} @pie-lib packages`);\n this.logger.info(\n ` Found ${availableElementPackages.size} elements-react packages (including shared)\\n`\n );\n\n // Scan and rewrite package.json files\n const packagesToCheck: string[] = [];\n\n // Add lib-react packages\n if (existsSync(libReactDir)) {\n for (const pkg of await readdir(libReactDir)) {\n if (existsSync(join(libReactDir, pkg, 'package.json'))) {\n packagesToCheck.push(join(libReactDir, pkg));\n }\n }\n }\n\n // Add elements-react packages (non-shared)\n if (existsSync(elementsReactDir)) {\n const elementPackages = await readdir(elementsReactDir);\n for (const pkg of elementPackages) {\n if (existsSync(join(elementsReactDir, pkg, 'package.json'))) {\n packagesToCheck.push(join(elementsReactDir, pkg));\n }\n }\n }\n\n // Note: We don't check shared packages because they are managed separately\n // and don't have dependencies on synced packages\n\n let totalRemoved = 0;\n const removedDeps: Array<{ pkg: string; dep: string }> = [];\n\n for (const pkgPath of packagesToCheck) {\n const pkgJsonPath = join(pkgPath, 'package.json');\n const pkgJson = (await loadPackageJson(pkgJsonPath)) as PackageJson | null;\n\n if (!pkgJson?.dependencies) {\n continue;\n }\n\n const pkgName = pkgJson.name || pkgPath;\n let modified = false;\n const depsToRemove: string[] = [];\n\n for (const [dep, version] of Object.entries(pkgJson.dependencies)) {\n // Only check workspace dependencies\n if (!version.startsWith('workspace:')) {\n continue;\n }\n\n // Check @pie-lib/* dependencies\n if (dep.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n const libName = dep.replace(WORKSPACE.PIE_LIB_PREFIX, '');\n if (!availableLibPackages.has(libName)) {\n depsToRemove.push(dep);\n removedDeps.push({ pkg: pkgName, dep });\n modified = true;\n }\n }\n\n // Check @pie-element/* dependencies\n if (dep.startsWith(WORKSPACE.PIE_ELEMENT_PREFIX)) {\n const elementName = dep.replace(WORKSPACE.PIE_ELEMENT_PREFIX, '');\n if (!availableElementPackages.has(elementName)) {\n depsToRemove.push(dep);\n removedDeps.push({ pkg: pkgName, dep });\n modified = true;\n }\n }\n }\n\n if (modified) {\n // Remove the invalid dependencies\n for (const dep of depsToRemove) {\n delete pkgJson.dependencies[dep];\n totalRemoved++;\n }\n\n // Write back the modified package.json\n const fs = await import('node:fs/promises');\n await fs.writeFile(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n', 'utf-8');\n }\n }\n\n if (totalRemoved > 0) {\n this.logger.info(` Removed ${totalRemoved} invalid workspace dependencies:\\n`);\n for (const { pkg, dep } of removedDeps) {\n this.logger.info(` - ${dep} from ${pkg}`);\n }\n this.log('');\n } else {\n this.logger.info(' ✓ All workspace dependencies are valid\\n');\n }\n\n // Run bun install to update the lockfile\n this.logger.info(' Running bun install to update lockfile...');\n const exitCode = await new Promise<number>((resolve) => {\n const child = spawn('bun', ['install'], {\n cwd: config.pieElementsNg,\n stdio: 'inherit',\n env: process.env,\n });\n child.on('close', (code) => resolve(code ?? 1));\n child.on('error', () => resolve(1));\n });\n\n if (exitCode !== 0) {\n this.logger.warn(' ⚠️ bun install failed');\n } else {\n this.logger.info(' ✓ bun install completed successfully\\n');\n }\n }\n\n private async buildTouchedPackages(config: SyncConfig, result: SyncResult): Promise<void> {\n const rootPkgPath = join(config.pieElementsNg, 'package.json');\n const rootPkg = (await loadPackageJson(rootPkgPath)) as PackageJson | null;\n const workspaces = Array.isArray(rootPkg?.workspaces) ? (rootPkg?.workspaces as string[]) : [];\n const hasElementsReactWorkspace = workspaces.some((ws) =>\n ws.startsWith('packages/elements-react')\n );\n const hasLibReactWorkspace = workspaces.some((ws) => ws.startsWith('packages/lib-react'));\n\n const elementFilters = Array.from(this.touchedElementPackages)\n .sort()\n .map((el) => `--filter=@pie-element/${el}`);\n const pieLibFilters = Array.from(this.touchedPieLibPackages)\n .sort()\n .map((pkg) => `--filter=@pie-lib/${pkg}`);\n\n const filters = [...elementFilters, ...pieLibFilters];\n\n if (\n (elementFilters.length > 0 && !hasElementsReactWorkspace) ||\n (pieLibFilters.length > 0 && !hasLibReactWorkspace)\n ) {\n this.logger.info(\n '🏗️ Build: Skipped (synced packages are not part of the current workspaces)'\n );\n this.logger.info(' Hint: add packages/elements-react/* and/or packages/lib-react/* to');\n this.logger.info(' root workspaces if you want turbo to build them.');\n return;\n }\n\n if (filters.length === 0) {\n if (config.verbose) {\n this.logger.info('🏗️ Build: Skipped (no touched packages detected)');\n }\n return;\n }\n\n // Check if vite is available before attempting to build\n const viteAvailable = await this.checkViteAvailable(config);\n if (!viteAvailable) {\n this.logger.warn(\n '🏗️ Build: Skipped (vite not found). Run \"bun install\" to install dependencies, then \"bun run build\" manually.'\n );\n return;\n }\n\n this.logger.section('🏗️ Building touched packages');\n this.logger.info(` Filters: ${filters.join(' ')}\\n`);\n\n // turbo filters are passed through the root build script:\n // package.json: \"build\": \"turbo run build\"\n // bun run requires `--` to forward args to the script.\n // Always use --force to disable Turbo cache for consistency\n const args = ['run', 'build', '--', '--force', ...filters];\n\n const exitCode = await new Promise<number>((resolve) => {\n const child = spawn('bun', args, {\n cwd: config.pieElementsNg,\n stdio: 'inherit',\n env: process.env,\n });\n child.on('close', (code) => resolve(code ?? 1));\n child.on('error', () => resolve(1));\n });\n\n if (exitCode !== 0) {\n const errorMsg = `Build failed (exit code ${exitCode}). This may be due to missing dependencies. Run 'bun install' to install new devDependencies, then 'bun run build' manually.`;\n if (config.skipBuild) {\n this.logger.warn(` ⚠️ ${errorMsg}`);\n } else {\n result.errors.push(errorMsg);\n }\n }\n }\n}\n"]}
|
|
@@ -13,7 +13,7 @@ export declare const WORKSPACE: {
|
|
|
13
13
|
readonly PIE_FRAMEWORK_PREFIX: "@pie-framework/";
|
|
14
14
|
};
|
|
15
15
|
export declare const EXCLUDED_UPSTREAM_ELEMENTS: readonly ["boilerplate-item-type"];
|
|
16
|
-
export declare const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES: readonly ["math-rendering"];
|
|
16
|
+
export declare const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES: readonly ["math-rendering", "translator"];
|
|
17
17
|
export declare const BUILD_TOOLS: {
|
|
18
18
|
readonly VITE: "^8.0.1";
|
|
19
19
|
readonly TYPESCRIPT: "^5.9.3";
|
|
@@ -19,7 +19,8 @@ export const WORKSPACE = {
|
|
|
19
19
|
export const EXCLUDED_UPSTREAM_ELEMENTS = ['boilerplate-item-type'];
|
|
20
20
|
// Upstream @pie-lib packages intentionally excluded from sync.
|
|
21
21
|
// math-rendering stays local (wrapper re-exports shared MathJax adapter).
|
|
22
|
-
|
|
22
|
+
// translator lives in packages/shared: its strings serve the Svelte elements too.
|
|
23
|
+
export const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES = ['math-rendering', 'translator'];
|
|
23
24
|
// Build tool versions
|
|
24
25
|
export const BUILD_TOOLS = {
|
|
25
26
|
VITE: '^8.0.1',
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"sync-constants.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-constants.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared constants for upstream sync operations\n */\n\n// Default repository paths\nexport const DEFAULT_PATHS = {\n PIE_ELEMENTS: '../pie-elements',\n PIE_LIB: '../pie-lib',\n PIE_ELEMENTS_NG: '.',\n} as const;\n\n// Workspace dependency patterns\nexport const WORKSPACE = {\n VERSION: 'workspace:*',\n PIE_LIB_PREFIX: '@pie-lib/',\n PIE_ELEMENT_PREFIX: '@pie-element/',\n PIE_FRAMEWORK_PREFIX: '@pie-framework/',\n} as const;\n\n// Upstream element packages intentionally excluded from sync.\n// These templates are not used in pie-elements-ng runtime.\nexport const EXCLUDED_UPSTREAM_ELEMENTS = ['boilerplate-item-type'] as const;\n\n// Upstream @pie-lib packages intentionally excluded from sync.\n// math-rendering stays local (wrapper re-exports shared MathJax adapter).\n// translator lives in packages/shared: its strings serve the Svelte elements too.\nexport const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES = ['math-rendering', 'translator'] as const;\n\n// Build tool versions\nexport const BUILD_TOOLS = {\n VITE: '^8.0.1',\n TYPESCRIPT: '^5.9.3',\n VITE_REACT_PLUGIN: '^6.0.1',\n} as const;\n\n// React versions\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"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { WORKSPACE } from './sync-constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Workspace directories that hold `@pie-lib/*` packages. A framework-independent
|
|
6
|
+
* library lives under `packages/shared` while keeping its `@pie-lib` name, so a
|
|
7
|
+
* package is found by the name in its manifest, never by its directory.
|
|
8
|
+
*/
|
|
9
|
+
const PIE_LIB_PARENT_DIRS = ['packages/lib-react', 'packages/lib-svelte', 'packages/shared'];
|
|
10
|
+
/** Maps each workspace `@pie-lib/<name>` package's `<name>` to its directory. */
|
|
11
|
+
export function findWorkspacePieLibPackages(root) {
|
|
12
|
+
const packages = new Map();
|
|
13
|
+
for (const parent of PIE_LIB_PARENT_DIRS) {
|
|
14
|
+
const parentDir = join(root, parent);
|
|
15
|
+
if (!existsSync(parentDir))
|
|
16
|
+
continue;
|
|
17
|
+
for (const entry of readdirSync(parentDir)) {
|
|
18
|
+
const manifestPath = join(parentDir, entry, 'package.json');
|
|
19
|
+
if (!existsSync(manifestPath))
|
|
20
|
+
continue;
|
|
21
|
+
const name = JSON.parse(readFileSync(manifestPath, 'utf8')).name;
|
|
22
|
+
if (typeof name === 'string' && name.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {
|
|
23
|
+
packages.set(name.slice(WORKSPACE.PIE_LIB_PREFIX.length), join(parentDir, entry));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return packages;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=workspace-pie-lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-pie-lib.js","sourceRoot":"","sources":["../../../src/lib/upstream/workspace-pie-lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;AAE7F,iFAAiF;AACjF,MAAM,UAAU,2BAA2B,CAAC,IAAY;IACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QACrC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;gBAAE,SAAS;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC1E,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import { existsSync, readdirSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { WORKSPACE } from './sync-constants.js';\n\n/**\n * Workspace directories that hold `@pie-lib/*` packages. A framework-independent\n * library lives under `packages/shared` while keeping its `@pie-lib` name, so a\n * package is found by the name in its manifest, never by its directory.\n */\nconst PIE_LIB_PARENT_DIRS = ['packages/lib-react', 'packages/lib-svelte', 'packages/shared'];\n\n/** Maps each workspace `@pie-lib/<name>` package's `<name>` to its directory. */\nexport function findWorkspacePieLibPackages(root: string): Map<string, string> {\n const packages = new Map<string, string>();\n for (const parent of PIE_LIB_PARENT_DIRS) {\n const parentDir = join(root, parent);\n if (!existsSync(parentDir)) continue;\n for (const entry of readdirSync(parentDir)) {\n const manifestPath = join(parentDir, entry, 'package.json');\n if (!existsSync(manifestPath)) continue;\n const name = JSON.parse(readFileSync(manifestPath, 'utf8')).name;\n if (typeof name === 'string' && name.startsWith(WORKSPACE.PIE_LIB_PREFIX)) {\n packages.set(name.slice(WORKSPACE.PIE_LIB_PREFIX.length), join(parentDir, entry));\n }\n }\n }\n return packages;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/cli",
|
|
3
|
-
"version": "0.1.2-next.
|
|
3
|
+
"version": "0.1.2-next.4",
|
|
4
4
|
"description": "CLI tools for managing PIE Elements NG",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@oclif/core": "^4.0.0",
|
|
25
25
|
"@oclif/plugin-help": "^6.2.0",
|
|
26
|
-
"@pie-element/element-bundler": "0.1.2-next.
|
|
26
|
+
"@pie-element/element-bundler": "0.1.2-next.2",
|
|
27
27
|
"es-module-lexer": "^1.7.0",
|
|
28
28
|
"glob": "^13.0.0",
|
|
29
29
|
"open": "^10.0.3",
|