@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,163 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import prettier from 'prettier';
|
|
6
|
+
import { scanUILibrary } from '../scanners/ui-component-scanner.js';
|
|
7
|
+
import { generateExamplesFiles } from '../utils/examples-generator.js';
|
|
8
|
+
import { generateQualityReport, printQualityReport } from '../utils/quality-reporter.js';
|
|
9
|
+
/**
|
|
10
|
+
* Catalog Service
|
|
11
|
+
*
|
|
12
|
+
* Scans Launch77 artifacts and generates catalog.json
|
|
13
|
+
*/
|
|
14
|
+
export class CatalogService {
|
|
15
|
+
/**
|
|
16
|
+
* Scan Launch77 codebase and generate catalog.json
|
|
17
|
+
*/
|
|
18
|
+
async scanCatalog(context, options = {}) {
|
|
19
|
+
const strict = options.strict !== false; // Default to true (strict mode)
|
|
20
|
+
const quiet = options.quiet || false;
|
|
21
|
+
console.log(chalk.blue('\nš Scanning Launch77 artifacts...\n'));
|
|
22
|
+
const launch77Root = path.join(context.monorepoRoot, 'launch77');
|
|
23
|
+
const spinner = ora('Scanning codebase...').start();
|
|
24
|
+
// Phase 1: Scan all UI components deterministically (with validation)
|
|
25
|
+
const { components: uiComponents, validations, excluded } = await this.scanAllUIComponents(launch77Root);
|
|
26
|
+
spinner.succeed(`Found ${uiComponents.length} UI components`);
|
|
27
|
+
console.log(chalk.gray(` ⢠${uiComponents.length} UI components`));
|
|
28
|
+
if (excluded > 0) {
|
|
29
|
+
console.log(chalk.gray(` ⢠${excluded} excluded (@launch77-ignore)`));
|
|
30
|
+
}
|
|
31
|
+
// Generate quality report
|
|
32
|
+
const totalScanned = uiComponents.length + excluded;
|
|
33
|
+
const qualityReport = generateQualityReport(totalScanned, excluded, validations);
|
|
34
|
+
// Print quality report unless in quiet mode
|
|
35
|
+
if (!quiet) {
|
|
36
|
+
printQualityReport(qualityReport, strict);
|
|
37
|
+
}
|
|
38
|
+
// In strict mode, fail if there are validation errors
|
|
39
|
+
if (strict && qualityReport.errors.length > 0) {
|
|
40
|
+
throw new Error('Catalog validation failed in strict mode');
|
|
41
|
+
}
|
|
42
|
+
console.log(chalk.blue('\nš Generating catalog with deterministic data...\n'));
|
|
43
|
+
console.log(chalk.green(' ā All required fields populated'));
|
|
44
|
+
console.log(chalk.green(' ā Props extracted via TypeScript AST'));
|
|
45
|
+
// Read existing catalog to check if content changed
|
|
46
|
+
const catalogPath = path.join(launch77Root, 'catalog.json');
|
|
47
|
+
const hasChanges = await this.catalogHasChanges(catalogPath, {
|
|
48
|
+
uiComponents,
|
|
49
|
+
});
|
|
50
|
+
// Get current or next version
|
|
51
|
+
const newVersion = hasChanges ? await this.getNextVersion(catalogPath) : await this.getCurrentVersion(catalogPath);
|
|
52
|
+
if (!hasChanges) {
|
|
53
|
+
console.log(chalk.gray('\n ā¹ No changes detected - version unchanged\n'));
|
|
54
|
+
}
|
|
55
|
+
// Generate examples.generated.ts files for UI libraries with examples
|
|
56
|
+
console.log(chalk.blue('\nš¦ Generating examples exports...'));
|
|
57
|
+
await generateExamplesFiles(uiComponents, launch77Root);
|
|
58
|
+
console.log(chalk.green(' ā Generated examples.generated.ts files'));
|
|
59
|
+
// Build catalog object
|
|
60
|
+
const catalog = {
|
|
61
|
+
$schema: './schemas/catalog.schema.json',
|
|
62
|
+
version: newVersion,
|
|
63
|
+
description: 'Launch77 Platform Artifact Catalog - UI Components',
|
|
64
|
+
uiComponents,
|
|
65
|
+
};
|
|
66
|
+
// Save catalog (no AI enrichment - metadata comes from source code)
|
|
67
|
+
// Use Prettier programmatically to match pre-commit formatting
|
|
68
|
+
const prettierConfig = await prettier.resolveConfig(catalogPath);
|
|
69
|
+
const formatted = await prettier.format(JSON.stringify(catalog, null, 2), {
|
|
70
|
+
...prettierConfig,
|
|
71
|
+
parser: 'json',
|
|
72
|
+
filepath: catalogPath,
|
|
73
|
+
});
|
|
74
|
+
await fs.writeFile(catalogPath, formatted);
|
|
75
|
+
console.log(chalk.blue('\nš¾ Writing catalog.json...\n'));
|
|
76
|
+
console.log(chalk.green(` ā Saved to ${path.relative(process.cwd(), catalogPath)}`));
|
|
77
|
+
// Sync catalog to Launch77 marketing site
|
|
78
|
+
const marketingSiteCatalogPath = path.join(context.monorepoRoot, 'startups/launch77/apps/marketing/src/catalog.json');
|
|
79
|
+
if (await fs.pathExists(path.dirname(marketingSiteCatalogPath))) {
|
|
80
|
+
await fs.writeFile(marketingSiteCatalogPath, formatted);
|
|
81
|
+
console.log(chalk.green(` ā Synced to marketing site`));
|
|
82
|
+
}
|
|
83
|
+
const totalArtifacts = catalog.uiComponents.length;
|
|
84
|
+
console.log(chalk.green(`\nā
Done! ${totalArtifacts} UI components cataloged (version ${newVersion}).\n`));
|
|
85
|
+
return {
|
|
86
|
+
catalogPath,
|
|
87
|
+
version: newVersion,
|
|
88
|
+
totalArtifacts,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Scan all UI components from @launch77/ui and @launch/marketing-ui
|
|
93
|
+
*/
|
|
94
|
+
async scanAllUIComponents(launch77Root) {
|
|
95
|
+
const components = [];
|
|
96
|
+
const validations = [];
|
|
97
|
+
let excluded = 0;
|
|
98
|
+
const uiLibraries = [
|
|
99
|
+
{ path: path.join(launch77Root, 'libraries/ui'), package: '@launch77/ui' },
|
|
100
|
+
{ path: path.join(launch77Root, 'libraries/marketing-ui'), package: '@launch/marketing-ui' },
|
|
101
|
+
];
|
|
102
|
+
for (const lib of uiLibraries) {
|
|
103
|
+
if (await fs.pathExists(lib.path)) {
|
|
104
|
+
const result = await scanUILibrary(lib.path, lib.package);
|
|
105
|
+
components.push(...result.components);
|
|
106
|
+
validations.push(...result.validations);
|
|
107
|
+
excluded += result.excluded;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return { components, validations, excluded };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Check if catalog content has changed (excluding version field)
|
|
114
|
+
*/
|
|
115
|
+
async catalogHasChanges(catalogPath, newContent) {
|
|
116
|
+
if (!(await fs.pathExists(catalogPath))) {
|
|
117
|
+
return true; // No existing catalog = changes
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
const existingCatalog = await fs.readJson(catalogPath);
|
|
121
|
+
// Compare content without version fields
|
|
122
|
+
const existingContent = {
|
|
123
|
+
uiComponents: existingCatalog.uiComponents || [],
|
|
124
|
+
};
|
|
125
|
+
return JSON.stringify(existingContent) !== JSON.stringify(newContent);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
return true; // Error reading = treat as changes
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get current version from existing catalog
|
|
133
|
+
*/
|
|
134
|
+
async getCurrentVersion(catalogPath) {
|
|
135
|
+
if (!(await fs.pathExists(catalogPath))) {
|
|
136
|
+
return '1.0.0';
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
const existingCatalog = await fs.readJson(catalogPath);
|
|
140
|
+
return existingCatalog.version || '1.0.0';
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
return '1.0.0';
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get the next version by incrementing the patch version of existing catalog
|
|
148
|
+
* If no catalog exists, start at 1.0.0
|
|
149
|
+
*/
|
|
150
|
+
async getNextVersion(catalogPath) {
|
|
151
|
+
const currentVersion = await this.getCurrentVersion(catalogPath);
|
|
152
|
+
// Parse version (major.minor.patch)
|
|
153
|
+
const versionParts = currentVersion.split('.');
|
|
154
|
+
const major = parseInt(versionParts[0] || '1', 10);
|
|
155
|
+
const minor = parseInt(versionParts[1] || '0', 10);
|
|
156
|
+
const patch = parseInt(versionParts[2] || '0', 10);
|
|
157
|
+
// Increment patch version
|
|
158
|
+
const newVersion = `${major}.${minor}.${patch + 1}`;
|
|
159
|
+
console.log(chalk.gray(` Version: ${chalk.white(currentVersion)} ā ${chalk.white(newVersion)}\n`));
|
|
160
|
+
return newVersion;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=catalog-svc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-svc.js","sourceRoot":"","sources":["../../../../src/modules/catalog/services/catalog-svc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the Launch77 catalog system
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* UI Component catalog structure
|
|
6
|
+
* Generated by individual component libraries during build
|
|
7
|
+
*/
|
|
8
|
+
export interface UiComponentCatalog {
|
|
9
|
+
$schema?: string;
|
|
10
|
+
catalogType: 'ui-components';
|
|
11
|
+
catalogVersion: string;
|
|
12
|
+
packageName: string;
|
|
13
|
+
packageVersion: string;
|
|
14
|
+
generatedAt: string;
|
|
15
|
+
components: UiComponent[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Complete UI component metadata in catalog
|
|
19
|
+
*/
|
|
20
|
+
export interface UiComponent {
|
|
21
|
+
id: string;
|
|
22
|
+
kind: 'ui_component';
|
|
23
|
+
name: string;
|
|
24
|
+
packageName: string;
|
|
25
|
+
category: string;
|
|
26
|
+
description: string;
|
|
27
|
+
tags: string[];
|
|
28
|
+
props?: string[];
|
|
29
|
+
sourcePath?: string;
|
|
30
|
+
library?: string;
|
|
31
|
+
guidance?: ComponentGuidance;
|
|
32
|
+
example?: string;
|
|
33
|
+
examples?: ComponentExamples;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Component usage guidance
|
|
37
|
+
*/
|
|
38
|
+
export interface ComponentGuidance {
|
|
39
|
+
whenToUse: string;
|
|
40
|
+
whenNotToUse: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Component examples reference
|
|
44
|
+
*/
|
|
45
|
+
export interface ComponentExamples {
|
|
46
|
+
module: string;
|
|
47
|
+
export: string;
|
|
48
|
+
sourcePath: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Component metadata extracted from JSDoc
|
|
52
|
+
*/
|
|
53
|
+
export interface ComponentMetadata {
|
|
54
|
+
description: string;
|
|
55
|
+
category: string;
|
|
56
|
+
whenToUse: string;
|
|
57
|
+
whenNotToUse: string;
|
|
58
|
+
tags: string[];
|
|
59
|
+
example: string;
|
|
60
|
+
ignored: boolean;
|
|
61
|
+
ignoreReason?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validation result for a single component
|
|
65
|
+
*/
|
|
66
|
+
export interface ValidationResult {
|
|
67
|
+
valid: boolean;
|
|
68
|
+
errors: string[];
|
|
69
|
+
warnings: string[];
|
|
70
|
+
componentName: string;
|
|
71
|
+
filePath: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Quality report for catalog generation
|
|
75
|
+
*/
|
|
76
|
+
export interface QualityReport {
|
|
77
|
+
totalComponents: number;
|
|
78
|
+
withMetadata: number;
|
|
79
|
+
missingMetadata: number;
|
|
80
|
+
excluded: number;
|
|
81
|
+
errors: ValidationResult[];
|
|
82
|
+
warnings: ValidationResult[];
|
|
83
|
+
qualityScore: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Catalog generation configuration
|
|
87
|
+
*/
|
|
88
|
+
export interface CatalogConfig {
|
|
89
|
+
type: 'ui-components';
|
|
90
|
+
packageName: string;
|
|
91
|
+
sourceDir: string;
|
|
92
|
+
componentsDir: string;
|
|
93
|
+
exportsFile: string;
|
|
94
|
+
outputFile: string;
|
|
95
|
+
catalogVersion: string;
|
|
96
|
+
validation: ValidationConfig;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Validation rules configuration
|
|
100
|
+
*/
|
|
101
|
+
export interface ValidationConfig {
|
|
102
|
+
strict: boolean;
|
|
103
|
+
requireCategory: boolean;
|
|
104
|
+
requireDescription: boolean;
|
|
105
|
+
minDescriptionLength: number;
|
|
106
|
+
requireWhenToUse: boolean;
|
|
107
|
+
requireWhenNotToUse: boolean;
|
|
108
|
+
minTags: number;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Result of catalog generation
|
|
112
|
+
*/
|
|
113
|
+
export interface GenerationResult {
|
|
114
|
+
success: boolean;
|
|
115
|
+
catalogFile: string;
|
|
116
|
+
qualityReport: QualityReport;
|
|
117
|
+
errors: ValidationResult[];
|
|
118
|
+
warnings: ValidationResult[];
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=catalog-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-types.d.ts","sourceRoot":"","sources":["../../../../src/modules/catalog/types/catalog-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-types.js","sourceRoot":"","sources":["../../../../src/modules/catalog/types/catalog-types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { UiComponent } from '../types/catalog-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate examples.generated.ts files for each library that has components with examples
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateExamplesFiles(components: UiComponent[], launch77Root: string): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=examples-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"examples-generator.d.ts","sourceRoot":"","sources":["../../../../src/modules/catalog/utils/examples-generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B1G"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
/**
|
|
4
|
+
* Generate examples.generated.ts files for each library that has components with examples
|
|
5
|
+
*/
|
|
6
|
+
export async function generateExamplesFiles(components, launch77Root) {
|
|
7
|
+
// Group components by package
|
|
8
|
+
const componentsByPackage = new Map();
|
|
9
|
+
for (const component of components) {
|
|
10
|
+
if (component.examples) {
|
|
11
|
+
const existing = componentsByPackage.get(component.packageName) || [];
|
|
12
|
+
existing.push(component);
|
|
13
|
+
componentsByPackage.set(component.packageName, existing);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// Generate examples file for each package
|
|
17
|
+
for (const [packageName, packageComponents] of componentsByPackage) {
|
|
18
|
+
// Determine library path based on package name
|
|
19
|
+
// Extract library name from scoped package (e.g., @launch77/ui -> ui)
|
|
20
|
+
const libraryName = packageName.split('/').pop() || packageName;
|
|
21
|
+
const libraryPath = path.join(launch77Root, 'libraries', libraryName);
|
|
22
|
+
const examplesFilePath = path.join(libraryPath, 'src', 'examples.generated.ts');
|
|
23
|
+
// Generate content
|
|
24
|
+
const content = generateExamplesContent(packageComponents, libraryName);
|
|
25
|
+
// Write file
|
|
26
|
+
await fs.writeFile(examplesFilePath, content, 'utf-8');
|
|
27
|
+
console.log(` ā Generated ${packageName}/examples`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function generateExamplesContent(components, _libraryName) {
|
|
31
|
+
const lines = ['// AUTO-GENERATED by launch77 scan - DO NOT EDIT', "// This file is automatically generated when running 'launch77 scan'", '// To add new examples, create a ComponentName.examples.tsx file next to your component', ''];
|
|
32
|
+
// Sort components alphabetically for deterministic output
|
|
33
|
+
const sortedComponents = [...components].sort((a, b) => a.name.localeCompare(b.name));
|
|
34
|
+
// Add export statements
|
|
35
|
+
for (const component of sortedComponents) {
|
|
36
|
+
if (component.examples && component.examples.sourcePath) {
|
|
37
|
+
// Extract relative path from sourcePath
|
|
38
|
+
// e.g., "launch77/libraries/ui/src/components/Button/Button.examples.tsx"
|
|
39
|
+
// becomes "./components/Button/Button.examples"
|
|
40
|
+
const sourcePath = component.examples.sourcePath;
|
|
41
|
+
const srcIndex = sourcePath.indexOf('/src/');
|
|
42
|
+
if (srcIndex !== -1) {
|
|
43
|
+
const relativePath = sourcePath
|
|
44
|
+
.substring(srcIndex + 5) // Skip "/src/"
|
|
45
|
+
.replace(/\.tsx$/, ''); // Remove extension
|
|
46
|
+
// Export structured examples using ComponentNameExamples convention
|
|
47
|
+
// e.g., Button -> ButtonExamples, CTAButton -> CTAButtonExamples
|
|
48
|
+
const structuredExportName = `${component.name}Examples`;
|
|
49
|
+
lines.push(`export { ${structuredExportName} } from './${relativePath}'`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return lines.join('\n') + '\n';
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=examples-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"examples-generator.js","sourceRoot":"","sources":["../../../../src/modules/catalog/utils/examples-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EAAE,MAAM,UAAU,CAAA;AAIzB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAyB,EAAE,YAAoB;IACzF,8BAA8B;IAC9B,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAyB,CAAA;IAE5D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;YACrE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACxB,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,KAAK,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAAC,IAAI,mBAAmB,EAAE,CAAC;QACnE,+CAA+C;QAC/C,sEAAsE;QACtE,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,WAAW,CAAA;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;QACrE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAA;QAE/E,mBAAmB;QACnB,MAAM,OAAO,GAAG,uBAAuB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAA;QAEvE,aAAa;QACb,MAAM,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QAEtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,WAAW,WAAW,CAAC,CAAA;IACtD,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,UAAyB,EAAE,YAAoB;IAC9E,MAAM,KAAK,GAAa,CAAC,kDAAkD,EAAE,sEAAsE,EAAE,yFAAyF,EAAE,EAAE,CAAC,CAAA;IAEnP,0DAA0D;IAC1D,MAAM,gBAAgB,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAErF,wBAAwB;IACxB,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;QACzC,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxD,wCAAwC;YACxC,0EAA0E;YAC1E,gDAAgD;YAChD,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAA;YAChD,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAC5C,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;gBACpB,MAAM,YAAY,GAAG,UAAU;qBAC5B,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,eAAe;qBACvC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA,CAAC,mBAAmB;gBAE5C,oEAAoE;gBACpE,iEAAiE;gBACjE,MAAM,oBAAoB,GAAG,GAAG,SAAS,CAAC,IAAI,UAAU,CAAA;gBACxD,KAAK,CAAC,IAAI,CAAC,YAAY,oBAAoB,cAAc,YAAY,GAAG,CAAC,CAAA;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAChC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate and display catalog quality reports
|
|
3
|
+
*/
|
|
4
|
+
import type { ValidationResult, QualityReport } from '../types/catalog-types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Generate quality report from validation results
|
|
7
|
+
*/
|
|
8
|
+
export declare function generateQualityReport(totalScanned: number, excluded: number, validations: ValidationResult[]): QualityReport;
|
|
9
|
+
/**
|
|
10
|
+
* Print quality report to console
|
|
11
|
+
*/
|
|
12
|
+
export declare function printQualityReport(report: QualityReport, strict: boolean): void;
|
|
13
|
+
//# sourceMappingURL=quality-reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-reporter.d.ts","sourceRoot":"","sources":["../../../../src/modules/catalog/utils/quality-reporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEhF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAe5H;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CA4C/E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate and display catalog quality reports
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
/**
|
|
6
|
+
* Generate quality report from validation results
|
|
7
|
+
*/
|
|
8
|
+
export function generateQualityReport(totalScanned, excluded, validations) {
|
|
9
|
+
const errors = validations.filter((v) => !v.valid);
|
|
10
|
+
const withMetadata = validations.filter((v) => v.valid);
|
|
11
|
+
const qualityScore = totalScanned > 0 ? Math.round((withMetadata.length / totalScanned) * 100) : 100;
|
|
12
|
+
return {
|
|
13
|
+
totalComponents: totalScanned,
|
|
14
|
+
withMetadata: withMetadata.length,
|
|
15
|
+
missingMetadata: errors.length,
|
|
16
|
+
excluded,
|
|
17
|
+
errors,
|
|
18
|
+
warnings: validations.filter((v) => v.warnings.length > 0),
|
|
19
|
+
qualityScore,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Print quality report to console
|
|
24
|
+
*/
|
|
25
|
+
export function printQualityReport(report, strict) {
|
|
26
|
+
console.log(chalk.blue('\nš Catalog Quality Report\n'));
|
|
27
|
+
console.log(chalk.gray(` Total components scanned: ${report.totalComponents}`));
|
|
28
|
+
console.log(chalk.green(` ā With metadata: ${report.withMetadata} (${report.qualityScore}%)`));
|
|
29
|
+
if (report.missingMetadata > 0) {
|
|
30
|
+
console.log(chalk.red(` ā Missing metadata: ${report.missingMetadata}`));
|
|
31
|
+
}
|
|
32
|
+
if (report.excluded > 0) {
|
|
33
|
+
console.log(chalk.gray(` ā¹ Excluded: ${report.excluded}`));
|
|
34
|
+
}
|
|
35
|
+
// Show errors
|
|
36
|
+
if (report.errors.length > 0) {
|
|
37
|
+
console.log(chalk.red('\n ā Components missing metadata:\n'));
|
|
38
|
+
report.errors.forEach((err) => {
|
|
39
|
+
console.log(chalk.red(` - ${err.componentName}`));
|
|
40
|
+
console.log(chalk.gray(` ${err.filePath}`));
|
|
41
|
+
err.errors.forEach((e) => console.log(chalk.gray(` ⢠${e}`)));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Show warnings (limit to 5)
|
|
45
|
+
if (report.warnings.length > 0 && !strict) {
|
|
46
|
+
console.log(chalk.yellow('\n ā ļø Metadata warnings:\n'));
|
|
47
|
+
report.warnings.slice(0, 5).forEach((warn) => {
|
|
48
|
+
console.log(chalk.yellow(` - ${warn.componentName}`));
|
|
49
|
+
warn.warnings.forEach((w) => console.log(chalk.gray(` ⢠${w}`)));
|
|
50
|
+
});
|
|
51
|
+
if (report.warnings.length > 5) {
|
|
52
|
+
console.log(chalk.gray(`\n ... and ${report.warnings.length - 5} more`));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
console.log();
|
|
56
|
+
// Help message if there are errors
|
|
57
|
+
if (report.errors.length > 0) {
|
|
58
|
+
console.log(chalk.blue('š” To fix:\n'));
|
|
59
|
+
console.log(chalk.gray(' ⢠Add @launch77-component JSDoc to public components'));
|
|
60
|
+
console.log(chalk.gray(' ⢠Add @launch77-ignore to exclude internal components'));
|
|
61
|
+
console.log(chalk.gray(' ⢠See: launch77/docs/CATALOG_METADATA_GUIDE.md\n'));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=quality-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-reporter.js","sourceRoot":"","sources":["../../../../src/modules/catalog/utils/quality-reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate component names for Launch77 catalog
|
|
3
|
+
*/
|
|
4
|
+
export interface ComponentNameValidation {
|
|
5
|
+
valid: boolean;
|
|
6
|
+
errors: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Validate a component name against Launch77 naming conventions
|
|
10
|
+
*
|
|
11
|
+
* Rules:
|
|
12
|
+
* - Must start with uppercase letter (A-Z)
|
|
13
|
+
* - Only alphanumeric characters (no symbols, spaces, or special characters)
|
|
14
|
+
* - Maximum 50 characters
|
|
15
|
+
*
|
|
16
|
+
* @param name - Component name to validate
|
|
17
|
+
* @returns Validation result with errors if invalid
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateComponentName(name: string): ComponentNameValidation;
|
|
20
|
+
//# sourceMappingURL=component-name-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-name-validator.d.ts","sourceRoot":"","sources":["../../../../src/modules/catalog/validators/component-name-validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,CAmB3E"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate component names for Launch77 catalog
|
|
3
|
+
*/
|
|
4
|
+
const VALID_COMPONENT_NAME = /^[A-Z][a-zA-Z0-9]*$/;
|
|
5
|
+
const MAX_COMPONENT_NAME_LENGTH = 50;
|
|
6
|
+
/**
|
|
7
|
+
* Validate a component name against Launch77 naming conventions
|
|
8
|
+
*
|
|
9
|
+
* Rules:
|
|
10
|
+
* - Must start with uppercase letter (A-Z)
|
|
11
|
+
* - Only alphanumeric characters (no symbols, spaces, or special characters)
|
|
12
|
+
* - Maximum 50 characters
|
|
13
|
+
*
|
|
14
|
+
* @param name - Component name to validate
|
|
15
|
+
* @returns Validation result with errors if invalid
|
|
16
|
+
*/
|
|
17
|
+
export function validateComponentName(name) {
|
|
18
|
+
const errors = [];
|
|
19
|
+
if (!name || name.length === 0) {
|
|
20
|
+
errors.push('Component name cannot be empty');
|
|
21
|
+
}
|
|
22
|
+
if (name.length > MAX_COMPONENT_NAME_LENGTH) {
|
|
23
|
+
errors.push(`Component name exceeds maximum length of ${MAX_COMPONENT_NAME_LENGTH} characters`);
|
|
24
|
+
}
|
|
25
|
+
if (!VALID_COMPONENT_NAME.test(name)) {
|
|
26
|
+
errors.push('Component name must be PascalCase (start with uppercase letter A-Z, alphanumeric only)');
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
valid: errors.length === 0,
|
|
30
|
+
errors,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=component-name-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-name-validator.js","sourceRoot":"","sources":["../../../../src/modules/catalog/validators/component-name-validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,oBAAoB,GAAG,qBAAqB,CAAA;AAClD,MAAM,yBAAyB,GAAG,EAAE,CAAA;AAOpC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,MAAM,GAAa,EAAE,CAAA;IAE3B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAC/C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,4CAA4C,yBAAyB,aAAa,CAAC,CAAA;IACjG,CAAC;IAED,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAA;IACvG,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-name-validator.test.d.ts","sourceRoot":"","sources":["../../../../src/modules/catalog/validators/component-name-validator.test.ts"],"names":[],"mappings":""}
|