@launch77/cli 1.2.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.
- package/.eslintrc.json +6 -0
- package/dist/app-templates/webapp/.env.ci +6 -0
- package/dist/app-templates/webapp/.env.example +9 -0
- package/dist/app-templates/webapp/.eslintrc.json +6 -0
- package/dist/app-templates/webapp/README.md.hbs +80 -0
- package/dist/app-templates/webapp/app/about/page.tsx.hbs +41 -0
- package/dist/app-templates/webapp/app/dashboard/page.tsx.hbs +51 -0
- package/dist/app-templates/webapp/app/globals.css +31 -0
- package/dist/app-templates/webapp/app/layout.tsx.hbs +26 -0
- package/dist/app-templates/webapp/app/page.tsx.hbs +30 -0
- package/dist/app-templates/webapp/next.config.js +99 -0
- package/dist/app-templates/webapp/package.json.hbs +30 -0
- package/dist/app-templates/webapp/postcss.config.js +6 -0
- package/dist/app-templates/webapp/tailwind.config.ts +24 -0
- package/dist/app-templates/webapp/tsconfig.json +29 -0
- package/dist/app-templates/webapp/vercel.json.hbs +7 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +29 -0
- package/dist/cli.js.map +1 -0
- package/dist/infrastructure/filesystem.d.ts +41 -0
- package/dist/infrastructure/filesystem.d.ts.map +1 -0
- package/dist/infrastructure/filesystem.js +61 -0
- package/dist/infrastructure/filesystem.js.map +1 -0
- package/dist/infrastructure/npm.d.ts +9 -0
- package/dist/infrastructure/npm.d.ts.map +1 -0
- package/dist/infrastructure/npm.js +17 -0
- package/dist/infrastructure/npm.js.map +1 -0
- package/dist/infrastructure/template-engine.d.ts +12 -0
- package/dist/infrastructure/template-engine.d.ts.map +1 -0
- package/dist/infrastructure/template-engine.js +40 -0
- package/dist/infrastructure/template-engine.js.map +1 -0
- package/dist/infrastructure/template-generator.d.ts +9 -0
- package/dist/infrastructure/template-generator.d.ts.map +1 -0
- package/dist/infrastructure/template-generator.js +19 -0
- package/dist/infrastructure/template-generator.js.map +1 -0
- package/dist/infrastructure/template.d.ts +20 -0
- package/dist/infrastructure/template.d.ts.map +1 -0
- package/dist/infrastructure/template.js +53 -0
- package/dist/infrastructure/template.js.map +1 -0
- package/dist/modules/app/commands/create-app.d.ts +3 -0
- package/dist/modules/app/commands/create-app.d.ts.map +1 -0
- package/dist/modules/app/commands/create-app.js +51 -0
- package/dist/modules/app/commands/create-app.js.map +1 -0
- package/dist/modules/app/commands/delete-app.d.ts +3 -0
- package/dist/modules/app/commands/delete-app.d.ts.map +1 -0
- package/dist/modules/app/commands/delete-app.js +109 -0
- package/dist/modules/app/commands/delete-app.js.map +1 -0
- package/dist/modules/app/commands/generate-manifest.d.ts +3 -0
- package/dist/modules/app/commands/generate-manifest.d.ts.map +1 -0
- package/dist/modules/app/commands/generate-manifest.js +62 -0
- package/dist/modules/app/commands/generate-manifest.js.map +1 -0
- package/dist/modules/app/commands/validate-manifest.d.ts +3 -0
- package/dist/modules/app/commands/validate-manifest.d.ts.map +1 -0
- package/dist/modules/app/commands/validate-manifest.js +68 -0
- package/dist/modules/app/commands/validate-manifest.js.map +1 -0
- package/dist/modules/app/errors/app-errors.d.ts +19 -0
- package/dist/modules/app/errors/app-errors.d.ts.map +1 -0
- package/dist/modules/app/errors/app-errors.js +37 -0
- package/dist/modules/app/errors/app-errors.js.map +1 -0
- package/dist/modules/app/index.d.ts +10 -0
- package/dist/modules/app/index.d.ts.map +1 -0
- package/dist/modules/app/index.js +11 -0
- package/dist/modules/app/index.js.map +1 -0
- package/dist/modules/app/lib/manifest-schema.d.ts +39 -0
- package/dist/modules/app/lib/manifest-schema.d.ts.map +1 -0
- package/dist/modules/app/lib/manifest-schema.js +44 -0
- package/dist/modules/app/lib/manifest-schema.js.map +1 -0
- package/dist/modules/app/services/app-svc.d.ts +15 -0
- package/dist/modules/app/services/app-svc.d.ts.map +1 -0
- package/dist/modules/app/services/app-svc.js +90 -0
- package/dist/modules/app/services/app-svc.js.map +1 -0
- package/dist/modules/app/services/manifest-svc.d.ts +28 -0
- package/dist/modules/app/services/manifest-svc.d.ts.map +1 -0
- package/dist/modules/app/services/manifest-svc.js +119 -0
- package/dist/modules/app/services/manifest-svc.js.map +1 -0
- package/dist/modules/app/types/app-types.d.ts +21 -0
- package/dist/modules/app/types/app-types.d.ts.map +1 -0
- package/dist/modules/app/types/app-types.js +5 -0
- package/dist/modules/app/types/app-types.js.map +1 -0
- package/dist/modules/catalog/commands/generate.d.ts +9 -0
- package/dist/modules/catalog/commands/generate.d.ts.map +1 -0
- package/dist/modules/catalog/commands/generate.js +94 -0
- package/dist/modules/catalog/commands/generate.js.map +1 -0
- package/dist/modules/catalog/commands/scan.d.ts +9 -0
- package/dist/modules/catalog/commands/scan.d.ts.map +1 -0
- package/dist/modules/catalog/commands/scan.js +43 -0
- package/dist/modules/catalog/commands/scan.js.map +1 -0
- package/dist/modules/catalog/config/catalog-config.d.ts +49 -0
- package/dist/modules/catalog/config/catalog-config.d.ts.map +1 -0
- package/dist/modules/catalog/config/catalog-config.js +116 -0
- package/dist/modules/catalog/config/catalog-config.js.map +1 -0
- package/dist/modules/catalog/config/catalog-config.test.d.ts +2 -0
- package/dist/modules/catalog/config/catalog-config.test.d.ts.map +1 -0
- package/dist/modules/catalog/config/catalog-config.test.js +362 -0
- package/dist/modules/catalog/config/catalog-config.test.js.map +1 -0
- package/dist/modules/catalog/index.d.ts +9 -0
- package/dist/modules/catalog/index.d.ts.map +1 -0
- package/dist/modules/catalog/index.js +9 -0
- package/dist/modules/catalog/index.js.map +1 -0
- package/dist/modules/catalog/parsers/typescript-parser.d.ts +15 -0
- package/dist/modules/catalog/parsers/typescript-parser.d.ts.map +1 -0
- package/dist/modules/catalog/parsers/typescript-parser.js +82 -0
- package/dist/modules/catalog/parsers/typescript-parser.js.map +1 -0
- package/dist/modules/catalog/scanners/metadata-extractor.d.ts +10 -0
- package/dist/modules/catalog/scanners/metadata-extractor.d.ts.map +1 -0
- package/dist/modules/catalog/scanners/metadata-extractor.js +122 -0
- package/dist/modules/catalog/scanners/metadata-extractor.js.map +1 -0
- package/dist/modules/catalog/scanners/metadata-validator.d.ts +6 -0
- package/dist/modules/catalog/scanners/metadata-validator.d.ts.map +1 -0
- package/dist/modules/catalog/scanners/metadata-validator.js +57 -0
- package/dist/modules/catalog/scanners/metadata-validator.js.map +1 -0
- package/dist/modules/catalog/scanners/ui-component-scanner.d.ts +11 -0
- package/dist/modules/catalog/scanners/ui-component-scanner.d.ts.map +1 -0
- package/dist/modules/catalog/scanners/ui-component-scanner.js +147 -0
- package/dist/modules/catalog/scanners/ui-component-scanner.js.map +1 -0
- package/dist/modules/catalog/schemas/catalog-ui-components.schema.json +161 -0
- package/dist/modules/catalog/schemas/schemas/catalog-ui-components.schema.json +145 -0
- package/dist/modules/catalog/services/catalog-generator-svc.d.ts +27 -0
- package/dist/modules/catalog/services/catalog-generator-svc.d.ts.map +1 -0
- package/dist/modules/catalog/services/catalog-generator-svc.js +100 -0
- package/dist/modules/catalog/services/catalog-generator-svc.js.map +1 -0
- package/dist/modules/catalog/services/catalog-generator-svc.test.d.ts +2 -0
- package/dist/modules/catalog/services/catalog-generator-svc.test.d.ts.map +1 -0
- package/dist/modules/catalog/services/catalog-generator-svc.test.js +201 -0
- package/dist/modules/catalog/services/catalog-generator-svc.test.js.map +1 -0
- package/dist/modules/catalog/services/catalog-svc.d.ts +39 -0
- package/dist/modules/catalog/services/catalog-svc.d.ts.map +1 -0
- package/dist/modules/catalog/services/catalog-svc.js +163 -0
- package/dist/modules/catalog/services/catalog-svc.js.map +1 -0
- package/dist/modules/catalog/types/catalog-types.d.ts +120 -0
- package/dist/modules/catalog/types/catalog-types.d.ts.map +1 -0
- package/dist/modules/catalog/types/catalog-types.js +5 -0
- package/dist/modules/catalog/types/catalog-types.js.map +1 -0
- package/dist/modules/catalog/utils/examples-generator.d.ts +6 -0
- package/dist/modules/catalog/utils/examples-generator.d.ts.map +1 -0
- package/dist/modules/catalog/utils/examples-generator.js +55 -0
- package/dist/modules/catalog/utils/examples-generator.js.map +1 -0
- package/dist/modules/catalog/utils/quality-reporter.d.ts +13 -0
- package/dist/modules/catalog/utils/quality-reporter.d.ts.map +1 -0
- package/dist/modules/catalog/utils/quality-reporter.js +64 -0
- package/dist/modules/catalog/utils/quality-reporter.js.map +1 -0
- package/dist/modules/catalog/validators/component-name-validator.d.ts +20 -0
- package/dist/modules/catalog/validators/component-name-validator.d.ts.map +1 -0
- package/dist/modules/catalog/validators/component-name-validator.js +33 -0
- package/dist/modules/catalog/validators/component-name-validator.js.map +1 -0
- package/dist/modules/catalog/validators/component-name-validator.test.d.ts +2 -0
- package/dist/modules/catalog/validators/component-name-validator.test.d.ts.map +1 -0
- package/dist/modules/catalog/validators/component-name-validator.test.js +196 -0
- package/dist/modules/catalog/validators/component-name-validator.test.js.map +1 -0
- package/dist/modules/deploy/commands/deploy-init-action.d.ts +12 -0
- package/dist/modules/deploy/commands/deploy-init-action.d.ts.map +1 -0
- package/dist/modules/deploy/commands/deploy-init-action.js +220 -0
- package/dist/modules/deploy/commands/deploy-init-action.js.map +1 -0
- package/dist/modules/deploy/commands/deploy-init.d.ts +6 -0
- package/dist/modules/deploy/commands/deploy-init.d.ts.map +1 -0
- package/dist/modules/deploy/commands/deploy-init.js +16 -0
- package/dist/modules/deploy/commands/deploy-init.js.map +1 -0
- package/dist/modules/deploy/commands/deploy-logs-action.d.ts +12 -0
- package/dist/modules/deploy/commands/deploy-logs-action.d.ts.map +1 -0
- package/dist/modules/deploy/commands/deploy-logs-action.js +113 -0
- package/dist/modules/deploy/commands/deploy-logs-action.js.map +1 -0
- package/dist/modules/deploy/commands/deploy-logs.d.ts +6 -0
- package/dist/modules/deploy/commands/deploy-logs.d.ts.map +1 -0
- package/dist/modules/deploy/commands/deploy-logs.js +17 -0
- package/dist/modules/deploy/commands/deploy-logs.js.map +1 -0
- package/dist/modules/deploy/commands/deploy-status-action.d.ts +8 -0
- package/dist/modules/deploy/commands/deploy-status-action.d.ts.map +1 -0
- package/dist/modules/deploy/commands/deploy-status-action.js +153 -0
- package/dist/modules/deploy/commands/deploy-status-action.js.map +1 -0
- package/dist/modules/deploy/commands/deploy-status.d.ts +6 -0
- package/dist/modules/deploy/commands/deploy-status.d.ts.map +1 -0
- package/dist/modules/deploy/commands/deploy-status.js +13 -0
- package/dist/modules/deploy/commands/deploy-status.js.map +1 -0
- package/dist/modules/deploy/index.d.ts +7 -0
- package/dist/modules/deploy/index.d.ts.map +1 -0
- package/dist/modules/deploy/index.js +7 -0
- package/dist/modules/deploy/index.js.map +1 -0
- package/dist/modules/deploy/services/deploy-svc.d.ts +17 -0
- package/dist/modules/deploy/services/deploy-svc.d.ts.map +1 -0
- package/dist/modules/deploy/services/deploy-svc.js +25 -0
- package/dist/modules/deploy/services/deploy-svc.js.map +1 -0
- package/dist/modules/deploy/utils/vercel-extended.d.ts +63 -0
- package/dist/modules/deploy/utils/vercel-extended.d.ts.map +1 -0
- package/dist/modules/deploy/utils/vercel-extended.js +238 -0
- package/dist/modules/deploy/utils/vercel-extended.js.map +1 -0
- package/dist/modules/plugin/commands/plugin-install.d.ts +3 -0
- package/dist/modules/plugin/commands/plugin-install.d.ts.map +1 -0
- package/dist/modules/plugin/commands/plugin-install.js +45 -0
- package/dist/modules/plugin/commands/plugin-install.js.map +1 -0
- package/dist/modules/plugin/errors/plugin-errors.d.ts +16 -0
- package/dist/modules/plugin/errors/plugin-errors.d.ts.map +1 -0
- package/dist/modules/plugin/errors/plugin-errors.js +39 -0
- package/dist/modules/plugin/errors/plugin-errors.js.map +1 -0
- package/dist/modules/plugin/index.d.ts +6 -0
- package/dist/modules/plugin/index.d.ts.map +1 -0
- package/dist/modules/plugin/index.js +9 -0
- package/dist/modules/plugin/index.js.map +1 -0
- package/dist/modules/plugin/lib/plugin-registry.d.ts +15 -0
- package/dist/modules/plugin/lib/plugin-registry.d.ts.map +1 -0
- package/dist/modules/plugin/lib/plugin-registry.js +47 -0
- package/dist/modules/plugin/lib/plugin-registry.js.map +1 -0
- package/dist/modules/plugin/services/plugin-svc.d.ts +10 -0
- package/dist/modules/plugin/services/plugin-svc.d.ts.map +1 -0
- package/dist/modules/plugin/services/plugin-svc.js +44 -0
- package/dist/modules/plugin/services/plugin-svc.js.map +1 -0
- package/dist/modules/plugin/types/plugin-types.d.ts +19 -0
- package/dist/modules/plugin/types/plugin-types.d.ts.map +1 -0
- package/dist/modules/plugin/types/plugin-types.js +2 -0
- package/dist/modules/plugin/types/plugin-types.js.map +1 -0
- package/dist/modules/startup/commands/create-startup.d.ts +3 -0
- package/dist/modules/startup/commands/create-startup.d.ts.map +1 -0
- package/dist/modules/startup/commands/create-startup.js +43 -0
- package/dist/modules/startup/commands/create-startup.js.map +1 -0
- package/dist/modules/startup/errors/startup-errors.d.ts +13 -0
- package/dist/modules/startup/errors/startup-errors.d.ts.map +1 -0
- package/dist/modules/startup/errors/startup-errors.js +25 -0
- package/dist/modules/startup/errors/startup-errors.js.map +1 -0
- package/dist/modules/startup/index.d.ts +5 -0
- package/dist/modules/startup/index.d.ts.map +1 -0
- package/dist/modules/startup/index.js +7 -0
- package/dist/modules/startup/index.js.map +1 -0
- package/dist/modules/startup/services/startup-service.d.ts +7 -0
- package/dist/modules/startup/services/startup-service.d.ts.map +1 -0
- package/dist/modules/startup/services/startup-service.js +43 -0
- package/dist/modules/startup/services/startup-service.js.map +1 -0
- package/dist/modules/startup/types/startup-types.d.ts +8 -0
- package/dist/modules/startup/types/startup-types.d.ts.map +1 -0
- package/dist/modules/startup/types/startup-types.js +2 -0
- package/dist/modules/startup/types/startup-types.js.map +1 -0
- package/dist/modules/startup/utils/startup-validators.d.ts +8 -0
- package/dist/modules/startup/utils/startup-validators.d.ts.map +1 -0
- package/dist/modules/startup/utils/startup-validators.js +17 -0
- package/dist/modules/startup/utils/startup-validators.js.map +1 -0
- package/dist/modules/workspace/commands/init-workspace.d.ts +3 -0
- package/dist/modules/workspace/commands/init-workspace.d.ts.map +1 -0
- package/dist/modules/workspace/commands/init-workspace.js +54 -0
- package/dist/modules/workspace/commands/init-workspace.js.map +1 -0
- package/dist/modules/workspace/errors/workspace-errors.d.ts +10 -0
- package/dist/modules/workspace/errors/workspace-errors.d.ts.map +1 -0
- package/dist/modules/workspace/errors/workspace-errors.js +19 -0
- package/dist/modules/workspace/errors/workspace-errors.js.map +1 -0
- package/dist/modules/workspace/index.d.ts +5 -0
- package/dist/modules/workspace/index.d.ts.map +1 -0
- package/dist/modules/workspace/index.js +7 -0
- package/dist/modules/workspace/index.js.map +1 -0
- package/dist/modules/workspace/services/workspace-service.d.ts +6 -0
- package/dist/modules/workspace/services/workspace-service.d.ts.map +1 -0
- package/dist/modules/workspace/services/workspace-service.js +46 -0
- package/dist/modules/workspace/services/workspace-service.js.map +1 -0
- package/dist/modules/workspace/types/workspace-types.d.ts +8 -0
- package/dist/modules/workspace/types/workspace-types.d.ts.map +1 -0
- package/dist/modules/workspace/types/workspace-types.js +2 -0
- package/dist/modules/workspace/types/workspace-types.js.map +1 -0
- package/dist/modules/workspace/utils/workspace-validators.d.ts +8 -0
- package/dist/modules/workspace/utils/workspace-validators.d.ts.map +1 -0
- package/dist/modules/workspace/utils/workspace-validators.js +17 -0
- package/dist/modules/workspace/utils/workspace-validators.js.map +1 -0
- package/dist/plugins/theme/package.json +32 -0
- package/dist/plugins/theme/plugin.json +9 -0
- package/dist/plugins/theme/src/generator.ts +92 -0
- package/dist/plugins/theme/src/utils/config-modifier.ts +142 -0
- package/dist/plugins/theme/src/utils/css-modifier.ts +89 -0
- package/dist/plugins/theme/templates/app/theme-test/page.tsx +156 -0
- package/dist/plugins/theme/templates/src/modules/theme/README.md +209 -0
- package/dist/plugins/theme/templates/src/modules/theme/config/brand.css +23 -0
- package/dist/plugins/theme/tsconfig.json +14 -0
- package/dist/plugins/theme/tsup.config.ts +10 -0
- package/dist/templates/startup/apps/.gitkeep +8 -0
- package/dist/templates/templates/startup/apps/.gitkeep +8 -0
- package/dist/templates/templates/workspace/.eslintignore +7 -0
- package/dist/templates/templates/workspace/.eslintrc.js +38 -0
- package/dist/templates/templates/workspace/.husky/pre-push +24 -0
- package/dist/templates/templates/workspace/.launch77/workspace.json +3 -0
- package/dist/templates/templates/workspace/.lintstagedrc.json +4 -0
- package/dist/templates/templates/workspace/.prettierrc +9 -0
- package/dist/templates/templates/workspace/README.md +62 -0
- package/dist/templates/templates/workspace/app-templates/.gitkeep +1 -0
- package/dist/templates/templates/workspace/apps/.gitkeep +1 -0
- package/dist/templates/templates/workspace/libraries/.gitkeep +1 -0
- package/dist/templates/templates/workspace/package.json +31 -0
- package/dist/templates/templates/workspace/plugins/.gitkeep +1 -0
- package/dist/templates/templates/workspace/tsconfig.json +22 -0
- package/dist/templates/templates/workspace/turbo.json +25 -0
- package/dist/templates/workspace/.launch77/workspace.json +3 -0
- package/dist/templates/workspace/README.md +62 -0
- package/dist/templates/workspace/app-templates/.gitkeep +1 -0
- package/dist/templates/workspace/apps/.gitkeep +1 -0
- package/dist/templates/workspace/libraries/.gitkeep +1 -0
- package/dist/templates/workspace/package.json +21 -0
- package/dist/templates/workspace/plugins/.gitkeep +1 -0
- package/dist/templates/workspace/tsconfig.json +22 -0
- package/dist/templates/workspace/turbo.json +25 -0
- package/dist/utils/launch77-context.d.ts +16 -0
- package/dist/utils/launch77-context.d.ts.map +1 -0
- package/dist/utils/launch77-context.js +111 -0
- package/dist/utils/launch77-context.js.map +1 -0
- package/dist/utils/launch77-validation.d.ts +17 -0
- package/dist/utils/launch77-validation.d.ts.map +1 -0
- package/dist/utils/launch77-validation.js +44 -0
- package/dist/utils/launch77-validation.js.map +1 -0
- package/dist/utils/monorepo.d.ts +19 -0
- package/dist/utils/monorepo.d.ts.map +1 -0
- package/dist/utils/monorepo.js +100 -0
- package/dist/utils/monorepo.js.map +1 -0
- package/dist/utils/validation.d.ts +32 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +92 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +16 -0
- package/dist/utils/version.js.map +1 -0
- package/launch77-cli-1.2.0.tgz +0 -0
- package/package.json +48 -0
- package/src/cli.ts +34 -0
- package/src/infrastructure/filesystem.ts +69 -0
- package/src/infrastructure/npm.ts +18 -0
- package/src/infrastructure/template-engine.ts +48 -0
- package/src/infrastructure/template-generator.ts +26 -0
- package/src/infrastructure/template.ts +66 -0
- package/src/modules/app/commands/create-app.ts +60 -0
- package/src/modules/app/commands/delete-app.ts +123 -0
- package/src/modules/app/commands/generate-manifest.ts +75 -0
- package/src/modules/app/commands/validate-manifest.ts +78 -0
- package/src/modules/app/errors/app-errors.ts +41 -0
- package/src/modules/app/index.ts +16 -0
- package/src/modules/app/lib/manifest-schema.ts +65 -0
- package/src/modules/app/services/app-svc.ts +115 -0
- package/src/modules/app/services/manifest-svc.ts +144 -0
- package/src/modules/app/types/app-types.ts +27 -0
- package/src/modules/catalog/commands/generate.ts +115 -0
- package/src/modules/catalog/commands/scan.ts +48 -0
- package/src/modules/catalog/config/catalog-config.test.ts +404 -0
- package/src/modules/catalog/config/catalog-config.ts +130 -0
- package/src/modules/catalog/index.ts +9 -0
- package/src/modules/catalog/parsers/typescript-parser.ts +93 -0
- package/src/modules/catalog/scanners/metadata-extractor.ts +134 -0
- package/src/modules/catalog/scanners/metadata-validator.ts +67 -0
- package/src/modules/catalog/scanners/ui-component-scanner.ts +185 -0
- package/src/modules/catalog/schemas/catalog-ui-components.schema.json +145 -0
- package/src/modules/catalog/services/catalog-generator-svc.test.ts +233 -0
- package/src/modules/catalog/services/catalog-generator-svc.ts +124 -0
- package/src/modules/catalog/services/catalog-svc.ts +222 -0
- package/src/modules/catalog/types/catalog-types.ts +149 -0
- package/src/modules/catalog/utils/examples-generator.ts +68 -0
- package/src/modules/catalog/utils/quality-reporter.ts +76 -0
- package/src/modules/catalog/validators/component-name-validator.test.ts +233 -0
- package/src/modules/catalog/validators/component-name-validator.ts +43 -0
- package/src/modules/deploy/commands/deploy-init-action.ts +247 -0
- package/src/modules/deploy/commands/deploy-init.ts +19 -0
- package/src/modules/deploy/commands/deploy-logs-action.ts +135 -0
- package/src/modules/deploy/commands/deploy-logs.ts +20 -0
- package/src/modules/deploy/commands/deploy-status-action.ts +175 -0
- package/src/modules/deploy/commands/deploy-status.ts +16 -0
- package/src/modules/deploy/index.ts +7 -0
- package/src/modules/deploy/services/deploy-svc.ts +31 -0
- package/src/modules/deploy/utils/vercel-extended.ts +286 -0
- package/src/modules/plugin/commands/plugin-install.ts +51 -0
- package/src/modules/plugin/errors/plugin-errors.ts +44 -0
- package/src/modules/plugin/index.ts +14 -0
- package/src/modules/plugin/lib/launch77-workspace.code-workspace +14 -0
- package/src/modules/plugin/lib/plugin-registry.ts +59 -0
- package/src/modules/plugin/services/plugin-svc.ts +53 -0
- package/src/modules/plugin/types/plugin-types.ts +21 -0
- package/src/modules/startup/commands/create-startup.ts +53 -0
- package/src/modules/startup/errors/startup-errors.ts +23 -0
- package/src/modules/startup/index.ts +11 -0
- package/src/modules/startup/services/startup-service.ts +57 -0
- package/src/modules/startup/types/startup-types.ts +8 -0
- package/src/modules/startup/utils/startup-validators.ts +19 -0
- package/src/modules/workspace/commands/init-workspace.ts +63 -0
- package/src/modules/workspace/errors/workspace-errors.ts +16 -0
- package/src/modules/workspace/index.ts +11 -0
- package/src/modules/workspace/services/workspace-service.ts +59 -0
- package/src/modules/workspace/types/workspace-types.ts +8 -0
- package/src/modules/workspace/utils/workspace-validators.ts +19 -0
- package/src/utils/launch77-context.ts +152 -0
- package/src/utils/launch77-validation.ts +59 -0
- package/src/utils/monorepo.ts +137 -0
- package/src/utils/validation.ts +117 -0
- package/src/utils/version.ts +16 -0
- package/templates/startup/apps/.gitkeep +8 -0
- package/templates/workspace/.eslintignore +7 -0
- package/templates/workspace/.eslintrc.js +38 -0
- package/templates/workspace/.husky/pre-push +24 -0
- package/templates/workspace/.launch77/workspace.json +3 -0
- package/templates/workspace/.lintstagedrc.json +4 -0
- package/templates/workspace/.prettierrc +9 -0
- package/templates/workspace/README.md +62 -0
- package/templates/workspace/app-templates/.gitkeep +1 -0
- package/templates/workspace/apps/.gitkeep +1 -0
- package/templates/workspace/libraries/.gitkeep +1 -0
- package/templates/workspace/package.json +31 -0
- package/templates/workspace/plugins/.gitkeep +1 -0
- package/templates/workspace/tsconfig.json +22 -0
- package/templates/workspace/turbo.json +25 -0
- package/tsconfig.json +23 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export class AppAlreadyExistsError extends Error {
|
|
2
|
+
constructor(appName, appPath) {
|
|
3
|
+
super(`App ${appName} already exists at ${appPath}`);
|
|
4
|
+
this.name = 'AppAlreadyExistsError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class AppNotFoundError extends Error {
|
|
8
|
+
constructor(appName, expectedPath) {
|
|
9
|
+
super(`App '${appName}' does not exist at ${expectedPath}`);
|
|
10
|
+
this.name = 'AppNotFoundError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class InvalidAppNameError extends Error {
|
|
14
|
+
constructor(appName, reason) {
|
|
15
|
+
super(`Invalid app name '${appName}': ${reason}`);
|
|
16
|
+
this.name = 'InvalidAppNameError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class TemplateNotFoundError extends Error {
|
|
20
|
+
constructor(templateType) {
|
|
21
|
+
super(`Template not found for type: ${templateType}`);
|
|
22
|
+
this.name = 'TemplateNotFoundError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class ManifestNotFoundError extends Error {
|
|
26
|
+
constructor(searchDir) {
|
|
27
|
+
super(`No Launch77 manifest found in ${searchDir} or any parent directory`);
|
|
28
|
+
this.name = 'ManifestNotFoundError';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class InvalidManifestError extends Error {
|
|
32
|
+
constructor(message) {
|
|
33
|
+
super(`Invalid manifest: ${message}`);
|
|
34
|
+
this.name = 'InvalidManifestError';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=app-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-errors.js","sourceRoot":"","sources":["../../../../src/modules/app/errors/app-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe,EAAE,OAAe;QAC1C,KAAK,CAAC,OAAO,OAAO,sBAAsB,OAAO,EAAE,CAAC,CAAA;QACpD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAe,EAAE,YAAoB;QAC/C,KAAK,CAAC,QAAQ,OAAO,uBAAuB,YAAY,EAAE,CAAC,CAAA;QAC3D,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAChC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe,EAAE,MAAc;QACzC,KAAK,CAAC,qBAAqB,OAAO,MAAM,MAAM,EAAE,CAAC,CAAA;QACjD,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,YAAoB;QAC9B,KAAK,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAA;QACrD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,SAAiB;QAC3B,KAAK,CAAC,iCAAiC,SAAS,0BAA0B,CAAC,CAAA;QAC3E,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAA;QACrC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { AppService } from './services/app-svc.js';
|
|
2
|
+
export { ManifestService } from './services/manifest-svc.js';
|
|
3
|
+
export type { CreateAppRequest, CreateAppResult, DeleteAppRequest, DeleteAppResult, AppType } from './types/app-types.js';
|
|
4
|
+
export type { AppManifest, DeploymentConfig } from './lib/manifest-schema.js';
|
|
5
|
+
export { AppAlreadyExistsError, AppNotFoundError, InvalidAppNameError, TemplateNotFoundError, ManifestNotFoundError, InvalidManifestError } from './errors/app-errors.js';
|
|
6
|
+
export { createAppCommand } from './commands/create-app.js';
|
|
7
|
+
export { deleteAppCommand } from './commands/delete-app.js';
|
|
8
|
+
export { generateManifestCommand } from './commands/generate-manifest.js';
|
|
9
|
+
export { validateManifestCommand } from './commands/validate-manifest.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/app/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAG5D,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzH,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAG7E,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAGzK,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Services
|
|
2
|
+
export { AppService } from './services/app-svc.js';
|
|
3
|
+
export { ManifestService } from './services/manifest-svc.js';
|
|
4
|
+
// Errors
|
|
5
|
+
export { AppAlreadyExistsError, AppNotFoundError, InvalidAppNameError, TemplateNotFoundError, ManifestNotFoundError, InvalidManifestError } from './errors/app-errors.js';
|
|
6
|
+
// Commands
|
|
7
|
+
export { createAppCommand } from './commands/create-app.js';
|
|
8
|
+
export { deleteAppCommand } from './commands/delete-app.js';
|
|
9
|
+
export { generateManifestCommand } from './commands/generate-manifest.js';
|
|
10
|
+
export { validateManifestCommand } from './commands/validate-manifest.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/app/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAM5D,SAAS;AACT,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAEzK,WAAW;AACX,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { AppType } from '../types/app-types.js';
|
|
3
|
+
export type DeploymentConfig = {
|
|
4
|
+
platform: 'vercel';
|
|
5
|
+
connected: boolean;
|
|
6
|
+
connectedAt?: string;
|
|
7
|
+
projectName?: string;
|
|
8
|
+
};
|
|
9
|
+
export type AppManifest = {
|
|
10
|
+
schemaVersion: 1;
|
|
11
|
+
name: string;
|
|
12
|
+
type: AppType | 'marketing';
|
|
13
|
+
package: string;
|
|
14
|
+
deployment?: DeploymentConfig;
|
|
15
|
+
};
|
|
16
|
+
export declare const manifestZ: z.ZodObject<{
|
|
17
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
18
|
+
name: z.ZodString;
|
|
19
|
+
type: z.ZodEnum<{
|
|
20
|
+
api: "api";
|
|
21
|
+
webapp: "webapp";
|
|
22
|
+
marketing: "marketing";
|
|
23
|
+
}>;
|
|
24
|
+
package: z.ZodString;
|
|
25
|
+
deployment: z.ZodOptional<z.ZodObject<{
|
|
26
|
+
platform: z.ZodLiteral<"vercel">;
|
|
27
|
+
connected: z.ZodBoolean;
|
|
28
|
+
connectedAt: z.ZodOptional<z.ZodString>;
|
|
29
|
+
projectName: z.ZodOptional<z.ZodString>;
|
|
30
|
+
}, z.core.$strip>>;
|
|
31
|
+
}, z.core.$strict>;
|
|
32
|
+
/**
|
|
33
|
+
* Parse and validate a manifest from unknown JSON data
|
|
34
|
+
* @param json - Unknown JSON data to parse
|
|
35
|
+
* @returns Validated AppManifest
|
|
36
|
+
* @throws ZodError with aggregated error messages
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseManifest(json: unknown): AppManifest;
|
|
39
|
+
//# sourceMappingURL=manifest-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-schema.d.ts","sourceRoot":"","sources":["../../../../src/modules/app/lib/manifest-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAGpD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAGD,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,EAAE,CAAC,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,GAAG,WAAW,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAC9B,CAAA;AAYD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;kBAQX,CAAA;AAEX;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAiBxD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
// Zod schemas
|
|
3
|
+
const deploymentConfigZ = z.object({
|
|
4
|
+
platform: z.literal('vercel'),
|
|
5
|
+
connected: z.boolean(),
|
|
6
|
+
connectedAt: z.string().optional(),
|
|
7
|
+
projectName: z.string().optional(),
|
|
8
|
+
});
|
|
9
|
+
// Main manifest schema - strict mode to reject extra fields
|
|
10
|
+
// Note: Manifests store 'marketing' but we accept 'marketing-site' in commands
|
|
11
|
+
export const manifestZ = z
|
|
12
|
+
.object({
|
|
13
|
+
schemaVersion: z.literal(1),
|
|
14
|
+
name: z.string().min(1),
|
|
15
|
+
type: z.enum(['marketing', 'webapp', 'api']),
|
|
16
|
+
package: z.string().min(1),
|
|
17
|
+
deployment: deploymentConfigZ.optional(),
|
|
18
|
+
})
|
|
19
|
+
.strict();
|
|
20
|
+
/**
|
|
21
|
+
* Parse and validate a manifest from unknown JSON data
|
|
22
|
+
* @param json - Unknown JSON data to parse
|
|
23
|
+
* @returns Validated AppManifest
|
|
24
|
+
* @throws ZodError with aggregated error messages
|
|
25
|
+
*/
|
|
26
|
+
export function parseManifest(json) {
|
|
27
|
+
try {
|
|
28
|
+
return manifestZ.parse(json);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
if (error instanceof z.ZodError) {
|
|
32
|
+
// Format error messages nicely
|
|
33
|
+
const errorMessages = error.issues
|
|
34
|
+
.map((err) => {
|
|
35
|
+
const path = err.path.join('.');
|
|
36
|
+
return ` - ${path ? `${path}: ` : ''}${err.message}`;
|
|
37
|
+
})
|
|
38
|
+
.join('\n');
|
|
39
|
+
throw new Error(`Manifest validation failed:\n${errorMessages}`);
|
|
40
|
+
}
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=manifest-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-schema.js","sourceRoot":"","sources":["../../../../src/modules/app/lib/manifest-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAqBvB,cAAc;AACd,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAA;AAEF,4DAA4D;AAC5D,+EAA+E;AAC/E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,UAAU,EAAE,iBAAiB,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,MAAM,EAAE,CAAA;AAEX;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAA;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,+BAA+B;YAC/B,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM;iBAC/B,GAAG,CAAC,CAAC,GAAe,EAAE,EAAE;gBACvB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC/B,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAA;YACvD,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAA;YAEb,MAAM,IAAI,KAAK,CAAC,gCAAgC,aAAa,EAAE,CAAC,CAAA;QAClE,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Launch77Context } from '../../../utils/launch77-context.js';
|
|
2
|
+
import type { CreateAppRequest, CreateAppResult, DeleteAppRequest, DeleteAppResult } from '../types/app-types.js';
|
|
3
|
+
export declare class AppService {
|
|
4
|
+
private manifestService;
|
|
5
|
+
constructor();
|
|
6
|
+
/**
|
|
7
|
+
* Create a new app from template
|
|
8
|
+
*/
|
|
9
|
+
createApp(request: CreateAppRequest, context: Launch77Context): Promise<CreateAppResult>;
|
|
10
|
+
/**
|
|
11
|
+
* Delete an existing app
|
|
12
|
+
*/
|
|
13
|
+
deleteApp(request: DeleteAppRequest, context: Launch77Context): Promise<DeleteAppResult>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=app-svc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-svc.d.ts","sourceRoot":"","sources":["../../../../src/modules/app/services/app-svc.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEjH,qBAAa,UAAU;IACrB,OAAO,CAAC,eAAe,CAAiB;;IAMxC;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAgD9F;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;CAsC/F"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import { ManifestService } from './manifest-svc.js';
|
|
4
|
+
import * as filesystem from '../../../infrastructure/filesystem.js';
|
|
5
|
+
import * as npm from '../../../infrastructure/npm.js';
|
|
6
|
+
import { generateFromTemplate } from '../../../infrastructure/template-generator.js';
|
|
7
|
+
import { templateExists } from '../../../infrastructure/template.js';
|
|
8
|
+
import { validateWorkspaceContext } from '../../../utils/launch77-validation.js';
|
|
9
|
+
import { validateAppName } from '../../../utils/validation.js';
|
|
10
|
+
export class AppService {
|
|
11
|
+
manifestService;
|
|
12
|
+
constructor() {
|
|
13
|
+
this.manifestService = new ManifestService();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create a new app from template
|
|
17
|
+
*/
|
|
18
|
+
async createApp(request, context) {
|
|
19
|
+
const { type, appName, port } = request;
|
|
20
|
+
// 1. Validate app name
|
|
21
|
+
const nameValidation = validateAppName(appName);
|
|
22
|
+
if (!nameValidation.valid) {
|
|
23
|
+
throw new Error(nameValidation.errorMessage);
|
|
24
|
+
}
|
|
25
|
+
// 2. Validate workspace context
|
|
26
|
+
const contextValidation = validateWorkspaceContext(context);
|
|
27
|
+
if (!contextValidation.valid) {
|
|
28
|
+
throw new Error(contextValidation.errorMessage);
|
|
29
|
+
}
|
|
30
|
+
// 3. Determine app path
|
|
31
|
+
const appPath = path.join(context.appsDir, appName);
|
|
32
|
+
// 4. Check if app already exists
|
|
33
|
+
if (await fs.pathExists(appPath)) {
|
|
34
|
+
throw new Error(`App ${appName} already exists at ${appPath}`);
|
|
35
|
+
}
|
|
36
|
+
// 5. Validate template exists
|
|
37
|
+
if (!(await templateExists(type))) {
|
|
38
|
+
throw new Error(`Unknown app type: ${type}. Currently supported: api, webapp, marketing-site`);
|
|
39
|
+
}
|
|
40
|
+
// 6. Generate from template (context already has packageName computed)
|
|
41
|
+
await generateFromTemplate(type, appPath, appName, context, { port });
|
|
42
|
+
// 7. Generate and write app manifest
|
|
43
|
+
const manifest = this.manifestService.generateManifest(type, appName, context, { port });
|
|
44
|
+
const launchDir = path.join(appPath, '.launch');
|
|
45
|
+
await filesystem.ensureDir(launchDir);
|
|
46
|
+
const manifestPath = path.join(launchDir, 'app.json');
|
|
47
|
+
await filesystem.writeJSON(manifestPath, manifest);
|
|
48
|
+
// 8. Install dependencies
|
|
49
|
+
await npm.install(context.workspaceRoot);
|
|
50
|
+
return {
|
|
51
|
+
appPath,
|
|
52
|
+
appName,
|
|
53
|
+
type,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Delete an existing app
|
|
58
|
+
*/
|
|
59
|
+
async deleteApp(request, context) {
|
|
60
|
+
const { appName } = request;
|
|
61
|
+
// 1. Validate app name
|
|
62
|
+
const nameValidation = validateAppName(appName);
|
|
63
|
+
if (!nameValidation.valid) {
|
|
64
|
+
throw new Error(nameValidation.errorMessage);
|
|
65
|
+
}
|
|
66
|
+
// 2. Validate workspace context
|
|
67
|
+
const contextValidation = validateWorkspaceContext(context);
|
|
68
|
+
if (!contextValidation.valid) {
|
|
69
|
+
throw new Error(contextValidation.errorMessage);
|
|
70
|
+
}
|
|
71
|
+
// 3. Determine app path
|
|
72
|
+
const appPath = path.join(context.appsDir, appName);
|
|
73
|
+
// 4. Check if app exists
|
|
74
|
+
if (!(await fs.pathExists(appPath))) {
|
|
75
|
+
throw new Error(`App '${appName}' does not exist.\n\n` + `Expected location: ${appPath}\n\n` + `Available apps:\n` + ` cd apps/\n` + ` ls`);
|
|
76
|
+
}
|
|
77
|
+
// 5. Check for Docker resources
|
|
78
|
+
const dockerComposePath = path.join(appPath, 'docker-compose.db.yml');
|
|
79
|
+
const hasDockerResources = await fs.pathExists(dockerComposePath);
|
|
80
|
+
// 6. Delete the app directory
|
|
81
|
+
await fs.remove(appPath);
|
|
82
|
+
// 7. Update dependencies
|
|
83
|
+
await npm.install(context.workspaceRoot);
|
|
84
|
+
return {
|
|
85
|
+
appName,
|
|
86
|
+
hadDockerResources: hasDockerResources,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=app-svc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-svc.js","sourceRoot":"","sources":["../../../../src/modules/app/services/app-svc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EAAE,MAAM,UAAU,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAA;AACnE,OAAO,KAAK,GAAG,MAAM,gCAAgC,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAA;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAA;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAK9D,MAAM,OAAO,UAAU;IACb,eAAe,CAAiB;IAExC;QACE,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,OAAyB,EAAE,OAAwB;QACjE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;QAEvC,uBAAuB;QACvB,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QAC/C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;QAC9C,CAAC;QAED,gCAAgC;QAChC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;QAC3D,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAA;QACjD,CAAC;QAED,wBAAwB;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAEnD,iCAAiC;QACjC,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,OAAO,OAAO,sBAAsB,OAAO,EAAE,CAAC,CAAA;QAChE,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,oDAAoD,CAAC,CAAA;QAChG,CAAC;QAED,uEAAuE;QACvE,MAAM,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAErE,qCAAqC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACxF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAC/C,MAAM,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QACrD,MAAM,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;QAElD,0BAA0B;QAC1B,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAExC,OAAO;YACL,OAAO;YACP,OAAO;YACP,IAAI;SACL,CAAA;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,OAAyB,EAAE,OAAwB;QACjE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;QAE3B,uBAAuB;QACvB,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QAC/C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;QAC9C,CAAC;QAED,gCAAgC;QAChC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;QAC3D,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAA;QACjD,CAAC;QAED,wBAAwB;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAEnD,yBAAyB;QACzB,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,QAAQ,OAAO,uBAAuB,GAAG,sBAAsB,OAAO,MAAM,GAAG,mBAAmB,GAAG,cAAc,GAAG,MAAM,CAAC,CAAA;QAC/I,CAAC;QAED,gCAAgC;QAChC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAA;QACrE,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;QAEjE,8BAA8B;QAC9B,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAExB,yBAAyB;QACzB,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAExC,OAAO;YACL,OAAO;YACP,kBAAkB,EAAE,kBAAkB;SACvC,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Launch77Context } from '../../../utils/launch77-context.js';
|
|
2
|
+
import type { AppManifest } from '../lib/manifest-schema.js';
|
|
3
|
+
export declare class ManifestService {
|
|
4
|
+
/**
|
|
5
|
+
* Generate an app manifest based on app type
|
|
6
|
+
*/
|
|
7
|
+
generateManifest(type: string, appName: string, context: Launch77Context, _options: {
|
|
8
|
+
port?: string;
|
|
9
|
+
}): AppManifest;
|
|
10
|
+
/**
|
|
11
|
+
* Load and validate a Launch77 app manifest file
|
|
12
|
+
* @param startDir - Directory to start searching from (defaults to process.cwd())
|
|
13
|
+
* @returns Object containing manifest, manifestPath, and appRoot
|
|
14
|
+
* @throws Error if manifest not found or invalid
|
|
15
|
+
*/
|
|
16
|
+
loadManifest(startDir?: string): Promise<{
|
|
17
|
+
manifest: AppManifest;
|
|
18
|
+
manifestPath: string;
|
|
19
|
+
appRoot: string;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Save a manifest file
|
|
23
|
+
* @param manifestPath - Path to save the manifest
|
|
24
|
+
* @param manifest - Manifest data to save
|
|
25
|
+
*/
|
|
26
|
+
saveManifest(manifestPath: string, manifest: AppManifest): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=manifest-svc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-svc.d.ts","sourceRoot":"","sources":["../../../../src/modules/app/services/manifest-svc.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAuD5D,qBAAa,eAAe;IAC1B;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW;IAiBnH;;;;;OAKG;IACG,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7C,QAAQ,EAAE,WAAW,CAAA;QACrB,YAAY,EAAE,MAAM,CAAA;QACpB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC;IA2CF;;;;OAIG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/E"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { parseManifest } from '../lib/manifest-schema.js';
|
|
4
|
+
/**
|
|
5
|
+
* Convert kebab-case to Title Case
|
|
6
|
+
* e.g., "my-startup-name" -> "My Startup Name"
|
|
7
|
+
*/
|
|
8
|
+
function toTitleCase(str) {
|
|
9
|
+
return str
|
|
10
|
+
.split('-')
|
|
11
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
12
|
+
.join(' ');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Generate a manifest for a marketing app
|
|
16
|
+
*/
|
|
17
|
+
function generateMarketingManifest(appName, context) {
|
|
18
|
+
const workspaceName = context.workspaceName;
|
|
19
|
+
return {
|
|
20
|
+
schemaVersion: 1,
|
|
21
|
+
name: `${toTitleCase(workspaceName)} Marketing`,
|
|
22
|
+
type: 'marketing',
|
|
23
|
+
package: `@${workspaceName}/${appName}`,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate a manifest for a webapp
|
|
28
|
+
*/
|
|
29
|
+
function generateWebappManifest(appName, context) {
|
|
30
|
+
const workspaceName = context.workspaceName;
|
|
31
|
+
return {
|
|
32
|
+
schemaVersion: 1,
|
|
33
|
+
name: `${toTitleCase(workspaceName)} Web`,
|
|
34
|
+
type: 'webapp',
|
|
35
|
+
package: `@${workspaceName}/${appName}`,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Generate a manifest for an API app
|
|
40
|
+
*/
|
|
41
|
+
function generateApiManifest(appName, context) {
|
|
42
|
+
const workspaceName = context.workspaceName;
|
|
43
|
+
return {
|
|
44
|
+
schemaVersion: 1,
|
|
45
|
+
name: `${toTitleCase(workspaceName)} API`,
|
|
46
|
+
type: 'api',
|
|
47
|
+
package: `@${workspaceName}/${appName}`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export class ManifestService {
|
|
51
|
+
/**
|
|
52
|
+
* Generate an app manifest based on app type
|
|
53
|
+
*/
|
|
54
|
+
generateManifest(type, appName, context, _options) {
|
|
55
|
+
switch (type) {
|
|
56
|
+
case 'marketing-site':
|
|
57
|
+
case 'marketing':
|
|
58
|
+
return generateMarketingManifest(appName, context);
|
|
59
|
+
case 'webapp':
|
|
60
|
+
return generateWebappManifest(appName, context);
|
|
61
|
+
case 'api':
|
|
62
|
+
return generateApiManifest(appName, context);
|
|
63
|
+
default:
|
|
64
|
+
throw new Error(`Unsupported app type for manifest generation: ${type}. Supported types: api, webapp, marketing-site`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Load and validate a Launch77 app manifest file
|
|
69
|
+
* @param startDir - Directory to start searching from (defaults to process.cwd())
|
|
70
|
+
* @returns Object containing manifest, manifestPath, and appRoot
|
|
71
|
+
* @throws Error if manifest not found or invalid
|
|
72
|
+
*/
|
|
73
|
+
async loadManifest(startDir) {
|
|
74
|
+
const searchDir = startDir || process.cwd();
|
|
75
|
+
let currentDir = path.resolve(searchDir);
|
|
76
|
+
const root = path.parse(currentDir).root;
|
|
77
|
+
// Walk up the directory tree looking for .launch/app.json
|
|
78
|
+
while (currentDir !== root) {
|
|
79
|
+
const manifestPath = path.join(currentDir, '.launch', 'app.json');
|
|
80
|
+
try {
|
|
81
|
+
const fileContent = await fs.readFile(manifestPath, 'utf-8');
|
|
82
|
+
const jsonData = JSON.parse(fileContent);
|
|
83
|
+
const manifest = parseManifest(jsonData);
|
|
84
|
+
return {
|
|
85
|
+
manifest,
|
|
86
|
+
manifestPath,
|
|
87
|
+
appRoot: currentDir,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
// If file doesn't exist, continue searching up
|
|
92
|
+
if (error.code === 'ENOENT') {
|
|
93
|
+
const parentDir = path.dirname(currentDir);
|
|
94
|
+
if (parentDir === currentDir) {
|
|
95
|
+
break; // Reached root
|
|
96
|
+
}
|
|
97
|
+
currentDir = parentDir;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
// If JSON parse error or validation error, throw with helpful message
|
|
101
|
+
if (error instanceof SyntaxError) {
|
|
102
|
+
throw new Error(`Invalid JSON in ${manifestPath}: ${error.message}`);
|
|
103
|
+
}
|
|
104
|
+
// Re-throw validation errors as-is
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
throw new Error(`No Launch77 manifest found in ${searchDir} or any parent directory.\n` + `Looking for .launch/app.json.\n` + `Create one using 'launch77 create-app' or manually add a .launch/app.json file.`);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Save a manifest file
|
|
112
|
+
* @param manifestPath - Path to save the manifest
|
|
113
|
+
* @param manifest - Manifest data to save
|
|
114
|
+
*/
|
|
115
|
+
async saveManifest(manifestPath, manifest) {
|
|
116
|
+
await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2) + '\n', 'utf-8');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=manifest-svc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-svc.js","sourceRoot":"","sources":["../../../../src/modules/app/services/manifest-svc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const APP_TYPES: readonly ["api", "webapp", "marketing-site"];
|
|
2
|
+
export type AppType = (typeof APP_TYPES)[number];
|
|
3
|
+
export declare const APP_TYPES_LIST: string;
|
|
4
|
+
export interface CreateAppRequest {
|
|
5
|
+
type: AppType;
|
|
6
|
+
appName: string;
|
|
7
|
+
port: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CreateAppResult {
|
|
10
|
+
appPath: string;
|
|
11
|
+
appName: string;
|
|
12
|
+
type: AppType;
|
|
13
|
+
}
|
|
14
|
+
export interface DeleteAppRequest {
|
|
15
|
+
appName: string;
|
|
16
|
+
}
|
|
17
|
+
export interface DeleteAppResult {
|
|
18
|
+
appName: string;
|
|
19
|
+
hadDockerResources: boolean;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=app-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-types.d.ts","sourceRoot":"","sources":["../../../../src/modules/app/types/app-types.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,SAAS,8CAA+C,CAAA;AACrE,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAGhD,eAAO,MAAM,cAAc,QAAuB,CAAA;AAElD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,EAAE,OAAO,CAAA;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-types.js","sourceRoot":"","sources":["../../../../src/modules/app/types/app-types.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,gBAAgB,CAAU,CAAA;AAGrE,kCAAkC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/modules/catalog/commands/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAanC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAqB/C"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI command for generating catalog metadata files
|
|
3
|
+
*/
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import { readCatalogConfig } from '../config/catalog-config.js';
|
|
9
|
+
import { CatalogGeneratorService } from '../services/catalog-generator-svc.js';
|
|
10
|
+
import { printQualityReport } from '../utils/quality-reporter.js';
|
|
11
|
+
/**
|
|
12
|
+
* Create the catalog:generate command
|
|
13
|
+
*/
|
|
14
|
+
export function createGenerateCommand() {
|
|
15
|
+
const command = new Command('catalog:generate')
|
|
16
|
+
.description('Generate catalog metadata for a component library')
|
|
17
|
+
.option('-l, --library <path>', 'Library directory path', process.cwd())
|
|
18
|
+
.option('-c, --config <file>', 'Config file name', 'catalog.config.js')
|
|
19
|
+
.option('--no-strict', 'Allow generation with validation errors (warnings only)')
|
|
20
|
+
.action(async (options) => {
|
|
21
|
+
try {
|
|
22
|
+
await generateCatalog(options);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error(chalk.red('\\nā Catalog generation failed\\n'));
|
|
26
|
+
if (error instanceof Error) {
|
|
27
|
+
console.error(chalk.red(error.message));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.error(chalk.red(String(error)));
|
|
31
|
+
}
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return command;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Execute catalog generation
|
|
39
|
+
*/
|
|
40
|
+
async function generateCatalog(options) {
|
|
41
|
+
const libraryPath = path.resolve(options.library);
|
|
42
|
+
console.log(chalk.blue('\\nš Generating catalog metadata...\\n'));
|
|
43
|
+
console.log(chalk.gray('Library: ' + libraryPath));
|
|
44
|
+
console.log(chalk.gray('Config: ' + options.config + '\\n'));
|
|
45
|
+
// Read and validate configuration
|
|
46
|
+
const spinner = ora('Reading configuration...').start();
|
|
47
|
+
let config;
|
|
48
|
+
try {
|
|
49
|
+
config = await readCatalogConfig(libraryPath);
|
|
50
|
+
spinner.succeed('Configuration loaded');
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
spinner.fail('Failed to load configuration');
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
// Override strict mode if --no-strict flag provided
|
|
57
|
+
if (options.strict === false) {
|
|
58
|
+
config.validation.strict = false;
|
|
59
|
+
console.log(chalk.yellow('ā Running in non-strict mode (validation errors will not fail build)\\n'));
|
|
60
|
+
}
|
|
61
|
+
// Display configuration
|
|
62
|
+
console.log(chalk.gray('Configuration:'));
|
|
63
|
+
console.log(chalk.gray(' Package: ' + config.packageName));
|
|
64
|
+
console.log(chalk.gray(' Catalog version: ' + config.catalogVersion));
|
|
65
|
+
console.log(chalk.gray(' Output file: ' + config.outputFile));
|
|
66
|
+
console.log(chalk.gray(' Strict mode: ' + (config.validation.strict ? 'enabled' : 'disabled') + '\\n'));
|
|
67
|
+
// Generate catalog
|
|
68
|
+
const generationSpinner = ora('Scanning components...').start();
|
|
69
|
+
const service = new CatalogGeneratorService();
|
|
70
|
+
const result = await service.generateForLibrary(libraryPath, config);
|
|
71
|
+
generationSpinner.stop();
|
|
72
|
+
// Display quality report
|
|
73
|
+
console.log(chalk.blue('\\nš Quality Report\\n'));
|
|
74
|
+
printQualityReport(result.qualityReport, config.validation.strict);
|
|
75
|
+
// Handle result
|
|
76
|
+
if (!result.success) {
|
|
77
|
+
console.log(chalk.red('\\nā Catalog generation failed\\n'));
|
|
78
|
+
console.log(chalk.red('Validation errors must be fixed before building.'));
|
|
79
|
+
console.log(chalk.gray('\\nTo fix:'));
|
|
80
|
+
console.log(chalk.gray(' 1. Add @launch77-component JSDoc to components listed above'));
|
|
81
|
+
console.log(chalk.gray(' 2. Or add @launch77-ignore to exclude internal/WIP components'));
|
|
82
|
+
console.log(chalk.gray(' 3. Or run with --no-strict to allow warnings\\n'));
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
// Success!
|
|
86
|
+
console.log(chalk.green('\\nā Generated ' + config.outputFile));
|
|
87
|
+
console.log(chalk.gray(' Quality score: ' + result.qualityReport.qualityScore + '%'));
|
|
88
|
+
console.log(chalk.gray(' Total components: ' + result.qualityReport.totalComponents));
|
|
89
|
+
if (result.warnings.length > 0) {
|
|
90
|
+
console.log(chalk.yellow(' Warnings: ' + result.warnings.length));
|
|
91
|
+
}
|
|
92
|
+
console.log();
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/modules/catalog/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Scan command - Generate catalog.json from Launch77 artifacts
|
|
4
|
+
*
|
|
5
|
+
* Scans UI components, libraries, plugins, and utilities from the Launch77 monorepo
|
|
6
|
+
* and generates a machine-readable catalog for AI discovery.
|
|
7
|
+
*/
|
|
8
|
+
export declare function scanCommand(): Command;
|
|
9
|
+
//# sourceMappingURL=scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../../src/modules/catalog/commands/scan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAmCrC"}
|