@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,15 +1,47 @@
1
- import chalk from 'chalk';
1
+ import { SensorType } from '@camera.ui/sdk';
2
+ import { confirm, isCancel, multiselect, select, text } from '@clack/prompts';
2
3
  import { existsSync } from 'node:fs';
3
4
  import { rm, writeFile } from 'node:fs/promises';
4
5
  import { resolve } from 'node:path';
5
- import prompts from 'prompts';
6
- import { logger } from '../utils/logger.js';
6
+ import pc from 'picocolors';
7
+ import { showCancel, showIntro, showOutro } from '../utils/banners.js';
8
+ import * as log from '../utils/logger.js';
7
9
  import { isQualifiedPluginIdentifier, PLUGIN_IDENTIFIER, transformDisplaName } from '../utils/pluginName.js';
8
- import { createBaseFiles, createCodeQualityConfig, createMyPyConfig, createPackageJson, createPythonRequirements, createSourceFiles, createTsConfig, } from '../utils/templates.js';
10
+ import { createBaseFiles, createCodeQualityConfig, createContractFile, createGoFiles, createMyPyConfig, createPackageJson, createPythonRequirements, createSourceFiles, createTsConfig, } from '../utils/templates.js';
9
11
  import { ensureDir } from '../utils/utils.js';
