@nextsparkjs/core 0.1.0-beta.1 → 0.1.0-beta.3
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/LICENSE +21 -0
- package/README.md +8 -2
- package/bin/dist/doctor/checks/config.d.ts +11 -0
- package/bin/dist/doctor/checks/config.d.ts.map +1 -0
- package/bin/dist/doctor/checks/config.js +111 -0
- package/bin/dist/doctor/checks/config.js.map +1 -0
- package/bin/dist/doctor/checks/database.d.ts +11 -0
- package/bin/dist/doctor/checks/database.d.ts.map +1 -0
- package/bin/dist/doctor/checks/database.js +115 -0
- package/bin/dist/doctor/checks/database.js.map +1 -0
- package/bin/dist/doctor/checks/dependencies.d.ts +11 -0
- package/bin/dist/doctor/checks/dependencies.d.ts.map +1 -0
- package/bin/dist/doctor/checks/dependencies.js +88 -0
- package/bin/dist/doctor/checks/dependencies.js.map +1 -0
- package/bin/dist/doctor/checks/imports.d.ts +11 -0
- package/bin/dist/doctor/checks/imports.d.ts.map +1 -0
- package/bin/dist/doctor/checks/imports.js +176 -0
- package/bin/dist/doctor/checks/imports.js.map +1 -0
- package/bin/dist/doctor/index.d.ts +32 -0
- package/bin/dist/doctor/index.d.ts.map +1 -0
- package/bin/dist/doctor/index.js +117 -0
- package/bin/dist/doctor/index.js.map +1 -0
- package/bin/dist/init.d.ts +19 -0
- package/bin/dist/init.d.ts.map +1 -0
- package/bin/dist/init.js +95 -308
- package/bin/dist/init.js.map +1 -0
- package/bin/dist/test-wizard.d.ts +18 -0
- package/bin/dist/test-wizard.d.ts.map +1 -0
- package/bin/dist/test-wizard.js +724 -0
- package/bin/dist/test-wizard.js.map +1 -0
- package/bin/dist/tsup.config.d.ts +3 -0
- package/bin/dist/tsup.config.d.ts.map +1 -0
- package/bin/dist/tsup.config.js +13 -0
- package/bin/dist/tsup.config.js.map +1 -0
- package/bin/dist/wizard/banner.d.ts +30 -0
- package/bin/dist/wizard/banner.d.ts.map +1 -0
- package/bin/dist/wizard/banner.js +60 -0
- package/bin/dist/wizard/banner.js.map +1 -0
- package/bin/dist/wizard/generators/config-generator.d.ts +36 -0
- package/bin/dist/wizard/generators/config-generator.d.ts.map +1 -0
- package/bin/dist/wizard/generators/config-generator.js +210 -0
- package/bin/dist/wizard/generators/config-generator.js.map +1 -0
- package/bin/dist/wizard/generators/content-features-generator.d.ts +19 -0
- package/bin/dist/wizard/generators/content-features-generator.d.ts.map +1 -0
- package/bin/dist/wizard/generators/content-features-generator.js +96 -0
- package/bin/dist/wizard/generators/content-features-generator.js.map +1 -0
- package/bin/dist/wizard/generators/demo-installer.d.ts +13 -0
- package/bin/dist/wizard/generators/demo-installer.d.ts.map +1 -0
- package/bin/dist/wizard/generators/demo-installer.js +164 -0
- package/bin/dist/wizard/generators/demo-installer.js.map +1 -0
- package/bin/dist/wizard/generators/env-setup.d.ts +16 -0
- package/bin/dist/wizard/generators/env-setup.d.ts.map +1 -0
- package/bin/dist/wizard/generators/env-setup.js +163 -0
- package/bin/dist/wizard/generators/env-setup.js.map +1 -0
- package/bin/dist/wizard/generators/git-init.d.ts +16 -0
- package/bin/dist/wizard/generators/git-init.d.ts.map +1 -0
- package/bin/dist/wizard/generators/git-init.js +174 -0
- package/bin/dist/wizard/generators/git-init.js.map +1 -0
- package/bin/dist/wizard/generators/index.d.ts +19 -0
- package/bin/dist/wizard/generators/index.d.ts.map +1 -0
- package/bin/dist/wizard/generators/index.js +203 -0
- package/bin/dist/wizard/generators/index.js.map +1 -0
- package/bin/dist/wizard/generators/messages-generator.d.ts +28 -0
- package/bin/dist/wizard/generators/messages-generator.d.ts.map +1 -0
- package/bin/dist/wizard/generators/messages-generator.js +131 -0
- package/bin/dist/wizard/generators/messages-generator.js.map +1 -0
- package/bin/dist/wizard/generators/theme-renamer.d.ts +35 -0
- package/bin/dist/wizard/generators/theme-renamer.d.ts.map +1 -0
- package/bin/dist/wizard/generators/theme-renamer.js +323 -0
- package/bin/dist/wizard/generators/theme-renamer.js.map +1 -0
- package/bin/dist/wizard/index.d.ts +12 -0
- package/bin/dist/wizard/index.d.ts.map +1 -0
- package/bin/dist/wizard/index.js +254 -0
- package/bin/dist/wizard/index.js.map +1 -0
- package/bin/dist/wizard/presets.d.ts +55 -0
- package/bin/dist/wizard/presets.d.ts.map +1 -0
- package/bin/dist/wizard/presets.js +232 -0
- package/bin/dist/wizard/presets.js.map +1 -0
- package/bin/dist/wizard/preview.d.ts +15 -0
- package/bin/dist/wizard/preview.d.ts.map +1 -0
- package/bin/dist/wizard/preview.js +192 -0
- package/bin/dist/wizard/preview.js.map +1 -0
- package/bin/dist/wizard/prompts/auth-config.d.ts +16 -0
- package/bin/dist/wizard/prompts/auth-config.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/auth-config.js +78 -0
- package/bin/dist/wizard/prompts/auth-config.js.map +1 -0
- package/bin/dist/wizard/prompts/billing-config.d.ts +11 -0
- package/bin/dist/wizard/prompts/billing-config.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/billing-config.js +66 -0
- package/bin/dist/wizard/prompts/billing-config.js.map +1 -0
- package/bin/dist/wizard/prompts/content-features-config.d.ts +15 -0
- package/bin/dist/wizard/prompts/content-features-config.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/content-features-config.js +58 -0
- package/bin/dist/wizard/prompts/content-features-config.js.map +1 -0
- package/bin/dist/wizard/prompts/dashboard-config.d.ts +15 -0
- package/bin/dist/wizard/prompts/dashboard-config.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/dashboard-config.js +104 -0
- package/bin/dist/wizard/prompts/dashboard-config.js.map +1 -0
- package/bin/dist/wizard/prompts/demo-install.d.ts +14 -0
- package/bin/dist/wizard/prompts/demo-install.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/demo-install.js +42 -0
- package/bin/dist/wizard/prompts/demo-install.js.map +1 -0
- package/bin/dist/wizard/prompts/dev-config.d.ts +15 -0
- package/bin/dist/wizard/prompts/dev-config.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/dev-config.js +66 -0
- package/bin/dist/wizard/prompts/dev-config.js.map +1 -0
- package/bin/dist/wizard/prompts/env-config.d.ts +22 -0
- package/bin/dist/wizard/prompts/env-config.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/env-config.js +65 -0
- package/bin/dist/wizard/prompts/env-config.js.map +1 -0
- package/bin/dist/wizard/prompts/features-config.d.ts +11 -0
- package/bin/dist/wizard/prompts/features-config.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/features-config.js +68 -0
- package/bin/dist/wizard/prompts/features-config.js.map +1 -0
- package/bin/dist/wizard/prompts/git-config.d.ts +22 -0
- package/bin/dist/wizard/prompts/git-config.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/git-config.js +72 -0
- package/bin/dist/wizard/prompts/git-config.js.map +1 -0
- package/bin/dist/wizard/prompts/i18n-config.d.ts +11 -0
- package/bin/dist/wizard/prompts/i18n-config.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/i18n-config.js +55 -0
- package/bin/dist/wizard/prompts/i18n-config.js.map +1 -0
- package/bin/dist/wizard/prompts/index.d.ts +34 -0
- package/bin/dist/wizard/prompts/index.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/index.js +126 -0
- package/bin/dist/wizard/prompts/index.js.map +1 -0
- package/bin/dist/wizard/prompts/project-info.d.ts +11 -0
- package/bin/dist/wizard/prompts/project-info.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/project-info.js +80 -0
- package/bin/dist/wizard/prompts/project-info.js.map +1 -0
- package/bin/dist/wizard/prompts/team-config.d.ts +11 -0
- package/bin/dist/wizard/prompts/team-config.d.ts.map +1 -0
- package/bin/dist/wizard/prompts/team-config.js +77 -0
- package/bin/dist/wizard/prompts/team-config.js.map +1 -0
- package/bin/dist/wizard/types.d.ts +110 -0
- package/bin/dist/wizard/types.d.ts.map +1 -0
- package/bin/dist/wizard/types.js +31 -0
- package/bin/dist/wizard/types.js.map +1 -0
- package/bin/dist/wizard/validators/files.d.ts +26 -0
- package/bin/dist/wizard/validators/files.d.ts.map +1 -0
- package/bin/dist/wizard/validators/files.js +202 -0
- package/bin/dist/wizard/validators/files.js.map +1 -0
- package/bin/dist/wizard/validators/i18n.d.ts +24 -0
- package/bin/dist/wizard/validators/i18n.d.ts.map +1 -0
- package/bin/dist/wizard/validators/i18n.js +318 -0
- package/bin/dist/wizard/validators/i18n.js.map +1 -0
- package/bin/dist/wizard/validators/index.d.ts +67 -0
- package/bin/dist/wizard/validators/index.d.ts.map +1 -0
- package/bin/dist/wizard/validators/index.js +64 -0
- package/bin/dist/wizard/validators/index.js.map +1 -0
- package/bin/dist/wizard/validators/typescript.d.ts +19 -0
- package/bin/dist/wizard/validators/typescript.d.ts.map +1 -0
- package/bin/dist/wizard/validators/typescript.js +120 -0
- package/bin/dist/wizard/validators/typescript.js.map +1 -0
- package/dist/bin/dist/doctor/checks/config.d.ts +11 -0
- package/dist/bin/dist/doctor/checks/config.d.ts.map +1 -0
- package/dist/bin/dist/doctor/checks/config.js +111 -0
- package/dist/bin/dist/doctor/checks/config.js.map +1 -0
- package/dist/bin/dist/doctor/checks/database.d.ts +11 -0
- package/dist/bin/dist/doctor/checks/database.d.ts.map +1 -0
- package/dist/bin/dist/doctor/checks/database.js +115 -0
- package/dist/bin/dist/doctor/checks/database.js.map +1 -0
- package/dist/bin/dist/doctor/checks/dependencies.d.ts +11 -0
- package/dist/bin/dist/doctor/checks/dependencies.d.ts.map +1 -0
- package/dist/bin/dist/doctor/checks/dependencies.js +88 -0
- package/dist/bin/dist/doctor/checks/dependencies.js.map +1 -0
- package/dist/bin/dist/doctor/checks/imports.d.ts +11 -0
- package/dist/bin/dist/doctor/checks/imports.d.ts.map +1 -0
- package/dist/bin/dist/doctor/checks/imports.js +176 -0
- package/dist/bin/dist/doctor/checks/imports.js.map +1 -0
- package/dist/bin/dist/doctor/index.d.ts +32 -0
- package/dist/bin/dist/doctor/index.d.ts.map +1 -0
- package/dist/bin/dist/doctor/index.js +117 -0
- package/dist/bin/dist/doctor/index.js.map +1 -0
- package/dist/bin/dist/init.d.ts +19 -0
- package/dist/bin/dist/init.d.ts.map +1 -0
- package/dist/bin/dist/init.js +95 -308
- package/dist/bin/dist/init.js.map +1 -0
- package/dist/bin/dist/test-wizard.d.ts +18 -0
- package/dist/bin/dist/test-wizard.d.ts.map +1 -0
- package/dist/bin/dist/test-wizard.js +724 -0
- package/dist/bin/dist/test-wizard.js.map +1 -0
- package/dist/bin/dist/tsup.config.d.ts +3 -0
- package/dist/bin/dist/tsup.config.d.ts.map +1 -0
- package/dist/bin/dist/tsup.config.js +13 -0
- package/dist/bin/dist/tsup.config.js.map +1 -0
- package/dist/bin/dist/wizard/banner.d.ts +30 -0
- package/dist/bin/dist/wizard/banner.d.ts.map +1 -0
- package/dist/bin/dist/wizard/banner.js +60 -0
- package/dist/bin/dist/wizard/banner.js.map +1 -0
- package/dist/bin/dist/wizard/generators/config-generator.d.ts +36 -0
- package/dist/bin/dist/wizard/generators/config-generator.d.ts.map +1 -0
- package/dist/bin/dist/wizard/generators/config-generator.js +210 -0
- package/dist/bin/dist/wizard/generators/config-generator.js.map +1 -0
- package/dist/bin/dist/wizard/generators/content-features-generator.d.ts +19 -0
- package/dist/bin/dist/wizard/generators/content-features-generator.d.ts.map +1 -0
- package/dist/bin/dist/wizard/generators/content-features-generator.js +96 -0
- package/dist/bin/dist/wizard/generators/content-features-generator.js.map +1 -0
- package/dist/bin/dist/wizard/generators/demo-installer.d.ts +13 -0
- package/dist/bin/dist/wizard/generators/demo-installer.d.ts.map +1 -0
- package/dist/bin/dist/wizard/generators/demo-installer.js +128 -0
- package/dist/bin/dist/wizard/generators/demo-installer.js.map +1 -0
- package/dist/bin/dist/wizard/generators/env-setup.d.ts +16 -0
- package/dist/bin/dist/wizard/generators/env-setup.d.ts.map +1 -0
- package/dist/bin/dist/wizard/generators/env-setup.js +163 -0
- package/dist/bin/dist/wizard/generators/env-setup.js.map +1 -0
- package/dist/bin/dist/wizard/generators/git-init.d.ts +16 -0
- package/dist/bin/dist/wizard/generators/git-init.d.ts.map +1 -0
- package/dist/bin/dist/wizard/generators/git-init.js +174 -0
- package/dist/bin/dist/wizard/generators/git-init.js.map +1 -0
- package/dist/bin/dist/wizard/generators/index.d.ts +19 -0
- package/dist/bin/dist/wizard/generators/index.d.ts.map +1 -0
- package/dist/bin/dist/wizard/generators/index.js +199 -0
- package/dist/bin/dist/wizard/generators/index.js.map +1 -0
- package/dist/bin/dist/wizard/generators/messages-generator.d.ts +28 -0
- package/dist/bin/dist/wizard/generators/messages-generator.d.ts.map +1 -0
- package/dist/bin/dist/wizard/generators/messages-generator.js +131 -0
- package/dist/bin/dist/wizard/generators/messages-generator.js.map +1 -0
- package/dist/bin/dist/wizard/generators/theme-renamer.d.ts +35 -0
- package/dist/bin/dist/wizard/generators/theme-renamer.d.ts.map +1 -0
- package/dist/bin/dist/wizard/generators/theme-renamer.js +323 -0
- package/dist/bin/dist/wizard/generators/theme-renamer.js.map +1 -0
- package/dist/bin/dist/wizard/index.d.ts +12 -0
- package/dist/bin/dist/wizard/index.d.ts.map +1 -0
- package/dist/bin/dist/wizard/index.js +254 -0
- package/dist/bin/dist/wizard/index.js.map +1 -0
- package/dist/bin/dist/wizard/presets.d.ts +55 -0
- package/dist/bin/dist/wizard/presets.d.ts.map +1 -0
- package/dist/bin/dist/wizard/presets.js +232 -0
- package/dist/bin/dist/wizard/presets.js.map +1 -0
- package/dist/bin/dist/wizard/preview.d.ts +15 -0
- package/dist/bin/dist/wizard/preview.d.ts.map +1 -0
- package/dist/bin/dist/wizard/preview.js +192 -0
- package/dist/bin/dist/wizard/preview.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/auth-config.d.ts +16 -0
- package/dist/bin/dist/wizard/prompts/auth-config.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/auth-config.js +78 -0
- package/dist/bin/dist/wizard/prompts/auth-config.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/billing-config.d.ts +11 -0
- package/dist/bin/dist/wizard/prompts/billing-config.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/billing-config.js +66 -0
- package/dist/bin/dist/wizard/prompts/billing-config.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/content-features-config.d.ts +15 -0
- package/dist/bin/dist/wizard/prompts/content-features-config.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/content-features-config.js +58 -0
- package/dist/bin/dist/wizard/prompts/content-features-config.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/dashboard-config.d.ts +15 -0
- package/dist/bin/dist/wizard/prompts/dashboard-config.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/dashboard-config.js +104 -0
- package/dist/bin/dist/wizard/prompts/dashboard-config.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/demo-install.d.ts +14 -0
- package/dist/bin/dist/wizard/prompts/demo-install.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/demo-install.js +42 -0
- package/dist/bin/dist/wizard/prompts/demo-install.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/dev-config.d.ts +15 -0
- package/dist/bin/dist/wizard/prompts/dev-config.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/dev-config.js +66 -0
- package/dist/bin/dist/wizard/prompts/dev-config.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/env-config.d.ts +22 -0
- package/dist/bin/dist/wizard/prompts/env-config.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/env-config.js +65 -0
- package/dist/bin/dist/wizard/prompts/env-config.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/features-config.d.ts +11 -0
- package/dist/bin/dist/wizard/prompts/features-config.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/features-config.js +68 -0
- package/dist/bin/dist/wizard/prompts/features-config.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/git-config.d.ts +22 -0
- package/dist/bin/dist/wizard/prompts/git-config.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/git-config.js +72 -0
- package/dist/bin/dist/wizard/prompts/git-config.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/i18n-config.d.ts +11 -0
- package/dist/bin/dist/wizard/prompts/i18n-config.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/i18n-config.js +55 -0
- package/dist/bin/dist/wizard/prompts/i18n-config.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/index.d.ts +34 -0
- package/dist/bin/dist/wizard/prompts/index.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/index.js +126 -0
- package/dist/bin/dist/wizard/prompts/index.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/project-info.d.ts +11 -0
- package/dist/bin/dist/wizard/prompts/project-info.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/project-info.js +80 -0
- package/dist/bin/dist/wizard/prompts/project-info.js.map +1 -0
- package/dist/bin/dist/wizard/prompts/team-config.d.ts +11 -0
- package/dist/bin/dist/wizard/prompts/team-config.d.ts.map +1 -0
- package/dist/bin/dist/wizard/prompts/team-config.js +77 -0
- package/dist/bin/dist/wizard/prompts/team-config.js.map +1 -0
- package/dist/bin/dist/wizard/types.d.ts +110 -0
- package/dist/bin/dist/wizard/types.d.ts.map +1 -0
- package/dist/bin/dist/wizard/types.js +31 -0
- package/dist/bin/dist/wizard/types.js.map +1 -0
- package/dist/bin/dist/wizard/validators/files.d.ts +26 -0
- package/dist/bin/dist/wizard/validators/files.d.ts.map +1 -0
- package/dist/bin/dist/wizard/validators/files.js +202 -0
- package/dist/bin/dist/wizard/validators/files.js.map +1 -0
- package/dist/bin/dist/wizard/validators/i18n.d.ts +24 -0
- package/dist/bin/dist/wizard/validators/i18n.d.ts.map +1 -0
- package/dist/bin/dist/wizard/validators/i18n.js +318 -0
- package/dist/bin/dist/wizard/validators/i18n.js.map +1 -0
- package/dist/bin/dist/wizard/validators/index.d.ts +67 -0
- package/dist/bin/dist/wizard/validators/index.d.ts.map +1 -0
- package/dist/bin/dist/wizard/validators/index.js +64 -0
- package/dist/bin/dist/wizard/validators/index.js.map +1 -0
- package/dist/bin/dist/wizard/validators/typescript.d.ts +19 -0
- package/dist/bin/dist/wizard/validators/typescript.d.ts.map +1 -0
- package/dist/bin/dist/wizard/validators/typescript.js +120 -0
- package/dist/bin/dist/wizard/validators/typescript.js.map +1 -0
- package/dist/bin/doctor/checks/config.ts +123 -0
- package/dist/bin/doctor/checks/database.ts +133 -0
- package/dist/bin/doctor/checks/dependencies.ts +99 -0
- package/dist/bin/doctor/checks/imports.ts +203 -0
- package/dist/bin/doctor/index.ts +151 -0
- package/dist/bin/init.ts +99 -406
- package/dist/bin/test-local.sh +3 -1
- package/dist/bin/test-wizard.ts +879 -0
- package/dist/bin/tsconfig.json +26 -0
- package/dist/bin/wizard/banner.ts +67 -0
- package/dist/bin/wizard/generators/config-generator.ts +341 -0
- package/dist/bin/wizard/generators/content-features-generator.ts +111 -0
- package/dist/bin/wizard/generators/demo-installer.ts +200 -0
- package/dist/bin/wizard/generators/env-setup.ts +208 -0
- package/dist/bin/wizard/generators/git-init.ts +187 -0
- package/dist/bin/wizard/generators/index.ts +271 -0
- package/dist/bin/wizard/generators/messages-generator.ts +159 -0
- package/dist/bin/wizard/generators/theme-renamer.ts +419 -0
- package/dist/bin/wizard/index.ts +288 -0
- package/dist/bin/wizard/presets.ts +274 -0
- package/dist/bin/wizard/preview.ts +220 -0
- package/dist/bin/wizard/prompts/auth-config.ts +93 -0
- package/dist/bin/wizard/prompts/billing-config.ts +75 -0
- package/dist/bin/wizard/prompts/content-features-config.ts +70 -0
- package/dist/bin/wizard/prompts/dashboard-config.ts +117 -0
- package/dist/bin/wizard/prompts/demo-install.ts +45 -0
- package/dist/bin/wizard/prompts/dev-config.ts +78 -0
- package/dist/bin/wizard/prompts/env-config.ts +83 -0
- package/dist/bin/wizard/prompts/features-config.ts +75 -0
- package/dist/bin/wizard/prompts/git-config.ts +90 -0
- package/dist/bin/wizard/prompts/i18n-config.ts +62 -0
- package/dist/bin/wizard/prompts/index.ts +173 -0
- package/dist/bin/wizard/prompts/project-info.ts +89 -0
- package/dist/bin/wizard/prompts/team-config.ts +88 -0
- package/dist/bin/wizard/types.ts +150 -0
- package/dist/bin/wizard/validators/files.ts +227 -0
- package/dist/bin/wizard/validators/i18n.ts +394 -0
- package/dist/bin/wizard/validators/index.ts +111 -0
- package/dist/bin/wizard/validators/typescript.ts +133 -0
- package/dist/components/devtools/scheduled-actions/actions-table.js +1 -1
- package/dist/components/devtools/scheduled-actions/filters.js +1 -1
- package/dist/hooks/useContentTranslation.d.ts.map +1 -1
- package/dist/hooks/useContentTranslation.js +1 -5
- package/dist/hooks/useEnsureUserMetadata.d.ts.map +1 -1
- package/dist/hooks/useEnsureUserMetadata.js +0 -1
- package/dist/hooks/useEntityTranslations.d.ts.map +1 -1
- package/dist/hooks/useEntityTranslations.js +10 -12
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +7 -37
- package/dist/lib/config/app.config.js +1 -1
- package/dist/lib/config/dashboard.config.d.ts +0 -1
- package/dist/lib/config/dashboard.config.d.ts.map +1 -1
- package/dist/lib/config/dashboard.config.js +0 -1
- package/dist/lib/config/nextspark-types.d.ts +1 -1
- package/dist/lib/config/nextspark-types.d.ts.map +1 -1
- package/dist/lib/i18n-utils.d.ts +1 -5
- package/dist/lib/i18n-utils.d.ts.map +1 -1
- package/dist/lib/i18n-utils.js +0 -19
- package/dist/lib/namespace-loader.d.ts +1 -0
- package/dist/lib/namespace-loader.d.ts.map +1 -1
- package/dist/lib/namespace-loader.js +14 -18
- package/dist/lib/services/translation.service.d.ts +92 -0
- package/dist/lib/services/translation.service.d.ts.map +1 -1
- package/dist/lib/services/translation.service.js +135 -1
- package/dist/lib/test/index.d.ts +4 -4
- package/dist/lib/test/index.d.ts.map +1 -1
- package/dist/lib/test/index.js +4 -4
- package/dist/lib/test/selectors.d.ts +12 -12
- package/dist/lib/test/selectors.d.ts.map +1 -1
- package/dist/lib/test/selectors.js +2 -2
- package/dist/lib/translations/i18n-integration.d.ts +3 -1
- package/dist/lib/translations/i18n-integration.d.ts.map +1 -1
- package/dist/lib/translations/i18n-integration.js +19 -38
- package/dist/lib/translations/registry.d.ts +7 -61
- package/dist/lib/translations/registry.d.ts.map +1 -1
- package/dist/lib/translations/registry.js +21 -163
- package/dist/messages/de/admin.json +219 -0
- package/dist/messages/de/auth.json +103 -0
- package/dist/messages/de/billing.json +167 -0
- package/dist/messages/de/buttons.json +19 -0
- package/dist/messages/de/common.json +172 -0
- package/dist/messages/de/dashboard.json +41 -0
- package/dist/messages/de/devtools.json +285 -0
- package/dist/messages/de/docs.json +24 -0
- package/dist/messages/de/entities.json +52 -0
- package/dist/messages/de/footer.json +23 -0
- package/dist/messages/de/home.json +13 -0
- package/dist/messages/de/index.d.ts +1934 -0
- package/dist/messages/de/index.d.ts.map +1 -0
- package/dist/messages/de/index.js +41 -0
- package/dist/messages/de/index.ts +39 -0
- package/dist/messages/de/navigation.json +11 -0
- package/dist/messages/de/permissions.json +27 -0
- package/dist/messages/de/public.json +14 -0
- package/dist/messages/de/settings.json +404 -0
- package/dist/messages/de/superadmin.json +194 -0
- package/dist/messages/de/teams.json +140 -0
- package/dist/messages/de/validation.json +48 -0
- package/dist/messages/en/admin.json +219 -0
- package/dist/messages/en/buttons.json +19 -0
- package/dist/messages/en/devtools.json +35 -0
- package/dist/messages/en/entities.json +52 -0
- package/dist/messages/en/index.d.ts +1292 -954
- package/dist/messages/en/index.d.ts.map +1 -1
- package/dist/messages/en/index.js +22 -16
- package/dist/messages/en/index.ts +22 -16
- package/dist/messages/en/public.json +14 -1
- package/dist/messages/es/admin.json +219 -0
- package/dist/messages/es/buttons.json +19 -0
- package/dist/messages/es/devtools.json +35 -0
- package/dist/messages/es/entities.json +52 -0
- package/dist/messages/es/index.d.ts +1292 -954
- package/dist/messages/es/index.d.ts.map +1 -1
- package/dist/messages/es/index.js +22 -16
- package/dist/messages/es/index.ts +22 -16
- package/dist/messages/es/public.json +14 -1
- package/dist/messages/fr/admin.json +219 -0
- package/dist/messages/fr/auth.json +103 -0
- package/dist/messages/fr/billing.json +167 -0
- package/dist/messages/fr/buttons.json +19 -0
- package/dist/messages/fr/common.json +172 -0
- package/dist/messages/fr/dashboard.json +41 -0
- package/dist/messages/fr/devtools.json +285 -0
- package/dist/messages/fr/docs.json +24 -0
- package/dist/messages/fr/entities.json +52 -0
- package/dist/messages/fr/footer.json +23 -0
- package/dist/messages/fr/home.json +13 -0
- package/dist/messages/fr/index.d.ts +1934 -0
- package/dist/messages/fr/index.d.ts.map +1 -0
- package/dist/messages/fr/index.js +41 -0
- package/dist/messages/fr/index.ts +39 -0
- package/dist/messages/fr/navigation.json +11 -0
- package/dist/messages/fr/permissions.json +27 -0
- package/dist/messages/fr/public.json +14 -0
- package/dist/messages/fr/settings.json +404 -0
- package/dist/messages/fr/superadmin.json +194 -0
- package/dist/messages/fr/teams.json +140 -0
- package/dist/messages/fr/validation.json +48 -0
- package/dist/messages/index.d.ts +4 -0
- package/dist/messages/index.d.ts.map +1 -1
- package/dist/messages/index.js +9 -1
- package/dist/messages/index.ts +4 -0
- package/dist/messages/it/admin.json +219 -0
- package/dist/messages/it/auth.json +103 -0
- package/dist/messages/it/billing.json +167 -0
- package/dist/messages/it/buttons.json +19 -0
- package/dist/messages/it/common.json +172 -0
- package/dist/messages/it/dashboard.json +41 -0
- package/dist/messages/it/devtools.json +285 -0
- package/dist/messages/it/docs.json +24 -0
- package/dist/messages/it/entities.json +52 -0
- package/dist/messages/it/footer.json +23 -0
- package/dist/messages/it/home.json +13 -0
- package/dist/messages/it/index.d.ts +1934 -0
- package/dist/messages/it/index.d.ts.map +1 -0
- package/dist/messages/it/index.js +41 -0
- package/dist/messages/it/index.ts +39 -0
- package/dist/messages/it/navigation.json +11 -0
- package/dist/messages/it/permissions.json +27 -0
- package/dist/messages/it/public.json +14 -0
- package/dist/messages/it/settings.json +404 -0
- package/dist/messages/it/superadmin.json +194 -0
- package/dist/messages/it/teams.json +140 -0
- package/dist/messages/it/validation.json +48 -0
- package/dist/messages/pt/admin.json +219 -0
- package/dist/messages/pt/auth.json +103 -0
- package/dist/messages/pt/billing.json +167 -0
- package/dist/messages/pt/buttons.json +19 -0
- package/dist/messages/pt/common.json +172 -0
- package/dist/messages/pt/dashboard.json +41 -0
- package/dist/messages/pt/devtools.json +285 -0
- package/dist/messages/pt/docs.json +24 -0
- package/dist/messages/pt/entities.json +52 -0
- package/dist/messages/pt/footer.json +23 -0
- package/dist/messages/pt/home.json +13 -0
- package/dist/messages/pt/index.d.ts +1934 -0
- package/dist/messages/pt/index.d.ts.map +1 -0
- package/dist/messages/pt/index.js +41 -0
- package/dist/messages/pt/index.ts +39 -0
- package/dist/messages/pt/navigation.json +11 -0
- package/dist/messages/pt/permissions.json +27 -0
- package/dist/messages/pt/public.json +14 -0
- package/dist/messages/pt/settings.json +404 -0
- package/dist/messages/pt/superadmin.json +194 -0
- package/dist/messages/pt/teams.json +140 -0
- package/dist/messages/pt/validation.json +48 -0
- package/dist/presets/plugin/messages/de.json +20 -0
- package/dist/presets/plugin/messages/fr.json +20 -0
- package/dist/presets/plugin/messages/it.json +20 -0
- package/dist/presets/plugin/messages/pt.json +20 -0
- package/dist/presets/theme/entities/tasks/messages/de.json +204 -0
- package/dist/presets/theme/entities/tasks/messages/fr.json +204 -0
- package/dist/presets/theme/entities/tasks/messages/it.json +204 -0
- package/dist/presets/theme/entities/tasks/messages/pt.json +204 -0
- package/dist/presets/theme/messages/de.json +96 -0
- package/dist/presets/theme/messages/fr.json +96 -0
- package/dist/presets/theme/messages/it.json +96 -0
- package/dist/presets/theme/messages/pt.json +96 -0
- package/dist/styles/classes.json +1 -1
- package/dist/styles/ui.css +1 -1
- package/dist/templates/contents/themes/default/entities/customers/messages/de.json +66 -0
- package/dist/templates/contents/themes/default/entities/customers/messages/fr.json +66 -0
- package/dist/templates/contents/themes/default/entities/customers/messages/it.json +66 -0
- package/dist/templates/contents/themes/default/entities/customers/messages/pt.json +66 -0
- package/dist/templates/contents/themes/default/entities/pages/messages/de.json +41 -0
- package/dist/templates/contents/themes/default/entities/pages/messages/fr.json +41 -0
- package/dist/templates/contents/themes/default/entities/pages/messages/it.json +41 -0
- package/dist/templates/contents/themes/default/entities/pages/messages/pt.json +41 -0
- package/dist/templates/contents/themes/default/entities/posts/messages/de.json +55 -0
- package/dist/templates/contents/themes/default/entities/posts/messages/fr.json +55 -0
- package/dist/templates/contents/themes/default/entities/posts/messages/it.json +55 -0
- package/dist/templates/contents/themes/default/entities/posts/messages/pt.json +55 -0
- package/dist/templates/contents/themes/default/entities/tasks/messages/de.json +204 -0
- package/dist/templates/contents/themes/default/entities/tasks/messages/fr.json +204 -0
- package/dist/templates/contents/themes/default/entities/tasks/messages/it.json +204 -0
- package/dist/templates/contents/themes/default/entities/tasks/messages/pt.json +204 -0
- package/dist/templates/contents/themes/default/messages/de/admin.json +219 -0
- package/dist/templates/contents/themes/default/messages/de/aiUsage.json +36 -0
- package/dist/templates/contents/themes/default/messages/de/buttons.json +19 -0
- package/dist/templates/contents/themes/default/messages/de/categories.json +35 -0
- package/dist/templates/contents/themes/default/messages/de/common.json +16 -0
- package/dist/templates/contents/themes/default/messages/de/dev.json +106 -0
- package/dist/templates/contents/themes/default/messages/de/docs.json +27 -0
- package/dist/templates/contents/themes/default/messages/de/entities.json +7 -0
- package/dist/templates/contents/themes/default/messages/de/features.json +119 -0
- package/dist/templates/contents/themes/default/messages/de/footer.json +22 -0
- package/dist/templates/contents/themes/default/messages/de/home.json +57 -0
- package/dist/templates/contents/themes/default/messages/de/index.ts +39 -0
- package/dist/templates/contents/themes/default/messages/de/mobileNav.json +13 -0
- package/dist/templates/contents/themes/default/messages/de/navigation.json +8 -0
- package/dist/templates/contents/themes/default/messages/de/observability.json +74 -0
- package/dist/templates/contents/themes/default/messages/de/posts.json +54 -0
- package/dist/templates/contents/themes/default/messages/de/pricing.json +102 -0
- package/dist/templates/contents/themes/default/messages/de/support.json +9 -0
- package/dist/templates/contents/themes/default/messages/de/teams.json +8 -0
- package/dist/templates/contents/themes/default/messages/es/admin.json +219 -0
- package/dist/templates/contents/themes/default/messages/es/aiUsage.json +36 -0
- package/dist/templates/contents/themes/default/messages/es/buttons.json +19 -0
- package/dist/templates/contents/themes/default/messages/es/categories.json +35 -0
- package/dist/templates/contents/themes/default/messages/es/common.json +16 -0
- package/dist/templates/contents/themes/default/messages/es/dev.json +101 -0
- package/dist/templates/contents/themes/default/messages/es/docs.json +27 -0
- package/dist/templates/contents/themes/default/messages/es/entities.json +7 -0
- package/dist/templates/contents/themes/default/messages/es/features.json +119 -0
- package/dist/templates/contents/themes/default/messages/es/footer.json +22 -0
- package/dist/templates/contents/themes/default/messages/es/home.json +57 -0
- package/dist/templates/contents/themes/default/messages/es/index.ts +39 -0
- package/dist/templates/contents/themes/default/messages/es/mobileNav.json +13 -0
- package/dist/templates/contents/themes/default/messages/es/navigation.json +8 -0
- package/dist/templates/contents/themes/default/messages/es/observability.json +74 -0
- package/dist/templates/contents/themes/default/messages/es/posts.json +54 -0
- package/dist/templates/contents/themes/default/messages/es/pricing.json +102 -0
- package/dist/templates/contents/themes/default/messages/es/support.json +9 -0
- package/dist/templates/contents/themes/default/messages/es/teams.json +8 -0
- package/dist/templates/contents/themes/default/messages/fr/admin.json +219 -0
- package/dist/templates/contents/themes/default/messages/fr/aiUsage.json +36 -0
- package/dist/templates/contents/themes/default/messages/fr/buttons.json +19 -0
- package/dist/templates/contents/themes/default/messages/fr/categories.json +35 -0
- package/dist/templates/contents/themes/default/messages/fr/common.json +16 -0
- package/dist/templates/contents/themes/default/messages/fr/dev.json +106 -0
- package/dist/templates/contents/themes/default/messages/fr/docs.json +27 -0
- package/dist/templates/contents/themes/default/messages/fr/entities.json +7 -0
- package/dist/templates/contents/themes/default/messages/fr/features.json +119 -0
- package/dist/templates/contents/themes/default/messages/fr/footer.json +22 -0
- package/dist/templates/contents/themes/default/messages/fr/home.json +57 -0
- package/dist/templates/contents/themes/default/messages/fr/index.ts +39 -0
- package/dist/templates/contents/themes/default/messages/fr/mobileNav.json +13 -0
- package/dist/templates/contents/themes/default/messages/fr/navigation.json +8 -0
- package/dist/templates/contents/themes/default/messages/fr/observability.json +74 -0
- package/dist/templates/contents/themes/default/messages/fr/posts.json +54 -0
- package/dist/templates/contents/themes/default/messages/fr/pricing.json +102 -0
- package/dist/templates/contents/themes/default/messages/fr/support.json +9 -0
- package/dist/templates/contents/themes/default/messages/fr/teams.json +8 -0
- package/dist/templates/contents/themes/default/messages/it/admin.json +219 -0
- package/dist/templates/contents/themes/default/messages/it/aiUsage.json +36 -0
- package/dist/templates/contents/themes/default/messages/it/buttons.json +19 -0
- package/dist/templates/contents/themes/default/messages/it/categories.json +35 -0
- package/dist/templates/contents/themes/default/messages/it/common.json +16 -0
- package/dist/templates/contents/themes/default/messages/it/dev.json +106 -0
- package/dist/templates/contents/themes/default/messages/it/docs.json +27 -0
- package/dist/templates/contents/themes/default/messages/it/entities.json +7 -0
- package/dist/templates/contents/themes/default/messages/it/features.json +119 -0
- package/dist/templates/contents/themes/default/messages/it/footer.json +22 -0
- package/dist/templates/contents/themes/default/messages/it/home.json +57 -0
- package/dist/templates/contents/themes/default/messages/it/index.ts +39 -0
- package/dist/templates/contents/themes/default/messages/it/mobileNav.json +13 -0
- package/dist/templates/contents/themes/default/messages/it/navigation.json +8 -0
- package/dist/templates/contents/themes/default/messages/it/observability.json +74 -0
- package/dist/templates/contents/themes/default/messages/it/posts.json +54 -0
- package/dist/templates/contents/themes/default/messages/it/pricing.json +102 -0
- package/dist/templates/contents/themes/default/messages/it/support.json +9 -0
- package/dist/templates/contents/themes/default/messages/it/teams.json +8 -0
- package/dist/templates/contents/themes/default/messages/pt/admin.json +219 -0
- package/dist/templates/contents/themes/default/messages/pt/aiUsage.json +36 -0
- package/dist/templates/contents/themes/default/messages/pt/buttons.json +19 -0
- package/dist/templates/contents/themes/default/messages/pt/categories.json +35 -0
- package/dist/templates/contents/themes/default/messages/pt/common.json +16 -0
- package/dist/templates/contents/themes/default/messages/pt/dev.json +106 -0
- package/dist/templates/contents/themes/default/messages/pt/docs.json +27 -0
- package/dist/templates/contents/themes/default/messages/pt/entities.json +7 -0
- package/dist/templates/contents/themes/default/messages/pt/features.json +119 -0
- package/dist/templates/contents/themes/default/messages/pt/footer.json +22 -0
- package/dist/templates/contents/themes/default/messages/pt/home.json +57 -0
- package/dist/templates/contents/themes/default/messages/pt/index.ts +39 -0
- package/dist/templates/contents/themes/default/messages/pt/mobileNav.json +13 -0
- package/dist/templates/contents/themes/default/messages/pt/navigation.json +8 -0
- package/dist/templates/contents/themes/default/messages/pt/observability.json +74 -0
- package/dist/templates/contents/themes/default/messages/pt/posts.json +54 -0
- package/dist/templates/contents/themes/default/messages/pt/pricing.json +102 -0
- package/dist/templates/contents/themes/default/messages/pt/support.json +9 -0
- package/dist/templates/contents/themes/default/messages/pt/teams.json +8 -0
- package/dist/templates/contents/themes/starter/README.md +35 -0
- package/dist/templates/contents/themes/starter/about/business.md +16 -0
- package/dist/templates/contents/themes/starter/about/features.json +28 -0
- package/dist/templates/contents/themes/starter/blocks/hero/component.tsx +112 -0
- package/dist/templates/contents/themes/starter/blocks/hero/config.ts +11 -0
- package/dist/templates/contents/themes/starter/blocks/hero/fields.ts +74 -0
- package/dist/templates/contents/themes/starter/blocks/hero/index.ts +6 -0
- package/dist/templates/contents/themes/starter/blocks/hero/schema.ts +34 -0
- package/dist/templates/contents/themes/starter/config/app.config.ts +193 -0
- package/dist/templates/contents/themes/starter/config/billing.config.ts +93 -0
- package/dist/templates/contents/themes/starter/config/dashboard.config.ts +419 -0
- package/dist/templates/contents/themes/starter/config/dev.config.ts +74 -0
- package/dist/templates/contents/themes/starter/config/permissions.config.ts +64 -0
- package/dist/templates/contents/themes/starter/config/theme.config.ts +83 -0
- package/dist/templates/contents/themes/starter/docs/01-overview/01-introduction.md +33 -0
- package/dist/templates/contents/themes/starter/docs/01-overview/02-customization.md +46 -0
- package/dist/templates/contents/themes/starter/entities/tasks/messages/de.json +263 -0
- package/dist/templates/contents/themes/starter/entities/tasks/messages/en.json +263 -0
- package/dist/templates/contents/themes/starter/entities/tasks/messages/es.json +263 -0
- package/dist/templates/contents/themes/starter/entities/tasks/messages/fr.json +263 -0
- package/dist/templates/contents/themes/starter/entities/tasks/messages/it.json +263 -0
- package/dist/templates/contents/themes/starter/entities/tasks/messages/pt.json +263 -0
- package/dist/templates/contents/themes/starter/entities/tasks/migrations/001_tasks_table.sql +104 -0
- package/dist/templates/contents/themes/starter/entities/tasks/migrations/002_task_metas.sql +84 -0
- package/dist/templates/contents/themes/starter/entities/tasks/migrations/003_tasks_sample_data.sql +172 -0
- package/dist/templates/contents/themes/starter/entities/tasks/tasks.config.ts +131 -0
- package/dist/templates/contents/themes/starter/entities/tasks/tasks.fields.ts +188 -0
- package/dist/templates/contents/themes/starter/entities/tasks/tasks.service.ts +390 -0
- package/dist/templates/contents/themes/starter/entities/tasks/tasks.types.ts +82 -0
- package/dist/templates/contents/themes/starter/lib/hooks/index.ts +1 -0
- package/dist/templates/contents/themes/starter/lib/hooks/useTaskStats.ts +57 -0
- package/dist/templates/contents/themes/starter/lib/index.ts +8 -0
- package/dist/templates/contents/themes/starter/lib/selectors.ts +94 -0
- package/dist/templates/contents/themes/starter/lib/utils.ts +154 -0
- package/dist/templates/contents/themes/starter/messages/de/analytics.json +39 -0
- package/dist/templates/contents/themes/starter/messages/de/common.json +33 -0
- package/dist/templates/contents/themes/starter/messages/de/home.json +30 -0
- package/dist/templates/contents/themes/starter/messages/de/navigation.json +16 -0
- package/dist/templates/contents/themes/starter/messages/en/analytics.json +39 -0
- package/dist/templates/contents/themes/starter/messages/en/common.json +33 -0
- package/dist/templates/contents/themes/starter/messages/en/home.json +30 -0
- package/dist/templates/contents/themes/starter/messages/en/navigation.json +16 -0
- package/dist/templates/contents/themes/starter/messages/es/analytics.json +39 -0
- package/dist/templates/contents/themes/starter/messages/es/common.json +33 -0
- package/dist/templates/contents/themes/starter/messages/es/home.json +30 -0
- package/dist/templates/contents/themes/starter/messages/es/navigation.json +16 -0
- package/dist/templates/contents/themes/starter/messages/fr/analytics.json +39 -0
- package/dist/templates/contents/themes/starter/messages/fr/common.json +33 -0
- package/dist/templates/contents/themes/starter/messages/fr/home.json +30 -0
- package/dist/templates/contents/themes/starter/messages/fr/navigation.json +16 -0
- package/dist/templates/contents/themes/starter/messages/it/analytics.json +39 -0
- package/dist/templates/contents/themes/starter/messages/it/common.json +33 -0
- package/dist/templates/contents/themes/starter/messages/it/home.json +30 -0
- package/dist/templates/contents/themes/starter/messages/it/navigation.json +16 -0
- package/dist/templates/contents/themes/starter/messages/pt/analytics.json +39 -0
- package/dist/templates/contents/themes/starter/messages/pt/common.json +33 -0
- package/dist/templates/contents/themes/starter/messages/pt/home.json +30 -0
- package/dist/templates/contents/themes/starter/messages/pt/navigation.json +16 -0
- package/dist/templates/contents/themes/starter/migrations/001_starter_users.sql +17 -0
- package/dist/templates/contents/themes/starter/migrations/README.md +19 -0
- package/dist/templates/contents/themes/starter/public/brand/.gitkeep +0 -0
- package/dist/templates/contents/themes/starter/public/theme/blocks/hero/thumbnail.png +1 -0
- package/dist/templates/contents/themes/starter/styles/components.css +16 -0
- package/dist/templates/contents/themes/starter/styles/globals.css +20 -0
- package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/_hooks/useAnalyticsData.ts +41 -0
- package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/components/RecentActivity.tsx +78 -0
- package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/components/StatsCard.tsx +58 -0
- package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/components/TasksChart.tsx +80 -0
- package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/page.tsx +45 -0
- package/dist/templates/contents/themes/starter/templates/(public)/layout.tsx +15 -0
- package/dist/templates/contents/themes/starter/templates/(public)/page.tsx +37 -0
- package/dist/templates/contents/themes/starter/templates/(public)/support/page.tsx +14 -0
- package/dist/templates/contents/themes/starter/tests/cypress/e2e/tasks/TaskAPIController.js +240 -0
- package/dist/templates/contents/themes/starter/tests/cypress/e2e/tasks/TasksPOM.ts +246 -0
- package/dist/templates/contents/themes/starter/tests/cypress/e2e/tasks/tasks-crud.cy.ts +423 -0
- package/dist/templates/contents/themes/starter/tests/cypress/fixtures/entities.json +63 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/controllers/BaseAPIController.js +317 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/controllers/index.js +12 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/core/AuthPOM.ts +464 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/core/BasePOM.ts +130 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/core/DashboardEntityPOM.ts +761 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/core/index.ts +12 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/helpers/ApiInterceptor.ts +170 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/selectors.ts +155 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/session-helpers.ts +255 -0
- package/dist/templates/contents/themes/starter/tests/cypress/support/commands.ts +192 -0
- package/dist/templates/contents/themes/starter/tests/cypress/support/doc-commands.ts +260 -0
- package/dist/templates/contents/themes/starter/tests/cypress/support/e2e.ts +21 -0
- package/dist/templates/contents/themes/starter/tests/cypress.config.ts +155 -0
- package/dist/templates/contents/themes/starter/tests/tsconfig.json +15 -0
- package/dist/templates/eslint.config.mjs +16 -0
- package/dist/templates/features/blog/blocks/post-content/component.tsx +197 -0
- package/dist/templates/features/blog/blocks/post-content/config.ts +11 -0
- package/dist/templates/features/blog/blocks/post-content/examples.ts +33 -0
- package/dist/templates/features/blog/blocks/post-content/fields.ts +165 -0
- package/dist/templates/features/blog/blocks/post-content/index.ts +4 -0
- package/dist/templates/features/blog/blocks/post-content/schema.ts +46 -0
- package/dist/templates/features/blog/entities/posts/components/post-header.tsx +97 -0
- package/dist/templates/features/blog/entities/posts/messages/en.json +55 -0
- package/dist/templates/features/blog/entities/posts/messages/es.json +55 -0
- package/dist/templates/features/blog/entities/posts/migrations/001_posts_table.sql +115 -0
- package/dist/templates/features/blog/entities/posts/migrations/003_add_status.sql +44 -0
- package/dist/templates/features/blog/entities/posts/migrations/004_entity_taxonomy_relations.sql +129 -0
- package/dist/templates/features/blog/entities/posts/migrations/006_posts_metas.sql +56 -0
- package/dist/templates/features/blog/entities/posts/posts.config.ts +112 -0
- package/dist/templates/features/blog/entities/posts/posts.fields.ts +116 -0
- package/dist/templates/features/blog/entities/posts/posts.service.ts +376 -0
- package/dist/templates/features/blog/entities/posts/posts.types.ts +74 -0
- package/dist/templates/features/pages/entities/pages/messages/en.json +41 -0
- package/dist/templates/features/pages/entities/pages/messages/es.json +41 -0
- package/dist/templates/features/pages/entities/pages/migrations/001_pages_table.sql +112 -0
- package/dist/templates/features/pages/entities/pages/migrations/002_pages_metas.sql +56 -0
- package/dist/templates/features/pages/entities/pages/migrations/003_add_status.sql +50 -0
- package/dist/templates/features/pages/entities/pages/pages-management.service.ts +610 -0
- package/dist/templates/features/pages/entities/pages/pages.config.ts +105 -0
- package/dist/templates/features/pages/entities/pages/pages.fields.ts +101 -0
- package/dist/templates/features/pages/entities/pages/pages.service.ts +290 -0
- package/dist/templates/features/pages/entities/pages/pages.types.ts +124 -0
- package/package.json +33 -2
- package/scripts/build/registry/generators/translation-registry.mjs +135 -18
- package/templates/contents/themes/default/entities/customers/messages/de.json +66 -0
- package/templates/contents/themes/default/entities/customers/messages/fr.json +66 -0
- package/templates/contents/themes/default/entities/customers/messages/it.json +66 -0
- package/templates/contents/themes/default/entities/customers/messages/pt.json +66 -0
- package/templates/contents/themes/default/entities/pages/messages/de.json +41 -0
- package/templates/contents/themes/default/entities/pages/messages/fr.json +41 -0
- package/templates/contents/themes/default/entities/pages/messages/it.json +41 -0
- package/templates/contents/themes/default/entities/pages/messages/pt.json +41 -0
- package/templates/contents/themes/default/entities/posts/messages/de.json +55 -0
- package/templates/contents/themes/default/entities/posts/messages/fr.json +55 -0
- package/templates/contents/themes/default/entities/posts/messages/it.json +55 -0
- package/templates/contents/themes/default/entities/posts/messages/pt.json +55 -0
- package/templates/contents/themes/default/entities/tasks/messages/de.json +204 -0
- package/templates/contents/themes/default/entities/tasks/messages/fr.json +204 -0
- package/templates/contents/themes/default/entities/tasks/messages/it.json +204 -0
- package/templates/contents/themes/default/entities/tasks/messages/pt.json +204 -0
- package/templates/contents/themes/default/messages/de/admin.json +219 -0
- package/templates/contents/themes/default/messages/de/aiUsage.json +36 -0
- package/templates/contents/themes/default/messages/de/buttons.json +19 -0
- package/templates/contents/themes/default/messages/de/categories.json +35 -0
- package/templates/contents/themes/default/messages/de/common.json +16 -0
- package/templates/contents/themes/default/messages/de/dev.json +106 -0
- package/templates/contents/themes/default/messages/de/docs.json +27 -0
- package/templates/contents/themes/default/messages/de/entities.json +7 -0
- package/templates/contents/themes/default/messages/de/features.json +119 -0
- package/templates/contents/themes/default/messages/de/footer.json +22 -0
- package/templates/contents/themes/default/messages/de/home.json +57 -0
- package/templates/contents/themes/default/messages/de/index.ts +39 -0
- package/templates/contents/themes/default/messages/de/mobileNav.json +13 -0
- package/templates/contents/themes/default/messages/de/navigation.json +8 -0
- package/templates/contents/themes/default/messages/de/observability.json +74 -0
- package/templates/contents/themes/default/messages/de/posts.json +54 -0
- package/templates/contents/themes/default/messages/de/pricing.json +102 -0
- package/templates/contents/themes/default/messages/de/support.json +9 -0
- package/templates/contents/themes/default/messages/de/teams.json +8 -0
- package/templates/contents/themes/default/messages/es/admin.json +219 -0
- package/templates/contents/themes/default/messages/es/aiUsage.json +36 -0
- package/templates/contents/themes/default/messages/es/buttons.json +19 -0
- package/templates/contents/themes/default/messages/es/categories.json +35 -0
- package/templates/contents/themes/default/messages/es/common.json +16 -0
- package/templates/contents/themes/default/messages/es/dev.json +101 -0
- package/templates/contents/themes/default/messages/es/docs.json +27 -0
- package/templates/contents/themes/default/messages/es/entities.json +7 -0
- package/templates/contents/themes/default/messages/es/features.json +119 -0
- package/templates/contents/themes/default/messages/es/footer.json +22 -0
- package/templates/contents/themes/default/messages/es/home.json +57 -0
- package/templates/contents/themes/default/messages/es/index.ts +39 -0
- package/templates/contents/themes/default/messages/es/mobileNav.json +13 -0
- package/templates/contents/themes/default/messages/es/navigation.json +8 -0
- package/templates/contents/themes/default/messages/es/observability.json +74 -0
- package/templates/contents/themes/default/messages/es/posts.json +54 -0
- package/templates/contents/themes/default/messages/es/pricing.json +102 -0
- package/templates/contents/themes/default/messages/es/support.json +9 -0
- package/templates/contents/themes/default/messages/es/teams.json +8 -0
- package/templates/contents/themes/default/messages/fr/admin.json +219 -0
- package/templates/contents/themes/default/messages/fr/aiUsage.json +36 -0
- package/templates/contents/themes/default/messages/fr/buttons.json +19 -0
- package/templates/contents/themes/default/messages/fr/categories.json +35 -0
- package/templates/contents/themes/default/messages/fr/common.json +16 -0
- package/templates/contents/themes/default/messages/fr/dev.json +106 -0
- package/templates/contents/themes/default/messages/fr/docs.json +27 -0
- package/templates/contents/themes/default/messages/fr/entities.json +7 -0
- package/templates/contents/themes/default/messages/fr/features.json +119 -0
- package/templates/contents/themes/default/messages/fr/footer.json +22 -0
- package/templates/contents/themes/default/messages/fr/home.json +57 -0
- package/templates/contents/themes/default/messages/fr/index.ts +39 -0
- package/templates/contents/themes/default/messages/fr/mobileNav.json +13 -0
- package/templates/contents/themes/default/messages/fr/navigation.json +8 -0
- package/templates/contents/themes/default/messages/fr/observability.json +74 -0
- package/templates/contents/themes/default/messages/fr/posts.json +54 -0
- package/templates/contents/themes/default/messages/fr/pricing.json +102 -0
- package/templates/contents/themes/default/messages/fr/support.json +9 -0
- package/templates/contents/themes/default/messages/fr/teams.json +8 -0
- package/templates/contents/themes/default/messages/it/admin.json +219 -0
- package/templates/contents/themes/default/messages/it/aiUsage.json +36 -0
- package/templates/contents/themes/default/messages/it/buttons.json +19 -0
- package/templates/contents/themes/default/messages/it/categories.json +35 -0
- package/templates/contents/themes/default/messages/it/common.json +16 -0
- package/templates/contents/themes/default/messages/it/dev.json +106 -0
- package/templates/contents/themes/default/messages/it/docs.json +27 -0
- package/templates/contents/themes/default/messages/it/entities.json +7 -0
- package/templates/contents/themes/default/messages/it/features.json +119 -0
- package/templates/contents/themes/default/messages/it/footer.json +22 -0
- package/templates/contents/themes/default/messages/it/home.json +57 -0
- package/templates/contents/themes/default/messages/it/index.ts +39 -0
- package/templates/contents/themes/default/messages/it/mobileNav.json +13 -0
- package/templates/contents/themes/default/messages/it/navigation.json +8 -0
- package/templates/contents/themes/default/messages/it/observability.json +74 -0
- package/templates/contents/themes/default/messages/it/posts.json +54 -0
- package/templates/contents/themes/default/messages/it/pricing.json +102 -0
- package/templates/contents/themes/default/messages/it/support.json +9 -0
- package/templates/contents/themes/default/messages/it/teams.json +8 -0
- package/templates/contents/themes/default/messages/pt/admin.json +219 -0
- package/templates/contents/themes/default/messages/pt/aiUsage.json +36 -0
- package/templates/contents/themes/default/messages/pt/buttons.json +19 -0
- package/templates/contents/themes/default/messages/pt/categories.json +35 -0
- package/templates/contents/themes/default/messages/pt/common.json +16 -0
- package/templates/contents/themes/default/messages/pt/dev.json +106 -0
- package/templates/contents/themes/default/messages/pt/docs.json +27 -0
- package/templates/contents/themes/default/messages/pt/entities.json +7 -0
- package/templates/contents/themes/default/messages/pt/features.json +119 -0
- package/templates/contents/themes/default/messages/pt/footer.json +22 -0
- package/templates/contents/themes/default/messages/pt/home.json +57 -0
- package/templates/contents/themes/default/messages/pt/index.ts +39 -0
- package/templates/contents/themes/default/messages/pt/mobileNav.json +13 -0
- package/templates/contents/themes/default/messages/pt/navigation.json +8 -0
- package/templates/contents/themes/default/messages/pt/observability.json +74 -0
- package/templates/contents/themes/default/messages/pt/posts.json +54 -0
- package/templates/contents/themes/default/messages/pt/pricing.json +102 -0
- package/templates/contents/themes/default/messages/pt/support.json +9 -0
- package/templates/contents/themes/default/messages/pt/teams.json +8 -0
- package/templates/contents/themes/starter/README.md +35 -0
- package/templates/contents/themes/starter/about/business.md +16 -0
- package/templates/contents/themes/starter/about/features.json +28 -0
- package/templates/contents/themes/starter/blocks/hero/component.tsx +112 -0
- package/templates/contents/themes/starter/blocks/hero/config.ts +11 -0
- package/templates/contents/themes/starter/blocks/hero/fields.ts +74 -0
- package/templates/contents/themes/starter/blocks/hero/index.ts +6 -0
- package/templates/contents/themes/starter/blocks/hero/schema.ts +34 -0
- package/templates/contents/themes/starter/config/app.config.ts +193 -0
- package/templates/contents/themes/starter/config/billing.config.ts +93 -0
- package/templates/contents/themes/starter/config/dashboard.config.ts +419 -0
- package/templates/contents/themes/starter/config/dev.config.ts +74 -0
- package/templates/contents/themes/starter/config/permissions.config.ts +64 -0
- package/templates/contents/themes/starter/config/theme.config.ts +83 -0
- package/templates/contents/themes/starter/docs/01-overview/01-introduction.md +33 -0
- package/templates/contents/themes/starter/docs/01-overview/02-customization.md +46 -0
- package/templates/contents/themes/starter/entities/tasks/messages/de.json +263 -0
- package/templates/contents/themes/starter/entities/tasks/messages/en.json +263 -0
- package/templates/contents/themes/starter/entities/tasks/messages/es.json +263 -0
- package/templates/contents/themes/starter/entities/tasks/messages/fr.json +263 -0
- package/templates/contents/themes/starter/entities/tasks/messages/it.json +263 -0
- package/templates/contents/themes/starter/entities/tasks/messages/pt.json +263 -0
- package/templates/contents/themes/starter/entities/tasks/migrations/001_tasks_table.sql +104 -0
- package/templates/contents/themes/starter/entities/tasks/migrations/002_task_metas.sql +84 -0
- package/templates/contents/themes/starter/entities/tasks/migrations/003_tasks_sample_data.sql +172 -0
- package/templates/contents/themes/starter/entities/tasks/tasks.config.ts +131 -0
- package/templates/contents/themes/starter/entities/tasks/tasks.fields.ts +188 -0
- package/templates/contents/themes/starter/entities/tasks/tasks.service.ts +390 -0
- package/templates/contents/themes/starter/entities/tasks/tasks.types.ts +82 -0
- package/templates/contents/themes/starter/lib/hooks/index.ts +1 -0
- package/templates/contents/themes/starter/lib/hooks/useTaskStats.ts +57 -0
- package/templates/contents/themes/starter/lib/index.ts +8 -0
- package/templates/contents/themes/starter/lib/selectors.ts +94 -0
- package/templates/contents/themes/starter/lib/utils.ts +154 -0
- package/templates/contents/themes/starter/messages/de/analytics.json +39 -0
- package/templates/contents/themes/starter/messages/de/common.json +33 -0
- package/templates/contents/themes/starter/messages/de/home.json +30 -0
- package/templates/contents/themes/starter/messages/de/navigation.json +16 -0
- package/templates/contents/themes/starter/messages/en/analytics.json +39 -0
- package/templates/contents/themes/starter/messages/en/common.json +33 -0
- package/templates/contents/themes/starter/messages/en/home.json +30 -0
- package/templates/contents/themes/starter/messages/en/navigation.json +16 -0
- package/templates/contents/themes/starter/messages/es/analytics.json +39 -0
- package/templates/contents/themes/starter/messages/es/common.json +33 -0
- package/templates/contents/themes/starter/messages/es/home.json +30 -0
- package/templates/contents/themes/starter/messages/es/navigation.json +16 -0
- package/templates/contents/themes/starter/messages/fr/analytics.json +39 -0
- package/templates/contents/themes/starter/messages/fr/common.json +33 -0
- package/templates/contents/themes/starter/messages/fr/home.json +30 -0
- package/templates/contents/themes/starter/messages/fr/navigation.json +16 -0
- package/templates/contents/themes/starter/messages/it/analytics.json +39 -0
- package/templates/contents/themes/starter/messages/it/common.json +33 -0
- package/templates/contents/themes/starter/messages/it/home.json +30 -0
- package/templates/contents/themes/starter/messages/it/navigation.json +16 -0
- package/templates/contents/themes/starter/messages/pt/analytics.json +39 -0
- package/templates/contents/themes/starter/messages/pt/common.json +33 -0
- package/templates/contents/themes/starter/messages/pt/home.json +30 -0
- package/templates/contents/themes/starter/messages/pt/navigation.json +16 -0
- package/templates/contents/themes/starter/migrations/001_starter_users.sql +17 -0
- package/templates/contents/themes/starter/migrations/README.md +19 -0
- package/templates/contents/themes/starter/public/brand/.gitkeep +0 -0
- package/templates/contents/themes/starter/public/theme/blocks/hero/thumbnail.png +1 -0
- package/templates/contents/themes/starter/styles/components.css +16 -0
- package/templates/contents/themes/starter/styles/globals.css +20 -0
- package/templates/contents/themes/starter/templates/(dashboard)/analytics/_hooks/useAnalyticsData.ts +41 -0
- package/templates/contents/themes/starter/templates/(dashboard)/analytics/components/RecentActivity.tsx +78 -0
- package/templates/contents/themes/starter/templates/(dashboard)/analytics/components/StatsCard.tsx +58 -0
- package/templates/contents/themes/starter/templates/(dashboard)/analytics/components/TasksChart.tsx +80 -0
- package/templates/contents/themes/starter/templates/(dashboard)/analytics/page.tsx +45 -0
- package/templates/contents/themes/starter/templates/(public)/layout.tsx +15 -0
- package/templates/contents/themes/starter/templates/(public)/page.tsx +37 -0
- package/templates/contents/themes/starter/templates/(public)/support/page.tsx +14 -0
- package/templates/contents/themes/starter/tests/cypress/e2e/tasks/TaskAPIController.js +240 -0
- package/templates/contents/themes/starter/tests/cypress/e2e/tasks/TasksPOM.ts +246 -0
- package/templates/contents/themes/starter/tests/cypress/e2e/tasks/tasks-crud.cy.ts +423 -0
- package/templates/contents/themes/starter/tests/cypress/fixtures/entities.json +63 -0
- package/templates/contents/themes/starter/tests/cypress/src/controllers/BaseAPIController.js +317 -0
- package/templates/contents/themes/starter/tests/cypress/src/controllers/index.js +12 -0
- package/templates/contents/themes/starter/tests/cypress/src/core/AuthPOM.ts +464 -0
- package/templates/contents/themes/starter/tests/cypress/src/core/BasePOM.ts +130 -0
- package/templates/contents/themes/starter/tests/cypress/src/core/DashboardEntityPOM.ts +761 -0
- package/templates/contents/themes/starter/tests/cypress/src/core/index.ts +12 -0
- package/templates/contents/themes/starter/tests/cypress/src/helpers/ApiInterceptor.ts +170 -0
- package/templates/contents/themes/starter/tests/cypress/src/selectors.ts +155 -0
- package/templates/contents/themes/starter/tests/cypress/src/session-helpers.ts +255 -0
- package/templates/contents/themes/starter/tests/cypress/support/commands.ts +192 -0
- package/templates/contents/themes/starter/tests/cypress/support/doc-commands.ts +260 -0
- package/templates/contents/themes/starter/tests/cypress/support/e2e.ts +21 -0
- package/templates/contents/themes/starter/tests/cypress.config.ts +155 -0
- package/templates/contents/themes/starter/tests/tsconfig.json +15 -0
- package/templates/eslint.config.mjs +16 -0
- package/templates/features/blog/blocks/post-content/component.tsx +197 -0
- package/templates/features/blog/blocks/post-content/config.ts +11 -0
- package/templates/features/blog/blocks/post-content/examples.ts +33 -0
- package/templates/features/blog/blocks/post-content/fields.ts +165 -0
- package/templates/features/blog/blocks/post-content/index.ts +4 -0
- package/templates/features/blog/blocks/post-content/schema.ts +46 -0
- package/templates/features/blog/entities/posts/components/post-header.tsx +97 -0
- package/templates/features/blog/entities/posts/messages/en.json +55 -0
- package/templates/features/blog/entities/posts/messages/es.json +55 -0
- package/templates/features/blog/entities/posts/migrations/001_posts_table.sql +115 -0
- package/templates/features/blog/entities/posts/migrations/003_add_status.sql +44 -0
- package/templates/features/blog/entities/posts/migrations/004_entity_taxonomy_relations.sql +129 -0
- package/templates/features/blog/entities/posts/migrations/006_posts_metas.sql +56 -0
- package/templates/features/blog/entities/posts/posts.config.ts +112 -0
- package/templates/features/blog/entities/posts/posts.fields.ts +116 -0
- package/templates/features/blog/entities/posts/posts.service.ts +376 -0
- package/templates/features/blog/entities/posts/posts.types.ts +74 -0
- package/templates/features/pages/entities/pages/messages/en.json +41 -0
- package/templates/features/pages/entities/pages/messages/es.json +41 -0
- package/templates/features/pages/entities/pages/migrations/001_pages_table.sql +112 -0
- package/templates/features/pages/entities/pages/migrations/002_pages_metas.sql +56 -0
- package/templates/features/pages/entities/pages/migrations/003_add_status.sql +50 -0
- package/templates/features/pages/entities/pages/pages-management.service.ts +610 -0
- package/templates/features/pages/entities/pages/pages.config.ts +105 -0
- package/templates/features/pages/entities/pages/pages.fields.ts +101 -0
- package/templates/features/pages/entities/pages/pages.service.ts +290 -0
- package/templates/features/pages/entities/pages/pages.types.ts +124 -0
- package/dist/templates/contents/themes/default/messages/en.json +0 -934
- package/dist/templates/contents/themes/default/messages/en.json.backup +0 -934
- package/dist/templates/contents/themes/default/messages/es.json +0 -929
- package/templates/contents/themes/default/messages/en.json +0 -934
- package/templates/contents/themes/default/messages/en.json.backup +0 -934
- package/templates/contents/themes/default/messages/es.json +0 -929
|
@@ -0,0 +1,724 @@
|
|
|
1
|
+
#!/usr/bin/env npx ts-node
|
|
2
|
+
/**
|
|
3
|
+
* Automated Wizard Test Script
|
|
4
|
+
*
|
|
5
|
+
* Tests the wizard generators with different configurations
|
|
6
|
+
* without requiring interactive input.
|
|
7
|
+
*
|
|
8
|
+
* Test Categories:
|
|
9
|
+
* 1. Core Generation Tests (existing)
|
|
10
|
+
* 2. Demo Theme Installation Tests
|
|
11
|
+
* 3. Preview Generation Tests
|
|
12
|
+
* 4. Post-Generation Validation Tests
|
|
13
|
+
* 5. Environment Setup Tests
|
|
14
|
+
* 6. Git Integration Tests
|
|
15
|
+
* 7. Health Check (Doctor) Tests
|
|
16
|
+
*/
|
|
17
|
+
import fs from 'fs-extra';
|
|
18
|
+
import path from 'path';
|
|
19
|
+
import { execSync } from 'child_process';
|
|
20
|
+
import { fileURLToPath } from 'url';
|
|
21
|
+
import { applyPreset } from './wizard/presets.js';
|
|
22
|
+
import { copyStarterTheme, copyContentFeatures, updateThemeConfig, updateDevConfig, updateAppConfig, updateBillingConfig, updateMigrations, updateRolesConfig, updatePermissionsConfig, updateDashboardConfig, processI18n, updateAuthConfig, updateDashboardUIConfig, updateDevToolsConfig, } from './wizard/generators/index.js';
|
|
23
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
24
|
+
const __dirname = path.dirname(__filename);
|
|
25
|
+
// =============================================================================
|
|
26
|
+
// FEATURE FLAGS - Enable as features are implemented
|
|
27
|
+
// =============================================================================
|
|
28
|
+
const FEATURES = {
|
|
29
|
+
DEMO_THEME: true, // Stream 1: Demo theme installation
|
|
30
|
+
PREVIEW: true, // Stream 2: Interactive preview
|
|
31
|
+
VALIDATION: true, // Stream 3: Post-generation validation
|
|
32
|
+
ENV_SETUP: true, // Stream 4: Environment setup
|
|
33
|
+
GIT_INIT: true, // Stream 5: Git integration
|
|
34
|
+
DOCTOR: true, // Stream 6: Health check command
|
|
35
|
+
};
|
|
36
|
+
// Test configurations
|
|
37
|
+
const TEST_SCENARIOS = [
|
|
38
|
+
{
|
|
39
|
+
name: 'saas-preset',
|
|
40
|
+
config: applyPreset({ projectName: 'TestSaaS', projectSlug: 'test-saas', projectDescription: 'Test SaaS App' }, 'saas'),
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'blog-preset',
|
|
44
|
+
config: applyPreset({ projectName: 'TestBlog', projectSlug: 'test-blog', projectDescription: 'Test Blog' }, 'blog'),
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'crm-preset',
|
|
48
|
+
config: applyPreset({ projectName: 'TestCRM', projectSlug: 'test-crm', projectDescription: 'Test CRM Tool' }, 'crm'),
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'multi-language',
|
|
52
|
+
config: {
|
|
53
|
+
projectName: 'MultiLang App',
|
|
54
|
+
projectSlug: 'multi-lang',
|
|
55
|
+
projectDescription: 'App with multiple languages',
|
|
56
|
+
teamMode: 'multi-tenant',
|
|
57
|
+
teamRoles: ['owner', 'admin', 'member'],
|
|
58
|
+
defaultLocale: 'es',
|
|
59
|
+
supportedLocales: ['en', 'es', 'fr', 'de'],
|
|
60
|
+
billingModel: 'paid',
|
|
61
|
+
currency: 'eur',
|
|
62
|
+
features: { analytics: true, teams: true, billing: true, api: true, docs: false },
|
|
63
|
+
contentFeatures: { pages: true, blog: true },
|
|
64
|
+
auth: { emailPassword: true, googleOAuth: true, emailVerification: true },
|
|
65
|
+
dashboard: { search: true, notifications: true, themeToggle: true, support: true, quickCreate: true, superadminAccess: true, devtoolsAccess: true, sidebarCollapsed: false },
|
|
66
|
+
dev: { devKeyring: true, debugMode: true },
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'minimal-single-user',
|
|
71
|
+
config: {
|
|
72
|
+
projectName: 'Personal App',
|
|
73
|
+
projectSlug: 'personal-app',
|
|
74
|
+
projectDescription: 'Minimal personal application',
|
|
75
|
+
teamMode: 'single-user',
|
|
76
|
+
teamRoles: ['owner'],
|
|
77
|
+
defaultLocale: 'en',
|
|
78
|
+
supportedLocales: ['en'],
|
|
79
|
+
billingModel: 'free',
|
|
80
|
+
currency: 'usd',
|
|
81
|
+
features: { analytics: false, teams: false, billing: false, api: false, docs: false },
|
|
82
|
+
contentFeatures: { pages: false, blog: false },
|
|
83
|
+
auth: { emailPassword: true, googleOAuth: false, emailVerification: false },
|
|
84
|
+
dashboard: { search: false, notifications: false, themeToggle: true, support: true, quickCreate: false, superadminAccess: true, devtoolsAccess: true, sidebarCollapsed: true },
|
|
85
|
+
dev: { devKeyring: true, debugMode: false },
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
];
|
|
89
|
+
// Colors for output
|
|
90
|
+
const RED = '\x1b[31m';
|
|
91
|
+
const GREEN = '\x1b[32m';
|
|
92
|
+
const YELLOW = '\x1b[33m';
|
|
93
|
+
const BLUE = '\x1b[34m';
|
|
94
|
+
const CYAN = '\x1b[36m';
|
|
95
|
+
const NC = '\x1b[0m';
|
|
96
|
+
function log(msg) { console.log(` ${msg}`); }
|
|
97
|
+
function logSuccess(msg) { console.log(` ${GREEN}✓ ${msg}${NC}`); }
|
|
98
|
+
function logError(msg) { console.log(` ${RED}✗ ${msg}${NC}`); }
|
|
99
|
+
function logInfo(msg) { console.log(` ${CYAN}ℹ ${msg}${NC}`); }
|
|
100
|
+
function logSection(msg) {
|
|
101
|
+
console.log('');
|
|
102
|
+
console.log(`${BLUE}═══════════════════════════════════════════════════════════════${NC}`);
|
|
103
|
+
console.log(`${CYAN} ${msg}${NC}`);
|
|
104
|
+
console.log(`${BLUE}═══════════════════════════════════════════════════════════════${NC}`);
|
|
105
|
+
}
|
|
106
|
+
async function validateGeneratedTheme(config, testDir) {
|
|
107
|
+
const result = {
|
|
108
|
+
scenario: config.projectSlug,
|
|
109
|
+
passed: true,
|
|
110
|
+
errors: [],
|
|
111
|
+
checks: [],
|
|
112
|
+
};
|
|
113
|
+
const themePath = path.join(testDir, 'contents', 'themes', config.projectSlug);
|
|
114
|
+
// Check 1: Theme directory exists
|
|
115
|
+
const themeExists = await fs.pathExists(themePath);
|
|
116
|
+
result.checks.push({ name: 'Theme directory exists', passed: themeExists });
|
|
117
|
+
if (!themeExists) {
|
|
118
|
+
result.passed = false;
|
|
119
|
+
result.errors.push(`Theme directory not found: ${themePath}`);
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
// Check 2: Config files exist
|
|
123
|
+
const configFiles = ['theme.config.ts', 'app.config.ts', 'dashboard.config.ts', 'dev.config.ts'];
|
|
124
|
+
for (const file of configFiles) {
|
|
125
|
+
const filePath = path.join(themePath, 'config', file);
|
|
126
|
+
const exists = await fs.pathExists(filePath);
|
|
127
|
+
result.checks.push({ name: `config/${file} exists`, passed: exists });
|
|
128
|
+
if (!exists) {
|
|
129
|
+
result.passed = false;
|
|
130
|
+
result.errors.push(`Missing config file: ${file}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Check 3: theme.config.ts has correct name
|
|
134
|
+
const themeConfigPath = path.join(themePath, 'config', 'theme.config.ts');
|
|
135
|
+
if (await fs.pathExists(themeConfigPath)) {
|
|
136
|
+
const content = await fs.readFile(themeConfigPath, 'utf-8');
|
|
137
|
+
const hasCorrectName = content.includes(`name: '${config.projectSlug}'`);
|
|
138
|
+
const hasCorrectDisplayName = content.includes(`displayName: '${config.projectName}'`);
|
|
139
|
+
result.checks.push({ name: 'theme.config.ts has correct name', passed: hasCorrectName });
|
|
140
|
+
result.checks.push({ name: 'theme.config.ts has correct displayName', passed: hasCorrectDisplayName });
|
|
141
|
+
if (!hasCorrectName || !hasCorrectDisplayName) {
|
|
142
|
+
result.passed = false;
|
|
143
|
+
result.errors.push('theme.config.ts not properly renamed');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Check 4: dev.config.ts has correct email domain
|
|
147
|
+
const devConfigPath = path.join(themePath, 'config', 'dev.config.ts');
|
|
148
|
+
if (await fs.pathExists(devConfigPath)) {
|
|
149
|
+
const content = await fs.readFile(devConfigPath, 'utf-8');
|
|
150
|
+
const hasCorrectDomain = content.includes(`@${config.projectSlug}.dev`);
|
|
151
|
+
const noStarterDomain = !content.includes('@starter.dev');
|
|
152
|
+
result.checks.push({ name: 'dev.config.ts has correct email domain', passed: hasCorrectDomain && noStarterDomain });
|
|
153
|
+
if (!hasCorrectDomain || !noStarterDomain) {
|
|
154
|
+
result.passed = false;
|
|
155
|
+
result.errors.push('dev.config.ts emails not properly renamed');
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Check 5: Only selected languages exist in messages/
|
|
159
|
+
const messagesDir = path.join(themePath, 'messages');
|
|
160
|
+
if (await fs.pathExists(messagesDir)) {
|
|
161
|
+
const folders = await fs.readdir(messagesDir);
|
|
162
|
+
const languageFolders = folders.filter(f => fs.statSync(path.join(messagesDir, f)).isDirectory());
|
|
163
|
+
for (const lang of languageFolders) {
|
|
164
|
+
const shouldExist = config.supportedLocales.includes(lang);
|
|
165
|
+
if (!shouldExist) {
|
|
166
|
+
result.passed = false;
|
|
167
|
+
result.errors.push(`Unexpected language folder: ${lang}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
for (const lang of config.supportedLocales) {
|
|
171
|
+
const exists = languageFolders.includes(lang);
|
|
172
|
+
result.checks.push({ name: `messages/${lang}/ exists`, passed: exists });
|
|
173
|
+
if (!exists) {
|
|
174
|
+
result.passed = false;
|
|
175
|
+
result.errors.push(`Missing language folder: ${lang}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Check 6: Entity exists
|
|
180
|
+
const tasksEntityPath = path.join(themePath, 'entities', 'tasks');
|
|
181
|
+
const entityExists = await fs.pathExists(tasksEntityPath);
|
|
182
|
+
result.checks.push({ name: 'entities/tasks exists', passed: entityExists });
|
|
183
|
+
// Check 7: Migrations exist
|
|
184
|
+
const migrationsPath = path.join(themePath, 'migrations');
|
|
185
|
+
const migrationsExist = await fs.pathExists(migrationsPath);
|
|
186
|
+
result.checks.push({ name: 'migrations/ exists', passed: migrationsExist });
|
|
187
|
+
// Check 8: Block exists
|
|
188
|
+
const heroBlockPath = path.join(themePath, 'blocks', 'hero');
|
|
189
|
+
const blockExists = await fs.pathExists(heroBlockPath);
|
|
190
|
+
result.checks.push({ name: 'blocks/hero exists', passed: blockExists });
|
|
191
|
+
// Check 9: Tests exist
|
|
192
|
+
const testsPath = path.join(themePath, 'tests', 'cypress');
|
|
193
|
+
const testsExist = await fs.pathExists(testsPath);
|
|
194
|
+
result.checks.push({ name: 'tests/cypress exists', passed: testsExist });
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
async function runScenario(scenario, testBaseDir) {
|
|
198
|
+
const testDir = path.join(testBaseDir, scenario.name);
|
|
199
|
+
logSection(`Testing: ${scenario.name}`);
|
|
200
|
+
logInfo(`Project: ${scenario.config.projectName} (${scenario.config.projectSlug})`);
|
|
201
|
+
logInfo(`Team Mode: ${scenario.config.teamMode}`);
|
|
202
|
+
logInfo(`Languages: ${scenario.config.supportedLocales.join(', ')}`);
|
|
203
|
+
logInfo(`Billing: ${scenario.config.billingModel}`);
|
|
204
|
+
try {
|
|
205
|
+
// Create test directory structure
|
|
206
|
+
await fs.ensureDir(path.join(testDir, 'contents', 'themes'));
|
|
207
|
+
// Change to test directory
|
|
208
|
+
const originalCwd = process.cwd();
|
|
209
|
+
process.chdir(testDir);
|
|
210
|
+
// Run generators
|
|
211
|
+
log('Running generators...');
|
|
212
|
+
await copyStarterTheme(scenario.config);
|
|
213
|
+
logSuccess('copyStarterTheme');
|
|
214
|
+
await copyContentFeatures(scenario.config);
|
|
215
|
+
logSuccess('copyContentFeatures');
|
|
216
|
+
await updateThemeConfig(scenario.config);
|
|
217
|
+
logSuccess('updateThemeConfig');
|
|
218
|
+
await updateDevConfig(scenario.config);
|
|
219
|
+
logSuccess('updateDevConfig');
|
|
220
|
+
await updateAppConfig(scenario.config);
|
|
221
|
+
logSuccess('updateAppConfig');
|
|
222
|
+
await updateBillingConfig(scenario.config);
|
|
223
|
+
logSuccess('updateBillingConfig');
|
|
224
|
+
await updateRolesConfig(scenario.config);
|
|
225
|
+
logSuccess('updateRolesConfig');
|
|
226
|
+
await updateMigrations(scenario.config);
|
|
227
|
+
logSuccess('updateMigrations');
|
|
228
|
+
await updatePermissionsConfig(scenario.config);
|
|
229
|
+
logSuccess('updatePermissionsConfig');
|
|
230
|
+
await updateDashboardConfig(scenario.config);
|
|
231
|
+
logSuccess('updateDashboardConfig');
|
|
232
|
+
await updateAuthConfig(scenario.config);
|
|
233
|
+
logSuccess('updateAuthConfig');
|
|
234
|
+
await updateDashboardUIConfig(scenario.config);
|
|
235
|
+
logSuccess('updateDashboardUIConfig');
|
|
236
|
+
await updateDevToolsConfig(scenario.config);
|
|
237
|
+
logSuccess('updateDevToolsConfig');
|
|
238
|
+
await processI18n(scenario.config);
|
|
239
|
+
logSuccess('processI18n');
|
|
240
|
+
// Restore original directory
|
|
241
|
+
process.chdir(originalCwd);
|
|
242
|
+
// Validate generated theme
|
|
243
|
+
log('');
|
|
244
|
+
log('Validating generated theme...');
|
|
245
|
+
const result = await validateGeneratedTheme(scenario.config, testDir);
|
|
246
|
+
// Print results
|
|
247
|
+
for (const check of result.checks) {
|
|
248
|
+
if (check.passed) {
|
|
249
|
+
logSuccess(check.name);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
logError(check.name);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return result;
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
logError(`Error: ${error.message}`);
|
|
259
|
+
return {
|
|
260
|
+
scenario: scenario.name,
|
|
261
|
+
passed: false,
|
|
262
|
+
errors: [error.message],
|
|
263
|
+
checks: [],
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// =============================================================================
|
|
268
|
+
// NEW FEATURE TESTS
|
|
269
|
+
// =============================================================================
|
|
270
|
+
/**
|
|
271
|
+
* Test Demo Theme Installation
|
|
272
|
+
*/
|
|
273
|
+
async function testDemoThemeInstallation(testDir) {
|
|
274
|
+
const result = {
|
|
275
|
+
scenario: 'demo-theme-installation',
|
|
276
|
+
passed: true,
|
|
277
|
+
errors: [],
|
|
278
|
+
checks: [],
|
|
279
|
+
};
|
|
280
|
+
if (!FEATURES.DEMO_THEME) {
|
|
281
|
+
result.checks.push({ name: 'Demo theme feature (SKIPPED - not implemented)', passed: true });
|
|
282
|
+
return result;
|
|
283
|
+
}
|
|
284
|
+
try {
|
|
285
|
+
// Dynamic import to avoid errors if module doesn't exist
|
|
286
|
+
const { installDemoTheme } = await import('./wizard/generators/demo-installer.js');
|
|
287
|
+
await fs.ensureDir(path.join(testDir, 'contents', 'themes'));
|
|
288
|
+
const originalCwd = process.cwd();
|
|
289
|
+
process.chdir(testDir);
|
|
290
|
+
await installDemoTheme();
|
|
291
|
+
// Verify default theme was copied
|
|
292
|
+
const defaultThemePath = path.join(testDir, 'contents', 'themes', 'default');
|
|
293
|
+
const exists = await fs.pathExists(defaultThemePath);
|
|
294
|
+
result.checks.push({ name: 'Default theme directory exists', passed: exists });
|
|
295
|
+
// Verify theme.config.ts has langchain enabled
|
|
296
|
+
const themeConfigPath = path.join(defaultThemePath, 'config', 'theme.config.ts');
|
|
297
|
+
if (await fs.pathExists(themeConfigPath)) {
|
|
298
|
+
const content = await fs.readFile(themeConfigPath, 'utf-8');
|
|
299
|
+
const hasLangchain = content.includes('langchain');
|
|
300
|
+
result.checks.push({ name: 'LangChain plugin enabled', passed: hasLangchain });
|
|
301
|
+
if (!hasLangchain) {
|
|
302
|
+
result.passed = false;
|
|
303
|
+
result.errors.push('LangChain plugin not enabled in demo theme');
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
process.chdir(originalCwd);
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
result.passed = false;
|
|
310
|
+
result.errors.push(`Demo theme test failed: ${error.message}`);
|
|
311
|
+
}
|
|
312
|
+
return result;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Test Interactive Preview
|
|
316
|
+
*/
|
|
317
|
+
async function testPreviewGeneration(config) {
|
|
318
|
+
const result = {
|
|
319
|
+
scenario: 'preview-generation',
|
|
320
|
+
passed: true,
|
|
321
|
+
errors: [],
|
|
322
|
+
checks: [],
|
|
323
|
+
};
|
|
324
|
+
if (!FEATURES.PREVIEW) {
|
|
325
|
+
result.checks.push({ name: 'Preview feature (SKIPPED - not implemented)', passed: true });
|
|
326
|
+
return result;
|
|
327
|
+
}
|
|
328
|
+
try {
|
|
329
|
+
const { getFileTree, showConfigPreview } = await import('./wizard/preview.js');
|
|
330
|
+
// Test file tree generation
|
|
331
|
+
const fileTree = getFileTree(config);
|
|
332
|
+
result.checks.push({ name: 'File tree generated', passed: Array.isArray(fileTree) });
|
|
333
|
+
result.checks.push({ name: 'File tree not empty', passed: fileTree.length > 0 });
|
|
334
|
+
// Verify language folders match config
|
|
335
|
+
const langFolders = fileTree.filter(f => f.includes('messages/'));
|
|
336
|
+
for (const locale of config.supportedLocales) {
|
|
337
|
+
const hasLocale = langFolders.some(f => f.includes(`messages/${locale}`));
|
|
338
|
+
result.checks.push({ name: `Preview includes messages/${locale}`, passed: hasLocale });
|
|
339
|
+
if (!hasLocale) {
|
|
340
|
+
result.passed = false;
|
|
341
|
+
result.errors.push(`Preview missing locale: ${locale}`);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
result.passed = false;
|
|
347
|
+
result.errors.push(`Preview test failed: ${error.message}`);
|
|
348
|
+
}
|
|
349
|
+
return result;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Test Post-Generation Validation
|
|
353
|
+
*
|
|
354
|
+
* This test copies the generated theme to the actual repo, builds registries,
|
|
355
|
+
* and then runs TypeScript validation in the full project context.
|
|
356
|
+
*/
|
|
357
|
+
async function testValidation(themePath, config) {
|
|
358
|
+
const result = {
|
|
359
|
+
scenario: 'post-generation-validation',
|
|
360
|
+
passed: true,
|
|
361
|
+
errors: [],
|
|
362
|
+
checks: [],
|
|
363
|
+
};
|
|
364
|
+
if (!FEATURES.VALIDATION) {
|
|
365
|
+
result.checks.push({ name: 'Validation feature (SKIPPED - not implemented)', passed: true });
|
|
366
|
+
return result;
|
|
367
|
+
}
|
|
368
|
+
// Get the actual repo's themes directory (relative to this script location)
|
|
369
|
+
const repoRoot = path.resolve(__dirname, '../../../..');
|
|
370
|
+
const repoThemesDir = path.join(repoRoot, 'contents', 'themes');
|
|
371
|
+
const testThemePath = path.join(repoThemesDir, config.projectSlug);
|
|
372
|
+
try {
|
|
373
|
+
// 1. Copy generated theme to the actual repo
|
|
374
|
+
log(` Copying theme to repo for validation...`);
|
|
375
|
+
await fs.ensureDir(repoThemesDir);
|
|
376
|
+
// Remove if exists from previous run
|
|
377
|
+
if (await fs.pathExists(testThemePath)) {
|
|
378
|
+
await fs.remove(testThemePath);
|
|
379
|
+
}
|
|
380
|
+
await fs.copy(themePath, testThemePath);
|
|
381
|
+
result.checks.push({ name: 'Theme copied to repo', passed: true });
|
|
382
|
+
// 2. Build registries with the test theme
|
|
383
|
+
log(` Building registries for ${config.projectSlug}...`);
|
|
384
|
+
try {
|
|
385
|
+
execSync(`NEXT_PUBLIC_ACTIVE_THEME=${config.projectSlug} node packages/core/scripts/build/registry.mjs`, {
|
|
386
|
+
cwd: repoRoot,
|
|
387
|
+
stdio: 'pipe',
|
|
388
|
+
timeout: 60000,
|
|
389
|
+
});
|
|
390
|
+
result.checks.push({ name: 'Registries built successfully', passed: true });
|
|
391
|
+
}
|
|
392
|
+
catch (buildError) {
|
|
393
|
+
const error = buildError;
|
|
394
|
+
const stderr = error.stderr?.toString() || '';
|
|
395
|
+
const stdout = error.stdout?.toString() || '';
|
|
396
|
+
result.checks.push({ name: 'Registries built successfully', passed: false });
|
|
397
|
+
result.passed = false;
|
|
398
|
+
result.errors.push(`Registry build failed: ${stderr || stdout}`);
|
|
399
|
+
// Clean up and return early
|
|
400
|
+
await fs.remove(testThemePath);
|
|
401
|
+
return result;
|
|
402
|
+
}
|
|
403
|
+
// 3. Run TypeScript validation
|
|
404
|
+
log(` Running TypeScript validation...`);
|
|
405
|
+
const { validateGeneratedTheme } = await import('./wizard/validators/index.js');
|
|
406
|
+
// Change to repo root for validation
|
|
407
|
+
const originalCwd = process.cwd();
|
|
408
|
+
process.chdir(repoRoot);
|
|
409
|
+
const validationResult = await validateGeneratedTheme(testThemePath, config);
|
|
410
|
+
process.chdir(originalCwd);
|
|
411
|
+
result.checks.push({ name: 'TypeScript validation completed', passed: true });
|
|
412
|
+
result.checks.push({ name: 'Theme compiles without errors', passed: validationResult.valid });
|
|
413
|
+
if (!validationResult.valid) {
|
|
414
|
+
result.passed = false;
|
|
415
|
+
// Limit errors to first 10 for readability
|
|
416
|
+
const errorsToShow = validationResult.errors.slice(0, 10);
|
|
417
|
+
for (const error of errorsToShow) {
|
|
418
|
+
result.errors.push(`TS Error: ${error.message}`);
|
|
419
|
+
}
|
|
420
|
+
if (validationResult.errors.length > 10) {
|
|
421
|
+
result.errors.push(`... and ${validationResult.errors.length - 10} more errors`);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
// Check for warnings
|
|
425
|
+
if (validationResult.warnings.length > 0) {
|
|
426
|
+
result.checks.push({
|
|
427
|
+
name: `Warnings: ${validationResult.warnings.length}`,
|
|
428
|
+
passed: true // Warnings don't fail the test
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
catch (error) {
|
|
433
|
+
result.passed = false;
|
|
434
|
+
result.errors.push(`Validation test failed: ${error.message}`);
|
|
435
|
+
}
|
|
436
|
+
finally {
|
|
437
|
+
// 4. Clean up - remove test theme from repo
|
|
438
|
+
log(` Cleaning up test theme...`);
|
|
439
|
+
try {
|
|
440
|
+
if (await fs.pathExists(testThemePath)) {
|
|
441
|
+
await fs.remove(testThemePath);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
catch {
|
|
445
|
+
// Ignore cleanup errors
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return result;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Test Environment Setup
|
|
452
|
+
*/
|
|
453
|
+
async function testEnvSetup(testDir, config) {
|
|
454
|
+
const result = {
|
|
455
|
+
scenario: 'environment-setup',
|
|
456
|
+
passed: true,
|
|
457
|
+
errors: [],
|
|
458
|
+
checks: [],
|
|
459
|
+
};
|
|
460
|
+
if (!FEATURES.ENV_SETUP) {
|
|
461
|
+
result.checks.push({ name: 'Env setup feature (SKIPPED - not implemented)', passed: true });
|
|
462
|
+
return result;
|
|
463
|
+
}
|
|
464
|
+
try {
|
|
465
|
+
const { setupEnvironment } = await import('./wizard/generators/env-setup.js');
|
|
466
|
+
// Create .env.example first
|
|
467
|
+
const envExamplePath = path.join(testDir, '.env.example');
|
|
468
|
+
await fs.writeFile(envExamplePath, `
|
|
469
|
+
DATABASE_URL=
|
|
470
|
+
BETTER_AUTH_SECRET=
|
|
471
|
+
NEXT_PUBLIC_ACTIVE_THEME=
|
|
472
|
+
`);
|
|
473
|
+
await setupEnvironment(testDir, {
|
|
474
|
+
setupEnv: true,
|
|
475
|
+
generateSecrets: true,
|
|
476
|
+
databaseUrl: 'postgresql://test:test@localhost:5432/test'
|
|
477
|
+
}, config);
|
|
478
|
+
// Verify .env was created
|
|
479
|
+
const envPath = path.join(testDir, '.env');
|
|
480
|
+
const envExists = await fs.pathExists(envPath);
|
|
481
|
+
result.checks.push({ name: '.env file created', passed: envExists });
|
|
482
|
+
if (envExists) {
|
|
483
|
+
const envContent = await fs.readFile(envPath, 'utf-8');
|
|
484
|
+
// Check secrets were generated
|
|
485
|
+
const hasAuthSecret = envContent.includes('BETTER_AUTH_SECRET=') &&
|
|
486
|
+
!envContent.includes('BETTER_AUTH_SECRET=\n');
|
|
487
|
+
result.checks.push({ name: 'AUTH_SECRET generated', passed: hasAuthSecret });
|
|
488
|
+
// Check theme is set
|
|
489
|
+
const hasTheme = envContent.includes(`NEXT_PUBLIC_ACTIVE_THEME=${config.projectSlug}`);
|
|
490
|
+
result.checks.push({ name: 'ACTIVE_THEME set correctly', passed: hasTheme });
|
|
491
|
+
// Check database URL
|
|
492
|
+
const hasDbUrl = envContent.includes('DATABASE_URL=postgresql');
|
|
493
|
+
result.checks.push({ name: 'DATABASE_URL configured', passed: hasDbUrl });
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
catch (error) {
|
|
497
|
+
result.passed = false;
|
|
498
|
+
result.errors.push(`Env setup test failed: ${error.message}`);
|
|
499
|
+
}
|
|
500
|
+
return result;
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* Test Git Integration
|
|
504
|
+
*/
|
|
505
|
+
async function testGitIntegration(testDir, config) {
|
|
506
|
+
const result = {
|
|
507
|
+
scenario: 'git-integration',
|
|
508
|
+
passed: true,
|
|
509
|
+
errors: [],
|
|
510
|
+
checks: [],
|
|
511
|
+
};
|
|
512
|
+
if (!FEATURES.GIT_INIT) {
|
|
513
|
+
result.checks.push({ name: 'Git integration feature (SKIPPED - not implemented)', passed: true });
|
|
514
|
+
return result;
|
|
515
|
+
}
|
|
516
|
+
try {
|
|
517
|
+
const { setupGit } = await import('./wizard/generators/git-init.js');
|
|
518
|
+
await setupGit(testDir, {
|
|
519
|
+
initGit: true,
|
|
520
|
+
createCommit: true,
|
|
521
|
+
commitMessage: 'Initial commit from test'
|
|
522
|
+
}, config);
|
|
523
|
+
// Verify .git directory exists
|
|
524
|
+
const gitDirExists = await fs.pathExists(path.join(testDir, '.git'));
|
|
525
|
+
result.checks.push({ name: '.git directory created', passed: gitDirExists });
|
|
526
|
+
// Verify .gitignore exists
|
|
527
|
+
const gitignoreExists = await fs.pathExists(path.join(testDir, '.gitignore'));
|
|
528
|
+
result.checks.push({ name: '.gitignore created', passed: gitignoreExists });
|
|
529
|
+
// Verify commit was created
|
|
530
|
+
if (gitDirExists) {
|
|
531
|
+
try {
|
|
532
|
+
const log = execSync('git log --oneline -1', { cwd: testDir, encoding: 'utf-8' });
|
|
533
|
+
const hasCommit = log.includes('Initial commit');
|
|
534
|
+
result.checks.push({ name: 'Initial commit created', passed: hasCommit });
|
|
535
|
+
}
|
|
536
|
+
catch {
|
|
537
|
+
result.checks.push({ name: 'Initial commit created', passed: false });
|
|
538
|
+
result.errors.push('Failed to verify git commit');
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
catch (error) {
|
|
543
|
+
result.passed = false;
|
|
544
|
+
result.errors.push(`Git integration test failed: ${error.message}`);
|
|
545
|
+
}
|
|
546
|
+
return result;
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* Test Health Check (Doctor) Command
|
|
550
|
+
*/
|
|
551
|
+
async function testDoctorCommand(testDir) {
|
|
552
|
+
const result = {
|
|
553
|
+
scenario: 'doctor-command',
|
|
554
|
+
passed: true,
|
|
555
|
+
errors: [],
|
|
556
|
+
checks: [],
|
|
557
|
+
};
|
|
558
|
+
if (!FEATURES.DOCTOR) {
|
|
559
|
+
result.checks.push({ name: 'Doctor feature (SKIPPED - not implemented)', passed: true });
|
|
560
|
+
return result;
|
|
561
|
+
}
|
|
562
|
+
try {
|
|
563
|
+
const { runHealthCheck } = await import('./doctor/index.js');
|
|
564
|
+
const healthResults = await runHealthCheck();
|
|
565
|
+
result.checks.push({ name: 'Health check completed', passed: true });
|
|
566
|
+
result.checks.push({ name: 'Returns array of results', passed: Array.isArray(healthResults) });
|
|
567
|
+
// Count results by status
|
|
568
|
+
const passed = healthResults.filter(r => r.status === 'pass').length;
|
|
569
|
+
const warnings = healthResults.filter(r => r.status === 'warn').length;
|
|
570
|
+
const failed = healthResults.filter(r => r.status === 'fail').length;
|
|
571
|
+
result.checks.push({ name: `Checks passed: ${passed}`, passed: true });
|
|
572
|
+
result.checks.push({ name: `Checks warned: ${warnings}`, passed: true });
|
|
573
|
+
result.checks.push({ name: `Checks failed: ${failed}`, passed: failed === 0 });
|
|
574
|
+
if (failed > 0) {
|
|
575
|
+
result.passed = false;
|
|
576
|
+
for (const check of healthResults.filter(r => r.status === 'fail')) {
|
|
577
|
+
result.errors.push(`Health check failed: ${check.name} - ${check.message}`);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
catch (error) {
|
|
582
|
+
result.passed = false;
|
|
583
|
+
result.errors.push(`Doctor test failed: ${error.message}`);
|
|
584
|
+
}
|
|
585
|
+
return result;
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* Run combined scenario with all features
|
|
589
|
+
*/
|
|
590
|
+
async function runFullFeatureScenario(scenario, testBaseDir) {
|
|
591
|
+
const results = [];
|
|
592
|
+
const testDir = path.join(testBaseDir, `${scenario.name}-full-features`);
|
|
593
|
+
logSection(`Testing Full Features: ${scenario.name}`);
|
|
594
|
+
// Create test directory
|
|
595
|
+
await fs.ensureDir(path.join(testDir, 'contents', 'themes'));
|
|
596
|
+
// 1. Test demo theme first (if enabled)
|
|
597
|
+
const demoResult = await testDemoThemeInstallation(testDir);
|
|
598
|
+
results.push(demoResult);
|
|
599
|
+
// 2. Test preview
|
|
600
|
+
const previewResult = await testPreviewGeneration(scenario.config);
|
|
601
|
+
results.push(previewResult);
|
|
602
|
+
// 3. Run core generation
|
|
603
|
+
const originalCwd = process.cwd();
|
|
604
|
+
process.chdir(testDir);
|
|
605
|
+
await copyStarterTheme(scenario.config);
|
|
606
|
+
await copyContentFeatures(scenario.config);
|
|
607
|
+
await updateThemeConfig(scenario.config);
|
|
608
|
+
await updateDevConfig(scenario.config);
|
|
609
|
+
await updateAppConfig(scenario.config);
|
|
610
|
+
await updateBillingConfig(scenario.config);
|
|
611
|
+
await updateRolesConfig(scenario.config);
|
|
612
|
+
await updateMigrations(scenario.config);
|
|
613
|
+
await updatePermissionsConfig(scenario.config);
|
|
614
|
+
await updateDashboardConfig(scenario.config);
|
|
615
|
+
await updateAuthConfig(scenario.config);
|
|
616
|
+
await updateDashboardUIConfig(scenario.config);
|
|
617
|
+
await updateDevToolsConfig(scenario.config);
|
|
618
|
+
await processI18n(scenario.config);
|
|
619
|
+
process.chdir(originalCwd);
|
|
620
|
+
const themePath = path.join(testDir, 'contents', 'themes', scenario.config.projectSlug);
|
|
621
|
+
// 4. Test validation
|
|
622
|
+
const validationResult = await testValidation(themePath, scenario.config);
|
|
623
|
+
results.push(validationResult);
|
|
624
|
+
// 5. Test env setup
|
|
625
|
+
const envResult = await testEnvSetup(testDir, scenario.config);
|
|
626
|
+
results.push(envResult);
|
|
627
|
+
// 6. Test git integration
|
|
628
|
+
const gitResult = await testGitIntegration(testDir, scenario.config);
|
|
629
|
+
results.push(gitResult);
|
|
630
|
+
// 7. Test doctor
|
|
631
|
+
const doctorResult = await testDoctorCommand(testDir);
|
|
632
|
+
results.push(doctorResult);
|
|
633
|
+
return results;
|
|
634
|
+
}
|
|
635
|
+
// =============================================================================
|
|
636
|
+
// MAIN FUNCTION
|
|
637
|
+
// =============================================================================
|
|
638
|
+
async function main() {
|
|
639
|
+
console.log('');
|
|
640
|
+
console.log(`${CYAN}╔═══════════════════════════════════════════════════════════════╗${NC}`);
|
|
641
|
+
console.log(`${CYAN}║ NextSpark Wizard Automated Test Suite ║${NC}`);
|
|
642
|
+
console.log(`${CYAN}║ Extended Edition v2.0 ║${NC}`);
|
|
643
|
+
console.log(`${CYAN}╚═══════════════════════════════════════════════════════════════╝${NC}`);
|
|
644
|
+
console.log('');
|
|
645
|
+
// Show feature flags
|
|
646
|
+
logSection('FEATURE FLAGS');
|
|
647
|
+
for (const [feature, enabled] of Object.entries(FEATURES)) {
|
|
648
|
+
if (enabled) {
|
|
649
|
+
logSuccess(`${feature}: ENABLED`);
|
|
650
|
+
}
|
|
651
|
+
else {
|
|
652
|
+
logInfo(`${feature}: disabled`);
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
const testBaseDir = '/tmp/nextspark-wizard-tests';
|
|
656
|
+
// Clean previous tests
|
|
657
|
+
log('');
|
|
658
|
+
log(`Cleaning previous tests at ${testBaseDir}...`);
|
|
659
|
+
await fs.remove(testBaseDir);
|
|
660
|
+
await fs.ensureDir(testBaseDir);
|
|
661
|
+
logSuccess('Test directory prepared');
|
|
662
|
+
const results = [];
|
|
663
|
+
// ==========================================================================
|
|
664
|
+
// PART 1: Core Generation Tests (existing scenarios)
|
|
665
|
+
// ==========================================================================
|
|
666
|
+
logSection('PART 1: CORE GENERATION TESTS');
|
|
667
|
+
for (const scenario of TEST_SCENARIOS) {
|
|
668
|
+
const result = await runScenario(scenario, testBaseDir);
|
|
669
|
+
results.push(result);
|
|
670
|
+
}
|
|
671
|
+
// ==========================================================================
|
|
672
|
+
// PART 2: New Feature Tests
|
|
673
|
+
// ==========================================================================
|
|
674
|
+
logSection('PART 2: NEW FEATURE TESTS');
|
|
675
|
+
// Run full feature tests on select scenarios
|
|
676
|
+
const fullFeatureScenarios = [
|
|
677
|
+
TEST_SCENARIOS[0], // saas-preset
|
|
678
|
+
TEST_SCENARIOS[3], // multi-language
|
|
679
|
+
];
|
|
680
|
+
for (const scenario of fullFeatureScenarios) {
|
|
681
|
+
const featureResults = await runFullFeatureScenario(scenario, testBaseDir);
|
|
682
|
+
results.push(...featureResults);
|
|
683
|
+
}
|
|
684
|
+
// ==========================================================================
|
|
685
|
+
// SUMMARY
|
|
686
|
+
// ==========================================================================
|
|
687
|
+
logSection('TEST SUMMARY');
|
|
688
|
+
let allPassed = true;
|
|
689
|
+
let totalChecks = 0;
|
|
690
|
+
let passedChecks = 0;
|
|
691
|
+
for (const result of results) {
|
|
692
|
+
const status = result.passed ? `${GREEN}PASS${NC}` : `${RED}FAIL${NC}`;
|
|
693
|
+
const checkCount = result.checks.filter(c => c.passed).length;
|
|
694
|
+
const total = result.checks.length;
|
|
695
|
+
totalChecks += total;
|
|
696
|
+
passedChecks += checkCount;
|
|
697
|
+
console.log(` ${status} ${result.scenario} (${checkCount}/${total} checks)`);
|
|
698
|
+
if (!result.passed) {
|
|
699
|
+
allPassed = false;
|
|
700
|
+
for (const error of result.errors) {
|
|
701
|
+
console.log(` ${RED}└─ ${error}${NC}`);
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
console.log('');
|
|
706
|
+
console.log(` ${CYAN}Total: ${passedChecks}/${totalChecks} checks passed${NC}`);
|
|
707
|
+
console.log('');
|
|
708
|
+
if (allPassed) {
|
|
709
|
+
console.log(`${GREEN}╔═══════════════════════════════════════════════════════════════╗${NC}`);
|
|
710
|
+
console.log(`${GREEN}║ ALL TESTS PASSED! ✓ ║${NC}`);
|
|
711
|
+
console.log(`${GREEN}╚═══════════════════════════════════════════════════════════════╝${NC}`);
|
|
712
|
+
}
|
|
713
|
+
else {
|
|
714
|
+
console.log(`${RED}╔═══════════════════════════════════════════════════════════════╗${NC}`);
|
|
715
|
+
console.log(`${RED}║ SOME TESTS FAILED ✗ ║${NC}`);
|
|
716
|
+
console.log(`${RED}╚═══════════════════════════════════════════════════════════════╝${NC}`);
|
|
717
|
+
process.exit(1);
|
|
718
|
+
}
|
|
719
|
+
console.log('');
|
|
720
|
+
log(`Test artifacts available at: ${testBaseDir}`);
|
|
721
|
+
console.log('');
|
|
722
|
+
}
|
|
723
|
+
main().catch(console.error);
|
|
724
|
+
//# sourceMappingURL=test-wizard.js.map
|