@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
package/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023-2024 seydx <dev@seydx.com>
3
+ Copyright (c) 2023-2026 seydx <hi@seydx.dev>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
package/README.md CHANGED
@@ -1 +1,10 @@
1
- # @camera.ui/cli
1
+ # @camera.ui/cli
2
+
3
+ [![npm](https://img.shields.io/npm/v/@camera.ui/cli?label=npm&logo=npm)](https://www.npmjs.com/package/@camera.ui/cli)
4
+ [![License](https://img.shields.io/github/license/cameraui/cli)](LICENSE.md)
5
+
6
+ The camera.ui CLI — scaffold, build and publish camera.ui plugins.
7
+
8
+ ---
9
+
10
+ *Part of the camera.ui ecosystem - A comprehensive camera management solution.*
@@ -0,0 +1,9 @@
1
+ export interface ArtifactsOptions {
2
+ dir?: string;
3
+ }
4
+ export interface DiscoveredBinary {
5
+ goos: string;
6
+ goarch: string;
7
+ sourcePath: string;
8
+ }
9
+ export declare function artifactsCommand(options?: ArtifactsOptions): Promise<void>;
@@ -0,0 +1,107 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { mkdir, readdir, readFile, rename } from 'node:fs/promises';
3
+ import { dirname, resolve } from 'node:path';
4
+ import { showIntro, showOutro } from '../utils/banners.js';
5
+ import * as log from '../utils/logger.js';
6
+ import { parseConfig } from '../utils/parser.js';
7
+ import { detectLanguage, ensureDir } from '../utils/utils.js';
8
+ async function discoverBinaries(artifactsDir, pluginName, knownTargets) {
9
+ const found = [];
10
+ const targetSet = new Set(knownTargets.map((t) => `${t.goos}-${t.goarch}`));
11
+ async function walk(dir) {
12
+ const entries = await readdir(dir, { withFileTypes: true });
13
+ for (const entry of entries) {
14
+ const fullPath = resolve(dir, entry.name);
15
+ if (entry.isDirectory()) {
16
+ await walk(fullPath);
17
+ continue;
18
+ }
19
+ // Match `<pluginName>-<goos>-<goarch>` or `<pluginName>-<goos>-<goarch>.exe`
20
+ const stripped = entry.name.endsWith('.exe') ? entry.name.slice(0, -4) : entry.name;
21
+ const prefix = `${pluginName}-`;
22
+ if (!stripped.startsWith(prefix))
23
+ continue;
24
+ const rest = stripped.slice(prefix.length); // "<goos>-<goarch>"
25
+ if (!targetSet.has(rest))
26
+ continue;
27
+ const dashIdx = rest.lastIndexOf('-');
28
+ const goos = rest.slice(0, dashIdx);
29
+ const goarch = rest.slice(dashIdx + 1);
30
+ found.push({ goos, goarch, sourcePath: fullPath });
31
+ }
32
+ }
33
+ if (!existsSync(artifactsDir)) {
34
+ throw new Error(`Artifacts directory not found: ${artifactsDir}`);
35
+ }
36
+ await walk(artifactsDir);
37
+ return found;
38
+ }
39
+ export async function artifactsCommand(options = {}) {
40
+ const startTime = Date.now();
41
+ showIntro();
42
+ const artifactsDir = resolve(process.cwd(), options.dir ?? 'artifacts');
43
+ log.info(`Aggregating artifacts from: ${artifactsDir}`);
44
+ const { userConfig, targetRootDir } = await parseConfig();
45
+ const rootDir = userConfig.rootDir ? resolve(process.cwd(), userConfig.rootDir) : process.cwd();
46
+ const pluginLanguage = userConfig.language ?? (await detectLanguage(rootDir));
47
+ if (pluginLanguage !== 'go') {
48
+ throw new Error(`'artifacts' command is only supported for Go plugins (detected: ${pluginLanguage})`);
49
+ }
50
+ const packageJsonPath = resolve(rootDir, 'package.json');
51
+ const packageJsonContent = await readFile(packageJsonPath, 'utf-8');
52
+ const packageJson = JSON.parse(packageJsonContent);
53
+ if (!packageJson.name) {
54
+ throw new Error('package.json is missing required "name" field.');
55
+ }
56
+ const pluginName = packageJson.name.replace(/^@[^/]+\//, '');
57
+ const packageScope = packageJson.name.includes('/') ? packageJson.name.split('/')[0] : undefined;
58
+ // The plugin's configured targets are the source of truth for which
59
+ // platforms it ships. If a binary for an unconfigured target shows up in
60
+ // the artifacts dir, it's silently skipped (operator error or stale CI run).
61
+ const goOpts = userConfig.go;
62
+ const knownTargets = goOpts?.targets ?? [];
63
+ if (knownTargets.length === 0) {
64
+ throw new Error("No `go.targets` configured in cameraui.config.ts — can't determine which artifacts to consume.");
65
+ }
66
+ const discovered = await discoverBinaries(artifactsDir, pluginName, knownTargets);
67
+ if (discovered.length === 0) {
68
+ throw new Error(`No matching binaries found in ${artifactsDir} (looking for "${pluginName}-<goos>-<goarch>[.exe]")`);
69
+ }
70
+ log.info(`Found ${discovered.length}/${knownTargets.length} target binaries:`);
71
+ for (const b of discovered) {
72
+ log.info(` ${b.goos}-${b.goarch}`);
73
+ }
74
+ const missingTargets = knownTargets.filter((t) => !discovered.some((d) => d.goos === t.goos && d.goarch === t.goarch));
75
+ if (missingTargets.length > 0) {
76
+ log.error(` Missing: ${missingTargets.map((t) => `${t.goos}-${t.goarch}`).join(', ')}`);
77
+ throw new Error('Some target binaries are missing — refusing to ship a partial bundle.');
78
+ }
79
+ // Stage binaries into bundle/dist/bin/ with the canonical naming convention
80
+ // `<pluginName>-<goos>-<goarch>[.exe]`, then hand off to the same staging
81
+ // routine that the multi-target build uses.
82
+ const bundleDir = resolve(targetRootDir, 'bundle');
83
+ const binDir = resolve(bundleDir, 'dist', 'bin');
84
+ await ensureDir(binDir);
85
+ for (const b of discovered) {
86
+ const ext = b.goos === 'windows' ? '.exe' : '';
87
+ const targetPath = resolve(binDir, `${pluginName}-${b.goos}-${b.goarch}${ext}`);
88
+ await mkdir(dirname(targetPath), { recursive: true });
89
+ await rename(b.sourcePath, targetPath);
90
+ }
91
+ // Late import of staging helper avoids a top-level require cycle between
92
+ // bundle.ts and artifacts.ts.
93
+ const { stagePlatformPackages } = await import('./bundle.js');
94
+ await stagePlatformPackages({
95
+ targets: knownTargets,
96
+ binDir,
97
+ bundleDir,
98
+ pluginName,
99
+ packageScope,
100
+ packageJson,
101
+ rootDir,
102
+ });
103
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
104
+ log.success(`Artifacts aggregated in ${elapsed}s — bundle/ is ready to publish`);
105
+ showOutro('Done');
106
+ }
107
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/commands/artifacts.ts"],"names":[],"mappings":"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"}
@@ -1 +1,19 @@
1
- export declare function buildProject(): Promise<void>;
1
+ import type { GoTarget } from '../types.js';
2
+ export interface StagePlatformPackagesArgs {
3
+ targets: GoTarget[];
4
+ binDir: string;
5
+ bundleDir: string;
6
+ pluginName: string;
7
+ packageScope?: string;
8
+ packageJson: {
9
+ version?: string;
10
+ license?: string;
11
+ [key: string]: unknown;
12
+ };
13
+ rootDir: string;
14
+ }
15
+ export declare function stagePlatformPackages(args: StagePlatformPackagesArgs): Promise<void>;
16
+ export interface BuildOptions {
17
+ target?: string;
18
+ }
19
+ export declare function buildProject(options?: BuildOptions): Promise<void>;