@camera.ui/cli 0.0.48 → 0.0.50

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.
Files changed (54) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +10 -1
  3. package/dist/commands/artifacts.d.ts +9 -0
  4. package/dist/commands/artifacts.js +107 -0
  5. package/dist/commands/artifacts.js.map +1 -0
  6. package/dist/commands/bundle.d.ts +19 -1
  7. package/dist/commands/bundle.js +368 -56
  8. package/dist/commands/bundle.js.map +1 -1
  9. package/dist/commands/create.js +140 -93
  10. package/dist/commands/create.js.map +1 -1
  11. package/dist/commands/publish.js +77 -36
  12. package/dist/commands/publish.js.map +1 -1
  13. package/dist/index.js +11 -4
  14. package/dist/index.js.map +1 -1
  15. package/dist/types.d.ts +21 -5
  16. package/dist/utils/banners.d.ts +3 -1
  17. package/dist/utils/banners.js +15 -11
  18. package/dist/utils/banners.js.map +1 -1
  19. package/dist/utils/logger.d.ts +12 -24
  20. package/dist/utils/logger.js +57 -83
  21. package/dist/utils/logger.js.map +1 -1
  22. package/dist/utils/parser.d.ts +11 -4
  23. package/dist/utils/parser.js +27 -186
  24. package/dist/utils/parser.js.map +1 -1
  25. package/dist/utils/templates.d.ts +13 -1
  26. package/dist/utils/templates.js +148 -68
  27. package/dist/utils/templates.js.map +1 -1
  28. package/dist/utils/utils.js +13 -11
  29. package/dist/utils/utils.js.map +1 -1
  30. package/dist/utils/versions.js +1 -2
  31. package/dist/utils/versions.js.map +1 -1
  32. package/package.json +29 -43
  33. package/templates/base/README.md +2 -2
  34. package/templates/base/SECURITY.md +1 -1
  35. package/templates/base/package.json +2 -3
  36. package/templates/base/updates.config.js +1 -1
  37. package/templates/go/go.mod +5 -0
  38. package/templates/go/postinstall.js +35 -0
  39. package/templates/go/src/main.go +51 -0
  40. package/templates/python/requirements.txt +1 -1
  41. package/templates/python/ruff.toml +2 -2
  42. package/templates/python/src/main.py +299 -28
  43. package/templates/typescript/contract.ts +36 -0
  44. package/templates/typescript/eslint.config.js +13 -3
  45. package/templates/typescript/package.eslint.json +2 -2
  46. package/templates/typescript/package.json +4 -4
  47. package/templates/typescript/src/index.ts +96 -27
  48. package/templates/typescript/src/sensor.ts +207 -0
  49. package/CHANGELOG.md +0 -8
  50. package/CONTRIBUTING.md +0 -1
  51. package/scripts/chmod.js +0 -17
  52. package/templates/base/cameraui.config.js +0 -10
  53. package/templates/base/eslint.config.js +0 -64
  54. package/templates/base/src/index.js +0 -41
@@ -1,10 +1,99 @@
1
+ import { getContractValidationErrors, validateContractConsistency } from '@camera.ui/sdk';
1
2
  import AdmZip from 'adm-zip';
2
- import { cp, mkdir, readdir, readFile, rm, stat, writeFile } from 'node:fs/promises';
3
- import { resolve } from 'node:path';
4
- import webpack from 'webpack';
5
- import { logger } from '../utils/logger.js';
3
+ import * as esbuild from 'esbuild';
4
+ import { execFileSync } from 'node:child_process';
5
+ import { existsSync } from 'node:fs';
6
+ import { copyFile, cp, mkdir, readdir, readFile, rm, stat, writeFile } from 'node:fs/promises';
7
+ import { arch, platform } from 'node:os';
8
+ import { dirname, resolve } from 'node:path';
9
+ import { fileURLToPath, pathToFileURL } from 'node:url';
10
+ import { showIntro, showOutro } from '../utils/banners.js';
11
+ import * as log from '../utils/logger.js';
6
12
  import { parseConfig } from '../utils/parser.js';
