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.
Files changed (148) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +350 -0
  3. package/bin/ioc.cjs +19 -0
  4. package/dist/cli/ioc.d.ts +3 -0
  5. package/dist/cli/ioc.d.ts.map +1 -0
  6. package/dist/cli/ioc.js +86 -0
  7. package/dist/cli/ioc.js.map +1 -0
  8. package/dist/cli/parseIocCli.d.ts +21 -0
  9. package/dist/cli/parseIocCli.d.ts.map +1 -0
  10. package/dist/cli/parseIocCli.js +76 -0
  11. package/dist/cli/parseIocCli.js.map +1 -0
  12. package/dist/config/iocConfig.d.ts +97 -0
  13. package/dist/config/iocConfig.d.ts.map +1 -0
  14. package/dist/config/iocConfig.js +65 -0
  15. package/dist/config/iocConfig.js.map +1 -0
  16. package/dist/config/loadIocConfig.d.ts +25 -0
  17. package/dist/config/loadIocConfig.d.ts.map +1 -0
  18. package/dist/config/loadIocConfig.js +245 -0
  19. package/dist/config/loadIocConfig.js.map +1 -0
  20. package/dist/config/parseDiscoveryScanDirs.d.ts +6 -0
  21. package/dist/config/parseDiscoveryScanDirs.d.ts.map +1 -0
  22. package/dist/config/parseDiscoveryScanDirs.js +78 -0
  23. package/dist/config/parseDiscoveryScanDirs.js.map +1 -0
  24. package/dist/core/defaultImplementationSelection.d.ts +14 -0
  25. package/dist/core/defaultImplementationSelection.d.ts.map +1 -0
  26. package/dist/core/defaultImplementationSelection.js +47 -0
  27. package/dist/core/defaultImplementationSelection.js.map +1 -0
  28. package/dist/core/index.d.ts +4 -0
  29. package/dist/core/index.d.ts.map +1 -0
  30. package/dist/core/index.js +3 -0
  31. package/dist/core/index.js.map +1 -0
  32. package/dist/core/manifest.d.ts +79 -0
  33. package/dist/core/manifest.d.ts.map +1 -0
  34. package/dist/core/manifest.js +3 -0
  35. package/dist/core/manifest.js.map +1 -0
  36. package/dist/core/resolver.d.ts +18 -0
  37. package/dist/core/resolver.d.ts.map +1 -0
  38. package/dist/core/resolver.js +27 -0
  39. package/dist/core/resolver.js.map +1 -0
  40. package/dist/generator/contractTypeSourceFile.d.ts +16 -0
  41. package/dist/generator/contractTypeSourceFile.d.ts.map +1 -0
  42. package/dist/generator/contractTypeSourceFile.js +236 -0
  43. package/dist/generator/contractTypeSourceFile.js.map +1 -0
  44. package/dist/generator/discoverFactories/discoverFactories.d.ts +18 -0
  45. package/dist/generator/discoverFactories/discoverFactories.d.ts.map +1 -0
  46. package/dist/generator/discoverFactories/discoverFactories.js +108 -0
  47. package/dist/generator/discoverFactories/discoverFactories.js.map +1 -0
  48. package/dist/generator/discoverFactories/discoveryOutcomeTypes.d.ts +47 -0
  49. package/dist/generator/discoverFactories/discoveryOutcomeTypes.d.ts.map +1 -0
  50. package/dist/generator/discoverFactories/discoveryOutcomeTypes.js +19 -0
  51. package/dist/generator/discoverFactories/discoveryOutcomeTypes.js.map +1 -0
  52. package/dist/generator/discoverFactories/inferFactoryDependencyContracts.d.ts +11 -0
  53. package/dist/generator/discoverFactories/inferFactoryDependencyContracts.d.ts.map +1 -0
  54. package/dist/generator/discoverFactories/inferFactoryDependencyContracts.js +118 -0
  55. package/dist/generator/discoverFactories/inferFactoryDependencyContracts.js.map +1 -0
  56. package/dist/generator/discoverFactories/scanFactoryFile.d.ts +18 -0
  57. package/dist/generator/discoverFactories/scanFactoryFile.d.ts.map +1 -0
  58. package/dist/generator/discoverFactories/scanFactoryFile.js +379 -0
  59. package/dist/generator/discoverFactories/scanFactoryFile.js.map +1 -0
  60. package/dist/generator/generateManifest.d.ts +13 -0
  61. package/dist/generator/generateManifest.d.ts.map +1 -0
  62. package/dist/generator/generateManifest.js +88 -0
  63. package/dist/generator/generateManifest.js.map +1 -0
  64. package/dist/generator/iocProgramContext.d.ts +11 -0
  65. package/dist/generator/iocProgramContext.d.ts.map +1 -0
  66. package/dist/generator/iocProgramContext.js +81 -0
  67. package/dist/generator/iocProgramContext.js.map +1 -0
  68. package/dist/generator/manifestOptions.d.ts +26 -0
  69. package/dist/generator/manifestOptions.d.ts.map +1 -0
  70. package/dist/generator/manifestOptions.js +86 -0
  71. package/dist/generator/manifestOptions.js.map +1 -0
  72. package/dist/generator/manifestPaths.d.ts +94 -0
  73. package/dist/generator/manifestPaths.d.ts.map +1 -0
  74. package/dist/generator/manifestPaths.js +377 -0
  75. package/dist/generator/manifestPaths.js.map +1 -0
  76. package/dist/generator/naming.d.ts +9 -0
  77. package/dist/generator/naming.d.ts.map +1 -0
  78. package/dist/generator/naming.js +46 -0
  79. package/dist/generator/naming.js.map +1 -0
  80. package/dist/generator/resolveRegistrationPlan.d.ts +66 -0
  81. package/dist/generator/resolveRegistrationPlan.d.ts.map +1 -0
  82. package/dist/generator/resolveRegistrationPlan.js +377 -0
  83. package/dist/generator/resolveRegistrationPlan.js.map +1 -0
  84. package/dist/generator/types.d.ts +37 -0
  85. package/dist/generator/types.d.ts.map +1 -0
  86. package/dist/generator/types.js +2 -0
  87. package/dist/generator/types.js.map +1 -0
  88. package/dist/generator/writeManifest.d.ts +19 -0
  89. package/dist/generator/writeManifest.d.ts.map +1 -0
  90. package/dist/generator/writeManifest.js +405 -0
  91. package/dist/generator/writeManifest.js.map +1 -0
  92. package/dist/groups/baseTypeAssignability.d.ts +48 -0
  93. package/dist/groups/baseTypeAssignability.d.ts.map +1 -0
  94. package/dist/groups/baseTypeAssignability.js +145 -0
  95. package/dist/groups/baseTypeAssignability.js.map +1 -0
  96. package/dist/groups/resolveGroupPlan.d.ts +85 -0
  97. package/dist/groups/resolveGroupPlan.d.ts.map +1 -0
  98. package/dist/groups/resolveGroupPlan.js +215 -0
  99. package/dist/groups/resolveGroupPlan.js.map +1 -0
  100. package/dist/index.d.ts +22 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +20 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/inspection/formatReports.d.ts +14 -0
  105. package/dist/inspection/formatReports.d.ts.map +1 -0
  106. package/dist/inspection/formatReports.js +115 -0
  107. package/dist/inspection/formatReports.js.map +1 -0
  108. package/dist/inspection/index.d.ts +8 -0
  109. package/dist/inspection/index.d.ts.map +1 -0
  110. package/dist/inspection/index.js +8 -0
  111. package/dist/inspection/index.js.map +1 -0
  112. package/dist/inspection/reports.d.ts +40 -0
  113. package/dist/inspection/reports.d.ts.map +1 -0
  114. package/dist/inspection/reports.js +95 -0
  115. package/dist/inspection/reports.js.map +1 -0
  116. package/dist/inspection/runDiscoveryAnalysis.d.ts +36 -0
  117. package/dist/inspection/runDiscoveryAnalysis.d.ts.map +1 -0
  118. package/dist/inspection/runDiscoveryAnalysis.js +48 -0
  119. package/dist/inspection/runDiscoveryAnalysis.js.map +1 -0
  120. package/dist/inspection/validateManifest.d.ts +8 -0
  121. package/dist/inspection/validateManifest.d.ts.map +1 -0
  122. package/dist/inspection/validateManifest.js +46 -0
  123. package/dist/inspection/validateManifest.js.map +1 -0
  124. package/dist/runtime/bootstrap.d.ts +13 -0
  125. package/dist/runtime/bootstrap.d.ts.map +1 -0
  126. package/dist/runtime/bootstrap.js +259 -0
  127. package/dist/runtime/bootstrap.js.map +1 -0
  128. package/dist/runtime/index.d.ts +4 -0
  129. package/dist/runtime/index.d.ts.map +1 -0
  130. package/dist/runtime/index.js +4 -0
  131. package/dist/runtime/index.js.map +1 -0
  132. package/dist/runtime/iocResolutionError.d.ts +54 -0
  133. package/dist/runtime/iocResolutionError.d.ts.map +1 -0
  134. package/dist/runtime/iocResolutionError.js +266 -0
  135. package/dist/runtime/iocResolutionError.js.map +1 -0
  136. package/dist/runtime/iocResolutionStack.d.ts +21 -0
  137. package/dist/runtime/iocResolutionStack.d.ts.map +1 -0
  138. package/dist/runtime/iocResolutionStack.js +17 -0
  139. package/dist/runtime/iocResolutionStack.js.map +1 -0
  140. package/dist/runtime/iocRuntimeErrors.d.ts +35 -0
  141. package/dist/runtime/iocRuntimeErrors.d.ts.map +1 -0
  142. package/dist/runtime/iocRuntimeErrors.js +27 -0
  143. package/dist/runtime/iocRuntimeErrors.js.map +1 -0
  144. package/dist/runtime/registrationKeyIndex.d.ts +12 -0
  145. package/dist/runtime/registrationKeyIndex.d.ts.map +1 -0
  146. package/dist/runtime/registrationKeyIndex.js +19 -0
  147. package/dist/runtime/registrationKeyIndex.js.map +1 -0
  148. package/package.json +67 -0
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @fileoverview Builds `IocGroupsManifest` from config `groups` plus assignability against a
3
+ * named base type. `buildGroupPlan` throws on issues; `analyzeGroupPlan` returns structured errors
4
+ * for tooling that must not abort the process.
5
+ */
6
+ import type * as ts from "typescript";
7
+ import { type AssignableImplementationMember, type ContractDefaultGroupMember } from "./baseTypeAssignability.js";
8
+ import { type IocGroupNodeManifest, type IocGroupsManifest } from "../core/manifest.js";
9
+ import type { ResolvedScanDir } from "../generator/manifestPaths.js";
10
+ import type { ResolvedContractRegistration } from "../generator/resolveRegistrationPlan.js";
11
+ /** TypeScript program + paths used to map stored contract type specifiers back to source files. */
12
+ export type GroupDiscoveryBuildContext = {
13
+ program: ts.Program;
14
+ generatedDir: string;
15
+ scanDirs: readonly ResolvedScanDir[];
16
+ };
17
+ export type IocGroupKind = "collection" | "object";
18
+ export type IocGroupDefinition = {
19
+ kind: IocGroupKind;
20
+ baseType: string;
21
+ };
22
+ export type IocGroupsConfig = Record<string, IocGroupDefinition>;
23
+ export type GroupPlan = {
24
+ groupName: string;
25
+ kind: "collection";
26
+ baseType: string;
27
+ members: readonly AssignableImplementationMember[];
28
+ } | {
29
+ groupName: string;
30
+ kind: "object";
31
+ baseType: string;
32
+ members: readonly ContractDefaultGroupMember[];
33
+ };
34
+ export type GroupPlanIssue = {
35
+ kind: "groups_not_object";
36
+ } | {
37
+ kind: "group_invalid_entry";
38
+ groupName: string;
39
+ } | {
40
+ kind: "group_unknown_base_type";
41
+ groupName: string;
42
+ message: string;
43
+ } | {
44
+ kind: "group_no_matches";
45
+ groupName: string;
46
+ baseType: string;
47
+ } | {
48
+ kind: "group_duplicate_contract_key";
49
+ groupName: string;
50
+ contractKey: string;
51
+ } | {
52
+ kind: "group_root_key_collision";
53
+ key: string;
54
+ } | {
55
+ kind: "group_root_key_reserved_manifest";
56
+ key: string;
57
+ } | {
58
+ kind: "group_discovery_missing_context";
59
+ };
60
+ export type GroupPlanResult = {
61
+ plans: readonly GroupPlan[];
62
+ manifest: IocGroupsManifest;
63
+ };
64
+ export declare const groupPlanToManifestNode: (plan: GroupPlan) => IocGroupNodeManifest;
65
+ export declare const formatGroupPlanIssue: (issue: GroupPlanIssue) => string;
66
+ export declare const formatGroupPlanIssues: (issues: readonly GroupPlanIssue[]) => string;
67
+ /**
68
+ * Validates group definitions and emits the manifest subtree for generated `ioc-manifest.ts`.
69
+ * Requires `discovery` (TypeScript program + `generatedDir` + `scanDirs`) whenever `groups` is set.
70
+ */
71
+ export declare const buildGroupPlan: (groups: unknown, plans: readonly ResolvedContractRegistration[], discovery: GroupDiscoveryBuildContext | undefined) => GroupPlanResult | undefined;
72
+ export type GroupPlanAnalysis = {
73
+ ok: true;
74
+ plans: readonly GroupPlan[];
75
+ manifest: IocGroupsManifest | undefined;
76
+ issues: readonly [];
77
+ } | {
78
+ ok: false;
79
+ plans: readonly [];
80
+ manifest: undefined;
81
+ issues: readonly GroupPlanIssue[];
82
+ };
83
+ /** Non-throwing variant of `buildGroupPlan` for inspectors and CI that collect all issues. */
84
+ export declare const analyzeGroupPlan: (groups: unknown, plans: readonly ResolvedContractRegistration[], discovery: GroupDiscoveryBuildContext | undefined) => GroupPlanAnalysis;
85
+ //# sourceMappingURL=resolveGroupPlan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveGroupPlan.d.ts","sourceRoot":"","sources":["../../src/groups/resolveGroupPlan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ import { collectContractDefaultMembersAssignableToBase, collectImplementationMembersAssignableToBase, resolveDeclaredBaseType, shouldIncludeImplInCollectionGroup, } from "./baseTypeAssignability.js";
2
+ import { IOC_GENERATED_CONTAINER_MANIFEST_FIXED_KEYS, } from "../core/manifest.js";
3
+ const collectReservedCradleKeys = (plans) => {
4
+ const reserved = new Set();
5
+ for (const plan of plans) {
6
+ reserved.add(plan.accessKey);
7
+ if (plan.collectionKey !== undefined) {
8
+ reserved.add(plan.collectionKey);
9
+ }
10
+ for (const implementation of plan.implementations) {
11
+ reserved.add(implementation.registrationKey);
12
+ }
13
+ }
14
+ return reserved;
15
+ };
16
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
17
+ const isValidGroupKind = (value) => value === "collection" || value === "object";
18
+ const validateGroupDefinition = (groupName, raw) => {
19
+ if (!isRecord(raw)) {
20
+ return { kind: "group_invalid_entry", groupName };
21
+ }
22
+ const kind = raw.kind;
23
+ const baseType = raw.baseType;
24
+ if (!isValidGroupKind(kind)) {
25
+ return { kind: "group_invalid_entry", groupName };
26
+ }
27
+ if (typeof baseType !== "string" || baseType.length === 0) {
28
+ return { kind: "group_invalid_entry", groupName };
29
+ }
30
+ const extraKeys = Object.keys(raw).filter((key) => key !== "kind" && key !== "baseType");
31
+ if (extraKeys.length > 0) {
32
+ return { kind: "group_invalid_entry", groupName };
33
+ }
34
+ return undefined;
35
+ };
36
+ export const groupPlanToManifestNode = (plan) => {
37
+ if (plan.kind === "collection") {
38
+ return plan.members.map((member) => ({
39
+ contractName: member.contractName,
40
+ registrationKey: member.registrationKey,
41
+ }));
42
+ }
43
+ const out = {};
44
+ for (const member of plan.members) {
45
+ out[member.contractKey] = {
46
+ contractName: member.contractName,
47
+ registrationKey: member.registrationKey,
48
+ };
49
+ }
50
+ return out;
51
+ };
52
+ const buildObjectGroupMembersOrIssue = (groupName, members) => {
53
+ const seen = new Set();
54
+ for (const member of members) {
55
+ if (seen.has(member.contractKey)) {
56
+ return {
57
+ ok: false,
58
+ issue: {
59
+ kind: "group_duplicate_contract_key",
60
+ groupName,
61
+ contractKey: member.contractKey,
62
+ },
63
+ };
64
+ }
65
+ seen.add(member.contractKey);
66
+ }
67
+ return { ok: true, members: [...members] };
68
+ };
69
+ export const formatGroupPlanIssue = (issue) => {
70
+ switch (issue.kind) {
71
+ case "groups_not_object":
72
+ return "[ioc-config] groups must be an object when set";
73
+ case "group_invalid_entry":
74
+ return `[ioc-config] groups.${JSON.stringify(issue.groupName)} must be { kind: "collection" | "object", baseType: string }`;
75
+ case "group_unknown_base_type":
76
+ return `[ioc-config] groups.${JSON.stringify(issue.groupName)}: ${issue.message}`;
77
+ case "group_no_matches":
78
+ return `[ioc-config] groups.${JSON.stringify(issue.groupName)}: no implementations found for base type ${JSON.stringify(issue.baseType)}`;
79
+ case "group_duplicate_contract_key":
80
+ return `[ioc-config] groups.${JSON.stringify(issue.groupName)}: duplicate contract key ${JSON.stringify(issue.contractKey)} in object group`;
81
+ case "group_root_key_collision":
82
+ return `[ioc-config] groups root key ${JSON.stringify(issue.key)} collides with an existing Awilix registration key`;
83
+ case "group_root_key_reserved_manifest":
84
+ return `[ioc-config] groups root key ${JSON.stringify(issue.key)} is reserved for the generated container manifest (use a different group name)`;
85
+ case "group_discovery_missing_context":
86
+ return "[ioc-config] groups require TypeScript program context (program, generatedDir, scanDirs). Use the IoC manifest generator or pass GroupDiscoveryBuildContext into buildGroupPlan.";
87
+ default: {
88
+ const exhaustive = issue;
89
+ return String(exhaustive);
90
+ }
91
+ }
92
+ };
93
+ export const formatGroupPlanIssues = (issues) => issues.map((issue) => formatGroupPlanIssue(issue)).join("\n");
94
+ const runGroupPlan = (groups, plans, discovery) => {
95
+ if (!isRecord(groups)) {
96
+ return { ok: false, issues: [{ kind: "groups_not_object" }] };
97
+ }
98
+ if (discovery === undefined) {
99
+ return { ok: false, issues: [{ kind: "group_discovery_missing_context" }] };
100
+ }
101
+ const checker = discovery.program.getTypeChecker();
102
+ const reserved = collectReservedCradleKeys(plans);
103
+ const groupPlans = [];
104
+ const issues = [];
105
+ const sortedGroupNames = Object.keys(groups).sort((a, b) => a.localeCompare(b));
106
+ for (const groupName of sortedGroupNames) {
107
+ if (IOC_GENERATED_CONTAINER_MANIFEST_FIXED_KEYS.has(groupName)) {
108
+ issues.push({ kind: "group_root_key_reserved_manifest", key: groupName });
109
+ continue;
110
+ }
111
+ if (reserved.has(groupName)) {
112
+ issues.push({ kind: "group_root_key_collision", key: groupName });
113
+ continue;
114
+ }
115
+ const definitionIssue = validateGroupDefinition(groupName, groups[groupName]);
116
+ if (definitionIssue !== undefined) {
117
+ issues.push(definitionIssue);
118
+ continue;
119
+ }
120
+ const entry = groups[groupName];
121
+ const base = resolveDeclaredBaseType(discovery.program, checker, entry.baseType);
122
+ if (!base.ok) {
123
+ issues.push({
124
+ kind: "group_unknown_base_type",
125
+ groupName,
126
+ message: base.message,
127
+ });
128
+ continue;
129
+ }
130
+ if (entry.kind === "object") {
131
+ const objectMembers = collectContractDefaultMembersAssignableToBase(checker, discovery.program, discovery.generatedDir, discovery.scanDirs, plans, base.type);
132
+ if (objectMembers.length === 0) {
133
+ issues.push({
134
+ kind: "group_no_matches",
135
+ groupName,
136
+ baseType: entry.baseType,
137
+ });
138
+ continue;
139
+ }
140
+ const built = buildObjectGroupMembersOrIssue(groupName, objectMembers);
141
+ if (!built.ok) {
142
+ issues.push(built.issue);
143
+ continue;
144
+ }
145
+ reserved.add(groupName);
146
+ groupPlans.push({
147
+ groupName,
148
+ kind: "object",
149
+ baseType: entry.baseType,
150
+ members: built.members,
151
+ });
152
+ continue;
153
+ }
154
+ const members = collectImplementationMembersAssignableToBase(checker, discovery.program, discovery.generatedDir, discovery.scanDirs, plans, base.type, shouldIncludeImplInCollectionGroup);
155
+ if (members.length === 0) {
156
+ issues.push({
157
+ kind: "group_no_matches",
158
+ groupName,
159
+ baseType: entry.baseType,
160
+ });
161
+ continue;
162
+ }
163
+ reserved.add(groupName);
164
+ groupPlans.push({
165
+ groupName,
166
+ kind: "collection",
167
+ baseType: entry.baseType,
168
+ members,
169
+ });
170
+ }
171
+ if (issues.length > 0) {
172
+ return { ok: false, issues };
173
+ }
174
+ const manifest = {};
175
+ for (const plan of groupPlans) {
176
+ manifest[plan.groupName] = groupPlanToManifestNode(plan);
177
+ }
178
+ return { ok: true, plans: groupPlans, manifest };
179
+ };
180
+ /**
181
+ * Validates group definitions and emits the manifest subtree for generated `ioc-manifest.ts`.
182
+ * Requires `discovery` (TypeScript program + `generatedDir` + `scanDirs`) whenever `groups` is set.
183
+ */
184
+ export const buildGroupPlan = (groups, plans, discovery) => {
185
+ if (groups === undefined) {
186
+ return undefined;
187
+ }
188
+ const result = runGroupPlan(groups, plans, discovery);
189
+ if (!result.ok) {
190
+ throw new Error(formatGroupPlanIssues(result.issues));
191
+ }
192
+ return { plans: result.plans, manifest: result.manifest };
193
+ };
194
+ /** Non-throwing variant of `buildGroupPlan` for inspectors and CI that collect all issues. */
195
+ export const analyzeGroupPlan = (groups, plans, discovery) => {
196
+ if (groups === undefined) {
197
+ return { ok: true, plans: [], manifest: undefined, issues: [] };
198
+ }
199
+ const result = runGroupPlan(groups, plans, discovery);
200
+ if (!result.ok) {
201
+ return {
202
+ ok: false,
203
+ plans: [],
204
+ manifest: undefined,
205
+ issues: result.issues,
206
+ };
207
+ }
208
+ return {
209
+ ok: true,
210
+ plans: result.plans,
211
+ manifest: result.manifest,
212
+ issues: [],
213
+ };
214
+ };
215
+ //# sourceMappingURL=resolveGroupPlan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveGroupPlan.js","sourceRoot":"","sources":["../../src/groups/resolveGroupPlan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Public API for **ioc-manifest**: contract-first factory discovery, generated Awilix manifests,
3
+ * runtime registration, grouped injections, and inspection helpers.
4
+ *
5
+ * Typical flow: define IoC config (`defineIocConfig` / `ioc.config.ts`), run
6
+ * `generateManifest()` (or the `gen:manifest` script), import the emitted manifest module,
7
+ * then call `registerIocFromManifest(container, iocManifest)` from the runtime entry.
8
+ */
9
+ export * from "./core/index.js";
10
+ export { defineIocConfig, getContractLevelConfig, getImplOverrideForImplementation, IOC_CONTRACT_CONFIG_KEY, isIocImplementationOverride, parseContractLevelConfig, type IocConfig, type IocContractMetadata, type IocDiscoveryScanDirs, type IocLifetime, type IocOverride, type IocRegistrationsPerContract, type IocScanDirImportMode, type IocScanDirSpec, type IocWorkspacePackageImportBase, } from "./config/iocConfig.js";
11
+ export { parseDiscoveryScanDirs } from "./config/parseDiscoveryScanDirs.js";
12
+ export { loadIocConfig, resolveIocConfigPath, resolveProjectRootFromIocConfigPath, tryLoadIocConfig, } from "./config/loadIocConfig.js";
13
+ export * from "./runtime/index.js";
14
+ export { generateManifest } from "./generator/generateManifest.js";
15
+ export type { ManifestOptions } from "./generator/manifestOptions.js";
16
+ export { DEFAULT_MANIFEST_OPTIONS, defaultManifestPathsFromProjectRoot, mergeManifestOptionsWithIocConfig, resolveManifestOptions, } from "./generator/manifestOptions.js";
17
+ export { computeManifestModuleSpecifier, emitBarePackageSpecifierFromNodeModulesPath, findResolvedScanDirForFile, generatedExcludePatternForScanRoot, mapTypesPackageToRuntimePackage, normalizeEmittedModuleSpecifier, resolveScanDirEntries, resolveWorkspacePackageImportBases, resolveWorkspacePackageRoot, type ComputeManifestModuleSpecifierOptions, type ManifestRuntimePaths, type ResolvedScanDir, type ResolvedWorkspacePackageImportBase, } from "./generator/manifestPaths.js";
18
+ export { analyzeGroupPlan, buildGroupPlan, formatGroupPlanIssue, formatGroupPlanIssues, groupPlanToManifestNode, type GroupDiscoveryBuildContext, type GroupPlan, type GroupPlanAnalysis, type GroupPlanIssue, type GroupPlanResult, type IocGroupDefinition, type IocGroupKind, type IocGroupsConfig, } from "./groups/resolveGroupPlan.js";
19
+ export type { AssignableImplementationMember, ContractDefaultGroupMember, } from "./groups/baseTypeAssignability.js";
20
+ export { shouldIncludeImplInCollectionGroup } from "./groups/baseTypeAssignability.js";
21
+ export { buildDiscoveryReport, buildInspectionReport, formatDiscoveryReport, formatInspectionReport, resolveDiscoveryManifestContext, runDiscoveryAnalysis, validateManifest, type DiscoveryAnalysisResult, type DiscoveryManifestResolution, type DiscoveryReport, type DiscoveryReportInput, type FormatDiscoveryReportOptions, type InspectionReport, type ManifestValidationIssue, } from "./inspection/index.js";
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,gCAAgC,EAChC,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,6BAA6B,GACnC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,mCAAmC,EACnC,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EACL,wBAAwB,EACxB,mCAAmC,EACnC,iCAAiC,EACjC,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,8BAA8B,EAC9B,2CAA2C,EAC3C,0BAA0B,EAC1B,kCAAkC,EAClC,+BAA+B,EAC/B,+BAA+B,EAC/B,qBAAqB,EACrB,kCAAkC,EAClC,2BAA2B,EAC3B,KAAK,qCAAqC,EAC1C,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,kCAAkC,GACxC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AAEvF,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,+BAA+B,EAC/B,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Public API for **ioc-manifest**: contract-first factory discovery, generated Awilix manifests,
3
+ * runtime registration, grouped injections, and inspection helpers.
4
+ *
5
+ * Typical flow: define IoC config (`defineIocConfig` / `ioc.config.ts`), run
6
+ * `generateManifest()` (or the `gen:manifest` script), import the emitted manifest module,
7
+ * then call `registerIocFromManifest(container, iocManifest)` from the runtime entry.
8
+ */
9
+ export * from "./core/index.js";
10
+ export { defineIocConfig, getContractLevelConfig, getImplOverrideForImplementation, IOC_CONTRACT_CONFIG_KEY, isIocImplementationOverride, parseContractLevelConfig, } from "./config/iocConfig.js";
11
+ export { parseDiscoveryScanDirs } from "./config/parseDiscoveryScanDirs.js";
12
+ export { loadIocConfig, resolveIocConfigPath, resolveProjectRootFromIocConfigPath, tryLoadIocConfig, } from "./config/loadIocConfig.js";
13
+ export * from "./runtime/index.js";
14
+ export { generateManifest } from "./generator/generateManifest.js";
15
+ export { DEFAULT_MANIFEST_OPTIONS, defaultManifestPathsFromProjectRoot, mergeManifestOptionsWithIocConfig, resolveManifestOptions, } from "./generator/manifestOptions.js";
16
+ export { computeManifestModuleSpecifier, emitBarePackageSpecifierFromNodeModulesPath, findResolvedScanDirForFile, generatedExcludePatternForScanRoot, mapTypesPackageToRuntimePackage, normalizeEmittedModuleSpecifier, resolveScanDirEntries, resolveWorkspacePackageImportBases, resolveWorkspacePackageRoot, } from "./generator/manifestPaths.js";
17
+ export { analyzeGroupPlan, buildGroupPlan, formatGroupPlanIssue, formatGroupPlanIssues, groupPlanToManifestNode, } from "./groups/resolveGroupPlan.js";
18
+ export { shouldIncludeImplInCollectionGroup } from "./groups/baseTypeAssignability.js";
19
+ export { buildDiscoveryReport, buildInspectionReport, formatDiscoveryReport, formatInspectionReport, resolveDiscoveryManifestContext, runDiscoveryAnalysis, validateManifest, } from "./inspection/index.js";
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,gCAAgC,EAChC,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,GAUzB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,mCAAmC,EACnC,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EACL,wBAAwB,EACxB,mCAAmC,EACnC,iCAAiC,EACjC,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,8BAA8B,EAC9B,2CAA2C,EAC3C,0BAA0B,EAC1B,kCAAkC,EAClC,+BAA+B,EAC/B,+BAA+B,EAC/B,qBAAqB,EACrB,kCAAkC,EAClC,2BAA2B,GAK5B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,GASxB,MAAM,8BAA8B,CAAC;AAOtC,OAAO,EAAE,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AAEvF,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,+BAA+B,EAC/B,oBAAoB,EACpB,gBAAgB,GAQjB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @fileoverview Plain-text rendering of inspection/discovery reports for terminal output (`ioc` CLI).
3
+ */
4
+ import type { DiscoveryReport, InspectionReport } from "./reports.js";
5
+ import type { ResolvedContractRegistration } from "../generator/resolveRegistrationPlan.js";
6
+ export declare const formatInspectionReport: (report: InspectionReport) => string;
7
+ export type FormatDiscoveryReportOptions = {
8
+ /** When omitted, uses TTY + NO_COLOR / FORCE_COLOR (same idea as common CLIs). */
9
+ color?: boolean;
10
+ };
11
+ export declare const formatDiscoveryReport: (report: DiscoveryReport, options?: FormatDiscoveryReportOptions) => string;
12
+ /** Resolved lifetime + source line per implementation (from registration plan; used with `ioc inspect --discovery`). */
13
+ export declare const formatRegistrationLifetimeInspect: (plan: readonly ResolvedContractRegistration[]) => string;
14
+ //# sourceMappingURL=formatReports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatReports.d.ts","sourceRoot":"","sources":["../../src/inspection/formatReports.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AA2D5F,eAAO,MAAM,sBAAsB,GAAI,QAAQ,gBAAgB,KAAG,MA6BjE,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,kFAAkF;IAClF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,QAAQ,eAAe,EACvB,UAAU,4BAA4B,KACrC,MA6CF,CAAC;AAEF,wHAAwH;AACxH,eAAO,MAAM,iCAAiC,GAC5C,MAAM,SAAS,4BAA4B,EAAE,KAC5C,MAqBF,CAAC"}
@@ -0,0 +1,115 @@
1
+ const shouldColorize = () => {
2
+ if (process.env.NO_COLOR !== undefined && process.env.NO_COLOR !== "") {
3
+ return false;
4
+ }
5
+ if (process.env.FORCE_COLOR !== undefined && process.env.FORCE_COLOR !== "0") {
6
+ return true;
7
+ }
8
+ return process.stdout.isTTY === true;
9
+ };
10
+ const ansi = (enabled) => {
11
+ if (!enabled) {
12
+ const id = (s) => s;
13
+ return {
14
+ reset: id(""),
15
+ bold: id(""),
16
+ dim: id(""),
17
+ cyan: id(""),
18
+ green: id(""),
19
+ red: id(""),
20
+ yellow: id(""),
21
+ };
22
+ }
23
+ return {
24
+ reset: "\x1b[0m",
25
+ bold: "\x1b[1m",
26
+ dim: "\x1b[2m",
27
+ cyan: "\x1b[36m",
28
+ green: "\x1b[32m",
29
+ red: "\x1b[31m",
30
+ yellow: "\x1b[33m",
31
+ };
32
+ };
33
+ const formatManifestIssues = (issues) => {
34
+ if (issues.length === 0)
35
+ return "";
36
+ return [
37
+ "Manifest validation:",
38
+ ...issues.map((i) => ` - [${i.code}] ${i.message}`),
39
+ "",
40
+ ].join("\n");
41
+ };
42
+ export const formatInspectionReport = (report) => {
43
+ const lines = [];
44
+ const header = formatManifestIssues(report.manifestIssues);
45
+ if (header.length > 0) {
46
+ lines.push(header.trimEnd());
47
+ lines.push("");
48
+ }
49
+ for (const c of report.contracts) {
50
+ lines.push(c.contractName);
51
+ if (c.defaultImplementationName !== undefined) {
52
+ lines.push(` default: ${c.defaultImplementationName}`);
53
+ }
54
+ else {
55
+ lines.push(` default: (unresolved — see manifest validation)`);
56
+ }
57
+ lines.push(` implementations:`);
58
+ for (const impl of c.implementations) {
59
+ lines.push(` - ${impl.implementationName}`);
60
+ lines.push(` lifecycle: ${impl.lifecycle}`);
61
+ }
62
+ lines.push("");
63
+ }
64
+ return lines.join("\n").trimEnd();
65
+ };
66
+ export const formatDiscoveryReport = (report, options) => {
67
+ const color = options?.color !== undefined ? options.color : shouldColorize();
68
+ const c = ansi(color);
69
+ const lines = [];
70
+ for (const file of report.files) {
71
+ lines.push(`${c.bold}${c.cyan}${file.modulePath}${c.reset}`);
72
+ for (const row of file.rows) {
73
+ const isDiscovered = row.status === "discovered";
74
+ const statusIcon = isDiscovered ? "✔" : "✖";
75
+ const icon = `${isDiscovered ? c.green : c.red}${statusIcon}${c.reset}`;
76
+ if (row.exportName === undefined) {
77
+ lines.push(` ${icon} ${isDiscovered ? c.green : c.yellow}${row.status}${c.reset}`);
78
+ if (row.skipReason) {
79
+ lines.push(` ${c.dim}reason:${c.reset} ${row.skipReason}`);
80
+ }
81
+ continue;
82
+ }
83
+ lines.push(` ${icon} ${c.bold}${row.exportName}${c.reset}`);
84
+ if (row.contractName) {
85
+ lines.push(` ${c.dim}contract:${c.reset} ${row.contractName}`);
86
+ }
87
+ if (row.registrationKey) {
88
+ lines.push(` ${c.dim}registrationKey:${c.reset} ${row.registrationKey}`);
89
+ }
90
+ if (row.skipReason) {
91
+ lines.push(` ${c.dim}reason:${c.reset} ${c.red}${row.skipReason}${c.reset}`);
92
+ }
93
+ }
94
+ lines.push("");
95
+ }
96
+ return lines.join("\n").trimEnd();
97
+ };
98
+ /** Resolved lifetime + source line per implementation (from registration plan; used with `ioc inspect --discovery`). */
99
+ export const formatRegistrationLifetimeInspect = (plan) => {
100
+ const contracts = [...plan].sort((a, b) => a.contractName.localeCompare(b.contractName));
101
+ const lines = ["Resolved registration lifetimes:"];
102
+ for (const c of contracts) {
103
+ lines.push(` ${c.contractName}`);
104
+ const impls = [...c.implementations].sort((a, b) => a.implementationName.localeCompare(b.implementationName));
105
+ for (const impl of impls) {
106
+ lines.push(` - ${impl.implementationName}`);
107
+ lines.push(` lifetime: ${impl.lifetime}`);
108
+ if (impl.lifetimeSource !== undefined) {
109
+ lines.push(` lifetimeSource: ${impl.lifetimeSource}`);
110
+ }
111
+ }
112
+ }
113
+ return lines.join("\n").trimEnd();
114
+ };
115
+ //# sourceMappingURL=formatReports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatReports.js","sourceRoot":"","sources":["../../src/inspection/formatReports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Inspection entry: validate manifests, run discovery analysis, format printable reports.
3
+ */
4
+ export { buildDiscoveryReport, buildInspectionReport, type DiscoveryExportReportRow, type DiscoveryReport, type DiscoveryReportInput, type InspectionContractReport, type InspectionReport, } from "./reports.js";
5
+ export { resolveDiscoveryManifestContext, runDiscoveryAnalysis, type DiscoveryAnalysisResult, type DiscoveryManifestResolution, } from "./runDiscoveryAnalysis.js";
6
+ export { formatDiscoveryReport, formatInspectionReport, formatRegistrationLifetimeInspect, type FormatDiscoveryReportOptions, } from "./formatReports.js";
7
+ export { validateManifest, type ManifestValidationIssue, } from "./validateManifest.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/inspection/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,+BAA+B,EAC/B,oBAAoB,EACpB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,GACjC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,iCAAiC,EACjC,KAAK,4BAA4B,GAClC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Inspection entry: validate manifests, run discovery analysis, format printable reports.
3
+ */
4
+ export { buildDiscoveryReport, buildInspectionReport, } from "./reports.js";
5
+ export { resolveDiscoveryManifestContext, runDiscoveryAnalysis, } from "./runDiscoveryAnalysis.js";
6
+ export { formatDiscoveryReport, formatInspectionReport, formatRegistrationLifetimeInspect, } from "./formatReports.js";
7
+ export { validateManifest, } from "./validateManifest.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/inspection/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GAMtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,+BAA+B,EAC/B,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,iCAAiC,GAElC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { IocContractManifest } from "../core/manifest.js";
2
+ import type { IocDiscoveryAnalysisFiles } from "../generator/discoverFactories/discoveryOutcomeTypes.js";
3
+ import type { ManifestValidationIssue } from "./validateManifest.js";
4
+ export type DiscoveryReportInput = IocDiscoveryAnalysisFiles | {
5
+ discoveryFiles: IocDiscoveryAnalysisFiles;
6
+ };
7
+ export type InspectionContractReport = {
8
+ contractName: string;
9
+ defaultImplementationName: string | undefined;
10
+ defaultRegistrationKey: string | undefined;
11
+ implementations: readonly {
12
+ implementationName: string;
13
+ registrationKey: string;
14
+ lifecycle: string;
15
+ modulePath: string;
16
+ exportName: string;
17
+ isDefault: boolean;
18
+ }[];
19
+ };
20
+ export type InspectionReport = {
21
+ contracts: readonly InspectionContractReport[];
22
+ manifestIssues: readonly ManifestValidationIssue[];
23
+ };
24
+ export declare const buildInspectionReport: (contracts: IocContractManifest) => InspectionReport;
25
+ export type DiscoveryExportReportRow = {
26
+ modulePath: string;
27
+ exportName?: string;
28
+ status: "discovered" | "skipped";
29
+ contractName?: string;
30
+ skipReason?: string;
31
+ registrationKey?: string;
32
+ };
33
+ export type DiscoveryReport = {
34
+ files: readonly {
35
+ modulePath: string;
36
+ rows: readonly DiscoveryExportReportRow[];
37
+ }[];
38
+ };
39
+ export declare const buildDiscoveryReport: (analysisOrFiles: DiscoveryReportInput) => DiscoveryReport;
40
+ //# sourceMappingURL=reports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../src/inspection/reports.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,yBAAyB,EAE1B,MAAM,yDAAyD,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGrE,MAAM,MAAM,oBAAoB,GAC5B,yBAAyB,GACzB;IAAE,cAAc,EAAE,yBAAyB,CAAA;CAAE,CAAC;AAElD,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,eAAe,EAAE,SAAS;QACxB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;KACpB,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC/C,cAAc,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACpD,CAAC;AA0BF,eAAO,MAAM,qBAAqB,GAChC,WAAW,mBAAmB,KAC7B,gBAkCF,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,SAAS;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,SAAS,wBAAwB,EAAE,CAAC;KAC3C,EAAE,CAAC;CACL,CAAC;AA2CF,eAAO,MAAM,oBAAoB,GAC/B,iBAAiB,oBAAoB,KACpC,eAgBF,CAAC"}