@atlashub/smartstack-cli 3.37.0 → 3.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +16 -24
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +201 -256
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +1 -1
- package/scripts/extract-api-endpoints.ts +5 -5
- package/scripts/generate-doc-with-mock-ui.ts +10 -17
- package/templates/agents/ba-reader.md +9 -9
- package/templates/agents/ba-writer.md +12 -15
- package/templates/agents/code-reviewer.md +1 -1
- package/templates/agents/docs-context-reader.md +1 -1
- package/templates/agents/gitflow/merge.md +0 -4
- package/templates/agents/gitflow/pr.md +0 -4
- package/templates/agents/gitflow/start.md +30 -5
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +20 -20
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +16 -24
- package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +2 -2
- package/templates/skills/_resources/mcp-validate-documentation-spec.md +3 -3
- package/templates/skills/_shared.md +15 -17
- package/templates/skills/ai-prompt/SKILL.md +1 -1
- package/templates/skills/ai-prompt/steps/step-00-init.md +47 -0
- package/templates/skills/apex/SKILL.md +3 -4
- package/templates/skills/apex/_shared.md +10 -20
- package/templates/skills/apex/references/analysis-methods.md +141 -0
- package/templates/skills/apex/references/challenge-questions.md +1 -21
- package/templates/skills/apex/references/core-seed-data.md +35 -57
- package/templates/skills/apex/references/examine-build-validation.md +87 -0
- package/templates/skills/apex/references/execution-frontend-gates.md +177 -0
- package/templates/skills/apex/references/execution-frontend-patterns.md +105 -0
- package/templates/skills/apex/references/execution-layer1-rules.md +96 -0
- package/templates/skills/apex/references/initialization-challenge-flow.md +110 -0
- package/templates/skills/apex/references/planning-layer-mapping.md +151 -0
- package/templates/skills/apex/references/post-checks.md +145 -40
- package/templates/skills/apex/references/smartstack-api.md +35 -51
- package/templates/skills/apex/references/smartstack-frontend.md +17 -17
- package/templates/skills/apex/references/smartstack-layers.md +38 -62
- package/templates/skills/apex/steps/step-00-init.md +14 -26
- package/templates/skills/apex/steps/step-01-analyze.md +10 -143
- package/templates/skills/apex/steps/step-02-plan.md +10 -92
- package/templates/skills/apex/steps/step-03-execute.md +47 -249
- package/templates/skills/apex/steps/step-04-examine.md +14 -78
- package/templates/skills/apex/steps/step-05-deep-review.md +2 -2
- package/templates/skills/apex/steps/step-08-run-tests.md +2 -0
- package/templates/skills/application/SKILL.md +6 -7
- package/templates/skills/application/references/backend-controller-hierarchy.md +16 -16
- package/templates/skills/application/references/backend-seeding-and-dto-output.md +83 -0
- package/templates/skills/application/references/backend-table-prefix-mapping.md +79 -0
- package/templates/skills/application/references/backend-verification.md +1 -1
- package/templates/skills/application/references/frontend-i18n-and-output.md +67 -0
- package/templates/skills/application/references/frontend-route-naming.md +117 -0
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +107 -0
- package/templates/skills/application/references/frontend-verification.md +12 -12
- package/templates/skills/application/references/init-parameter-detection.md +120 -0
- package/templates/skills/application/references/migration-checklist-troubleshooting.md +100 -0
- package/templates/skills/application/references/nav-fallback-procedure.md +5 -6
- package/templates/skills/application/references/provider-template.md +2 -6
- package/templates/skills/application/references/roles-client-project-handling.md +55 -0
- package/templates/skills/application/references/roles-fallback-procedure.md +149 -0
- package/templates/skills/application/references/test-coverage-requirements.md +213 -0
- package/templates/skills/application/references/test-frontend.md +3 -3
- package/templates/skills/application/steps/step-00-init.md +11 -141
- package/templates/skills/application/steps/step-01-navigation.md +3 -3
- package/templates/skills/application/steps/step-02-permissions.md +4 -4
- package/templates/skills/application/steps/step-03-roles.md +18 -175
- package/templates/skills/application/steps/step-03b-provider.md +1 -2
- package/templates/skills/application/steps/step-04-backend.md +19 -110
- package/templates/skills/application/steps/step-05-frontend.md +17 -143
- package/templates/skills/application/steps/step-06-migration.md +12 -60
- package/templates/skills/application/steps/step-07-tests.md +9 -76
- package/templates/skills/application/templates-backend.md +29 -27
- package/templates/skills/application/templates-frontend.md +48 -48
- package/templates/skills/application/templates-seed.md +57 -131
- package/templates/skills/business-analyse/SKILL.md +27 -30
- package/templates/skills/business-analyse/_architecture.md +6 -6
- package/templates/skills/business-analyse/_shared.md +60 -88
- package/templates/skills/business-analyse/questionnaire/04-data.md +3 -3
- package/templates/skills/business-analyse/questionnaire/06-security.md +1 -1
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +1 -1
- package/templates/skills/business-analyse/react/application-viewer.md +12 -12
- package/templates/skills/business-analyse/react/components.md +8 -12
- package/templates/skills/business-analyse/react/schema.md +11 -11
- package/templates/skills/business-analyse/references/agent-module-prompt.md +2 -3
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +190 -0
- package/templates/skills/business-analyse/references/cache-warming-strategy.md +2 -2
- package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +41 -0
- package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +74 -0
- package/templates/skills/business-analyse/references/cadrage-shared-modules.md +69 -0
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +1 -1
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +297 -0
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +2 -2
- package/templates/skills/business-analyse/references/deploy-modes.md +5 -5
- package/templates/skills/business-analyse/references/detection-strategies.md +7 -7
- package/templates/skills/business-analyse/references/handoff-file-templates.md +14 -22
- package/templates/skills/business-analyse/references/handoff-mappings.md +4 -4
- package/templates/skills/business-analyse/references/handoff-seeddata-generation.md +312 -0
- package/templates/skills/business-analyse/references/init-schema-deployment.md +3 -3
- package/templates/skills/business-analyse/references/naming-conventions.md +22 -24
- package/templates/skills/business-analyse/references/prd-generation.md +2 -2
- package/templates/skills/business-analyse/references/review-data-mapping.md +2 -2
- package/templates/skills/business-analyse/references/robustness-checks.md +1 -1
- package/templates/skills/business-analyse/references/spec-auto-inference.md +3 -3
- package/templates/skills/business-analyse/references/team-orchestration.md +49 -6
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +1 -1
- package/templates/skills/business-analyse/references/ui-resource-cards.md +18 -18
- package/templates/skills/business-analyse/references/validate-incremental-html.md +2 -2
- package/templates/skills/business-analyse/references/validation-checklist.md +2 -2
- package/templates/skills/business-analyse/schemas/application-schema.json +4 -5
- package/templates/skills/business-analyse/schemas/project-schema.json +1 -6
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +2 -3
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +4 -4
- package/templates/skills/business-analyse/steps/step-00-init.md +8 -17
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +35 -198
- package/templates/skills/business-analyse/steps/step-01b-applications.md +16 -20
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +1 -1
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +4 -4
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +1 -1
- package/templates/skills/business-analyse/steps/step-03b-ui.md +4 -4
- package/templates/skills/business-analyse/steps/step-03c-compile.md +66 -140
- package/templates/skills/business-analyse/steps/step-03d-validate.md +2 -2
- package/templates/skills/business-analyse/steps/step-04a-collect.md +2 -2
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +42 -160
- package/templates/skills/business-analyse/steps/step-04c-decide.md +1 -1
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +74 -104
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +13 -11
- package/templates/skills/business-analyse/steps/step-06-review.md +3 -3
- package/templates/skills/business-analyse/templates/tpl-frd.md +13 -13
- package/templates/skills/business-analyse/templates/tpl-handoff.md +12 -12
- package/templates/skills/business-analyse/templates-frd.md +25 -25
- package/templates/skills/business-analyse/templates-react.md +15 -21
- package/templates/skills/controller/SKILL.md +1 -1
- package/templates/skills/controller/postman-templates.md +1 -1
- package/templates/skills/controller/references/controller-code-templates.md +2 -2
- package/templates/skills/controller/references/mcp-scaffold-workflow.md +209 -0
- package/templates/skills/controller/references/permission-sync-templates.md +13 -16
- package/templates/skills/controller/steps/step-00-init.md +11 -11
- package/templates/skills/controller/steps/step-03-generate.md +64 -103
- package/templates/skills/controller/templates.md +67 -71
- package/templates/skills/debug/SKILL.md +13 -218
- package/templates/skills/debug/steps/step-00-init.md +57 -0
- package/templates/skills/debug/steps/step-01-analyze.md +219 -0
- package/templates/skills/debug/steps/step-02-resolve.md +85 -0
- package/templates/skills/documentation/SKILL.md +49 -345
- package/templates/skills/documentation/data-schema.md +11 -8
- package/templates/skills/documentation/steps/step-00-init.md +70 -0
- package/templates/skills/documentation/steps/step-01-scan.md +113 -0
- package/templates/skills/documentation/steps/step-02-generate.md +231 -0
- package/templates/skills/documentation/steps/step-03-validate.md +238 -0
- package/templates/skills/documentation/templates.md +480 -322
- package/templates/skills/efcore/references/both-contexts.md +32 -0
- package/templates/skills/efcore/references/database-operations.md +67 -0
- package/templates/skills/efcore/references/destructive-operations.md +38 -0
- package/templates/skills/efcore/references/reset-operations.md +81 -0
- package/templates/skills/efcore/references/seed-methods.md +86 -0
- package/templates/skills/efcore/references/shared-init-functions.md +250 -0
- package/templates/skills/efcore/references/sql-objects-injection.md +61 -0
- package/templates/skills/efcore/references/troubleshooting.md +81 -0
- package/templates/skills/efcore/steps/db/step-deploy.md +1 -32
- package/templates/skills/efcore/steps/db/step-reset.md +7 -103
- package/templates/skills/efcore/steps/db/step-seed.md +10 -132
- package/templates/skills/efcore/steps/db/step-status.md +5 -44
- package/templates/skills/efcore/steps/migration/step-03-validate.md +8 -62
- package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +1 -57
- package/templates/skills/efcore/steps/shared/step-00-init.md +11 -254
- package/templates/skills/efcore/steps/squash/step-03-create.md +1 -58
- package/templates/skills/feature-full/SKILL.md +1 -1
- package/templates/skills/feature-full/steps/step-00-init.md +57 -0
- package/templates/skills/feature-full/steps/step-01-implementation.md +1 -1
- package/templates/skills/gitflow/SKILL.md +1 -1
- package/templates/skills/gitflow/_shared.md +23 -0
- package/templates/skills/gitflow/references/commit-message-generation.md +58 -0
- package/templates/skills/gitflow/references/commit-migration-validation.md +49 -0
- package/templates/skills/gitflow/references/finish-cleanup.md +51 -0
- package/templates/skills/gitflow/references/finish-version-bumping.md +45 -0
- package/templates/skills/gitflow/references/init-environment-detection.md +41 -0
- package/templates/skills/gitflow/references/init-questions.md +185 -0
- package/templates/skills/gitflow/references/init-structure-creation.md +71 -0
- package/templates/skills/gitflow/references/init-version-detection.md +21 -0
- package/templates/skills/gitflow/references/init-workspace-detection.md +43 -0
- package/templates/skills/gitflow/references/merge-ci-status.md +36 -0
- package/templates/skills/gitflow/references/merge-execution.md +62 -0
- package/templates/skills/gitflow/references/merge-pr-context.md +76 -0
- package/templates/skills/gitflow/references/pr-build-checks.md +60 -0
- package/templates/skills/gitflow/references/pr-generation.md +58 -0
- package/templates/skills/gitflow/references/start-branch-normalization.md +28 -0
- package/templates/skills/gitflow/references/start-worktree-creation.md +50 -0
- package/templates/skills/gitflow/references/sync-push-verify.md +44 -0
- package/templates/skills/gitflow/references/sync-rebase-conflicts.md +38 -0
- package/templates/skills/gitflow/steps/step-commit.md +12 -91
- package/templates/skills/gitflow/steps/step-finish.md +15 -159
- package/templates/skills/gitflow/steps/step-init.md +24 -326
- package/templates/skills/gitflow/steps/step-merge.md +17 -176
- package/templates/skills/gitflow/steps/step-pr.md +10 -116
- package/templates/skills/gitflow/steps/step-start.md +16 -109
- package/templates/skills/gitflow/steps/step-sync.md +6 -69
- package/templates/skills/ralph-loop/SKILL.md +6 -0
- package/templates/skills/ralph-loop/references/category-completeness.md +185 -0
- package/templates/skills/ralph-loop/references/compact-loop.md +1 -1
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +127 -0
- package/templates/skills/ralph-loop/references/module-transition.md +151 -0
- package/templates/skills/ralph-loop/references/multi-module-queue.md +171 -0
- package/templates/skills/ralph-loop/references/parallel-execution.md +246 -0
- package/templates/skills/ralph-loop/references/task-transform-legacy.md +6 -9
- package/templates/skills/ralph-loop/references/team-orchestration.md +45 -3
- package/templates/skills/ralph-loop/steps/step-00-init.md +36 -109
- package/templates/skills/ralph-loop/steps/step-01-task.md +15 -163
- package/templates/skills/ralph-loop/steps/step-02-execute.md +8 -154
- package/templates/skills/ralph-loop/steps/step-04-check.md +21 -73
- package/templates/skills/review-code/references/owasp-api-top10.md +5 -5
- package/templates/skills/review-code/references/smartstack-conventions.md +11 -11
- package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -0
- package/templates/skills/validate-feature/references/db-validation-checks.md +180 -0
- package/templates/skills/validate-feature/steps/step-01-compile.md +5 -2
- package/templates/skills/validate-feature/steps/step-04-api-smoke.md +34 -145
- package/templates/skills/validate-feature/steps/step-05-db-validation.md +74 -260
- package/templates/skills/workflow/SKILL.md +1 -1
- package/templates/skills/workflow/steps/step-00-init.md +57 -0
package/dist/index.js
CHANGED
|
@@ -117390,10 +117390,10 @@ createRoot(document.getElementById('root')!).render(
|
|
|
117390
117390
|
recordFile(state, "frontend", main_relPath, main_result.hash);
|
|
117391
117391
|
const appTsx = `import { useRoutes, Navigate } from 'react-router-dom';
|
|
117392
117392
|
import { mergeRoutes } from '@atlashub/smartstack';
|
|
117393
|
-
import type { RouteConfig,
|
|
117393
|
+
import type { RouteConfig, ApplicationRouteExtensions } from '@atlashub/smartstack';
|
|
117394
117394
|
|
|
117395
117395
|
/**
|
|
117396
|
-
* Client-specific routes (outside SmartStack locked
|
|
117396
|
+
* Client-specific routes (outside SmartStack locked applications)
|
|
117397
117397
|
* Add your custom routes here. Locked SmartStack paths cannot be overridden.
|
|
117398
117398
|
*/
|
|
117399
117399
|
const clientRoutes: RouteConfig[] = [
|
|
@@ -117404,21 +117404,20 @@ const clientRoutes: RouteConfig[] = [
|
|
|
117404
117404
|
];
|
|
117405
117405
|
|
|
117406
117406
|
/**
|
|
117407
|
-
*
|
|
117408
|
-
* Add your
|
|
117409
|
-
* Paths are RELATIVE to the
|
|
117410
|
-
* Example: '
|
|
117407
|
+
* Application-scoped route extensions
|
|
117408
|
+
* Add your routes here.
|
|
117409
|
+
* Paths are RELATIVE to the application root.
|
|
117410
|
+
* Example: 'users/list' (NOT '/administration/users/list')
|
|
117411
117411
|
*/
|
|
117412
|
-
const
|
|
117413
|
-
//
|
|
117414
|
-
//
|
|
117415
|
-
// personal: [],
|
|
117412
|
+
const applicationRoutes: ApplicationRouteExtensions = {
|
|
117413
|
+
// sales: [],
|
|
117414
|
+
// administration: [],
|
|
117416
117415
|
};
|
|
117417
117416
|
|
|
117418
117417
|
/**
|
|
117419
|
-
* Merged routes combining client,
|
|
117418
|
+
* Merged routes combining client, application extensions, and SmartStack core routes
|
|
117420
117419
|
*/
|
|
117421
|
-
const routes = mergeRoutes(clientRoutes,
|
|
117420
|
+
const routes = mergeRoutes(clientRoutes, applicationRoutes);
|
|
117422
117421
|
|
|
117423
117422
|
/**
|
|
117424
117423
|
* App - Main application component
|
|
@@ -127009,7 +127008,6 @@ function generateFilesTasks(prd, ctx, frontendFiles, i18nFiles, testFiles) {
|
|
|
127009
127008
|
function generateFrontendTask(prd, ctx, frontendFiles) {
|
|
127010
127009
|
if (frontendFiles.length === 0) return [];
|
|
127011
127010
|
const apiDepId = ctx.lastIdByCategory["api"] ?? ctx.lastIdByCategory["application"];
|
|
127012
|
-
const ctxName = capitalize(prd.project?.application ? "Business" : "Business");
|
|
127013
127011
|
const app = prd.project?.application ?? ctx.moduleCode;
|
|
127014
127012
|
const wireframes = [...new Set(frontendFiles.flatMap((f) => f.linkedWireframes ?? []))];
|
|
127015
127013
|
return [createTask(
|
|
@@ -127017,7 +127015,7 @@ function generateFrontendTask(prd, ctx, frontendFiles) {
|
|
|
127017
127015
|
"frontend",
|
|
127018
127016
|
`[frontend] Generate COMPLETE frontend for module ${ctx.moduleCode} via MCP (${frontendFiles.length} files)`,
|
|
127019
127017
|
apiDepId ? [apiDepId] : [],
|
|
127020
|
-
`Pages in src/pages/${
|
|
127018
|
+
`Pages in src/pages/${app}/${ctx.moduleCode}/; MCP scaffold_api_client + scaffold_routes; SmartTable for lists; CSS variables ONLY; 4-language i18n; npm run typecheck passes`,
|
|
127021
127019
|
frontendFiles.map((f) => f.path),
|
|
127022
127020
|
{
|
|
127023
127021
|
_frontendMeta: {
|
|
@@ -127085,10 +127083,9 @@ function applyGuardrails(prd, ctx, tasks, frontendFiles, i18nFiles) {
|
|
|
127085
127083
|
));
|
|
127086
127084
|
}
|
|
127087
127085
|
if (frontendFiles.length === 0 && !tasks.some((t) => t.category === "frontend") && (sections.length > 0 || apiEndpoints.length > 0)) {
|
|
127088
|
-
const ctxName = "Business";
|
|
127089
127086
|
const app = prd.project?.application ?? ctx.moduleCode;
|
|
127090
127087
|
const derivedFiles = sections.map((s) => ({
|
|
127091
|
-
path: `web/src/pages/${
|
|
127088
|
+
path: `web/src/pages/${app}/${ctx.moduleCode}/${s.code}.tsx`,
|
|
127092
127089
|
type: "Page"
|
|
127093
127090
|
}));
|
|
127094
127091
|
if (apiEndpoints.length > 0) {
|
|
@@ -127100,7 +127097,7 @@ function applyGuardrails(prd, ctx, tasks, frontendFiles, i18nFiles) {
|
|
|
127100
127097
|
"frontend",
|
|
127101
127098
|
`[frontend] Generate COMPLETE frontend for ${ctx.moduleCode} via MCP (${derivedFiles.length} files)`,
|
|
127102
127099
|
depId ? [depId] : [],
|
|
127103
|
-
`Pages in src/pages/${
|
|
127100
|
+
`Pages in src/pages/${app}/${ctx.moduleCode}/; SmartTable for lists; CSS variables ONLY; 4-language i18n; npm run typecheck passes`,
|
|
127104
127101
|
derivedFiles.map((f) => f.path),
|
|
127105
127102
|
{
|
|
127106
127103
|
_frontendMeta: {
|
|
@@ -127132,7 +127129,7 @@ function applyGuardrails(prd, ctx, tasks, frontendFiles, i18nFiles) {
|
|
|
127132
127129
|
const navCount = coreSeedData.filter((s) => s.entity === "NavigationModule").reduce((n, s) => n + (s.count ?? 1), 0);
|
|
127133
127130
|
const permCount = coreSeedData.filter((s) => s.entity === "Permission").reduce((n, s) => n + (s.count ?? 1), 0);
|
|
127134
127131
|
const roleCount = coreSeedData.filter((s) => s.entity === "RolePermission").reduce((n, s) => n + (s.count ?? 1), 0);
|
|
127135
|
-
const navRoute =
|
|
127132
|
+
const navRoute = `${(prd.project?.application ?? "app").toLowerCase()}.${ctx.moduleCode.toLowerCase()}`;
|
|
127136
127133
|
injected.push(createTask(
|
|
127137
127134
|
ctx,
|
|
127138
127135
|
"infrastructure",
|
|
@@ -127145,7 +127142,6 @@ function applyGuardrails(prd, ctx, tasks, frontendFiles, i18nFiles) {
|
|
|
127145
127142
|
source: "guardrail-derived",
|
|
127146
127143
|
coreSeedData,
|
|
127147
127144
|
navRoute,
|
|
127148
|
-
contextCode: "business",
|
|
127149
127145
|
appCode: prd.project?.application,
|
|
127150
127146
|
appLabels: null
|
|
127151
127147
|
}
|
|
@@ -127158,7 +127154,7 @@ function applyGuardrails(prd, ctx, tasks, frontendFiles, i18nFiles) {
|
|
|
127158
127154
|
const seedDataFiles = filesToCreate["seedData"] ?? [];
|
|
127159
127155
|
if (!hasProvider && (seedDataFiles.length > 0 || coreSeedData && coreSeedData.length > 0)) {
|
|
127160
127156
|
const depId = ctx.lastIdByCategory["infrastructure"] ?? ctx.lastIdByCategory["domain"];
|
|
127161
|
-
const navRoute =
|
|
127157
|
+
const navRoute = `${(prd.project?.application ?? "app").toLowerCase()}.${ctx.moduleCode.toLowerCase()}`;
|
|
127162
127158
|
injected.push(createTask(
|
|
127163
127159
|
ctx,
|
|
127164
127160
|
"infrastructure",
|
|
@@ -127169,7 +127165,6 @@ function applyGuardrails(prd, ctx, tasks, frontendFiles, i18nFiles) {
|
|
|
127169
127165
|
{
|
|
127170
127166
|
_providerMeta: {
|
|
127171
127167
|
navRoute,
|
|
127172
|
-
contextCode: "business",
|
|
127173
127168
|
appCode: prd.project?.application
|
|
127174
127169
|
}
|
|
127175
127170
|
}
|
|
@@ -127292,9 +127287,6 @@ function resolveSection(entityToSection, filePaths, description) {
|
|
|
127292
127287
|
}
|
|
127293
127288
|
return void 0;
|
|
127294
127289
|
}
|
|
127295
|
-
function capitalize(s) {
|
|
127296
|
-
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
127297
|
-
}
|
|
127298
127290
|
|
|
127299
127291
|
// src/utils/prd-extractor.ts
|
|
127300
127292
|
function extractPrd(moduleFeature, featureJsonPath, namespace) {
|