complexity-cli 1.0.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/Complexity.template.md +38 -0
- package/LICENSE +21 -0
- package/README.md +173 -0
- package/dist/commands/add.d.ts +4 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +109 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +85 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +58 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/prompt.d.ts +2 -0
- package/dist/commands/prompt.d.ts.map +1 -0
- package/dist/commands/prompt.js +38 -0
- package/dist/commands/prompt.js.map +1 -0
- package/dist/commands/remove.d.ts +4 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +86 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/update.d.ts +6 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +125 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/core/generator.d.ts +5 -0
- package/dist/core/generator.d.ts.map +1 -0
- package/dist/core/generator.js +96 -0
- package/dist/core/generator.js.map +1 -0
- package/dist/core/parser.d.ts +4 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +144 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/validator.d.ts +6 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +22 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/error-helpers.d.ts +4 -0
- package/dist/utils/error-helpers.d.ts.map +1 -0
- package/dist/utils/error-helpers.js +26 -0
- package/dist/utils/error-helpers.js.map +1 -0
- package/dist/utils/prompts.d.ts +3 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +37 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/types.d.ts +17 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +3 -0
- package/dist/utils/types.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.removeCommand = removeCommand;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const parser_1 = require("../core/parser");
|
|
43
|
+
const generator_1 = require("../core/generator");
|
|
44
|
+
const validator_1 = require("../core/validator");
|
|
45
|
+
const prompts_1 = require("../utils/prompts");
|
|
46
|
+
const error_helpers_1 = require("../utils/error-helpers");
|
|
47
|
+
function requireComplexityFile() {
|
|
48
|
+
const filePath = (0, parser_1.findComplexityFile)();
|
|
49
|
+
if (!filePath) {
|
|
50
|
+
(0, error_helpers_1.exitWithError)('COMPLEXITY.md not found.', 'Run "complexity init" to create one.');
|
|
51
|
+
}
|
|
52
|
+
return filePath;
|
|
53
|
+
}
|
|
54
|
+
function requireConceptExists(conceptName, concepts) {
|
|
55
|
+
const existing = (0, validator_1.findConcept)(conceptName, concepts);
|
|
56
|
+
if (!existing) {
|
|
57
|
+
(0, error_helpers_1.exitWithError)(`Concept "${conceptName}" not found.`);
|
|
58
|
+
}
|
|
59
|
+
return existing;
|
|
60
|
+
}
|
|
61
|
+
async function confirmRemovalIfNeeded(concept, force) {
|
|
62
|
+
if (force) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const confirmed = await (0, prompts_1.confirmAction)(`Remove "${concept.topic}" (Level ${concept.criticality}, Area: ${concept.area})?`);
|
|
66
|
+
if (!confirmed) {
|
|
67
|
+
(0, error_helpers_1.exitCancelled)();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function removeConcept(conceptName, concepts) {
|
|
71
|
+
return concepts.filter(c => c.topic.toLowerCase() !== conceptName.toLowerCase());
|
|
72
|
+
}
|
|
73
|
+
function saveComplexityFile(filePath, projectName, concepts) {
|
|
74
|
+
const markdown = (0, generator_1.generateMarkdown)(projectName, concepts);
|
|
75
|
+
fs.writeFileSync(filePath, markdown, 'utf-8');
|
|
76
|
+
}
|
|
77
|
+
async function removeCommand(concept, options) {
|
|
78
|
+
const filePath = requireComplexityFile();
|
|
79
|
+
const doc = (0, parser_1.parseComplexityFile)(filePath);
|
|
80
|
+
const existing = requireConceptExists(concept, doc.concepts);
|
|
81
|
+
await confirmRemovalIfNeeded(existing, options.force ?? false);
|
|
82
|
+
const updatedConcepts = removeConcept(concept, doc.concepts);
|
|
83
|
+
saveComplexityFile(filePath, doc.projectName, updatedConcepts);
|
|
84
|
+
console.log(chalk_1.default.green(`✓ Removed "${existing.topic}"`));
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDA,sCAWC;AA/DD,uCAAyB;AACzB,kDAA0B;AAC1B,2CAAyE;AACzE,iDAAqD;AACrD,iDAAgD;AAChD,8CAAiD;AACjD,0DAAsE;AAGtE,SAAS,qBAAqB;IAC5B,MAAM,QAAQ,GAAG,IAAA,2BAAkB,GAAE,CAAC;IAEtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAA,6BAAa,EAAC,0BAA0B,EAAE,sCAAsC,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB,EAAE,QAAmB;IACpE,MAAM,QAAQ,GAAG,IAAA,uBAAW,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAEpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAA,6BAAa,EAAC,YAAY,WAAW,cAAc,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,OAAgB,EAAE,KAAc;IACpE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,IAAA,uBAAa,EACnC,WAAW,OAAO,CAAC,KAAK,YAAY,OAAO,CAAC,WAAW,WAAW,OAAO,CAAC,IAAI,IAAI,CACnF,CAAC;IAEF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAA,6BAAa,GAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB,EAAE,QAAmB;IAC7D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,WAAmB,EAAE,QAAmB;IACpF,MAAM,QAAQ,GAAG,IAAA,4BAAgB,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,OAA4B;IAC/E,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,IAAA,4BAAmB,EAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE7D,MAAM,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IAE/D,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7D,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAE/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,cAAc,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAkHA,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,iBAgB1D"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.updateCommand = updateCommand;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const parser_1 = require("../core/parser");
|
|
43
|
+
const generator_1 = require("../core/generator");
|
|
44
|
+
const validator_1 = require("../core/validator");
|
|
45
|
+
const prompts_1 = require("../utils/prompts");
|
|
46
|
+
const error_helpers_1 = require("../utils/error-helpers");
|
|
47
|
+
const BLANK_AREA = '___';
|
|
48
|
+
function validateAtLeastOneOptionProvided(options) {
|
|
49
|
+
if (!options.level && !options.area && !options.name) {
|
|
50
|
+
(0, error_helpers_1.exitWithUsageError)('At least one option (--level, --area, or --name) is required.', 'complexity update <concept> [--level <level>] [--area <area>] [--name <new-name>]');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function requireComplexityFile() {
|
|
54
|
+
const filePath = (0, parser_1.findComplexityFile)();
|
|
55
|
+
if (!filePath) {
|
|
56
|
+
(0, error_helpers_1.exitWithError)('COMPLEXITY.md not found.', 'Run "complexity init" to create one.');
|
|
57
|
+
}
|
|
58
|
+
return filePath;
|
|
59
|
+
}
|
|
60
|
+
function requireConceptExists(conceptName, concepts) {
|
|
61
|
+
const existing = (0, validator_1.findConcept)(conceptName, concepts);
|
|
62
|
+
if (!existing) {
|
|
63
|
+
(0, error_helpers_1.exitWithError)(`Concept "${conceptName}" not found.`);
|
|
64
|
+
}
|
|
65
|
+
return existing;
|
|
66
|
+
}
|
|
67
|
+
function validateLevelIfProvided(level) {
|
|
68
|
+
if (!level) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (!(0, validator_1.isValidLevel)(level)) {
|
|
72
|
+
(0, error_helpers_1.exitWithError)('Level must be 1, 2, or 3.');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function confirmNewAreaIfNeeded(area, existingConcepts) {
|
|
76
|
+
if (!area || area === BLANK_AREA) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if ((0, validator_1.isExistingArea)(area, existingConcepts)) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const confirmed = await (0, prompts_1.confirmAction)(`No pre-existing area "${area}" found. Would you still like to use it?`);
|
|
83
|
+
if (!confirmed) {
|
|
84
|
+
(0, error_helpers_1.exitCancelled)();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function createUpdatedConcept(existing, options) {
|
|
88
|
+
return {
|
|
89
|
+
topic: options.name || existing.topic,
|
|
90
|
+
area: options.area !== undefined ? options.area : existing.area,
|
|
91
|
+
criticality: (options.level ? parseInt(options.level) : existing.criticality),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function replaceConceptInList(conceptName, updatedConcept, concepts) {
|
|
95
|
+
return concepts.map(c => c.topic.toLowerCase() === conceptName.toLowerCase() ? updatedConcept : c);
|
|
96
|
+
}
|
|
97
|
+
function saveComplexityFile(filePath, projectName, concepts) {
|
|
98
|
+
const markdown = (0, generator_1.generateMarkdown)(projectName, concepts);
|
|
99
|
+
fs.writeFileSync(filePath, markdown, 'utf-8');
|
|
100
|
+
}
|
|
101
|
+
function displayUpdateSummary(conceptName, updatedConcept, options) {
|
|
102
|
+
console.log(chalk_1.default.green(`✓ Updated "${conceptName}"`));
|
|
103
|
+
if (options.name) {
|
|
104
|
+
console.log(chalk_1.default.gray(` → Name: ${updatedConcept.topic}`));
|
|
105
|
+
}
|
|
106
|
+
if (options.level) {
|
|
107
|
+
console.log(chalk_1.default.gray(` → Level: ${updatedConcept.criticality}`));
|
|
108
|
+
}
|
|
109
|
+
if (options.area !== undefined) {
|
|
110
|
+
console.log(chalk_1.default.gray(` → Area: ${updatedConcept.area}`));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function updateCommand(concept, options) {
|
|
114
|
+
validateAtLeastOneOptionProvided(options);
|
|
115
|
+
validateLevelIfProvided(options.level);
|
|
116
|
+
const filePath = requireComplexityFile();
|
|
117
|
+
const doc = (0, parser_1.parseComplexityFile)(filePath);
|
|
118
|
+
const existing = requireConceptExists(concept, doc.concepts);
|
|
119
|
+
await confirmNewAreaIfNeeded(options.area, doc.concepts);
|
|
120
|
+
const updatedConcept = createUpdatedConcept(existing, options);
|
|
121
|
+
const updatedConcepts = replaceConceptInList(concept, updatedConcept, doc.concepts);
|
|
122
|
+
saveComplexityFile(filePath, doc.projectName, updatedConcepts);
|
|
123
|
+
displayUpdateSummary(concept, updatedConcept, options);
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Concept, Stats } from '../utils/types';
|
|
2
|
+
export declare function calculateStats(concepts: Concept[]): Stats;
|
|
3
|
+
export declare function sortConcepts(concepts: Concept[]): Concept[];
|
|
4
|
+
export declare function generateMarkdown(projectName: string, concepts: Concept[]): string;
|
|
5
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/core/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEhD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAczD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAO3D;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CA4EjF"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateStats = calculateStats;
|
|
4
|
+
exports.sortConcepts = sortConcepts;
|
|
5
|
+
exports.generateMarkdown = generateMarkdown;
|
|
6
|
+
function calculateStats(concepts) {
|
|
7
|
+
const uniqueAreas = new Set(concepts
|
|
8
|
+
.map(c => c.area)
|
|
9
|
+
.filter(a => a && a !== '___'));
|
|
10
|
+
return {
|
|
11
|
+
totalConcepts: concepts.length,
|
|
12
|
+
totalAreas: uniqueAreas.size,
|
|
13
|
+
criticalCount: concepts.filter(c => c.criticality === 3).length,
|
|
14
|
+
importantCount: concepts.filter(c => c.criticality === 2).length,
|
|
15
|
+
situationalCount: concepts.filter(c => c.criticality === 1).length,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function sortConcepts(concepts) {
|
|
19
|
+
return [...concepts].sort((a, b) => {
|
|
20
|
+
if (a.criticality !== b.criticality) {
|
|
21
|
+
return b.criticality - a.criticality;
|
|
22
|
+
}
|
|
23
|
+
return a.topic.localeCompare(b.topic);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function generateMarkdown(projectName, concepts) {
|
|
27
|
+
const stats = calculateStats(concepts);
|
|
28
|
+
const sorted = sortConcepts(concepts);
|
|
29
|
+
const critical = sorted.filter(c => c.criticality === 3);
|
|
30
|
+
const important = sorted.filter(c => c.criticality === 2);
|
|
31
|
+
const situational = sorted.filter(c => c.criticality === 1);
|
|
32
|
+
const lines = [];
|
|
33
|
+
lines.push('# Project Complexity & Knowledge Map');
|
|
34
|
+
lines.push('');
|
|
35
|
+
lines.push(`<!-- Replace {Project Name} with your project name -->`);
|
|
36
|
+
lines.push(`A guide to what you need to know to work on ${projectName}, broken into three tiers.`);
|
|
37
|
+
lines.push('');
|
|
38
|
+
lines.push(`> **${stats.totalConcepts} technologies/concepts** across ${stats.totalAreas} areas`);
|
|
39
|
+
lines.push(`> **${stats.criticalCount} critical**`);
|
|
40
|
+
lines.push(`> **${stats.importantCount} important**`);
|
|
41
|
+
lines.push(`> **${stats.situationalCount} situational**`);
|
|
42
|
+
lines.push('');
|
|
43
|
+
lines.push('---');
|
|
44
|
+
lines.push('');
|
|
45
|
+
lines.push('## **What you NEED to know to do any meaningful work**');
|
|
46
|
+
lines.push('');
|
|
47
|
+
if (critical.length > 0) {
|
|
48
|
+
critical.forEach(c => lines.push(`- ${c.topic}`));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
lines.push('<!-- Criticality 3 items from the table below -->');
|
|
52
|
+
}
|
|
53
|
+
lines.push('');
|
|
54
|
+
lines.push('## **What you SHOULD know to be very helpful**');
|
|
55
|
+
lines.push('');
|
|
56
|
+
if (important.length > 0) {
|
|
57
|
+
important.forEach(c => lines.push(`- ${c.topic}`));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
lines.push('<!-- Everything above, plus Criticality 2 items -->');
|
|
61
|
+
}
|
|
62
|
+
lines.push('');
|
|
63
|
+
lines.push('## **What you should EVENTUALLY learn for specific areas**');
|
|
64
|
+
lines.push('');
|
|
65
|
+
if (situational.length > 0) {
|
|
66
|
+
situational.forEach(c => lines.push(`- ${c.topic}`));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
lines.push('<!-- Criticality 1 items -->');
|
|
70
|
+
}
|
|
71
|
+
lines.push('');
|
|
72
|
+
lines.push('---');
|
|
73
|
+
lines.push('');
|
|
74
|
+
lines.push('## Full Reference');
|
|
75
|
+
lines.push('');
|
|
76
|
+
lines.push('<!--');
|
|
77
|
+
lines.push(' Criticality scale:');
|
|
78
|
+
lines.push(' 3 = Can\'t do meaningful work without it');
|
|
79
|
+
lines.push(' 2 = Will encounter regularly; gaps will slow you down');
|
|
80
|
+
lines.push(' 1 = Comes up occasionally or is abstracted away enough to learn on the job');
|
|
81
|
+
lines.push('-->');
|
|
82
|
+
lines.push('');
|
|
83
|
+
lines.push('| Topic | Area | Criticality (1-3) |');
|
|
84
|
+
lines.push('|---|---|---|');
|
|
85
|
+
if (sorted.length > 0) {
|
|
86
|
+
sorted.forEach(c => {
|
|
87
|
+
lines.push(`| ${c.topic} | ${c.area} | ${c.criticality} |`);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
lines.push('| | | |');
|
|
92
|
+
}
|
|
93
|
+
lines.push('');
|
|
94
|
+
return lines.join('\n');
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/core/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAgF7D,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAYxE;AA0CD,wBAAgB,kBAAkB,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAMlF"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.parseComplexityFile = parseComplexityFile;
|
|
37
|
+
exports.findComplexityFile = findComplexityFile;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const COMPLEXITY_FILE = 'COMPLEXITY.md';
|
|
41
|
+
const BLANK_AREA = '___';
|
|
42
|
+
const DEFAULT_PROJECT_NAME = 'Project Name';
|
|
43
|
+
function extractProjectName(lines) {
|
|
44
|
+
const projectNameLine = lines[3];
|
|
45
|
+
if (!projectNameLine) {
|
|
46
|
+
return DEFAULT_PROJECT_NAME;
|
|
47
|
+
}
|
|
48
|
+
const match = projectNameLine.match(/A guide to what you need to know to work on (.+?), broken/);
|
|
49
|
+
return match ? match[1] : DEFAULT_PROJECT_NAME;
|
|
50
|
+
}
|
|
51
|
+
function findTableStartIndex(lines) {
|
|
52
|
+
for (let i = 0; i < lines.length; i++) {
|
|
53
|
+
if (lines[i].trim().startsWith('| Topic | Area | Criticality')) {
|
|
54
|
+
return i + 2;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return -1;
|
|
58
|
+
}
|
|
59
|
+
function isValidCriticality(criticality) {
|
|
60
|
+
return !isNaN(criticality) && criticality >= 1 && criticality <= 3;
|
|
61
|
+
}
|
|
62
|
+
function parseTableRow(line) {
|
|
63
|
+
const parts = line.split('|').map(p => p.trim()).filter(p => p);
|
|
64
|
+
if (parts.length !== 3) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const [topic, area, criticalityStr] = parts;
|
|
68
|
+
if (!topic || topic === 'Topic') {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
const criticality = parseInt(criticalityStr);
|
|
72
|
+
if (!isValidCriticality(criticality)) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
topic,
|
|
77
|
+
area: area || BLANK_AREA,
|
|
78
|
+
criticality
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function parseTableRows(lines, startIndex) {
|
|
82
|
+
if (startIndex === -1) {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
const concepts = [];
|
|
86
|
+
for (let i = startIndex; i < lines.length; i++) {
|
|
87
|
+
const line = lines[i].trim();
|
|
88
|
+
if (!line.startsWith('|')) {
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
const concept = parseTableRow(line);
|
|
92
|
+
if (concept) {
|
|
93
|
+
concepts.push(concept);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return concepts;
|
|
97
|
+
}
|
|
98
|
+
function parseComplexityFile(filePath) {
|
|
99
|
+
if (!fs.existsSync(filePath)) {
|
|
100
|
+
throw new Error(`COMPLEXITY.md not found at: ${filePath}`);
|
|
101
|
+
}
|
|
102
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
103
|
+
const lines = content.split('\n');
|
|
104
|
+
return {
|
|
105
|
+
projectName: extractProjectName(lines),
|
|
106
|
+
concepts: parseTableRows(lines, findTableStartIndex(lines))
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function findGitRoot(startDir) {
|
|
110
|
+
let searchDir = startDir;
|
|
111
|
+
const filesystemRoot = path.parse(searchDir).root;
|
|
112
|
+
while (searchDir !== filesystemRoot) {
|
|
113
|
+
if (fs.existsSync(path.join(searchDir, '.git'))) {
|
|
114
|
+
return searchDir;
|
|
115
|
+
}
|
|
116
|
+
searchDir = path.dirname(searchDir);
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
function searchUpwardForFile(startDir, filename, stopAtDir) {
|
|
121
|
+
let currentDir = startDir;
|
|
122
|
+
while (true) {
|
|
123
|
+
const filePath = path.join(currentDir, filename);
|
|
124
|
+
if (fs.existsSync(filePath)) {
|
|
125
|
+
return filePath;
|
|
126
|
+
}
|
|
127
|
+
if (currentDir === stopAtDir) {
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
const parentDir = path.dirname(currentDir);
|
|
131
|
+
if (parentDir === currentDir) {
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
currentDir = parentDir;
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
function findComplexityFile(startDir = process.cwd()) {
|
|
139
|
+
const resolvedStartDir = path.resolve(startDir);
|
|
140
|
+
const gitRoot = findGitRoot(resolvedStartDir);
|
|
141
|
+
const searchLimit = gitRoot || path.parse(resolvedStartDir).root;
|
|
142
|
+
return searchUpwardForFile(resolvedStartDir, COMPLEXITY_FILE, searchLimit);
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Concept } from '../utils/types';
|
|
2
|
+
export declare function isDuplicate(concept: string, existingConcepts: Concept[]): boolean;
|
|
3
|
+
export declare function isValidLevel(level: unknown): level is 1 | 2 | 3;
|
|
4
|
+
export declare function isExistingArea(area: string, existingConcepts: Concept[]): boolean;
|
|
5
|
+
export declare function findConcept(conceptName: string, concepts: Concept[]): Concept | undefined;
|
|
6
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,OAAO,CAIjF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAG/D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,OAAO,CAGjF;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,GAAG,SAAS,CAIzF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isDuplicate = isDuplicate;
|
|
4
|
+
exports.isValidLevel = isValidLevel;
|
|
5
|
+
exports.isExistingArea = isExistingArea;
|
|
6
|
+
exports.findConcept = findConcept;
|
|
7
|
+
function isDuplicate(concept, existingConcepts) {
|
|
8
|
+
return existingConcepts.some(c => c.topic.toLowerCase() === concept.toLowerCase());
|
|
9
|
+
}
|
|
10
|
+
function isValidLevel(level) {
|
|
11
|
+
const num = parseInt(level);
|
|
12
|
+
return !isNaN(num) && num >= 1 && num <= 3;
|
|
13
|
+
}
|
|
14
|
+
function isExistingArea(area, existingConcepts) {
|
|
15
|
+
if (!area || area === '___')
|
|
16
|
+
return true;
|
|
17
|
+
return existingConcepts.some(c => c.area.toLowerCase() === area.toLowerCase());
|
|
18
|
+
}
|
|
19
|
+
function findConcept(conceptName, concepts) {
|
|
20
|
+
return concepts.find(c => c.topic.toLowerCase() === conceptName.toLowerCase());
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":";;AAEA,kCAIC;AAED,oCAGC;AAED,wCAGC;AAED,kCAIC;AApBD,SAAgB,WAAW,CAAC,OAAe,EAAE,gBAA2B;IACtE,OAAO,gBAAgB,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CACrD,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAAC,KAAc;IACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAe,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY,EAAE,gBAA2B;IACtE,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,SAAgB,WAAW,CAAC,WAAmB,EAAE,QAAmB;IAClE,OAAO,QAAQ,CAAC,IAAI,CAClB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CACzD,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const init_1 = require("./commands/init");
|
|
6
|
+
const add_1 = require("./commands/add");
|
|
7
|
+
const remove_1 = require("./commands/remove");
|
|
8
|
+
const update_1 = require("./commands/update");
|
|
9
|
+
const list_1 = require("./commands/list");
|
|
10
|
+
const prompt_1 = require("./commands/prompt");
|
|
11
|
+
const program = new commander_1.Command();
|
|
12
|
+
program
|
|
13
|
+
.name('complexity')
|
|
14
|
+
.description('A CLI tool for managing project complexity and knowledge maps')
|
|
15
|
+
.version('1.0.0');
|
|
16
|
+
program
|
|
17
|
+
.command('init')
|
|
18
|
+
.description('Initialize a COMPLEXITY.md file in the current directory')
|
|
19
|
+
.option('-n, --name <name>', 'Project name')
|
|
20
|
+
.option('-f, --force', 'Overwrite existing file')
|
|
21
|
+
.action(init_1.initCommand);
|
|
22
|
+
program
|
|
23
|
+
.command('add <concept> [level] [area]')
|
|
24
|
+
.description('Add a concept to the complexity map')
|
|
25
|
+
.option('-l, --level <level>', 'Criticality level (1-3)')
|
|
26
|
+
.action(add_1.addCommand);
|
|
27
|
+
program
|
|
28
|
+
.command('remove <concept>')
|
|
29
|
+
.description('Remove a concept from the complexity map')
|
|
30
|
+
.option('-f, --force', 'Skip confirmation')
|
|
31
|
+
.action(remove_1.removeCommand);
|
|
32
|
+
program
|
|
33
|
+
.command('update <concept>')
|
|
34
|
+
.description('Update an existing concept')
|
|
35
|
+
.option('-l, --level <level>', 'New criticality level (1-3)')
|
|
36
|
+
.option('-a, --area <area>', 'New area')
|
|
37
|
+
.option('-n, --name <name>', 'New concept name')
|
|
38
|
+
.action(update_1.updateCommand);
|
|
39
|
+
program
|
|
40
|
+
.command('list')
|
|
41
|
+
.description('List all concepts in the complexity map')
|
|
42
|
+
.action(list_1.listCommand);
|
|
43
|
+
program
|
|
44
|
+
.command('prompt')
|
|
45
|
+
.description('Display the AI prompt for complexity analysis')
|
|
46
|
+
.action(prompt_1.promptCommand);
|
|
47
|
+
program.parse();
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,wCAA4C;AAC5C,8CAAkD;AAClD,8CAAkD;AAClD,0CAA8C;AAC9C,8CAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,mBAAmB,EAAE,cAAc,CAAC;KAC3C,MAAM,CAAC,aAAa,EAAE,yBAAyB,CAAC;KAChD,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,8BAA8B,CAAC;KACvC,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;KACxD,MAAM,CAAC,gBAAU,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;KAC1C,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;KAC5D,MAAM,CAAC,mBAAmB,EAAE,UAAU,CAAC;KACvC,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;KAC/C,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/error-helpers.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAMnE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,KAAK,CAI/E;AAED,wBAAgB,aAAa,IAAI,KAAK,CAGrC"}
|