@camera.ui/cli 0.0.49 → 0.0.51

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 +116 -0
  5. package/dist/commands/artifacts.js.map +1 -0
  6. package/dist/commands/bundle.d.ts +34 -1
  7. package/dist/commands/bundle.js +402 -57
  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 +95 -39
  12. package/dist/commands/publish.js.map +1 -1
  13. package/dist/index.js +13 -4
  14. package/dist/index.js.map +1 -1
  15. package/dist/types.d.ts +24 -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 -185
  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 +85 -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,91 @@ 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',
93
- 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',
100
- message: `Publishing ${name}@${targetVersion} (${tag}). Pick an action:`,
101
- choices: [
102
- { title: 'Publish', value: 'publish' },
103
- { title: 'Cancel', value: 'cancel' },
104
- ],
105
- }, { onCancel: () => process.exit(1) });
106
- if (action === 'cancel' || !action) {
107
- logger.info('Operation cancelled');
95
+ // Non-interactive mode (CI): publish exactly the version baked into
96
+ // bundle/package.json — no prompts. The version is the single source of
97
+ // truth (set by the release tag), so there's nothing to confirm.
98
+ const targetVersion = options.yes
99
+ ? version
100
+ : handleCancel(await text({
101
+ message: 'Version:',
102
+ placeholder: version,
103
+ defaultValue: version,
104
+ validate: (value) => {
105
+ if (!semver.valid(value)) {
106
+ return 'Invalid version format. Please use semver (e.g. 1.0.0)';
107
+ }
108
+ return undefined;
109
+ },
110
+ }));
111
+ if (!semver.valid(targetVersion)) {
112
+ log.error(`Invalid version in bundle/package.json: ${targetVersion}`);
108
113
  process.exit(1);
109
114
  }
115
+ // Validate version doesn't already exist
116
+ const versionValid = await validateVersion(name, targetVersion);
117
+ if (!versionValid) {
118
+ process.exit(1);
119
+ }
120
+ const action = options.yes
121
+ ? 'publish'
122
+ : handleCancel(await select({
123
+ message: `Publishing ${name}@${targetVersion} (${tag}). Pick an action:`,
124
+ options: [
125
+ { value: 'publish', label: 'Publish' },
126
+ { value: 'cancel', label: 'Cancel' },
127
+ ],
128
+ }));
129
+ if (action === 'cancel') {
130
+ showCancel('Operation cancelled');
131
+ process.exit(0);
132
+ }
110
133
  if (action === 'publish') {
111
134
  try {
112
- logger.info('Updating package version...');
135
+ log.info('Updating package version...');
113
136
  pJson.version = targetVersion;
137
+ // `--access public` is required for the first publish of a scoped
138
+ // package and harmless afterwards, so it's always passed. `--provenance`
139
+ // additionally emits an OIDC-signed provenance attestation (CI only).
140
+ const extraArgs = ['--access', 'public', ...(options.provenance ? ['--provenance'] : [])];
141
+ // Publish platform packages first
142
+ const platformsDir = resolve(process.cwd(), 'bundle', 'platforms');
143
+ if (existsSync(platformsDir)) {
144
+ const platformDirs = readdirSync(platformsDir, { withFileTypes: true })
145
+ .filter((d) => d.isDirectory())
146
+ .map((d) => d.name);
147
+ if (platformDirs.length > 0) {
148
+ log.info('Publishing platform packages...');
149
+ for (const dir of platformDirs) {
150
+ const platformDir = resolve(platformsDir, dir);
151
+ const platformPkgPath = resolve(platformDir, 'package.json');
152
+ const platformPkgContent = await readFile(platformPkgPath, 'utf-8');
153
+ const platformPkg = JSON.parse(platformPkgContent);
154
+ // Update version to match target version
155
+ platformPkg.version = targetVersion;
156
+ await writeFile(platformPkgPath, JSON.stringify(platformPkg, null, 2));
157
+ log.info(` Publishing ${platformPkg.name}@${targetVersion}...`);
158
+ process.env.SAFE_PUBLISH = 'true';
159
+ await spawnPromise('npm', ['publish', '--tag', tag, ...extraArgs], platformDir);
160
+ log.success(` Published ${platformPkg.name}@${targetVersion}`);
161
+ }
162
+ // Update optionalDependencies versions in main package
163
+ if (pJson.optionalDependencies) {
164
+ for (const dep of Object.keys(pJson.optionalDependencies)) {
165
+ pJson.optionalDependencies[dep] = targetVersion;
166
+ }
167
+ }
168
+ }
169
+ }
114
170
  await writeFile(pJsonPath, JSON.stringify(pJson, null, 2));
115
- logger.info('Publishing to npm...');
171
+ log.info('Publishing to npm...');
116
172
  process.env.SAFE_PUBLISH = 'true';
117
- const args = ['publish', '--tag', tag];
173
+ const args = ['publish', '--tag', tag, ...extraArgs];
118
174
  await spawnPromise('npm', args, resolve(process.cwd(), 'bundle'));
119
- logger.success(`Successfully published ${name}@${targetVersion}`);
175
+ showOutro(`Successfully published ${name}@${targetVersion}`);
120
176
  }
121
177
  catch (error) {
122
- logger.error('Failed to publish package');
123
- logger.error(error.message);
178
+ log.error('Failed to publish package');
179
+ log.error(error.message);
124
180
  process.exit(1);
125
181
  }
126
182
  }
@@ -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>')
@@ -26,6 +33,8 @@ program
26
33
  .option('-a, --alpha', 'Publish an alpha version')
27
34
  .option('-b, --beta', 'Publish a beta version')
28
35
  .option('-l, --latest', 'Publish a latest version')
36
+ .option('-y, --yes', 'Non-interactive: publish the version in bundle/package.json without prompts (CI)')
37
+ .option('--provenance', 'Publish with npm provenance (--provenance --access public); requires OIDC in CI')
29
38
  .action(async (options) => {
30
39
  await publishProject(options);
31
40
  });
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,WAAW,EAAE,kFAAkF,CAAC;KACvG,MAAM,CAAC,cAAc,EAAE,iFAAiF,CAAC;KACzG,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"}