@lwelliott/cortex-cli 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/dist/cli/audit.d.ts +3 -0
- package/dist/cli/audit.d.ts.map +1 -0
- package/dist/cli/audit.js +78 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/doc.d.ts +3 -0
- package/dist/cli/doc.d.ts.map +1 -0
- package/dist/cli/doc.js +291 -0
- package/dist/cli/doc.js.map +1 -0
- package/dist/cli/entity.d.ts +3 -0
- package/dist/cli/entity.d.ts.map +1 -0
- package/dist/cli/entity.js +135 -0
- package/dist/cli/entity.js.map +1 -0
- package/dist/cli/format-selector.d.ts +30 -0
- package/dist/cli/format-selector.d.ts.map +1 -0
- package/dist/cli/format-selector.js +101 -0
- package/dist/cli/format-selector.js.map +1 -0
- package/dist/cli/formatters/audit-formatter.d.ts +33 -0
- package/dist/cli/formatters/audit-formatter.d.ts.map +1 -0
- package/dist/cli/formatters/audit-formatter.js +204 -0
- package/dist/cli/formatters/audit-formatter.js.map +1 -0
- package/dist/cli/formatters/json.d.ts +10 -0
- package/dist/cli/formatters/json.d.ts.map +1 -0
- package/dist/cli/formatters/json.js +31 -0
- package/dist/cli/formatters/json.js.map +1 -0
- package/dist/cli/formatters/markdown.d.ts +12 -0
- package/dist/cli/formatters/markdown.d.ts.map +1 -0
- package/dist/cli/formatters/markdown.js +341 -0
- package/dist/cli/formatters/markdown.js.map +1 -0
- package/dist/cli/formatters/quiet.d.ts +15 -0
- package/dist/cli/formatters/quiet.d.ts.map +1 -0
- package/dist/cli/formatters/quiet.js +75 -0
- package/dist/cli/formatters/quiet.js.map +1 -0
- package/dist/cli/formatters/table.d.ts +11 -0
- package/dist/cli/formatters/table.d.ts.map +1 -0
- package/dist/cli/formatters/table.js +726 -0
- package/dist/cli/formatters/table.js.map +1 -0
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.d.ts.map +1 -0
- package/dist/cli/graph.js +209 -0
- package/dist/cli/graph.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +144 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/lesson.d.ts +3 -0
- package/dist/cli/lesson.d.ts.map +1 -0
- package/dist/cli/lesson.js +85 -0
- package/dist/cli/lesson.js.map +1 -0
- package/dist/cli/project-resolver.d.ts +17 -0
- package/dist/cli/project-resolver.d.ts.map +1 -0
- package/dist/cli/project-resolver.js +25 -0
- package/dist/cli/project-resolver.js.map +1 -0
- package/dist/cli/project.d.ts +12 -0
- package/dist/cli/project.d.ts.map +1 -0
- package/dist/cli/project.js +169 -0
- package/dist/cli/project.js.map +1 -0
- package/dist/cli/relation.d.ts +3 -0
- package/dist/cli/relation.d.ts.map +1 -0
- package/dist/cli/relation.js +128 -0
- package/dist/cli/relation.js.map +1 -0
- package/dist/cli/review.d.ts +3 -0
- package/dist/cli/review.d.ts.map +1 -0
- package/dist/cli/review.js +131 -0
- package/dist/cli/review.js.map +1 -0
- package/dist/cli/router.d.ts +38 -0
- package/dist/cli/router.d.ts.map +1 -0
- package/dist/cli/router.js +49 -0
- package/dist/cli/router.js.map +1 -0
- package/dist/cli/schema.d.ts +3 -0
- package/dist/cli/schema.d.ts.map +1 -0
- package/dist/cli/schema.js +94 -0
- package/dist/cli/schema.js.map +1 -0
- package/dist/cli/sprint.d.ts +12 -0
- package/dist/cli/sprint.d.ts.map +1 -0
- package/dist/cli/sprint.js +200 -0
- package/dist/cli/sprint.js.map +1 -0
- package/dist/cli/task.d.ts +12 -0
- package/dist/cli/task.d.ts.map +1 -0
- package/dist/cli/task.js +252 -0
- package/dist/cli/task.js.map +1 -0
- package/dist/cli/test-report.d.ts +3 -0
- package/dist/cli/test-report.d.ts.map +1 -0
- package/dist/cli/test-report.js +134 -0
- package/dist/cli/test-report.js.map +1 -0
- package/dist/cli/validate.d.ts +8 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +86 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/config/config.d.ts +18 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +70 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/registry.d.ts +52 -0
- package/dist/config/registry.d.ts.map +1 -0
- package/dist/config/registry.js +193 -0
- package/dist/config/registry.js.map +1 -0
- package/dist/config/resolver.d.ts +26 -0
- package/dist/config/resolver.d.ts.map +1 -0
- package/dist/config/resolver.js +87 -0
- package/dist/config/resolver.js.map +1 -0
- package/dist/db/builtin-schema-constants.d.ts +109 -0
- package/dist/db/builtin-schema-constants.d.ts.map +1 -0
- package/dist/db/builtin-schema-constants.js +32 -0
- package/dist/db/builtin-schema-constants.js.map +1 -0
- package/dist/db/connection.d.ts +34 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +140 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/generated/schema-types.d.ts +134 -0
- package/dist/db/generated/schema-types.d.ts.map +1 -0
- package/dist/db/generated/schema-types.js +31 -0
- package/dist/db/generated/schema-types.js.map +1 -0
- package/dist/db/locks.d.ts +106 -0
- package/dist/db/locks.d.ts.map +1 -0
- package/dist/db/locks.js +211 -0
- package/dist/db/locks.js.map +1 -0
- package/dist/db/migration.d.ts +65 -0
- package/dist/db/migration.d.ts.map +1 -0
- package/dist/db/migration.js +233 -0
- package/dist/db/migration.js.map +1 -0
- package/dist/db/retry.d.ts +26 -0
- package/dist/db/retry.d.ts.map +1 -0
- package/dist/db/retry.js +71 -0
- package/dist/db/retry.js.map +1 -0
- package/dist/db/schema.d.ts +21 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +830 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/models/common.d.ts +27 -0
- package/dist/models/common.d.ts.map +1 -0
- package/dist/models/common.js +4 -0
- package/dist/models/common.js.map +1 -0
- package/dist/models/document.d.ts +89 -0
- package/dist/models/document.d.ts.map +1 -0
- package/dist/models/document.js +5 -0
- package/dist/models/document.js.map +1 -0
- package/dist/models/entity-model.d.ts +30 -0
- package/dist/models/entity-model.d.ts.map +1 -0
- package/dist/models/entity-model.js +99 -0
- package/dist/models/entity-model.js.map +1 -0
- package/dist/models/entity.d.ts +88 -0
- package/dist/models/entity.d.ts.map +1 -0
- package/dist/models/entity.js +5 -0
- package/dist/models/entity.js.map +1 -0
- package/dist/models/graph-schema.d.ts +43 -0
- package/dist/models/graph-schema.d.ts.map +1 -0
- package/dist/models/graph-schema.js +76 -0
- package/dist/models/graph-schema.js.map +1 -0
- package/dist/models/project.d.ts +49 -0
- package/dist/models/project.d.ts.map +1 -0
- package/dist/models/project.js +18 -0
- package/dist/models/project.js.map +1 -0
- package/dist/models/relation.d.ts +35 -0
- package/dist/models/relation.d.ts.map +1 -0
- package/dist/models/relation.js +212 -0
- package/dist/models/relation.js.map +1 -0
- package/dist/models/review.d.ts +86 -0
- package/dist/models/review.d.ts.map +1 -0
- package/dist/models/review.js +5 -0
- package/dist/models/review.js.map +1 -0
- package/dist/models/sprint.d.ts +38 -0
- package/dist/models/sprint.d.ts.map +1 -0
- package/dist/models/sprint.js +4 -0
- package/dist/models/sprint.js.map +1 -0
- package/dist/models/task.d.ts +75 -0
- package/dist/models/task.d.ts.map +1 -0
- package/dist/models/task.js +4 -0
- package/dist/models/task.js.map +1 -0
- package/dist/models/validation.d.ts +25 -0
- package/dist/models/validation.d.ts.map +1 -0
- package/dist/models/validation.js +4 -0
- package/dist/models/validation.js.map +1 -0
- package/dist/services/audit-check-service.d.ts +16 -0
- package/dist/services/audit-check-service.d.ts.map +1 -0
- package/dist/services/audit-check-service.js +137 -0
- package/dist/services/audit-check-service.js.map +1 -0
- package/dist/services/audit-checks/dangling-relations-check.d.ts +7 -0
- package/dist/services/audit-checks/dangling-relations-check.d.ts.map +1 -0
- package/dist/services/audit-checks/dangling-relations-check.js +52 -0
- package/dist/services/audit-checks/dangling-relations-check.js.map +1 -0
- package/dist/services/audit-checks/duplicate-ids-check.d.ts +4 -0
- package/dist/services/audit-checks/duplicate-ids-check.d.ts.map +1 -0
- package/dist/services/audit-checks/duplicate-ids-check.js +49 -0
- package/dist/services/audit-checks/duplicate-ids-check.js.map +1 -0
- package/dist/services/audit-checks/fix-engine.d.ts +24 -0
- package/dist/services/audit-checks/fix-engine.d.ts.map +1 -0
- package/dist/services/audit-checks/fix-engine.js +114 -0
- package/dist/services/audit-checks/fix-engine.js.map +1 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.d.ts +9 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.d.ts.map +1 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.js +56 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.js.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.d.ts +10 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.d.ts.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.js +57 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.js.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.d.ts +9 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.d.ts.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.js +56 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.js.map +1 -0
- package/dist/services/audit-checks/inverse-consistency-check.d.ts +7 -0
- package/dist/services/audit-checks/inverse-consistency-check.d.ts.map +1 -0
- package/dist/services/audit-checks/inverse-consistency-check.js +54 -0
- package/dist/services/audit-checks/inverse-consistency-check.js.map +1 -0
- package/dist/services/audit-checks/mapping-check.d.ts +4 -0
- package/dist/services/audit-checks/mapping-check.d.ts.map +1 -0
- package/dist/services/audit-checks/mapping-check.js +74 -0
- package/dist/services/audit-checks/mapping-check.js.map +1 -0
- package/dist/services/audit-checks/orphan-documents-check.d.ts +9 -0
- package/dist/services/audit-checks/orphan-documents-check.d.ts.map +1 -0
- package/dist/services/audit-checks/orphan-documents-check.js +54 -0
- package/dist/services/audit-checks/orphan-documents-check.js.map +1 -0
- package/dist/services/audit-checks/orphan-entities-check.d.ts +4 -0
- package/dist/services/audit-checks/orphan-entities-check.d.ts.map +1 -0
- package/dist/services/audit-checks/orphan-entities-check.js +39 -0
- package/dist/services/audit-checks/orphan-entities-check.js.map +1 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.d.ts +9 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.d.ts.map +1 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.js +56 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.js.map +1 -0
- package/dist/services/audit-checks/sprint-consistency-check.d.ts +4 -0
- package/dist/services/audit-checks/sprint-consistency-check.d.ts.map +1 -0
- package/dist/services/audit-checks/sprint-consistency-check.js +80 -0
- package/dist/services/audit-checks/sprint-consistency-check.js.map +1 -0
- package/dist/services/audit-checks/src-filesystem-only-check.d.ts +10 -0
- package/dist/services/audit-checks/src-filesystem-only-check.d.ts.map +1 -0
- package/dist/services/audit-checks/src-filesystem-only-check.js +106 -0
- package/dist/services/audit-checks/src-filesystem-only-check.js.map +1 -0
- package/dist/services/audit-checks/ts-to-tc-check.d.ts +10 -0
- package/dist/services/audit-checks/ts-to-tc-check.d.ts.map +1 -0
- package/dist/services/audit-checks/ts-to-tc-check.js +58 -0
- package/dist/services/audit-checks/ts-to-tc-check.js.map +1 -0
- package/dist/services/audit-checks/type-mismatch-check.d.ts +4 -0
- package/dist/services/audit-checks/type-mismatch-check.d.ts.map +1 -0
- package/dist/services/audit-checks/type-mismatch-check.js +55 -0
- package/dist/services/audit-checks/type-mismatch-check.js.map +1 -0
- package/dist/services/audit-checks/types.d.ts +66 -0
- package/dist/services/audit-checks/types.d.ts.map +1 -0
- package/dist/services/audit-checks/types.js +30 -0
- package/dist/services/audit-checks/types.js.map +1 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.d.ts +9 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.d.ts.map +1 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.js +56 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.js.map +1 -0
- package/dist/services/doc-entity-mapping.d.ts +19 -0
- package/dist/services/doc-entity-mapping.d.ts.map +1 -0
- package/dist/services/doc-entity-mapping.js +35 -0
- package/dist/services/doc-entity-mapping.js.map +1 -0
- package/dist/services/document-service.d.ts +58 -0
- package/dist/services/document-service.d.ts.map +1 -0
- package/dist/services/document-service.js +409 -0
- package/dist/services/document-service.js.map +1 -0
- package/dist/services/graph-export-service.d.ts +12 -0
- package/dist/services/graph-export-service.d.ts.map +1 -0
- package/dist/services/graph-export-service.js +112 -0
- package/dist/services/graph-export-service.js.map +1 -0
- package/dist/services/graph-service.d.ts +21 -0
- package/dist/services/graph-service.d.ts.map +1 -0
- package/dist/services/graph-service.js +49 -0
- package/dist/services/graph-service.js.map +1 -0
- package/dist/services/graph-validation-service.d.ts +13 -0
- package/dist/services/graph-validation-service.d.ts.map +1 -0
- package/dist/services/graph-validation-service.js +171 -0
- package/dist/services/graph-validation-service.js.map +1 -0
- package/dist/services/project.d.ts +80 -0
- package/dist/services/project.d.ts.map +1 -0
- package/dist/services/project.js +256 -0
- package/dist/services/project.js.map +1 -0
- package/dist/services/review-service.d.ts +81 -0
- package/dist/services/review-service.d.ts.map +1 -0
- package/dist/services/review-service.js +242 -0
- package/dist/services/review-service.js.map +1 -0
- package/dist/services/schema-migration-service.d.ts +44 -0
- package/dist/services/schema-migration-service.d.ts.map +1 -0
- package/dist/services/schema-migration-service.js +894 -0
- package/dist/services/schema-migration-service.js.map +1 -0
- package/dist/services/sprint.d.ts +71 -0
- package/dist/services/sprint.d.ts.map +1 -0
- package/dist/services/sprint.js +238 -0
- package/dist/services/sprint.js.map +1 -0
- package/dist/services/stage-validator.d.ts +36 -0
- package/dist/services/stage-validator.d.ts.map +1 -0
- package/dist/services/stage-validator.js +78 -0
- package/dist/services/stage-validator.js.map +1 -0
- package/dist/services/task.d.ts +75 -0
- package/dist/services/task.d.ts.map +1 -0
- package/dist/services/task.js +487 -0
- package/dist/services/task.js.map +1 -0
- package/dist/services/validation.d.ts +24 -0
- package/dist/services/validation.d.ts.map +1 -0
- package/dist/services/validation.js +53 -0
- package/dist/services/validation.js.map +1 -0
- package/dist/state-machines/sprint-state.d.ts +25 -0
- package/dist/state-machines/sprint-state.d.ts.map +1 -0
- package/dist/state-machines/sprint-state.js +64 -0
- package/dist/state-machines/sprint-state.js.map +1 -0
- package/dist/state-machines/task-state.d.ts +31 -0
- package/dist/state-machines/task-state.d.ts.map +1 -0
- package/dist/state-machines/task-state.js +83 -0
- package/dist/state-machines/task-state.js.map +1 -0
- package/dist/utils/errors.d.ts +673 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +1447 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/format.d.ts +52 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +65 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/validators/board-integrity.d.ts +25 -0
- package/dist/validators/board-integrity.d.ts.map +1 -0
- package/dist/validators/board-integrity.js +102 -0
- package/dist/validators/board-integrity.js.map +1 -0
- package/dist/validators/board-shape.d.ts +13 -0
- package/dist/validators/board-shape.d.ts.map +1 -0
- package/dist/validators/board-shape.js +74 -0
- package/dist/validators/board-shape.js.map +1 -0
- package/dist/validators/owner-validator.d.ts +30 -0
- package/dist/validators/owner-validator.d.ts.map +1 -0
- package/dist/validators/owner-validator.js +70 -0
- package/dist/validators/owner-validator.js.map +1 -0
- package/dist/validators/spawn-legality.d.ts +19 -0
- package/dist/validators/spawn-legality.d.ts.map +1 -0
- package/dist/validators/spawn-legality.js +77 -0
- package/dist/validators/spawn-legality.js.map +1 -0
- package/dist/validators/state-field-checker.d.ts +8 -0
- package/dist/validators/state-field-checker.d.ts.map +1 -0
- package/dist/validators/state-field-checker.js +47 -0
- package/dist/validators/state-field-checker.js.map +1 -0
- package/dist/validators/state-field-recorder.d.ts +39 -0
- package/dist/validators/state-field-recorder.d.ts.map +1 -0
- package/dist/validators/state-field-recorder.js +62 -0
- package/dist/validators/state-field-recorder.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// CLI subcommands for entity group
|
|
3
|
+
// SAD-0003: MOD-009 Entity CRUD
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.createEntityGroup = createEntityGroup;
|
|
6
|
+
const commander_1 = require("commander");
|
|
7
|
+
const graph_service_1 = require("../services/graph-service");
|
|
8
|
+
const graph_service_2 = require("../services/graph-service");
|
|
9
|
+
const connection_1 = require("../db/connection");
|
|
10
|
+
const migration_1 = require("../db/migration");
|
|
11
|
+
const project_resolver_1 = require("./project-resolver");
|
|
12
|
+
const format_selector_1 = require("./format-selector");
|
|
13
|
+
function run(fn, optsOrCmd) {
|
|
14
|
+
try {
|
|
15
|
+
const opts = optsOrCmd instanceof commander_1.Command ? optsOrCmd.optsWithGlobals() : optsOrCmd;
|
|
16
|
+
console.log(fn(opts));
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
const opts = optsOrCmd instanceof commander_1.Command ? optsOrCmd.optsWithGlobals() : optsOrCmd;
|
|
20
|
+
const format = (0, format_selector_1.selectFormat)(opts);
|
|
21
|
+
console.error((0, format_selector_1.formatErrorOutput)(err instanceof Error ? err : new Error(String(err)), format));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function createEntityGroup() {
|
|
26
|
+
const group = new commander_1.Command('entity').description('Graph entity CRUD');
|
|
27
|
+
// entity create
|
|
28
|
+
group.command('create')
|
|
29
|
+
.description('Create a new entity')
|
|
30
|
+
.argument('<id>', 'Entity ID')
|
|
31
|
+
.requiredOption('--type <type>', 'Entity type name')
|
|
32
|
+
.option('--props <json>', 'Properties as JSON')
|
|
33
|
+
.action((id, _opts, cmd) => run((o) => handleCreate(id, o), cmd));
|
|
34
|
+
// entity get
|
|
35
|
+
group.command('get')
|
|
36
|
+
.description('Get an entity by ID')
|
|
37
|
+
.argument('<id>', 'Entity ID')
|
|
38
|
+
.action((id, _opts, cmd) => run((o) => handleGet(id, o), cmd));
|
|
39
|
+
// entity query
|
|
40
|
+
group.command('query')
|
|
41
|
+
.description('Query entities with optional filters')
|
|
42
|
+
.option('--type <type>', 'Filter by entity type')
|
|
43
|
+
.option('--limit <n>', 'Max results', '100')
|
|
44
|
+
.option('--offset <n>', 'Offset', '0')
|
|
45
|
+
.action((_opts, cmd) => run(handleQuery, cmd));
|
|
46
|
+
// entity update
|
|
47
|
+
group.command('update')
|
|
48
|
+
.description('Update entity properties (merge)')
|
|
49
|
+
.argument('<id>', 'Entity ID')
|
|
50
|
+
.requiredOption('--props <json>', 'Properties to merge (JSON)')
|
|
51
|
+
.action((id, _opts, cmd) => run((o) => handleUpdate(id, o), cmd));
|
|
52
|
+
// entity delete
|
|
53
|
+
group.command('delete')
|
|
54
|
+
.description('Delete an entity (cascades to relations)')
|
|
55
|
+
.argument('<id>', 'Entity ID')
|
|
56
|
+
.action((id, _opts, cmd) => run((o) => handleDelete(id, o), cmd));
|
|
57
|
+
return group;
|
|
58
|
+
}
|
|
59
|
+
function handleCreate(id, opts) {
|
|
60
|
+
const typeName = opts.type;
|
|
61
|
+
const props = opts.props ? JSON.parse(opts.props) : undefined;
|
|
62
|
+
const format = (0, format_selector_1.selectFormat)(opts);
|
|
63
|
+
const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
|
|
64
|
+
const db = (0, connection_1.openConnection)(resolved.dbPath);
|
|
65
|
+
try {
|
|
66
|
+
(0, migration_1.initializeSchema)(db);
|
|
67
|
+
(0, graph_service_2.ensureBuiltinSchemaInitialized)(db);
|
|
68
|
+
const entity = (0, graph_service_1.createEntity)(db, id, typeName, props);
|
|
69
|
+
return (0, format_selector_1.formatOutput)(entity, format);
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
db.close();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function handleGet(id, opts) {
|
|
76
|
+
const format = (0, format_selector_1.selectFormat)(opts);
|
|
77
|
+
const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
|
|
78
|
+
const db = (0, connection_1.openConnection)(resolved.dbPath);
|
|
79
|
+
try {
|
|
80
|
+
(0, migration_1.initializeSchema)(db);
|
|
81
|
+
(0, graph_service_2.ensureBuiltinSchemaInitialized)(db);
|
|
82
|
+
const entity = (0, graph_service_1.getEntity)(db, id);
|
|
83
|
+
return (0, format_selector_1.formatOutput)(entity, format);
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
db.close();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function handleQuery(opts) {
|
|
90
|
+
const format = (0, format_selector_1.selectFormat)(opts);
|
|
91
|
+
const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
|
|
92
|
+
const db = (0, connection_1.openConnection)(resolved.dbPath);
|
|
93
|
+
try {
|
|
94
|
+
(0, migration_1.initializeSchema)(db);
|
|
95
|
+
(0, graph_service_2.ensureBuiltinSchemaInitialized)(db);
|
|
96
|
+
const entities = (0, graph_service_1.queryEntities)(db, {
|
|
97
|
+
typeName: opts.type,
|
|
98
|
+
limit: parseInt(opts.limit, 10),
|
|
99
|
+
offset: parseInt(opts.offset, 10),
|
|
100
|
+
});
|
|
101
|
+
return (0, format_selector_1.formatOutput)(entities, format, 'entity');
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
db.close();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function handleUpdate(id, opts) {
|
|
108
|
+
const props = JSON.parse(opts.props);
|
|
109
|
+
const format = (0, format_selector_1.selectFormat)(opts);
|
|
110
|
+
const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
|
|
111
|
+
const db = (0, connection_1.openConnection)(resolved.dbPath);
|
|
112
|
+
try {
|
|
113
|
+
(0, migration_1.initializeSchema)(db);
|
|
114
|
+
(0, graph_service_2.ensureBuiltinSchemaInitialized)(db);
|
|
115
|
+
const entity = (0, graph_service_1.updateEntity)(db, id, props);
|
|
116
|
+
return (0, format_selector_1.formatOutput)(entity, format);
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
db.close();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function handleDelete(id, opts) {
|
|
123
|
+
const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
|
|
124
|
+
const db = (0, connection_1.openConnection)(resolved.dbPath);
|
|
125
|
+
try {
|
|
126
|
+
(0, migration_1.initializeSchema)(db);
|
|
127
|
+
(0, graph_service_2.ensureBuiltinSchemaInitialized)(db);
|
|
128
|
+
(0, graph_service_1.deleteEntity)(db, id);
|
|
129
|
+
return `Entity "${id}" deleted (cascaded to relations)`;
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
db.close();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/cli/entity.ts"],"names":[],"mappings":";AAAA,mCAAmC;AACnC,gCAAgC;;AAsBhC,8CAuCC;AA3DD,yCAAoC;AACpC,6DAA+G;AAC/G,6DAA2E;AAC3E,iDAAkD;AAClD,+CAAmD;AACnD,yDAAoD;AACpD,uDAAkF;AAElF,SAAS,GAAG,CAAC,EAA6C,EAAE,SAA4C;IACtG,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,YAAY,mBAAO,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,SAAoC,CAAC;QAC/G,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,SAAS,YAAY,mBAAO,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,SAAoC,CAAC;QAC/G,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,IAAI,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,IAAA,mCAAiB,EAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB;IAC/B,MAAM,KAAK,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAErE,gBAAgB;IAChB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;SACpB,WAAW,CAAC,qBAAqB,CAAC;SAClC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;SAC7B,cAAc,CAAC,eAAe,EAAE,kBAAkB,CAAC;SACnD,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;SAC9C,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAEpE,aAAa;IACb,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;SACjB,WAAW,CAAC,qBAAqB,CAAC;SAClC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;SAC7B,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAEjE,eAAe;IACf,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;SACnB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC;SAChD,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC;SAC3C,MAAM,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC;SACrC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IAEjD,gBAAgB;IAChB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;SACpB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;SAC7B,cAAc,CAAC,gBAAgB,EAAE,4BAA4B,CAAC;SAC9D,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAEpE,gBAAgB;IAChB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;SACpB,WAAW,CAAC,0CAA0C,CAAC;SACvD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;SAC7B,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAEpE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,EAAU,EAAE,IAA6B;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAc,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,IAAI,CAAC,CAAC;IAElC,MAAM,QAAQ,GAAG,IAAA,iCAAc,EAAC,IAAI,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,IAAA,2BAAc,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,IAAA,4BAAgB,EAAC,EAAE,CAAC,CAAC;QACrB,IAAA,8CAA8B,EAAC,EAAE,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAA,4BAAY,EAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,IAAA,8BAAY,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAU,EAAE,IAA6B;IAC1D,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAA,iCAAc,EAAC,IAAI,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,IAAA,2BAAc,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,IAAA,4BAAgB,EAAC,EAAE,CAAC,CAAC;QACrB,IAAA,8CAA8B,EAAC,EAAE,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACjC,OAAO,IAAA,8BAAY,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAA6B;IAChD,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAA,iCAAc,EAAC,IAAI,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,IAAA,2BAAc,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,IAAA,4BAAgB,EAAC,EAAE,CAAC,CAAC;QACrB,IAAA,8CAA8B,EAAC,EAAE,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAAC,EAAE,EAAE;YACjC,QAAQ,EAAE,IAAI,CAAC,IAA0B;YACzC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAe,EAAE,EAAE,CAAC;YACzC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAgB,EAAE,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO,IAAA,8BAAY,EAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAU,EAAE,IAA6B;IAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAA,iCAAc,EAAC,IAAI,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,IAAA,2BAAc,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,IAAA,4BAAgB,EAAC,EAAE,CAAC,CAAC;QACrB,IAAA,8CAA8B,EAAC,EAAE,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAA,4BAAY,EAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,IAAA,8BAAY,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAU,EAAE,IAA6B;IAC7D,MAAM,QAAQ,GAAG,IAAA,iCAAc,EAAC,IAAI,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,IAAA,2BAAc,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,IAAA,4BAAgB,EAAC,EAAE,CAAC,CAAC;QACrB,IAAA,8CAA8B,EAAC,EAAE,CAAC,CAAC;QACnC,IAAA,4BAAY,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACrB,OAAO,WAAW,EAAE,mCAAmC,CAAC;IAC1D,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { OutputFormat } from '../models/common';
|
|
2
|
+
import type { FormattableData } from './formatters/table';
|
|
3
|
+
/** Flags that determine which formatter to use */
|
|
4
|
+
export interface FormatFlags {
|
|
5
|
+
json?: boolean;
|
|
6
|
+
quiet?: boolean;
|
|
7
|
+
format?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolve the effective output format from CLI flags.
|
|
11
|
+
* --quiet takes precedence over --format and --json.
|
|
12
|
+
* --json takes precedence over --format (default).
|
|
13
|
+
*
|
|
14
|
+
* @param flags - CLI format flags
|
|
15
|
+
* @param isShowCommand - If true, default to 'markdown' and reject '--format table'
|
|
16
|
+
* @throws CliShowFormatError if isShowCommand and --format table is requested
|
|
17
|
+
* @throws CliFormatError if --format value is invalid
|
|
18
|
+
*/
|
|
19
|
+
export declare function selectFormat(flags: FormatFlags, isShowCommand?: boolean): OutputFormat;
|
|
20
|
+
/**
|
|
21
|
+
* Format data using the appropriate formatter.
|
|
22
|
+
*/
|
|
23
|
+
export declare function formatOutput(data: FormattableData, format: OutputFormat, entityType?: string, options?: {
|
|
24
|
+
parentEntityId?: string;
|
|
25
|
+
}): string;
|
|
26
|
+
/**
|
|
27
|
+
* Format an error for output.
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatErrorOutput(err: Error, format: OutputFormat): string;
|
|
30
|
+
//# sourceMappingURL=format-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-selector.d.ts","sourceRoot":"","sources":["../../src/cli/format-selector.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAO1D,kDAAkD;AAClD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,YAAY,CA8BtF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACpC,MAAM,CAYR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,KAAK,EACV,MAAM,EAAE,YAAY,GACnB,MAAM,CAuBR"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Format selector
|
|
3
|
+
// Selects the appropriate formatter based on --format and --quiet flags
|
|
4
|
+
// Implements AD-0013: Strategy Pattern for Output Formatters
|
|
5
|
+
// + FS-SS-007-0002 (format option), FS-SS-007-0003 (quiet option)
|
|
6
|
+
// + SAD-0010: MarkdownFormatter as default for show commands
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.selectFormat = selectFormat;
|
|
9
|
+
exports.formatOutput = formatOutput;
|
|
10
|
+
exports.formatErrorOutput = formatErrorOutput;
|
|
11
|
+
const table_1 = require("./formatters/table");
|
|
12
|
+
const json_1 = require("./formatters/json");
|
|
13
|
+
const quiet_1 = require("./formatters/quiet");
|
|
14
|
+
const markdown_1 = require("./formatters/markdown");
|
|
15
|
+
const errors_1 = require("../utils/errors");
|
|
16
|
+
/**
|
|
17
|
+
* Resolve the effective output format from CLI flags.
|
|
18
|
+
* --quiet takes precedence over --format and --json.
|
|
19
|
+
* --json takes precedence over --format (default).
|
|
20
|
+
*
|
|
21
|
+
* @param flags - CLI format flags
|
|
22
|
+
* @param isShowCommand - If true, default to 'markdown' and reject '--format table'
|
|
23
|
+
* @throws CliShowFormatError if isShowCommand and --format table is requested
|
|
24
|
+
* @throws CliFormatError if --format value is invalid
|
|
25
|
+
*/
|
|
26
|
+
function selectFormat(flags, isShowCommand) {
|
|
27
|
+
// --quiet takes precedence (FS-SS-007-0003)
|
|
28
|
+
if (flags.quiet) {
|
|
29
|
+
return 'quiet';
|
|
30
|
+
}
|
|
31
|
+
// --json flag (check before --format since format may have defaults)
|
|
32
|
+
if (flags.json) {
|
|
33
|
+
return 'json';
|
|
34
|
+
}
|
|
35
|
+
// --format flag
|
|
36
|
+
const fmt = flags.format ? flags.format.toLowerCase() : '';
|
|
37
|
+
if (fmt) {
|
|
38
|
+
// --format table is invalid for show commands (ERR-CLI-FORMAT)
|
|
39
|
+
if (isShowCommand && fmt === 'table') {
|
|
40
|
+
throw new errors_1.CliShowFormatError('table');
|
|
41
|
+
}
|
|
42
|
+
if (fmt === 'json')
|
|
43
|
+
return 'json';
|
|
44
|
+
if (fmt === 'table')
|
|
45
|
+
return 'table';
|
|
46
|
+
if (fmt === 'markdown')
|
|
47
|
+
return 'markdown';
|
|
48
|
+
if (fmt === 'quiet')
|
|
49
|
+
return 'quiet';
|
|
50
|
+
throw new errors_1.CliFormatError(fmt);
|
|
51
|
+
}
|
|
52
|
+
// Default: markdown for show commands, table for list commands
|
|
53
|
+
if (isShowCommand) {
|
|
54
|
+
return 'markdown';
|
|
55
|
+
}
|
|
56
|
+
return 'table';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Format data using the appropriate formatter.
|
|
60
|
+
*/
|
|
61
|
+
function formatOutput(data, format, entityType, options) {
|
|
62
|
+
switch (format) {
|
|
63
|
+
case 'json':
|
|
64
|
+
return (0, json_1.formatAsJson)(data, entityType);
|
|
65
|
+
case 'quiet':
|
|
66
|
+
return (0, quiet_1.formatAsQuiet)(data, entityType);
|
|
67
|
+
case 'markdown':
|
|
68
|
+
return (0, markdown_1.formatAsMarkdown)(data, entityType);
|
|
69
|
+
case 'table':
|
|
70
|
+
default:
|
|
71
|
+
return (0, table_1.formatAsTable)(data, entityType, options);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Format an error for output.
|
|
76
|
+
*/
|
|
77
|
+
function formatErrorOutput(err, format) {
|
|
78
|
+
switch (format) {
|
|
79
|
+
case 'json':
|
|
80
|
+
return JSON.stringify({
|
|
81
|
+
error: {
|
|
82
|
+
name: err.name,
|
|
83
|
+
message: err.message,
|
|
84
|
+
code: 'code' in err ? err.code : undefined,
|
|
85
|
+
},
|
|
86
|
+
}, null, 2);
|
|
87
|
+
case 'quiet':
|
|
88
|
+
return err.message;
|
|
89
|
+
case 'markdown':
|
|
90
|
+
case 'table':
|
|
91
|
+
default:
|
|
92
|
+
if ('code' in err) {
|
|
93
|
+
const code = err.code;
|
|
94
|
+
// Strip embedded code prefix from message if present (e.g. "ERR-TASK-001: Task not found" → "Task not found")
|
|
95
|
+
const msg = err.message.replace(/^ERR-[A-Z]+-[0-9]+:\s*/, '');
|
|
96
|
+
return `Error ${code}: ${msg}`;
|
|
97
|
+
}
|
|
98
|
+
return `Error: ${err.message}`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=format-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-selector.js","sourceRoot":"","sources":["../../src/cli/format-selector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AuditReport } from '../../services/audit-checks/types';
|
|
2
|
+
/** Format selection priority: --format flag > file extension > default 'terminal' */
|
|
3
|
+
export declare function resolveFormat(formatOverride?: string, reportFile?: string): 'terminal' | 'json' | 'markdown';
|
|
4
|
+
export declare class AuditReportFormatter {
|
|
5
|
+
/**
|
|
6
|
+
* Format an audit report and optionally write to file.
|
|
7
|
+
* @param report - The audit report
|
|
8
|
+
* @param format - Output format ('terminal', 'json', 'markdown')
|
|
9
|
+
* @param color - Whether to use ANSI colors (terminal only)
|
|
10
|
+
* @returns Formatted string
|
|
11
|
+
*/
|
|
12
|
+
format(report: AuditReport, format: 'terminal' | 'json' | 'markdown', color?: boolean): string;
|
|
13
|
+
/**
|
|
14
|
+
* Format as JSON (FS-SS-023-0009).
|
|
15
|
+
*/
|
|
16
|
+
private formatJson;
|
|
17
|
+
/**
|
|
18
|
+
* Format as terminal color-coded table (FS-SS-023-0007).
|
|
19
|
+
*/
|
|
20
|
+
private formatTerminal;
|
|
21
|
+
/**
|
|
22
|
+
* Format as Markdown (FS-SS-023-0010).
|
|
23
|
+
*/
|
|
24
|
+
private formatMarkdown;
|
|
25
|
+
/**
|
|
26
|
+
* Write report to file.
|
|
27
|
+
* @throws AuditReportFileError on write failure
|
|
28
|
+
*/
|
|
29
|
+
writeToFile(report: AuditReport, filePath: string, formatOverride?: string): void;
|
|
30
|
+
private statusIcon;
|
|
31
|
+
private statusEmoji;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=audit-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-formatter.d.ts","sourceRoot":"","sources":["../../../src/cli/formatters/audit-formatter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,mCAAmC,CAAC;AAIjF,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAY5G;AAED,qBAAa,oBAAoB;IAC/B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,EAAE,KAAK,GAAE,OAAc,GAAG,MAAM;IAYpG;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAmDtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwDtB;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAYjF,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,WAAW;CAGpB"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// AuditReportFormatter: formats audit reports for terminal/JSON/Markdown
|
|
3
|
+
// FS-SS-023-0007: terminal table with color-coded pass/fail/skip
|
|
4
|
+
// FS-SS-023-0009: JSON structured output
|
|
5
|
+
// FS-SS-023-0010: Markdown documented sections
|
|
6
|
+
// MOD-023: CLI Audit Command
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.AuditReportFormatter = void 0;
|
|
9
|
+
exports.resolveFormat = resolveFormat;
|
|
10
|
+
const errors_1 = require("../../utils/errors");
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
/** Format selection priority: --format flag > file extension > default 'terminal' */
|
|
13
|
+
function resolveFormat(formatOverride, reportFile) {
|
|
14
|
+
if (formatOverride) {
|
|
15
|
+
const fmt = formatOverride.toLowerCase();
|
|
16
|
+
if (fmt === 'json')
|
|
17
|
+
return 'json';
|
|
18
|
+
if (fmt === 'markdown')
|
|
19
|
+
return 'markdown';
|
|
20
|
+
if (fmt === 'terminal' || fmt === 'table')
|
|
21
|
+
return 'terminal';
|
|
22
|
+
}
|
|
23
|
+
if (reportFile) {
|
|
24
|
+
if (reportFile.endsWith('.json'))
|
|
25
|
+
return 'json';
|
|
26
|
+
if (reportFile.endsWith('.md'))
|
|
27
|
+
return 'markdown';
|
|
28
|
+
}
|
|
29
|
+
return 'terminal';
|
|
30
|
+
}
|
|
31
|
+
class AuditReportFormatter {
|
|
32
|
+
/**
|
|
33
|
+
* Format an audit report and optionally write to file.
|
|
34
|
+
* @param report - The audit report
|
|
35
|
+
* @param format - Output format ('terminal', 'json', 'markdown')
|
|
36
|
+
* @param color - Whether to use ANSI colors (terminal only)
|
|
37
|
+
* @returns Formatted string
|
|
38
|
+
*/
|
|
39
|
+
format(report, format, color = true) {
|
|
40
|
+
switch (format) {
|
|
41
|
+
case 'json':
|
|
42
|
+
return this.formatJson(report);
|
|
43
|
+
case 'markdown':
|
|
44
|
+
return this.formatMarkdown(report);
|
|
45
|
+
case 'terminal':
|
|
46
|
+
default:
|
|
47
|
+
return this.formatTerminal(report, color);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Format as JSON (FS-SS-023-0009).
|
|
52
|
+
*/
|
|
53
|
+
formatJson(report) {
|
|
54
|
+
return JSON.stringify(report, null, 2);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Format as terminal color-coded table (FS-SS-023-0007).
|
|
58
|
+
*/
|
|
59
|
+
formatTerminal(report, color) {
|
|
60
|
+
const lines = [];
|
|
61
|
+
// Header
|
|
62
|
+
lines.push('');
|
|
63
|
+
lines.push('=== Audit Report ===');
|
|
64
|
+
lines.push(`Generated: ${report.generatedAt}`);
|
|
65
|
+
if (report.sprintFilter) {
|
|
66
|
+
lines.push(`Sprint: ${report.sprintFilter}`);
|
|
67
|
+
}
|
|
68
|
+
lines.push('');
|
|
69
|
+
// Per-check results
|
|
70
|
+
for (const result of report.checks) {
|
|
71
|
+
const icon = this.statusIcon(result.status, color);
|
|
72
|
+
const name = result.checkName.padEnd(22);
|
|
73
|
+
const status = result.status.padEnd(6);
|
|
74
|
+
lines.push(`${icon} ${name} ${status} ${result.summary}`);
|
|
75
|
+
// Show issues if any
|
|
76
|
+
if (result.issues.length > 0) {
|
|
77
|
+
for (const issue of result.issues) {
|
|
78
|
+
const severityTag = issue.severity === 'warning' ? ' [WARNING]' : issue.severity === 'info' ? ' [INFO]' : '';
|
|
79
|
+
const detailLines = issue.detail.split('\n');
|
|
80
|
+
lines.push(` ${detailLines[0]}${severityTag}`);
|
|
81
|
+
for (let i = 1; i < detailLines.length; i++) {
|
|
82
|
+
lines.push(` ${detailLines[i]}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (result.fixApplied) {
|
|
87
|
+
lines.push(` → ${result.fixApplied}`);
|
|
88
|
+
}
|
|
89
|
+
// Show fixCount per check when defined (SAD-0036: --fix-dry-run)
|
|
90
|
+
if (result.fixCount !== undefined && result.fixCount > 0) {
|
|
91
|
+
lines.push(` → [dry-run] ${result.fixCount} item(s) would be fixed for this check`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
lines.push('');
|
|
95
|
+
const passed = report.checks.filter(c => c.status === 'PASS').length;
|
|
96
|
+
const failed = report.checks.filter(c => c.status === 'FAIL').length;
|
|
97
|
+
const skipped = report.checks.filter(c => c.status === 'SKIP').length;
|
|
98
|
+
lines.push(`Summary: ${report.checks.length} checks run | ${passed} passed | ${skipped} skipped | ${failed} failed | ${report.fixApplied ? 'fixes applied' : '0 fixed'}`);
|
|
99
|
+
lines.push(`Exit: ${report.exitCode}`);
|
|
100
|
+
return lines.join('\n');
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Format as Markdown (FS-SS-023-0010).
|
|
104
|
+
*/
|
|
105
|
+
formatMarkdown(report) {
|
|
106
|
+
const lines = [];
|
|
107
|
+
lines.push('# Audit Report');
|
|
108
|
+
lines.push('');
|
|
109
|
+
lines.push(`**Generated:** ${report.generatedAt}`);
|
|
110
|
+
if (report.sprintFilter) {
|
|
111
|
+
lines.push(`**Sprint:** ${report.sprintFilter}`);
|
|
112
|
+
}
|
|
113
|
+
lines.push('');
|
|
114
|
+
// Summary table
|
|
115
|
+
const passed = report.checks.filter(c => c.status === 'PASS').length;
|
|
116
|
+
const failed = report.checks.filter(c => c.status === 'FAIL').length;
|
|
117
|
+
const skipped = report.checks.filter(c => c.status === 'SKIP').length;
|
|
118
|
+
lines.push('## Summary');
|
|
119
|
+
lines.push('');
|
|
120
|
+
lines.push(`| Checks Run | Passed | Skipped | Failed | Fixes Applied |`);
|
|
121
|
+
lines.push(`|------------|--------|---------|--------|---------------|`);
|
|
122
|
+
lines.push(`| ${report.checks.length} | ${passed} | ${skipped} | ${failed} | ${report.fixApplied ? 'Yes' : 'No'} |`);
|
|
123
|
+
lines.push('');
|
|
124
|
+
// Per-check sections
|
|
125
|
+
for (const result of report.checks) {
|
|
126
|
+
lines.push(`## ${this.statusEmoji(result.status)} ${result.checkName} — ${result.status}`);
|
|
127
|
+
lines.push('');
|
|
128
|
+
lines.push(`**Summary:** ${result.summary}`);
|
|
129
|
+
if (result.issues.length > 0) {
|
|
130
|
+
lines.push('');
|
|
131
|
+
lines.push('### Affected Items');
|
|
132
|
+
lines.push('');
|
|
133
|
+
for (const issue of sortIssues(result.issues)) {
|
|
134
|
+
lines.push(`- ${formatMarkdownIssue(issue)}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (result.fixApplied) {
|
|
138
|
+
lines.push('');
|
|
139
|
+
lines.push(`**Fixes:** ${result.fixApplied}`);
|
|
140
|
+
}
|
|
141
|
+
if (result.fixCount !== undefined && result.fixCount > 0) {
|
|
142
|
+
lines.push('');
|
|
143
|
+
lines.push(`**Would Fix:** ${result.fixCount} item(s) would be fixed for this check`);
|
|
144
|
+
}
|
|
145
|
+
lines.push('');
|
|
146
|
+
}
|
|
147
|
+
lines.push('---');
|
|
148
|
+
lines.push(`**Exit Code:** ${report.exitCode}`);
|
|
149
|
+
return lines.join('\n');
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Write report to file.
|
|
153
|
+
* @throws AuditReportFileError on write failure
|
|
154
|
+
*/
|
|
155
|
+
writeToFile(report, filePath, formatOverride) {
|
|
156
|
+
const format = resolveFormat(formatOverride, filePath);
|
|
157
|
+
const content = this.format(report, format, false);
|
|
158
|
+
try {
|
|
159
|
+
(0, fs_1.writeFileSync)(filePath, content, 'utf-8');
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
163
|
+
throw new errors_1.AuditReportFileError(filePath, message);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
statusIcon(status, color) {
|
|
167
|
+
if (!color) {
|
|
168
|
+
return status === 'PASS' ? '✓' : status === 'FAIL' ? '✗' : '⚠';
|
|
169
|
+
}
|
|
170
|
+
return status === 'PASS' ? '\x1b[32m✓\x1b[0m' : status === 'FAIL' ? '\x1b[31m✗\x1b[0m' : '\x1b[33m⚠\x1b[0m';
|
|
171
|
+
}
|
|
172
|
+
statusEmoji(status) {
|
|
173
|
+
return status === 'PASS' ? '✅' : status === 'FAIL' ? '❌' : '⚠️';
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.AuditReportFormatter = AuditReportFormatter;
|
|
177
|
+
/**
|
|
178
|
+
* Sort issues by ID for deterministic output (NFS-SS-023-0002).
|
|
179
|
+
*/
|
|
180
|
+
function sortIssues(issues) {
|
|
181
|
+
return [...issues].sort((a, b) => {
|
|
182
|
+
const aId = a.entityId ?? a.docId ?? String(a.relationId ?? '');
|
|
183
|
+
const bId = b.entityId ?? b.docId ?? String(b.relationId ?? '');
|
|
184
|
+
return aId.localeCompare(bId);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
function formatMarkdownIssue(issue) {
|
|
188
|
+
const idRef = issue.entityId
|
|
189
|
+
? `Entity \`${issue.entityId}\``
|
|
190
|
+
: issue.docId
|
|
191
|
+
? `Document \`${issue.docId}\``
|
|
192
|
+
: issue.relationId
|
|
193
|
+
? `Relation \`${issue.relationId}\``
|
|
194
|
+
: '';
|
|
195
|
+
const typeInfo = issue.entityTypeFound && issue.entityTypeExpected
|
|
196
|
+
? ` (found: \`${issue.entityTypeFound}\`, expected: \`${issue.entityTypeExpected}\`)`
|
|
197
|
+
: issue.docType
|
|
198
|
+
? ` (type: \`${issue.docType}\`)`
|
|
199
|
+
: '';
|
|
200
|
+
const fixable = issue.fixable ? ' [fixable]' : '';
|
|
201
|
+
const severity = issue.severity === 'warning' ? ' **⚠ warning**' : issue.severity === 'info' ? ' ℹ️ info' : '';
|
|
202
|
+
return `${idRef}${typeInfo} — ${issue.issueId}${severity}${fixable}`;
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=audit-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-formatter.js","sourceRoot":"","sources":["../../../src/cli/formatters/audit-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FormattableData } from './table';
|
|
2
|
+
/**
|
|
3
|
+
* Format structured data as JSON.
|
|
4
|
+
*
|
|
5
|
+
* @param data - The data to format
|
|
6
|
+
* @param entityType - Optional entity type hint for the JSON wrapper key
|
|
7
|
+
* @returns Formatted JSON string
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatAsJson(data: FormattableData, entityType?: string): string;
|
|
10
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/cli/formatters/json.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,eAAe,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAmBR"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// JSON formatter
|
|
3
|
+
// Renders structured data as valid JSON documents
|
|
4
|
+
// Implements AD-0013: Strategy Pattern for Output Formatters
|
|
5
|
+
// + FS-SS-007-0006 (JSON output formatter)
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.formatAsJson = formatAsJson;
|
|
8
|
+
/**
|
|
9
|
+
* Format structured data as JSON.
|
|
10
|
+
*
|
|
11
|
+
* @param data - The data to format
|
|
12
|
+
* @param entityType - Optional entity type hint for the JSON wrapper key
|
|
13
|
+
* @returns Formatted JSON string
|
|
14
|
+
*/
|
|
15
|
+
function formatAsJson(data, entityType) {
|
|
16
|
+
if (data === null || data === undefined) {
|
|
17
|
+
return JSON.stringify({ result: null });
|
|
18
|
+
}
|
|
19
|
+
if (typeof data === 'string') {
|
|
20
|
+
return JSON.stringify({ result: data });
|
|
21
|
+
}
|
|
22
|
+
if (entityType) {
|
|
23
|
+
return JSON.stringify({ [entityType]: data }, null, 2);
|
|
24
|
+
}
|
|
25
|
+
// Wrap array or object in a result key
|
|
26
|
+
if (Array.isArray(data)) {
|
|
27
|
+
return JSON.stringify({ results: data, count: data.length }, null, 2);
|
|
28
|
+
}
|
|
29
|
+
return JSON.stringify({ result: data }, null, 2);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/cli/formatters/json.ts"],"names":[],"mappings":";AAAA,iBAAiB;AACjB,kDAAkD;AAClD,6DAA6D;AAC7D,2CAA2C;;AAW3C,oCAsBC;AA7BD;;;;;;GAMG;AACH,SAAgB,YAAY,CAC1B,IAAqB,EACrB,UAAmB;IAEnB,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,uCAAuC;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FormattableData } from './table';
|
|
2
|
+
/**
|
|
3
|
+
* Format structured entity data as Markdown, dispatching on entity type.
|
|
4
|
+
* All five entity show commands share this formatter.
|
|
5
|
+
*
|
|
6
|
+
* @param data - Entity data to format
|
|
7
|
+
* @param entityType - Entity type hint ('document', 'review', 'task', 'test-report', 'lesson')
|
|
8
|
+
* @returns Formatted Markdown string
|
|
9
|
+
* @throws CortexError if entityType is not one of the five supported types
|
|
10
|
+
*/
|
|
11
|
+
export declare function formatAsMarkdown(data: FormattableData, entityType?: string): string;
|
|
12
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/cli/formatters/markdown.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAqT/C;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,eAAe,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAyCR"}
|