@launch77/cli 1.3.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/cli.js +6 -3
- package/dist/cli.js.map +1 -1
- package/dist/infrastructure/template-generator.d.ts +1 -1
- package/dist/infrastructure/template-generator.d.ts.map +1 -1
- package/dist/infrastructure/template.d.ts +5 -0
- package/dist/infrastructure/template.d.ts.map +1 -1
- package/dist/infrastructure/template.js +11 -0
- package/dist/infrastructure/template.js.map +1 -1
- package/dist/modules/app/commands/create-app.js +1 -1
- package/dist/modules/app/commands/create-app.js.map +1 -1
- package/dist/modules/app/commands/delete-app.js +1 -1
- package/dist/modules/app/commands/delete-app.js.map +1 -1
- package/dist/modules/app/services/app-svc.d.ts +1 -1
- package/dist/modules/app/services/app-svc.d.ts.map +1 -1
- package/dist/modules/app/services/manifest-svc.d.ts +1 -1
- package/dist/modules/app/services/manifest-svc.d.ts.map +1 -1
- package/dist/modules/catalog/config/catalog-config.test.js +1 -1
- package/dist/modules/catalog/config/catalog-config.test.js.map +1 -1
- package/dist/modules/git/commands/git-connect.js +2 -2
- package/dist/modules/git/commands/git-connect.js.map +1 -1
- package/dist/modules/git/errors/git-errors.d.ts +3 -0
- package/dist/modules/git/errors/git-errors.d.ts.map +1 -1
- package/dist/modules/git/errors/git-errors.js +6 -0
- package/dist/modules/git/errors/git-errors.js.map +1 -1
- package/dist/modules/git/index.d.ts +3 -1
- package/dist/modules/git/index.d.ts.map +1 -1
- package/dist/modules/git/index.js +6 -1
- package/dist/modules/git/index.js.map +1 -1
- package/dist/modules/git/services/git-service.d.ts +5 -0
- package/dist/modules/git/services/git-service.d.ts.map +1 -1
- package/dist/modules/git/services/git-service.js +11 -1
- package/dist/modules/git/services/git-service.js.map +1 -1
- package/dist/modules/plugin/commands/plugin-create.d.ts +3 -0
- package/dist/modules/plugin/commands/plugin-create.d.ts.map +1 -0
- package/dist/modules/plugin/commands/plugin-create.js +59 -0
- package/dist/modules/plugin/commands/plugin-create.js.map +1 -0
- package/dist/modules/plugin/commands/plugin-install.d.ts.map +1 -1
- package/dist/modules/plugin/commands/plugin-install.js +9 -24
- package/dist/modules/plugin/commands/plugin-install.js.map +1 -1
- package/dist/modules/plugin/errors/plugin-errors.d.ts +24 -1
- package/dist/modules/plugin/errors/plugin-errors.d.ts.map +1 -1
- package/dist/modules/plugin/errors/plugin-errors.js +79 -6
- package/dist/modules/plugin/errors/plugin-errors.js.map +1 -1
- package/dist/modules/plugin/index.d.ts +4 -2
- package/dist/modules/plugin/index.d.ts.map +1 -1
- package/dist/modules/plugin/index.js +4 -2
- package/dist/modules/plugin/index.js.map +1 -1
- package/dist/modules/plugin/lib/plugin-registry.d.ts +6 -12
- package/dist/modules/plugin/lib/plugin-registry.d.ts.map +1 -1
- package/dist/modules/plugin/lib/plugin-registry.js +13 -30
- package/dist/modules/plugin/lib/plugin-registry.js.map +1 -1
- package/dist/modules/plugin/lib/plugin-resolver.d.ts +76 -0
- package/dist/modules/plugin/lib/plugin-resolver.d.ts.map +1 -0
- package/dist/modules/plugin/lib/plugin-resolver.js +128 -0
- package/dist/modules/plugin/lib/plugin-resolver.js.map +1 -0
- package/dist/modules/plugin/lib/plugin-resolver.test.d.ts +2 -0
- package/dist/modules/plugin/lib/plugin-resolver.test.d.ts.map +1 -0
- package/dist/modules/plugin/lib/plugin-resolver.test.js +175 -0
- package/dist/modules/plugin/lib/plugin-resolver.test.js.map +1 -0
- package/dist/modules/plugin/services/plugin-create-service.d.ts +16 -0
- package/dist/modules/plugin/services/plugin-create-service.d.ts.map +1 -0
- package/dist/modules/plugin/services/plugin-create-service.js +47 -0
- package/dist/modules/plugin/services/plugin-create-service.js.map +1 -0
- package/dist/modules/plugin/services/plugin-svc.d.ts +29 -3
- package/dist/modules/plugin/services/plugin-svc.d.ts.map +1 -1
- package/dist/modules/plugin/services/plugin-svc.js +192 -17
- package/dist/modules/plugin/services/plugin-svc.js.map +1 -1
- package/dist/modules/plugin/services/plugin-svc.test.d.ts +2 -0
- package/dist/modules/plugin/services/plugin-svc.test.d.ts.map +1 -0
- package/dist/modules/plugin/services/plugin-svc.test.js +362 -0
- package/dist/modules/plugin/services/plugin-svc.test.js.map +1 -0
- package/dist/modules/release/commands/release-init.d.ts +3 -0
- package/dist/modules/release/commands/release-init.d.ts.map +1 -0
- package/dist/modules/release/commands/release-init.js +92 -0
- package/dist/modules/release/commands/release-init.js.map +1 -0
- package/dist/modules/release/errors/release-errors.d.ts +7 -0
- package/dist/modules/release/errors/release-errors.d.ts.map +1 -0
- package/dist/modules/release/errors/release-errors.js +13 -0
- package/dist/modules/release/errors/release-errors.js.map +1 -0
- package/dist/modules/release/index.d.ts +4 -0
- package/dist/modules/release/index.d.ts.map +1 -0
- package/dist/modules/release/index.js +7 -0
- package/dist/modules/release/index.js.map +1 -0
- package/dist/modules/release/services/release-service.d.ts +34 -0
- package/dist/modules/release/services/release-service.d.ts.map +1 -0
- package/dist/modules/release/services/release-service.js +154 -0
- package/dist/modules/release/services/release-service.js.map +1 -0
- package/dist/templates/plugin/README.md.hbs +39 -0
- package/dist/templates/plugin/package.json.hbs +34 -0
- package/dist/templates/plugin/plugin.json.hbs +7 -0
- package/dist/templates/plugin/src/generator.ts.hbs +64 -0
- package/dist/templates/plugin/templates/src/.gitkeep +0 -0
- package/dist/templates/plugin/tsconfig.json +10 -0
- package/dist/templates/plugin/tsup.config.ts +9 -0
- package/dist/templates/workspace/.github/workflows/ci.yml +8 -5
- package/dist/templates/workspace/package.json +3 -1
- package/dist/templates/workspace/turbo.json +5 -0
- package/dist/utils/launch77-context.d.ts +1 -1
- package/dist/utils/launch77-context.d.ts.map +1 -1
- package/dist/utils/launch77-context.js +25 -2
- package/dist/utils/launch77-context.js.map +1 -1
- package/dist/utils/launch77-validation.d.ts +1 -1
- package/dist/utils/launch77-validation.d.ts.map +1 -1
- package/dist/utils/string.d.ts +13 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +18 -0
- package/dist/utils/string.js.map +1 -0
- package/package.json +6 -9
- package/src/cli.ts +7 -3
- package/src/infrastructure/template-generator.ts +1 -1
- package/src/infrastructure/template.ts +14 -0
- package/src/modules/app/commands/create-app.ts +1 -1
- package/src/modules/app/commands/delete-app.ts +1 -1
- package/src/modules/app/services/app-svc.ts +1 -1
- package/src/modules/app/services/manifest-svc.ts +1 -1
- package/src/modules/catalog/config/catalog-config.test.ts +1 -1
- package/src/modules/git/commands/git-connect.ts +2 -2
- package/src/modules/git/errors/git-errors.ts +7 -0
- package/src/modules/git/index.ts +8 -1
- package/src/modules/git/services/git-service.ts +12 -1
- package/src/modules/plugin/commands/plugin-create.ts +68 -0
- package/src/modules/plugin/commands/plugin-install.ts +9 -26
- package/src/modules/plugin/errors/plugin-errors.ts +87 -6
- package/src/modules/plugin/index.ts +4 -2
- package/src/modules/plugin/lib/plugin-registry.ts +14 -37
- package/src/modules/plugin/lib/plugin-resolver.test.ts +215 -0
- package/src/modules/plugin/lib/plugin-resolver.ts +160 -0
- package/src/modules/plugin/services/plugin-create-service.ts +69 -0
- package/src/modules/plugin/services/plugin-svc.test.ts +418 -0
- package/src/modules/plugin/services/plugin-svc.ts +217 -17
- package/src/modules/release/commands/release-init.ts +102 -0
- package/src/modules/release/errors/release-errors.ts +13 -0
- package/src/modules/release/index.ts +8 -0
- package/src/modules/release/services/release-service.ts +170 -0
- package/src/utils/launch77-context.ts +29 -3
- package/src/utils/launch77-validation.ts +1 -1
- package/src/utils/string.ts +17 -0
- package/templates/plugin/README.md.hbs +39 -0
- package/templates/plugin/package.json.hbs +34 -0
- package/templates/plugin/plugin.json.hbs +7 -0
- package/templates/plugin/src/generator.ts.hbs +64 -0
- package/templates/plugin/templates/src/.gitkeep +0 -0
- package/templates/plugin/tsconfig.json +10 -0
- package/templates/plugin/tsup.config.ts +9 -0
- package/templates/workspace/.github/workflows/ci.yml +8 -5
- package/templates/workspace/package.json +3 -1
- package/templates/workspace/turbo.json +5 -0
- package/tests/integration/cli.test.ts +25 -0
- package/tests/integration/setup.ts +20 -0
- package/vitest.config.ts +9 -0
- package/vitest.integration.config.ts +9 -0
- package/dist/modules/git/commands/git-setup-releases.d.ts +0 -3
- package/dist/modules/git/commands/git-setup-releases.d.ts.map +0 -1
- package/dist/modules/git/commands/git-setup-releases.js +0 -128
- package/dist/modules/git/commands/git-setup-releases.js.map +0 -1
- package/launch77-cli-1.2.0.tgz +0 -0
- package/src/modules/git/commands/git-setup-releases.ts +0 -148
- package/src/modules/plugin/lib/launch77-workspace.code-workspace +0 -14
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import { describe, test, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as os from 'os';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
|
+
import { PluginService } from './plugin-svc.js';
|
|
6
|
+
describe('PluginService', () => {
|
|
7
|
+
let tempDir;
|
|
8
|
+
let service;
|
|
9
|
+
beforeEach(async () => {
|
|
10
|
+
tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'plugin-svc-test-'));
|
|
11
|
+
service = new PluginService();
|
|
12
|
+
});
|
|
13
|
+
afterEach(async () => {
|
|
14
|
+
await fs.remove(tempDir);
|
|
15
|
+
});
|
|
16
|
+
describe('validateContext', () => {
|
|
17
|
+
// Valid contexts - test return values
|
|
18
|
+
test('should return "app" for workspace-app location', () => {
|
|
19
|
+
const context = {
|
|
20
|
+
isValid: true,
|
|
21
|
+
locationType: 'workspace-app',
|
|
22
|
+
workspaceRoot: tempDir,
|
|
23
|
+
workspaceName: 'test-workspace',
|
|
24
|
+
workspaceVersion: '1.0.0',
|
|
25
|
+
appsDir: path.join(tempDir, 'apps'),
|
|
26
|
+
packageName: 'test-app',
|
|
27
|
+
appName: 'test-app',
|
|
28
|
+
};
|
|
29
|
+
const result = service.validateContext(context);
|
|
30
|
+
expect(result).toBe('app');
|
|
31
|
+
});
|
|
32
|
+
test('should return "library" for workspace-library location', () => {
|
|
33
|
+
const context = {
|
|
34
|
+
isValid: true,
|
|
35
|
+
locationType: 'workspace-library',
|
|
36
|
+
workspaceRoot: tempDir,
|
|
37
|
+
workspaceName: 'test-workspace',
|
|
38
|
+
workspaceVersion: '1.0.0',
|
|
39
|
+
appsDir: path.join(tempDir, 'apps'),
|
|
40
|
+
packageName: 'test-library',
|
|
41
|
+
appName: 'test-library',
|
|
42
|
+
};
|
|
43
|
+
const result = service.validateContext(context);
|
|
44
|
+
expect(result).toBe('library');
|
|
45
|
+
});
|
|
46
|
+
test('should return "plugin" for workspace-plugin location', () => {
|
|
47
|
+
const context = {
|
|
48
|
+
isValid: true,
|
|
49
|
+
locationType: 'workspace-plugin',
|
|
50
|
+
workspaceRoot: tempDir,
|
|
51
|
+
workspaceName: 'test-workspace',
|
|
52
|
+
workspaceVersion: '1.0.0',
|
|
53
|
+
appsDir: path.join(tempDir, 'apps'),
|
|
54
|
+
packageName: 'test-plugin',
|
|
55
|
+
appName: 'test-plugin',
|
|
56
|
+
};
|
|
57
|
+
const result = service.validateContext(context);
|
|
58
|
+
expect(result).toBe('plugin');
|
|
59
|
+
});
|
|
60
|
+
test('should return "app-template" for workspace-app-template location', () => {
|
|
61
|
+
const context = {
|
|
62
|
+
isValid: true,
|
|
63
|
+
locationType: 'workspace-app-template',
|
|
64
|
+
workspaceRoot: tempDir,
|
|
65
|
+
workspaceName: 'test-workspace',
|
|
66
|
+
workspaceVersion: '1.0.0',
|
|
67
|
+
appsDir: path.join(tempDir, 'apps'),
|
|
68
|
+
packageName: 'test-template',
|
|
69
|
+
appName: 'test-template',
|
|
70
|
+
};
|
|
71
|
+
const result = service.validateContext(context);
|
|
72
|
+
expect(result).toBe('app-template');
|
|
73
|
+
});
|
|
74
|
+
// Invalid contexts - test exact error messages
|
|
75
|
+
test('should throw InvalidPluginContextError for workspace-root', () => {
|
|
76
|
+
const context = {
|
|
77
|
+
isValid: true,
|
|
78
|
+
locationType: 'workspace-root',
|
|
79
|
+
workspaceRoot: tempDir,
|
|
80
|
+
workspaceName: 'test-workspace',
|
|
81
|
+
workspaceVersion: '1.0.0',
|
|
82
|
+
appsDir: path.join(tempDir, 'apps'),
|
|
83
|
+
packageName: 'workspace',
|
|
84
|
+
appName: undefined,
|
|
85
|
+
};
|
|
86
|
+
expect(() => service.validateContext(context)).toThrow('plugin:install must be run from within a package directory.');
|
|
87
|
+
});
|
|
88
|
+
test('should throw InvalidPluginContextError for non-workspace', () => {
|
|
89
|
+
const context = {
|
|
90
|
+
isValid: false,
|
|
91
|
+
locationType: 'non-workspace',
|
|
92
|
+
workspaceRoot: tempDir,
|
|
93
|
+
workspaceName: 'test-workspace',
|
|
94
|
+
workspaceVersion: '1.0.0',
|
|
95
|
+
appsDir: path.join(tempDir, 'apps'),
|
|
96
|
+
packageName: 'unknown',
|
|
97
|
+
appName: undefined,
|
|
98
|
+
};
|
|
99
|
+
expect(() => service.validateContext(context)).toThrow('plugin:install must be run from within a package directory.');
|
|
100
|
+
});
|
|
101
|
+
test('should throw InvalidPluginContextError when appName is missing', () => {
|
|
102
|
+
const context = {
|
|
103
|
+
isValid: true,
|
|
104
|
+
locationType: 'workspace-app',
|
|
105
|
+
workspaceRoot: tempDir,
|
|
106
|
+
workspaceName: 'test-workspace',
|
|
107
|
+
workspaceVersion: '1.0.0',
|
|
108
|
+
appsDir: path.join(tempDir, 'apps'),
|
|
109
|
+
packageName: 'test-app',
|
|
110
|
+
appName: undefined,
|
|
111
|
+
};
|
|
112
|
+
expect(() => service.validateContext(context)).toThrow('Could not determine package name. This is a bug. Please report it.');
|
|
113
|
+
});
|
|
114
|
+
test('should throw InvalidPluginContextError when appName is empty string', () => {
|
|
115
|
+
const context = {
|
|
116
|
+
isValid: true,
|
|
117
|
+
locationType: 'workspace-app',
|
|
118
|
+
workspaceRoot: tempDir,
|
|
119
|
+
workspaceName: 'test-workspace',
|
|
120
|
+
workspaceVersion: '1.0.0',
|
|
121
|
+
appsDir: path.join(tempDir, 'apps'),
|
|
122
|
+
packageName: 'test-app',
|
|
123
|
+
appName: '',
|
|
124
|
+
};
|
|
125
|
+
expect(() => service.validateContext(context)).toThrow('Could not determine package name. This is a bug. Please report it.');
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe('validatePluginTargets', () => {
|
|
129
|
+
// Valid scenarios - verify metadata returned
|
|
130
|
+
test('should return metadata when plugin targets current package type', async () => {
|
|
131
|
+
const pluginDir = path.join(tempDir, 'test-plugin');
|
|
132
|
+
await fs.ensureDir(pluginDir);
|
|
133
|
+
await fs.writeJson(path.join(pluginDir, 'plugin.json'), {
|
|
134
|
+
name: 'test-plugin',
|
|
135
|
+
version: '1.0.0',
|
|
136
|
+
targets: ['app', 'library'],
|
|
137
|
+
});
|
|
138
|
+
const result = await service.validatePluginTargets(pluginDir, 'test-plugin', 'app');
|
|
139
|
+
expect(result).toEqual({
|
|
140
|
+
name: 'test-plugin',
|
|
141
|
+
version: '1.0.0',
|
|
142
|
+
targets: ['app', 'library'],
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
test('should accept plugin with multiple targets including current', async () => {
|
|
146
|
+
const pluginDir = path.join(tempDir, 'multi-target-plugin');
|
|
147
|
+
await fs.ensureDir(pluginDir);
|
|
148
|
+
await fs.writeJson(path.join(pluginDir, 'plugin.json'), {
|
|
149
|
+
name: 'multi-target-plugin',
|
|
150
|
+
version: '2.0.0',
|
|
151
|
+
targets: ['app', 'library', 'plugin', 'app-template'],
|
|
152
|
+
});
|
|
153
|
+
const result = await service.validatePluginTargets(pluginDir, 'multi-target-plugin', 'library');
|
|
154
|
+
expect(result.targets).toContain('library');
|
|
155
|
+
expect(result.targets).toHaveLength(4);
|
|
156
|
+
});
|
|
157
|
+
test('should handle plugin.json with optional fields (pluginDependencies, libraryDependencies)', async () => {
|
|
158
|
+
const pluginDir = path.join(tempDir, 'full-plugin');
|
|
159
|
+
await fs.ensureDir(pluginDir);
|
|
160
|
+
await fs.writeJson(path.join(pluginDir, 'plugin.json'), {
|
|
161
|
+
name: 'full-plugin',
|
|
162
|
+
version: '1.5.0',
|
|
163
|
+
targets: ['app'],
|
|
164
|
+
pluginDependencies: { 'other-plugin': '^1.0.0' },
|
|
165
|
+
libraryDependencies: { react: '^18.0.0' },
|
|
166
|
+
});
|
|
167
|
+
const result = await service.validatePluginTargets(pluginDir, 'full-plugin', 'app');
|
|
168
|
+
expect(result.pluginDependencies).toEqual({ 'other-plugin': '^1.0.0' });
|
|
169
|
+
expect(result.libraryDependencies).toEqual({ react: '^18.0.0' });
|
|
170
|
+
});
|
|
171
|
+
// Error scenarios - test exact error messages
|
|
172
|
+
test('should throw MissingPluginTargetsError when targets is undefined', async () => {
|
|
173
|
+
const pluginDir = path.join(tempDir, 'no-targets-plugin');
|
|
174
|
+
await fs.ensureDir(pluginDir);
|
|
175
|
+
await fs.writeJson(path.join(pluginDir, 'plugin.json'), {
|
|
176
|
+
name: 'no-targets-plugin',
|
|
177
|
+
version: '1.0.0',
|
|
178
|
+
});
|
|
179
|
+
await expect(service.validatePluginTargets(pluginDir, 'no-targets-plugin', 'app')).rejects.toThrow("Plugin 'no-targets-plugin' is missing the required 'targets' field in plugin.json.");
|
|
180
|
+
});
|
|
181
|
+
test('should throw MissingPluginTargetsError when targets is empty array', async () => {
|
|
182
|
+
const pluginDir = path.join(tempDir, 'empty-targets-plugin');
|
|
183
|
+
await fs.ensureDir(pluginDir);
|
|
184
|
+
await fs.writeJson(path.join(pluginDir, 'plugin.json'), {
|
|
185
|
+
name: 'empty-targets-plugin',
|
|
186
|
+
version: '1.0.0',
|
|
187
|
+
targets: [],
|
|
188
|
+
});
|
|
189
|
+
await expect(service.validatePluginTargets(pluginDir, 'empty-targets-plugin', 'app')).rejects.toThrow("Plugin 'empty-targets-plugin' is missing the required 'targets' field in plugin.json.");
|
|
190
|
+
});
|
|
191
|
+
test('should throw error when targets does not include current target', async () => {
|
|
192
|
+
const pluginDir = path.join(tempDir, 'incompatible-plugin');
|
|
193
|
+
await fs.ensureDir(pluginDir);
|
|
194
|
+
await fs.writeJson(path.join(pluginDir, 'plugin.json'), {
|
|
195
|
+
name: 'incompatible-plugin',
|
|
196
|
+
version: '1.0.0',
|
|
197
|
+
targets: ['library', 'plugin'],
|
|
198
|
+
});
|
|
199
|
+
await expect(service.validatePluginTargets(pluginDir, 'incompatible-plugin', 'app')).rejects.toThrow("Plugin 'incompatible-plugin' cannot be installed in a 'app' package.");
|
|
200
|
+
});
|
|
201
|
+
test('should handle missing plugin.json file gracefully', async () => {
|
|
202
|
+
const pluginDir = path.join(tempDir, 'no-plugin-json');
|
|
203
|
+
await fs.ensureDir(pluginDir);
|
|
204
|
+
await expect(service.validatePluginTargets(pluginDir, 'no-plugin-json', 'app')).rejects.toThrow();
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
describe('checkExistingInstallation', () => {
|
|
208
|
+
const mockLogger = (message) => {
|
|
209
|
+
/* capture logs */
|
|
210
|
+
};
|
|
211
|
+
// Not installed - return null
|
|
212
|
+
test('should return null when plugin is not installed', async () => {
|
|
213
|
+
const packageDir = path.join(tempDir, 'app1');
|
|
214
|
+
await fs.ensureDir(packageDir);
|
|
215
|
+
await fs.writeJson(path.join(packageDir, 'package.json'), {
|
|
216
|
+
name: 'app1',
|
|
217
|
+
version: '1.0.0',
|
|
218
|
+
launch77: {
|
|
219
|
+
installedPlugins: {},
|
|
220
|
+
},
|
|
221
|
+
});
|
|
222
|
+
const result = await service.checkExistingInstallation('test-plugin', packageDir, mockLogger);
|
|
223
|
+
expect(result).toBeNull();
|
|
224
|
+
});
|
|
225
|
+
test('should return null when package.json does not exist', async () => {
|
|
226
|
+
const packageDir = path.join(tempDir, 'nonexistent');
|
|
227
|
+
await fs.ensureDir(packageDir);
|
|
228
|
+
const result = await service.checkExistingInstallation('test-plugin', packageDir, mockLogger);
|
|
229
|
+
expect(result).toBeNull();
|
|
230
|
+
});
|
|
231
|
+
test('should return null when launch77 field is missing', async () => {
|
|
232
|
+
const packageDir = path.join(tempDir, 'app2');
|
|
233
|
+
await fs.ensureDir(packageDir);
|
|
234
|
+
await fs.writeJson(path.join(packageDir, 'package.json'), {
|
|
235
|
+
name: 'app2',
|
|
236
|
+
version: '1.0.0',
|
|
237
|
+
});
|
|
238
|
+
const result = await service.checkExistingInstallation('test-plugin', packageDir, mockLogger);
|
|
239
|
+
expect(result).toBeNull();
|
|
240
|
+
});
|
|
241
|
+
test('should return null when installedPlugins is missing', async () => {
|
|
242
|
+
const packageDir = path.join(tempDir, 'app3');
|
|
243
|
+
await fs.ensureDir(packageDir);
|
|
244
|
+
await fs.writeJson(path.join(packageDir, 'package.json'), {
|
|
245
|
+
name: 'app3',
|
|
246
|
+
version: '1.0.0',
|
|
247
|
+
launch77: {},
|
|
248
|
+
});
|
|
249
|
+
const result = await service.checkExistingInstallation('test-plugin', packageDir, mockLogger);
|
|
250
|
+
expect(result).toBeNull();
|
|
251
|
+
});
|
|
252
|
+
test('should return null when installedPlugins exists but plugin not in it', async () => {
|
|
253
|
+
const packageDir = path.join(tempDir, 'app4');
|
|
254
|
+
await fs.ensureDir(packageDir);
|
|
255
|
+
await fs.writeJson(path.join(packageDir, 'package.json'), {
|
|
256
|
+
name: 'app4',
|
|
257
|
+
version: '1.0.0',
|
|
258
|
+
launch77: {
|
|
259
|
+
installedPlugins: {
|
|
260
|
+
'other-plugin': {
|
|
261
|
+
package: 'other-plugin',
|
|
262
|
+
version: '1.0.0',
|
|
263
|
+
installedAt: '2024-01-01T00:00:00.000Z',
|
|
264
|
+
source: 'local',
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
const result = await service.checkExistingInstallation('test-plugin', packageDir, mockLogger);
|
|
270
|
+
expect(result).toBeNull();
|
|
271
|
+
});
|
|
272
|
+
// Already installed - return result object
|
|
273
|
+
test('should return early-exit result with correct structure when plugin is installed', async () => {
|
|
274
|
+
const packageDir = path.join(tempDir, 'app5');
|
|
275
|
+
await fs.ensureDir(packageDir);
|
|
276
|
+
await fs.writeJson(path.join(packageDir, 'package.json'), {
|
|
277
|
+
name: 'app5',
|
|
278
|
+
version: '1.0.0',
|
|
279
|
+
launch77: {
|
|
280
|
+
installedPlugins: {
|
|
281
|
+
'test-plugin': {
|
|
282
|
+
package: 'test-plugin',
|
|
283
|
+
version: '1.5.0',
|
|
284
|
+
installedAt: '2024-01-15T10:30:00.000Z',
|
|
285
|
+
source: 'local',
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
|
+
});
|
|
290
|
+
const result = await service.checkExistingInstallation('test-plugin', packageDir, mockLogger);
|
|
291
|
+
expect(result).toEqual({
|
|
292
|
+
pluginName: 'test-plugin',
|
|
293
|
+
filesInstalled: false,
|
|
294
|
+
packageJsonUpdated: false,
|
|
295
|
+
dependenciesInstalled: false,
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
test('should log correct message for local plugin (package name matches plugin name)', async () => {
|
|
299
|
+
const packageDir = path.join(tempDir, 'app6');
|
|
300
|
+
await fs.ensureDir(packageDir);
|
|
301
|
+
await fs.writeJson(path.join(packageDir, 'package.json'), {
|
|
302
|
+
name: 'app6',
|
|
303
|
+
version: '1.0.0',
|
|
304
|
+
launch77: {
|
|
305
|
+
installedPlugins: {
|
|
306
|
+
release: {
|
|
307
|
+
package: 'release',
|
|
308
|
+
version: '2.0.0',
|
|
309
|
+
installedAt: '2024-02-01T12:00:00.000Z',
|
|
310
|
+
source: 'local',
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
});
|
|
315
|
+
const logs = [];
|
|
316
|
+
const captureLogger = (message) => logs.push(message);
|
|
317
|
+
const result = await service.checkExistingInstallation('release', packageDir, captureLogger);
|
|
318
|
+
expect(result).not.toBeNull();
|
|
319
|
+
expect(logs.some((log) => log.includes("Plugin 'release' is already installed"))).toBe(true);
|
|
320
|
+
expect(logs.some((log) => log.includes('release') && log.includes('local'))).toBe(true);
|
|
321
|
+
});
|
|
322
|
+
test('should log correct message for npm plugin (package name is scoped)', async () => {
|
|
323
|
+
const packageDir = path.join(tempDir, 'app7');
|
|
324
|
+
await fs.ensureDir(packageDir);
|
|
325
|
+
await fs.writeJson(path.join(packageDir, 'package.json'), {
|
|
326
|
+
name: 'app7',
|
|
327
|
+
version: '1.0.0',
|
|
328
|
+
launch77: {
|
|
329
|
+
installedPlugins: {
|
|
330
|
+
analytics: {
|
|
331
|
+
package: '@myorg/analytics-plugin',
|
|
332
|
+
version: '3.1.0',
|
|
333
|
+
installedAt: '2024-03-01T15:45:00.000Z',
|
|
334
|
+
source: 'npm',
|
|
335
|
+
},
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
const logs = [];
|
|
340
|
+
const captureLogger = (message) => logs.push(message);
|
|
341
|
+
const result = await service.checkExistingInstallation('analytics', packageDir, captureLogger);
|
|
342
|
+
expect(result).not.toBeNull();
|
|
343
|
+
expect(logs.some((log) => log.includes("Plugin 'analytics' is already installed"))).toBe(true);
|
|
344
|
+
expect(logs.some((log) => log.includes('@myorg/analytics-plugin') && log.includes('npm'))).toBe(true);
|
|
345
|
+
});
|
|
346
|
+
// Edge cases
|
|
347
|
+
test('should handle malformed package.json gracefully (invalid JSON)', async () => {
|
|
348
|
+
const packageDir = path.join(tempDir, 'app8');
|
|
349
|
+
await fs.ensureDir(packageDir);
|
|
350
|
+
await fs.writeFile(path.join(packageDir, 'package.json'), '{ invalid json }');
|
|
351
|
+
const result = await service.checkExistingInstallation('test-plugin', packageDir, mockLogger);
|
|
352
|
+
expect(result).toBeNull();
|
|
353
|
+
});
|
|
354
|
+
test('should handle package.json read errors (permissions, etc.)', async () => {
|
|
355
|
+
const packageDir = path.join(tempDir, 'app9');
|
|
356
|
+
// Don't create the directory - simulate permission/access error
|
|
357
|
+
const result = await service.checkExistingInstallation('test-plugin', packageDir, mockLogger);
|
|
358
|
+
expect(result).toBeNull();
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
//# sourceMappingURL=plugin-svc.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-svc.test.js","sourceRoot":"","sources":["../../../../src/modules/plugin/services/plugin-svc.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-init.d.ts","sourceRoot":"","sources":["../../../../src/modules/release/commands/release-init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,wBAAgB,kBAAkB,IAAI,OAAO,CA4F5C"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { detectLaunch77Context } from '@launch77/plugin-runtime';
|
|
5
|
+
import { GitService, GitHubService, GitHubCLINotInstalledError, GitHubNotAuthenticatedError, NotInWorkspaceError, GitHubNotConnectedError } from '../../git/index.js';
|
|
6
|
+
import { ReleaseService } from '../services/release-service.js';
|
|
7
|
+
import { ChangesetNotInitializedError } from '../errors/release-errors.js';
|
|
8
|
+
export function releaseInitCommand() {
|
|
9
|
+
return new Command('release:init').description('Initialize complete release workflow setup').action(async () => {
|
|
10
|
+
console.log(chalk.blue('\n🚀 Initializing release workflow...\n'));
|
|
11
|
+
const cwd = process.cwd();
|
|
12
|
+
const gitService = new GitService();
|
|
13
|
+
const githubService = new GitHubService();
|
|
14
|
+
const releaseService = new ReleaseService(githubService);
|
|
15
|
+
try {
|
|
16
|
+
// 1. Verify we're in a workspace root
|
|
17
|
+
const context = await detectLaunch77Context(cwd);
|
|
18
|
+
if (!context.isValid || context.locationType !== 'workspace-root') {
|
|
19
|
+
throw new NotInWorkspaceError(cwd);
|
|
20
|
+
}
|
|
21
|
+
// 2. Verify prerequisites (GitHub CLI installed and authenticated)
|
|
22
|
+
const spinner = ora('Checking prerequisites...').start();
|
|
23
|
+
await githubService.verifyPrerequisites();
|
|
24
|
+
spinner.succeed('Prerequisites verified');
|
|
25
|
+
// 3. Ensure connected to GitHub
|
|
26
|
+
try {
|
|
27
|
+
await gitService.ensureConnectedToGitHub(context.workspaceRoot);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (error instanceof GitHubNotConnectedError) {
|
|
31
|
+
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
32
|
+
console.log(chalk.gray(` Connect to GitHub first: ${chalk.cyan('launch77 git:connect')}\n`));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
// 4. Get repository information
|
|
38
|
+
const repoSpinner = ora('Detecting repository...').start();
|
|
39
|
+
const { owner, repo } = await githubService.getCurrentRepository(context.workspaceRoot);
|
|
40
|
+
repoSpinner.succeed(`Repository: ${owner}/${repo}`);
|
|
41
|
+
// 5. Fix changeset config access setting
|
|
42
|
+
console.log(chalk.cyan('\n📝 Configuring changesets...\n'));
|
|
43
|
+
try {
|
|
44
|
+
const changesetSpinner = ora('Checking changeset configuration...').start();
|
|
45
|
+
const wasChanged = await releaseService.fixChangesetAccess(context.workspaceRoot);
|
|
46
|
+
if (wasChanged) {
|
|
47
|
+
changesetSpinner.succeed('Updated .changeset/config.json access to "public"');
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
changesetSpinner.succeed('Changeset already configured correctly');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (error instanceof ChangesetNotInitializedError) {
|
|
55
|
+
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
56
|
+
console.log(chalk.gray(' Changesets should be initialized during workspace creation.'));
|
|
57
|
+
console.log(chalk.gray(` Run manually: ${chalk.cyan('npx changeset init')}\n`));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
// 6. Setup RELEASE_TOKEN
|
|
63
|
+
releaseService.explainReleaseToken();
|
|
64
|
+
const token = await releaseService.promptForReleaseToken();
|
|
65
|
+
await releaseService.setupReleaseToken(owner, repo, token);
|
|
66
|
+
// 7. Guide npm Trusted Publishing setup
|
|
67
|
+
releaseService.explainNpmTrustedPublishing();
|
|
68
|
+
// 8. Show success summary
|
|
69
|
+
releaseService.showSuccessSummary();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error instanceof GitHubCLINotInstalledError) {
|
|
73
|
+
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
74
|
+
console.log(chalk.gray(` Install with: ${chalk.cyan('brew install gh')}\n`));
|
|
75
|
+
console.log(chalk.gray(` Or visit: ${chalk.cyan('https://cli.github.com/')}\n`));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
if (error instanceof GitHubNotAuthenticatedError) {
|
|
79
|
+
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
80
|
+
console.log(chalk.gray(` Authenticate with: ${chalk.cyan('gh auth login')}\n`));
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
if (error instanceof NotInWorkspaceError) {
|
|
84
|
+
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
85
|
+
console.log(chalk.gray(` This command must be run from a Launch77 workspace root directory\n`));
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=release-init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-init.js","sourceRoot":"","sources":["../../../../src/modules/release/commands/release-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-errors.d.ts","sourceRoot":"","sources":["../../../../src/modules/release/errors/release-errors.ts"],"names":[],"mappings":"AAAA,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,4BAA6B,SAAQ,KAAK;;CAKtD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class InvalidReleaseTokenError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'InvalidReleaseTokenError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class ChangesetNotInitializedError extends Error {
|
|
8
|
+
constructor() {
|
|
9
|
+
super('Changesets are not initialized in this workspace');
|
|
10
|
+
this.name = 'ChangesetNotInitializedError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=release-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-errors.js","sourceRoot":"","sources":["../../../../src/modules/release/errors/release-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;IACxC,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD;QACE,KAAK,CAAC,kDAAkD,CAAC,CAAA;QACzD,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAA;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/release/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAG9D,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAA;AAGnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Services
|
|
2
|
+
export { ReleaseService } from './services/release-service.js';
|
|
3
|
+
// Errors
|
|
4
|
+
export { InvalidReleaseTokenError, ChangesetNotInitializedError } from './errors/release-errors.js';
|
|
5
|
+
// Commands
|
|
6
|
+
export { releaseInitCommand } from './commands/release-init.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/release/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE9D,SAAS;AACT,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAA;AAEnG,WAAW;AACX,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { GitHubService } from '../../git/index.js';
|
|
2
|
+
export declare class ReleaseService {
|
|
3
|
+
private githubService;
|
|
4
|
+
constructor(githubService?: GitHubService);
|
|
5
|
+
/**
|
|
6
|
+
* Validate GitHub Personal Access Token format
|
|
7
|
+
*/
|
|
8
|
+
validateReleaseToken(token: string): void;
|
|
9
|
+
/**
|
|
10
|
+
* Explain what RELEASE_TOKEN is and why it's needed
|
|
11
|
+
*/
|
|
12
|
+
explainReleaseToken(): void;
|
|
13
|
+
/**
|
|
14
|
+
* Prompt user for RELEASE_TOKEN
|
|
15
|
+
*/
|
|
16
|
+
promptForReleaseToken(): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Setup RELEASE_TOKEN secret in GitHub repository
|
|
19
|
+
*/
|
|
20
|
+
setupReleaseToken(owner: string, repo: string, token: string): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Fix changeset config to set access to "public"
|
|
23
|
+
*/
|
|
24
|
+
fixChangesetAccess(workspaceRoot: string): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Explain npm Trusted Publishing (OIDC)
|
|
27
|
+
*/
|
|
28
|
+
explainNpmTrustedPublishing(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Show success summary for release setup
|
|
31
|
+
*/
|
|
32
|
+
showSuccessSummary(): void;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=release-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-service.d.ts","sourceRoot":"","sources":["../../../../src/modules/release/services/release-service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,qBAAa,cAAc;IACb,OAAO,CAAC,aAAa;gBAAb,aAAa,GAAE,aAAmC;IAEtE;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWzC;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAoB3B;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAkB9C;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlF;;OAEG;IACG,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BjE;;OAEG;IACH,2BAA2B,IAAI,IAAI;IAsBnC;;OAEG;IACH,kBAAkB,IAAI,IAAI;CAW3B"}
|