7
13
  import { copyPath, detectLanguage, ensureDir, findFile } from '../utils/utils.js';
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = dirname(__filename);
16
+ const DEFAULT_GO_TARGETS = [
17
+ { goos: 'linux', goarch: 'amd64' },
18
+ { goos: 'linux', goarch: 'arm64' },
19
+ { goos: 'darwin', goarch: 'amd64' },
20
+ { goos: 'darwin', goarch: 'arm64' },
21
+ { goos: 'windows', goarch: 'amd64' },
22
+ { goos: 'windows', goarch: 'arm64' },
23
+ ];
24
+ function nodeOsToGoos(p) {
25
+ return p === 'win32' ? 'windows' : p;
26
+ }
27
+ function nodeArchToGoarch(a) {
28
+ return a === 'x64' ? 'amd64' : a;
29
+ }
30
+ function goosToNpmOs(g) {
31
+ return g === 'windows' ? 'win32' : g;
32
+ }
33
+ function goarchToNpmCpu(g) {
34
+ return g === 'amd64' ? 'x64' : g;
35
+ }
36
+ function resolveGoTargets(mode, goOpts) {
37
+ if (mode === 'development') {
38
+ const hostGoos = nodeOsToGoos(platform());
39
+ const hostGoarch = nodeArchToGoarch(arch());
40
+ // If the plugin explicitly configured targets, pick the host's settings
41
+ // (cgoEnabled / cc) from there — same iteration semantics as production.
42
+ const matched = goOpts?.targets?.find((t) => t.goos === hostGoos && t.goarch === hostGoarch);
43
+ return [matched ?? { goos: hostGoos, goarch: hostGoarch }];
44
+ }
45
+ if (goOpts?.targets?.length)
46
+ return goOpts.targets;
47
+ return DEFAULT_GO_TARGETS;
48
+ }
49
+ export async function stagePlatformPackages(args) {
50
+ log.info('Staging platform packages...');
51
+ const platformsDir = resolve(args.bundleDir, 'platforms');
52
+ await ensureDir(platformsDir);
53
+ const optionalDeps = {};
54
+ for (const { goos, goarch } of args.targets) {
55
+ const ext = goos === 'windows' ? '.exe' : '';
56
+ const platformDir = resolve(platformsDir, `${goos}-${goarch}`);
57
+ await ensureDir(platformDir);
58
+ const binaryName = `${args.pluginName}-${goos}-${goarch}${ext}`;
59
+ const sourcePath = resolve(args.binDir, binaryName);
60
+ const targetBinaryName = `${args.pluginName}${ext}`;
61
+ if (!existsSync(sourcePath)) {
62
+ log.error(` Missing binary for ${goos}-${goarch}: ${sourcePath}`);
63
+ throw new Error(`Binary not found: ${sourcePath}`);
64
+ }
65
+ await cp(sourcePath, resolve(platformDir, targetBinaryName));
66
+ await rm(sourcePath);
67
+ const platformPkgName = args.packageScope ? `${args.packageScope}/${args.pluginName}-${goos}-${goarch}` : `${args.pluginName}-${goos}-${goarch}`;
68
+ const platformPkg = {
69
+ name: platformPkgName,
70
+ version: args.packageJson.version ?? '0.0.1',
71
+ os: [goosToNpmOs(goos)],
72
+ cpu: [goarchToNpmCpu(goarch)],
73
+ main: targetBinaryName,
74
+ files: [targetBinaryName],
75
+ license: args.packageJson.license ?? 'MIT',
76
+ };
77
+ await writeFile(resolve(platformDir, 'package.json'), JSON.stringify(platformPkg, null, 2));
78
+ optionalDeps[platformPkgName] = platformPkg.version;
79
+ }
80
+ // Copy postinstall.js stub — resolves the right platform sub-package at
81
+ // install-time and copies its binary into dist/bin/plugin.
82
+ const postinstallTemplatePath = resolve(__dirname, '../../templates/go/postinstall.js');
83
+ await copyFile(postinstallTemplatePath, resolve(args.bundleDir, 'postinstall.js'));
84
+ // Update plugin root package.json with optionalDependencies pointing at
85
+ // each platform sub-package. npm picks the matching one based on os/cpu
86
+ // fields from the platform package's own package.json.
87
+ const rootPkgPath = resolve(args.rootDir, 'package.json');
88
+ const rootPkgRaw = await readFile(rootPkgPath, 'utf-8');
89
+ const rootPkg = JSON.parse(rootPkgRaw);
90
+ rootPkg.optionalDependencies = { ...(rootPkg.optionalDependencies ?? {}), ...optionalDeps };
91
+ rootPkg.scripts = { ...(rootPkg.scripts ?? {}), postinstall: 'node postinstall.js' };
92
+ await writeFile(rootPkgPath, `${JSON.stringify(rootPkg, null, 2)}\n`);
93
+ // Clean up the cross-compile staging dir; binaries now live in platforms/.
94
+ await rm(args.binDir, { recursive: true, force: true });
95
+ log.success(`Staged ${args.targets.length} platform package(s)`);
96
+ }
8
97
  const REQUIRED_FILES = [
9
98
  {
10
99
  target: 'README.md',
@@ -29,19 +118,19 @@ const REQUIRED_FILES = [
29
118
  },
30
119
  ];
31
120
  async function copyStandardFiles(rootDir, outDir) {
32
- logger.info('Copying standard files...');
121
+ log.info('Copying standard files...');
33
122
  for (const file of REQUIRED_FILES) {
34
123
  const foundFile = await findFile(rootDir, file);
35
124
  if (foundFile) {
36
125
  await copyPath(rootDir, foundFile, outDir, file.target);
37
126
  }
38
127
  else if (!file.optional) {
39
- logger.missingFile(file.target);
128
+ log.missingFile(file.target);
40
129
  }
41
130
  }
42
131
  }
43
132
  async function copyAdditionalFiles(rootDir, paths, outDir) {
44
- logger.info('Copying additional files...');
133
+ log.info('Copying additional files...');
45
134
  for (const path of paths) {
46
135
  if (typeof path === 'string') {
47
136
  await copyPath(rootDir, path, resolve(outDir, 'dist'), path.split('/').pop());
@@ -51,17 +140,24 @@ async function copyAdditionalFiles(rootDir, paths, outDir) {
51
140
  }
52
141
  }
53
142
  }
54
- async function processPackageJson(rootDir, outDir, external, pluginLanguage) {
143
+ async function processPackageJson({ rootDir, outDir, external, pluginLanguage, goTargets, isDev }) {
55
144
  try {
56
- logger.info('Processing package.json...');
145
+ log.info('Processing package.json...');
57
146
  const packageJsonPath = resolve(rootDir, 'package.json');
58
147
  const packageJsonContent = await readFile(packageJsonPath, 'utf-8');
59
148
  const packageJson = JSON.parse(packageJsonContent);
60
- const mainFile = pluginLanguage === 'python' ? 'main.py' : 'index.js';
61
- packageJson.main = `./dist/${mainFile}`;
149
+ const mainFile = pluginLanguage === 'python' ? 'main.py' : pluginLanguage === 'go' ? 'main.go' : 'index.js';
150
+ packageJson.main = pluginLanguage === 'go' ? './main.go' : `./dist/${mainFile}`;
62
151
  packageJson.type = 'commonjs';
152
+ // TODO: Uncomment when server-side compatibility check is implemented
153
+ // // Extract @camera.ui/sdk version from devDependencies before deleting
154
+ // // This will be added as peerDependency for runtime compatibility checking
155
+ // const cameraUiTypesVersion =
156
+ // packageJson.devDependencies?.['@camera.ui/sdk'] ?? packageJson.dependencies?.['@camera.ui/sdk'] ?? packageJson.peerDependencies?.['@camera.ui/sdk'];
157
+ //
158
+ // // For Python plugins, also extract camera-ui-sdk version from requirements.txt
159
+ // const pythonTypesVersion = pluginLanguage === 'python' ? await parsePythonTypesVersion(rootDir) : undefined;
63
160
  delete packageJson.devDependencies;
64
- // delete packageJson.scripts;
65
161
  if (packageJson.dependencies) {
66
162
  const newDependencies = {};
67
163
  for (const [dep, version] of Object.entries(packageJson.dependencies)) {
@@ -82,23 +178,49 @@ async function processPackageJson(rootDir, outDir, external, pluginLanguage) {
82
178
  delete packageJson.dependencies;
83
179
  }
84
180
  }
85
- packageJson['camera.ui'] ??= {};
86
- packageJson['camera.ui'].bundled = true;
181
+ // TODO: Uncomment when server-side compatibility check is implemented
182
+ // // Add peerDependencies for server compatibility checking
183
+ // const peerDependencies: Record<string, string> = {};
184
+ //
185
+ // if (cameraUiTypesVersion) {
186
+ // peerDependencies['@camera.ui/sdk'] = cameraUiTypesVersion;
187
+ // }
188
+ //
189
+ // if (pythonTypesVersion) {
190
+ // peerDependencies['camera-ui-sdk'] = pythonTypesVersion;
191
+ // }
192
+ //
193
+ // if (Object.keys(peerDependencies).length > 0) {
194
+ // packageJson.peerDependencies = peerDependencies;
195
+ // }
196
+ // Go production: inject optionalDependencies and postinstall script
197
+ if (pluginLanguage === 'go' && goTargets?.length && !isDev) {
198
+ const pluginName = packageJson.name.replace(/^@[^/]+\//, '');
199
+ const packageScope = packageJson.name.includes('/') ? packageJson.name.split('/')[0] : undefined;
200
+ const version = packageJson.version ?? '0.0.1';
201
+ const optionalDeps = {};
202
+ for (const { goos, goarch } of goTargets) {
203
+ const platformPkgName = packageScope ? `${packageScope}/${pluginName}-${goos}-${goarch}` : `${pluginName}-${goos}-${goarch}`;
204
+ optionalDeps[platformPkgName] = version;
205
+ }
206
+ packageJson.optionalDependencies = optionalDeps;
207
+ packageJson.scripts = { ...packageJson.scripts, postinstall: 'node postinstall.js' };
208
+ }
87
209
  const targetPath = resolve(outDir, 'package.json');
88
210
  await writeFile(targetPath, JSON.stringify(packageJson, null, 2));
89
- logger.success('Package.json processed');
211
+ log.success('Package.json processed');
90
212
  }
91
213
  catch (error) {
92
- logger.error('Failed to process package.json');
214
+ log.error('Failed to process package.json');
93
215
  throw error;
94
216
  }
95
217
  }
96
218
  async function createBundleZip(bundleDir) {
97
219
  try {
98
- logger.info('Creating bundle archive...');
220
+ log.info('Creating bundle archive...');
99
221
  const tempDir = resolve(bundleDir, '.temp');
100
222
  await mkdir(tempDir, { recursive: true });
101
- const staticFiles = ['bundle.zip', '.temp', 'package.json', 'CHANGELOG.md', 'LICENSE.md', 'README.md'];
223
+ const staticFiles = ['bundle.zip', '.temp', 'package.json', 'CHANGELOG.md', 'LICENSE.md', 'README.md', 'platforms'];
102
224
  const files = await readdir(bundleDir);
103
225
  for (const file of files) {
104
226
  if (!staticFiles.slice(1).includes(file)) {
@@ -115,61 +237,251 @@ async function createBundleZip(bundleDir) {
115
237
  }
116
238
  await rm(tempDir, { recursive: true, force: true });
117
239
  const stats = await stat(resolve(bundleDir, 'bundle.zip'));
118
- const sizeInMB = (stats.size / (1024 * 1024)).toFixed(2);
119
- logger.success(`Created bundle.zip (${sizeInMB} MB)`);
240
+ const sizeInMB = stats.size / (1024 * 1024);
241
+ log.bundleSize(sizeInMB);
120
242
  }
121
243
  catch (error) {
122
- logger.error('Failed to create bundle archive');
244
+ log.error('Failed to create bundle archive');
123
245
  throw error;
124
246
  }
125
247
  }
126
- async function webpackBuild(config) {
127
- return new Promise((resolve, reject) => {
128
- webpack(config).run((err, stats) => {
129
- if (err) {
130
- reject(err);
131
- return;
132
- }
133
- if (stats?.hasErrors()) {
134
- const info = stats.toJson();
135
- reject(new Error(info.errors?.map((error) => error.message).join('\n')));
136
- return;
137
- }
138
- resolve();
139
- });
140
- });
141
- }
142
- export async function buildProject() {
143
- logger.startBuild();
144
- const { webpackConfig, userConfig } = await parseConfig();
145
- const outDir = resolve(webpackConfig.output.path, '..');
248
+ export async function buildProject(options = {}) {
249
+ const startTime = Date.now();
250
+ showIntro();
251
+ log.info('Starting build...');
252
+ const { userConfig, targetRootDir, entryPoint, outputFile } = await parseConfig();
253
+ const bundleDir = resolve(outputFile, '..', '..');
146
254
  const rootDir = userConfig.rootDir ? resolve(process.cwd(), userConfig.rootDir) : process.cwd();
147
255
  const pluginLanguage = userConfig.language ?? (await detectLanguage(rootDir));
148
- await rm(outDir, { recursive: true, force: true });
256
+ await rm(bundleDir, { recursive: true, force: true });
257
+ let goTargets;
149
258
  try {
150
- if (pluginLanguage === 'python') {
151
- await ensureDir(outDir);
152
- await copyPath(rootDir, 'src', outDir, 'dist');
259
+ if (pluginLanguage === 'go') {
260
+ // Go: cross-compile binaries
261
+ await ensureDir(bundleDir);
262
+ const binDir = resolve(bundleDir, 'dist', 'bin');
263
+ await ensureDir(binDir);
264
+ log.info('Cross-compiling Go plugin...');
265
+ const packageJsonPath = resolve(rootDir, 'package.json');
266
+ const packageJsonContent = await readFile(packageJsonPath, 'utf-8');
267
+ const packageJson = JSON.parse(packageJsonContent);
268
+ const pluginName = packageJson.name.replace(/^@[^/]+\//, '');
269
+ const packageScope = packageJson.name.includes('/') ? packageJson.name.split('/')[0] : undefined;
270
+ const goOpts = userConfig.go;
271
+ let targets = resolveGoTargets(userConfig.mode, goOpts);
272
+ // --target restricts the build to a single configured platform. The
273
+ // per-platform packaging step (writing `bundle/platforms/...`) is also
274
+ // skipped — that's the `artifacts` command's job once all matrix jobs
275
+ // have uploaded their respective binaries.
276
+ if (options.target) {
277
+ const dashIdx = options.target.lastIndexOf('-');
278
+ if (dashIdx <= 0) {
279
+ throw new Error(`--target must be in the form <goos>-<goarch> (got "${options.target}")`);
280
+ }
281
+ const wantGoos = options.target.slice(0, dashIdx);
282
+ const wantGoarch = options.target.slice(dashIdx + 1);
283
+ const match = targets.find((t) => t.goos === wantGoos && t.goarch === wantGoarch);
284
+ if (!match) {
285
+ const available = targets.map((t) => `${t.goos}-${t.goarch}`).join(', ');
286
+ throw new Error(`--target ${options.target} not in plugin's configured targets [${available}]`);
287
+ }
288
+ targets = [match];
289
+ }
290
+ goTargets = targets;
291
+ const defaultLdflags = goOpts?.ldflags ?? '-s -w';
292
+ const defaultCgoEnabled = goOpts?.cgoEnabled ?? '0';
293
+ const extraEnv = goOpts?.env ?? {};
294
+ const isDev = userConfig.mode === 'development';
295
+ for (const target of targets) {
296
+ const { goos, goarch } = target;
297
+ const ext = goos === 'windows' ? '.exe' : '';
298
+ // Naming:
299
+ // - dev mode (no --target): unsuffixed `plugin` for direct local run
300
+ // - --target / production: `<pluginName>-<goos>-<goarch>[.exe]` so
301
+ // matrix runners can upload an artifact whose name encodes the
302
+ // target, and the `artifacts` command can match it back
303
+ const outputName = isDev && !options.target ? `plugin${ext}` : `${pluginName}-${goos}-${goarch}${ext}`;
304
+ const outputPath = resolve(binDir, outputName);
305
+ // Per-target CGo + CC overrides — `cameraui.config.ts` can opt in
306
+ // CGo only for the platforms that need it (e.g. darwin Foundation
307
+ // framework bindings) without dragging Linux/Windows builds into a
308
+ // C cross-compile setup.
309
+ const targetCgoEnabled = target.cgoEnabled ?? defaultCgoEnabled;
310
+ const targetLdflags = target.ldflags ?? defaultLdflags;
311
+ const targetEnv = {
312
+ ...extraEnv,
313
+ CGO_ENABLED: targetCgoEnabled,
314
+ GOOS: goos,
315
+ GOARCH: goarch,
316
+ };
317
+ if (target.cc)
318
+ targetEnv.CC = target.cc;
319
+ const cgoLabel = targetCgoEnabled === '1' ? ' [CGO]' : '';
320
+ log.info(` Building ${pluginName}-${goos}-${goarch}${ext}${cgoLabel}...`);
321
+ try {
322
+ // execFileSync (no shell) avoids cross-platform quoting headaches —
323
+ // PowerShell on Windows doesn't strip single quotes, so a shell-style
324
+ // `-ldflags '-s -w …'` would land at `go build` with the quotes
325
+ // intact and fail. Passing args as an array side-steps shell parsing
326
+ // entirely.
327
+ execFileSync('go', ['build', '-ldflags', targetLdflags, '-o', outputPath, './src/'], {
328
+ cwd: rootDir,
329
+ stdio: 'pipe',
330
+ env: { ...process.env, ...targetEnv },
331
+ });
332
+ log.success(` Built ${pluginName}-${goos}-${goarch}${ext}`);
333
+ }
334
+ catch (err) {
335
+ log.error(` Failed to build ${pluginName}-${goos}-${goarch}${ext}: ${err.message}`);
336
+ throw err;
337
+ }
338
+ }
339
+ // Production multi-target build: generate per-platform npm packages.
340
+ // Skipped in single-target (--target) mode — each matrix job just emits
341
+ // its binary into bundle/dist/bin/ for the `artifacts` command to pick
342
+ // up later in the publish stage.
343
+ if (!isDev && !options.target) {
344
+ await stagePlatformPackages({
345
+ targets,
346
+ binDir,
347
+ bundleDir,
348
+ pluginName,
349
+ packageScope,
350
+ packageJson,
351
+ rootDir,
352
+ });
353
+ }
354
+ log.success('Go plugin compiled');
355
+ // --target single-target mode (matrix CI): the only output we need
356
+ // is the platform-suffixed binary at `bundle/dist/bin/`. Skip the
357
+ // contract bundle, README copy, package.json rewrite, and zip — those
358
+ // are the publish-stage's job, where `cui artifacts` aggregates one
359
+ // binary per matrix runner into the final per-platform packages.
360
+ if (options.target) {
361
+ const duration = Date.now() - startTime;
362
+ log.buildSuccess(bundleDir, duration);
363
+ showOutro('Build complete!');
364
+ return;
365
+ }
366
+ }
367
+ else if (pluginLanguage === 'python') {
368
+ // Python: copy source files to dist/
369
+ await ensureDir(bundleDir);
370
+ await copyPath(rootDir, 'src', bundleDir, 'dist');
153
371
  }
154
372
  else {
155
- logger.startBundle();
156
- await webpackBuild(webpackConfig);
157
- logger.bundleCreated();
158
- logger.writeSuccess();
373
+ // TypeScript/JavaScript: bundle with esbuild
374
+ // esbuild handles CJS/ESM interop much better than Rollup for export * re-exports
375
+ log.info('Bundling plugin...');
376
+ // Build external list: @camera.ui/sdk + user externals
377
+ const externals = ['@camera.ui/sdk'];
378
+ // Add user-defined externals (convert RegExp to string patterns for esbuild)
379
+ if (userConfig.external) {
380
+ for (const ext of userConfig.external) {
381
+ if (typeof ext === 'string') {
382
+ externals.push(ext);
383
+ }
384
+ // Note: esbuild doesn't support RegExp externals, skip them
385
+ }
386
+ }
387
+ await esbuild.build({
388
+ entryPoints: [entryPoint],
389
+ bundle: true,
390
+ platform: 'node',
391
+ target: 'node18',
392
+ format: 'cjs',
393
+ outfile: outputFile,
394
+ sourcemap: userConfig.mode === 'development',
395
+ minify: userConfig.mode !== 'development',
396
+ keepNames: true,
397
+ treeShaking: userConfig.mode !== 'development',
398
+ external: externals,
399
+ logLevel: 'warning',
400
+ // Handle native .node modules and packages with native bindings
401
+ plugins: [
402
+ {
403
+ name: 'native-node-modules',
404
+ setup(build) {
405
+ // Mark all .node files as external
406
+ build.onResolve({ filter: /\.node$/ }, (args) => ({
407
+ path: args.path,
408
+ external: true,
409
+ }));
410
+ // Mark common native module packages as external
411
+ // These patterns match packages that typically contain native bindings
412
+ const nativePackagePatterns = [/^@camera\.ui\/rust-/, /^@napi-rs\//, /-darwin-/, /-linux-/, /-win32-/, /-arm64$/, /-x64$/];
413
+ build.onResolve({ filter: /.*/ }, (args) => {
414
+ for (const pattern of nativePackagePatterns) {
415
+ if (pattern.test(args.path)) {
416
+ return { path: args.path, external: true };
417
+ }
418
+ }
419
+ return null;
420
+ });
421
+ },
422
+ },
423
+ ],
424
+ });
425
+ log.success('Plugin bundled');
426
+ }
427
+ // Bundle contract.ts (always at root level, required for all plugins)
428
+ const contractInput = resolve(targetRootDir, 'contract.ts');
429
+ if (!existsSync(contractInput)) {
430
+ throw new Error(`Missing contract.ts at ${contractInput}. Every plugin requires a contract.ts file at the project root.`);
159
431
  }
160
- await copyStandardFiles(rootDir, outDir);
432
+ log.info('Bundling contract...');
433
+ const isDevelopment = userConfig.mode === 'development';
434
+ // Bundle contract with esbuild - no externals, enum values are inlined
435
+ // Use .cjs extension to ensure Node.js treats it as CommonJS regardless of package.json "type"
436
+ await esbuild.build({
437
+ entryPoints: [contractInput],
438
+ bundle: true,
439
+ platform: 'node',
440
+ target: 'node18',
441
+ format: 'cjs',
442
+ outfile: resolve(bundleDir, 'contract.cjs'),
443
+ sourcemap: isDevelopment,
444
+ minify: false, // Keep contract readable for debugging
445
+ logLevel: 'warning',
446
+ });
447
+ log.success('Contract bundled');
448
+ // Validate contract
449
+ log.info('Validating contract...');
450
+ const contractPath = resolve(bundleDir, 'contract.cjs');
451
+ const contractModule = await import(pathToFileURL(contractPath).href);
452
+ const contract = contractModule.contract ?? contractModule.default;
453
+ if (!contract) {
454
+ throw new Error('Contract not found. Ensure your contract.ts exports "contract" or uses a default export.');
455
+ }
456
+ const validationErrors = getContractValidationErrors(contract);
457
+ if (validationErrors.length > 0) {
458
+ const errorList = validationErrors.map((e) => ` - ${e}`).join('\n');
459
+ throw new Error(`Invalid contract structure:\n${errorList}`);
460
+ }
461
+ validateContractConsistency(contract);
462
+ log.success('Contract validated');
463
+ await copyStandardFiles(rootDir, bundleDir);
161
464
  if (userConfig.additionalFiles?.length) {
162
- await copyAdditionalFiles(rootDir, userConfig.additionalFiles, outDir);
465
+ await copyAdditionalFiles(rootDir, userConfig.additionalFiles, bundleDir);
163
466
  }
164
467
  const external = Array.isArray(userConfig.external) ? userConfig.external : [];
165
- await processPackageJson(rootDir, outDir, external, pluginLanguage);
166
- if (userConfig.mode === 'production') {
167
- await createBundleZip(outDir);
468
+ await processPackageJson({
469
+ rootDir,
470
+ outDir: bundleDir,
471
+ external,
472
+ pluginLanguage,
473
+ goTargets,
474
+ isDev: userConfig.mode === 'development',
475
+ });
476
+ if (userConfig.mode !== 'development') {
477
+ await createBundleZip(bundleDir);
168
478
  }
169
- logger.buildSuccess(outDir);
479
+ const duration = Date.now() - startTime;
480
+ log.buildSuccess(bundleDir, duration);
481
+ showOutro('Build complete!');
170
482
  }
171
483
  catch (error) {
172
- logger.buildError(error);
484
+ log.buildError(error);
173
485
  process.exit(1);
174
486
  }
175
487
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAMlF,MAAM,cAAc,GAAmB;IACrC;QACE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,eAAe;KACzB;IACD;QACE,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,mBAAmB;KAC7B;IACD;QACE,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,kBAAkB;KAC5B;IACD;QACE,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,cAAc;KACxB;IACD;QACE,MAAM,EAAE,kBAAkB;QAC1B,OAAO,EAAE,sBAAsB;QAC/B,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,MAAc;IAC9D,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEhD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,OAAe,EAAE,KAAsD,EAAE,MAAc;IACxH,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAAe,EAAE,MAAc,EAAE,QAA6B,EAAE,cAA8B;IAC9H,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAE1C,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACzD,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QACtE,WAAW,CAAC,IAAI,GAAG,UAAU,QAAQ,EAAE,CAAC;QAExC,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC;QAE9B,OAAO,WAAW,CAAC,eAAe,CAAC;QACnC,8BAA8B;QAE9B,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;YAC7B,MAAM,eAAe,GAA2B,EAAE,CAAC;YAEnD,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAS,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9E,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;wBAC5B,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;oBAClD,CAAC;oBACD,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;gBAEH,IAAI,kBAAkB,EAAE,CAAC;oBACvB,eAAe,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;gBACjC,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,WAAW,CAAC,YAAY,GAAG,eAAe,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,OAAO,WAAW,CAAC,YAAY,CAAC;YAClC,CAAC;QACH,CAAC;QAED,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAChC,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;QAExC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACnD,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,SAAiB;IAC9C,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAE1C,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QACvG,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC5B,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;QAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,uBAAuB,QAAQ,MAAM,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAqB;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACZ,OAAO;YACT,CAAC;YAED,IAAI,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzE,OAAO;YACT,CAAC;YAED,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,CAAC,UAAU,EAAE,CAAC;IAEpB,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IAE1D,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAO,CAAC,IAAK,EAAE,IAAI,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAChG,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,IAAI,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9E,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,IAAI,cAAc,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,YAAY,CAAC,aAAa,CAAC,CAAC;YAClC,MAAM,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzC,IAAI,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YACvC,MAAM,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAEpE,IAAI,UAAU,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACrC,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"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"}