@planu/cli 0.29.0 → 0.30.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/engine/ci-generator/planu-config.d.ts +7 -0
- package/dist/engine/ci-generator/planu-config.d.ts.map +1 -0
- package/dist/engine/ci-generator/planu-config.js +40 -0
- package/dist/engine/ci-generator/planu-config.js.map +1 -0
- package/dist/engine/ci-generator/planu-steps.d.ts +11 -0
- package/dist/engine/ci-generator/planu-steps.d.ts.map +1 -0
- package/dist/engine/ci-generator/planu-steps.js +292 -0
- package/dist/engine/ci-generator/planu-steps.js.map +1 -0
- package/dist/engine/spec-templates/catalog-industry.d.ts +4 -0
- package/dist/engine/spec-templates/catalog-industry.d.ts.map +1 -0
- package/dist/engine/spec-templates/catalog-industry.js +19 -0
- package/dist/engine/spec-templates/catalog-industry.js.map +1 -0
- package/dist/engine/spec-templates/catalog.d.ts +1 -1
- package/dist/engine/spec-templates/catalog.d.ts.map +1 -1
- package/dist/engine/spec-templates/catalog.js +3 -1
- package/dist/engine/spec-templates/catalog.js.map +1 -1
- package/dist/engine/spec-templates/custom-loader.d.ts +12 -0
- package/dist/engine/spec-templates/custom-loader.d.ts.map +1 -0
- package/dist/engine/spec-templates/custom-loader.js +99 -0
- package/dist/engine/spec-templates/custom-loader.js.map +1 -0
- package/dist/engine/spec-templates/index.d.ts +4 -2
- package/dist/engine/spec-templates/index.d.ts.map +1 -1
- package/dist/engine/spec-templates/index.js +4 -2
- package/dist/engine/spec-templates/index.js.map +1 -1
- package/dist/engine/spec-templates/query.d.ts +12 -4
- package/dist/engine/spec-templates/query.d.ts.map +1 -1
- package/dist/engine/spec-templates/query.js +29 -7
- package/dist/engine/spec-templates/query.js.map +1 -1
- package/dist/engine/spec-templates/renderer.d.ts +27 -2
- package/dist/engine/spec-templates/renderer.d.ts.map +1 -1
- package/dist/engine/spec-templates/renderer.js +119 -4
- package/dist/engine/spec-templates/renderer.js.map +1 -1
- package/dist/engine/spec-templates/templates-api-ui.d.ts.map +1 -1
- package/dist/engine/spec-templates/templates-api-ui.js +28 -1
- package/dist/engine/spec-templates/templates-api-ui.js.map +1 -1
- package/dist/engine/spec-templates/templates-auth-crud.d.ts.map +1 -1
- package/dist/engine/spec-templates/templates-auth-crud.js +27 -0
- package/dist/engine/spec-templates/templates-auth-crud.js.map +1 -1
- package/dist/engine/spec-templates/templates-data-security.d.ts.map +1 -1
- package/dist/engine/spec-templates/templates-data-security.js +26 -0
- package/dist/engine/spec-templates/templates-data-security.js.map +1 -1
- package/dist/engine/spec-templates/templates-industry-ecom.d.ts +6 -0
- package/dist/engine/spec-templates/templates-industry-ecom.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-ecom.js +209 -0
- package/dist/engine/spec-templates/templates-industry-ecom.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-fintech.d.ts +8 -0
- package/dist/engine/spec-templates/templates-industry-fintech.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-fintech.js +350 -0
- package/dist/engine/spec-templates/templates-industry-fintech.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.d.ts +3 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.js +5 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health.d.ts +6 -0
- package/dist/engine/spec-templates/templates-industry-health.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health.js +208 -0
- package/dist/engine/spec-templates/templates-industry-health.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-saas.d.ts +8 -0
- package/dist/engine/spec-templates/templates-industry-saas.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-saas.js +323 -0
- package/dist/engine/spec-templates/templates-industry-saas.js.map +1 -0
- package/dist/engine/spec-templates/templates-perf-integration.d.ts.map +1 -1
- package/dist/engine/spec-templates/templates-perf-integration.js +27 -0
- package/dist/engine/spec-templates/templates-perf-integration.js.map +1 -1
- package/dist/tools/ci-planu-handler.d.ts +8 -0
- package/dist/tools/ci-planu-handler.d.ts.map +1 -0
- package/dist/tools/ci-planu-handler.js +44 -0
- package/dist/tools/ci-planu-handler.js.map +1 -0
- package/dist/tools/init-project/handler.d.ts.map +1 -1
- package/dist/tools/init-project/handler.js +24 -159
- package/dist/tools/init-project/handler.js.map +1 -1
- package/dist/tools/init-project/result-builder.d.ts +4 -0
- package/dist/tools/init-project/result-builder.d.ts.map +1 -0
- package/dist/tools/init-project/result-builder.js +150 -0
- package/dist/tools/init-project/result-builder.js.map +1 -0
- package/dist/tools/learn.d.ts.map +1 -1
- package/dist/tools/learn.js +67 -14
- package/dist/tools/learn.js.map +1 -1
- package/dist/tools/register-ci-tools.d.ts.map +1 -1
- package/dist/tools/register-ci-tools.js +36 -0
- package/dist/tools/register-ci-tools.js.map +1 -1
- package/dist/tools/register-template-tools.d.ts.map +1 -1
- package/dist/tools/register-template-tools.js +21 -8
- package/dist/tools/register-template-tools.js.map +1 -1
- package/dist/tools/spec-templates.d.ts +1 -1
- package/dist/tools/spec-templates.d.ts.map +1 -1
- package/dist/tools/spec-templates.js +20 -6
- package/dist/tools/spec-templates.js.map +1 -1
- package/dist/types/ci.d.ts +51 -0
- package/dist/types/ci.d.ts.map +1 -1
- package/dist/types/project/core.d.ts +46 -5
- package/dist/types/project/core.d.ts.map +1 -1
- package/dist/types/spec-templates.d.ts +51 -1
- package/dist/types/spec-templates.d.ts.map +1 -1
- package/dist/types/vector-store.d.ts +7 -0
- package/dist/types/vector-store.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,12 +1,20 @@
|
|
|
1
|
-
import type { SpecTemplateEntry, TemplateCategory, ListTemplatesResult } from '../../types/spec-templates.js';
|
|
1
|
+
import type { SpecTemplateEntry, TemplateCategory, TemplateComplexity, ListTemplatesResult, CustomTemplateWarning } from '../../types/spec-templates.js';
|
|
2
2
|
/**
|
|
3
|
-
* Lists templates from the catalog, optionally filtered by category and
|
|
3
|
+
* Lists templates from the catalog, optionally filtered by category, search, and complexity.
|
|
4
|
+
* Includes custom user templates from data/global/spec-templates/custom/.
|
|
4
5
|
*/
|
|
5
|
-
export declare function listTemplates(category?: TemplateCategory, search?: string):
|
|
6
|
+
export declare function listTemplates(category?: TemplateCategory, search?: string, complexityScore?: TemplateComplexity, customDir?: string): Promise<{
|
|
7
|
+
result: ListTemplatesResult;
|
|
8
|
+
warnings: CustomTemplateWarning[];
|
|
9
|
+
}>;
|
|
6
10
|
/**
|
|
7
|
-
* Returns a single template by ID
|
|
11
|
+
* Returns a single template by ID (built-in only, sync).
|
|
8
12
|
*/
|
|
9
13
|
export declare function findTemplate(templateId: string): SpecTemplateEntry | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Returns a single template by ID, searching built-in and custom templates.
|
|
16
|
+
*/
|
|
17
|
+
export declare function findTemplateWithCustom(templateId: string, customDir?: string): Promise<SpecTemplateEntry | undefined>;
|
|
10
18
|
/**
|
|
11
19
|
* Returns all available categories that have at least one template.
|
|
12
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EAEnB,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;AAsBvC;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,MAAM,CAAC,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,kBAAkB,EACpC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAAC,CAwC7E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAE9E;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAIxC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,EAAE,CAG3D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// engine/spec-templates/query.ts — Catalog querying: list and find templates.
|
|
2
2
|
import { BUILT_IN_TEMPLATES } from './catalog.js';
|
|
3
|
+
import { loadCustomTemplates, mergeTemplates } from './custom-loader.js';
|
|
3
4
|
/**
|
|
4
5
|
* Converts a full SpecTemplateEntry to a summary TemplateListItem.
|
|
5
6
|
*/
|
|
@@ -8,20 +9,29 @@ function toListItem(template) {
|
|
|
8
9
|
id: template.id,
|
|
9
10
|
name: template.name,
|
|
10
11
|
category: template.category,
|
|
12
|
+
subcategory: template.subcategory,
|
|
11
13
|
description: template.description,
|
|
12
14
|
tags: template.tags,
|
|
15
|
+
complexityScore: template.complexityScore,
|
|
16
|
+
criteriaCount: template.criteria.length,
|
|
13
17
|
variableCount: template.variables.length,
|
|
14
18
|
requiredVariableCount: template.variables.filter((v) => v.required).length,
|
|
15
19
|
};
|
|
16
20
|
}
|
|
17
21
|
/**
|
|
18
|
-
* Lists templates from the catalog, optionally filtered by category and
|
|
22
|
+
* Lists templates from the catalog, optionally filtered by category, search, and complexity.
|
|
23
|
+
* Includes custom user templates from data/global/spec-templates/custom/.
|
|
19
24
|
*/
|
|
20
|
-
export function listTemplates(category, search) {
|
|
21
|
-
|
|
25
|
+
export async function listTemplates(category, search, complexityScore, customDir) {
|
|
26
|
+
const customResult = await loadCustomTemplates(customDir);
|
|
27
|
+
const allTemplates = mergeTemplates(BUILT_IN_TEMPLATES, customResult.templates);
|
|
28
|
+
let templates = [...allTemplates];
|
|
22
29
|
if (category !== undefined) {
|
|
23
30
|
templates = templates.filter((t) => t.category === category);
|
|
24
31
|
}
|
|
32
|
+
if (complexityScore !== undefined) {
|
|
33
|
+
templates = templates.filter((t) => t.complexityScore === complexityScore);
|
|
34
|
+
}
|
|
25
35
|
if (search !== undefined && search.trim().length > 0) {
|
|
26
36
|
const term = search.trim().toLowerCase();
|
|
27
37
|
templates = templates.filter((t) => t.name.toLowerCase().includes(term) ||
|
|
@@ -30,22 +40,34 @@ export function listTemplates(category, search) {
|
|
|
30
40
|
}
|
|
31
41
|
const filterLabel = [
|
|
32
42
|
category !== undefined ? `category=${category}` : '',
|
|
43
|
+
complexityScore !== undefined ? `complexity=${complexityScore}` : '',
|
|
33
44
|
search !== undefined && search.trim().length > 0 ? `search="${search.trim()}"` : '',
|
|
34
45
|
]
|
|
35
46
|
.filter(Boolean)
|
|
36
47
|
.join(', ');
|
|
37
48
|
return {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
result: {
|
|
50
|
+
templates: templates.map(toListItem),
|
|
51
|
+
total: templates.length,
|
|
52
|
+
filteredBy: filterLabel.length > 0 ? filterLabel : undefined,
|
|
53
|
+
},
|
|
54
|
+
warnings: customResult.warnings,
|
|
41
55
|
};
|
|
42
56
|
}
|
|
43
57
|
/**
|
|
44
|
-
* Returns a single template by ID
|
|
58
|
+
* Returns a single template by ID (built-in only, sync).
|
|
45
59
|
*/
|
|
46
60
|
export function findTemplate(templateId) {
|
|
47
61
|
return BUILT_IN_TEMPLATES.find((t) => t.id === templateId);
|
|
48
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Returns a single template by ID, searching built-in and custom templates.
|
|
65
|
+
*/
|
|
66
|
+
export async function findTemplateWithCustom(templateId, customDir) {
|
|
67
|
+
const customResult = await loadCustomTemplates(customDir);
|
|
68
|
+
const allTemplates = mergeTemplates(BUILT_IN_TEMPLATES, customResult.templates);
|
|
69
|
+
return allTemplates.find((t) => t.id === templateId);
|
|
70
|
+
}
|
|
49
71
|
/**
|
|
50
72
|
* Returns all available categories that have at least one template.
|
|
51
73
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/query.ts"],"names":[],"mappings":"AAAA,8EAA8E;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SpecTemplateEntry, TemplateVariableValue, TemplateVariable } from '../../types/spec-templates.js';
|
|
1
|
+
import type { SpecTemplateEntry, TemplateVariableValue, TemplateVariable, TemplateCriterion } from '../../types/spec-templates.js';
|
|
2
2
|
/**
|
|
3
3
|
* Interpolates all {{Key}} placeholders in a template string with provided values.
|
|
4
4
|
* Falls back to defaultValue if a variable is optional and not provided.
|
|
@@ -8,12 +8,37 @@ export declare function interpolate(template: string, variables: TemplateVariabl
|
|
|
8
8
|
* Returns the keys of required variables that are missing from the provided values.
|
|
9
9
|
*/
|
|
10
10
|
export declare function findMissingRequired(template: SpecTemplateEntry, variables: TemplateVariableValue[]): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Resolves which criteria to include and generates warnings for forced-required criteria.
|
|
13
|
+
* AC-07: Required criteria cannot be omitted.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveCriteria(allCriteria: TemplateCriterion[], includeCriteria?: string[]): {
|
|
16
|
+
included: TemplateCriterion[];
|
|
17
|
+
warnings: string[];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Filters HU template content to include only the selected criteria sections.
|
|
21
|
+
* Renumbers criteria sequentially (AC-01, AC-02, ...) to avoid gaps.
|
|
22
|
+
*/
|
|
23
|
+
export declare function filterHuByCriteria(huContent: string, allCriteria: TemplateCriterion[], includedCriteria: TemplateCriterion[]): string;
|
|
24
|
+
/**
|
|
25
|
+
* Filters PROGRESS template to include only selected criteria.
|
|
26
|
+
*/
|
|
27
|
+
export declare function filterProgressByCriteria(progressContent: string, allCriteria: TemplateCriterion[], includedCriteria: TemplateCriterion[]): string;
|
|
28
|
+
/**
|
|
29
|
+
* Builds the estimation section to inject into the HU.md (AC-09).
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildEstimationSection(template: SpecTemplateEntry): string;
|
|
11
32
|
/**
|
|
12
33
|
* Renders all three template files (HU, FICHA-TECNICA, PROGRESS) with the provided values.
|
|
34
|
+
* Supports partial criteria selection and estimation injection.
|
|
13
35
|
*/
|
|
14
|
-
export declare function renderTemplate(template: SpecTemplateEntry, variables: TemplateVariableValue[]): {
|
|
36
|
+
export declare function renderTemplate(template: SpecTemplateEntry, variables: TemplateVariableValue[], includeCriteria?: string[]): {
|
|
15
37
|
hu: string;
|
|
16
38
|
fichaTecnica: string;
|
|
17
39
|
progress: string;
|
|
40
|
+
criteriaIncluded: number;
|
|
41
|
+
criteriaTotal: number;
|
|
42
|
+
warnings: string[];
|
|
18
43
|
};
|
|
19
44
|
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/renderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAEvC;;;GAGG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,qBAAqB,EAAE,EAClC,WAAW,EAAE,gBAAgB,EAAE,GAC9B,MAAM,CAiBR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,qBAAqB,EAAE,GACjC,MAAM,EAAE,CAWV;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,iBAAiB,EAAE,EAChC,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB;IAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAyBvD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,iBAAiB,EAAE,EAChC,gBAAgB,EAAE,iBAAiB,EAAE,GACpC,MAAM,CA+BR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,iBAAiB,EAAE,EAChC,gBAAgB,EAAE,iBAAiB,EAAE,GACpC,MAAM,CAwBR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAW1E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,qBAAqB,EAAE,EAClC,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB;IACD,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CA0BA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// engine/spec-templates/renderer.ts — Template variable substitution engine.
|
|
2
2
|
// Replaces {{VariableKey}} placeholders with user-provided values.
|
|
3
|
+
// Supports partial criteria selection (AC-07) and estimation injection (AC-09).
|
|
3
4
|
/**
|
|
4
5
|
* Interpolates all {{Key}} placeholders in a template string with provided values.
|
|
5
6
|
* Falls back to defaultValue if a variable is optional and not provided.
|
|
@@ -31,15 +32,129 @@ export function findMissingRequired(template, variables) {
|
|
|
31
32
|
}));
|
|
32
33
|
return template.variables.filter((v) => v.required && !providedKeys.has(v.key)).map((v) => v.key);
|
|
33
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolves which criteria to include and generates warnings for forced-required criteria.
|
|
37
|
+
* AC-07: Required criteria cannot be omitted.
|
|
38
|
+
*/
|
|
39
|
+
export function resolveCriteria(allCriteria, includeCriteria) {
|
|
40
|
+
if (includeCriteria === undefined || includeCriteria.length === 0) {
|
|
41
|
+
return { included: allCriteria, warnings: [] };
|
|
42
|
+
}
|
|
43
|
+
const requestedIds = new Set(includeCriteria);
|
|
44
|
+
const warnings = [];
|
|
45
|
+
const included = [];
|
|
46
|
+
for (const criterion of allCriteria) {
|
|
47
|
+
const isRequested = requestedIds.has(criterion.id);
|
|
48
|
+
if (isRequested) {
|
|
49
|
+
included.push(criterion);
|
|
50
|
+
}
|
|
51
|
+
else if (criterion.required) {
|
|
52
|
+
// Required criterion was excluded — force-include with warning
|
|
53
|
+
included.push(criterion);
|
|
54
|
+
warnings.push(`Criterion "${criterion.id}: ${criterion.title}" is required and was included automatically.`);
|
|
55
|
+
}
|
|
56
|
+
// Optional, not requested → omit
|
|
57
|
+
}
|
|
58
|
+
return { included, warnings };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Filters HU template content to include only the selected criteria sections.
|
|
62
|
+
* Renumbers criteria sequentially (AC-01, AC-02, ...) to avoid gaps.
|
|
63
|
+
*/
|
|
64
|
+
export function filterHuByCriteria(huContent, allCriteria, includedCriteria) {
|
|
65
|
+
if (includedCriteria.length === allCriteria.length) {
|
|
66
|
+
return huContent;
|
|
67
|
+
}
|
|
68
|
+
const includedIds = new Set(includedCriteria.map((c) => c.id));
|
|
69
|
+
const lines = huContent.split('\n');
|
|
70
|
+
const outputLines = [];
|
|
71
|
+
let currentCriterionId;
|
|
72
|
+
let isIncluded = true;
|
|
73
|
+
let renumberIndex = 0;
|
|
74
|
+
// Map from old AC IDs to which ones are included
|
|
75
|
+
const criterionIdPattern = /^### (AC-\d+)/;
|
|
76
|
+
for (const line of lines) {
|
|
77
|
+
const match = criterionIdPattern.exec(line);
|
|
78
|
+
if (match?.[1] !== undefined) {
|
|
79
|
+
currentCriterionId = match[1];
|
|
80
|
+
isIncluded = includedIds.has(currentCriterionId);
|
|
81
|
+
if (isIncluded) {
|
|
82
|
+
renumberIndex++;
|
|
83
|
+
const renumbered = line.replace(/^### AC-\d+/, `### AC-${renumberIndex}`);
|
|
84
|
+
outputLines.push(renumbered);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else if (isIncluded) {
|
|
88
|
+
outputLines.push(line);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return outputLines.join('\n');
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Filters PROGRESS template to include only selected criteria.
|
|
95
|
+
*/
|
|
96
|
+
export function filterProgressByCriteria(progressContent, allCriteria, includedCriteria) {
|
|
97
|
+
if (includedCriteria.length === allCriteria.length) {
|
|
98
|
+
return progressContent;
|
|
99
|
+
}
|
|
100
|
+
const includedIds = new Set(includedCriteria.map((c) => c.id));
|
|
101
|
+
const lines = progressContent.split('\n');
|
|
102
|
+
const outputLines = [];
|
|
103
|
+
let renumberIndex = 0;
|
|
104
|
+
for (const line of lines) {
|
|
105
|
+
const criterionMatch = /^- \[ \] (AC-\d+):/.exec(line);
|
|
106
|
+
if (criterionMatch?.[1] !== undefined) {
|
|
107
|
+
if (includedIds.has(criterionMatch[1])) {
|
|
108
|
+
renumberIndex++;
|
|
109
|
+
const renumbered = line.replace(/AC-\d+/, `AC-${renumberIndex}`);
|
|
110
|
+
outputLines.push(renumbered);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
outputLines.push(line);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return outputLines.join('\n');
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Builds the estimation section to inject into the HU.md (AC-09).
|
|
121
|
+
*/
|
|
122
|
+
export function buildEstimationSection(template) {
|
|
123
|
+
const { complexityScore, estimationBase } = template;
|
|
124
|
+
return [
|
|
125
|
+
'',
|
|
126
|
+
'## Estimacion Inicial',
|
|
127
|
+
'',
|
|
128
|
+
`- **Complejidad:** ${complexityScore}`,
|
|
129
|
+
`- **Horas estimadas:** ${estimationBase.hoursMin}–${estimationBase.hoursMax}h`,
|
|
130
|
+
`- **Notas:** ${estimationBase.notes}`,
|
|
131
|
+
'',
|
|
132
|
+
].join('\n');
|
|
133
|
+
}
|
|
34
134
|
/**
|
|
35
135
|
* Renders all three template files (HU, FICHA-TECNICA, PROGRESS) with the provided values.
|
|
136
|
+
* Supports partial criteria selection and estimation injection.
|
|
36
137
|
*/
|
|
37
|
-
export function renderTemplate(template, variables) {
|
|
138
|
+
export function renderTemplate(template, variables, includeCriteria) {
|
|
38
139
|
const defs = template.variables;
|
|
140
|
+
// Resolve criteria selection
|
|
141
|
+
const { included, warnings } = resolveCriteria(template.criteria, includeCriteria);
|
|
142
|
+
// Interpolate variables first
|
|
143
|
+
let hu = interpolate(template.huTemplate, variables, defs);
|
|
144
|
+
const fichaTecnica = interpolate(template.fichaTecnicaTemplate, variables, defs);
|
|
145
|
+
let progress = interpolate(template.progressTemplate, variables, defs);
|
|
146
|
+
// Filter criteria if partial selection
|
|
147
|
+
hu = filterHuByCriteria(hu, template.criteria, included);
|
|
148
|
+
progress = filterProgressByCriteria(progress, template.criteria, included);
|
|
149
|
+
// Inject estimation section into HU (AC-09)
|
|
150
|
+
hu += buildEstimationSection(template);
|
|
39
151
|
return {
|
|
40
|
-
hu
|
|
41
|
-
fichaTecnica
|
|
42
|
-
progress
|
|
152
|
+
hu,
|
|
153
|
+
fichaTecnica,
|
|
154
|
+
progress,
|
|
155
|
+
criteriaIncluded: included.length,
|
|
156
|
+
criteriaTotal: template.criteria.length,
|
|
157
|
+
warnings,
|
|
43
158
|
};
|
|
44
159
|
}
|
|
45
160
|
//# sourceMappingURL=renderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/renderer.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,mEAAmE;
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-api-ui.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-api-ui.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,uCAAuC;AACvC,eAAO,MAAM,0BAA0B,EAAE,
|
|
1
|
+
{"version":3,"file":"templates-api-ui.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-api-ui.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,uCAAuC;AACvC,eAAO,MAAM,0BAA0B,EAAE,iBAiHxC,CAAC;AAEF,6BAA6B;AAC7B,eAAO,MAAM,gBAAgB,EAAE,iBA+F9B,CAAC"}
|
|
@@ -7,6 +7,20 @@ export const REST_API_ENDPOINT_TEMPLATE = {
|
|
|
7
7
|
category: 'api',
|
|
8
8
|
description: 'A single REST endpoint with validation, error handling, and documentation.',
|
|
9
9
|
tags: ['api', 'rest', 'endpoint', 'openapi'],
|
|
10
|
+
complexityScore: 'S',
|
|
11
|
+
estimationBase: {
|
|
12
|
+
hoursMin: 4,
|
|
13
|
+
hoursMax: 8,
|
|
14
|
+
notes: 'Single endpoint with validation and error handling',
|
|
15
|
+
},
|
|
16
|
+
criteria: [
|
|
17
|
+
{ id: 'AC-1', title: 'Request validation', required: true },
|
|
18
|
+
{ id: 'AC-2', title: 'Core business logic', required: true },
|
|
19
|
+
{ id: 'AC-3', title: 'Response contract', required: true },
|
|
20
|
+
{ id: 'AC-4', title: 'Error handling', required: true },
|
|
21
|
+
{ id: 'AC-5', title: 'Idempotency', required: false },
|
|
22
|
+
{ id: 'AC-6', title: 'Observability', required: false },
|
|
23
|
+
],
|
|
10
24
|
variables: [
|
|
11
25
|
{
|
|
12
26
|
key: 'EndpointName',
|
|
@@ -108,6 +122,19 @@ export const UI_FORM_TEMPLATE = {
|
|
|
108
122
|
category: 'ui',
|
|
109
123
|
description: 'Interactive form with validation, error display, and accessibility.',
|
|
110
124
|
tags: ['ui', 'form', 'ux', 'accessibility', 'validation'],
|
|
125
|
+
complexityScore: 'S',
|
|
126
|
+
estimationBase: {
|
|
127
|
+
hoursMin: 4,
|
|
128
|
+
hoursMax: 10,
|
|
129
|
+
notes: 'Form with client-side validation and accessibility',
|
|
130
|
+
},
|
|
131
|
+
criteria: [
|
|
132
|
+
{ id: 'AC-1', title: 'Field validation', required: true },
|
|
133
|
+
{ id: 'AC-2', title: 'Submit behavior', required: true },
|
|
134
|
+
{ id: 'AC-3', title: 'Accessibility', required: true },
|
|
135
|
+
{ id: 'AC-4', title: 'Responsive design', required: false },
|
|
136
|
+
{ id: 'AC-5', title: 'Reset and cancel', required: false },
|
|
137
|
+
],
|
|
111
138
|
variables: [
|
|
112
139
|
{
|
|
113
140
|
key: 'FormName',
|
|
@@ -143,7 +170,7 @@ As a user, I want to fill out the {{FormName}} form with clear guidance so that
|
|
|
143
170
|
|
|
144
171
|
### AC-4: Responsive design
|
|
145
172
|
- [ ] Form renders correctly on mobile, tablet, and desktop
|
|
146
|
-
- [ ] Touch targets meet minimum size (
|
|
173
|
+
- [ ] Touch targets meet minimum size (44x44 px)
|
|
147
174
|
|
|
148
175
|
### AC-5: Reset and cancel
|
|
149
176
|
- [ ] Reset clears all fields and removes error state
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-api-ui.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-api-ui.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,8DAA8D;AAI9D,uCAAuC;AACvC,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,EAAE,EAAE,mBAAmB;IACvB,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,4EAA4E;IACzF,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC;IAC5C,SAAS,EAAE;QACT;YACE,GAAG,EAAE,cAAc;YACnB,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,0CAA0C;YACvD,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,4CAA4C;YACzD,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,gCAAgC;YAC7C,OAAO,EAAE,gBAAgB;YACzB,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;CAsBvB;IACC,gBAAgB,EAAE;;;;;;;;;;;CAWnB;CACA,CAAC;AAEF,6BAA6B;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,qEAAqE;IAClF,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC;IACzD,SAAS,EAAE;QACT;YACE,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,yDAAyD;YACtE,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;CAsBvB;IACC,gBAAgB,EAAE;;;;;;;;;;CAUnB;CACA,CAAC"}
|
|
1
|
+
{"version":3,"file":"templates-api-ui.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-api-ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-auth-crud.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-auth-crud.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"templates-auth-crud.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-auth-crud.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,EAAE,iBA4G/B,CAAC;AAEF,iCAAiC;AACjC,eAAO,MAAM,oBAAoB,EAAE,iBA8GlC,CAAC"}
|
|
@@ -7,6 +7,19 @@ export const AUTH_JWT_TEMPLATE = {
|
|
|
7
7
|
category: 'auth',
|
|
8
8
|
description: 'User authentication flow with JWT tokens: login, logout, refresh, and guards.',
|
|
9
9
|
tags: ['auth', 'jwt', 'security', 'session'],
|
|
10
|
+
complexityScore: 'M',
|
|
11
|
+
estimationBase: {
|
|
12
|
+
hoursMin: 16,
|
|
13
|
+
hoursMax: 32,
|
|
14
|
+
notes: 'Includes token rotation, rate limiting, and brute-force protection',
|
|
15
|
+
},
|
|
16
|
+
criteria: [
|
|
17
|
+
{ id: 'AC-1', title: 'Login endpoint', required: true },
|
|
18
|
+
{ id: 'AC-2', title: 'Protected route guard', required: true },
|
|
19
|
+
{ id: 'AC-3', title: 'Token refresh', required: true },
|
|
20
|
+
{ id: 'AC-4', title: 'Logout', required: false },
|
|
21
|
+
{ id: 'AC-5', title: 'Security requirements', required: true },
|
|
22
|
+
],
|
|
10
23
|
variables: [
|
|
11
24
|
{
|
|
12
25
|
key: 'EntityName',
|
|
@@ -104,6 +117,20 @@ export const CRUD_ENTITY_TEMPLATE = {
|
|
|
104
117
|
category: 'crud',
|
|
105
118
|
description: 'Full Create/Read/Update/Delete lifecycle for any data entity.',
|
|
106
119
|
tags: ['crud', 'rest', 'api', 'database'],
|
|
120
|
+
complexityScore: 'S',
|
|
121
|
+
estimationBase: {
|
|
122
|
+
hoursMin: 6,
|
|
123
|
+
hoursMax: 12,
|
|
124
|
+
notes: 'Standard CRUD with validation and soft delete',
|
|
125
|
+
},
|
|
126
|
+
criteria: [
|
|
127
|
+
{ id: 'AC-1', title: 'Create entity', required: true },
|
|
128
|
+
{ id: 'AC-2', title: 'List entities', required: true },
|
|
129
|
+
{ id: 'AC-3', title: 'Get single entity', required: true },
|
|
130
|
+
{ id: 'AC-4', title: 'Update entity', required: true },
|
|
131
|
+
{ id: 'AC-5', title: 'Delete entity', required: true },
|
|
132
|
+
{ id: 'AC-6', title: 'Validation', required: true },
|
|
133
|
+
],
|
|
107
134
|
variables: [
|
|
108
135
|
{
|
|
109
136
|
key: 'EntityName',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-auth-crud.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-auth-crud.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,8DAA8D;AAI9D,wCAAwC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,+EAA+E;IAC5F,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC;IAC5C,SAAS,EAAE;QACT;YACE,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,6DAA6D;YAC1E,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,cAAc;YACrB,WAAW,EAAE,kCAAkC;YAC/C,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,YAAY;SAC3B;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;CAwBvB;IACC,gBAAgB,EAAE;;;;;;;;;;CAUnB;CACA,CAAC;AAEF,iCAAiC;AACjC,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,+DAA+D;IAC5E,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;IACzC,SAAS,EAAE;QACT;YACE,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,cAAc;YACnB,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,gCAAgC;YAC7C,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BvB;IACC,gBAAgB,EAAE;;;;;;;;;;;CAWnB;CACA,CAAC"}
|
|
1
|
+
{"version":3,"file":"templates-auth-crud.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-auth-crud.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-data-security.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-data-security.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,oCAAoC;AACpC,eAAO,MAAM,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"templates-data-security.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-data-security.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,oCAAoC;AACpC,eAAO,MAAM,uBAAuB,EAAE,iBA2FrC,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,yBAAyB,EAAE,iBAoGvC,CAAC"}
|
|
@@ -7,6 +7,19 @@ export const DATA_MIGRATION_TEMPLATE = {
|
|
|
7
7
|
category: 'data',
|
|
8
8
|
description: 'Safe, reversible database or data migration with rollback support.',
|
|
9
9
|
tags: ['migration', 'database', 'schema', 'data'],
|
|
10
|
+
complexityScore: 'M',
|
|
11
|
+
estimationBase: {
|
|
12
|
+
hoursMin: 16,
|
|
13
|
+
hoursMax: 40,
|
|
14
|
+
notes: 'Includes rollback strategy and zero-downtime approach',
|
|
15
|
+
},
|
|
16
|
+
criteria: [
|
|
17
|
+
{ id: 'AC-1', title: 'Migration script', required: true },
|
|
18
|
+
{ id: 'AC-2', title: 'Data safety', required: true },
|
|
19
|
+
{ id: 'AC-3', title: 'Zero-downtime strategy', required: false },
|
|
20
|
+
{ id: 'AC-4', title: 'Rollback', required: true },
|
|
21
|
+
{ id: 'AC-5', title: 'Observability', required: false },
|
|
22
|
+
],
|
|
10
23
|
variables: [
|
|
11
24
|
{
|
|
12
25
|
key: 'MigrationName',
|
|
@@ -87,6 +100,19 @@ export const SECURITY_FEATURE_TEMPLATE = {
|
|
|
87
100
|
category: 'security',
|
|
88
101
|
description: 'Security hardening: rate limiting, input sanitization, audit logging, etc.',
|
|
89
102
|
tags: ['security', 'hardening', 'audit', 'rate-limiting'],
|
|
103
|
+
complexityScore: 'M',
|
|
104
|
+
estimationBase: {
|
|
105
|
+
hoursMin: 16,
|
|
106
|
+
hoursMax: 32,
|
|
107
|
+
notes: 'Includes penetration test checklist and monitoring setup',
|
|
108
|
+
},
|
|
109
|
+
criteria: [
|
|
110
|
+
{ id: 'AC-1', title: 'Implementation', required: true },
|
|
111
|
+
{ id: 'AC-2', title: 'Bypass prevention', required: true },
|
|
112
|
+
{ id: 'AC-3', title: 'Observability', required: false },
|
|
113
|
+
{ id: 'AC-4', title: 'Testing', required: true },
|
|
114
|
+
{ id: 'AC-5', title: 'Documentation', required: false },
|
|
115
|
+
],
|
|
90
116
|
variables: [
|
|
91
117
|
{
|
|
92
118
|
key: 'FeatureName',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-data-security.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-data-security.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,oEAAoE;AAIpE,oCAAoC;AACpC,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,oEAAoE;IACjF,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC;IACjD,SAAS,EAAE;QACT;YACE,GAAG,EAAE,eAAe;YACpB,KAAK,EAAE,gBAAgB;YACvB,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,oCAAoC;YAC7C,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Bb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;CAmBvB;IACC,gBAAgB,EAAE;;;;;;;;;;CAUnB;CACA,CAAC;AAEF,sCAAsC;AACtC,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,4EAA4E;IACzF,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,CAAC;IACzD,SAAS,EAAE;QACT;YACE,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EAAE,gDAAgD;YAC7D,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,mBAAmB;YACxB,KAAK,EAAE,4BAA4B;YACnC,WAAW,EAAE,yCAAyC;YACtD,OAAO,EAAE,0BAA0B;YACnC,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Bb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;CAqBvB;IACC,gBAAgB,EAAE;;;;;;;;;;CAUnB;CACA,CAAC"}
|
|
1
|
+
{"version":3,"file":"templates-data-security.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-data-security.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SpecTemplateEntry } from '../../types/spec-templates.js';
|
|
2
|
+
/** E-commerce cart and checkout template. */
|
|
3
|
+
export declare const ECOMMERCE_CART_CHECKOUT_TEMPLATE: SpecTemplateEntry;
|
|
4
|
+
/** E-commerce inventory template. */
|
|
5
|
+
export declare const ECOMMERCE_INVENTORY_TEMPLATE: SpecTemplateEntry;
|
|
6
|
+
//# sourceMappingURL=templates-industry-ecom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates-industry-ecom.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-industry-ecom.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,6CAA6C;AAC7C,eAAO,MAAM,gCAAgC,EAAE,iBAyG9C,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,4BAA4B,EAAE,iBAiG1C,CAAC"}
|