@mimir-labs/core 0.4.0 → 0.6.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/README.md +13 -2
- package/dist/implementation/contracts/descriptor.d.ts +7 -1
- package/dist/implementation/contracts/resource.d.ts +93 -0
- package/dist/implementation/descriptors/descriptor-repository.js +33 -14
- package/dist/implementation/descriptors/descriptor-repository.js.map +1 -1
- package/dist/implementation/generation/generate-service.d.ts +4 -0
- package/dist/implementation/generation/generate-service.js +14 -4
- package/dist/implementation/generation/generate-service.js.map +1 -1
- package/dist/implementation/generation/types.d.ts +1 -0
- package/dist/implementation/io/fs.d.ts +1 -0
- package/dist/implementation/io/fs.js +13 -0
- package/dist/implementation/io/fs.js.map +1 -1
- package/dist/implementation/knowledge/knowledge-engine.d.ts +8 -0
- package/dist/implementation/knowledge/knowledge-engine.js +40 -0
- package/dist/implementation/knowledge/knowledge-engine.js.map +1 -0
- package/dist/implementation/knowledge/knowledge-graph.d.ts +12 -0
- package/dist/implementation/knowledge/knowledge-graph.js +34 -0
- package/dist/implementation/knowledge/knowledge-graph.js.map +1 -0
- package/dist/implementation/knowledge/model.d.ts +44 -0
- package/dist/implementation/knowledge/model.js +3 -0
- package/dist/implementation/knowledge/model.js.map +1 -0
- package/dist/implementation/knowledge/persistence-policy.d.ts +21 -0
- package/dist/implementation/knowledge/persistence-policy.js +51 -0
- package/dist/implementation/knowledge/persistence-policy.js.map +1 -0
- package/dist/implementation/knowledge/providers.d.ts +36 -0
- package/dist/implementation/knowledge/providers.js +150 -0
- package/dist/implementation/knowledge/providers.js.map +1 -0
- package/dist/implementation/resource-discovery/design-token-extractor.d.ts +3 -0
- package/dist/implementation/resource-discovery/design-token-extractor.js +78 -0
- package/dist/implementation/resource-discovery/design-token-extractor.js.map +1 -0
- package/dist/implementation/resource-discovery/react-pattern-extractor.d.ts +3 -0
- package/dist/implementation/resource-discovery/react-pattern-extractor.js +49 -0
- package/dist/implementation/resource-discovery/react-pattern-extractor.js.map +1 -0
- package/dist/implementation/resource-discovery/relationship-extractor.d.ts +3 -0
- package/dist/implementation/resource-discovery/relationship-extractor.js +80 -0
- package/dist/implementation/resource-discovery/relationship-extractor.js.map +1 -0
- package/dist/implementation/resource-discovery/semantic-resource-classifier.d.ts +23 -0
- package/dist/implementation/resource-discovery/semantic-resource-classifier.js +267 -0
- package/dist/implementation/resource-discovery/semantic-resource-classifier.js.map +1 -0
- package/dist/implementation/resource-discovery/storybook-extractor.d.ts +2 -1
- package/dist/implementation/resource-discovery/storybook-extractor.js +83 -44
- package/dist/implementation/resource-discovery/storybook-extractor.js.map +1 -1
- package/dist/implementation/resource-discovery/typescript-analysis.d.ts +7 -0
- package/dist/implementation/resource-discovery/typescript-analysis.js +42 -0
- package/dist/implementation/resource-discovery/typescript-analysis.js.map +1 -0
- package/dist/implementation/resource-discovery/typescript-extractor.d.ts +8 -2
- package/dist/implementation/resource-discovery/typescript-extractor.js +166 -108
- package/dist/implementation/resource-discovery/typescript-extractor.js.map +1 -1
- package/dist/implementation/resource-discovery/typescript-public-api-extractor.d.ts +11 -0
- package/dist/implementation/resource-discovery/typescript-public-api-extractor.js +439 -0
- package/dist/implementation/resource-discovery/typescript-public-api-extractor.js.map +1 -0
- package/dist/implementation/resource-identity.d.ts +1 -0
- package/dist/implementation/resource-identity.js +7 -0
- package/dist/implementation/resource-identity.js.map +1 -1
- package/dist/implementation/services/authoring-service.js +251 -140
- package/dist/implementation/services/authoring-service.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# @mimir-labs/core
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Software Knowledge Engine and reusable services for the Mimir CLI.
|
|
4
|
+
|
|
5
|
+
Mimir discovers software facts through Knowledge Providers, organizes them in
|
|
6
|
+
an in-memory Knowledge Graph, and applies an explicit Persistence Policy before
|
|
7
|
+
`author` writes versioned descriptors. `generate` remains independent: it
|
|
8
|
+
compiles persistent descriptor knowledge into APS without consulting authoring
|
|
9
|
+
providers.
|
|
4
10
|
|
|
5
11
|
Public workflows include discovery, authoring, generation, validation,
|
|
6
12
|
governance, context generation, synchronization, initialization, and doctor
|
|
@@ -8,4 +14,9 @@ assessment. Author Knowledge sources live in versioned `*.mimir.yaml`
|
|
|
8
14
|
descriptors maintained by `mimir author`; generated APS artifacts remain under
|
|
9
15
|
`dist/aps`.
|
|
10
16
|
|
|
11
|
-
|
|
17
|
+
The knowledge model is intentionally separate from APS. Knowledge extraction
|
|
18
|
+
can evolve without expanding the descriptor or protocol contract with every
|
|
19
|
+
derived fact.
|
|
20
|
+
|
|
21
|
+
See [ARCHITECTURE.md](./ARCHITECTURE.md) for the knowledge pipeline and
|
|
22
|
+
[EXTENSIONS.md](./EXTENSIONS.md) for public extension guidance.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExtractedProp } from "./resource";
|
|
1
|
+
import type { ExtractedExample, ExtractedProp, ExtractedReactPatterns, ExtractedRelationship, ExtractionMetadata, PublicComponentApi, ResourceClassification } from "./resource";
|
|
2
2
|
export type MimirResourceDescriptor = {
|
|
3
3
|
kind: string;
|
|
4
4
|
name: string;
|
|
@@ -10,8 +10,14 @@ export type MimirResourceDescriptor = {
|
|
|
10
10
|
public?: boolean;
|
|
11
11
|
};
|
|
12
12
|
props: Record<string, ExtractedProp>;
|
|
13
|
+
api?: PublicComponentApi;
|
|
14
|
+
classification?: ResourceClassification;
|
|
13
15
|
variants: string[];
|
|
14
16
|
storyFiles: string[];
|
|
17
|
+
relationships?: ExtractedRelationship[];
|
|
18
|
+
examples?: ExtractedExample[];
|
|
19
|
+
react?: ExtractedReactPatterns;
|
|
20
|
+
ai?: ExtractionMetadata;
|
|
15
21
|
};
|
|
16
22
|
human: {
|
|
17
23
|
description: string;
|
|
@@ -3,6 +3,54 @@ export type ExtractedProp = {
|
|
|
3
3
|
type?: string;
|
|
4
4
|
required?: boolean;
|
|
5
5
|
};
|
|
6
|
+
export type SemanticResourceKind = "component" | "hook" | "context" | "provider" | "template" | "icon" | "page" | "utility" | "theme" | "token" | "configuration" | "story" | "internal" | "unknown";
|
|
7
|
+
export type ResourceClassification = {
|
|
8
|
+
kind: SemanticResourceKind;
|
|
9
|
+
confidence: number;
|
|
10
|
+
reasons: string[];
|
|
11
|
+
generateDescriptor: boolean;
|
|
12
|
+
};
|
|
13
|
+
export type PublicApiTypeDescriptor = {
|
|
14
|
+
kind: "primitive";
|
|
15
|
+
name: string;
|
|
16
|
+
} | {
|
|
17
|
+
kind: "literal";
|
|
18
|
+
value: string | number | boolean | null;
|
|
19
|
+
} | {
|
|
20
|
+
kind: "union";
|
|
21
|
+
values: Array<string | number | boolean | null>;
|
|
22
|
+
display: string;
|
|
23
|
+
} | {
|
|
24
|
+
kind: "enum";
|
|
25
|
+
name: string;
|
|
26
|
+
members: Array<string | number>;
|
|
27
|
+
display: string;
|
|
28
|
+
} | {
|
|
29
|
+
kind: "reference";
|
|
30
|
+
name: string;
|
|
31
|
+
display: string;
|
|
32
|
+
} | {
|
|
33
|
+
kind: "unknown";
|
|
34
|
+
display: string;
|
|
35
|
+
};
|
|
36
|
+
export type PublicApiProp = {
|
|
37
|
+
name: string;
|
|
38
|
+
type: PublicApiTypeDescriptor;
|
|
39
|
+
required: boolean;
|
|
40
|
+
inherited: boolean;
|
|
41
|
+
inheritedFrom?: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
deprecated?: string | boolean;
|
|
44
|
+
default?: string | number | boolean | null;
|
|
45
|
+
remarks?: string;
|
|
46
|
+
};
|
|
47
|
+
export type PublicComponentApi = {
|
|
48
|
+
props: PublicApiProp[];
|
|
49
|
+
events: unknown[];
|
|
50
|
+
slots: unknown[];
|
|
51
|
+
methods: unknown[];
|
|
52
|
+
refs: unknown[];
|
|
53
|
+
};
|
|
6
54
|
export type ExtractedComponentFact = {
|
|
7
55
|
name: string;
|
|
8
56
|
filePath: string;
|
|
@@ -10,7 +58,52 @@ export type ExtractedComponentFact = {
|
|
|
10
58
|
packageName: string;
|
|
11
59
|
props: Record<string, ExtractedProp>;
|
|
12
60
|
};
|
|
61
|
+
export type DiscoveredResourceFact = {
|
|
62
|
+
name: string;
|
|
63
|
+
filePath: string;
|
|
64
|
+
importName: string;
|
|
65
|
+
packageName: string;
|
|
66
|
+
classification: ResourceClassification;
|
|
67
|
+
};
|
|
13
68
|
export type StorybookFacts = {
|
|
14
69
|
variantsByComponent: Record<string, string[]>;
|
|
15
70
|
storyFilesByComponent: Record<string, string[]>;
|
|
71
|
+
examplesByComponent: Record<string, ExtractedExample[]>;
|
|
72
|
+
};
|
|
73
|
+
export type RelationshipType = "imports" | "exports" | "uses" | "composes" | "dependsOn" | "provides" | "consumes" | "references";
|
|
74
|
+
export type ExtractedRelationship = {
|
|
75
|
+
type: RelationshipType;
|
|
76
|
+
target: string;
|
|
77
|
+
confidence: number;
|
|
78
|
+
};
|
|
79
|
+
export type StaticValue = string | number | boolean | null | StaticValue[] | {
|
|
80
|
+
[key: string]: StaticValue;
|
|
81
|
+
};
|
|
82
|
+
export type ExtractedExample = {
|
|
83
|
+
name: string;
|
|
84
|
+
source: {
|
|
85
|
+
file: string;
|
|
86
|
+
};
|
|
87
|
+
story: string;
|
|
88
|
+
args?: Record<string, StaticValue>;
|
|
89
|
+
decorators?: string[];
|
|
90
|
+
play?: boolean;
|
|
91
|
+
};
|
|
92
|
+
export type DesignTokenCategory = "colors" | "spacing" | "typography" | "radius" | "shadows" | "zIndex" | "breakpoints";
|
|
93
|
+
export type ExtractedDesignTokens = Partial<Record<DesignTokenCategory, Record<string, StaticValue>>>;
|
|
94
|
+
export type ExtractedReactPatterns = {
|
|
95
|
+
forwardRef: boolean;
|
|
96
|
+
memo: boolean;
|
|
97
|
+
lazy: boolean;
|
|
98
|
+
suspense: boolean;
|
|
99
|
+
portal: boolean;
|
|
100
|
+
errorBoundary: boolean;
|
|
101
|
+
context: boolean;
|
|
102
|
+
provider: boolean;
|
|
103
|
+
customHook: boolean;
|
|
104
|
+
};
|
|
105
|
+
export type ExtractionMetadata = {
|
|
106
|
+
confidence?: number;
|
|
107
|
+
extractedAt?: string;
|
|
108
|
+
extractorVersion?: string;
|
|
16
109
|
};
|
|
@@ -52,20 +52,20 @@ function readPropsMap(value, field, sourceRef) {
|
|
|
52
52
|
}
|
|
53
53
|
return props;
|
|
54
54
|
}
|
|
55
|
-
function readResource(value, sourceRef,
|
|
55
|
+
function readResource(value, sourceRef, resourcePath) {
|
|
56
56
|
if (!(0, json_1.isObject)(value)) {
|
|
57
|
-
throw new Error(`${sourceRef}:
|
|
57
|
+
throw new Error(`${sourceRef}: ${resourcePath} must be an object`);
|
|
58
58
|
}
|
|
59
59
|
const resource = value;
|
|
60
60
|
if (typeof resource.kind !== "string" || resource.kind.trim() === "") {
|
|
61
|
-
throw new Error(`${sourceRef}:
|
|
61
|
+
throw new Error(`${sourceRef}: ${resourcePath}.kind must be a non-empty string`);
|
|
62
62
|
}
|
|
63
63
|
if (typeof resource.name !== "string" || resource.name.trim() === "") {
|
|
64
|
-
throw new Error(`${sourceRef}:
|
|
64
|
+
throw new Error(`${sourceRef}: ${resourcePath}.name must be a non-empty string`);
|
|
65
65
|
}
|
|
66
66
|
const kind = resource.kind.trim().toLowerCase();
|
|
67
67
|
if (!SUPPORTED_KINDS.has(kind)) {
|
|
68
|
-
throw new Error(`${sourceRef}:
|
|
68
|
+
throw new Error(`${sourceRef}: ${resourcePath}.kind '${resource.kind}' is not supported by the descriptor contract`);
|
|
69
69
|
}
|
|
70
70
|
const autoNode = (0, json_1.isObject)(resource.auto) ? resource.auto : {};
|
|
71
71
|
const humanNode = (0, json_1.isObject)(resource.human) ? resource.human : {};
|
|
@@ -91,8 +91,14 @@ function readResource(value, sourceRef, index) {
|
|
|
91
91
|
auto: {
|
|
92
92
|
source,
|
|
93
93
|
props,
|
|
94
|
+
api: (0, json_1.isObject)(autoNode.api) ? autoNode.api : undefined,
|
|
95
|
+
classification: (0, json_1.isObject)(autoNode.classification) ? autoNode.classification : undefined,
|
|
94
96
|
variants,
|
|
95
|
-
storyFiles
|
|
97
|
+
storyFiles,
|
|
98
|
+
relationships: Array.isArray(autoNode.relationships) ? autoNode.relationships : undefined,
|
|
99
|
+
examples: Array.isArray(autoNode.examples) ? autoNode.examples : undefined,
|
|
100
|
+
react: (0, json_1.isObject)(autoNode.react) ? autoNode.react : undefined,
|
|
101
|
+
ai: (0, json_1.isObject)(autoNode.ai) ? autoNode.ai : undefined
|
|
96
102
|
},
|
|
97
103
|
human: {
|
|
98
104
|
description: typeof humanNode.description === "string"
|
|
@@ -126,17 +132,28 @@ async function loadMimirDescriptors(cwd) {
|
|
|
126
132
|
continue;
|
|
127
133
|
}
|
|
128
134
|
const schemaVersion = raw.schemaVersion;
|
|
129
|
-
if (schemaVersion
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
+
if (schemaVersion === 1) {
|
|
136
|
+
if (!Array.isArray(raw.resources)) {
|
|
137
|
+
warnings.push(`${sourceRef}: resources must be an array for schemaVersion 1`);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
for (let index = 0; index < raw.resources.length; index += 1) {
|
|
141
|
+
try {
|
|
142
|
+
const resource = readResource(raw.resources[index], sourceRef, `resources[${index}]`);
|
|
143
|
+
if (resource) {
|
|
144
|
+
resources.push(resource);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
149
|
+
warnings.push(message);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
135
152
|
continue;
|
|
136
153
|
}
|
|
137
|
-
|
|
154
|
+
if (schemaVersion === 2) {
|
|
138
155
|
try {
|
|
139
|
-
const resource = readResource(raw
|
|
156
|
+
const resource = readResource(raw, sourceRef, "resource");
|
|
140
157
|
if (resource) {
|
|
141
158
|
resources.push(resource);
|
|
142
159
|
}
|
|
@@ -145,7 +162,9 @@ async function loadMimirDescriptors(cwd) {
|
|
|
145
162
|
const message = error instanceof Error ? error.message : String(error);
|
|
146
163
|
warnings.push(message);
|
|
147
164
|
}
|
|
165
|
+
continue;
|
|
148
166
|
}
|
|
167
|
+
warnings.push(`${sourceRef}: schemaVersion must be 1 or 2`);
|
|
149
168
|
}
|
|
150
169
|
return {
|
|
151
170
|
descriptorFiles,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor-repository.js","sourceRoot":"","sources":["../../../src/implementation/descriptors/descriptor-repository.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"descriptor-repository.js","sourceRoot":"","sources":["../../../src/implementation/descriptors/descriptor-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,10 @@ import type { GenerateReport } from "./types";
|
|
|
2
2
|
type GenerateOptions = {
|
|
3
3
|
force?: boolean;
|
|
4
4
|
};
|
|
5
|
+
export declare class NoDescriptorsFoundError extends Error {
|
|
6
|
+
readonly code = "NO_DESCRIPTORS_FOUND";
|
|
7
|
+
constructor();
|
|
8
|
+
}
|
|
5
9
|
export declare function compileApsFromDescriptors(cwd: string, options?: GenerateOptions): Promise<GenerateReport>;
|
|
6
10
|
export declare function generateApsFromEvidence(cwd: string, options?: GenerateOptions): Promise<GenerateReport>;
|
|
7
11
|
export {};
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.NoDescriptorsFoundError = void 0;
|
|
6
7
|
exports.compileApsFromDescriptors = compileApsFromDescriptors;
|
|
7
8
|
exports.generateApsFromEvidence = generateApsFromEvidence;
|
|
8
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
@@ -13,6 +14,14 @@ const example_builder_1 = require("./resource-builders/example-builder");
|
|
|
13
14
|
const descriptor_repository_1 = require("../descriptors/descriptor-repository");
|
|
14
15
|
const resource_identity_1 = require("../resource-identity");
|
|
15
16
|
const provenance_builder_1 = require("./provenance/provenance-builder");
|
|
17
|
+
class NoDescriptorsFoundError extends Error {
|
|
18
|
+
code = "NO_DESCRIPTORS_FOUND";
|
|
19
|
+
constructor() {
|
|
20
|
+
super("No descriptors found");
|
|
21
|
+
this.name = "NoDescriptorsFoundError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.NoDescriptorsFoundError = NoDescriptorsFoundError;
|
|
16
25
|
function hasHumanMetadata(component) {
|
|
17
26
|
return component.description.trim() !== "" && component.whenToUse.length > 0 && component.whenNotToUse.length > 0;
|
|
18
27
|
}
|
|
@@ -77,6 +86,10 @@ async function readPackageName(cwd) {
|
|
|
77
86
|
}
|
|
78
87
|
async function compileApsFromDescriptors(cwd, options = {}) {
|
|
79
88
|
const packageName = await readPackageName(cwd);
|
|
89
|
+
const descriptorResult = await (0, descriptor_repository_1.loadMimirDescriptors)(cwd);
|
|
90
|
+
if (descriptorResult.descriptorFiles.length === 0) {
|
|
91
|
+
throw new NoDescriptorsFoundError();
|
|
92
|
+
}
|
|
80
93
|
const outputDir = node_path_1.default.join(cwd, "dist", "aps");
|
|
81
94
|
const manifestPath = node_path_1.default.join(outputDir, "manifest.json");
|
|
82
95
|
const componentsPath = node_path_1.default.join(outputDir, "components.json");
|
|
@@ -85,15 +98,11 @@ async function compileApsFromDescriptors(cwd, options = {}) {
|
|
|
85
98
|
throw new Error("APS resources already exist in dist/aps. Re-run with --force to replace existing generated resources.");
|
|
86
99
|
}
|
|
87
100
|
await (0, fs_1.ensureDir)(outputDir);
|
|
88
|
-
const descriptorResult = await (0, descriptor_repository_1.loadMimirDescriptors)(cwd);
|
|
89
101
|
const unsupportedKinds = toUniqueSorted(descriptorResult.resources.filter((resource) => resource.kind !== "component").map((resource) => resource.kind));
|
|
90
102
|
const componentDescriptors = descriptorResult.resources.filter((resource) => resource.kind === "component");
|
|
91
103
|
const components = await Promise.all(componentDescriptors.map(async (descriptor) => buildComponentFromDescriptor(packageName, descriptor)));
|
|
92
104
|
const exampleResult = (0, example_builder_1.buildExamplesNotImplemented)();
|
|
93
105
|
const descriptorWarnings = [...descriptorResult.warnings];
|
|
94
|
-
if (descriptorResult.descriptorFiles.length === 0) {
|
|
95
|
-
descriptorWarnings.push("No *.mimir.yaml descriptors found. Run 'mimir author' to scaffold descriptor files.");
|
|
96
|
-
}
|
|
97
106
|
if (unsupportedKinds.length > 0) {
|
|
98
107
|
descriptorWarnings.push(`Descriptor resources ignored by generator v1 (unsupported kinds): ${unsupportedKinds.join(", ")}.`);
|
|
99
108
|
}
|
|
@@ -116,6 +125,7 @@ async function compileApsFromDescriptors(cwd, options = {}) {
|
|
|
116
125
|
const governanceResult = (0, governance_1.validateGovernance)(manifest);
|
|
117
126
|
return {
|
|
118
127
|
outputDir,
|
|
128
|
+
descriptorsCompiled: descriptorResult.descriptorFiles.length,
|
|
119
129
|
generatedResources: output.components.length,
|
|
120
130
|
warnings: output.warnings,
|
|
121
131
|
missingHumanMetadata: output.missingHumanMetadata,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-service.js","sourceRoot":"","sources":["../../../src/implementation/generation/generate-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate-service.js","sourceRoot":"","sources":["../../../src/implementation/generation/generate-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,3 +5,4 @@ export declare function writeText(filePath: string, content: string): Promise<vo
|
|
|
5
5
|
export declare function writeTextIfMissing(filePath: string, content: string): Promise<boolean>;
|
|
6
6
|
export declare function readJson<T>(filePath: string): Promise<T>;
|
|
7
7
|
export declare function writeJson(filePath: string, data: unknown): Promise<void>;
|
|
8
|
+
export declare function deleteFile(filePath: string): Promise<void>;
|
|
@@ -10,6 +10,7 @@ exports.writeText = writeText;
|
|
|
10
10
|
exports.writeTextIfMissing = writeTextIfMissing;
|
|
11
11
|
exports.readJson = readJson;
|
|
12
12
|
exports.writeJson = writeJson;
|
|
13
|
+
exports.deleteFile = deleteFile;
|
|
13
14
|
const promises_1 = require("node:fs/promises");
|
|
14
15
|
const node_path_1 = __importDefault(require("node:path"));
|
|
15
16
|
async function fileExists(filePath) {
|
|
@@ -58,4 +59,16 @@ async function writeJson(filePath, data) {
|
|
|
58
59
|
const serialized = `${JSON.stringify(data, null, 2)}\n`;
|
|
59
60
|
await writeText(filePath, serialized);
|
|
60
61
|
}
|
|
62
|
+
async function deleteFile(filePath) {
|
|
63
|
+
try {
|
|
64
|
+
await (0, promises_1.unlink)(filePath);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const fsError = error;
|
|
68
|
+
if (fsError.code === "ENOENT") {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
61
74
|
//# sourceMappingURL=fs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/implementation/io/fs.ts"],"names":[],"mappings":";;;;;AAGA,gCAOC;AAED,8BAEC;AAED,4BAEC;AAED,8BAGC;AAED,gDAYC;AAED,4BASC;AAED,8BAGC;
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/implementation/io/fs.ts"],"names":[],"mappings":";;;;;AAGA,gCAOC;AAED,8BAEC;AAED,4BAEC;AAED,8BAGC;AAED,gDAYC;AAED,4BASC;AAED,8BAGC;AAED,gCAUC;AAjED,+CAA8E;AAC9E,0DAA6B;AAEtB,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,IAAA,iBAAM,EAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,MAAM,IAAA,gBAAK,EAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,OAAO,IAAA,mBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IAC/D,MAAM,SAAS,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,QAAgB,EAAE,OAAe;IACxE,MAAM,SAAS,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAI,QAAgB;IAChD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAErC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,IAAa;IAC7D,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACxD,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACxC,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,IAAA,iBAAM,EAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAA8B,CAAC;QAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { KnowledgeGraph } from "./knowledge-graph";
|
|
2
|
+
import type { KnowledgeProvider, KnowledgeWorkspace } from "./model";
|
|
3
|
+
import type { SemanticResourceKind } from "../contracts/resource";
|
|
4
|
+
export declare function buildKnowledgeGraph(workspace: KnowledgeWorkspace, providers?: readonly KnowledgeProvider[]): Promise<KnowledgeGraph>;
|
|
5
|
+
export declare function createKnowledgeWorkspace(cwd: string, packageName: string, discovery: {
|
|
6
|
+
includeKinds?: SemanticResourceKind[];
|
|
7
|
+
excludeKinds?: SemanticResourceKind[];
|
|
8
|
+
}): Promise<KnowledgeWorkspace>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildKnowledgeGraph = buildKnowledgeGraph;
|
|
4
|
+
exports.createKnowledgeWorkspace = createKnowledgeWorkspace;
|
|
5
|
+
const knowledge_graph_1 = require("./knowledge-graph");
|
|
6
|
+
const typescript_analysis_1 = require("../resource-discovery/typescript-analysis");
|
|
7
|
+
const providers_1 = require("./providers");
|
|
8
|
+
const DEFAULT_PROVIDERS = [
|
|
9
|
+
new providers_1.SemanticDiscoveryProvider(),
|
|
10
|
+
new providers_1.PublicApiProvider(),
|
|
11
|
+
new providers_1.StorybookProvider(),
|
|
12
|
+
new providers_1.RelationshipProvider(),
|
|
13
|
+
new providers_1.ReactProvider(),
|
|
14
|
+
new providers_1.DesignTokenProvider()
|
|
15
|
+
];
|
|
16
|
+
async function buildKnowledgeGraph(workspace, providers = DEFAULT_PROVIDERS) {
|
|
17
|
+
const graph = new knowledge_graph_1.KnowledgeGraph();
|
|
18
|
+
const availablePredicates = new Set();
|
|
19
|
+
for (const provider of providers) {
|
|
20
|
+
const missing = (provider.requires ?? []).filter((predicate) => !availablePredicates.has(predicate));
|
|
21
|
+
if (missing.length > 0) {
|
|
22
|
+
throw new Error(`Knowledge provider '${provider.id}' requires facts: ${missing.join(", ")}`);
|
|
23
|
+
}
|
|
24
|
+
graph.add(await provider.collect(workspace, graph));
|
|
25
|
+
for (const predicate of provider.provides)
|
|
26
|
+
availablePredicates.add(predicate);
|
|
27
|
+
}
|
|
28
|
+
return graph;
|
|
29
|
+
}
|
|
30
|
+
async function createKnowledgeWorkspace(cwd, packageName, discovery) {
|
|
31
|
+
const analysis = await (0, typescript_analysis_1.createTypeScriptAnalysis)(cwd);
|
|
32
|
+
return {
|
|
33
|
+
cwd,
|
|
34
|
+
packageName,
|
|
35
|
+
discovery,
|
|
36
|
+
program: analysis.program,
|
|
37
|
+
checker: analysis.checker
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=knowledge-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-engine.js","sourceRoot":"","sources":["../../../src/implementation/knowledge/knowledge-engine.ts"],"names":[],"mappings":";;AAsBA,kDAeC;AAED,4DAaC;AApDD,uDAAmD;AAEnD,mFAAqF;AAErF,2CAOqB;AAErB,MAAM,iBAAiB,GAAwB;IAC7C,IAAI,qCAAyB,EAAE;IAC/B,IAAI,6BAAiB,EAAE;IACvB,IAAI,6BAAiB,EAAE;IACvB,IAAI,gCAAoB,EAAE;IAC1B,IAAI,yBAAa,EAAE;IACnB,IAAI,+BAAmB,EAAE;CAC1B,CAAC;AAEK,KAAK,UAAU,mBAAmB,CACvC,SAA6B,EAC7B,YAA0C,iBAAiB;IAE3D,MAAM,KAAK,GAAG,IAAI,gCAAc,EAAE,CAAC;IACnC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC1D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACrG,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,EAAE,qBAAqB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QACpD,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,QAAQ;YAAE,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,wBAAwB,CAC5C,GAAW,EACX,WAAmB,EACnB,SAA2F;IAE3F,MAAM,QAAQ,GAAG,MAAM,IAAA,8CAAwB,EAAC,GAAG,CAAC,CAAC;IACrD,OAAO;QACL,GAAG;QACH,WAAW;QACX,SAAS;QACT,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { KnowledgeFact, KnowledgeGraphReader, KnowledgePredicate } from "./model";
|
|
2
|
+
export declare class KnowledgeGraph implements KnowledgeGraphReader {
|
|
3
|
+
private readonly collectedFacts;
|
|
4
|
+
add(facts: readonly KnowledgeFact[]): void;
|
|
5
|
+
facts(predicate?: KnowledgePredicate): readonly KnowledgeFact[];
|
|
6
|
+
factsFor(subject: string, predicate?: KnowledgePredicate): readonly KnowledgeFact[];
|
|
7
|
+
resources(): readonly KnowledgeFact[];
|
|
8
|
+
relationships(subject?: string): readonly KnowledgeFact[];
|
|
9
|
+
examples(subject?: string): readonly KnowledgeFact[];
|
|
10
|
+
publicApi(subject: string): KnowledgeFact | undefined;
|
|
11
|
+
classification(subject: string): KnowledgeFact | undefined;
|
|
12
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KnowledgeGraph = void 0;
|
|
4
|
+
class KnowledgeGraph {
|
|
5
|
+
collectedFacts = [];
|
|
6
|
+
add(facts) {
|
|
7
|
+
this.collectedFacts.push(...facts);
|
|
8
|
+
}
|
|
9
|
+
facts(predicate) {
|
|
10
|
+
return predicate
|
|
11
|
+
? this.collectedFacts.filter((fact) => fact.predicate === predicate)
|
|
12
|
+
: this.collectedFacts;
|
|
13
|
+
}
|
|
14
|
+
factsFor(subject, predicate) {
|
|
15
|
+
return this.collectedFacts.filter((fact) => fact.subject === subject && (!predicate || fact.predicate === predicate));
|
|
16
|
+
}
|
|
17
|
+
resources() {
|
|
18
|
+
return this.facts("resource");
|
|
19
|
+
}
|
|
20
|
+
relationships(subject) {
|
|
21
|
+
return subject ? this.factsFor(subject, "relationship") : this.facts("relationship");
|
|
22
|
+
}
|
|
23
|
+
examples(subject) {
|
|
24
|
+
return subject ? this.factsFor(subject, "example") : this.facts("example");
|
|
25
|
+
}
|
|
26
|
+
publicApi(subject) {
|
|
27
|
+
return this.factsFor(subject, "public-api")[0];
|
|
28
|
+
}
|
|
29
|
+
classification(subject) {
|
|
30
|
+
return this.factsFor(subject, "classification")[0];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.KnowledgeGraph = KnowledgeGraph;
|
|
34
|
+
//# sourceMappingURL=knowledge-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-graph.js","sourceRoot":"","sources":["../../../src/implementation/knowledge/knowledge-graph.ts"],"names":[],"mappings":";;;AAEA,MAAa,cAAc;IACR,cAAc,GAAoB,EAAE,CAAC;IAEtD,GAAG,CAAC,KAA+B;QACjC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,SAA8B;QAClC,OAAO,SAAS;YACd,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;YACpE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,OAAe,EAAE,SAA8B;QACtD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAC/B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CACnF,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,aAAa,CAAC,OAAgB;QAC5B,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACvF,CAAC;IAED,QAAQ,CAAC,OAAgB;QACvB,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7E,CAAC;IAED,SAAS,CAAC,OAAe;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,cAAc,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;CACF;AAtCD,wCAsCC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type ts from "typescript";
|
|
2
|
+
import type { SemanticResourceKind } from "../contracts/resource";
|
|
3
|
+
export type KnowledgeSource = "typescript" | "storybook" | "react" | "design-tokens";
|
|
4
|
+
export type KnowledgeEvidence = {
|
|
5
|
+
kind: string;
|
|
6
|
+
detail: string;
|
|
7
|
+
file?: string;
|
|
8
|
+
symbol?: string;
|
|
9
|
+
};
|
|
10
|
+
export type KnowledgePredicate = "resource" | "classification" | "public-api" | "relationship" | "example" | "react-patterns" | "design-tokens";
|
|
11
|
+
export type KnowledgeFact = {
|
|
12
|
+
subject: string;
|
|
13
|
+
predicate: KnowledgePredicate;
|
|
14
|
+
object: unknown;
|
|
15
|
+
confidence: number;
|
|
16
|
+
source: KnowledgeSource;
|
|
17
|
+
evidence: KnowledgeEvidence[];
|
|
18
|
+
metadata?: Record<string, unknown>;
|
|
19
|
+
};
|
|
20
|
+
export type KnowledgeWorkspace = {
|
|
21
|
+
cwd: string;
|
|
22
|
+
packageName: string;
|
|
23
|
+
program: ts.Program;
|
|
24
|
+
checker: ts.TypeChecker;
|
|
25
|
+
discovery: {
|
|
26
|
+
includeKinds?: SemanticResourceKind[];
|
|
27
|
+
excludeKinds?: SemanticResourceKind[];
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export interface KnowledgeProvider {
|
|
31
|
+
readonly id: string;
|
|
32
|
+
readonly requires?: readonly KnowledgePredicate[];
|
|
33
|
+
readonly provides: readonly KnowledgePredicate[];
|
|
34
|
+
collect(workspace: KnowledgeWorkspace, graph: KnowledgeGraphReader): Promise<KnowledgeFact[]>;
|
|
35
|
+
}
|
|
36
|
+
export interface KnowledgeGraphReader {
|
|
37
|
+
facts(predicate?: KnowledgePredicate): readonly KnowledgeFact[];
|
|
38
|
+
factsFor(subject: string, predicate?: KnowledgePredicate): readonly KnowledgeFact[];
|
|
39
|
+
resources(): readonly KnowledgeFact[];
|
|
40
|
+
relationships(subject?: string): readonly KnowledgeFact[];
|
|
41
|
+
examples(subject?: string): readonly KnowledgeFact[];
|
|
42
|
+
publicApi(subject: string): KnowledgeFact | undefined;
|
|
43
|
+
classification(subject: string): KnowledgeFact | undefined;
|
|
44
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/implementation/knowledge/model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DiscoveredResourceFact, ExtractedExample, ExtractedProp, ExtractedReactPatterns, ExtractedRelationship, ExtractionMetadata, PublicComponentApi } from "../contracts/resource";
|
|
2
|
+
import type { KnowledgeGraphReader } from "./model";
|
|
3
|
+
export type PersistentResourceKnowledge = {
|
|
4
|
+
resource: DiscoveredResourceFact;
|
|
5
|
+
props: Record<string, ExtractedProp>;
|
|
6
|
+
api?: PublicComponentApi;
|
|
7
|
+
relationships: ExtractedRelationship[];
|
|
8
|
+
examples: ExtractedExample[];
|
|
9
|
+
variants: string[];
|
|
10
|
+
storyFiles: string[];
|
|
11
|
+
react: ExtractedReactPatterns;
|
|
12
|
+
metadata: ExtractionMetadata;
|
|
13
|
+
};
|
|
14
|
+
export interface PersistencePolicy {
|
|
15
|
+
select(graph: KnowledgeGraphReader): PersistentResourceKnowledge[];
|
|
16
|
+
}
|
|
17
|
+
export declare class DescriptorPersistencePolicy implements PersistencePolicy {
|
|
18
|
+
private readonly excludedRelationshipTypes;
|
|
19
|
+
constructor(excludedRelationshipTypes?: ReadonlySet<ExtractedRelationship["type"]>);
|
|
20
|
+
select(graph: KnowledgeGraphReader): PersistentResourceKnowledge[];
|
|
21
|
+
}
|