@pie-element/cli 0.1.3-next.20261002220849 ā 0.1.3-next.20261005184705
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -138
- package/dist/commands/verify/controllers.js +1 -6
- package/dist/commands/verify/controllers.js.map +1 -1
- package/dist/lib/{upstream/sync-demo-metadata.js ā demo/demo-metadata.js} +1 -1
- package/dist/lib/demo/demo-metadata.js.map +1 -0
- package/dist/utils/package-json.d.ts +0 -1
- package/dist/utils/package-json.js +0 -19
- package/dist/utils/package-json.js.map +1 -1
- package/package.json +4 -7
- package/dist/commands/packages/create-controllers.d.ts +0 -12
- package/dist/commands/packages/create-controllers.js +0 -103
- package/dist/commands/packages/create-controllers.js.map +0 -1
- package/dist/commands/packages/create-lib-react.d.ts +0 -16
- package/dist/commands/packages/create-lib-react.js +0 -226
- package/dist/commands/packages/create-lib-react.js.map +0 -1
- package/dist/commands/packages/create-react-elements.d.ts +0 -15
- package/dist/commands/packages/create-react-elements.js +0 -239
- package/dist/commands/packages/create-react-elements.js.map +0 -1
- package/dist/commands/packages/init-synced-elements.d.ts +0 -15
- package/dist/commands/packages/init-synced-elements.js +0 -202
- package/dist/commands/packages/init-synced-elements.js.map +0 -1
- package/dist/commands/upstream/analyze-esm.d.ts +0 -58
- package/dist/commands/upstream/analyze-esm.js +0 -1452
- package/dist/commands/upstream/analyze-esm.js.map +0 -1
- package/dist/commands/upstream/check.d.ts +0 -14
- package/dist/commands/upstream/check.js +0 -165
- package/dist/commands/upstream/check.js.map +0 -1
- package/dist/commands/upstream/deps.d.ts +0 -14
- package/dist/commands/upstream/deps.js +0 -174
- package/dist/commands/upstream/deps.js.map +0 -1
- package/dist/commands/upstream/sync.d.ts +0 -34
- package/dist/commands/upstream/sync.js +0 -886
- package/dist/commands/upstream/sync.js.map +0 -1
- package/dist/commands/upstream/track.d.ts +0 -14
- package/dist/commands/upstream/track.js +0 -115
- package/dist/commands/upstream/track.js.map +0 -1
- package/dist/commands/upstream/update.d.ts +0 -14
- package/dist/commands/upstream/update.js +0 -128
- package/dist/commands/upstream/update.js.map +0 -1
- package/dist/lib/upstream/editor-runtime.d.ts +0 -15
- package/dist/lib/upstream/editor-runtime.js +0 -55
- package/dist/lib/upstream/editor-runtime.js.map +0 -1
- package/dist/lib/upstream/repo-utils.d.ts +0 -8
- package/dist/lib/upstream/repo-utils.js +0 -10
- package/dist/lib/upstream/repo-utils.js.map +0 -1
- package/dist/lib/upstream/sync-compatibility.d.ts +0 -20
- package/dist/lib/upstream/sync-compatibility.js +0 -39
- package/dist/lib/upstream/sync-compatibility.js.map +0 -1
- package/dist/lib/upstream/sync-constants.d.ts +0 -86
- package/dist/lib/upstream/sync-constants.js +0 -130
- package/dist/lib/upstream/sync-constants.js.map +0 -1
- package/dist/lib/upstream/sync-controllers-strategy.d.ts +0 -17
- package/dist/lib/upstream/sync-controllers-strategy.js +0 -253
- package/dist/lib/upstream/sync-controllers-strategy.js.map +0 -1
- package/dist/lib/upstream/sync-demo-metadata.js.map +0 -1
- package/dist/lib/upstream/sync-entry-discovery.d.ts +0 -3
- package/dist/lib/upstream/sync-entry-discovery.js +0 -23
- package/dist/lib/upstream/sync-entry-discovery.js.map +0 -1
- package/dist/lib/upstream/sync-externals.d.ts +0 -29
- package/dist/lib/upstream/sync-externals.js +0 -180
- package/dist/lib/upstream/sync-externals.js.map +0 -1
- package/dist/lib/upstream/sync-filesystem.d.ts +0 -20
- package/dist/lib/upstream/sync-filesystem.js +0 -64
- package/dist/lib/upstream/sync-filesystem.js.map +0 -1
- package/dist/lib/upstream/sync-imports.d.ts +0 -297
- package/dist/lib/upstream/sync-imports.js +0 -1318
- package/dist/lib/upstream/sync-imports.js.map +0 -1
- package/dist/lib/upstream/sync-package-json.d.ts +0 -8
- package/dist/lib/upstream/sync-package-json.js +0 -15
- package/dist/lib/upstream/sync-package-json.js.map +0 -1
- package/dist/lib/upstream/sync-package-manager.d.ts +0 -66
- package/dist/lib/upstream/sync-package-manager.js +0 -959
- package/dist/lib/upstream/sync-package-manager.js.map +0 -1
- package/dist/lib/upstream/sync-pielib-strategy.d.ts +0 -27
- package/dist/lib/upstream/sync-pielib-strategy.js +0 -463
- package/dist/lib/upstream/sync-pielib-strategy.js.map +0 -1
- package/dist/lib/upstream/sync-presets.d.ts +0 -57
- package/dist/lib/upstream/sync-presets.js +0 -262
- package/dist/lib/upstream/sync-presets.js.map +0 -1
- package/dist/lib/upstream/sync-react-strategy.d.ts +0 -59
- package/dist/lib/upstream/sync-react-strategy.js +0 -941
- package/dist/lib/upstream/sync-react-strategy.js.map +0 -1
- package/dist/lib/upstream/sync-source-edit.d.ts +0 -14
- package/dist/lib/upstream/sync-source-edit.js +0 -89
- package/dist/lib/upstream/sync-source-edit.js.map +0 -1
- package/dist/lib/upstream/sync-source-tree.d.ts +0 -22
- package/dist/lib/upstream/sync-source-tree.js +0 -101
- package/dist/lib/upstream/sync-source-tree.js.map +0 -1
- package/dist/lib/upstream/sync-strategy.d.ts +0 -49
- package/dist/lib/upstream/sync-strategy.js +0 -2
- package/dist/lib/upstream/sync-strategy.js.map +0 -1
- package/dist/lib/upstream/sync-summary.d.ts +0 -19
- package/dist/lib/upstream/sync-summary.js +0 -157
- package/dist/lib/upstream/sync-summary.js.map +0 -1
- package/dist/lib/upstream/sync-transforms.d.ts +0 -62
- package/dist/lib/upstream/sync-transforms.js +0 -105
- package/dist/lib/upstream/sync-transforms.js.map +0 -1
- package/dist/lib/upstream/sync-vite-config.d.ts +0 -21
- package/dist/lib/upstream/sync-vite-config.js +0 -239
- package/dist/lib/upstream/sync-vite-config.js.map +0 -1
- package/dist/lib/upstream/workspace-pie-lib.d.ts +0 -2
- package/dist/lib/upstream/workspace-pie-lib.js +0 -29
- package/dist/lib/upstream/workspace-pie-lib.js.map +0 -1
- package/dist/utils/compatibility.d.ts +0 -126
- package/dist/utils/compatibility.js +0 -151
- package/dist/utils/compatibility.js.map +0 -1
- package/dist/utils/conversion.d.ts +0 -19
- package/dist/utils/conversion.js +0 -102
- package/dist/utils/conversion.js.map +0 -1
- package/dist/utils/git.d.ts +0 -12
- package/dist/utils/git.js +0 -58
- package/dist/utils/git.js.map +0 -1
- /package/dist/lib/{upstream/sync-demo-metadata.d.ts ā demo/demo-metadata.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @pie-element/cli
|
|
2
2
|
|
|
3
|
-
CLI tools for managing PIE Elements NG -
|
|
3
|
+
CLI tools for managing PIE Elements NG - demos, package management, docs generation, and verification.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -21,7 +21,7 @@ From the root of the monorepo:
|
|
|
21
21
|
bun run cli --help
|
|
22
22
|
|
|
23
23
|
# Show command help
|
|
24
|
-
bun run cli
|
|
24
|
+
bun run cli dev:demo --help
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
## Commands
|
|
@@ -40,87 +40,6 @@ bun run cli dev:demo
|
|
|
40
40
|
bun run cli dev:demo --port 5180 --build --no-open
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
### Upstream Synchronization
|
|
44
|
-
|
|
45
|
-
#### `upstream:sync`
|
|
46
|
-
|
|
47
|
-
Synchronize code from upstream pie-elements repository.
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
# Dry run to preview changes
|
|
51
|
-
bun run cli upstream:sync --dry-run
|
|
52
|
-
|
|
53
|
-
# Sync specific element
|
|
54
|
-
bun run cli upstream:sync --element multiple-choice
|
|
55
|
-
|
|
56
|
-
# Sync all compatible elements (controllers + React UI + demos)
|
|
57
|
-
bun run cli upstream:sync
|
|
58
|
-
|
|
59
|
-
# Verbose output
|
|
60
|
-
bun run cli upstream:sync --verbose
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
#### `upstream:check`
|
|
64
|
-
|
|
65
|
-
Check for changes in upstream repositories.
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
# Check all elements
|
|
69
|
-
bun run cli upstream:check
|
|
70
|
-
|
|
71
|
-
# Check specific element
|
|
72
|
-
bun run cli upstream:check --element multiple-choice
|
|
73
|
-
|
|
74
|
-
# Verbose output
|
|
75
|
-
bun run cli upstream:check --verbose
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
#### `upstream:track`
|
|
79
|
-
|
|
80
|
-
Track upstream repository changes.
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
# Show new commits since last check
|
|
84
|
-
bun run cli upstream:track show
|
|
85
|
-
|
|
86
|
-
# Record current upstream state
|
|
87
|
-
bun run cli upstream:track record
|
|
88
|
-
|
|
89
|
-
# Compare with specific commit
|
|
90
|
-
bun run cli upstream:track compare <commit-sha>
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
#### `upstream:deps`
|
|
94
|
-
|
|
95
|
-
Compare dependencies with upstream repositories.
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
bun run cli upstream:deps
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
#### `upstream:analyze-esm`
|
|
102
|
-
|
|
103
|
-
Analyze ESM compatibility of elements and packages.
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
# Analyze and generate report
|
|
107
|
-
bun run cli upstream:analyze-esm
|
|
108
|
-
|
|
109
|
-
# Verbose output
|
|
110
|
-
bun run cli upstream:analyze-esm --verbose
|
|
111
|
-
|
|
112
|
-
# Custom output path
|
|
113
|
-
bun run cli upstream:analyze-esm --output ./my-report.json
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
#### `upstream:update`
|
|
117
|
-
|
|
118
|
-
Recommended wrapper that runs analyze + sync.
|
|
119
|
-
|
|
120
|
-
```bash
|
|
121
|
-
bun run cli upstream:update
|
|
122
|
-
```
|
|
123
|
-
|
|
124
43
|
### Package Management
|
|
125
44
|
|
|
126
45
|
#### `packages:enable-publishing`
|
|
@@ -135,42 +54,6 @@ bun run cli packages:enable-publishing --dry-run
|
|
|
135
54
|
bun run cli packages:enable-publishing
|
|
136
55
|
```
|
|
137
56
|
|
|
138
|
-
#### `packages:create-controllers`
|
|
139
|
-
|
|
140
|
-
Generate package.json files for controller packages.
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
bun run cli packages:create-controllers
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
#### `packages:create-lib-react`
|
|
147
|
-
|
|
148
|
-
Generate configuration files for @pie-lib React packages.
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
# Dry run
|
|
152
|
-
bun run cli packages:create-lib-react --dry-run
|
|
153
|
-
|
|
154
|
-
# Generate files
|
|
155
|
-
bun run cli packages:create-lib-react
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
#### `packages:create-react-elements`
|
|
159
|
-
|
|
160
|
-
Generate configuration files for React element packages.
|
|
161
|
-
|
|
162
|
-
```bash
|
|
163
|
-
bun run cli packages:create-react-elements
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
#### `packages:init-synced-elements`
|
|
167
|
-
|
|
168
|
-
Initialize package scaffolding for synced elements.
|
|
169
|
-
|
|
170
|
-
```bash
|
|
171
|
-
bun run cli packages:init-synced-elements
|
|
172
|
-
```
|
|
173
|
-
|
|
174
57
|
### Documentation
|
|
175
58
|
|
|
176
59
|
#### `docs:generate`
|
|
@@ -242,7 +125,7 @@ bun run cli verify:dependency-integrity --fail-on-hoist
|
|
|
242
125
|
bun run build
|
|
243
126
|
|
|
244
127
|
# Run in development mode (with source maps)
|
|
245
|
-
bun run dev
|
|
128
|
+
bun run dev dev:demo --help
|
|
246
129
|
|
|
247
130
|
# Lint
|
|
248
131
|
bun run lint
|
|
@@ -254,24 +137,7 @@ The CLI is built with [oclif](https://oclif.io/), following the same architectur
|
|
|
254
137
|
|
|
255
138
|
- **Commands**: Located in `src/commands/` organized by topic
|
|
256
139
|
- **Utilities**: Shared utilities in `src/utils/`
|
|
257
|
-
- **Topics**: Commands are grouped into topics (
|
|
258
|
-
|
|
259
|
-
## Migration from Scripts
|
|
260
|
-
|
|
261
|
-
This CLI replaces the scripts in `./scripts` directory:
|
|
262
|
-
|
|
263
|
-
| Old Script | New CLI Command |
|
|
264
|
-
| ------------------------------------------- | -------------------------------------------- |
|
|
265
|
-
| `bun scripts/sync-upstream.ts` | `bun run cli upstream:sync` |
|
|
266
|
-
| `bun scripts/check-upstream.ts` | `bun run cli upstream:check` |
|
|
267
|
-
| `bun scripts/track-upstream.ts show` | `bun run cli upstream:track show` |
|
|
268
|
-
| `bun scripts/check-deps.ts` | `bun run cli upstream:deps` |
|
|
269
|
-
| `bun scripts/analyze-esm-compatibility.ts` | `bun run cli upstream:analyze-esm` |
|
|
270
|
-
| `bun scripts/enable-react-publishing.ts` | `bun run cli packages:enable-publishing` |
|
|
271
|
-
| `bun scripts/create-controller-packages.ts` | `bun run cli packages:create-controllers` |
|
|
272
|
-
| `bun scripts/create-lib-react-packages.ts` | `bun run cli packages:create-lib-react` |
|
|
273
|
-
| `bun scripts/create-react-packages.ts` | `bun run cli packages:create-react-elements` |
|
|
274
|
-
| `bun scripts/verify-react-build.ts` | `bun run cli verify:react-build` |
|
|
140
|
+
- **Topics**: Commands are grouped into topics (dev, packages, docs, verify)
|
|
275
141
|
|
|
276
142
|
## License
|
|
277
143
|
|
|
@@ -3,7 +3,6 @@ import { Logger } from '../../utils/logger.js';
|
|
|
3
3
|
import { existsSync } from 'node:fs';
|
|
4
4
|
import { readdir, readFile } from 'node:fs/promises';
|
|
5
5
|
import { join } from 'node:path';
|
|
6
|
-
import { EXCLUDED_UPSTREAM_ELEMENTS } from '../../lib/upstream/sync-constants.js';
|
|
7
6
|
const ELEMENTS_REACT_DIR = 'packages/elements-react';
|
|
8
7
|
const ELEMENTS_SVELTE_DIR = 'packages/elements-svelte';
|
|
9
8
|
function hasAnyControllerSource(elementDir) {
|
|
@@ -217,12 +216,8 @@ export default class VerifyControllers extends Command {
|
|
|
217
216
|
const { flags } = await this.parse(VerifyControllers);
|
|
218
217
|
this.logger = new Logger(flags.verbose);
|
|
219
218
|
this.logger.section('š§© Verifying published controller modules');
|
|
220
|
-
const excludedElements = new Set(EXCLUDED_UPSTREAM_ELEMENTS);
|
|
221
219
|
const reactItems = await readdir(ELEMENTS_REACT_DIR, { withFileTypes: true });
|
|
222
|
-
const reactNames = reactItems
|
|
223
|
-
.filter((d) => d.isDirectory())
|
|
224
|
-
.map((d) => d.name)
|
|
225
|
-
.filter((name) => !excludedElements.has(name));
|
|
220
|
+
const reactNames = reactItems.filter((d) => d.isDirectory()).map((d) => d.name);
|
|
226
221
|
const svelteItems = await readdir(ELEMENTS_SVELTE_DIR, { withFileTypes: true });
|
|
227
222
|
const svelteNames = svelteItems.filter((d) => d.isDirectory()).map((d) => d.name);
|
|
228
223
|
let jobs = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controllers.js","sourceRoot":"","sources":["../../../src/commands/verify/controllers.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 } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { EXCLUDED_UPSTREAM_ELEMENTS } from '../../lib/upstream/sync-constants.js';\n\ntype CheckResult = {\n element: string;\n elementDir: string;\n ok: boolean;\n errors: string[];\n warnings: string[];\n};\n\nconst ELEMENTS_REACT_DIR = 'packages/elements-react';\nconst ELEMENTS_SVELTE_DIR = 'packages/elements-svelte';\n\nfunction hasAnyControllerSource(elementDir: string): boolean {\n const base = join(elementDir, 'src', 'controller', 'index');\n return (\n existsSync(base + '.ts') ||\n existsSync(base + '.tsx') ||\n existsSync(base + '.js') ||\n existsSync(base + '.jsx')\n );\n}\n\nfunction hasAnyPrintSource(elementDir: string): boolean {\n const base = join(elementDir, 'src', 'print', 'index');\n return (\n existsSync(base + '.ts') ||\n existsSync(base + '.tsx') ||\n existsSync(base + '.js') ||\n existsSync(base + '.jsx')\n );\n}\n\nfunction hasAnyAuthorOrConfigureSource(elementDir: string): boolean {\n for (const view of ['author', 'configure']) {\n const base = join(elementDir, 'src', view, 'index');\n if (\n existsSync(base + '.ts') ||\n existsSync(base + '.tsx') ||\n existsSync(base + '.js') ||\n existsSync(base + '.jsx')\n ) {\n return true;\n }\n }\n return false;\n}\n\nasync function verifyControllerPackage(elementDir: string, element: string): Promise<CheckResult> {\n const pkgPath = join(elementDir, 'package.json');\n if (!existsSync(pkgPath)) {\n return {\n element,\n elementDir,\n ok: false,\n errors: ['Missing package.json'],\n warnings: [],\n };\n }\n\n const hasController = hasAnyControllerSource(elementDir);\n const hasAuthorOrConfigure = hasAnyAuthorOrConfigureSource(elementDir);\n const hasPrint = hasAnyPrintSource(elementDir);\n if (!hasController && !hasAuthorOrConfigure && !hasPrint) {\n return { element, elementDir, ok: true, errors: [], warnings: [] };\n }\n\n const pkgRaw = await readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(pkgRaw) as any;\n const exportsObj = pkg?.exports as any;\n const controllerExport = exportsObj?.['./controller'];\n const controllerJsExport = exportsObj?.['./controller.js'];\n const configureExport = exportsObj?.['./configure'];\n const printExport = exportsObj?.['./print'];\n const printJsExport = exportsObj?.['./print.js'];\n const expectedControllerSpecifier = `${pkg.name}/controller`;\n const expectedConfigureSpecifier = `${pkg.name}/configure`;\n const expectedShim = \"export * from './dist/controller/index.js';\\n\";\n\n const errors: string[] = [];\n const warnings: string[] = [];\n const files = Array.isArray(pkg.files) ? pkg.files : [];\n\n if (hasController) {\n if (pkg?.pie?.controller !== expectedControllerSpecifier) {\n errors.push(`package.json pie.controller must be \"${expectedControllerSpecifier}\"`);\n }\n if (!files.includes('controller.js')) {\n errors.push('package.json files[] must include \"controller.js\"');\n }\n }\n if (hasAuthorOrConfigure) {\n if (pkg?.pie?.configure !== expectedConfigureSpecifier) {\n errors.push(`package.json pie.configure must be \"${expectedConfigureSpecifier}\"`);\n }\n if (!configureExport) {\n errors.push('Missing exports[\"./configure\"] in package.json');\n }\n if (!files.includes('configure.js')) {\n errors.push('package.json files[] must include \"configure.js\"');\n }\n }\n\n if (hasController && !controllerExport) {\n errors.push('Missing exports[\"./controller\"] in package.json');\n } else if (controllerExport) {\n const jsPath = controllerExport?.default as string | undefined;\n const dtsPath = controllerExport?.types as string | undefined;\n\n if (!jsPath || typeof jsPath !== 'string') {\n errors.push('exports[\"./controller\"].default is missing');\n } else {\n const abs = join(elementDir, jsPath.replace(/^\\.\\//, ''));\n if (!existsSync(abs)) {\n errors.push(`Controller JS artifact missing: ${jsPath}`);\n }\n }\n\n if (!dtsPath || typeof dtsPath !== 'string') {\n warnings.push('exports[\"./controller\"].types is missing');\n } else {\n const abs = join(elementDir, dtsPath.replace(/^\\.\\//, ''));\n if (!existsSync(abs)) {\n warnings.push(`Controller d.ts artifact missing: ${dtsPath}`);\n }\n }\n }\n\n if (hasController && !controllerJsExport) {\n errors.push('Missing exports[\"./controller.js\"] in package.json');\n } else if (controllerJsExport) {\n const jsPath = controllerJsExport?.default as string | undefined;\n const dtsPath = controllerJsExport?.types as string | undefined;\n if (controllerExport && jsPath !== controllerExport?.default) {\n errors.push('exports[\"./controller.js\"].default must match exports[\"./controller\"].default');\n }\n if (controllerExport && dtsPath !== controllerExport?.types) {\n errors.push('exports[\"./controller.js\"].types must match exports[\"./controller\"].types');\n }\n }\n\n if (configureExport) {\n const configureTarget = configureExport?.default as string | undefined;\n if (!configureTarget || typeof configureTarget !== 'string') {\n errors.push('exports[\"./configure\"].default is missing');\n } else {\n const abs = join(elementDir, configureTarget.replace(/^\\.\\//, ''));\n if (!existsSync(abs)) {\n errors.push(`Configure JS artifact missing: ${configureTarget}`);\n }\n const configureShimPath = join(elementDir, 'configure.js');\n const expectedConfigureShim = `export { default } from '${configureTarget}';\\nexport * from '${configureTarget}';\\n`;\n if (!existsSync(configureShimPath)) {\n errors.push('Missing root configure.js compatibility shim');\n } else {\n const configureShim = await readFile(configureShimPath, 'utf-8');\n if (configureShim !== expectedConfigureShim) {\n errors.push(`Root configure.js shim must re-export ${configureTarget}`);\n }\n }\n }\n }\n\n // Print is checked on the same terms as controller and configure: the root shim is a\n // publish contract, because a directory-aliasing bundler resolves `<pkg>/print` to it\n // rather than through the exports map.\n if (hasPrint) {\n if (!files.includes('print.js')) {\n errors.push('package.json files[] must include \"print.js\"');\n }\n if (!printExport) {\n errors.push('Missing exports[\"./print\"] in package.json');\n }\n if (!printJsExport) {\n errors.push('Missing exports[\"./print.js\"] in package.json');\n } else if (printExport) {\n if (printJsExport?.default !== printExport?.default) {\n errors.push('exports[\"./print.js\"].default must match exports[\"./print\"].default');\n }\n if (printJsExport?.types !== printExport?.types) {\n errors.push('exports[\"./print.js\"].types must match exports[\"./print\"].types');\n }\n }\n\n const printTarget = (printExport?.default as string | undefined) ?? './dist/print/index.js';\n const printArtifact = join(elementDir, printTarget.replace(/^\\.\\//, ''));\n if (!existsSync(printArtifact)) {\n errors.push(`Print JS artifact missing: ${printTarget}`);\n }\n\n const printShimPath = join(elementDir, 'print.js');\n const expectedPrintShim = `export { default } from '${printTarget}';\\nexport * from '${printTarget}';\\n`;\n if (!existsSync(printShimPath)) {\n errors.push('Missing root print.js compatibility shim');\n } else {\n const printShim = await readFile(printShimPath, 'utf-8');\n if (printShim !== expectedPrintShim) {\n errors.push(`Root print.js shim must re-export ${printTarget}`);\n }\n }\n }\n\n if (hasController) {\n const shimPath = join(elementDir, 'controller.js');\n if (!existsSync(shimPath)) {\n errors.push('Missing root controller.js compatibility shim');\n } else {\n const shim = await readFile(shimPath, 'utf-8');\n if (shim !== expectedShim) {\n errors.push('Root controller.js shim must re-export ./dist/controller/index.js');\n }\n }\n }\n\n return { element, elementDir, ok: errors.length === 0, errors, warnings };\n}\n\nexport default class VerifyControllers extends Command {\n static override description =\n 'Verify that element packages will publish controller modules correctly (exports + dist artifacts)';\n\n static override examples = [\n 'bun run cli <%= command.id %>',\n 'bun cli <%= command.id %>',\n '<%= config.bin %> <%= command.id %>',\n ];\n\n static override flags = {\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n element: Flags.string({\n description: 'Check only specified element (react or svelte package name)',\n }),\n };\n\n private logger = new Logger();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(VerifyControllers);\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('š§© Verifying published controller modules');\n\n const excludedElements = new Set<string>(EXCLUDED_UPSTREAM_ELEMENTS as readonly string[]);\n\n const reactItems = await readdir(ELEMENTS_REACT_DIR, { withFileTypes: true });\n const reactNames = reactItems\n .filter((d) => d.isDirectory())\n .map((d) => d.name)\n .filter((name) => !excludedElements.has(name));\n\n const svelteItems = await readdir(ELEMENTS_SVELTE_DIR, { withFileTypes: true });\n const svelteNames = svelteItems.filter((d) => d.isDirectory()).map((d) => d.name);\n\n type Job = { name: string; dir: string };\n let jobs: Job[] = [];\n\n if (flags.element) {\n const r = join(ELEMENTS_REACT_DIR, flags.element);\n const s = join(ELEMENTS_SVELTE_DIR, flags.element);\n if (reactNames.includes(flags.element) && existsSync(join(r, 'package.json'))) {\n jobs = [{ name: flags.element, dir: r }];\n } else if (svelteNames.includes(flags.element) && existsSync(join(s, 'package.json'))) {\n jobs = [{ name: flags.element, dir: s }];\n } else {\n this.error(\n `Element '${flags.element}' not found under ${ELEMENTS_REACT_DIR} or ${ELEMENTS_SVELTE_DIR}`\n );\n }\n } else {\n jobs = [\n ...reactNames.sort().map((name) => ({ name, dir: join(ELEMENTS_REACT_DIR, name) })),\n ...svelteNames.sort().map((name) => ({ name, dir: join(ELEMENTS_SVELTE_DIR, name) })),\n ];\n }\n\n const results: CheckResult[] = [];\n for (const { name, dir } of jobs) {\n results.push(await verifyControllerPackage(dir, name));\n }\n\n const failed = results.filter((r) => !r.ok);\n const warned = results.filter((r) => r.warnings.length > 0);\n const checked = results.filter((r) => hasAnyControllerSource(r.elementDir));\n\n this.log(`\\n${'='.repeat(60)}`);\n this.log('š CONTROLLER PUBLISH VERIFICATION REPORT');\n this.log('='.repeat(60));\n this.log(`Elements scanned: ${results.length}`);\n this.log(`Elements with controllers: ${checked.length}`);\n this.log(`Passed: ${results.length - failed.length} ā
`);\n this.log(`Failed: ${failed.length} ā`);\n this.log(`Warnings: ${warned.length} ā ļø`);\n\n if (failed.length > 0) {\n this.log('\\nā FAILURES:');\n for (const f of failed) {\n this.log(` - ${f.element}`);\n for (const e of f.errors) this.log(` ⢠${e}`);\n }\n this.log('\\nš” Fixes:');\n this.log(' - Ensure package.json exports include \"./controller\" and \"./controller.js\"');\n this.log(' - Ensure package.json pie.controller is \"@pie-element/<element>/controller\"');\n this.log(' - Ensure package.json files[] includes \"controller.js\"');\n this.log(' - Ensure root controller.js re-exports \"./dist/controller/index.js\"');\n this.log(' - Ensure print-bearing elements publish \"print.js\" and export \"./print.js\"');\n this.log(' - Ensure build outputs exist under dist/controller/');\n this.log(` - Rebuild: cd ${ELEMENTS_REACT_DIR}/<element> && bun run build`);\n this.log(` - Or: cd ${ELEMENTS_SVELTE_DIR}/<element> && bun run build`);\n this.error('Some controller publish checks failed', { exit: 1 });\n }\n\n if (warned.length > 0) {\n this.log('\\nā ļø WARNINGS (non-blocking):');\n for (const w of warned) {\n this.log(` - ${w.element}`);\n for (const msg of w.warnings) this.log(` ⢠${msg}`);\n }\n }\n\n this.log(`\\n${'='.repeat(60)}\\n`);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"controllers.js","sourceRoot":"","sources":["../../../src/commands/verify/controllers.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 } from 'node:fs/promises';\nimport { join } from 'node:path';\n\ntype CheckResult = {\n element: string;\n elementDir: string;\n ok: boolean;\n errors: string[];\n warnings: string[];\n};\n\nconst ELEMENTS_REACT_DIR = 'packages/elements-react';\nconst ELEMENTS_SVELTE_DIR = 'packages/elements-svelte';\n\nfunction hasAnyControllerSource(elementDir: string): boolean {\n const base = join(elementDir, 'src', 'controller', 'index');\n return (\n existsSync(base + '.ts') ||\n existsSync(base + '.tsx') ||\n existsSync(base + '.js') ||\n existsSync(base + '.jsx')\n );\n}\n\nfunction hasAnyPrintSource(elementDir: string): boolean {\n const base = join(elementDir, 'src', 'print', 'index');\n return (\n existsSync(base + '.ts') ||\n existsSync(base + '.tsx') ||\n existsSync(base + '.js') ||\n existsSync(base + '.jsx')\n );\n}\n\nfunction hasAnyAuthorOrConfigureSource(elementDir: string): boolean {\n for (const view of ['author', 'configure']) {\n const base = join(elementDir, 'src', view, 'index');\n if (\n existsSync(base + '.ts') ||\n existsSync(base + '.tsx') ||\n existsSync(base + '.js') ||\n existsSync(base + '.jsx')\n ) {\n return true;\n }\n }\n return false;\n}\n\nasync function verifyControllerPackage(elementDir: string, element: string): Promise<CheckResult> {\n const pkgPath = join(elementDir, 'package.json');\n if (!existsSync(pkgPath)) {\n return {\n element,\n elementDir,\n ok: false,\n errors: ['Missing package.json'],\n warnings: [],\n };\n }\n\n const hasController = hasAnyControllerSource(elementDir);\n const hasAuthorOrConfigure = hasAnyAuthorOrConfigureSource(elementDir);\n const hasPrint = hasAnyPrintSource(elementDir);\n if (!hasController && !hasAuthorOrConfigure && !hasPrint) {\n return { element, elementDir, ok: true, errors: [], warnings: [] };\n }\n\n const pkgRaw = await readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(pkgRaw) as any;\n const exportsObj = pkg?.exports as any;\n const controllerExport = exportsObj?.['./controller'];\n const controllerJsExport = exportsObj?.['./controller.js'];\n const configureExport = exportsObj?.['./configure'];\n const printExport = exportsObj?.['./print'];\n const printJsExport = exportsObj?.['./print.js'];\n const expectedControllerSpecifier = `${pkg.name}/controller`;\n const expectedConfigureSpecifier = `${pkg.name}/configure`;\n const expectedShim = \"export * from './dist/controller/index.js';\\n\";\n\n const errors: string[] = [];\n const warnings: string[] = [];\n const files = Array.isArray(pkg.files) ? pkg.files : [];\n\n if (hasController) {\n if (pkg?.pie?.controller !== expectedControllerSpecifier) {\n errors.push(`package.json pie.controller must be \"${expectedControllerSpecifier}\"`);\n }\n if (!files.includes('controller.js')) {\n errors.push('package.json files[] must include \"controller.js\"');\n }\n }\n if (hasAuthorOrConfigure) {\n if (pkg?.pie?.configure !== expectedConfigureSpecifier) {\n errors.push(`package.json pie.configure must be \"${expectedConfigureSpecifier}\"`);\n }\n if (!configureExport) {\n errors.push('Missing exports[\"./configure\"] in package.json');\n }\n if (!files.includes('configure.js')) {\n errors.push('package.json files[] must include \"configure.js\"');\n }\n }\n\n if (hasController && !controllerExport) {\n errors.push('Missing exports[\"./controller\"] in package.json');\n } else if (controllerExport) {\n const jsPath = controllerExport?.default as string | undefined;\n const dtsPath = controllerExport?.types as string | undefined;\n\n if (!jsPath || typeof jsPath !== 'string') {\n errors.push('exports[\"./controller\"].default is missing');\n } else {\n const abs = join(elementDir, jsPath.replace(/^\\.\\//, ''));\n if (!existsSync(abs)) {\n errors.push(`Controller JS artifact missing: ${jsPath}`);\n }\n }\n\n if (!dtsPath || typeof dtsPath !== 'string') {\n warnings.push('exports[\"./controller\"].types is missing');\n } else {\n const abs = join(elementDir, dtsPath.replace(/^\\.\\//, ''));\n if (!existsSync(abs)) {\n warnings.push(`Controller d.ts artifact missing: ${dtsPath}`);\n }\n }\n }\n\n if (hasController && !controllerJsExport) {\n errors.push('Missing exports[\"./controller.js\"] in package.json');\n } else if (controllerJsExport) {\n const jsPath = controllerJsExport?.default as string | undefined;\n const dtsPath = controllerJsExport?.types as string | undefined;\n if (controllerExport && jsPath !== controllerExport?.default) {\n errors.push('exports[\"./controller.js\"].default must match exports[\"./controller\"].default');\n }\n if (controllerExport && dtsPath !== controllerExport?.types) {\n errors.push('exports[\"./controller.js\"].types must match exports[\"./controller\"].types');\n }\n }\n\n if (configureExport) {\n const configureTarget = configureExport?.default as string | undefined;\n if (!configureTarget || typeof configureTarget !== 'string') {\n errors.push('exports[\"./configure\"].default is missing');\n } else {\n const abs = join(elementDir, configureTarget.replace(/^\\.\\//, ''));\n if (!existsSync(abs)) {\n errors.push(`Configure JS artifact missing: ${configureTarget}`);\n }\n const configureShimPath = join(elementDir, 'configure.js');\n const expectedConfigureShim = `export { default } from '${configureTarget}';\\nexport * from '${configureTarget}';\\n`;\n if (!existsSync(configureShimPath)) {\n errors.push('Missing root configure.js compatibility shim');\n } else {\n const configureShim = await readFile(configureShimPath, 'utf-8');\n if (configureShim !== expectedConfigureShim) {\n errors.push(`Root configure.js shim must re-export ${configureTarget}`);\n }\n }\n }\n }\n\n // Print is checked on the same terms as controller and configure: the root shim is a\n // publish contract, because a directory-aliasing bundler resolves `<pkg>/print` to it\n // rather than through the exports map.\n if (hasPrint) {\n if (!files.includes('print.js')) {\n errors.push('package.json files[] must include \"print.js\"');\n }\n if (!printExport) {\n errors.push('Missing exports[\"./print\"] in package.json');\n }\n if (!printJsExport) {\n errors.push('Missing exports[\"./print.js\"] in package.json');\n } else if (printExport) {\n if (printJsExport?.default !== printExport?.default) {\n errors.push('exports[\"./print.js\"].default must match exports[\"./print\"].default');\n }\n if (printJsExport?.types !== printExport?.types) {\n errors.push('exports[\"./print.js\"].types must match exports[\"./print\"].types');\n }\n }\n\n const printTarget = (printExport?.default as string | undefined) ?? './dist/print/index.js';\n const printArtifact = join(elementDir, printTarget.replace(/^\\.\\//, ''));\n if (!existsSync(printArtifact)) {\n errors.push(`Print JS artifact missing: ${printTarget}`);\n }\n\n const printShimPath = join(elementDir, 'print.js');\n const expectedPrintShim = `export { default } from '${printTarget}';\\nexport * from '${printTarget}';\\n`;\n if (!existsSync(printShimPath)) {\n errors.push('Missing root print.js compatibility shim');\n } else {\n const printShim = await readFile(printShimPath, 'utf-8');\n if (printShim !== expectedPrintShim) {\n errors.push(`Root print.js shim must re-export ${printTarget}`);\n }\n }\n }\n\n if (hasController) {\n const shimPath = join(elementDir, 'controller.js');\n if (!existsSync(shimPath)) {\n errors.push('Missing root controller.js compatibility shim');\n } else {\n const shim = await readFile(shimPath, 'utf-8');\n if (shim !== expectedShim) {\n errors.push('Root controller.js shim must re-export ./dist/controller/index.js');\n }\n }\n }\n\n return { element, elementDir, ok: errors.length === 0, errors, warnings };\n}\n\nexport default class VerifyControllers extends Command {\n static override description =\n 'Verify that element packages will publish controller modules correctly (exports + dist artifacts)';\n\n static override examples = [\n 'bun run cli <%= command.id %>',\n 'bun cli <%= command.id %>',\n '<%= config.bin %> <%= command.id %>',\n ];\n\n static override flags = {\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n element: Flags.string({\n description: 'Check only specified element (react or svelte package name)',\n }),\n };\n\n private logger = new Logger();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(VerifyControllers);\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('š§© Verifying published controller modules');\n\n const reactItems = await readdir(ELEMENTS_REACT_DIR, { withFileTypes: true });\n const reactNames = reactItems.filter((d) => d.isDirectory()).map((d) => d.name);\n\n const svelteItems = await readdir(ELEMENTS_SVELTE_DIR, { withFileTypes: true });\n const svelteNames = svelteItems.filter((d) => d.isDirectory()).map((d) => d.name);\n\n type Job = { name: string; dir: string };\n let jobs: Job[] = [];\n\n if (flags.element) {\n const r = join(ELEMENTS_REACT_DIR, flags.element);\n const s = join(ELEMENTS_SVELTE_DIR, flags.element);\n if (reactNames.includes(flags.element) && existsSync(join(r, 'package.json'))) {\n jobs = [{ name: flags.element, dir: r }];\n } else if (svelteNames.includes(flags.element) && existsSync(join(s, 'package.json'))) {\n jobs = [{ name: flags.element, dir: s }];\n } else {\n this.error(\n `Element '${flags.element}' not found under ${ELEMENTS_REACT_DIR} or ${ELEMENTS_SVELTE_DIR}`\n );\n }\n } else {\n jobs = [\n ...reactNames.sort().map((name) => ({ name, dir: join(ELEMENTS_REACT_DIR, name) })),\n ...svelteNames.sort().map((name) => ({ name, dir: join(ELEMENTS_SVELTE_DIR, name) })),\n ];\n }\n\n const results: CheckResult[] = [];\n for (const { name, dir } of jobs) {\n results.push(await verifyControllerPackage(dir, name));\n }\n\n const failed = results.filter((r) => !r.ok);\n const warned = results.filter((r) => r.warnings.length > 0);\n const checked = results.filter((r) => hasAnyControllerSource(r.elementDir));\n\n this.log(`\\n${'='.repeat(60)}`);\n this.log('š CONTROLLER PUBLISH VERIFICATION REPORT');\n this.log('='.repeat(60));\n this.log(`Elements scanned: ${results.length}`);\n this.log(`Elements with controllers: ${checked.length}`);\n this.log(`Passed: ${results.length - failed.length} ā
`);\n this.log(`Failed: ${failed.length} ā`);\n this.log(`Warnings: ${warned.length} ā ļø`);\n\n if (failed.length > 0) {\n this.log('\\nā FAILURES:');\n for (const f of failed) {\n this.log(` - ${f.element}`);\n for (const e of f.errors) this.log(` ⢠${e}`);\n }\n this.log('\\nš” Fixes:');\n this.log(' - Ensure package.json exports include \"./controller\" and \"./controller.js\"');\n this.log(' - Ensure package.json pie.controller is \"@pie-element/<element>/controller\"');\n this.log(' - Ensure package.json files[] includes \"controller.js\"');\n this.log(' - Ensure root controller.js re-exports \"./dist/controller/index.js\"');\n this.log(' - Ensure print-bearing elements publish \"print.js\" and export \"./print.js\"');\n this.log(' - Ensure build outputs exist under dist/controller/');\n this.log(` - Rebuild: cd ${ELEMENTS_REACT_DIR}/<element> && bun run build`);\n this.log(` - Or: cd ${ELEMENTS_SVELTE_DIR}/<element> && bun run build`);\n this.error('Some controller publish checks failed', { exit: 1 });\n }\n\n if (warned.length > 0) {\n this.log('\\nā ļø WARNINGS (non-blocking):');\n for (const w of warned) {\n this.log(` - ${w.element}`);\n for (const msg of w.warnings) this.log(` ⢠${msg}`);\n }\n }\n\n this.log(`\\n${'='.repeat(60)}\\n`);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-metadata.js","sourceRoot":"","sources":["../../../src/lib/demo/demo-metadata.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Generate demo metadata for SvelteKit demo app\n *\n * Scans packages/elements-react and packages/elements-svelte and rewrites the element registry\n * (lib/elements/registry.ts). Each element's demos live in lib/samples/<element>.json, which the\n * demo app reads; an element's docs/demo/config.mjs seeds that file only when it does not exist.\n */\nimport { existsSync, readdirSync, readFileSync } from 'node:fs';\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst REPO_ROOT = join(__dirname, '../../../../..');\nconst DEMO_APP_PATH = join(REPO_ROOT, 'apps/element-demo');\nconst REGISTRY_PATH = join(DEMO_APP_PATH, 'src/lib/elements/registry.ts');\nconst SAMPLES_PATH = join(DEMO_APP_PATH, 'src/lib/samples');\nconst ELEMENT_ROOTS = ['packages/elements-react', 'packages/elements-svelte'];\n\nexport interface ElementMetadata {\n name: string;\n title: string;\n packageName: string;\n hasAuthor: boolean;\n hasPrint: boolean;\n hasConfig: boolean;\n hasSession: boolean;\n demoCount: number;\n}\n\n/**\n * Read the current registry entries, whose hand-set title and hasSession survive regeneration\n */\nfunction readExistingRegistry(): Map<string, ElementMetadata> {\n if (!existsSync(REGISTRY_PATH)) return new Map();\n\n const content = readFileSync(REGISTRY_PATH, 'utf-8');\n const match = content.match(/export const ELEMENT_REGISTRY[^=]*=\\s*(\\[[\\s\\S]*?\\]);/);\n if (!match) throw new Error(`Could not find ELEMENT_REGISTRY in ${REGISTRY_PATH}`);\n\n const entries: ElementMetadata[] = JSON.parse(match[1]);\n return new Map(entries.map((entry) => [entry.name, entry]));\n}\n\n/**\n * Convert old format (models array) to new format (demos array)\n */\nfunction toDemosFormat(configData: any): any {\n if (!configData?.models || configData?.demos) return configData;\n\n return {\n demos: configData.models.map((model: any, index: number) => ({\n id: index === 0 ? 'default' : `demo-${index + 1}`,\n title: index === 0 ? 'Default Demo' : `Demo ${index + 1}`,\n description: 'Default configuration',\n tags: [],\n model: model,\n session: { value: [] },\n })),\n };\n}\n\n/**\n * Load an element's samples JSON, seeding it from docs/demo/config.mjs when it does not exist\n */\nasync function loadSamples(name: string, elementPath: string): Promise<any | undefined> {\n const samplesPath = join(SAMPLES_PATH, `${name}.json`);\n const configPath = join(elementPath, 'docs/demo/config.mjs');\n const existing = existsSync(samplesPath)\n ? JSON.parse(readFileSync(samplesPath, 'utf-8'))\n : undefined;\n\n if (!existsSync(configPath)) return existing;\n\n let configData: any;\n try {\n configData = toDemosFormat((await import(`file://${configPath}`)).default);\n } catch (e) {\n console.warn(`[demo-metadata] Failed to convert config for ${name}:`, e);\n return existing;\n }\n\n if (existing) {\n if (JSON.stringify(configData) !== JSON.stringify(existing)) {\n console.warn(\n `[demo-metadata] ${name}: docs/demo/config.mjs differs from samples/${name}.json; ` +\n 'kept the samples file (delete it to regenerate from config.mjs)'\n );\n }\n return existing;\n }\n\n await mkdir(SAMPLES_PATH, { recursive: true });\n await writeFile(samplesPath, JSON.stringify(configData, null, 2) + '\\n', 'utf-8');\n console.log(`[demo-metadata] Seeded samples/${name}.json from docs/demo/config.mjs`);\n return configData;\n}\n\n/**\n * Scan the element package directories for all elements\n */\nasync function scanElements(existing: Map<string, ElementMetadata>): Promise<ElementMetadata[]> {\n const elements: ElementMetadata[] = [];\n\n for (const root of ELEMENT_ROOTS) {\n const rootPath = join(REPO_ROOT, root);\n if (!existsSync(rootPath)) continue;\n\n for (const dir of readdirSync(rootPath, { withFileTypes: true })) {\n if (!dir.isDirectory()) continue;\n\n // Check for required structure\n const elementPath = join(rootPath, dir.name);\n const srcPath = join(elementPath, 'src');\n if (!existsSync(join(srcPath, 'delivery'))) continue;\n\n const pkg = JSON.parse(readFileSync(join(elementPath, 'package.json'), 'utf-8'));\n const samples = await loadSamples(dir.name, elementPath);\n const previous = existing.get(dir.name);\n\n if (!previous) {\n console.log(\n `[demo-metadata] Added ${dir.name}; check its title and hasSession in registry.ts`\n );\n }\n\n elements.push({\n name: dir.name,\n // Generate title from name (e.g., \"multiple-choice\" -> \"Multiple Choice\")\n title:\n previous?.title ??\n dir.name\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' '),\n packageName: pkg.name,\n hasAuthor: existsSync(join(srcPath, 'author')),\n hasPrint: existsSync(join(srcPath, 'print')),\n hasConfig: samples !== undefined,\n hasSession: previous?.hasSession ?? true,\n demoCount: Array.isArray(samples?.demos) ? samples.demos.length : 0,\n });\n }\n }\n\n return elements.sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/**\n * Generate registry.ts file\n */\nasync function generateRegistry(elements: ElementMetadata[]): Promise<void> {\n const content = `/**\n * Element Registry\n *\n * Generated by \\`bun tools/generate-demo-metadata.mjs\\` from packages/elements-react and\n * packages/elements-svelte. Edit \\`title\\` and \\`hasSession\\` here; regeneration keeps them and\n * overwrites the other fields.\n */\n\nexport interface ElementMetadata {\n name: string;\n title: string;\n packageName: string;\n hasAuthor: boolean;\n hasPrint: boolean;\n hasConfig: boolean;\n hasSession: boolean;\n demoCount: number;\n}\n\nexport const ELEMENT_REGISTRY: readonly ElementMetadata[] = ${JSON.stringify(elements, null, 2)};\n\nexport function getElement(name: string): ElementMetadata | undefined {\n return ELEMENT_REGISTRY.find((el) => el.name === name);\n}\n\nexport function getAllElements(): readonly ElementMetadata[] {\n return ELEMENT_REGISTRY;\n}\n`;\n\n await mkdir(dirname(REGISTRY_PATH), { recursive: true });\n await writeFile(REGISTRY_PATH, content, 'utf-8');\n console.log(`[demo-metadata] Generated registry with ${elements.length} elements`);\n}\n\n/**\n * Main entry point\n */\nexport async function generateDemoMetadata(): Promise<void> {\n console.log('[demo-metadata] Scanning elements...');\n\n const existing = readExistingRegistry();\n const elements = await scanElements(existing);\n\n for (const name of existing.keys()) {\n if (!elements.some((element) => element.name === name)) {\n console.log(`[demo-metadata] Removed ${name}; no element package found`);\n }\n }\n\n await generateRegistry(elements);\n\n console.log('[demo-metadata] ā Demo metadata generation complete');\n}\n"]}
|
|
@@ -8,4 +8,3 @@ export interface PackageJson {
|
|
|
8
8
|
}
|
|
9
9
|
export declare function loadPackageJson(path: string): Promise<PackageJson>;
|
|
10
10
|
export declare function writePackageJson(path: string, pkg: PackageJson): Promise<void>;
|
|
11
|
-
export declare function extractDependencies(content: string): string[];
|
|
@@ -7,23 +7,4 @@ export async function writePackageJson(path, pkg) {
|
|
|
7
7
|
const content = `${JSON.stringify(pkg, null, 2)}\n`;
|
|
8
8
|
await writeFile(path, content, 'utf-8');
|
|
9
9
|
}
|
|
10
|
-
export function extractDependencies(content) {
|
|
11
|
-
const deps = new Set();
|
|
12
|
-
// Match import statements
|
|
13
|
-
const importRegex = /import\s+.+\s+from\s+['"]([^'"]+)['"]/g;
|
|
14
|
-
let match = importRegex.exec(content);
|
|
15
|
-
while (match !== null) {
|
|
16
|
-
const dep = match[1];
|
|
17
|
-
// Skip relative imports
|
|
18
|
-
if (!dep.startsWith('.') && !dep.startsWith('/')) {
|
|
19
|
-
// Extract package name (handle scoped packages)
|
|
20
|
-
const pkgName = dep.startsWith('@')
|
|
21
|
-
? dep.split('/').slice(0, 2).join('/')
|
|
22
|
-
: dep.split('/')[0];
|
|
23
|
-
deps.add(pkgName);
|
|
24
|
-
}
|
|
25
|
-
match = importRegex.exec(content);
|
|
26
|
-
}
|
|
27
|
-
return Array.from(deps).sort();
|
|
28
|
-
}
|
|
29
10
|
//# sourceMappingURL=package-json.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../src/utils/package-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAWvD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAAgB;IACnE,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACpD,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC
|
|
1
|
+
{"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../src/utils/package-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAWvD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAAgB;IACnE,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACpD,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC","sourcesContent":["import { readFile, writeFile } from 'node:fs/promises';\n\nexport interface PackageJson {\n name: string;\n version: string;\n private?: boolean;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n [key: string]: unknown;\n}\n\nexport async function loadPackageJson(path: string): Promise<PackageJson> {\n const content = await readFile(path, 'utf-8');\n return JSON.parse(content) as PackageJson;\n}\n\nexport async function writePackageJson(path: string, pkg: PackageJson): Promise<void> {\n const content = `${JSON.stringify(pkg, null, 2)}\\n`;\n await writeFile(path, content, 'utf-8');\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/cli",
|
|
3
|
-
"version": "0.1.3-next.
|
|
3
|
+
"version": "0.1.3-next.20261005184705",
|
|
4
4
|
"description": "CLI tools for managing PIE Elements NG",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"lint": "biome check ."
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@oclif/core": "^
|
|
24
|
+
"@oclif/core": "^5.1.2",
|
|
25
25
|
"@oclif/plugin-help": "^6.2.0",
|
|
26
|
-
"@pie-element/element-bundler": "0.1.3-next.
|
|
26
|
+
"@pie-element/element-bundler": "0.1.3-next.20261005184705",
|
|
27
27
|
"es-module-lexer": "^1.7.0",
|
|
28
28
|
"glob": "^13.0.0",
|
|
29
29
|
"open": "^10.0.3",
|
|
@@ -38,11 +38,8 @@
|
|
|
38
38
|
"dev": {
|
|
39
39
|
"description": "Development server and tools"
|
|
40
40
|
},
|
|
41
|
-
"upstream": {
|
|
42
|
-
"description": "Manage synchronization with upstream pie-elements repository"
|
|
43
|
-
},
|
|
44
41
|
"packages": {
|
|
45
|
-
"description": "
|
|
42
|
+
"description": "Package publishing settings"
|
|
46
43
|
},
|
|
47
44
|
"docs": {
|
|
48
45
|
"description": "Generate and verify framework-agnostic element documentation"
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
export default class CreateControllers extends Command {
|
|
3
|
-
static description: string;
|
|
4
|
-
static examples: string[];
|
|
5
|
-
static flags: {
|
|
6
|
-
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
-
};
|
|
8
|
-
private logger;
|
|
9
|
-
run(): Promise<void>;
|
|
10
|
-
private scanController;
|
|
11
|
-
private generatePackageJson;
|
|
12
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { Command, Flags } from '@oclif/core';
|
|
2
|
-
import { Logger } from '../../utils/logger.js';
|
|
3
|
-
import { extractDependencies } from '../../utils/package-json.js';
|
|
4
|
-
import { existsSync } from 'node:fs';
|
|
5
|
-
import { readdir, readFile, writeFile } from 'node:fs/promises';
|
|
6
|
-
import { join } from 'node:path';
|
|
7
|
-
const SHARED_DIR = 'packages/shared';
|
|
8
|
-
export default class CreateControllers extends Command {
|
|
9
|
-
static description = 'Create package.json files for synced controllers';
|
|
10
|
-
static examples = ['<%= config.bin %> <%= command.id %>'];
|
|
11
|
-
static flags = {
|
|
12
|
-
verbose: Flags.boolean({
|
|
13
|
-
char: 'v',
|
|
14
|
-
description: 'Show detailed output',
|
|
15
|
-
default: false,
|
|
16
|
-
}),
|
|
17
|
-
};
|
|
18
|
-
logger = new Logger();
|
|
19
|
-
async run() {
|
|
20
|
-
const { flags } = await this.parse(CreateControllers);
|
|
21
|
-
this.logger = new Logger(flags.verbose);
|
|
22
|
-
this.logger.section('š¦ Creating package.json files for controllers');
|
|
23
|
-
const controllers = await readdir(SHARED_DIR);
|
|
24
|
-
let created = 0;
|
|
25
|
-
let skipped = 0;
|
|
26
|
-
for (const controller of controllers) {
|
|
27
|
-
const controllerDir = join(SHARED_DIR, controller);
|
|
28
|
-
const packageJsonPath = join(controllerDir, 'package.json');
|
|
29
|
-
// Skip if package.json already exists
|
|
30
|
-
if (existsSync(packageJsonPath)) {
|
|
31
|
-
this.logger.info(` āļø ${controller}: package.json already exists`);
|
|
32
|
-
skipped++;
|
|
33
|
-
continue;
|
|
34
|
-
}
|
|
35
|
-
// Scan for dependencies
|
|
36
|
-
const deps = await this.scanController(controllerDir);
|
|
37
|
-
// Generate package.json
|
|
38
|
-
const content = this.generatePackageJson(controller, deps);
|
|
39
|
-
// Write file
|
|
40
|
-
await writeFile(packageJsonPath, content, 'utf-8');
|
|
41
|
-
this.logger.success(` ā
${controller}: Created package.json (${deps.length} dependencies)`);
|
|
42
|
-
created++;
|
|
43
|
-
}
|
|
44
|
-
this.logger.section(`\nš Summary: ${created} created, ${skipped} skipped`);
|
|
45
|
-
}
|
|
46
|
-
async scanController(controllerDir) {
|
|
47
|
-
const srcDir = join(controllerDir, 'src');
|
|
48
|
-
const deps = new Set();
|
|
49
|
-
if (!existsSync(srcDir)) {
|
|
50
|
-
return [];
|
|
51
|
-
}
|
|
52
|
-
const files = await readdir(srcDir);
|
|
53
|
-
for (const file of files) {
|
|
54
|
-
if (!file.endsWith('.ts'))
|
|
55
|
-
continue;
|
|
56
|
-
const filePath = join(srcDir, file);
|
|
57
|
-
const content = await readFile(filePath, 'utf-8');
|
|
58
|
-
const fileDeps = extractDependencies(content);
|
|
59
|
-
for (const dep of fileDeps)
|
|
60
|
-
deps.add(dep);
|
|
61
|
-
}
|
|
62
|
-
return Array.from(deps).sort();
|
|
63
|
-
}
|
|
64
|
-
generatePackageJson(name, deps) {
|
|
65
|
-
const dependencies = {};
|
|
66
|
-
for (const dep of deps) {
|
|
67
|
-
// Use * for external dependencies (they're in root package.json)
|
|
68
|
-
dependencies[dep] = '*';
|
|
69
|
-
}
|
|
70
|
-
const pkg = {
|
|
71
|
-
name: `@pie-element/${name}`,
|
|
72
|
-
version: '0.1.0',
|
|
73
|
-
description: `Framework-agnostic ${name.replace('-controller', '')} controller synced from pie-elements`,
|
|
74
|
-
type: 'module',
|
|
75
|
-
main: './src/index.ts',
|
|
76
|
-
types: './src/index.ts',
|
|
77
|
-
exports: {
|
|
78
|
-
'.': {
|
|
79
|
-
types: './src/index.ts',
|
|
80
|
-
default: './src/index.ts',
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
files: ['src'],
|
|
84
|
-
scripts: {
|
|
85
|
-
build: "echo 'Controllers are consumed as TypeScript source'",
|
|
86
|
-
lint: 'biome check .',
|
|
87
|
-
'lint:fix': 'biome check --write .',
|
|
88
|
-
},
|
|
89
|
-
dependencies: Object.keys(dependencies).length > 0 ? dependencies : undefined,
|
|
90
|
-
keywords: ['pie', 'pie-element', 'controller', name.replace('-controller', ''), 'assessment'],
|
|
91
|
-
license: 'ISC',
|
|
92
|
-
repository: {
|
|
93
|
-
type: 'git',
|
|
94
|
-
url: 'https://github.com/pie-framework/pie-elements-ng.git',
|
|
95
|
-
directory: `packages/shared/${name}`,
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
// Remove undefined fields
|
|
99
|
-
const cleaned = JSON.parse(JSON.stringify(pkg));
|
|
100
|
-
return `${JSON.stringify(cleaned, null, 2)}\n`;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=create-controllers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-controllers.js","sourceRoot":"","sources":["../../../src/commands/packages/create-controllers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport { Logger } from '../../utils/logger.js';\nimport { extractDependencies } from '../../utils/package-json.js';\nimport { existsSync } from 'node:fs';\nimport { readdir, readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nconst SHARED_DIR = 'packages/shared';\n\nexport default class CreateControllers extends Command {\n static override description = 'Create package.json files for synced controllers';\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(CreateControllers);\n\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('š¦ Creating package.json files for controllers');\n\n const controllers = await readdir(SHARED_DIR);\n let created = 0;\n let skipped = 0;\n\n for (const controller of controllers) {\n const controllerDir = join(SHARED_DIR, controller);\n const packageJsonPath = join(controllerDir, 'package.json');\n\n // Skip if package.json already exists\n if (existsSync(packageJsonPath)) {\n this.logger.info(` āļø ${controller}: package.json already exists`);\n skipped++;\n continue;\n }\n\n // Scan for dependencies\n const deps = await this.scanController(controllerDir);\n\n // Generate package.json\n const content = this.generatePackageJson(controller, deps);\n\n // Write file\n await writeFile(packageJsonPath, content, 'utf-8');\n this.logger.success(` ā
${controller}: Created package.json (${deps.length} dependencies)`);\n created++;\n }\n\n this.logger.section(`\\nš Summary: ${created} created, ${skipped} skipped`);\n }\n\n private async scanController(controllerDir: string): Promise<string[]> {\n const srcDir = join(controllerDir, 'src');\n const deps = new Set<string>();\n\n if (!existsSync(srcDir)) {\n return [];\n }\n\n const files = await readdir(srcDir);\n\n for (const file of files) {\n if (!file.endsWith('.ts')) continue;\n\n const filePath = join(srcDir, file);\n const content = await readFile(filePath, 'utf-8');\n const fileDeps = extractDependencies(content);\n\n for (const dep of fileDeps) deps.add(dep);\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\n for (const dep of deps) {\n // Use * for external dependencies (they're in root package.json)\n dependencies[dep] = '*';\n }\n\n const pkg = {\n name: `@pie-element/${name}`,\n version: '0.1.0',\n description: `Framework-agnostic ${name.replace('-controller', '')} controller synced from pie-elements`,\n type: 'module',\n main: './src/index.ts',\n types: './src/index.ts',\n exports: {\n '.': {\n types: './src/index.ts',\n default: './src/index.ts',\n },\n },\n files: ['src'],\n scripts: {\n build: \"echo 'Controllers are consumed as TypeScript source'\",\n lint: 'biome check .',\n 'lint:fix': 'biome check --write .',\n },\n dependencies: Object.keys(dependencies).length > 0 ? dependencies : undefined,\n keywords: ['pie', 'pie-element', 'controller', name.replace('-controller', ''), 'assessment'],\n license: 'ISC',\n repository: {\n type: 'git',\n url: 'https://github.com/pie-framework/pie-elements-ng.git',\n directory: `packages/shared/${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"]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
export default class CreateLibReact extends Command {
|
|
3
|
-
static description: string;
|
|
4
|
-
static examples: string[];
|
|
5
|
-
static flags: {
|
|
6
|
-
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
-
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
-
};
|
|
9
|
-
private logger;
|
|
10
|
-
run(): Promise<void>;
|
|
11
|
-
private getUpstreamPackageJson;
|
|
12
|
-
private convertDependencies;
|
|
13
|
-
private createPackageJson;
|
|
14
|
-
private createViteConfig;
|
|
15
|
-
private createTsConfig;
|
|
16
|
-
}
|