ioc-manifest 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/LICENSE +21 -0
- package/README.md +350 -0
- package/bin/ioc.cjs +19 -0
- package/dist/cli/ioc.d.ts +3 -0
- package/dist/cli/ioc.d.ts.map +1 -0
- package/dist/cli/ioc.js +86 -0
- package/dist/cli/ioc.js.map +1 -0
- package/dist/cli/parseIocCli.d.ts +21 -0
- package/dist/cli/parseIocCli.d.ts.map +1 -0
- package/dist/cli/parseIocCli.js +76 -0
- package/dist/cli/parseIocCli.js.map +1 -0
- package/dist/config/iocConfig.d.ts +97 -0
- package/dist/config/iocConfig.d.ts.map +1 -0
- package/dist/config/iocConfig.js +65 -0
- package/dist/config/iocConfig.js.map +1 -0
- package/dist/config/loadIocConfig.d.ts +25 -0
- package/dist/config/loadIocConfig.d.ts.map +1 -0
- package/dist/config/loadIocConfig.js +245 -0
- package/dist/config/loadIocConfig.js.map +1 -0
- package/dist/config/parseDiscoveryScanDirs.d.ts +6 -0
- package/dist/config/parseDiscoveryScanDirs.d.ts.map +1 -0
- package/dist/config/parseDiscoveryScanDirs.js +78 -0
- package/dist/config/parseDiscoveryScanDirs.js.map +1 -0
- package/dist/core/defaultImplementationSelection.d.ts +14 -0
- package/dist/core/defaultImplementationSelection.d.ts.map +1 -0
- package/dist/core/defaultImplementationSelection.js +47 -0
- package/dist/core/defaultImplementationSelection.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/manifest.d.ts +79 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +3 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/resolver.d.ts +18 -0
- package/dist/core/resolver.d.ts.map +1 -0
- package/dist/core/resolver.js +27 -0
- package/dist/core/resolver.js.map +1 -0
- package/dist/generator/contractTypeSourceFile.d.ts +16 -0
- package/dist/generator/contractTypeSourceFile.d.ts.map +1 -0
- package/dist/generator/contractTypeSourceFile.js +236 -0
- package/dist/generator/contractTypeSourceFile.js.map +1 -0
- package/dist/generator/discoverFactories/discoverFactories.d.ts +18 -0
- package/dist/generator/discoverFactories/discoverFactories.d.ts.map +1 -0
- package/dist/generator/discoverFactories/discoverFactories.js +108 -0
- package/dist/generator/discoverFactories/discoverFactories.js.map +1 -0
- package/dist/generator/discoverFactories/discoveryOutcomeTypes.d.ts +47 -0
- package/dist/generator/discoverFactories/discoveryOutcomeTypes.d.ts.map +1 -0
- package/dist/generator/discoverFactories/discoveryOutcomeTypes.js +19 -0
- package/dist/generator/discoverFactories/discoveryOutcomeTypes.js.map +1 -0
- package/dist/generator/discoverFactories/inferFactoryDependencyContracts.d.ts +11 -0
- package/dist/generator/discoverFactories/inferFactoryDependencyContracts.d.ts.map +1 -0
- package/dist/generator/discoverFactories/inferFactoryDependencyContracts.js +118 -0
- package/dist/generator/discoverFactories/inferFactoryDependencyContracts.js.map +1 -0
- package/dist/generator/discoverFactories/scanFactoryFile.d.ts +18 -0
- package/dist/generator/discoverFactories/scanFactoryFile.d.ts.map +1 -0
- package/dist/generator/discoverFactories/scanFactoryFile.js +379 -0
- package/dist/generator/discoverFactories/scanFactoryFile.js.map +1 -0
- package/dist/generator/generateManifest.d.ts +13 -0
- package/dist/generator/generateManifest.d.ts.map +1 -0
- package/dist/generator/generateManifest.js +88 -0
- package/dist/generator/generateManifest.js.map +1 -0
- package/dist/generator/iocProgramContext.d.ts +11 -0
- package/dist/generator/iocProgramContext.d.ts.map +1 -0
- package/dist/generator/iocProgramContext.js +81 -0
- package/dist/generator/iocProgramContext.js.map +1 -0
- package/dist/generator/manifestOptions.d.ts +26 -0
- package/dist/generator/manifestOptions.d.ts.map +1 -0
- package/dist/generator/manifestOptions.js +86 -0
- package/dist/generator/manifestOptions.js.map +1 -0
- package/dist/generator/manifestPaths.d.ts +94 -0
- package/dist/generator/manifestPaths.d.ts.map +1 -0
- package/dist/generator/manifestPaths.js +377 -0
- package/dist/generator/manifestPaths.js.map +1 -0
- package/dist/generator/naming.d.ts +9 -0
- package/dist/generator/naming.d.ts.map +1 -0
- package/dist/generator/naming.js +46 -0
- package/dist/generator/naming.js.map +1 -0
- package/dist/generator/resolveRegistrationPlan.d.ts +66 -0
- package/dist/generator/resolveRegistrationPlan.d.ts.map +1 -0
- package/dist/generator/resolveRegistrationPlan.js +377 -0
- package/dist/generator/resolveRegistrationPlan.js.map +1 -0
- package/dist/generator/types.d.ts +37 -0
- package/dist/generator/types.d.ts.map +1 -0
- package/dist/generator/types.js +2 -0
- package/dist/generator/types.js.map +1 -0
- package/dist/generator/writeManifest.d.ts +19 -0
- package/dist/generator/writeManifest.d.ts.map +1 -0
- package/dist/generator/writeManifest.js +405 -0
- package/dist/generator/writeManifest.js.map +1 -0
- package/dist/groups/baseTypeAssignability.d.ts +48 -0
- package/dist/groups/baseTypeAssignability.d.ts.map +1 -0
- package/dist/groups/baseTypeAssignability.js +145 -0
- package/dist/groups/baseTypeAssignability.js.map +1 -0
- package/dist/groups/resolveGroupPlan.d.ts +85 -0
- package/dist/groups/resolveGroupPlan.d.ts.map +1 -0
- package/dist/groups/resolveGroupPlan.js +215 -0
- package/dist/groups/resolveGroupPlan.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/inspection/formatReports.d.ts +14 -0
- package/dist/inspection/formatReports.d.ts.map +1 -0
- package/dist/inspection/formatReports.js +115 -0
- package/dist/inspection/formatReports.js.map +1 -0
- package/dist/inspection/index.d.ts +8 -0
- package/dist/inspection/index.d.ts.map +1 -0
- package/dist/inspection/index.js +8 -0
- package/dist/inspection/index.js.map +1 -0
- package/dist/inspection/reports.d.ts +40 -0
- package/dist/inspection/reports.d.ts.map +1 -0
- package/dist/inspection/reports.js +95 -0
- package/dist/inspection/reports.js.map +1 -0
- package/dist/inspection/runDiscoveryAnalysis.d.ts +36 -0
- package/dist/inspection/runDiscoveryAnalysis.d.ts.map +1 -0
- package/dist/inspection/runDiscoveryAnalysis.js +48 -0
- package/dist/inspection/runDiscoveryAnalysis.js.map +1 -0
- package/dist/inspection/validateManifest.d.ts +8 -0
- package/dist/inspection/validateManifest.d.ts.map +1 -0
- package/dist/inspection/validateManifest.js +46 -0
- package/dist/inspection/validateManifest.js.map +1 -0
- package/dist/runtime/bootstrap.d.ts +13 -0
- package/dist/runtime/bootstrap.d.ts.map +1 -0
- package/dist/runtime/bootstrap.js +259 -0
- package/dist/runtime/bootstrap.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/iocResolutionError.d.ts +54 -0
- package/dist/runtime/iocResolutionError.d.ts.map +1 -0
- package/dist/runtime/iocResolutionError.js +266 -0
- package/dist/runtime/iocResolutionError.js.map +1 -0
- package/dist/runtime/iocResolutionStack.d.ts +21 -0
- package/dist/runtime/iocResolutionStack.d.ts.map +1 -0
- package/dist/runtime/iocResolutionStack.js +17 -0
- package/dist/runtime/iocResolutionStack.js.map +1 -0
- package/dist/runtime/iocRuntimeErrors.d.ts +35 -0
- package/dist/runtime/iocRuntimeErrors.d.ts.map +1 -0
- package/dist/runtime/iocRuntimeErrors.js +27 -0
- package/dist/runtime/iocRuntimeErrors.js.map +1 -0
- package/dist/runtime/registrationKeyIndex.d.ts +12 -0
- package/dist/runtime/registrationKeyIndex.d.ts.map +1 -0
- package/dist/runtime/registrationKeyIndex.js +19 -0
- package/dist/runtime/registrationKeyIndex.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const toPosix = (value) => value.replace(/\\/g, "/");
|
|
4
|
+
const NODE_MODULES_MARKER = `${path.sep}node_modules${path.sep}`;
|
|
5
|
+
const DEBUG_IMPORT_SPEC = process.env.IOC_DEBUG_WORKSPACE_IMPORT_SPECS === "1";
|
|
6
|
+
const debugImportSpec = (message, detail) => {
|
|
7
|
+
if (DEBUG_IMPORT_SPEC) {
|
|
8
|
+
console.error(`[ioc][import-spec] ${message}`, detail ?? "");
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Normalizes path; if it exists on disk, follows symlinks (realpath) so workspace roots match
|
|
13
|
+
* TypeScript's resolved declaration paths.
|
|
14
|
+
*/
|
|
15
|
+
const tryRealpathIfExists = (p) => {
|
|
16
|
+
const normalized = path.normalize(p);
|
|
17
|
+
try {
|
|
18
|
+
if (fs.existsSync(normalized)) {
|
|
19
|
+
return fs.realpathSync.native(normalized);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// keep normalized path
|
|
24
|
+
}
|
|
25
|
+
return normalized;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Resolves `root` from {@link IocWorkspacePackageImportBase} to an absolute directory.
|
|
29
|
+
*
|
|
30
|
+
* When `ioc.config.ts` lives in an app package (e.g. `apps/web`), {@link projectRoot} is that
|
|
31
|
+
* package, not the monorepo root. A path like `packages/foo/src` would incorrectly resolve to
|
|
32
|
+
* `apps/web/packages/foo/src`. If that path does not exist, this walks up ancestors of
|
|
33
|
+
* `projectRoot` until `path.join(ancestor, root)` exists — typically the repo root containing
|
|
34
|
+
* `packages/`.
|
|
35
|
+
*/
|
|
36
|
+
export const resolveWorkspacePackageRoot = (projectRoot, root) => {
|
|
37
|
+
const normalizedProjectRoot = path.normalize(projectRoot);
|
|
38
|
+
const rootTrimmed = root.trim().replace(/^\.(?:\/|\\)+/, "");
|
|
39
|
+
if (path.isAbsolute(rootTrimmed)) {
|
|
40
|
+
const n = path.normalize(rootTrimmed);
|
|
41
|
+
return tryRealpathIfExists(n);
|
|
42
|
+
}
|
|
43
|
+
const direct = path.resolve(normalizedProjectRoot, rootTrimmed);
|
|
44
|
+
if (fs.existsSync(direct)) {
|
|
45
|
+
return tryRealpathIfExists(direct);
|
|
46
|
+
}
|
|
47
|
+
let dir = normalizedProjectRoot;
|
|
48
|
+
for (let i = 0; i < 16; i += 1) {
|
|
49
|
+
const candidate = path.resolve(dir, rootTrimmed);
|
|
50
|
+
if (fs.existsSync(candidate)) {
|
|
51
|
+
return tryRealpathIfExists(candidate);
|
|
52
|
+
}
|
|
53
|
+
const parent = path.dirname(dir);
|
|
54
|
+
if (parent === dir) {
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
dir = parent;
|
|
58
|
+
}
|
|
59
|
+
return direct;
|
|
60
|
+
};
|
|
61
|
+
const normalizeGlobPath = (p) => p.replaceAll(path.sep, "/");
|
|
62
|
+
export const resolveScanDirEntries = (projectRoot, specs) => specs.map((s) => {
|
|
63
|
+
const absPath = path.isAbsolute(s.path)
|
|
64
|
+
? path.normalize(s.path)
|
|
65
|
+
: path.resolve(projectRoot, s.path);
|
|
66
|
+
const base = {
|
|
67
|
+
absPath,
|
|
68
|
+
...(s.scope !== undefined ? { scope: s.scope } : {}),
|
|
69
|
+
};
|
|
70
|
+
if (s.importPrefix !== undefined && s.importMode !== undefined) {
|
|
71
|
+
return {
|
|
72
|
+
...base,
|
|
73
|
+
importPrefix: s.importPrefix,
|
|
74
|
+
importMode: s.importMode,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return base;
|
|
78
|
+
});
|
|
79
|
+
export const findResolvedScanDirForFile = (absFile, entries) => {
|
|
80
|
+
const normFile = path.normalize(absFile);
|
|
81
|
+
let best;
|
|
82
|
+
let bestRootLen = -1;
|
|
83
|
+
for (const e of entries) {
|
|
84
|
+
const root = path.normalize(e.absPath);
|
|
85
|
+
const rel = path.relative(root, normFile);
|
|
86
|
+
if (!rel.startsWith("..") && !path.isAbsolute(rel)) {
|
|
87
|
+
if (root.length > bestRootLen) {
|
|
88
|
+
bestRootLen = root.length;
|
|
89
|
+
best = e;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return best;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Default registration lifetime from the most specific `discovery.scanDirs` root containing the
|
|
97
|
+
* factory file. Throws when multiple roots tie for specificity with different paths or conflicting
|
|
98
|
+
* `scope` on duplicate entries.
|
|
99
|
+
*/
|
|
100
|
+
export const resolveDiscoveryRootDefaultLifetime = (factoryAbsPath, scanDirs) => {
|
|
101
|
+
const normFile = path.normalize(factoryAbsPath);
|
|
102
|
+
const containing = scanDirs.filter((e) => {
|
|
103
|
+
const root = path.normalize(e.absPath);
|
|
104
|
+
const rel = path.relative(root, normFile);
|
|
105
|
+
return !rel.startsWith("..") && !path.isAbsolute(rel);
|
|
106
|
+
});
|
|
107
|
+
if (containing.length === 0) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
const maxLen = Math.max(...containing.map((e) => path.normalize(e.absPath).length));
|
|
111
|
+
const longest = containing.filter((e) => path.normalize(e.absPath).length === maxLen);
|
|
112
|
+
const uniqueRoots = [
|
|
113
|
+
...new Set(longest.map((e) => path.normalize(e.absPath))),
|
|
114
|
+
];
|
|
115
|
+
if (uniqueRoots.length > 1) {
|
|
116
|
+
throw new Error(`[ioc-config] Factory module ${JSON.stringify(normFile)} is contained in multiple discovery.scanDirs roots with equal specificity (${uniqueRoots.join(", ")}). Set discovery-root scope only when each factory maps to a single winning root, or use registrations[Contract][implementation].lifetime to disambiguate.`);
|
|
117
|
+
}
|
|
118
|
+
const definedScopes = longest
|
|
119
|
+
.map((e) => e.scope)
|
|
120
|
+
.filter((s) => s !== undefined);
|
|
121
|
+
if (definedScopes.length === 0) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
const distinct = [...new Set(definedScopes)];
|
|
125
|
+
if (distinct.length > 1) {
|
|
126
|
+
throw new Error(`[ioc-config] discovery.scanDirs lists duplicate entries for root ${JSON.stringify(uniqueRoots[0])} with conflicting scope values (${distinct.join(", ")}).`);
|
|
127
|
+
}
|
|
128
|
+
return distinct[0];
|
|
129
|
+
};
|
|
130
|
+
const useSingleLocalScanRoot = (entries) => entries.length === 1 && entries[0].importPrefix === undefined;
|
|
131
|
+
/**
|
|
132
|
+
* Stable `modulePath` for manifest indexing: relative to the sole local scan root when there is one;
|
|
133
|
+
* otherwise relative to `projectRoot` (posix) so paths stay unique.
|
|
134
|
+
*/
|
|
135
|
+
export const computeDiscoveryModulePath = (absFile, projectRoot, scanDirs) => {
|
|
136
|
+
const normalizedFile = path.normalize(absFile);
|
|
137
|
+
if (useSingleLocalScanRoot(scanDirs)) {
|
|
138
|
+
return toPosix(path.relative(path.normalize(scanDirs[0].absPath), normalizedFile));
|
|
139
|
+
}
|
|
140
|
+
return toPosix(path.relative(path.normalize(projectRoot), normalizedFile));
|
|
141
|
+
};
|
|
142
|
+
/** Resolves the absolute path of a factory module from its stored `modulePath`. */
|
|
143
|
+
export const resolveFactorySourceAbsPath = (modulePath, projectRoot, scanDirs) => {
|
|
144
|
+
if (useSingleLocalScanRoot(scanDirs)) {
|
|
145
|
+
return path.normalize(path.join(scanDirs[0].absPath, modulePath));
|
|
146
|
+
}
|
|
147
|
+
return path.normalize(path.join(projectRoot, modulePath));
|
|
148
|
+
};
|
|
149
|
+
const relativeImportFromGeneratedDir = (absFile, generatedDir) => {
|
|
150
|
+
let rel = path.relative(generatedDir, absFile);
|
|
151
|
+
rel = toPosix(rel).replace(/\.[^.]+$/, "");
|
|
152
|
+
if (!rel.startsWith(".")) {
|
|
153
|
+
rel = `./${rel}`;
|
|
154
|
+
}
|
|
155
|
+
return `${rel}.js`;
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Maps `@types/foo` / `@types/scope__name` to the runtime package name consumers import.
|
|
159
|
+
* See DefinitelyTyped naming: `@types/foo__bar` → `@foo/bar`.
|
|
160
|
+
*/
|
|
161
|
+
export const mapTypesPackageToRuntimePackage = (typesPackage) => {
|
|
162
|
+
const m = /^@types\/(.+)$/.exec(typesPackage);
|
|
163
|
+
if (!m) {
|
|
164
|
+
return typesPackage;
|
|
165
|
+
}
|
|
166
|
+
const body = m[1];
|
|
167
|
+
if (body.includes("__")) {
|
|
168
|
+
const [scope, name] = body.split("__");
|
|
169
|
+
return `@${scope}/${name}`;
|
|
170
|
+
}
|
|
171
|
+
return body;
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* When a resolved declaration file lives under `node_modules`, returns the bare package specifier
|
|
175
|
+
* (never a relative path through `node_modules`). `@types/*` maps to the typed runtime package.
|
|
176
|
+
*/
|
|
177
|
+
export const emitBarePackageSpecifierFromNodeModulesPath = (absFile) => {
|
|
178
|
+
const norm = path.normalize(absFile);
|
|
179
|
+
const idx = norm.lastIndexOf(NODE_MODULES_MARKER);
|
|
180
|
+
if (idx === -1) {
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
const rest = norm.slice(idx + NODE_MODULES_MARKER.length);
|
|
184
|
+
const segments = rest.split(path.sep).filter(Boolean);
|
|
185
|
+
if (segments.length === 0) {
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
let pkg;
|
|
189
|
+
if (segments[0].startsWith("@")) {
|
|
190
|
+
if (segments.length < 2) {
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
pkg = `${segments[0]}/${segments[1]}`;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
pkg = segments[0];
|
|
197
|
+
}
|
|
198
|
+
if (pkg.startsWith("@types/")) {
|
|
199
|
+
return mapTypesPackageToRuntimePackage(pkg);
|
|
200
|
+
}
|
|
201
|
+
return pkg;
|
|
202
|
+
};
|
|
203
|
+
const matchWorkspacePackageImportBase = (absFile, bases) => {
|
|
204
|
+
const normFile = tryRealpathIfExists(absFile);
|
|
205
|
+
let best;
|
|
206
|
+
let bestRootLen = -1;
|
|
207
|
+
for (const b of bases) {
|
|
208
|
+
const root = tryRealpathIfExists(b.absRoot);
|
|
209
|
+
const rel = path.relative(root, normFile);
|
|
210
|
+
if (!rel.startsWith("..") && !path.isAbsolute(rel)) {
|
|
211
|
+
if (root.length > bestRootLen) {
|
|
212
|
+
bestRootLen = root.length;
|
|
213
|
+
best = b;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return best;
|
|
218
|
+
};
|
|
219
|
+
const isBarePackageModuleSpecifier = (spec) => {
|
|
220
|
+
if (spec.length === 0) {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
if (spec.startsWith(".") || spec.startsWith("/")) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
if (path.isAbsolute(spec)) {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
if (spec.includes("node_modules")) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
return true;
|
|
233
|
+
};
|
|
234
|
+
/**
|
|
235
|
+
* Strips declaration-file artifacts and redundant `/index` segments from emitted specifiers.
|
|
236
|
+
* Single-segment package names (e.g. `knex`) drop `.ts`/`.js`; subpaths keep `.js` when present
|
|
237
|
+
* (workspace `importPrefix` + `subpath` mode).
|
|
238
|
+
*/
|
|
239
|
+
export const normalizeEmittedModuleSpecifier = (spec) => {
|
|
240
|
+
let s = spec;
|
|
241
|
+
s = s.replace(/\.d\.(ts|js)$/i, "");
|
|
242
|
+
if (s.startsWith(".") || s.startsWith("/")) {
|
|
243
|
+
s = s.replace(/\/index\.js$/i, ".js");
|
|
244
|
+
return s;
|
|
245
|
+
}
|
|
246
|
+
if (s.includes("/")) {
|
|
247
|
+
s = s.replace(/\/index\.js$/i, ".js");
|
|
248
|
+
s = s.replace(/\/index$/i, "");
|
|
249
|
+
return s;
|
|
250
|
+
}
|
|
251
|
+
s = s.replace(/\.(ts|js)$/i, "");
|
|
252
|
+
s = s.replace(/\/index$/i, "");
|
|
253
|
+
return s;
|
|
254
|
+
};
|
|
255
|
+
const toAbsoluteContractDeclarationPath = (raw, projectRoot) => {
|
|
256
|
+
const n = path.normalize(raw);
|
|
257
|
+
if (path.isAbsolute(n)) {
|
|
258
|
+
return n;
|
|
259
|
+
}
|
|
260
|
+
if (projectRoot !== undefined && projectRoot.length > 0) {
|
|
261
|
+
return path.normalize(path.resolve(projectRoot, n));
|
|
262
|
+
}
|
|
263
|
+
return path.normalize(path.resolve(n));
|
|
264
|
+
};
|
|
265
|
+
/**
|
|
266
|
+
* ESM import specifier for a source file as emitted next to `generatedDir` (relative path, package root, or subpath).
|
|
267
|
+
*
|
|
268
|
+
* Resolution order: optional recovered bare import → configured workspace import bases (before
|
|
269
|
+
* `node_modules`, so symlinked workspace packages resolve to `importBase`) → `node_modules`
|
|
270
|
+
* package name → scan dir `importPrefix` / `importMode` → relative path from `generatedDir`.
|
|
271
|
+
*/
|
|
272
|
+
export const computeManifestModuleSpecifier = (absFile, generatedDir, scanDirs, options) => {
|
|
273
|
+
const resolvedAbs = toAbsoluteContractDeclarationPath(absFile, options?.projectRoot);
|
|
274
|
+
const preferred = options?.preferredModuleSpecifier;
|
|
275
|
+
const workspaceBases = options?.workspacePackageImportBases;
|
|
276
|
+
if (DEBUG_IMPORT_SPEC) {
|
|
277
|
+
debugImportSpec("computeManifestModuleSpecifier", {
|
|
278
|
+
contractDeclarationFileRaw: path.normalize(absFile),
|
|
279
|
+
contractDeclarationFileResolved: resolvedAbs,
|
|
280
|
+
projectRoot: options?.projectRoot ?? null,
|
|
281
|
+
generatedDir: path.normalize(generatedDir),
|
|
282
|
+
preferredModuleSpecifier: preferred ?? null,
|
|
283
|
+
workspaceBasesCount: workspaceBases?.length ?? 0,
|
|
284
|
+
workspaceAbsRoots: workspaceBases?.map((b) => b.absRoot) ?? [],
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
if (preferred !== undefined && isBarePackageModuleSpecifier(preferred)) {
|
|
288
|
+
const out = normalizeEmittedModuleSpecifier(preferred);
|
|
289
|
+
if (DEBUG_IMPORT_SPEC) {
|
|
290
|
+
debugImportSpec("branch: preferred bare specifier", { out });
|
|
291
|
+
}
|
|
292
|
+
return out;
|
|
293
|
+
}
|
|
294
|
+
if (workspaceBases !== undefined && workspaceBases.length > 0) {
|
|
295
|
+
const hit = matchWorkspacePackageImportBase(resolvedAbs, workspaceBases);
|
|
296
|
+
if (hit !== undefined) {
|
|
297
|
+
const out = normalizeEmittedModuleSpecifier(hit.importBase);
|
|
298
|
+
if (DEBUG_IMPORT_SPEC) {
|
|
299
|
+
debugImportSpec("branch: workspacePackageImportBases", {
|
|
300
|
+
matchedImportBase: hit.importBase,
|
|
301
|
+
matchedAbsRoot: hit.absRoot,
|
|
302
|
+
out,
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
return out;
|
|
306
|
+
}
|
|
307
|
+
if (DEBUG_IMPORT_SPEC) {
|
|
308
|
+
debugImportSpec("workspacePackageImportBases: no match (declaration file not under any configured absRoot after realpath)", {
|
|
309
|
+
declarationFile: tryRealpathIfExists(resolvedAbs),
|
|
310
|
+
triedRoots: workspaceBases.map((b) => ({
|
|
311
|
+
absRoot: b.absRoot,
|
|
312
|
+
realpathRoot: tryRealpathIfExists(b.absRoot),
|
|
313
|
+
})),
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
else if (DEBUG_IMPORT_SPEC) {
|
|
318
|
+
debugImportSpec("workspacePackageImportBases: none passed (undefined or empty)");
|
|
319
|
+
}
|
|
320
|
+
const fromNode = emitBarePackageSpecifierFromNodeModulesPath(resolvedAbs);
|
|
321
|
+
if (fromNode !== undefined) {
|
|
322
|
+
const out = normalizeEmittedModuleSpecifier(fromNode);
|
|
323
|
+
if (DEBUG_IMPORT_SPEC) {
|
|
324
|
+
debugImportSpec("branch: node_modules package name", { fromNode, out });
|
|
325
|
+
}
|
|
326
|
+
return out;
|
|
327
|
+
}
|
|
328
|
+
const entry = findResolvedScanDirForFile(resolvedAbs, scanDirs);
|
|
329
|
+
if (entry?.importPrefix !== undefined && entry.importMode !== undefined) {
|
|
330
|
+
if (entry.importMode === "root") {
|
|
331
|
+
const out = normalizeEmittedModuleSpecifier(entry.importPrefix);
|
|
332
|
+
if (DEBUG_IMPORT_SPEC) {
|
|
333
|
+
debugImportSpec("branch: scanDir importPrefix root", { out });
|
|
334
|
+
}
|
|
335
|
+
return out;
|
|
336
|
+
}
|
|
337
|
+
const rel = path.relative(entry.absPath, resolvedAbs);
|
|
338
|
+
const posix = toPosix(rel).replace(/\.[^.]+$/, "");
|
|
339
|
+
const out = normalizeEmittedModuleSpecifier(`${entry.importPrefix}/${posix}.js`);
|
|
340
|
+
if (DEBUG_IMPORT_SPEC) {
|
|
341
|
+
debugImportSpec("branch: scanDir importPrefix subpath", { out });
|
|
342
|
+
}
|
|
343
|
+
return out;
|
|
344
|
+
}
|
|
345
|
+
const out = normalizeEmittedModuleSpecifier(relativeImportFromGeneratedDir(resolvedAbs, generatedDir));
|
|
346
|
+
if (DEBUG_IMPORT_SPEC) {
|
|
347
|
+
debugImportSpec("branch: relative from generatedDir (fallback)", { out });
|
|
348
|
+
}
|
|
349
|
+
return out;
|
|
350
|
+
};
|
|
351
|
+
export const resolveWorkspacePackageImportBases = (projectRoot, specs) => {
|
|
352
|
+
if (specs === undefined || specs.length === 0) {
|
|
353
|
+
return undefined;
|
|
354
|
+
}
|
|
355
|
+
const resolved = specs.map((s) => {
|
|
356
|
+
if (typeof s.root !== "string" || s.root.length === 0) {
|
|
357
|
+
throw new Error("[ioc-config] discovery.workspacePackageImportBases[].root must be a non-empty string");
|
|
358
|
+
}
|
|
359
|
+
if (typeof s.importBase !== "string" || s.importBase.length === 0) {
|
|
360
|
+
throw new Error("[ioc-config] discovery.workspacePackageImportBases[].importBase must be a non-empty string");
|
|
361
|
+
}
|
|
362
|
+
return {
|
|
363
|
+
absRoot: resolveWorkspacePackageRoot(projectRoot, s.root),
|
|
364
|
+
importBase: s.importBase,
|
|
365
|
+
};
|
|
366
|
+
});
|
|
367
|
+
return [...resolved].sort((a, b) => b.absRoot.length - a.absRoot.length);
|
|
368
|
+
};
|
|
369
|
+
/** Ignore glob for one scan root so discovery does not pick up generated output (relative to that root's `cwd`). */
|
|
370
|
+
export const generatedExcludePatternForScanRoot = (scanAbs, generatedAbs) => {
|
|
371
|
+
const rel = path.relative(path.normalize(scanAbs), path.normalize(generatedAbs));
|
|
372
|
+
if (rel.length === 0 || rel === ".") {
|
|
373
|
+
return "**/*";
|
|
374
|
+
}
|
|
375
|
+
return `${normalizeGlobPath(rel)}/**/*`;
|
|
376
|
+
};
|
|
377
|
+
//# sourceMappingURL=manifestPaths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifestPaths.js","sourceRoot":"","sources":["../../src/generator/manifestPaths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `MediaStorage` → `mediaStorage`
|
|
3
|
+
*/
|
|
4
|
+
export declare const contractNameToDefaultRegistrationKey: (contractName: string) => string;
|
|
5
|
+
/**
|
|
6
|
+
* `MediaStorage` → `mediaStorages`; `Logger` → `loggers`.
|
|
7
|
+
*/
|
|
8
|
+
export declare const contractNameToCollectionRegistrationKey: (contractName: string) => string;
|
|
9
|
+
//# sourceMappingURL=naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/generator/naming.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,oCAAoC,GAAI,cAAc,MAAM,KAAG,MAGV,CAAC;AA4BnE;;GAEG;AACH,eAAO,MAAM,uCAAuC,GAAI,cAAc,MAAM,KAAG,MAc9E,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `MediaStorage` → `mediaStorage`
|
|
3
|
+
*/
|
|
4
|
+
export const contractNameToDefaultRegistrationKey = (contractName) => contractName.length === 0
|
|
5
|
+
? contractName
|
|
6
|
+
: contractName.charAt(0).toLowerCase() + contractName.slice(1);
|
|
7
|
+
const pluralizeWord = (word) => {
|
|
8
|
+
if (word.length === 0)
|
|
9
|
+
return word;
|
|
10
|
+
const lower = word.toLowerCase();
|
|
11
|
+
const last = lower[lower.length - 1];
|
|
12
|
+
const secondLast = lower.length >= 2 ? lower[lower.length - 2] : "";
|
|
13
|
+
if (last === "y" && !"aeiou".includes(secondLast)) {
|
|
14
|
+
return word.slice(0, -1) + "ies";
|
|
15
|
+
}
|
|
16
|
+
if (last === "s" ||
|
|
17
|
+
last === "x" ||
|
|
18
|
+
(last === "h" && (secondLast === "s" || secondLast === "c"))) {
|
|
19
|
+
return word + "es";
|
|
20
|
+
}
|
|
21
|
+
return word + "s";
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Splits PascalCase / consecutive capitals into word chunks, e.g. `MediaStorage` → [`Media`,`Storage`].
|
|
25
|
+
*/
|
|
26
|
+
const splitPascalWords = (name) => {
|
|
27
|
+
const m = name.match(/([A-Z][a-z]*|[A-Z]+(?=[A-Z][a-z]|\b))/g);
|
|
28
|
+
return m ?? [name];
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* `MediaStorage` → `mediaStorages`; `Logger` → `loggers`.
|
|
32
|
+
*/
|
|
33
|
+
export const contractNameToCollectionRegistrationKey = (contractName) => {
|
|
34
|
+
const parts = splitPascalWords(contractName);
|
|
35
|
+
if (parts.length === 0) {
|
|
36
|
+
return contractNameToDefaultRegistrationKey(contractName) + "s";
|
|
37
|
+
}
|
|
38
|
+
const pluralLast = pluralizeWord(parts[parts.length - 1]);
|
|
39
|
+
const merged = [...parts.slice(0, -1), pluralLast];
|
|
40
|
+
return merged
|
|
41
|
+
.map((segment, index) => index === 0
|
|
42
|
+
? segment.charAt(0).toLowerCase() + segment.slice(1)
|
|
43
|
+
: segment.charAt(0).toUpperCase() + segment.slice(1))
|
|
44
|
+
.join("");
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/generator/naming.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,YAAoB,EAAU,EAAE,CACnF,YAAY,CAAC,MAAM,KAAK,CAAC;IACvB,CAAC,CAAC,YAAY;IACd,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnE,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE;IAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACnC,CAAC;IACD,IACE,IAAI,KAAK,GAAG;QACZ,IAAI,KAAK,GAAG;QACZ,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,CAAC,CAAC,EAC5D,CAAC;QACD,OAAO,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,GAAG,GAAG,CAAC;AACpB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAY,EAAE;IAClD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC/D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,YAAoB,EAAU,EAAE;IACtF,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,oCAAoC,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC;IAClE,CAAC;IACD,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACnD,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CACtB,KAAK,KAAK,CAAC;QACT,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CACvD;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Turns discovered factories + `ioc.config` into a stable registration plan:
|
|
3
|
+
* merge overrides, validate global Awilix key collisions and access/collection slots, resolve
|
|
4
|
+
* default implementation per contract, attach lifetimes and metadata for codegen.
|
|
5
|
+
*/
|
|
6
|
+
import { type IocConfig, type IocLifetime, type IocOverride } from "../config/iocConfig.js";
|
|
7
|
+
import type { IocConfigOverrideField } from "../core/manifest.js";
|
|
8
|
+
import { type ResolvedScanDir } from "./manifestPaths.js";
|
|
9
|
+
import type { DiscoveredFactory } from "./types.js";
|
|
10
|
+
/** Where resolved registration lifetime came from (inspect/debug only). `discovery-root` = `discovery.scanDirs[].scope`. */
|
|
11
|
+
export type IocRegistrationLifetimeSource = "factory-config" | "discovery-root" | "default";
|
|
12
|
+
export type RegistrationPlanLifetimeContext = {
|
|
13
|
+
projectRoot: string;
|
|
14
|
+
scanDirs: readonly ResolvedScanDir[];
|
|
15
|
+
};
|
|
16
|
+
export type ResolvedImplementationEntry = {
|
|
17
|
+
/** Stable implementation id from discovery (factory export / resolver map key). */
|
|
18
|
+
implementationName: string;
|
|
19
|
+
/** Awilix/container registration name (respects resolver `key` / `name`). */
|
|
20
|
+
registrationKey: string;
|
|
21
|
+
exportName: string;
|
|
22
|
+
modulePath: string;
|
|
23
|
+
relImport: string;
|
|
24
|
+
lifetime: IocLifetime;
|
|
25
|
+
/** Present when {@link buildRegistrationPlan} received a lifetime context (e.g. codegen / inspect --discovery). */
|
|
26
|
+
lifetimeSource?: IocRegistrationLifetimeSource;
|
|
27
|
+
discoveredBy?: "naming";
|
|
28
|
+
/** Fields present on the matching `ioc.config` registration override for this implementation. */
|
|
29
|
+
configOverridesApplied?: readonly IocConfigOverrideField[];
|
|
30
|
+
dependencyContractNames?: readonly string[];
|
|
31
|
+
};
|
|
32
|
+
export type ResolvedContractRegistration = {
|
|
33
|
+
contractName: string;
|
|
34
|
+
/**
|
|
35
|
+
* Type-only import specifier for the contract symbol (from discovery; same for all implementations).
|
|
36
|
+
* May be relative, bare (npm), or a workspace alias — independent of which implementation is default.
|
|
37
|
+
*/
|
|
38
|
+
contractTypeRelImport: string;
|
|
39
|
+
/**
|
|
40
|
+
* Convention key: camel-cased contract name. Used for default-selection matching
|
|
41
|
+
* (`registrationKey === contractKey`) and object-group keys — never overridden by `$contract.accessKey`.
|
|
42
|
+
*/
|
|
43
|
+
contractKey: string;
|
|
44
|
+
/**
|
|
45
|
+
* Cradle singular key / Awilix default-slot alias. Defaults to {@link contractKey}; override via
|
|
46
|
+
* `registrations[Contract][IOC_CONTRACT_CONFIG_KEY].accessKey`.
|
|
47
|
+
*/
|
|
48
|
+
accessKey: string;
|
|
49
|
+
/** Plural collection key when there is more than one implementation; otherwise undefined. */
|
|
50
|
+
collectionKey: string | undefined;
|
|
51
|
+
/** Which implementation is selected for the default contract key (implementation name). */
|
|
52
|
+
defaultImplementationName: string;
|
|
53
|
+
implementations: ResolvedImplementationEntry[];
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Maps config-only `name` into the internal `registrationKey` field; applies `lifetime` / `default`
|
|
57
|
+
* so merged {@link DiscoveredFactory} rows reflect `ioc.config` policy only (factory sources stay plain).
|
|
58
|
+
*/
|
|
59
|
+
export declare const normalizeIocOverride: (override: IocOverride) => Partial<DiscoveredFactory>;
|
|
60
|
+
export declare const validateConfigContractsExist: (config: IocConfig | undefined, contractNames: Set<string>) => void;
|
|
61
|
+
/**
|
|
62
|
+
* Produces sorted `ResolvedContractRegistration[]` used by manifest serialization and group planning.
|
|
63
|
+
* Throws on any config/discovery inconsistency (unknown contracts, duplicate defaults, key collisions).
|
|
64
|
+
*/
|
|
65
|
+
export declare const buildRegistrationPlan: (contractMap: Map<string, Map<string, DiscoveredFactory>>, config?: IocConfig, lifetimeContext?: RegistrationPlanLifetimeContext) => ResolvedContractRegistration[];
|
|
66
|
+
//# sourceMappingURL=resolveRegistrationPlan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveRegistrationPlan.d.ts","sourceRoot":"","sources":["../../src/generator/resolveRegistrationPlan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAGjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD,4HAA4H;AAC5H,MAAM,MAAM,6BAA6B,GACrC,gBAAgB,GAChB,gBAAgB,GAChB,SAAS,CAAC;AAEd,MAAM,MAAM,+BAA+B,GAAG;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,mFAAmF;IACnF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,WAAW,CAAC;IACtB,mHAAmH;IACnH,cAAc,CAAC,EAAE,6BAA6B,CAAC;IAC/C,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,iGAAiG;IACjG,sBAAsB,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC3D,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,2FAA2F;IAC3F,yBAAyB,EAAE,MAAM,CAAC;IAClC,eAAe,EAAE,2BAA2B,EAAE,CAAC;CAChD,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,WAAW,KACpB,OAAO,CAAC,iBAAiB,CAiB3B,CAAC;AAsLF,eAAO,MAAM,4BAA4B,GACvC,QAAQ,SAAS,GAAG,SAAS,EAC7B,eAAe,GAAG,CAAC,MAAM,CAAC,KACzB,IAYF,CAAC;AAiPF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,aAAa,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,EACxD,SAAS,SAAS,EAClB,kBAAkB,+BAA+B,KAChD,4BAA4B,EAyG9B,CAAC"}
|