@agent-teams/engineering-foundation 0.2.0 → 0.3.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 +6 -2
- package/dist/capabilities/source-dependencies/adapters/outbound/filesystem/filesystem-source-tree-reader.d.ts +6 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/filesystem/filesystem-source-tree-reader.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/filesystem/filesystem-source-tree-reader.js +133 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/filesystem/filesystem-source-tree-reader.js.map +1 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/node/node-source-dependency-resolver.d.ts +6 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/node/node-source-dependency-resolver.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/node/node-source-dependency-resolver.js +151 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/node/node-source-dependency-resolver.js.map +1 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/oxc/oxc-source-dependency-parser.d.ts +6 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/oxc/oxc-source-dependency-parser.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/oxc/oxc-source-dependency-parser.js +96 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/oxc/oxc-source-dependency-parser.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/model/source-workspace.d.ts +69 -0
- package/dist/capabilities/source-dependencies/application/model/source-workspace.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/model/source-workspace.js +13 -0
- package/dist/capabilities/source-dependencies/application/model/source-workspace.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.d.ts +14 -0
- package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.js +223 -0
- package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-parser.d.ts +5 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-parser.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-parser.js +2 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-parser.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-resolver.d.ts +12 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-resolver.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-resolver.js +2 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-resolver.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/ports/source-tree-reader.d.ts +5 -0
- package/dist/capabilities/source-dependencies/application/ports/source-tree-reader.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/ports/source-tree-reader.js +2 -0
- package/dist/capabilities/source-dependencies/application/ports/source-tree-reader.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/rules.d.ts +26 -0
- package/dist/capabilities/source-dependencies/application/rules.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/rules.js +27 -0
- package/dist/capabilities/source-dependencies/application/rules.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.d.ts +19 -0
- package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.js +69 -0
- package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.js.map +1 -0
- package/dist/capabilities/source-dependencies/contract/config.d.ts +5 -0
- package/dist/capabilities/source-dependencies/contract/config.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/contract/config.js +108 -0
- package/dist/capabilities/source-dependencies/contract/config.js.map +1 -0
- package/dist/capabilities/source-dependencies/module.d.ts +5 -0
- package/dist/capabilities/source-dependencies/module.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/module.js +61 -0
- package/dist/capabilities/source-dependencies/module.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.d.ts +2 -1
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.d.ts.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.js +4 -195
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.js.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-dependency-policy.d.ts +6 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-dependency-policy.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-dependency-policy.js +2 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-dependency-policy.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.d.ts +1 -26
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.d.ts.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.js +1 -6
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.js.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.d.ts +2 -2
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.d.ts.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.js +6 -6
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.js.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.d.ts +1 -1
- package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.d.ts.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/contract/config.d.ts +6 -15
- package/dist/capabilities/workspace-dependency-declarations/contract/config.d.ts.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/contract/config.js +16 -1
- package/dist/capabilities/workspace-dependency-declarations/contract/config.js.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/module.d.ts +2 -0
- package/dist/capabilities/workspace-dependency-declarations/module.d.ts.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/module.js +4 -2
- package/dist/capabilities/workspace-dependency-declarations/module.js.map +1 -1
- package/dist/capability-runtime.d.ts +1 -5
- package/dist/capability-runtime.d.ts.map +1 -1
- package/dist/capability-runtime.js +4 -4
- package/dist/capability-runtime.js.map +1 -1
- package/dist/check-contract.d.ts +3 -2
- package/dist/check-contract.d.ts.map +1 -1
- package/dist/check-runner.d.ts +0 -2
- package/dist/check-runner.d.ts.map +1 -1
- package/dist/check-runner.js +5 -11
- package/dist/check-runner.js.map +1 -1
- package/dist/cli.js +46 -13
- package/dist/cli.js.map +1 -1
- package/dist/composition/capability-registry.d.ts.map +1 -1
- package/dist/composition/capability-registry.js +2 -0
- package/dist/composition/capability-registry.js.map +1 -1
- package/dist/composition/rule-registry.d.ts +8 -0
- package/dist/composition/rule-registry.d.ts.map +1 -0
- package/dist/composition/rule-registry.js +7 -0
- package/dist/composition/rule-registry.js.map +1 -0
- package/dist/filesystem-path-safety.d.ts +2 -0
- package/dist/filesystem-path-safety.d.ts.map +1 -0
- package/dist/filesystem-path-safety.js +19 -0
- package/dist/filesystem-path-safety.js.map +1 -0
- package/dist/foundation-config.d.ts +11 -13
- package/dist/foundation-config.d.ts.map +1 -1
- package/dist/foundation-config.js +52 -3
- package/dist/foundation-config.js.map +1 -1
- package/dist/local-mode/adapters/outbound/time/system-clock.d.ts +2 -0
- package/dist/local-mode/adapters/outbound/time/system-clock.d.ts.map +1 -0
- package/dist/local-mode/adapters/outbound/time/system-clock.js +4 -0
- package/dist/local-mode/adapters/outbound/time/system-clock.js.map +1 -0
- package/dist/local-mode/consumer-policy.js +1 -1
- package/dist/local-mode/consumer-policy.js.map +1 -1
- package/dist/local-mode/service.d.ts +1 -1
- package/dist/local-mode/service.d.ts.map +1 -1
- package/dist/local-mode/service.js +1 -1
- package/dist/local-mode/service.js.map +1 -1
- package/dist/package-self-check.d.ts +1 -0
- package/dist/package-self-check.d.ts.map +1 -1
- package/dist/package-self-check.js +25 -20
- package/dist/package-self-check.js.map +1 -1
- package/dist/schema-catalog.d.ts +2 -2
- package/dist/schema-catalog.d.ts.map +1 -1
- package/dist/schema-catalog.js +3 -2
- package/dist/schema-catalog.js.map +1 -1
- package/dist/strict-yaml.d.ts +0 -2
- package/dist/strict-yaml.d.ts.map +1 -1
- package/dist/strict-yaml.js +16 -3
- package/dist/strict-yaml.js.map +1 -1
- package/dist/workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.d.ts +6 -0
- package/dist/workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.d.ts.map +1 -0
- package/dist/workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.js +288 -0
- package/dist/workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.js.map +1 -0
- package/dist/workspace-inventory/application/model/workspace-inventory.d.ts +38 -0
- package/dist/workspace-inventory/application/model/workspace-inventory.d.ts.map +1 -0
- package/dist/workspace-inventory/application/model/workspace-inventory.js +7 -0
- package/dist/workspace-inventory/application/model/workspace-inventory.js.map +1 -0
- package/dist/workspace-inventory/application/ports/workspace-inventory-reader.d.ts +5 -0
- package/dist/workspace-inventory/application/ports/workspace-inventory-reader.d.ts.map +1 -0
- package/dist/workspace-inventory/application/ports/workspace-inventory-reader.js +2 -0
- package/dist/workspace-inventory/application/ports/workspace-inventory-reader.js.map +1 -0
- package/package.json +5 -1
- package/presets/oxlint/base.json +2 -0
- package/presets/oxlint/type-aware.json +39 -0
- package/schemas/architecture-source-dependencies/v1.schema.json +97 -0
- package/schemas/foundation-config/v1.schema.json +10 -0
package/README.md
CHANGED
|
@@ -23,6 +23,8 @@ schemaVersion: 1
|
|
|
23
23
|
project:
|
|
24
24
|
id: consumer-repository
|
|
25
25
|
capabilities:
|
|
26
|
+
architecture.source-dependencies:
|
|
27
|
+
configPath: architecture/foundation/source-dependencies.yaml
|
|
26
28
|
workspace.dependency-declarations:
|
|
27
29
|
configPath: architecture/foundation/dependency-declarations.yaml
|
|
28
30
|
```
|
|
@@ -33,5 +35,7 @@ and `agent-teams-foundation explain <rule-id>` for rule guidance.
|
|
|
33
35
|
|
|
34
36
|
TypeScript consumers may extend
|
|
35
37
|
`@agent-teams/engineering-foundation/presets/typescript/node.json`. Oxlint JSON
|
|
36
|
-
configuration extends
|
|
37
|
-
`./node_modules/@agent-teams/engineering-foundation/presets/oxlint/node.json
|
|
38
|
+
configuration extends the fast
|
|
39
|
+
`./node_modules/@agent-teams/engineering-foundation/presets/oxlint/node.json`
|
|
40
|
+
or type-aware `type-aware.json` preset. TypeScript remains the separate typecheck
|
|
41
|
+
authority.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SourceFileSnapshot } from "../../../application/model/source-workspace.js";
|
|
2
|
+
import type { SourceTreeReader } from "../../../application/ports/source-tree-reader.js";
|
|
3
|
+
export declare class FilesystemSourceTreeReader implements SourceTreeReader {
|
|
4
|
+
read(consumerRoot: string, governedRoots: readonly string[], signal?: AbortSignal): Promise<readonly SourceFileSnapshot[]>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=filesystem-source-tree-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-source-tree-reader.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/source-dependencies/adapters/outbound/filesystem/filesystem-source-tree-reader.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAyLzF,qBAAa,0BAA2B,YAAW,gBAAgB;IAC3D,IAAI,CACR,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAcxC;CACF"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { lstat, opendir, readFile, realpath, stat } from "node:fs/promises";
|
|
2
|
+
import { isAbsolute, join, posix, relative, resolve, sep } from "node:path";
|
|
3
|
+
import { CapabilityInputError } from "../../../../../capability-runtime.js";
|
|
4
|
+
import { pathTraversesSymbolicLink } from "../../../../../filesystem-path-safety.js";
|
|
5
|
+
import { assertNotCancelled, assertRepositoryRelativePath } from "../../../../../strict-yaml.js";
|
|
6
|
+
const SOURCE_EXTENSIONS = new Set([
|
|
7
|
+
".cjs",
|
|
8
|
+
".cts",
|
|
9
|
+
".js",
|
|
10
|
+
".jsx",
|
|
11
|
+
".mjs",
|
|
12
|
+
".mts",
|
|
13
|
+
".ts",
|
|
14
|
+
".tsx"
|
|
15
|
+
]);
|
|
16
|
+
const MAX_SOURCE_FILE_BYTES = 4 * 1024 * 1024;
|
|
17
|
+
const MAX_SOURCE_FILES = 100_000;
|
|
18
|
+
const MAX_TOTAL_SOURCE_BYTES = 512 * 1024 * 1024;
|
|
19
|
+
const READ_CONCURRENCY = 32;
|
|
20
|
+
function inputError(code, message, phase) {
|
|
21
|
+
throw new CapabilityInputError({ code, message, phase, retryable: false });
|
|
22
|
+
}
|
|
23
|
+
function toPosixPath(path) {
|
|
24
|
+
return path.split(sep).join("/");
|
|
25
|
+
}
|
|
26
|
+
function portablePathIdentity(path) {
|
|
27
|
+
return path.normalize("NFC").toLocaleLowerCase("en-US");
|
|
28
|
+
}
|
|
29
|
+
function isContained(parent, candidate) {
|
|
30
|
+
const relation = relative(parent, candidate);
|
|
31
|
+
return (relation === "" ||
|
|
32
|
+
(!isAbsolute(relation) && relation !== ".." && !relation.startsWith(`..${sep}`)));
|
|
33
|
+
}
|
|
34
|
+
async function containedDirectory(canonicalRoot, repositoryPath) {
|
|
35
|
+
assertRepositoryRelativePath(repositoryPath, "source-discovery");
|
|
36
|
+
const candidate = resolve(canonicalRoot, repositoryPath);
|
|
37
|
+
if (await pathTraversesSymbolicLink(canonicalRoot, candidate)) {
|
|
38
|
+
inputError("SOURCE_SYMLINK_PROHIBITED", `Governed source roots cannot be symbolic links: ${repositoryPath}.`, "source-discovery");
|
|
39
|
+
}
|
|
40
|
+
let canonicalCandidate;
|
|
41
|
+
try {
|
|
42
|
+
canonicalCandidate = await realpath(candidate);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
inputError("SOURCE_DIRECTORY_UNAVAILABLE", `Required source directory is unavailable: ${repositoryPath}.`, "source-discovery");
|
|
46
|
+
}
|
|
47
|
+
if (!isContained(canonicalRoot, canonicalCandidate)) {
|
|
48
|
+
inputError("SOURCE_DIRECTORY_ESCAPE", `Source directory escapes the consumer repository: ${repositoryPath}.`, "source-discovery");
|
|
49
|
+
}
|
|
50
|
+
if (!(await stat(canonicalCandidate)).isDirectory()) {
|
|
51
|
+
inputError("SOURCE_DIRECTORY_INVALID", `Source path must be a directory: ${repositoryPath}.`, "source-discovery");
|
|
52
|
+
}
|
|
53
|
+
return canonicalCandidate;
|
|
54
|
+
}
|
|
55
|
+
async function discoverSourcePaths(canonicalRoot, governedRoots, signal) {
|
|
56
|
+
const paths = [];
|
|
57
|
+
for (const governedRoot of governedRoots) {
|
|
58
|
+
const absoluteSourceRoot = await containedDirectory(canonicalRoot, governedRoot);
|
|
59
|
+
const directories = [absoluteSourceRoot];
|
|
60
|
+
while (directories.length > 0) {
|
|
61
|
+
assertNotCancelled(signal);
|
|
62
|
+
const directoryPath = directories.pop();
|
|
63
|
+
if (directoryPath === undefined) {
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
const directory = await opendir(directoryPath);
|
|
67
|
+
for await (const entry of directory) {
|
|
68
|
+
assertNotCancelled(signal);
|
|
69
|
+
const absoluteEntry = join(directoryPath, entry.name);
|
|
70
|
+
if (entry.isSymbolicLink()) {
|
|
71
|
+
inputError("SOURCE_SYMLINK_PROHIBITED", `Source trees cannot contain symbolic links: ${toPosixPath(relative(canonicalRoot, absoluteEntry))}.`, "source-discovery");
|
|
72
|
+
}
|
|
73
|
+
if (entry.isDirectory()) {
|
|
74
|
+
directories.push(absoluteEntry);
|
|
75
|
+
}
|
|
76
|
+
else if (entry.isFile() && SOURCE_EXTENSIONS.has(posix.extname(entry.name))) {
|
|
77
|
+
paths.push(toPosixPath(relative(canonicalRoot, absoluteEntry)));
|
|
78
|
+
if (paths.length > MAX_SOURCE_FILES) {
|
|
79
|
+
inputError("SOURCE_FILE_LIMIT_EXCEEDED", `Governed source contains more than ${MAX_SOURCE_FILES} files.`, "source-discovery");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const uniquePaths = [...new Set(paths)].toSorted();
|
|
86
|
+
const caseFoldedPaths = new Map();
|
|
87
|
+
for (const path of uniquePaths) {
|
|
88
|
+
const caseFolded = portablePathIdentity(path);
|
|
89
|
+
const existing = caseFoldedPaths.get(caseFolded);
|
|
90
|
+
if (existing !== undefined && existing !== path) {
|
|
91
|
+
inputError("SOURCE_PATH_CASE_COLLISION", `Source paths differ only by letter case: ${existing} and ${path}.`, "source-discovery");
|
|
92
|
+
}
|
|
93
|
+
caseFoldedPaths.set(caseFolded, path);
|
|
94
|
+
}
|
|
95
|
+
return uniquePaths;
|
|
96
|
+
}
|
|
97
|
+
async function readSourceFiles(canonicalRoot, paths, signal) {
|
|
98
|
+
const files = [];
|
|
99
|
+
let totalBytes = 0;
|
|
100
|
+
for (let index = 0; index < paths.length; index += READ_CONCURRENCY) {
|
|
101
|
+
const loaded = await Promise.all(paths.slice(index, index + READ_CONCURRENCY).map(async (path) => {
|
|
102
|
+
assertNotCancelled(signal);
|
|
103
|
+
const absolutePath = resolve(canonicalRoot, path);
|
|
104
|
+
const metadata = await lstat(absolutePath);
|
|
105
|
+
if (!metadata.isFile() ||
|
|
106
|
+
metadata.isSymbolicLink() ||
|
|
107
|
+
metadata.size > MAX_SOURCE_FILE_BYTES) {
|
|
108
|
+
inputError("SOURCE_FILE_INVALID", `Source must be a regular file no larger than ${MAX_SOURCE_FILE_BYTES} bytes: ${path}.`, "source-read");
|
|
109
|
+
}
|
|
110
|
+
const source = await readFile(absolutePath, "utf8");
|
|
111
|
+
if (source.includes("\0")) {
|
|
112
|
+
inputError("SOURCE_FILE_INVALID", `Source file contains prohibited NUL bytes: ${path}.`, "source-read");
|
|
113
|
+
}
|
|
114
|
+
return { path, source, bytes: metadata.size };
|
|
115
|
+
}));
|
|
116
|
+
for (const file of loaded) {
|
|
117
|
+
totalBytes += file.bytes;
|
|
118
|
+
if (totalBytes > MAX_TOTAL_SOURCE_BYTES) {
|
|
119
|
+
inputError("SOURCE_SIZE_LIMIT_EXCEEDED", `Governed source exceeds ${MAX_TOTAL_SOURCE_BYTES} bytes.`, "source-read");
|
|
120
|
+
}
|
|
121
|
+
files.push({ path: file.path, source: file.source });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return files;
|
|
125
|
+
}
|
|
126
|
+
export class FilesystemSourceTreeReader {
|
|
127
|
+
async read(consumerRoot, governedRoots, signal) {
|
|
128
|
+
assertNotCancelled(signal);
|
|
129
|
+
const canonicalRoot = await realpath(consumerRoot).catch(() => inputError("CONSUMER_ROOT_UNAVAILABLE", "Consumer root must be an existing accessible directory.", "source-workspace"));
|
|
130
|
+
return readSourceFiles(canonicalRoot, await discoverSourcePaths(canonicalRoot, governedRoots, signal), signal);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=filesystem-source-tree-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-source-tree-reader.js","sourceRoot":"","sources":["../../../../../../src/capabilities/source-dependencies/adapters/outbound/filesystem/filesystem-source-tree-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ResolvedSourceDependency } from "../../../application/model/source-workspace.js";
|
|
2
|
+
import type { ResolveSourceDependencyInput, SourceDependencyResolver } from "../../../application/ports/source-dependency-resolver.js";
|
|
3
|
+
export declare class NodeSourceDependencyResolver implements SourceDependencyResolver {
|
|
4
|
+
resolve(input: ResolveSourceDependencyInput): ResolvedSourceDependency;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=node-source-dependency-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-source-dependency-resolver.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/source-dependencies/adapters/outbound/node/node-source-dependency-resolver.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EACV,4BAA4B,EAC5B,wBAAwB,EACzB,MAAM,0DAA0D,CAAC;AAmLlE,qBAAa,4BAA6B,YAAW,wBAAwB;IAC3E,OAAO,CAAC,KAAK,EAAE,4BAA4B,GAAG,wBAAwB,CAIrE;CACF"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { builtinModules } from "node:module";
|
|
2
|
+
import { posix } from "node:path";
|
|
3
|
+
const BUILTINS = new Set(builtinModules.flatMap((name) => [
|
|
4
|
+
name,
|
|
5
|
+
name.startsWith("node:") ? name.slice(5) : `node:${name}`
|
|
6
|
+
]));
|
|
7
|
+
const SOURCE_EXTENSIONS = [
|
|
8
|
+
".cjs",
|
|
9
|
+
".cts",
|
|
10
|
+
".js",
|
|
11
|
+
".jsx",
|
|
12
|
+
".mjs",
|
|
13
|
+
".mts",
|
|
14
|
+
".ts",
|
|
15
|
+
".tsx"
|
|
16
|
+
];
|
|
17
|
+
function packageNameFromSpecifier(specifier) {
|
|
18
|
+
if (specifier.startsWith("@")) {
|
|
19
|
+
const segments = specifier.split("/");
|
|
20
|
+
return segments.length >= 2 && segments[0] !== "" && segments[1] !== ""
|
|
21
|
+
? `${segments[0]}/${segments[1]}`
|
|
22
|
+
: undefined;
|
|
23
|
+
}
|
|
24
|
+
const [name] = specifier.split("/");
|
|
25
|
+
return name === undefined || name.length === 0 ? undefined : name;
|
|
26
|
+
}
|
|
27
|
+
function declarationKind(declarations, packageName) {
|
|
28
|
+
const matching = declarations.filter((declaration) => declaration.dependencyName === packageName);
|
|
29
|
+
if (matching.some((declaration) => declaration.section === "dependencies" ||
|
|
30
|
+
declaration.section === "optionalDependencies" ||
|
|
31
|
+
declaration.section === "peerDependencies")) {
|
|
32
|
+
return "runtime";
|
|
33
|
+
}
|
|
34
|
+
return matching.some((declaration) => declaration.section === "devDependencies")
|
|
35
|
+
? "development"
|
|
36
|
+
: "undeclared";
|
|
37
|
+
}
|
|
38
|
+
function candidateLocalPaths(importerPath, specifier) {
|
|
39
|
+
const base = posix.normalize(posix.join(posix.dirname(importerPath), specifier));
|
|
40
|
+
const extension = posix.extname(base);
|
|
41
|
+
const candidates = new Set([base]);
|
|
42
|
+
if (extension === ".js") {
|
|
43
|
+
candidates.add(`${base.slice(0, -3)}.ts`);
|
|
44
|
+
candidates.add(`${base.slice(0, -3)}.tsx`);
|
|
45
|
+
}
|
|
46
|
+
else if (extension === ".mjs") {
|
|
47
|
+
candidates.add(`${base.slice(0, -4)}.mts`);
|
|
48
|
+
}
|
|
49
|
+
else if (extension === ".cjs") {
|
|
50
|
+
candidates.add(`${base.slice(0, -4)}.cts`);
|
|
51
|
+
}
|
|
52
|
+
else if (extension.length === 0) {
|
|
53
|
+
for (const sourceExtension of SOURCE_EXTENSIONS) {
|
|
54
|
+
candidates.add(`${base}${sourceExtension}`);
|
|
55
|
+
candidates.add(posix.join(base, `index${sourceExtension}`));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return [...candidates];
|
|
59
|
+
}
|
|
60
|
+
function pathInside(path, root) {
|
|
61
|
+
return root === "." || path === root || path.startsWith(`${root}/`);
|
|
62
|
+
}
|
|
63
|
+
function containingPackage(path, packages) {
|
|
64
|
+
return packages
|
|
65
|
+
.filter((workspacePackage) => pathInside(path, workspacePackage.rootPath))
|
|
66
|
+
.toSorted((left, right) => right.rootPath.length - left.rootPath.length ||
|
|
67
|
+
left.name.localeCompare(right.name))[0];
|
|
68
|
+
}
|
|
69
|
+
function matchesExport(entry, subpath) {
|
|
70
|
+
if (!entry.subpath.includes("*")) {
|
|
71
|
+
return entry.subpath === subpath;
|
|
72
|
+
}
|
|
73
|
+
const [prefix, suffix] = entry.subpath.split("*");
|
|
74
|
+
return (prefix !== undefined &&
|
|
75
|
+
suffix !== undefined &&
|
|
76
|
+
subpath.startsWith(prefix) &&
|
|
77
|
+
subpath.endsWith(suffix) &&
|
|
78
|
+
subpath.length >= prefix.length + suffix.length);
|
|
79
|
+
}
|
|
80
|
+
function subpathExported(target, subpath) {
|
|
81
|
+
if (!target.exportSurface.explicit) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
const matching = target.exportSurface.entries
|
|
85
|
+
.filter((entry) => matchesExport(entry, subpath))
|
|
86
|
+
.toSorted((left, right) => {
|
|
87
|
+
const leftExact = left.subpath.includes("*") ? 0 : 1;
|
|
88
|
+
const rightExact = right.subpath.includes("*") ? 0 : 1;
|
|
89
|
+
return rightExact - leftExact || right.subpath.length - left.subpath.length;
|
|
90
|
+
});
|
|
91
|
+
return matching[0]?.availability === "available";
|
|
92
|
+
}
|
|
93
|
+
function resolveLocal(input) {
|
|
94
|
+
if (input.reference.specifier.includes("?") || input.reference.specifier.includes("#")) {
|
|
95
|
+
return {
|
|
96
|
+
kind: "unsupported",
|
|
97
|
+
reason: "relative specifiers with query strings or fragments are unsupported"
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const matching = candidateLocalPaths(input.file.path, input.reference.specifier).filter((path) => input.governedFilePaths.has(path));
|
|
101
|
+
if (matching.length !== 1) {
|
|
102
|
+
return {
|
|
103
|
+
kind: "unresolved",
|
|
104
|
+
reason: `local reference resolved to ${matching.length} governed files`
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const path = matching[0];
|
|
108
|
+
const workspacePackage = path === undefined
|
|
109
|
+
? undefined
|
|
110
|
+
: containingPackage(path, input.inventory.packages);
|
|
111
|
+
return path === undefined || workspacePackage === undefined
|
|
112
|
+
? { kind: "unresolved", reason: "local target has no workspace package" }
|
|
113
|
+
: { kind: "local-file", path, workspacePackage };
|
|
114
|
+
}
|
|
115
|
+
function resolvePackage(input) {
|
|
116
|
+
const specifier = input.reference.specifier;
|
|
117
|
+
if (BUILTINS.has(specifier)) {
|
|
118
|
+
return {
|
|
119
|
+
kind: "builtin",
|
|
120
|
+
specifier: specifier.startsWith("node:") ? specifier : `node:${specifier}`
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
if (specifier.startsWith("#") || specifier.startsWith("/") || specifier.includes(":")) {
|
|
124
|
+
return { kind: "unsupported", reason: "unsupported package or URL specifier" };
|
|
125
|
+
}
|
|
126
|
+
const packageName = packageNameFromSpecifier(specifier);
|
|
127
|
+
if (packageName === undefined) {
|
|
128
|
+
return { kind: "unsupported", reason: "invalid package specifier" };
|
|
129
|
+
}
|
|
130
|
+
const target = input.inventory.packages.find((workspacePackage) => workspacePackage.name === packageName);
|
|
131
|
+
const declaration = declarationKind(input.file.workspacePackage.dependencies, packageName);
|
|
132
|
+
if (target === undefined) {
|
|
133
|
+
return { kind: "external-package", packageName, declaration };
|
|
134
|
+
}
|
|
135
|
+
const subpath = specifier === packageName ? "." : `.${specifier.slice(packageName.length)}`;
|
|
136
|
+
return {
|
|
137
|
+
kind: "workspace-package",
|
|
138
|
+
workspacePackage: target,
|
|
139
|
+
declaration,
|
|
140
|
+
exported: subpathExported(target, subpath),
|
|
141
|
+
subpath
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
export class NodeSourceDependencyResolver {
|
|
145
|
+
resolve(input) {
|
|
146
|
+
return input.reference.specifier.startsWith(".")
|
|
147
|
+
? resolveLocal(input)
|
|
148
|
+
: resolvePackage(input);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=node-source-dependency-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-source-dependency-resolver.js","sourceRoot":"","sources":["../../../../../../src/capabilities/source-dependencies/adapters/outbound/node/node-source-dependency-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAelC,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IAC/B,IAAI;IACJ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE;CAC1D,CAAC,CACH,CAAC;AACF,MAAM,iBAAiB,GAAG;IACxB,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;CACE,CAAC;AAEX,SAAS,wBAAwB,CAAC,SAAiB;IACjD,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE;YACrE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;YACjC,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC;AAED,SAAS,eAAe,CACtB,YAA8C,EAC9C,WAAmB;IAEnB,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAClC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,cAAc,KAAK,WAAW,CAC5D,CAAC;IACF,IACE,QAAQ,CAAC,IAAI,CACX,CAAC,WAAW,EAAE,EAAE,CACd,WAAW,CAAC,OAAO,KAAK,cAAc;QACtC,WAAW,CAAC,OAAO,KAAK,sBAAsB;QAC9C,WAAW,CAAC,OAAO,KAAK,kBAAkB,CAC7C,EACD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,KAAK,iBAAiB,CAAC;QAC9E,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,YAAY,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,YAAoB,EAAE,SAAiB;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QAChC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QAChC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,KAAK,MAAM,eAAe,IAAI,iBAAiB,EAAE,CAAC;YAChD,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,eAAe,EAAE,CAAC,CAAC;YAC5C,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,eAAe,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY;IAC5C,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAY,EACZ,QAAqC;IAErC,OAAO,QAAQ;SACZ,MAAM,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;SACzE,QAAQ,CACP,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;QAC5C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CACtC,CAAC,CAAC,CAAC,CAAC;AACT,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB,EAAE,OAAe;IAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC;IACnC,CAAC;IACD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,OAAO,CACL,MAAM,KAAK,SAAS;QACpB,MAAM,KAAK,SAAS;QACpB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxB,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAChD,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAwB,EAAE,OAAe;IAChE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO;SAC1C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SAChD,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,UAAU,GAAG,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC9E,CAAC,CAAC,CAAC;IACL,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK,WAAW,CAAC;AACnD,CAAC;AAED,SAAS,YAAY,CAAC,KAAmC;IACvD,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvF,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,qEAAqE;SAC9E,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAClC,KAAK,CAAC,IAAI,CAAC,IAAI,EACf,KAAK,CAAC,SAAS,CAAC,SAAS,CAC1B,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,+BAA+B,QAAQ,CAAC,MAAM,iBAAiB;SACxE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,gBAAgB,GACpB,IAAI,KAAK,SAAS;QAChB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACxD,OAAO,IAAI,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS;QACzD,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,uCAAuC,EAAE;QACzE,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,KAAmC;IACzD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC;IAC5C,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,SAAS,EAAE;SAC3E,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtF,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC;IACjF,CAAC;IACD,MAAM,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtE,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAC1C,CAAC,gBAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,KAAK,WAAW,CAC5D,CAAC;IACF,MAAM,WAAW,GAAG,eAAe,CACjC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EACxC,WAAW,CACZ,CAAC;IACF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IAChE,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5F,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,gBAAgB,EAAE,MAAM;QACxB,WAAW;QACX,QAAQ,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC;QAC1C,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,4BAA4B;IACvC,OAAO,CAAC,KAAmC;QACzC,OAAO,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;YAC9C,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;YACrB,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ParsedSourceDependencies, SourceFileSnapshot } from "../../../application/model/source-workspace.js";
|
|
2
|
+
import type { SourceDependencyParser } from "../../../application/ports/source-dependency-parser.js";
|
|
3
|
+
export declare class OxcSourceDependencyParser implements SourceDependencyParser {
|
|
4
|
+
parse(file: SourceFileSnapshot): ParsedSourceDependencies;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=oxc-source-dependency-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oxc-source-dependency-parser.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/source-dependencies/adapters/outbound/oxc/oxc-source-dependency-parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,wBAAwB,EAGxB,kBAAkB,EAEnB,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wDAAwD,CAAC;AAkBrG,qBAAa,yBAA0B,YAAW,sBAAsB;IACtE,KAAK,CAAC,IAAI,EAAE,kBAAkB,GAAG,wBAAwB,CAoGxD;CACF"}
|
package/dist/capabilities/source-dependencies/adapters/outbound/oxc/oxc-source-dependency-parser.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { parseSync, Visitor } from "oxc-parser";
|
|
2
|
+
function reference(kind, literal) {
|
|
3
|
+
return typeof literal.value === "string"
|
|
4
|
+
? { kind, specifier: literal.value, start: literal.start, end: literal.end }
|
|
5
|
+
: undefined;
|
|
6
|
+
}
|
|
7
|
+
function unresolved(kind, node) {
|
|
8
|
+
return { kind, start: node.start, end: node.end };
|
|
9
|
+
}
|
|
10
|
+
export class OxcSourceDependencyParser {
|
|
11
|
+
parse(file) {
|
|
12
|
+
const parsed = parseSync(file.path, file.source, { astType: "ts" });
|
|
13
|
+
if (parsed.errors.length > 0) {
|
|
14
|
+
return {
|
|
15
|
+
parseErrorCount: parsed.errors.length,
|
|
16
|
+
references: [],
|
|
17
|
+
unresolved: []
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const references = [];
|
|
21
|
+
const unresolvedReferences = [];
|
|
22
|
+
const addReference = (kind, literal) => {
|
|
23
|
+
const candidate = reference(kind, literal);
|
|
24
|
+
if (candidate !== undefined) {
|
|
25
|
+
references.push(candidate);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const visitor = new Visitor({
|
|
29
|
+
CallExpression(node) {
|
|
30
|
+
if (node.callee.type !== "Identifier" || node.callee.name !== "require") {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const argument = node.arguments[0];
|
|
34
|
+
if (argument?.type === "Literal" && typeof argument.value === "string") {
|
|
35
|
+
addReference("commonjs", argument);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
unresolvedReferences.push(unresolved("commonjs", node));
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
ExportAllDeclaration(node) {
|
|
42
|
+
addReference(node.exportKind === "type" ? "export-type" : "export", node.source);
|
|
43
|
+
},
|
|
44
|
+
ExportNamedDeclaration(node) {
|
|
45
|
+
if (node.source === null) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const typeOnly = node.exportKind === "type" ||
|
|
49
|
+
(node.specifiers.length > 0 &&
|
|
50
|
+
node.specifiers.every((specifier) => specifier.exportKind === "type"));
|
|
51
|
+
addReference(typeOnly ? "export-type" : "export", node.source);
|
|
52
|
+
},
|
|
53
|
+
ImportDeclaration(node) {
|
|
54
|
+
const typeOnly = node.importKind === "type" ||
|
|
55
|
+
(node.specifiers.length > 0 &&
|
|
56
|
+
node.specifiers.every((specifier) => specifier.type === "ImportSpecifier" &&
|
|
57
|
+
specifier.importKind === "type"));
|
|
58
|
+
addReference(typeOnly ? "static-type" : "static", node.source);
|
|
59
|
+
},
|
|
60
|
+
ImportExpression(node) {
|
|
61
|
+
if (node.source.type === "Literal" && typeof node.source.value === "string") {
|
|
62
|
+
addReference("dynamic", node.source);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
unresolvedReferences.push(unresolved("dynamic", node));
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
TSImportEqualsDeclaration(node) {
|
|
69
|
+
if (node.moduleReference.type !== "TSExternalModuleReference") {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const expression = node.moduleReference.expression;
|
|
73
|
+
if (typeof expression.value === "string") {
|
|
74
|
+
addReference(node.importKind === "type" ? "import-equals-type" : "import-equals", expression);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
TSImportType(node) {
|
|
78
|
+
if (typeof node.source.value === "string") {
|
|
79
|
+
addReference("type-query", node.source);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
unresolvedReferences.push(unresolved("type-query", node));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
visitor.visit(parsed.program);
|
|
87
|
+
return {
|
|
88
|
+
parseErrorCount: 0,
|
|
89
|
+
references: references.toSorted((left, right) => left.start - right.start ||
|
|
90
|
+
left.kind.localeCompare(right.kind) ||
|
|
91
|
+
left.specifier.localeCompare(right.specifier)),
|
|
92
|
+
unresolved: unresolvedReferences.toSorted((left, right) => left.start - right.start || left.kind.localeCompare(right.kind))
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=oxc-source-dependency-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oxc-source-dependency-parser.js","sourceRoot":"","sources":["../../../../../../src/capabilities/source-dependencies/adapters/outbound/oxc/oxc-source-dependency-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAWhD,SAAS,SAAS,CAChB,IAA0B,EAC1B,OAAkF;IAElF,OAAO,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;QACtC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAC5E,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CACjB,IAAwC,EACxC,IAAsD;IAEtD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,OAAO,yBAAyB;IACpC,KAAK,CAAC,IAAwB;QAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;gBACrC,UAAU,EAAE,EAAE;gBACd,UAAU,EAAE,EAAE;aACf,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAgC,EAAE,CAAC;QACnD,MAAM,oBAAoB,GAAiC,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,CACnB,IAA0B,EAC1B,OAAkF,EAClF,EAAE;YACF,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;YAC1B,cAAc,CAAC,IAAI;gBACjB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACxE,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,QAAQ,EAAE,IAAI,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACvE,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACrC,CAAC;qBAAM,CAAC;oBACN,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;YACD,oBAAoB,CAAC,IAAI;gBACvB,YAAY,CACV,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EACrD,IAAI,CAAC,MAAM,CACZ,CAAC;YACJ,CAAC;YACD,sBAAsB,CAAC,IAAI;gBACzB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;oBACzB,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GACZ,IAAI,CAAC,UAAU,KAAK,MAAM;oBAC1B,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;wBACzB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC;gBAC3E,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACjE,CAAC;YACD,iBAAiB,CAAC,IAAI;gBACpB,MAAM,QAAQ,GACZ,IAAI,CAAC,UAAU,KAAK,MAAM;oBAC1B,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;wBACzB,IAAI,CAAC,UAAU,CAAC,KAAK,CACnB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,IAAI,KAAK,iBAAiB;4BACpC,SAAS,CAAC,UAAU,KAAK,MAAM,CAClC,CAAC,CAAC;gBACP,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACjE,CAAC;YACD,gBAAgB,CAAC,IAAI;gBACnB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC5E,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACN,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YACD,yBAAyB,CAAC,IAAI;gBAC5B,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;oBAC9D,OAAO;gBACT,CAAC;gBACD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;gBACnD,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACzC,YAAY,CACV,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,eAAe,EACnE,UAAU,CACX,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,YAAY,CAAC,IAAI;gBACf,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC1C,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO;YACL,eAAe,EAAE,CAAC;YAClB,UAAU,EAAE,UAAU,CAAC,QAAQ,CAC7B,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;gBACxB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAChD;YACD,UAAU,EAAE,oBAAoB,CAAC,QAAQ,CACvC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CACjF;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { WorkspacePackage } from "../../../../workspace-inventory/application/model/workspace-inventory.js";
|
|
2
|
+
declare const SOURCE_DEPENDENCY_KINDS: readonly ["commonjs", "dynamic", "export", "export-type", "import-equals", "import-equals-type", "static", "static-type", "type-query"];
|
|
3
|
+
export type SourceDependencyKind = (typeof SOURCE_DEPENDENCY_KINDS)[number];
|
|
4
|
+
export interface SourceDependencyReference {
|
|
5
|
+
readonly kind: SourceDependencyKind;
|
|
6
|
+
readonly specifier: string;
|
|
7
|
+
readonly start: number;
|
|
8
|
+
readonly end: number;
|
|
9
|
+
}
|
|
10
|
+
export interface UnresolvedSourceDependency {
|
|
11
|
+
readonly kind: "commonjs" | "dynamic" | "type-query";
|
|
12
|
+
readonly start: number;
|
|
13
|
+
readonly end: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ParsedSourceDependencies {
|
|
16
|
+
readonly parseErrorCount: number;
|
|
17
|
+
readonly references: readonly SourceDependencyReference[];
|
|
18
|
+
readonly unresolved: readonly UnresolvedSourceDependency[];
|
|
19
|
+
}
|
|
20
|
+
export interface SourceFileSnapshot {
|
|
21
|
+
readonly path: string;
|
|
22
|
+
readonly source: string;
|
|
23
|
+
}
|
|
24
|
+
interface ParsedSourceFile extends SourceFileSnapshot {
|
|
25
|
+
readonly parsed: ParsedSourceDependencies;
|
|
26
|
+
}
|
|
27
|
+
export interface ArchitectureBoundaryPolicy {
|
|
28
|
+
readonly id: string;
|
|
29
|
+
readonly roots: readonly string[];
|
|
30
|
+
readonly allowedBoundaries: readonly string[];
|
|
31
|
+
readonly allowedPackages: readonly string[];
|
|
32
|
+
readonly allowedBuiltins: readonly string[];
|
|
33
|
+
readonly allowedRuntimeReferences: readonly UnresolvedSourceDependency["kind"][];
|
|
34
|
+
}
|
|
35
|
+
export interface SourceArchitecturePolicy {
|
|
36
|
+
readonly workspaceManifestPath: "pnpm-workspace.yaml";
|
|
37
|
+
readonly governedRoots: readonly string[];
|
|
38
|
+
readonly boundaries: readonly ArchitectureBoundaryPolicy[];
|
|
39
|
+
}
|
|
40
|
+
export interface ClassifiedSourceFile extends ParsedSourceFile {
|
|
41
|
+
readonly boundary: ArchitectureBoundaryPolicy;
|
|
42
|
+
readonly workspacePackage: WorkspacePackage;
|
|
43
|
+
}
|
|
44
|
+
export type ResolvedSourceDependency = {
|
|
45
|
+
readonly kind: "builtin";
|
|
46
|
+
readonly specifier: string;
|
|
47
|
+
} | {
|
|
48
|
+
readonly kind: "external-package";
|
|
49
|
+
readonly packageName: string;
|
|
50
|
+
readonly declaration: "development" | "runtime" | "undeclared";
|
|
51
|
+
} | {
|
|
52
|
+
readonly kind: "local-file";
|
|
53
|
+
readonly path: string;
|
|
54
|
+
readonly workspacePackage: WorkspacePackage;
|
|
55
|
+
} | {
|
|
56
|
+
readonly kind: "unsupported";
|
|
57
|
+
readonly reason: string;
|
|
58
|
+
} | {
|
|
59
|
+
readonly kind: "unresolved";
|
|
60
|
+
readonly reason: string;
|
|
61
|
+
} | {
|
|
62
|
+
readonly kind: "workspace-package";
|
|
63
|
+
readonly workspacePackage: WorkspacePackage;
|
|
64
|
+
readonly declaration: "development" | "runtime" | "undeclared";
|
|
65
|
+
readonly exported: boolean;
|
|
66
|
+
readonly subpath: string;
|
|
67
|
+
};
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=source-workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-workspace.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/source-dependencies/application/model/source-workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-workspace.js","sourceRoot":"","sources":["../../../../../src/capabilities/source-dependencies/application/model/source-workspace.ts"],"names":[],"mappings":"AAEA,MAAM,uBAAuB,GAAG;IAC9B,UAAU;IACV,SAAS;IACT,QAAQ;IACR,aAAa;IACb,eAAe;IACf,oBAAoB;IACpB,QAAQ;IACR,aAAa;IACb,YAAY;CACJ,CAAC"}
|
package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FoundationDiagnostic } from "../../../../check-contract.js";
|
|
2
|
+
import type { WorkspaceInventory } from "../../../../workspace-inventory/application/model/workspace-inventory.js";
|
|
3
|
+
import type { ClassifiedSourceFile, SourceArchitecturePolicy, SourceFileSnapshot } from "../model/source-workspace.js";
|
|
4
|
+
import type { SourceDependencyResolver } from "../ports/source-dependency-resolver.js";
|
|
5
|
+
interface EvaluationInput {
|
|
6
|
+
readonly policy: SourceArchitecturePolicy;
|
|
7
|
+
readonly inventory: WorkspaceInventory;
|
|
8
|
+
readonly allSourceFiles: readonly SourceFileSnapshot[];
|
|
9
|
+
readonly classifiedFiles: readonly ClassifiedSourceFile[];
|
|
10
|
+
readonly resolver: SourceDependencyResolver;
|
|
11
|
+
}
|
|
12
|
+
export declare function evaluateSourceDependencies(input: EvaluationInput): readonly FoundationDiagnostic[];
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=evaluate-source-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate-source-dependencies.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0EAA0E,CAAC;AACnH,OAAO,KAAK,EAEV,oBAAoB,EAEpB,wBAAwB,EAExB,kBAAkB,EACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAMvF,UAAU,eAAe;IACvB,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvD,QAAQ,CAAC,eAAe,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC1D,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;CAC7C;AAqMD,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,GACrB,SAAS,oBAAoB,EAAE,CAiEjC"}
|