@context-forge/core 0.3.3 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/ConfigKeys.d.ts.map +1 -1
- package/dist/config/ConfigKeys.js +10 -0
- package/dist/config/ConfigKeys.js.map +1 -1
- package/dist/guides/GuideManager.d.ts +2 -0
- package/dist/guides/GuideManager.d.ts.map +1 -1
- package/dist/guides/GuideManager.js +18 -1
- package/dist/guides/GuideManager.js.map +1 -1
- package/dist/introspection/ArtifactIntrospector.d.ts.map +1 -1
- package/dist/introspection/ArtifactIntrospector.js +18 -16
- package/dist/introspection/ArtifactIntrospector.js.map +1 -1
- package/dist/introspection/ConsistencyChecker.d.ts +38 -0
- package/dist/introspection/ConsistencyChecker.d.ts.map +1 -0
- package/dist/introspection/ConsistencyChecker.js +381 -0
- package/dist/introspection/ConsistencyChecker.js.map +1 -0
- package/dist/introspection/WorkflowNavigator.d.ts +30 -0
- package/dist/introspection/WorkflowNavigator.d.ts.map +1 -0
- package/dist/introspection/WorkflowNavigator.js +265 -0
- package/dist/introspection/WorkflowNavigator.js.map +1 -0
- package/dist/introspection/parsers/slicePlanParser.d.ts +3 -0
- package/dist/introspection/parsers/slicePlanParser.d.ts.map +1 -1
- package/dist/introspection/parsers/slicePlanParser.js +34 -14
- package/dist/introspection/parsers/slicePlanParser.js.map +1 -1
- package/dist/introspection/types.d.ts +74 -0
- package/dist/introspection/types.d.ts.map +1 -1
- package/dist/introspection/writers/markdownWriter.d.ts +12 -0
- package/dist/introspection/writers/markdownWriter.d.ts.map +1 -0
- package/dist/introspection/writers/markdownWriter.js +93 -0
- package/dist/introspection/writers/markdownWriter.js.map +1 -0
- package/dist/node.d.ts +4 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +4 -1
- package/dist/node.js.map +1 -1
- package/dist/schema/resolveFileByIndex.d.ts +11 -0
- package/dist/schema/resolveFileByIndex.d.ts.map +1 -1
- package/dist/schema/resolveFileByIndex.js +38 -0
- package/dist/schema/resolveFileByIndex.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
/**
|
|
3
|
+
* Update a checkbox on a specific line in a markdown file.
|
|
4
|
+
* Toggles between `[ ]` and `[x]` based on the `checked` parameter.
|
|
5
|
+
*/
|
|
6
|
+
export async function updateCheckbox(filePath, lineIndex, checked) {
|
|
7
|
+
const content = await readFile(filePath, 'utf-8');
|
|
8
|
+
const lines = content.split('\n');
|
|
9
|
+
if (lineIndex < 0 || lineIndex >= lines.length) {
|
|
10
|
+
throw new Error(`Line index ${lineIndex} out of range (file has ${lines.length} lines)`);
|
|
11
|
+
}
|
|
12
|
+
const line = lines[lineIndex];
|
|
13
|
+
const uncheckedPattern = /\[ \]/;
|
|
14
|
+
const checkedPattern = /\[x\]/i;
|
|
15
|
+
if (!uncheckedPattern.test(line) && !checkedPattern.test(line)) {
|
|
16
|
+
throw new Error(`Line ${lineIndex} does not contain a checkbox pattern: "${line.trim()}"`);
|
|
17
|
+
}
|
|
18
|
+
const before = uncheckedPattern.test(line) ? '[ ]' : '[x]';
|
|
19
|
+
const after = checked ? '[x]' : '[ ]';
|
|
20
|
+
if (checked) {
|
|
21
|
+
lines[lineIndex] = line.replace(uncheckedPattern, '[x]');
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
lines[lineIndex] = line.replace(checkedPattern, '[ ]');
|
|
25
|
+
}
|
|
26
|
+
await writeFile(filePath, lines.join('\n'), 'utf-8');
|
|
27
|
+
return {
|
|
28
|
+
rule: '',
|
|
29
|
+
action: 'update-checkbox',
|
|
30
|
+
filePath,
|
|
31
|
+
before,
|
|
32
|
+
after,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Update a YAML frontmatter field value in a markdown file.
|
|
37
|
+
* Finds the key in the frontmatter block and replaces its value.
|
|
38
|
+
*/
|
|
39
|
+
export async function updateFrontmatterField(filePath, key, value) {
|
|
40
|
+
const content = await readFile(filePath, 'utf-8');
|
|
41
|
+
const lines = content.split('\n');
|
|
42
|
+
if (lines.length === 0 || lines[0].trim() !== '---') {
|
|
43
|
+
throw new Error(`File does not contain YAML frontmatter: ${filePath}`);
|
|
44
|
+
}
|
|
45
|
+
let closingIndex = -1;
|
|
46
|
+
for (let i = 1; i < lines.length; i++) {
|
|
47
|
+
if (lines[i].trim() === '---') {
|
|
48
|
+
closingIndex = i;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (closingIndex === -1) {
|
|
53
|
+
throw new Error(`Frontmatter not closed in: ${filePath}`);
|
|
54
|
+
}
|
|
55
|
+
// Find the key within frontmatter bounds
|
|
56
|
+
let keyLineIndex = -1;
|
|
57
|
+
let beforeValue = '';
|
|
58
|
+
for (let i = 1; i < closingIndex; i++) {
|
|
59
|
+
const line = lines[i];
|
|
60
|
+
const colonIdx = line.indexOf(':');
|
|
61
|
+
if (colonIdx === -1)
|
|
62
|
+
continue;
|
|
63
|
+
const lineKey = line.slice(0, colonIdx).trim();
|
|
64
|
+
if (lineKey === key) {
|
|
65
|
+
keyLineIndex = i;
|
|
66
|
+
beforeValue = line.slice(colonIdx + 1).trim();
|
|
67
|
+
// Strip surrounding quotes
|
|
68
|
+
if (beforeValue.length >= 2 &&
|
|
69
|
+
((beforeValue.startsWith("'") && beforeValue.endsWith("'")) ||
|
|
70
|
+
(beforeValue.startsWith('"') && beforeValue.endsWith('"')))) {
|
|
71
|
+
beforeValue = beforeValue.slice(1, -1);
|
|
72
|
+
}
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (keyLineIndex === -1) {
|
|
77
|
+
throw new Error(`Frontmatter key "${key}" not found in: ${filePath}`);
|
|
78
|
+
}
|
|
79
|
+
// Replace the value, preserving the key and any leading whitespace
|
|
80
|
+
const originalLine = lines[keyLineIndex];
|
|
81
|
+
const colonIdx = originalLine.indexOf(':');
|
|
82
|
+
lines[keyLineIndex] = originalLine.slice(0, colonIdx + 1) + ' ' + value;
|
|
83
|
+
await writeFile(filePath, lines.join('\n'), 'utf-8');
|
|
84
|
+
return {
|
|
85
|
+
rule: '',
|
|
86
|
+
action: 'update-frontmatter',
|
|
87
|
+
filePath,
|
|
88
|
+
field: key,
|
|
89
|
+
before: beforeValue,
|
|
90
|
+
after: value,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=markdownWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdownWriter.js","sourceRoot":"","sources":["../../../src/introspection/writers/markdownWriter.ts"],"names":[],"mappings":"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"}
|
package/dist/node.d.ts
CHANGED
|
@@ -5,8 +5,9 @@ export { createContextPipeline } from './services/CoreServiceFactory.js';
|
|
|
5
5
|
export * from './storage/index.js';
|
|
6
6
|
export * from './config/index.js';
|
|
7
7
|
export * from './guides/index.js';
|
|
8
|
-
export { resolveFileByIndex } from './schema/resolveFileByIndex.js';
|
|
8
|
+
export { resolveFileByIndex, resolveArtifactPath, deriveArtifactStem } from './schema/resolveFileByIndex.js';
|
|
9
9
|
export { ArtifactIntrospector } from './introspection/ArtifactIntrospector.js';
|
|
10
|
+
export { WorkflowNavigator, extractSliceIndex } from './introspection/WorkflowNavigator.js';
|
|
10
11
|
export { parseFrontmatter } from './introspection/parsers/frontmatterParser.js';
|
|
11
12
|
export { parseSlicePlan } from './introspection/parsers/slicePlanParser.js';
|
|
12
13
|
export { parseTaskItems, parseTaskFile } from './introspection/parsers/taskFileParser.js';
|
|
@@ -14,4 +15,6 @@ export { parseFutureWork } from './introspection/parsers/futureWorkParser.js';
|
|
|
14
15
|
export { detectDocuments, checkFileExists } from './introspection/parsers/documentDetector.js';
|
|
15
16
|
export { buildModel, scanDirectory } from './introspection/ProjectModelBuilder.js';
|
|
16
17
|
export { FutureWorkCollector } from './introspection/FutureWorkCollector.js';
|
|
18
|
+
export { ConsistencyChecker } from './introspection/ConsistencyChecker.js';
|
|
19
|
+
export { updateCheckbox, updateFrontmatterField } from './introspection/writers/markdownWriter.js';
|
|
17
20
|
//# sourceMappingURL=node.d.ts.map
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAG7G,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC"}
|
package/dist/node.js
CHANGED
|
@@ -12,9 +12,10 @@ export * from './config/index.js';
|
|
|
12
12
|
// Guides — guide lifecycle management (git/fs dependent)
|
|
13
13
|
export * from './guides/index.js';
|
|
14
14
|
// Schema — fs-dependent helpers (index-based file resolution)
|
|
15
|
-
export { resolveFileByIndex } from './schema/resolveFileByIndex.js';
|
|
15
|
+
export { resolveFileByIndex, resolveArtifactPath, deriveArtifactStem } from './schema/resolveFileByIndex.js';
|
|
16
16
|
// Introspection — artifact parsing and document detection (fs dependent)
|
|
17
17
|
export { ArtifactIntrospector } from './introspection/ArtifactIntrospector.js';
|
|
18
|
+
export { WorkflowNavigator, extractSliceIndex } from './introspection/WorkflowNavigator.js';
|
|
18
19
|
export { parseFrontmatter } from './introspection/parsers/frontmatterParser.js';
|
|
19
20
|
export { parseSlicePlan } from './introspection/parsers/slicePlanParser.js';
|
|
20
21
|
export { parseTaskItems, parseTaskFile } from './introspection/parsers/taskFileParser.js';
|
|
@@ -22,4 +23,6 @@ export { parseFutureWork } from './introspection/parsers/futureWorkParser.js';
|
|
|
22
23
|
export { detectDocuments, checkFileExists } from './introspection/parsers/documentDetector.js';
|
|
23
24
|
export { buildModel, scanDirectory } from './introspection/ProjectModelBuilder.js';
|
|
24
25
|
export { FutureWorkCollector } from './introspection/FutureWorkCollector.js';
|
|
26
|
+
export { ConsistencyChecker } from './introspection/ConsistencyChecker.js';
|
|
27
|
+
export { updateCheckbox, updateFrontmatterField } from './introspection/writers/markdownWriter.js';
|
|
25
28
|
//# sourceMappingURL=node.js.map
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,oEAAoE;AACpE,uEAAuE;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,0EAA0E;AAC1E,cAAc,oBAAoB,CAAC;AAEnC,8DAA8D;AAC9D,cAAc,mBAAmB,CAAC;AAElC,yDAAyD;AACzD,cAAc,mBAAmB,CAAC;AAElC,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,oEAAoE;AACpE,uEAAuE;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,0EAA0E;AAC1E,cAAc,oBAAoB,CAAC;AAEnC,8DAA8D;AAC9D,cAAc,mBAAmB,CAAC;AAElC,yDAAyD;AACzD,cAAc,mBAAmB,CAAC;AAElC,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAE7G,yEAAyE;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC"}
|
|
@@ -8,4 +8,15 @@
|
|
|
8
8
|
* @throws If no matching file is found or multiple matches exist.
|
|
9
9
|
*/
|
|
10
10
|
export declare function resolveFileByIndex(projectPath: string, field: string, index: string): string | null;
|
|
11
|
+
/**
|
|
12
|
+
* Derive an artifact stem from a numeric index and a human-readable name.
|
|
13
|
+
* Uses the field's first prefix from ARTIFACT_DIR_MAP.
|
|
14
|
+
*
|
|
15
|
+
* Example: deriveArtifactStem('fileSlice', '166', 'Consistency Checker')
|
|
16
|
+
* → "166-slice.consistency-checker"
|
|
17
|
+
*
|
|
18
|
+
* @returns The derived stem, or null if the field is unknown.
|
|
19
|
+
*/
|
|
20
|
+
export declare function deriveArtifactStem(field: string, index: string, name: string): string | null;
|
|
21
|
+
export declare function resolveArtifactPath(field: string, stem: string): string | null;
|
|
11
22
|
//# sourceMappingURL=resolveFileByIndex.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveFileByIndex.d.ts","sourceRoot":"","sources":["../../src/schema/resolveFileByIndex.ts"],"names":[],"mappings":"AAcA;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAuCf"}
|
|
1
|
+
{"version":3,"file":"resolveFileByIndex.d.ts","sourceRoot":"","sources":["../../src/schema/resolveFileByIndex.ts"],"names":[],"mappings":"AAcA;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAuCf;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5F;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI9E"}
|
|
@@ -50,4 +50,42 @@ export function resolveFileByIndex(projectPath, field, index) {
|
|
|
50
50
|
// Return stem without .md extension
|
|
51
51
|
return matches[0].replace(/\.md$/, '');
|
|
52
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Resolve an artifact stem (e.g. "160-slices.project-workflow-system") to its
|
|
55
|
+
* full relative path within the project (e.g. "project-documents/user/architecture/160-slices.project-workflow-system.md").
|
|
56
|
+
*
|
|
57
|
+
* @returns The relative path including directory and .md extension, or null if the field is unknown.
|
|
58
|
+
*/
|
|
59
|
+
/**
|
|
60
|
+
* Slugify a human-readable name for use in artifact filenames.
|
|
61
|
+
* "Consistency Checker" → "consistency-checker"
|
|
62
|
+
*/
|
|
63
|
+
function slugify(name) {
|
|
64
|
+
return name
|
|
65
|
+
.toLowerCase()
|
|
66
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
67
|
+
.replace(/^-|-$/g, '');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Derive an artifact stem from a numeric index and a human-readable name.
|
|
71
|
+
* Uses the field's first prefix from ARTIFACT_DIR_MAP.
|
|
72
|
+
*
|
|
73
|
+
* Example: deriveArtifactStem('fileSlice', '166', 'Consistency Checker')
|
|
74
|
+
* → "166-slice.consistency-checker"
|
|
75
|
+
*
|
|
76
|
+
* @returns The derived stem, or null if the field is unknown.
|
|
77
|
+
*/
|
|
78
|
+
export function deriveArtifactStem(field, index, name) {
|
|
79
|
+
const mapping = ARTIFACT_DIR_MAP[field];
|
|
80
|
+
if (!mapping)
|
|
81
|
+
return null;
|
|
82
|
+
const prefix = mapping.prefixes[0];
|
|
83
|
+
return `${index}-${prefix}${slugify(name)}`;
|
|
84
|
+
}
|
|
85
|
+
export function resolveArtifactPath(field, stem) {
|
|
86
|
+
const mapping = ARTIFACT_DIR_MAP[field];
|
|
87
|
+
if (!mapping)
|
|
88
|
+
return null;
|
|
89
|
+
return join(mapping.dir, `${stem}.md`);
|
|
90
|
+
}
|
|
53
91
|
//# sourceMappingURL=resolveFileByIndex.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveFileByIndex.js","sourceRoot":"","sources":["../../src/schema/resolveFileByIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,4EAA4E;AAC5E,MAAM,gBAAgB,GAAwD;IAC5E,SAAS,EAAE,EAAE,GAAG,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACzE,SAAS,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACxE,QAAQ,EAAE,EAAE,GAAG,EAAE,qCAAqC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IAC7E,aAAa,EAAE,EAAE,GAAG,EAAE,qCAAqC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;IACpF,OAAO,EAAE,EAAE,GAAG,EAAE,qCAAqC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;IACxF,QAAQ,EAAE,EAAE,GAAG,EAAE,qCAAqC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;CAC9E,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,KAAa,EACb,KAAa;IAEb,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,sDAAsD;IACtD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAE7D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAE/C,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,CAAC,GAAG,8BAA8B,OAAO,EAAE,CAC7E,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACjC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,2BAA2B,KAAK,gBAAgB,KAAK,QAAQ,OAAO,CAAC,GAAG,GAAG,CAC5E,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,+BAA+B,KAAK,gBAAgB,KAAK,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpF,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"resolveFileByIndex.js","sourceRoot":"","sources":["../../src/schema/resolveFileByIndex.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED