@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
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import { Command, Flags } from '@oclif/core';
|
|
2
|
-
import { Logger } from '../../utils/logger.js';
|
|
3
|
-
import { loadPackageJson } from '../../utils/package-json.js';
|
|
4
|
-
import { existsSync } from 'node:fs';
|
|
5
|
-
import { mkdir, readdir, writeFile, stat as fsStat } from 'node:fs/promises';
|
|
6
|
-
import { join } from 'node:path';
|
|
7
|
-
export default class CreateLibReact extends Command {
|
|
8
|
-
static description = 'Create package.json files for synced @pie-lib packages';
|
|
9
|
-
static examples = [
|
|
10
|
-
'<%= config.bin %> <%= command.id %>',
|
|
11
|
-
'<%= config.bin %> <%= command.id %> --dry-run',
|
|
12
|
-
];
|
|
13
|
-
static flags = {
|
|
14
|
-
'dry-run': Flags.boolean({
|
|
15
|
-
description: 'Show what would be created without making changes',
|
|
16
|
-
default: false,
|
|
17
|
-
}),
|
|
18
|
-
verbose: Flags.boolean({
|
|
19
|
-
char: 'v',
|
|
20
|
-
description: 'Show detailed output',
|
|
21
|
-
default: false,
|
|
22
|
-
}),
|
|
23
|
-
};
|
|
24
|
-
logger = new Logger();
|
|
25
|
-
async run() {
|
|
26
|
-
const { flags } = await this.parse(CreateLibReact);
|
|
27
|
-
this.logger = new Logger(flags.verbose);
|
|
28
|
-
this.logger.section('š¦ Creating package.json files for @pie-lib packages');
|
|
29
|
-
this.logger.info(` Mode: ${flags['dry-run'] ? 'DRY RUN' : 'LIVE'}\n`);
|
|
30
|
-
const libReactDir = 'packages/lib-react';
|
|
31
|
-
const packages = await readdir(libReactDir);
|
|
32
|
-
let created = 0;
|
|
33
|
-
let skipped = 0;
|
|
34
|
-
for (const pkg of packages) {
|
|
35
|
-
const pkgPath = join(libReactDir, pkg);
|
|
36
|
-
const statResult = await fsStat(pkgPath);
|
|
37
|
-
if (!statResult.isDirectory() || pkg === 'node_modules') {
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
// Check if src directory exists
|
|
41
|
-
const srcPath = join(pkgPath, 'src');
|
|
42
|
-
if (!existsSync(srcPath)) {
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
try {
|
|
46
|
-
const packageJsonPath = join(pkgPath, 'package.json');
|
|
47
|
-
if (existsSync(packageJsonPath)) {
|
|
48
|
-
skipped++;
|
|
49
|
-
this.logger.info(` āļø ${pkg}: Already configured`);
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
await this.createPackageJson(pkg, flags['dry-run']);
|
|
53
|
-
await this.createViteConfig(pkg, flags['dry-run']);
|
|
54
|
-
await this.createTsConfig(pkg, flags['dry-run']);
|
|
55
|
-
created++;
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
this.logger.error(` ā ${pkg}: Error - ${error}`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
this.logger.success(`\nā
Created ${created} package configurations`);
|
|
62
|
-
this.logger.info(`āļø Skipped ${skipped} existing packages`);
|
|
63
|
-
if (!flags['dry-run'] && created > 0) {
|
|
64
|
-
this.logger.section('\nš” Next steps');
|
|
65
|
-
this.logger.info(' 1. Run: bun install (to link workspace packages)');
|
|
66
|
-
this.logger.info(' 2. Run: bun run build --filter="@pie-lib/*" (to build all lib packages)');
|
|
67
|
-
this.logger.info(' 3. Update React elements to use the new workspace dependencies\n');
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
async getUpstreamPackageJson(pkgName) {
|
|
71
|
-
const upstreamPath = join('../pie-lib/packages', pkgName, 'package.json');
|
|
72
|
-
if (existsSync(upstreamPath)) {
|
|
73
|
-
return (await loadPackageJson(upstreamPath));
|
|
74
|
-
}
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
convertDependencies(deps) {
|
|
78
|
-
if (!deps)
|
|
79
|
-
return {};
|
|
80
|
-
const converted = {};
|
|
81
|
-
for (const [name, version] of Object.entries(deps)) {
|
|
82
|
-
if (name.startsWith('@pie-lib/')) {
|
|
83
|
-
// Convert to workspace dependency
|
|
84
|
-
converted[name] = 'workspace:*';
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
// Keep external dependencies as-is
|
|
88
|
-
converted[name] = version;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return converted;
|
|
92
|
-
}
|
|
93
|
-
async createPackageJson(pkgName, dryRun = false) {
|
|
94
|
-
const targetDir = join('packages/lib-react', pkgName);
|
|
95
|
-
const targetPath = join(targetDir, 'package.json');
|
|
96
|
-
// Skip if package.json already exists
|
|
97
|
-
if (existsSync(targetPath)) {
|
|
98
|
-
this.logger.info(` āļø ${pkgName}: package.json already exists`);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
// Get upstream package.json for dependencies
|
|
102
|
-
const upstream = await this.getUpstreamPackageJson(pkgName);
|
|
103
|
-
const packageJson = {
|
|
104
|
-
name: `@pie-lib/${pkgName}`,
|
|
105
|
-
version: '0.1.0',
|
|
106
|
-
description: upstream?.description || `React implementation of @pie-lib/${pkgName} synced from pie-lib`,
|
|
107
|
-
type: 'module',
|
|
108
|
-
main: './dist/index.js',
|
|
109
|
-
types: './dist/index.d.ts',
|
|
110
|
-
exports: {
|
|
111
|
-
'.': {
|
|
112
|
-
types: './dist/index.d.ts',
|
|
113
|
-
default: './dist/index.js',
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
files: ['dist', 'src'],
|
|
117
|
-
scripts: {
|
|
118
|
-
build: 'vite build && tsc --emitDeclarationOnly',
|
|
119
|
-
lint: 'biome check .',
|
|
120
|
-
'lint:fix': 'biome check --write .',
|
|
121
|
-
},
|
|
122
|
-
keywords: ['pie', 'pie-lib', 'react', pkgName],
|
|
123
|
-
license: 'ISC',
|
|
124
|
-
repository: {
|
|
125
|
-
type: 'git',
|
|
126
|
-
url: 'https://github.com/pie-framework/pie-elements-ng.git',
|
|
127
|
-
directory: `packages/lib-react/${pkgName}`,
|
|
128
|
-
},
|
|
129
|
-
};
|
|
130
|
-
// Convert dependencies
|
|
131
|
-
if (upstream?.dependencies) {
|
|
132
|
-
packageJson.dependencies = this.convertDependencies(upstream.dependencies);
|
|
133
|
-
}
|
|
134
|
-
if (upstream?.peerDependencies) {
|
|
135
|
-
packageJson.peerDependencies = this.convertDependencies(upstream.peerDependencies);
|
|
136
|
-
}
|
|
137
|
-
// Add common devDependencies
|
|
138
|
-
packageJson.devDependencies = {
|
|
139
|
-
'@types/react': '^18.2.0',
|
|
140
|
-
'@types/react-dom': '^18.2.0',
|
|
141
|
-
'@vitejs/plugin-react': '^4.2.0',
|
|
142
|
-
typescript: '^5.9.3',
|
|
143
|
-
vite: '^6.0.0',
|
|
144
|
-
};
|
|
145
|
-
if (dryRun) {
|
|
146
|
-
this.logger.info(` š ${pkgName}: Would create package.json`);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
await mkdir(targetDir, { recursive: true });
|
|
150
|
-
await writeFile(targetPath, `${JSON.stringify(packageJson, null, 2)}\n`, 'utf-8');
|
|
151
|
-
this.logger.success(` ⨠${pkgName}: Created package.json`);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
async createViteConfig(pkgName, dryRun = false) {
|
|
155
|
-
const targetDir = join('packages/lib-react', pkgName);
|
|
156
|
-
const targetPath = join(targetDir, 'vite.config.ts');
|
|
157
|
-
// Skip if vite.config.ts already exists
|
|
158
|
-
if (existsSync(targetPath)) {
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
const viteConfig = `import react from '@vitejs/plugin-react';
|
|
162
|
-
import { defineConfig } from 'vite';
|
|
163
|
-
|
|
164
|
-
export default defineConfig({
|
|
165
|
-
plugins: [react()],
|
|
166
|
-
build: {
|
|
167
|
-
lib: {
|
|
168
|
-
entry: './src/index.ts',
|
|
169
|
-
formats: ['es'],
|
|
170
|
-
fileName: () => 'index.js',
|
|
171
|
-
},
|
|
172
|
-
rollupOptions: {
|
|
173
|
-
external: [
|
|
174
|
-
'react',
|
|
175
|
-
'react-dom',
|
|
176
|
-
'react/jsx-runtime',
|
|
177
|
-
'prop-types',
|
|
178
|
-
'lodash',
|
|
179
|
-
'debug',
|
|
180
|
-
/^@pie-lib\\//,
|
|
181
|
-
/^@pie-framework\\//,
|
|
182
|
-
/^@pie-element\\//,
|
|
183
|
-
/^@mui\\//,
|
|
184
|
-
/^@emotion\\//,
|
|
185
|
-
/^@dnd-kit\\//,
|
|
186
|
-
/^react-transition-group/,
|
|
187
|
-
],
|
|
188
|
-
},
|
|
189
|
-
outDir: 'dist',
|
|
190
|
-
emptyOutDir: true,
|
|
191
|
-
},
|
|
192
|
-
});
|
|
193
|
-
`;
|
|
194
|
-
if (dryRun) {
|
|
195
|
-
this.logger.info(` š ${pkgName}: Would create vite.config.ts`);
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
await writeFile(targetPath, viteConfig, 'utf-8');
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
async createTsConfig(pkgName, dryRun = false) {
|
|
202
|
-
const targetDir = join('packages/lib-react', pkgName);
|
|
203
|
-
const targetPath = join(targetDir, 'tsconfig.json');
|
|
204
|
-
// Skip if tsconfig.json already exists
|
|
205
|
-
if (existsSync(targetPath)) {
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
const tsConfig = {
|
|
209
|
-
extends: '../../../tsconfig.declarations.json',
|
|
210
|
-
compilerOptions: {
|
|
211
|
-
outDir: './dist',
|
|
212
|
-
rootDir: './src',
|
|
213
|
-
declaration: true,
|
|
214
|
-
},
|
|
215
|
-
include: ['src/**/*'],
|
|
216
|
-
exclude: ['node_modules', 'dist', '**/*.spec.ts', '**/*.spec.tsx'],
|
|
217
|
-
};
|
|
218
|
-
if (dryRun) {
|
|
219
|
-
this.logger.info(` š ${pkgName}: Would create tsconfig.json`);
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
await writeFile(targetPath, `${JSON.stringify(tsConfig, null, 2)}\n`, 'utf-8');
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
//# sourceMappingURL=create-lib-react.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-lib-react.js","sourceRoot":"","sources":["../../../src/commands/packages/create-lib-react.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport { Logger } from '../../utils/logger.js';\nimport { loadPackageJson } from '../../utils/package-json.js';\nimport { existsSync } from 'node:fs';\nimport { mkdir, readdir, writeFile, stat as fsStat } from 'node:fs/promises';\nimport { join } from 'node:path';\n\ninterface PackageJson {\n name: string;\n version: string;\n description: string;\n type: string;\n main: string;\n types: string;\n exports: Record<string, unknown>;\n files: string[];\n scripts: Record<string, string>;\n dependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n keywords: string[];\n license: string;\n repository: {\n type: string;\n url: string;\n directory: string;\n };\n}\n\nexport default class CreateLibReact extends Command {\n static override description = 'Create package.json files for synced @pie-lib packages';\n\n static override examples = [\n '<%= config.bin %> <%= command.id %>',\n '<%= config.bin %> <%= command.id %> --dry-run',\n ];\n\n static override flags = {\n 'dry-run': Flags.boolean({\n description: 'Show what would be created without making changes',\n default: false,\n }),\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n };\n\n private logger = new Logger();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(CreateLibReact);\n\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('š¦ Creating package.json files for @pie-lib packages');\n this.logger.info(` Mode: ${flags['dry-run'] ? 'DRY RUN' : 'LIVE'}\\n`);\n\n const libReactDir = 'packages/lib-react';\n const packages = await readdir(libReactDir);\n\n let created = 0;\n let skipped = 0;\n\n for (const pkg of packages) {\n const pkgPath = join(libReactDir, pkg);\n const statResult = await fsStat(pkgPath);\n\n if (!statResult.isDirectory() || pkg === 'node_modules') {\n continue;\n }\n\n // Check if src directory exists\n const srcPath = join(pkgPath, 'src');\n if (!existsSync(srcPath)) {\n continue;\n }\n\n try {\n const packageJsonPath = join(pkgPath, 'package.json');\n if (existsSync(packageJsonPath)) {\n skipped++;\n this.logger.info(` āļø ${pkg}: Already configured`);\n continue;\n }\n\n await this.createPackageJson(pkg, flags['dry-run']);\n await this.createViteConfig(pkg, flags['dry-run']);\n await this.createTsConfig(pkg, flags['dry-run']);\n created++;\n } catch (error) {\n this.logger.error(` ā ${pkg}: Error - ${error}`);\n }\n }\n\n this.logger.success(`\\nā
Created ${created} package configurations`);\n this.logger.info(`āļø Skipped ${skipped} existing packages`);\n\n if (!flags['dry-run'] && created > 0) {\n this.logger.section('\\nš” Next steps');\n this.logger.info(' 1. Run: bun install (to link workspace packages)');\n this.logger.info(' 2. Run: bun run build --filter=\"@pie-lib/*\" (to build all lib packages)');\n this.logger.info(' 3. Update React elements to use the new workspace dependencies\\n');\n }\n }\n\n private async getUpstreamPackageJson(pkgName: string): Promise<PackageJson | null> {\n const upstreamPath = join('../pie-lib/packages', pkgName, 'package.json');\n if (existsSync(upstreamPath)) {\n return (await loadPackageJson(upstreamPath)) as unknown as PackageJson;\n }\n return null;\n }\n\n private convertDependencies(deps: Record<string, string> | undefined): Record<string, string> {\n if (!deps) return {};\n\n const converted: Record<string, string> = {};\n for (const [name, version] of Object.entries(deps)) {\n if (name.startsWith('@pie-lib/')) {\n // Convert to workspace dependency\n converted[name] = 'workspace:*';\n } else {\n // Keep external dependencies as-is\n converted[name] = version;\n }\n }\n return converted;\n }\n\n private async createPackageJson(pkgName: string, dryRun: boolean = false): Promise<void> {\n const targetDir = join('packages/lib-react', pkgName);\n const targetPath = join(targetDir, 'package.json');\n\n // Skip if package.json already exists\n if (existsSync(targetPath)) {\n this.logger.info(` āļø ${pkgName}: package.json already exists`);\n return;\n }\n\n // Get upstream package.json for dependencies\n const upstream = await this.getUpstreamPackageJson(pkgName);\n\n const packageJson: PackageJson = {\n name: `@pie-lib/${pkgName}`,\n version: '0.1.0',\n description:\n upstream?.description || `React implementation of @pie-lib/${pkgName} synced from pie-lib`,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n default: './dist/index.js',\n },\n },\n files: ['dist', 'src'],\n scripts: {\n build: 'vite build && tsc --emitDeclarationOnly',\n lint: 'biome check .',\n 'lint:fix': 'biome check --write .',\n },\n keywords: ['pie', 'pie-lib', 'react', pkgName],\n license: 'ISC',\n repository: {\n type: 'git',\n url: 'https://github.com/pie-framework/pie-elements-ng.git',\n directory: `packages/lib-react/${pkgName}`,\n },\n };\n\n // Convert dependencies\n if (upstream?.dependencies) {\n packageJson.dependencies = this.convertDependencies(upstream.dependencies);\n }\n\n if (upstream?.peerDependencies) {\n packageJson.peerDependencies = this.convertDependencies(upstream.peerDependencies);\n }\n\n // Add common devDependencies\n packageJson.devDependencies = {\n '@types/react': '^18.2.0',\n '@types/react-dom': '^18.2.0',\n '@vitejs/plugin-react': '^4.2.0',\n typescript: '^5.9.3',\n vite: '^6.0.0',\n };\n\n if (dryRun) {\n this.logger.info(` š ${pkgName}: Would create package.json`);\n } else {\n await mkdir(targetDir, { recursive: true });\n await writeFile(targetPath, `${JSON.stringify(packageJson, null, 2)}\\n`, 'utf-8');\n this.logger.success(` ⨠${pkgName}: Created package.json`);\n }\n }\n\n private async createViteConfig(pkgName: string, dryRun: boolean = false): Promise<void> {\n const targetDir = join('packages/lib-react', pkgName);\n const targetPath = join(targetDir, 'vite.config.ts');\n\n // Skip if vite.config.ts already exists\n if (existsSync(targetPath)) {\n return;\n }\n\n const viteConfig = `import react from '@vitejs/plugin-react';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n plugins: [react()],\n build: {\n lib: {\n entry: './src/index.ts',\n formats: ['es'],\n fileName: () => 'index.js',\n },\n rollupOptions: {\n external: [\n 'react',\n 'react-dom',\n 'react/jsx-runtime',\n 'prop-types',\n 'lodash',\n 'debug',\n /^@pie-lib\\\\//,\n /^@pie-framework\\\\//,\n /^@pie-element\\\\//,\n /^@mui\\\\//,\n /^@emotion\\\\//,\n /^@dnd-kit\\\\//,\n /^react-transition-group/,\n ],\n },\n outDir: 'dist',\n emptyOutDir: true,\n },\n});\n`;\n\n if (dryRun) {\n this.logger.info(` š ${pkgName}: Would create vite.config.ts`);\n } else {\n await writeFile(targetPath, viteConfig, 'utf-8');\n }\n }\n\n private async createTsConfig(pkgName: string, dryRun: boolean = false): Promise<void> {\n const targetDir = join('packages/lib-react', pkgName);\n const targetPath = join(targetDir, 'tsconfig.json');\n\n // Skip if tsconfig.json already exists\n if (existsSync(targetPath)) {\n return;\n }\n\n const tsConfig = {\n extends: '../../../tsconfig.declarations.json',\n compilerOptions: {\n outDir: './dist',\n rootDir: './src',\n declaration: true,\n },\n include: ['src/**/*'],\n exclude: ['node_modules', 'dist', '**/*.spec.ts', '**/*.spec.tsx'],\n };\n\n if (dryRun) {\n this.logger.info(` š ${pkgName}: Would create tsconfig.json`);\n } else {\n await writeFile(targetPath, `${JSON.stringify(tsConfig, null, 2)}\\n`, 'utf-8');\n }\n }\n}\n"]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
export default class CreateReactElements 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 scanElement;
|
|
11
|
-
private extractDeps;
|
|
12
|
-
private generatePackageJson;
|
|
13
|
-
private generateViteConfig;
|
|
14
|
-
private generateTsConfig;
|
|
15
|
-
}
|
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
import { Command, Flags } from '@oclif/core';
|
|
2
|
-
import { Logger } from '../../utils/logger.js';
|
|
3
|
-
import { existsSync } from 'node:fs';
|
|
4
|
-
import { readdir, readFile, writeFile, stat as fsStat } from 'node:fs/promises';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
|
-
import { elementSharedRuntimeDependencies } from '../../lib/upstream/sync-package-manager.js';
|
|
7
|
-
const ELEMENTS_REACT_DIR = 'packages/elements-react';
|
|
8
|
-
export default class CreateReactElements extends Command {
|
|
9
|
-
static description = 'Create package.json files for synced React elements';
|
|
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(CreateReactElements);
|
|
21
|
-
this.logger = new Logger(flags.verbose);
|
|
22
|
-
this.logger.section('š¦ Creating package.json files for React elements');
|
|
23
|
-
const elements = await readdir(ELEMENTS_REACT_DIR);
|
|
24
|
-
let created = 0;
|
|
25
|
-
let skipped = 0;
|
|
26
|
-
for (const element of elements) {
|
|
27
|
-
const elementDir = join(ELEMENTS_REACT_DIR, element);
|
|
28
|
-
const packageJsonPath = join(elementDir, 'package.json');
|
|
29
|
-
// Skip if not a directory
|
|
30
|
-
const statResult = await fsStat(elementDir).catch(() => null);
|
|
31
|
-
if (!statResult?.isDirectory()) {
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
// Skip if package.json already exists
|
|
35
|
-
if (existsSync(packageJsonPath)) {
|
|
36
|
-
this.logger.info(` āļø ${element}: package.json already exists`);
|
|
37
|
-
skipped++;
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
// Scan for dependencies
|
|
41
|
-
const { deps } = await this.scanElement(elementDir);
|
|
42
|
-
// Add controller package as a dependency
|
|
43
|
-
const controllerPkg = `@pie-element/${element}-controller`;
|
|
44
|
-
deps.add(controllerPkg);
|
|
45
|
-
// Generate package.json
|
|
46
|
-
const packageContent = this.generatePackageJson(element, Array.from(deps));
|
|
47
|
-
// Write package.json
|
|
48
|
-
await writeFile(packageJsonPath, packageContent, 'utf-8');
|
|
49
|
-
// Generate vite.config.ts
|
|
50
|
-
const viteConfigPath = join(elementDir, 'vite.config.ts');
|
|
51
|
-
if (!existsSync(viteConfigPath)) {
|
|
52
|
-
await writeFile(viteConfigPath, this.generateViteConfig(), 'utf-8');
|
|
53
|
-
}
|
|
54
|
-
// Generate tsconfig.json
|
|
55
|
-
const tsconfigPath = join(elementDir, 'tsconfig.json');
|
|
56
|
-
if (!existsSync(tsconfigPath)) {
|
|
57
|
-
await writeFile(tsconfigPath, this.generateTsConfig(), 'utf-8');
|
|
58
|
-
}
|
|
59
|
-
this.logger.success(` ā
${element}: Created package.json (${deps.size} deps)`);
|
|
60
|
-
created++;
|
|
61
|
-
}
|
|
62
|
-
this.logger.section(`\nš Summary: ${created} created, ${skipped} skipped`);
|
|
63
|
-
}
|
|
64
|
-
async scanElement(elementDir) {
|
|
65
|
-
const srcDir = join(elementDir, 'src');
|
|
66
|
-
const deps = new Set();
|
|
67
|
-
if (!existsSync(srcDir)) {
|
|
68
|
-
return { deps };
|
|
69
|
-
}
|
|
70
|
-
// Recursively scan all .ts and .tsx files
|
|
71
|
-
const scanDir = async (dir) => {
|
|
72
|
-
const items = await readdir(dir, { withFileTypes: true });
|
|
73
|
-
for (const item of items) {
|
|
74
|
-
const itemPath = join(dir, item.name);
|
|
75
|
-
if (item.isDirectory()) {
|
|
76
|
-
await scanDir(itemPath);
|
|
77
|
-
}
|
|
78
|
-
else if (item.name.endsWith('.ts') || item.name.endsWith('.tsx')) {
|
|
79
|
-
const content = await readFile(itemPath, 'utf-8');
|
|
80
|
-
const fileDeps = this.extractDeps(content);
|
|
81
|
-
for (const dep of fileDeps)
|
|
82
|
-
deps.add(dep);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
await scanDir(srcDir);
|
|
87
|
-
return { deps };
|
|
88
|
-
}
|
|
89
|
-
extractDeps(content) {
|
|
90
|
-
const deps = new Set();
|
|
91
|
-
// Match import statements
|
|
92
|
-
const importRegex = /^import .* from ['"]([^'"]+)['"]/gm;
|
|
93
|
-
const matches = content.matchAll(importRegex);
|
|
94
|
-
for (const match of matches) {
|
|
95
|
-
const dep = match[1];
|
|
96
|
-
// Skip relative imports
|
|
97
|
-
if (dep.startsWith('.'))
|
|
98
|
-
continue;
|
|
99
|
-
// Add @pie-lib packages
|
|
100
|
-
if (dep.startsWith('@pie-lib/')) {
|
|
101
|
-
deps.add(dep.split('/').slice(0, 2).join('/'));
|
|
102
|
-
}
|
|
103
|
-
// Add @pie-element packages (controller packages)
|
|
104
|
-
else if (dep.startsWith('@pie-element/')) {
|
|
105
|
-
deps.add(dep.split('/').slice(0, 2).join('/'));
|
|
106
|
-
}
|
|
107
|
-
// Add other scoped packages
|
|
108
|
-
else if (dep.startsWith('@')) {
|
|
109
|
-
deps.add(dep.split('/').slice(0, 2).join('/'));
|
|
110
|
-
}
|
|
111
|
-
// Add non-scoped packages
|
|
112
|
-
else if (!dep.includes('/')) {
|
|
113
|
-
deps.add(dep);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
// Package with sub-path (e.g., lodash/get)
|
|
117
|
-
deps.add(dep.split('/')[0]);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return Array.from(deps).sort();
|
|
121
|
-
}
|
|
122
|
-
generatePackageJson(name, deps) {
|
|
123
|
-
const dependencies = {};
|
|
124
|
-
// React and React DOM are dependencies at the browser ESM policy version, never peers.
|
|
125
|
-
const sharedRuntimeDeps = elementSharedRuntimeDependencies(process.cwd());
|
|
126
|
-
// Add dependencies (use * for external deps, they're in root package.json)
|
|
127
|
-
for (const dep of deps) {
|
|
128
|
-
// Use workspace protocol for internal packages
|
|
129
|
-
if (dep.startsWith('@pie-element/')) {
|
|
130
|
-
dependencies[dep] = 'workspace:*';
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
dependencies[dep] = sharedRuntimeDeps[dep] ?? '*';
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
const pkg = {
|
|
137
|
-
name: `@pie-element/${name}`,
|
|
138
|
-
version: '0.1.0',
|
|
139
|
-
description: `React implementation of ${name} element synced from pie-elements`,
|
|
140
|
-
type: 'module',
|
|
141
|
-
main: './dist/index.js',
|
|
142
|
-
types: './dist/index.d.ts',
|
|
143
|
-
exports: {
|
|
144
|
-
'.': {
|
|
145
|
-
types: './dist/index.d.ts',
|
|
146
|
-
default: './dist/index.js',
|
|
147
|
-
},
|
|
148
|
-
'./delivery': {
|
|
149
|
-
types: './dist/delivery/index.d.ts',
|
|
150
|
-
default: './dist/delivery/index.js',
|
|
151
|
-
},
|
|
152
|
-
'./configure': {
|
|
153
|
-
types: './dist/configure/index.d.ts',
|
|
154
|
-
default: './dist/configure/index.js',
|
|
155
|
-
},
|
|
156
|
-
'./controller': {
|
|
157
|
-
types: './dist/controller/index.d.ts',
|
|
158
|
-
default: './dist/controller/index.js',
|
|
159
|
-
},
|
|
160
|
-
},
|
|
161
|
-
files: ['dist', 'src'],
|
|
162
|
-
scripts: {
|
|
163
|
-
dev: 'vite',
|
|
164
|
-
build: 'vite build && tsc --emitDeclarationOnly',
|
|
165
|
-
test: 'vitest run',
|
|
166
|
-
lint: 'biome check .',
|
|
167
|
-
'lint:fix': 'biome check --write .',
|
|
168
|
-
},
|
|
169
|
-
dependencies: Object.keys(dependencies).length > 0 ? dependencies : undefined,
|
|
170
|
-
devDependencies: {
|
|
171
|
-
'@types/react': '^18.2.0',
|
|
172
|
-
'@types/react-dom': '^18.2.0',
|
|
173
|
-
'@vitejs/plugin-react': '^4.2.0',
|
|
174
|
-
typescript: '^5.9.3',
|
|
175
|
-
vite: '^6.0.0',
|
|
176
|
-
vitest: '^2.1.0',
|
|
177
|
-
},
|
|
178
|
-
keywords: ['pie', 'pie-element', 'react', name, 'assessment'],
|
|
179
|
-
license: 'ISC',
|
|
180
|
-
repository: {
|
|
181
|
-
type: 'git',
|
|
182
|
-
url: 'https://github.com/pie-framework/pie-elements-ng.git',
|
|
183
|
-
directory: `packages/elements-react/${name}`,
|
|
184
|
-
},
|
|
185
|
-
};
|
|
186
|
-
// Remove undefined fields
|
|
187
|
-
const cleaned = JSON.parse(JSON.stringify(pkg));
|
|
188
|
-
return `${JSON.stringify(cleaned, null, 2)}\n`;
|
|
189
|
-
}
|
|
190
|
-
generateViteConfig() {
|
|
191
|
-
return `import react from '@vitejs/plugin-react';
|
|
192
|
-
import { defineConfig } from 'vite';
|
|
193
|
-
import { resolve } from 'node:path';
|
|
194
|
-
|
|
195
|
-
export default defineConfig({
|
|
196
|
-
plugins: [react()],
|
|
197
|
-
build: {
|
|
198
|
-
lib: {
|
|
199
|
-
entry: {
|
|
200
|
-
index: resolve(__dirname, 'src/index.ts'),
|
|
201
|
-
'delivery/index': resolve(__dirname, 'src/index.ts'),
|
|
202
|
-
'configure/index': resolve(__dirname, 'src/configure/index.ts'),
|
|
203
|
-
},
|
|
204
|
-
formats: ['es'],
|
|
205
|
-
},
|
|
206
|
-
rollupOptions: {
|
|
207
|
-
external: [
|
|
208
|
-
/^react($|\\/)/,
|
|
209
|
-
/^react-dom($|\\/)/,
|
|
210
|
-
/^@pie-lib/,
|
|
211
|
-
/^@pie-element/,
|
|
212
|
-
/^@pie-framework/,
|
|
213
|
-
/^@mui/,
|
|
214
|
-
],
|
|
215
|
-
output: {
|
|
216
|
-
preserveModules: true,
|
|
217
|
-
preserveModulesRoot: 'src',
|
|
218
|
-
},
|
|
219
|
-
},
|
|
220
|
-
},
|
|
221
|
-
});
|
|
222
|
-
`;
|
|
223
|
-
}
|
|
224
|
-
generateTsConfig() {
|
|
225
|
-
return `{
|
|
226
|
-
"extends": "../../../tsconfig.declarations.json",
|
|
227
|
-
"compilerOptions": {
|
|
228
|
-
"outDir": "./dist",
|
|
229
|
-
"rootDir": "./src",
|
|
230
|
-
"jsx": "react-jsx",
|
|
231
|
-
"declaration": true
|
|
232
|
-
},
|
|
233
|
-
"include": ["src/**/*"],
|
|
234
|
-
"exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.test.tsx"]
|
|
235
|
-
}
|
|
236
|
-
`;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
//# sourceMappingURL=create-react-elements.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-react-elements.js","sourceRoot":"","sources":["../../../src/commands/packages/create-react-elements.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport { Logger } from '../../utils/logger.js';\nimport { existsSync } from 'node:fs';\nimport { readdir, readFile, writeFile, stat as fsStat } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { elementSharedRuntimeDependencies } from '../../lib/upstream/sync-package-manager.js';\n\nconst ELEMENTS_REACT_DIR = 'packages/elements-react';\n\ninterface ElementDeps {\n deps: Set<string>;\n}\n\nexport default class CreateReactElements extends Command {\n static override description = 'Create package.json files for synced React elements';\n\n static override examples = ['<%= config.bin %> <%= command.id %>'];\n\n static override flags = {\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n };\n\n private logger = new Logger();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(CreateReactElements);\n\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('š¦ Creating package.json files for React elements');\n\n const elements = await readdir(ELEMENTS_REACT_DIR);\n let created = 0;\n let skipped = 0;\n\n for (const element of elements) {\n const elementDir = join(ELEMENTS_REACT_DIR, element);\n const packageJsonPath = join(elementDir, 'package.json');\n\n // Skip if not a directory\n const statResult = await fsStat(elementDir).catch(() => null);\n if (!statResult?.isDirectory()) {\n continue;\n }\n\n // Skip if package.json already exists\n if (existsSync(packageJsonPath)) {\n this.logger.info(` āļø ${element}: package.json already exists`);\n skipped++;\n continue;\n }\n\n // Scan for dependencies\n const { deps } = await this.scanElement(elementDir);\n\n // Add controller package as a dependency\n const controllerPkg = `@pie-element/${element}-controller`;\n deps.add(controllerPkg);\n\n // Generate package.json\n const packageContent = this.generatePackageJson(element, Array.from(deps));\n\n // Write package.json\n await writeFile(packageJsonPath, packageContent, 'utf-8');\n\n // Generate vite.config.ts\n const viteConfigPath = join(elementDir, 'vite.config.ts');\n if (!existsSync(viteConfigPath)) {\n await writeFile(viteConfigPath, this.generateViteConfig(), 'utf-8');\n }\n\n // Generate tsconfig.json\n const tsconfigPath = join(elementDir, 'tsconfig.json');\n if (!existsSync(tsconfigPath)) {\n await writeFile(tsconfigPath, this.generateTsConfig(), 'utf-8');\n }\n\n this.logger.success(` ā
${element}: Created package.json (${deps.size} deps)`);\n created++;\n }\n\n this.logger.section(`\\nš Summary: ${created} created, ${skipped} skipped`);\n }\n\n private async scanElement(elementDir: string): Promise<ElementDeps> {\n const srcDir = join(elementDir, 'src');\n const deps = new Set<string>();\n\n if (!existsSync(srcDir)) {\n return { deps };\n }\n\n // Recursively scan all .ts and .tsx files\n const scanDir = async (dir: string): Promise<void> => {\n const items = await readdir(dir, { withFileTypes: true });\n\n for (const item of items) {\n const itemPath = join(dir, item.name);\n\n if (item.isDirectory()) {\n await scanDir(itemPath);\n } else if (item.name.endsWith('.ts') || item.name.endsWith('.tsx')) {\n const content = await readFile(itemPath, 'utf-8');\n const fileDeps = this.extractDeps(content);\n\n for (const dep of fileDeps) deps.add(dep);\n }\n }\n };\n\n await scanDir(srcDir);\n\n return { deps };\n }\n\n private extractDeps(content: string): string[] {\n const deps = new Set<string>();\n\n // Match import statements\n const importRegex = /^import .* from ['\"]([^'\"]+)['\"]/gm;\n const matches = content.matchAll(importRegex);\n\n for (const match of matches) {\n const dep = match[1];\n\n // Skip relative imports\n if (dep.startsWith('.')) continue;\n\n // Add @pie-lib packages\n if (dep.startsWith('@pie-lib/')) {\n deps.add(dep.split('/').slice(0, 2).join('/'));\n }\n // Add @pie-element packages (controller packages)\n else if (dep.startsWith('@pie-element/')) {\n deps.add(dep.split('/').slice(0, 2).join('/'));\n }\n // Add other scoped packages\n else if (dep.startsWith('@')) {\n deps.add(dep.split('/').slice(0, 2).join('/'));\n }\n // Add non-scoped packages\n else if (!dep.includes('/')) {\n deps.add(dep);\n } else {\n // Package with sub-path (e.g., lodash/get)\n deps.add(dep.split('/')[0]);\n }\n }\n\n return Array.from(deps).sort();\n }\n\n private generatePackageJson(name: string, deps: string[]): string {\n const dependencies: Record<string, string> = {};\n // React and React DOM are dependencies at the browser ESM policy version, never peers.\n const sharedRuntimeDeps = elementSharedRuntimeDependencies(process.cwd());\n\n // Add dependencies (use * for external deps, they're in root package.json)\n for (const dep of deps) {\n // Use workspace protocol for internal packages\n if (dep.startsWith('@pie-element/')) {\n dependencies[dep] = 'workspace:*';\n } else {\n dependencies[dep] = sharedRuntimeDeps[dep] ?? '*';\n }\n }\n\n const pkg = {\n name: `@pie-element/${name}`,\n version: '0.1.0',\n description: `React implementation of ${name} element synced from pie-elements`,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n default: './dist/index.js',\n },\n './delivery': {\n types: './dist/delivery/index.d.ts',\n default: './dist/delivery/index.js',\n },\n './configure': {\n types: './dist/configure/index.d.ts',\n default: './dist/configure/index.js',\n },\n './controller': {\n types: './dist/controller/index.d.ts',\n default: './dist/controller/index.js',\n },\n },\n files: ['dist', 'src'],\n scripts: {\n dev: 'vite',\n build: 'vite build && tsc --emitDeclarationOnly',\n test: 'vitest run',\n lint: 'biome check .',\n 'lint:fix': 'biome check --write .',\n },\n dependencies: Object.keys(dependencies).length > 0 ? dependencies : undefined,\n devDependencies: {\n '@types/react': '^18.2.0',\n '@types/react-dom': '^18.2.0',\n '@vitejs/plugin-react': '^4.2.0',\n typescript: '^5.9.3',\n vite: '^6.0.0',\n vitest: '^2.1.0',\n },\n keywords: ['pie', 'pie-element', 'react', name, 'assessment'],\n license: 'ISC',\n repository: {\n type: 'git',\n url: 'https://github.com/pie-framework/pie-elements-ng.git',\n directory: `packages/elements-react/${name}`,\n },\n };\n\n // Remove undefined fields\n const cleaned = JSON.parse(JSON.stringify(pkg));\n\n return `${JSON.stringify(cleaned, null, 2)}\\n`;\n }\n\n private generateViteConfig(): string {\n return `import react from '@vitejs/plugin-react';\nimport { defineConfig } from 'vite';\nimport { resolve } from 'node:path';\n\nexport default defineConfig({\n plugins: [react()],\n build: {\n lib: {\n entry: {\n index: resolve(__dirname, 'src/index.ts'),\n 'delivery/index': resolve(__dirname, 'src/index.ts'),\n 'configure/index': resolve(__dirname, 'src/configure/index.ts'),\n },\n formats: ['es'],\n },\n rollupOptions: {\n external: [\n /^react($|\\\\/)/,\n /^react-dom($|\\\\/)/,\n /^@pie-lib/,\n /^@pie-element/,\n /^@pie-framework/,\n /^@mui/,\n ],\n output: {\n preserveModules: true,\n preserveModulesRoot: 'src',\n },\n },\n },\n});\n`;\n }\n\n private generateTsConfig(): string {\n return `{\n \"extends\": \"../../../tsconfig.declarations.json\",\n \"compilerOptions\": {\n \"outDir\": \"./dist\",\n \"rootDir\": \"./src\",\n \"jsx\": \"react-jsx\",\n \"declaration\": true\n },\n \"include\": [\"src/**/*\"],\n \"exclude\": [\"node_modules\", \"dist\", \"**/*.test.ts\", \"**/*.test.tsx\"]\n}\n`;\n }\n}\n"]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
export default class InitSyncedElements extends Command {
|
|
3
|
-
static description: string;
|
|
4
|
-
static examples: string[];
|
|
5
|
-
static flags: {
|
|
6
|
-
element: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
-
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
-
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
-
};
|
|
10
|
-
private logger;
|
|
11
|
-
run(): Promise<void>;
|
|
12
|
-
private readUpstreamPackageJson;
|
|
13
|
-
private generatePackageJson;
|
|
14
|
-
private generateViteConfig;
|
|
15
|
-
}
|