@launch77/cli 1.4.3 → 1.5.0

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 (152) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/cli.js +1 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/infrastructure/npm-package.d.ts +42 -0
  5. package/dist/infrastructure/npm-package.d.ts.map +1 -0
  6. package/dist/infrastructure/npm-package.js +46 -0
  7. package/dist/infrastructure/npm-package.js.map +1 -0
  8. package/dist/infrastructure/package-resolver.d.ts +117 -0
  9. package/dist/infrastructure/package-resolver.d.ts.map +1 -0
  10. package/dist/infrastructure/package-resolver.js +170 -0
  11. package/dist/infrastructure/package-resolver.js.map +1 -0
  12. package/dist/infrastructure/package-resolver.test.d.ts +2 -0
  13. package/dist/infrastructure/package-resolver.test.d.ts.map +1 -0
  14. package/dist/infrastructure/package-resolver.test.js +251 -0
  15. package/dist/infrastructure/package-resolver.test.js.map +1 -0
  16. package/dist/infrastructure/template.d.ts +0 -1
  17. package/dist/infrastructure/template.d.ts.map +1 -1
  18. package/dist/infrastructure/template.js.map +1 -1
  19. package/dist/modules/app/commands/create-app.d.ts.map +1 -1
  20. package/dist/modules/app/commands/create-app.js +14 -15
  21. package/dist/modules/app/commands/create-app.js.map +1 -1
  22. package/dist/modules/app/commands/delete-app.js +1 -1
  23. package/dist/modules/app/commands/delete-app.js.map +1 -1
  24. package/dist/modules/app/commands/validate-manifest.d.ts.map +1 -1
  25. package/dist/modules/app/commands/validate-manifest.js +0 -1
  26. package/dist/modules/app/commands/validate-manifest.js.map +1 -1
  27. package/dist/modules/app/index.d.ts +1 -2
  28. package/dist/modules/app/index.d.ts.map +1 -1
  29. package/dist/modules/app/index.js +0 -1
  30. package/dist/modules/app/index.js.map +1 -1
  31. package/dist/modules/app/lib/app-template-resolver.d.ts +14 -0
  32. package/dist/modules/app/lib/app-template-resolver.d.ts.map +1 -0
  33. package/dist/modules/app/lib/app-template-resolver.js +51 -0
  34. package/dist/modules/app/lib/app-template-resolver.js.map +1 -0
  35. package/dist/modules/app/lib/manifest-schema.d.ts +0 -7
  36. package/dist/modules/app/lib/manifest-schema.d.ts.map +1 -1
  37. package/dist/modules/app/lib/manifest-schema.js +0 -2
  38. package/dist/modules/app/lib/manifest-schema.js.map +1 -1
  39. package/dist/modules/app/services/app-svc.d.ts +2 -1
  40. package/dist/modules/app/services/app-svc.d.ts.map +1 -1
  41. package/dist/modules/app/services/app-svc.js +77 -12
  42. package/dist/modules/app/services/app-svc.js.map +1 -1
  43. package/dist/modules/app/services/manifest-svc.d.ts +2 -2
  44. package/dist/modules/app/services/manifest-svc.d.ts.map +1 -1
  45. package/dist/modules/app/services/manifest-svc.js +9 -50
  46. package/dist/modules/app/services/manifest-svc.js.map +1 -1
  47. package/dist/modules/app/types/app-types.d.ts +2 -5
  48. package/dist/modules/app/types/app-types.d.ts.map +1 -1
  49. package/dist/modules/app/types/app-types.js +1 -4
  50. package/dist/modules/app/types/app-types.js.map +1 -1
  51. package/dist/modules/catalog/commands/scan.js +3 -3
  52. package/dist/modules/catalog/commands/scan.js.map +1 -1
  53. package/dist/modules/catalog/services/catalog-svc.d.ts +2 -2
  54. package/dist/modules/catalog/services/catalog-svc.d.ts.map +1 -1
  55. package/dist/modules/catalog/services/catalog-svc.js +2 -2
  56. package/dist/modules/catalog/services/catalog-svc.js.map +1 -1
  57. package/dist/modules/deploy/commands/deploy-init-action.d.ts.map +1 -1
  58. package/dist/modules/deploy/commands/deploy-init-action.js +21 -20
  59. package/dist/modules/deploy/commands/deploy-init-action.js.map +1 -1
  60. package/dist/modules/deploy/commands/deploy-logs-action.d.ts.map +1 -1
  61. package/dist/modules/deploy/commands/deploy-logs-action.js +16 -13
  62. package/dist/modules/deploy/commands/deploy-logs-action.js.map +1 -1
  63. package/dist/modules/deploy/commands/deploy-status-action.d.ts.map +1 -1
  64. package/dist/modules/deploy/commands/deploy-status-action.js +16 -13
  65. package/dist/modules/deploy/commands/deploy-status-action.js.map +1 -1
  66. package/dist/modules/plugin/lib/plugin-resolver.d.ts +10 -72
  67. package/dist/modules/plugin/lib/plugin-resolver.d.ts.map +1 -1
  68. package/dist/modules/plugin/lib/plugin-resolver.js +23 -115
  69. package/dist/modules/plugin/lib/plugin-resolver.js.map +1 -1
  70. package/dist/modules/plugin/lib/plugin-resolver.test.js +45 -39
  71. package/dist/modules/plugin/lib/plugin-resolver.test.js.map +1 -1
  72. package/dist/modules/plugin/services/plugin-svc.d.ts +2 -0
  73. package/dist/modules/plugin/services/plugin-svc.d.ts.map +1 -1
  74. package/dist/modules/plugin/services/plugin-svc.js +24 -19
  75. package/dist/modules/plugin/services/plugin-svc.js.map +1 -1
  76. package/dist/modules/plugin/services/plugin-svc.test.js +12 -6
  77. package/dist/modules/plugin/services/plugin-svc.test.js.map +1 -1
  78. package/dist/templates/plugin/package.json.hbs +1 -1
  79. package/dist/templates/plugin/plugin.json.hbs +1 -3
  80. package/dist/utils/validation.d.ts +3 -7
  81. package/dist/utils/validation.d.ts.map +1 -1
  82. package/dist/utils/validation.js +7 -31
  83. package/dist/utils/validation.js.map +1 -1
  84. package/package.json +1 -1
  85. package/src/cli.ts +1 -4
  86. package/src/infrastructure/npm-package.ts +73 -0
  87. package/src/infrastructure/package-resolver.test.ts +313 -0
  88. package/src/infrastructure/package-resolver.ts +223 -0
  89. package/src/infrastructure/template.ts +0 -1
  90. package/src/modules/app/commands/create-app.ts +14 -18
  91. package/src/modules/app/commands/delete-app.ts +1 -1
  92. package/src/modules/app/commands/validate-manifest.ts +0 -1
  93. package/src/modules/app/index.ts +1 -2
  94. package/src/modules/app/lib/app-template-resolver.ts +56 -0
  95. package/src/modules/app/lib/manifest-schema.ts +0 -5
  96. package/src/modules/app/services/app-svc.ts +89 -13
  97. package/src/modules/app/services/manifest-svc.ts +8 -57
  98. package/src/modules/app/types/app-types.ts +2 -9
  99. package/src/modules/catalog/commands/scan.ts +3 -3
  100. package/src/modules/catalog/services/catalog-svc.ts +4 -4
  101. package/src/modules/deploy/commands/deploy-init-action.ts +23 -20
  102. package/src/modules/deploy/commands/deploy-logs-action.ts +19 -13
  103. package/src/modules/deploy/commands/deploy-status-action.ts +19 -13
  104. package/src/modules/plugin/lib/plugin-resolver.test.ts +48 -39
  105. package/src/modules/plugin/lib/plugin-resolver.ts +22 -141
  106. package/src/modules/plugin/services/plugin-svc.test.ts +12 -6
  107. package/src/modules/plugin/services/plugin-svc.ts +27 -18
  108. package/src/utils/validation.ts +10 -38
  109. package/templates/plugin/package.json.hbs +1 -1
  110. package/templates/plugin/plugin.json.hbs +1 -3
  111. package/dist/modules/app/commands/generate-manifest.d.ts +0 -3
  112. package/dist/modules/app/commands/generate-manifest.d.ts.map +0 -1
  113. package/dist/modules/app/commands/generate-manifest.js +0 -62
  114. package/dist/modules/app/commands/generate-manifest.js.map +0 -1
  115. package/dist/modules/startup/commands/create-startup.d.ts +0 -3
  116. package/dist/modules/startup/commands/create-startup.d.ts.map +0 -1
  117. package/dist/modules/startup/commands/create-startup.js +0 -43
  118. package/dist/modules/startup/commands/create-startup.js.map +0 -1
  119. package/dist/modules/startup/errors/startup-errors.d.ts +0 -13
  120. package/dist/modules/startup/errors/startup-errors.d.ts.map +0 -1
  121. package/dist/modules/startup/errors/startup-errors.js +0 -25
  122. package/dist/modules/startup/errors/startup-errors.js.map +0 -1
  123. package/dist/modules/startup/index.d.ts +0 -5
  124. package/dist/modules/startup/index.d.ts.map +0 -1
  125. package/dist/modules/startup/index.js +0 -7
  126. package/dist/modules/startup/index.js.map +0 -1
  127. package/dist/modules/startup/services/startup-service.d.ts +0 -7
  128. package/dist/modules/startup/services/startup-service.d.ts.map +0 -1
  129. package/dist/modules/startup/services/startup-service.js +0 -43
  130. package/dist/modules/startup/services/startup-service.js.map +0 -1
  131. package/dist/modules/startup/types/startup-types.d.ts +0 -8
  132. package/dist/modules/startup/types/startup-types.d.ts.map +0 -1
  133. package/dist/modules/startup/types/startup-types.js +0 -2
  134. package/dist/modules/startup/types/startup-types.js.map +0 -1
  135. package/dist/modules/startup/utils/startup-validators.d.ts +0 -8
  136. package/dist/modules/startup/utils/startup-validators.d.ts.map +0 -1
  137. package/dist/modules/startup/utils/startup-validators.js +0 -17
  138. package/dist/modules/startup/utils/startup-validators.js.map +0 -1
  139. package/dist/templates/startup/apps/.gitkeep +0 -8
  140. package/dist/utils/monorepo.d.ts +0 -19
  141. package/dist/utils/monorepo.d.ts.map +0 -1
  142. package/dist/utils/monorepo.js +0 -100
  143. package/dist/utils/monorepo.js.map +0 -1
  144. package/src/modules/app/commands/generate-manifest.ts +0 -75
  145. package/src/modules/startup/commands/create-startup.ts +0 -53
  146. package/src/modules/startup/errors/startup-errors.ts +0 -23
  147. package/src/modules/startup/index.ts +0 -11
  148. package/src/modules/startup/services/startup-service.ts +0 -57
  149. package/src/modules/startup/types/startup-types.ts +0 -8
  150. package/src/modules/startup/utils/startup-validators.ts +0 -19
  151. package/src/utils/monorepo.ts +0 -137
  152. package/templates/startup/apps/.gitkeep +0 -8