12
+ /**
13
+ * Sensor options for the CLI prompts.
14
+ *
15
+ * Note: This list should stay in sync with the SDK's SensorType enum.
16
+ * When adding new sensor types to the SDK, update this list accordingly.
17
+ */
18
+ const SENSOR_OPTIONS = [
19
+ { value: SensorType.Motion, label: 'Motion Detection' },
20
+ { value: SensorType.Object, label: 'Object Detection' },
21
+ { value: SensorType.Audio, label: 'Audio Detection' },
22
+ { value: SensorType.Face, label: 'Face Detection' },
23
+ { value: SensorType.LicensePlate, label: 'License Plate' },
24
+ { value: SensorType.Contact, label: 'Contact Sensor' },
25
+ { value: SensorType.Classifier, label: 'Classifier' },
26
+ { value: SensorType.Light, label: 'Light Control' },
27
+ { value: SensorType.Siren, label: 'Siren Control' },
28
+ { value: SensorType.Switch, label: 'Switch Control' },
29
+ { value: SensorType.PTZ, label: 'PTZ Control' },
30
+ { value: SensorType.SecuritySystem, label: 'Security System' },
31
+ { value: SensorType.Doorbell, label: 'Doorbell' },
32
+ { value: SensorType.Battery, label: 'Battery' },
33
+ ];
34
+ function handleCancel(value) {
35
+ if (isCancel(value)) {
36
+ showCancel('Operation cancelled');
37
+ process.exit(0);
38
+ }
39
+ return value;
40
+ }
10
41
  export async function createProject(projectName) {
42
+ showIntro();
11
43
  if (!projectName) {
12
- logger.error('Project name is required');
44
+ log.error('Project name is required');
13
45
  process.exit(1);
14
46
  }
15
47
  if (!isQualifiedPluginIdentifier(projectName)) {
@@ -19,116 +51,131 @@ export async function createProject(projectName) {
19
51
  try {
20
52
  const exists = existsSync(targetDir);
21
53
  if (exists) {
22
- const { action } = await prompts({
23
- type: 'select',
24
- name: 'action',
54
+ const action = handleCancel(await select({
25
55
  message: `Target directory "${projectName}" already exists. Pick an action:`,
26
- choices: [
27
- { title: 'Overwrite', value: 'overwrite' },
28
- { title: 'Cancel', value: 'cancel' },
56
+ options: [
57
+ { value: 'overwrite', label: 'Overwrite' },
58
+ { value: 'cancel', label: 'Cancel' },
29
59
  ],
30
- });
31
- if (action === 'cancel' || !action) {
32
- logger.info('Operation cancelled');
33
- process.exit(1);
34
- }
35
- if (action === 'overwrite') {
36
- logger.info(`Removing existing directory: ${projectName}`);
37
- await rm(targetDir, { recursive: true, force: true });
60
+ }));
61
+ if (action === 'cancel') {
62
+ showCancel('Operation cancelled');
63
+ process.exit(0);
38
64
  }
65
+ log.info(`Removing existing directory: ${projectName}`);
66
+ await rm(targetDir, { recursive: true, force: true });
39
67
  }
40
68
  }
41
69
  catch (err) {
42
- logger.error(`Error checking directory: ${err.message}`);
70
+ log.error(`Error checking directory: ${err.message}`);
43
71
  process.exit(1);
44
72
  }
45
- const answers = await prompts([
46
- {
47
- type: 'text',
48
- name: 'displayName',
49
- message: 'Display name:',
50
- initial: transformDisplaName(projectName),
51
- },
52
- {
53
- type: 'select',
54
- name: 'language',
55
- message: 'Select programming language:',
56
- choices: [
57
- { title: 'JavaScript', value: 'javascript' },
58
- { title: 'TypeScript', value: 'typescript' },
59
- { title: 'Python', value: 'python' },
60
- ],
61
- },
62
- {
63
- type: (prev) => (prev === 'python' ? 'select' : null),
64
- name: 'pythonVersion',
73
+ const displayName = handleCancel(await text({
74
+ message: 'Display name:',
75
+ placeholder: transformDisplaName(projectName),
76
+ defaultValue: transformDisplaName(projectName),
77
+ }));
78
+ const language = handleCancel(await select({
79
+ message: 'Select programming language:',
80
+ options: [
81
+ { value: 'typescript', label: 'TypeScript', hint: 'recommended' },
82
+ { value: 'python', label: 'Python' },
83
+ { value: 'go', label: 'Go' },
84
+ ],
85
+ }));
86
+ let pythonVersion;
87
+ if (language === 'python') {
88
+ pythonVersion = handleCancel(await select({
65
89
  message: 'Select Python version:',
66
- choices: [
67
- { title: '3.10', value: '3.10' },
68
- { title: '3.11', value: '3.11' },
69
- { title: '3.12', value: '3.12' },
70
- ],
71
- onRender(kleur) {
72
- this.message = kleur.cyan('Select Python version:');
73
- },
74
- },
75
- {
76
- type: 'toggle',
77
- name: 'quality',
78
- message: (prev, values) => `Add ${values.language === 'python' ? 'ruff' : 'ESLint & Prettier'} for code quality?`,
79
- initial: true,
80
- },
81
- {
82
- type: 'multiselect',
83
- name: 'pluginType',
84
- message: 'Select plugin type(s):',
85
- choices: [
86
- { title: 'Hub', value: 'hub' },
87
- { title: 'Motion Detection', value: 'motionDetection' },
88
- { title: 'Object Detection', value: 'objectDetection' },
89
- { title: 'Audio Detection', value: 'audioDetection' },
90
- { title: 'PTZ', value: 'ptz' },
90
+ options: [
91
+ { value: '3.11', label: '3.11' },
92
+ { value: '3.12', label: '3.12' },
91
93
  ],
92
- },
93
- ], { onCancel: () => process.exit(1) });
94
- if (!answers.language) {
95
- logger.info('Operation cancelled');
96
- process.exit(1);
94
+ }));
95
+ }
96
+ const quality = language === 'go'
97
+ ? true
98
+ : handleCancel(await confirm({
99
+ message: `Add ${language === 'python' ? 'ruff' : 'ESLint & Prettier'} for code quality?`,
100
+ initialValue: true,
101
+ }));
102
+ // Plugin role determines which sensor type questions to ask
103
+ const role = handleCancel(await select({
104
+ message: "What is your plugin's role?",
105
+ options: [
106
+ { value: 'provider', label: 'Provider', hint: 'creates and controls sensors' },
107
+ { value: 'consumer', label: 'Consumer/Hub', hint: 'receives sensor data from other plugins' },
108
+ { value: 'both', label: 'Both', hint: 'provides sensors and consumes from others' },
109
+ ],
110
+ }));
111
+ let provides = [];
112
+ let consumes = [];
113
+ if (role === 'provider' || role === 'both') {
114
+ provides = handleCancel(await multiselect({
115
+ message: `Which sensor types will your plugin PROVIDE? ${pc.dim('(space to select)')}`,
116
+ options: SENSOR_OPTIONS,
117
+ required: false,
118
+ }));
97
119
  }
120
+ if (role === 'consumer' || role === 'both') {
121
+ consumes = handleCancel(await multiselect({
122
+ message: `Which sensor types will your plugin CONSUME? ${pc.dim('(space to select)')}`,
123
+ options: SENSOR_OPTIONS,
124
+ required: false,
125
+ }));
126
+ }
127
+ const options = {
128
+ displayName,
129
+ language,
130
+ pythonVersion,
131
+ quality,
132
+ role,
133
+ provides,
134
+ consumes,
135
+ };
98
136
  try {
99
137
  await ensureDir(targetDir);
100
- logger.success(`Created project directory: ${projectName}`);
101
- await createBaseFiles(targetDir, projectName, answers);
102
- logger.success('Created base files');
103
- const packageJson = await createPackageJson(projectName, answers);
138
+ log.success(`Created project directory: ${projectName}`);
139
+ await createBaseFiles(targetDir, projectName, options);
140
+ log.success('Created base files');
141
+ const packageJson = await createPackageJson(projectName, options);
104
142
  await writeFile(resolve(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2));
105
- logger.success('Created package.json');
106
- if (answers.language === 'python') {
143
+ log.success('Created package.json');
144
+ // Always create tsconfig.json (needed for contract.ts compilation)
145
+ await createTsConfig(targetDir, options);
146
+ log.success('Created tsconfig.json');
147
+ // Always create contract.ts at root level
148
+ await createContractFile(targetDir, options);
149
+ log.success('Created contract.ts');
150
+ if (options.language === 'python') {
107
151
  await createPythonRequirements(targetDir);
108
- logger.success('Created requirements.txt');
152
+ log.success('Created requirements.txt');
109
153
  await createMyPyConfig(targetDir);
110
- logger.success('Created mypy configuration');
154
+ log.success('Created mypy configuration');
155
+ }
156
+ if (options.language === 'go') {
157
+ await createGoFiles(targetDir, projectName);
158
+ log.success('Created Go files');
111
159
  }
112
- if (answers.language === 'typescript') {
113
- await createTsConfig(targetDir);
114
- logger.success('Created tsconfig.json');
160
+ if (options.quality) {
161
+ await createCodeQualityConfig(targetDir, options);
162
+ log.success('Created code quality configuration');
115
163
  }
116
- if (answers.quality) {
117
- await createCodeQualityConfig(targetDir, answers);
118
- logger.success('Created code quality configuration');
164
+ await createSourceFiles(targetDir, options);
165
+ log.success('Created source files');
166
+ const nextSteps = [`${pc.bold(pc.cyan(`cd ${projectName}`))}`, `${pc.bold(pc.cyan('npm install'))}`];
167
+ if (options.language === 'python') {
168
+ nextSteps.push(`${pc.bold(pc.cyan('pip install -r requirements.txt'))}`);
169
+ nextSteps.push(`${pc.bold(pc.cyan('pip install -r requirements.dev.txt'))}`);
119
170
  }
120
- await createSourceFiles(targetDir, answers);
121
- logger.buildSuccess(targetDir);
122
- console.log('\nNext steps:');
123
- console.log(chalk.cyan(` cd ${projectName}`));
124
- console.log(chalk.cyan(' npm install'));
125
- if (answers.language === 'python') {
126
- console.log(chalk.cyan(' pip install -r requirements.txt'));
127
- console.log(chalk.cyan(' pip install -r requirements.dev.txt'));
171
+ if (options.language === 'go') {
172
+ nextSteps.push(`${pc.bold(pc.cyan('cd src && go mod tidy'))}`);
128
173
  }
174
+ nextSteps.push(`${pc.bold(pc.cyan('npm run bundle'))}`);
175
+ showOutro(`${pc.green('Done!')} Next steps:\n\n ${nextSteps.join('\n ')}`);
129
176
  }
130
177
  catch (err) {
131
- logger.buildError(err);
178
+ log.buildError(err);
132
179
  process.exit(1);
133
180
  }
134
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -1,52 +1,56 @@
1
+ import { isCancel, select, text } from '@clack/prompts';
1
2
  import { exec, spawn } from 'node:child_process';
2
- import { readFileSync } from 'node:fs';
3
- import { writeFile } from 'node:fs/promises';
3
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
4
+ import { readFile, writeFile } from 'node:fs/promises';
4
5
  import { resolve } from 'node:path';
5
6
  import { promisify } from 'node:util';
6
- import prompts from 'prompts';
7
7
  import semver from 'semver';
8
- import { logger } from '../utils/logger.js';
8
+ import { showCancel, showIntro, showOutro } from '../utils/banners.js';
9
+ import * as log from '../utils/logger.js';
9
10
  const execAsync = promisify(exec);
11
+ function handleCancel(value) {
12
+ if (isCancel(value)) {
13
+ showCancel('Operation cancelled');
14
+ process.exit(0);
15
+ }
16
+ return value;
17
+ }
10
18
  function validateBundle() {
11
19
  try {
12
20
  const bundlePath = resolve(process.cwd(), 'bundle');
13
21
  const packagePath = resolve(bundlePath, 'package.json');
14
22
  const bundleZipPath = resolve(bundlePath, 'bundle.zip');
15
23
  try {
16
- const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
17
- if (!packageJson['camera.ui']?.bundled) {
18
- logger.error('Bundle not found. Please run "npm run bundle" first.');
19
- return false;
20
- }
24
+ readFileSync(packagePath);
21
25
  }
22
26
  catch {
23
- logger.error('package.json not found. Please run "npm run bundle" first.');
27
+ log.error('package.json not found in bundle. Please run "npm run bundle" first.');
24
28
  return false;
25
29
  }
26
30
  try {
27
31
  readFileSync(bundleZipPath);
28
32
  }
29
33
  catch {
30
- logger.error('bundle.zip not found. Please run "npm run bundle" first.');
34
+ log.error('bundle.zip not found. Please run "npm run bundle" first.');
31
35
  return false;
32
36
  }
33
37
  return true;
34
38
  }
35
39
  catch (error) {
36
- logger.error(`Validation failed: ${error.message}`);
40
+ log.error(`Validation failed: ${error.message}`);
37
41
  return false;
38
42
  }
39
43
  }
40
44
  async function validateVersion(name, version) {
41
45
  if (!semver.valid(version)) {
42
- logger.error('Invalid version format. Please use semver (e.g. 1.0.0)');
46
+ log.error('Invalid version format. Please use semver (e.g. 1.0.0)');
43
47
  return false;
44
48
  }
45
49
  try {
46
50
  const { stdout } = await execAsync(`npm view ${name} versions --json`);
47
51
  const versions = JSON.parse(stdout);
48
52
  if (versions.includes(version)) {
49
- logger.error(`Version ${version} already exists`);
53
+ log.error(`Version ${version} already exists`);
50
54
  return false;
51
55
  }
52
56
  return true;
@@ -76,8 +80,9 @@ async function spawnPromise(command, args, cwd) {
76
80
  });
77
81
  }
78
82
  export async function publishProject(options) {
83
+ showIntro();
79
84
  if (!options.alpha && !options.beta && !options.latest) {
80
- logger.error('Please specify a version to publish: --alpha, --beta, --latest');
85
+ log.error('Please specify a version to publish: --alpha, --beta, --latest');
81
86
  process.exit(1);
82
87
  }
83
88
  if (!validateBundle()) {
@@ -87,40 +92,76 @@ export async function publishProject(options) {
87
92
  const pJson = JSON.parse(readFileSync(pJsonPath, 'utf-8'));
88
93
  const { name, version } = pJson;
89
94
  const tag = options.alpha ? 'alpha' : options.beta ? 'beta' : options.latest ? 'latest' : 'latest';
90
- const { targetVersion } = await prompts({
91
- type: 'text',
92
- name: 'targetVersion',
95
+ const targetVersion = handleCancel(await text({
93
96
  message: 'Version:',
94
- initial: version,
95
- validate: async (value) => (await validateVersion(name, value)) || 'Invalid version',
96
- }, { onCancel: () => process.exit(1) });
97
- const { action } = await prompts({
98
- type: 'select',
99
- name: 'action',
97
+ placeholder: version,
98
+ defaultValue: version,
99
+ validate: (value) => {
100
+ if (!semver.valid(value)) {
101
+ return 'Invalid version format. Please use semver (e.g. 1.0.0)';
102
+ }
103
+ return undefined;
104
+ },
105
+ }));
106
+ // Validate version doesn't already exist
107
+ const versionValid = await validateVersion(name, targetVersion);
108
+ if (!versionValid) {
109
+ process.exit(1);
110
+ }
111
+ const action = handleCancel(await select({
100
112
  message: `Publishing ${name}@${targetVersion} (${tag}). Pick an action:`,
101
- choices: [
102
- { title: 'Publish', value: 'publish' },
103
- { title: 'Cancel', value: 'cancel' },
113
+ options: [
114
+ { value: 'publish', label: 'Publish' },
115
+ { value: 'cancel', label: 'Cancel' },
104
116
  ],
105
- }, { onCancel: () => process.exit(1) });
106
- if (action === 'cancel' || !action) {
107
- logger.info('Operation cancelled');
108
- process.exit(1);
117
+ }));
118
+ if (action === 'cancel') {
119
+ showCancel('Operation cancelled');
120
+ process.exit(0);
109
121
  }
110
122
  if (action === 'publish') {
111
123
  try {
112
- logger.info('Updating package version...');
124
+ log.info('Updating package version...');
113
125
  pJson.version = targetVersion;
126
+ // Publish platform packages first
127
+ const platformsDir = resolve(process.cwd(), 'bundle', 'platforms');
128
+ if (existsSync(platformsDir)) {
129
+ const platformDirs = readdirSync(platformsDir, { withFileTypes: true })
130
+ .filter((d) => d.isDirectory())
131
+ .map((d) => d.name);
132
+ if (platformDirs.length > 0) {
133
+ log.info('Publishing platform packages...');
134
+ for (const dir of platformDirs) {
135
+ const platformDir = resolve(platformsDir, dir);
136
+ const platformPkgPath = resolve(platformDir, 'package.json');
137
+ const platformPkgContent = await readFile(platformPkgPath, 'utf-8');
138
+ const platformPkg = JSON.parse(platformPkgContent);
139
+ // Update version to match target version
140
+ platformPkg.version = targetVersion;
141
+ await writeFile(platformPkgPath, JSON.stringify(platformPkg, null, 2));
142
+ log.info(` Publishing ${platformPkg.name}@${targetVersion}...`);
143
+ process.env.SAFE_PUBLISH = 'true';
144
+ await spawnPromise('npm', ['publish', '--tag', tag], platformDir);
145
+ log.success(` Published ${platformPkg.name}@${targetVersion}`);
146
+ }
147
+ // Update optionalDependencies versions in main package
148
+ if (pJson.optionalDependencies) {
149
+ for (const dep of Object.keys(pJson.optionalDependencies)) {
150
+ pJson.optionalDependencies[dep] = targetVersion;
151
+ }
152
+ }
153
+ }
154
+ }
114
155
  await writeFile(pJsonPath, JSON.stringify(pJson, null, 2));
115
- logger.info('Publishing to npm...');
156
+ log.info('Publishing to npm...');
116
157
  process.env.SAFE_PUBLISH = 'true';
117
158
  const args = ['publish', '--tag', tag];
118
159
  await spawnPromise('npm', args, resolve(process.cwd(), 'bundle'));
119
- logger.success(`Successfully published ${name}@${targetVersion}`);
160
+ showOutro(`Successfully published ${name}@${targetVersion}`);
120
161
  }
121
162
  catch (error) {
122
- logger.error('Failed to publish package');
123
- logger.error(error.message);
163
+ log.error('Failed to publish package');
164
+ log.error(error.message);
124
165
  process.exit(1);
125
166
  }
126
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,18 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
+ import { artifactsCommand } from './commands/artifacts.js';
3
4
  import { buildProject } from './commands/bundle.js';
4
5
  import { createProject } from './commands/create.js';
5
6
  import { publishProject } from './commands/publish.js';
6
- import { initBanner } from './utils/banners.js';
7
7
  import pJson from './utils/pjson.js';
8
8
  const program = new Command();
9
- initBanner();
10
9
  program.name('cui').version(pJson.version);
11
10
  program
12
11
  .command('bundle')
13
12
  .description('Bundle the project')
14
- .action(async () => {
15
- await buildProject();
13
+ .option('-t, --target <goos-goarch>', 'Restrict the Go build to a single target (e.g. linux-amd64) used by CI matrix jobs')
14
+ .action(async (options) => {
15
+ await buildProject({ target: options.target });
16
+ });
17
+ program
18
+ .command('artifacts')
19
+ .description('Aggregate per-platform binaries downloaded from CI matrix jobs into a publish-ready bundle (Go plugins only)')
20
+ .option('-d, --dir <path>', 'Directory containing downloaded artifacts (default: ./artifacts)')
21
+ .action(async (options) => {
22
+ await artifactsCommand({ dir: options.dir });
16
23
  });
17
24
  program
18
25
  .command('create <project-name>')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAErC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,UAAU,EAAE,CAAC;AAEb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAE3C,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,YAAY,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;KAClD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAErC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAE3C,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,4BAA4B,EAAE,sFAAsF,CAAC;KAC5H,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;IAC7C,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,8GAA8G,CAAC;KAC3H,MAAM,CAAC,kBAAkB,EAAE,kEAAkE,CAAC;KAC9F,MAAM,CAAC,KAAK,EAAE,OAAyB,EAAE,EAAE;IAC1C,MAAM,gBAAgB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;KAClD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,9 +1,21 @@
1
- import type { CameraExtension, PythonVersion } from '@camera.ui/types';
2
- import type { Configuration } from 'webpack';
3
- export type PluginLanguage = 'python' | 'typescript' | 'javascript';
1
+ import type { PythonVersion, SensorType } from '@camera.ui/sdk';
2
+ export type PluginLanguage = 'python' | 'typescript' | 'go';
3
+ export interface GoTarget {
4
+ goos: 'linux' | 'darwin' | 'windows';
5
+ goarch: 'amd64' | 'arm64';
6
+ cgoEnabled?: '0' | '1';
7
+ cc?: string;
8
+ ldflags?: string;
9
+ }
10
+ export interface GoBuildOptions {
11
+ targets?: GoTarget[];
12
+ ldflags?: string;
13
+ cgoEnabled?: '0' | '1';
14
+ env?: Record<string, string>;
15
+ }
4
16
  export interface CameraUiBuildOptions {
5
17
  rootDir?: string;
6
- input?: Configuration['entry'];
18
+ input?: string | string[];
7
19
  mode?: 'development' | 'production';
8
20
  additionalFiles?: string[] | {
9
21
  source: string;
@@ -11,13 +23,17 @@ export interface CameraUiBuildOptions {
11
23
  }[];
12
24
  external?: (string | RegExp)[];
13
25
  language?: PluginLanguage;
26
+ go?: GoBuildOptions;
14
27
  }
28
+ export type PluginRole = 'provider' | 'consumer' | 'both';
15
29
  export interface CreateOptions {
16
30
  displayName: string;
17
31
  language: PluginLanguage;
18
32
  pythonVersion?: PythonVersion;
19
33
  quality: boolean;
20
- pluginType: CameraExtension[];
34
+ role: PluginRole;
35
+ provides: SensorType[];
36
+ consumes: SensorType[];
21
37
  }
22
38
  export interface PublishOptions {
23
39
  alpha?: boolean;
@@ -1,2 +1,4 @@
1
- export declare function initBanner(): void;
1
+ export declare function showIntro(): void;
2
+ export declare function showOutro(message: string): void;
3
+ export declare function showCancel(message?: string): void;
2
4
  export declare function getBanner(): string;