@@ -2,8 +2,10 @@
2
2
  * deploy:logs action - View deployment runtime logs
3
3
  */
4
4
  /* eslint-disable no-console */
5
+ import * as path from 'path';
5
6
  import chalk from 'chalk';
6
- import { detectMonorepoContext } from '../../../utils/monorepo.js';
7
+ import { detectLaunch77Context } from '@launch77/plugin-runtime';
8
+ import fs from 'fs-extra';
7
9
  import { DeployService } from '../services/deploy-svc.js';
8
10
  import { getVercelInstallInstructions, isVercelCliInstalled, runVercelCommand } from '../utils/vercel-extended.js';
9
11
  /**
@@ -11,23 +13,24 @@ import { getVercelInstallInstructions, isVercelCliInstalled, runVercelCommand }
11
13
  */
12
14
  export async function deployLogs(options) {
13
15
  const deployService = new DeployService();
14
- // Detect monorepo context
15
- const context = await detectMonorepoContext(process.cwd());
16
- if (context.location !== 'startup-app') {
17
- throw new Error('Must be run from within an app directory (e.g., startups/mycompany/apps/myapp)');
16
+ // Detect Launch77 context
17
+ const context = await detectLaunch77Context(process.cwd());
18
+ if (context.locationType !== 'workspace-app') {
19
+ throw new Error('Must be run from within an app directory (e.g., apps/myapp)');
18
20
  }
19
21
  const appPath = process.cwd();
20
22
  console.log(chalk.blue(`\n📜 Deployment Logs\n`));
21
23
  // Load manifest
22
24
  const manifest = await deployService.loadManifest();
23
- // Check if this is an API app
24
- if (manifest.type === 'api') {
25
- console.log(chalk.yellow('⚠️ Railway deployments for API apps are not yet supported'));
26
- console.log();
27
- console.log(chalk.cyan('Coming soon! For now, you can view logs at:'));
28
- console.log(chalk.white(' Railway.app dashboard'));
29
- console.log(chalk.white(' • Fly.io dashboard'));
30
- console.log(chalk.white(' Render.com dashboard'));
25
+ // Check template type from app's package.json
26
+ const appPackageJsonPath = path.join(appPath, 'package.json');
27
+ const appPackageJson = await fs.readJson(appPackageJsonPath);
28
+ const templatePackage = appPackageJson.launch77?.template?.package;
29
+ // Only allow webapp apps to deploy to Vercel
30
+ const isWebapp = templatePackage === 'webapp' || templatePackage === '@launch77-shared/app-template-webapp';
31
+ if (!isWebapp) {
32
+ console.log(chalk.yellow('⚠️ Vercel deployment only supports webapp apps'));
33
+ console.log(chalk.gray('Other app types coming soon'));
31
34
  console.log();
32
35
  return;
33
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-logs-action.js","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/deploy-logs-action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy-logs-action.js","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/deploy-logs-action.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-status-action.d.ts","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/deploy-status-action.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,wBAAsB,YAAY,kBA+JjC"}
1
+ {"version":3,"file":"deploy-status-action.d.ts","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/deploy-status-action.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;GAEG;AACH,wBAAsB,YAAY,kBAkKjC"}
@@ -2,9 +2,11 @@
2
2
  * deploy:status action - Show deployment status for an app
3
3
  */
4
4
  /* eslint-disable no-console */
5
+ import * as path from 'path';
5
6
  import chalk from 'chalk';
7
+ import { detectLaunch77Context } from '@launch77/plugin-runtime';
8
+ import fs from 'fs-extra';
6
9
  import ora from 'ora';
7
- import { detectMonorepoContext } from '../../../utils/monorepo.js';
8
10
  import { DeployService } from '../services/deploy-svc.js';
9
11
  import { getVercelInstallInstructions, isVercelCliInstalled, runVercelCommand, verifyVercelProjectExists } from '../utils/vercel-extended.js';
10
12
  /**
@@ -12,23 +14,24 @@ import { getVercelInstallInstructions, isVercelCliInstalled, runVercelCommand, v
12
14
  */
13
15
  export async function deployStatus() {
14
16
  const deployService = new DeployService();
15
- // Detect monorepo context
16
- const context = await detectMonorepoContext(process.cwd());
17
- if (context.location !== 'startup-app') {
18
- throw new Error('Must be run from within an app directory (e.g., startups/mycompany/apps/myapp)');
17
+ // Detect Launch77 context
18
+ const context = await detectLaunch77Context(process.cwd());
19
+ if (context.locationType !== 'workspace-app') {
20
+ throw new Error('Must be run from within an app directory (e.g., apps/myapp)');
19
21
  }
20
22
  const appPath = process.cwd();
21
23
  console.log(chalk.blue(`\n📊 Deployment Status\n`));
22
24
  // Load manifest
23
25
  const manifest = await deployService.loadManifest();
24
- // Check if this is an API app
25
- if (manifest.type === 'api') {
26
- console.log(chalk.yellow('⚠️ Railway deployments for API apps are not yet supported'));
27
- console.log();
28
- console.log(chalk.cyan('Coming soon! For now, you can check your deployment status at:'));
29
- console.log(chalk.white(' Railway.app dashboard'));
30
- console.log(chalk.white(' • Fly.io dashboard'));
31
- console.log(chalk.white(' Render.com dashboard'));
26
+ // Check template type from app's package.json
27
+ const appPackageJsonPath = path.join(appPath, 'package.json');
28
+ const appPackageJson = await fs.readJson(appPackageJsonPath);
29
+ const templatePackage = appPackageJson.launch77?.template?.package;
30
+ // Only allow webapp apps to deploy to Vercel
31
+ const isWebapp = templatePackage === 'webapp' || templatePackage === '@launch77-shared/app-template-webapp';
32
+ if (!isWebapp) {
33
+ console.log(chalk.yellow('⚠️ Vercel deployment only supports webapp apps'));
34
+ console.log(chalk.gray('Other app types coming soon'));
32
35
  console.log();
33
36
  return;
34
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-status-action.js","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/deploy-status-action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy-status-action.js","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/deploy-status-action.ts"],"names":[],"mappings":"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"}
@@ -1,76 +1,14 @@
1
- import type { ValidationResult } from '@launch77/plugin-runtime';
1
+ import { PackageResolver } from '../../../infrastructure/package-resolver.js';
2
2
  /**
3
- * Plugin resolution result
4
- */
5
- export interface PluginResolution {
6
- /** The source of the plugin */
7
- source: 'local' | 'npm';
8
- /** The resolved name/package to use */
9
- resolvedName: string;
10
- /** The local path if source is 'local' */
11
- localPath?: string;
12
- /** The npm package name if source is 'npm' */
13
- npmPackage?: string;
14
- }
15
- /**
16
- * Validate plugin input name
17
- *
18
- * Accepts:
19
- * - Unscoped names (e.g., "release", "my-plugin")
20
- * - Scoped npm packages (e.g., "@ibm/plugin-name")
21
- *
22
- * Rejects:
23
- * - Invalid formats
24
- * - Empty strings
25
- * - Names with invalid characters
3
+ * Plugin resolver implementation
26
4
  *
27
- * @param name - The plugin name to validate
28
- * @returns ValidationResult with isValid and optional error message
29
- *
30
- * @example
31
- * validatePluginInput('release') // { isValid: true }
32
- * validatePluginInput('@ibm/analytics') // { isValid: true }
33
- * validatePluginInput('@invalid') // { isValid: false, error: '...' }
5
+ * Resolves plugins from:
6
+ * - Local workspace plugins/ directory
7
+ * - npm packages with @launch77-shared/plugin- prefix
34
8
  */
35
- export declare function validatePluginInput(name: string): ValidationResult;
36
- /**
37
- * Convert an unscoped plugin name to an npm package name
38
- *
39
- * Rules:
40
- * - Unscoped names: prefix with @launch77-shared/plugin-
41
- * - Scoped names: use as-is
42
- *
43
- * @param name - The plugin name (must be validated first)
44
- * @returns The npm package name
45
- *
46
- * @example
47
- * toNpmPackageName('release') // '@launch77-shared/plugin-release'
48
- * toNpmPackageName('@ibm/analytics') // '@ibm/analytics'
49
- */
50
- export declare function toNpmPackageName(name: string): string;
51
- /**
52
- * Resolve plugin location from name
53
- *
54
- * Resolution order:
55
- * 1. Check local workspace plugins directory
56
- * 2. Resolve to npm package name
57
- *
58
- * @param name - The plugin name to resolve
59
- * @param workspaceRoot - The workspace root directory
60
- * @returns PluginResolution with source and resolved location
61
- *
62
- * @example
63
- * // Local plugin found
64
- * await resolvePluginLocation('my-plugin', '/workspace')
65
- * // { source: 'local', resolvedName: 'my-plugin', localPath: '/workspace/plugins/my-plugin' }
66
- *
67
- * // Not found locally, resolve to npm
68
- * await resolvePluginLocation('release', '/workspace')
69
- * // { source: 'npm', resolvedName: 'release', npmPackage: '@launch77-shared/plugin-release' }
70
- *
71
- * // Scoped package always resolves to npm
72
- * await resolvePluginLocation('@ibm/analytics', '/workspace')
73
- * // { source: 'npm', resolvedName: '@ibm/analytics', npmPackage: '@ibm/analytics' }
74
- */
75
- export declare function resolvePluginLocation(name: string, workspaceRoot: string): Promise<PluginResolution>;
9
+ export declare class PluginResolver extends PackageResolver {
10
+ protected getFolderName(): string;
11
+ protected getPackagePrefix(): string;
12
+ protected verify(localPath: string): Promise<boolean>;
13
+ }
76
14
  //# sourceMappingURL=plugin-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-resolver.d.ts","sourceRoot":"","sources":["../../../../src/modules/plugin/lib/plugin-resolver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,OAAO,GAAG,KAAK,CAAA;IACvB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAA;IACpB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CA2BlE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUrD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuC1G"}
1
+ {"version":3,"file":"plugin-resolver.d.ts","sourceRoot":"","sources":["../../../../src/modules/plugin/lib/plugin-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAA;AAE7E;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,eAAe;IACjD,SAAS,CAAC,aAAa,IAAI,MAAM;IAIjC,SAAS,CAAC,gBAAgB,IAAI,MAAM;cAIpB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAkB5D"}
@@ -1,128 +1,36 @@
1
1
  import * as path from 'path';
2
2
  import fs from 'fs-extra';
3
- import { parsePluginName, isValidNpmPackageName } from '@launch77/plugin-runtime';
3
+ import { PackageResolver } from '../../../infrastructure/package-resolver.js';
4
4
  /**
5
- * Validate plugin input name
5
+ * Plugin resolver implementation
6
6
  *
7
- * Accepts:
8
- * - Unscoped names (e.g., "release", "my-plugin")
9
- * - Scoped npm packages (e.g., "@ibm/plugin-name")
10
- *
11
- * Rejects:
12
- * - Invalid formats
13
- * - Empty strings
14
- * - Names with invalid characters
15
- *
16
- * @param name - The plugin name to validate
17
- * @returns ValidationResult with isValid and optional error message
18
- *
19
- * @example
20
- * validatePluginInput('release') // { isValid: true }
21
- * validatePluginInput('@ibm/analytics') // { isValid: true }
22
- * validatePluginInput('@invalid') // { isValid: false, error: '...' }
23
- */
24
- export function validatePluginInput(name) {
25
- if (!name || name.trim().length === 0) {
26
- return {
27
- isValid: false,
28
- error: 'Plugin name cannot be empty',
29
- };
30
- }
31
- const trimmedName = name.trim();
32
- // Parse the name to determine type and validate
33
- const parsed = parsePluginName(trimmedName);
34
- if (!parsed.isValid) {
35
- return {
36
- isValid: false,
37
- error: parsed.error,
38
- };
39
- }
40
- // If it's scoped, it must be a valid npm package name
41
- if (parsed.type === 'scoped') {
42
- return isValidNpmPackageName(trimmedName);
43
- }
44
- // Unscoped names are valid for both local and npm
45
- return { isValid: true };
46
- }
47
- /**
48
- * Convert an unscoped plugin name to an npm package name
49
- *
50
- * Rules:
51
- * - Unscoped names: prefix with @launch77-shared/plugin-
52
- * - Scoped names: use as-is
53
- *
54
- * @param name - The plugin name (must be validated first)
55
- * @returns The npm package name
56
- *
57
- * @example
58
- * toNpmPackageName('release') // '@launch77-shared/plugin-release'
59
- * toNpmPackageName('@ibm/analytics') // '@ibm/analytics'
7
+ * Resolves plugins from:
8
+ * - Local workspace plugins/ directory
9
+ * - npm packages with @launch77-shared/plugin- prefix
60
10
  */
61
- export function toNpmPackageName(name) {
62
- const trimmedName = name.trim();
63
- // If already scoped, use as-is
64
- if (trimmedName.startsWith('@')) {
65
- return trimmedName;
11
+ export class PluginResolver extends PackageResolver {
12
+ getFolderName() {
13
+ return 'plugins';
66
14
  }
67
- // Otherwise, convert to @launch77-shared/plugin-<name>
68
- return `@launch77-shared/plugin-${trimmedName}`;
69
- }
70
- /**
71
- * Resolve plugin location from name
72
- *
73
- * Resolution order:
74
- * 1. Check local workspace plugins directory
75
- * 2. Resolve to npm package name
76
- *
77
- * @param name - The plugin name to resolve
78
- * @param workspaceRoot - The workspace root directory
79
- * @returns PluginResolution with source and resolved location
80
- *
81
- * @example
82
- * // Local plugin found
83
- * await resolvePluginLocation('my-plugin', '/workspace')
84
- * // { source: 'local', resolvedName: 'my-plugin', localPath: '/workspace/plugins/my-plugin' }
85
- *
86
- * // Not found locally, resolve to npm
87
- * await resolvePluginLocation('release', '/workspace')
88
- * // { source: 'npm', resolvedName: 'release', npmPackage: '@launch77-shared/plugin-release' }
89
- *
90
- * // Scoped package always resolves to npm
91
- * await resolvePluginLocation('@ibm/analytics', '/workspace')
92
- * // { source: 'npm', resolvedName: '@ibm/analytics', npmPackage: '@ibm/analytics' }
93
- */
94
- export async function resolvePluginLocation(name, workspaceRoot) {
95
- const trimmedName = name.trim();
96
- const parsed = parsePluginName(trimmedName);
97
- // If scoped, always use npm (local plugins are never scoped)
98
- if (parsed.type === 'scoped') {
99
- return {
100
- source: 'npm',
101
- resolvedName: trimmedName,
102
- npmPackage: trimmedName,
103
- };
15
+ getPackagePrefix() {
16
+ return '@launch77-shared/plugin-';
104
17
  }
105
- // Check local workspace plugins directory
106
- const localPath = path.join(workspaceRoot, 'plugins', trimmedName);
107
- const localExists = await fs.pathExists(localPath);
108
- if (localExists) {
109
- // Verify it's a valid plugin (has plugin.json and dist/generator.js)
18
+ async verify(localPath) {
19
+ // Verify it's a valid plugin (has plugin.json, dist/generator.js, and package.json with version)
110
20
  const hasPluginJson = await fs.pathExists(path.join(localPath, 'plugin.json'));
111
21
  const hasGenerator = await fs.pathExists(path.join(localPath, 'dist/generator.js'));
112
- if (hasPluginJson && hasGenerator) {
113
- return {
114
- source: 'local',
115
- resolvedName: trimmedName,
116
- localPath,
117
- };
22
+ const hasPackageJson = await fs.pathExists(path.join(localPath, 'package.json'));
23
+ if (!hasPluginJson || !hasGenerator || !hasPackageJson) {
24
+ return false;
25
+ }
26
+ // Verify package.json has a version field
27
+ try {
28
+ const packageJson = await fs.readJson(path.join(localPath, 'package.json'));
29
+ return !!packageJson.version;
30
+ }
31
+ catch {
32
+ return false;
118
33
  }
119
34
  }
120
- // Not found locally, resolve to npm package
121
- const npmPackage = toNpmPackageName(trimmedName);
122
- return {
123
- source: 'npm',
124
- resolvedName: trimmedName,
125
- npmPackage,
126
- };
127
35
  }
128
36
  //# sourceMappingURL=plugin-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-resolver.js","sourceRoot":"","sources":["../../../../src/modules/plugin/lib/plugin-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EAAE,MAAM,UAAU,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAkBjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,6BAA6B;SACrC,CAAA;IACH,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAE/B,gDAAgD;IAChD,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;IAE3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAA;IACH,CAAC;IAED,sDAAsD;IACtD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,qBAAqB,CAAC,WAAW,CAAC,CAAA;IAC3C,CAAC;IAED,kDAAkD;IAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC1B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAE/B,+BAA+B;IAC/B,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,uDAAuD;IACvD,OAAO,2BAA2B,WAAW,EAAE,CAAA;AACjD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAY,EAAE,aAAqB;IAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;IAE3C,6DAA6D;IAC7D,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO;YACL,MAAM,EAAE,KAAK;YACb,YAAY,EAAE,WAAW;YACzB,UAAU,EAAE,WAAW;SACxB,CAAA;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;IAClE,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IAElD,IAAI,WAAW,EAAE,CAAC;QAChB,qEAAqE;QACrE,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAA;QAC9E,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAA;QAEnF,IAAI,aAAa,IAAI,YAAY,EAAE,CAAC;YAClC,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,YAAY,EAAE,WAAW;gBACzB,SAAS;aACV,CAAA;QACH,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAA;IAEhD,OAAO;QACL,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,WAAW;QACzB,UAAU;KACX,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"plugin-resolver.js","sourceRoot":"","sources":["../../../../src/modules/plugin/lib/plugin-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EAAE,MAAM,UAAU,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAA;AAE7E;;;;;;GAMG;AACH,MAAM,OAAO,cAAe,SAAQ,eAAe;IACvC,aAAa;QACrB,OAAO,SAAS,CAAA;IAClB,CAAC;IAES,gBAAgB;QACxB,OAAO,0BAA0B,CAAA;IACnC,CAAC;IAES,KAAK,CAAC,MAAM,CAAC,SAAiB;QACtC,iGAAiG;QACjG,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAA;QAC9E,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAA;QACnF,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAA;QAEhF,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc,EAAE,CAAC;YACvD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,0CAA0C;QAC1C,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAA;YAC3E,OAAO,CAAC,CAAC,WAAW,CAAC,OAAO,CAAA;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF"}
@@ -1,81 +1,85 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import * as path from 'path';
3
1
  import * as os from 'os';
2
+ import * as path from 'path';
4
3
  import fs from 'fs-extra';
5
- import { validatePluginInput, toNpmPackageName, resolvePluginLocation } from './plugin-resolver.js';
4
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
5
+ import { PluginResolver } from './plugin-resolver.js';
6
6
  describe('Plugin Resolver', () => {
7
- describe('validatePluginInput', () => {
7
+ let resolver;
8
+ beforeEach(() => {
9
+ resolver = new PluginResolver();
10
+ });
11
+ describe('validateInput', () => {
8
12
  it('should accept valid unscoped plugin names', () => {
9
- expect(validatePluginInput('release')).toEqual({ isValid: true });
10
- expect(validatePluginInput('my-plugin')).toEqual({ isValid: true });
11
- expect(validatePluginInput('analytics-v2')).toEqual({ isValid: true });
13
+ expect(resolver.validateInput('release')).toEqual({ isValid: true });
14
+ expect(resolver.validateInput('my-plugin')).toEqual({ isValid: true });
15
+ expect(resolver.validateInput('analytics-v2')).toEqual({ isValid: true });
12
16
  });
13
17
  it('should accept valid scoped npm packages', () => {
14
- expect(validatePluginInput('@ibm/plugin-name')).toEqual({ isValid: true });
15
- expect(validatePluginInput('@launch77-shared/plugin-release')).toEqual({ isValid: true });
16
- expect(validatePluginInput('@org/analytics')).toEqual({ isValid: true });
18
+ expect(resolver.validateInput('@ibm/plugin-name')).toEqual({ isValid: true });
19
+ expect(resolver.validateInput('@launch77-shared/plugin-release')).toEqual({ isValid: true });
20
+ expect(resolver.validateInput('@org/analytics')).toEqual({ isValid: true });
17
21
  });
18
22
  it('should reject empty names', () => {
19
- const result = validatePluginInput('');
23
+ const result = resolver.validateInput('');
20
24
  expect(result.isValid).toBe(false);
21
25
  expect(result.error).toBeDefined();
22
26
  });
23
27
  it('should reject whitespace-only names', () => {
24
- const result = validatePluginInput(' ');
28
+ const result = resolver.validateInput(' ');
25
29
  expect(result.isValid).toBe(false);
26
30
  expect(result.error).toBeDefined();
27
31
  });
28
32
  it('should reject invalid scoped packages', () => {
29
- const result1 = validatePluginInput('@invalid');
33
+ const result1 = resolver.validateInput('@invalid');
30
34
  expect(result1.isValid).toBe(false);
31
35
  expect(result1.error).toBeDefined();
32
- const result2 = validatePluginInput('@/package');
36
+ const result2 = resolver.validateInput('@/package');
33
37
  expect(result2.isValid).toBe(false);
34
38
  expect(result2.error).toBeDefined();
35
- const result3 = validatePluginInput('@org/');
39
+ const result3 = resolver.validateInput('@org/');
36
40
  expect(result3.isValid).toBe(false);
37
41
  expect(result3.error).toBeDefined();
38
42
  });
39
43
  it('should reject names with uppercase letters', () => {
40
- const result = validatePluginInput('MyPlugin');
44
+ const result = resolver.validateInput('MyPlugin');
41
45
  expect(result.isValid).toBe(false);
42
46
  expect(result.error).toContain('lowercase');
43
47
  });
44
48
  it('should reject names starting with numbers', () => {
45
- const result = validatePluginInput('123plugin');
49
+ const result = resolver.validateInput('123plugin');
46
50
  expect(result.isValid).toBe(false);
47
51
  expect(result.error).toBeDefined();
48
52
  });
49
53
  it('should reject names with special characters', () => {
50
- const result1 = validatePluginInput('plugin_name');
54
+ const result1 = resolver.validateInput('plugin_name');
51
55
  expect(result1.isValid).toBe(false);
52
- const result2 = validatePluginInput('plugin.name');
56
+ const result2 = resolver.validateInput('plugin.name');
53
57
  expect(result2.isValid).toBe(false);
54
- const result3 = validatePluginInput('plugin name');
58
+ const result3 = resolver.validateInput('plugin name');
55
59
  expect(result3.isValid).toBe(false);
56
60
  });
57
61
  it('should trim whitespace before validation', () => {
58
- expect(validatePluginInput(' release ')).toEqual({ isValid: true });
59
- expect(validatePluginInput(' @ibm/analytics ')).toEqual({ isValid: true });
62
+ expect(resolver.validateInput(' release ')).toEqual({ isValid: true });
63
+ expect(resolver.validateInput(' @ibm/analytics ')).toEqual({ isValid: true });
60
64
  });
61
65
  });
62
66
  describe('toNpmPackageName', () => {
63
67
  it('should prefix unscoped names with @launch77-shared/plugin-', () => {
64
- expect(toNpmPackageName('release')).toBe('@launch77-shared/plugin-release');
65
- expect(toNpmPackageName('my-plugin')).toBe('@launch77-shared/plugin-my-plugin');
66
- expect(toNpmPackageName('analytics-v2')).toBe('@launch77-shared/plugin-analytics-v2');
68
+ expect(resolver.toNpmPackageName('release')).toBe('@launch77-shared/plugin-release');
69
+ expect(resolver.toNpmPackageName('my-plugin')).toBe('@launch77-shared/plugin-my-plugin');
70
+ expect(resolver.toNpmPackageName('analytics-v2')).toBe('@launch77-shared/plugin-analytics-v2');
67
71
  });
68
72
  it('should return scoped packages as-is', () => {
69
- expect(toNpmPackageName('@ibm/analytics')).toBe('@ibm/analytics');
70
- expect(toNpmPackageName('@launch77-shared/plugin-release')).toBe('@launch77-shared/plugin-release');
71
- expect(toNpmPackageName('@org/package')).toBe('@org/package');
73
+ expect(resolver.toNpmPackageName('@ibm/analytics')).toBe('@ibm/analytics');
74
+ expect(resolver.toNpmPackageName('@launch77-shared/plugin-release')).toBe('@launch77-shared/plugin-release');
75
+ expect(resolver.toNpmPackageName('@org/package')).toBe('@org/package');
72
76
  });
73
77
  it('should trim whitespace', () => {
74
- expect(toNpmPackageName(' release ')).toBe('@launch77-shared/plugin-release');
75
- expect(toNpmPackageName(' @ibm/analytics ')).toBe('@ibm/analytics');
78
+ expect(resolver.toNpmPackageName(' release ')).toBe('@launch77-shared/plugin-release');
79
+ expect(resolver.toNpmPackageName(' @ibm/analytics ')).toBe('@ibm/analytics');
76
80
  });
77
81
  });
78
- describe('resolvePluginLocation', () => {
82
+ describe('resolveLocation', () => {
79
83
  let tempDir;
80
84
  beforeEach(async () => {
81
85
  // Create a temporary workspace directory
@@ -92,16 +96,18 @@ describe('Plugin Resolver', () => {
92
96
  await fs.ensureDir(pluginPath);
93
97
  await fs.ensureDir(path.join(pluginPath, 'dist'));
94
98
  await fs.writeFile(path.join(pluginPath, 'plugin.json'), JSON.stringify({ name: 'my-plugin', version: '1.0.0' }));
99
+ await fs.writeFile(path.join(pluginPath, 'package.json'), JSON.stringify({ name: 'my-plugin', version: '0.0.1' }));
95
100
  await fs.writeFile(path.join(pluginPath, 'dist/generator.js'), 'console.log("test")');
96
- const result = await resolvePluginLocation('my-plugin', tempDir);
101
+ const result = await resolver.resolveLocation('my-plugin', tempDir);
97
102
  expect(result).toEqual({
98
103
  source: 'local',
99
104
  resolvedName: 'my-plugin',
100
105
  localPath: pluginPath,
106
+ version: '0.0.1',
101
107
  });
102
108
  });
103
109
  it('should resolve to npm if local plugin does not exist', async () => {
104
- const result = await resolvePluginLocation('release', tempDir);
110
+ const result = await resolver.resolveLocation('release', tempDir);
105
111
  expect(result).toEqual({
106
112
  source: 'npm',
107
113
  resolvedName: 'release',
@@ -114,7 +120,7 @@ describe('Plugin Resolver', () => {
114
120
  await fs.ensureDir(pluginPath);
115
121
  await fs.ensureDir(path.join(pluginPath, 'dist'));
116
122
  await fs.writeFile(path.join(pluginPath, 'dist/generator.js'), 'console.log("test")');
117
- const result = await resolvePluginLocation('incomplete', tempDir);
123
+ const result = await resolver.resolveLocation('incomplete', tempDir);
118
124
  expect(result).toEqual({
119
125
  source: 'npm',
120
126
  resolvedName: 'incomplete',
@@ -126,7 +132,7 @@ describe('Plugin Resolver', () => {
126
132
  const pluginPath = path.join(tempDir, 'plugins', 'incomplete');
127
133
  await fs.ensureDir(pluginPath);
128
134
  await fs.writeFile(path.join(pluginPath, 'plugin.json'), JSON.stringify({ name: 'incomplete', version: '1.0.0' }));
129
- const result = await resolvePluginLocation('incomplete', tempDir);
135
+ const result = await resolver.resolveLocation('incomplete', tempDir);
130
136
  expect(result).toEqual({
131
137
  source: 'npm',
132
138
  resolvedName: 'incomplete',
@@ -137,7 +143,7 @@ describe('Plugin Resolver', () => {
137
143
  // Even if a directory exists locally, scoped names go to npm
138
144
  const pluginPath = path.join(tempDir, 'plugins', '@ibm');
139
145
  await fs.ensureDir(pluginPath);
140
- const result = await resolvePluginLocation('@ibm/analytics', tempDir);
146
+ const result = await resolver.resolveLocation('@ibm/analytics', tempDir);
141
147
  expect(result).toEqual({
142
148
  source: 'npm',
143
149
  resolvedName: '@ibm/analytics',
@@ -145,7 +151,7 @@ describe('Plugin Resolver', () => {
145
151
  });
146
152
  });
147
153
  it('should resolve scoped @launch77-shared packages to npm', async () => {
148
- const result = await resolvePluginLocation('@launch77-shared/plugin-release', tempDir);
154
+ const result = await resolver.resolveLocation('@launch77-shared/plugin-release', tempDir);
149
155
  expect(result).toEqual({
150
156
  source: 'npm',
151
157
  resolvedName: '@launch77-shared/plugin-release',
@@ -155,7 +161,7 @@ describe('Plugin Resolver', () => {
155
161
  it('should handle plugins directory not existing', async () => {
156
162
  // Remove plugins directory
157
163
  await fs.remove(path.join(tempDir, 'plugins'));
158
- const result = await resolvePluginLocation('release', tempDir);
164
+ const result = await resolver.resolveLocation('release', tempDir);
159
165
  expect(result).toEqual({
160
166
  source: 'npm',
161
167
  resolvedName: 'release',
@@ -163,7 +169,7 @@ describe('Plugin Resolver', () => {
163
169
  });
164
170
  });
165
171
  it('should trim whitespace from plugin names', async () => {
166
- const result = await resolvePluginLocation(' release ', tempDir);
172
+ const result = await resolver.resolveLocation(' release ', tempDir);
167
173
  expect(result).toEqual({
168
174
  source: 'npm',
169
175
  resolvedName: 'release',