@odg/command 1.13.0 → 1.15.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/agents.md +148 -44
- package/dist/Generators/MakeFile.d.ts +56 -37
- package/dist/Generators/MakeFile.d.ts.map +1 -0
- package/dist/Generators/MakeFile.js +132 -66
- package/dist/Generators/MakeFile.js.map +1 -1
- package/dist/Generators/StubCreator.d.ts +2 -1
- package/dist/Generators/StubCreator.d.ts.map +1 -0
- package/dist/Generators/StubCreator.js +17 -42
- package/dist/Generators/StubCreator.js.map +1 -1
- package/dist/Registrations/pascal-to-dot-lower.d.ts +16 -0
- package/dist/Registrations/pascal-to-dot-lower.d.ts.map +1 -0
- package/dist/Registrations/pascal-to-dot-lower.js +31 -0
- package/dist/Registrations/pascal-to-dot-lower.js.map +1 -0
- package/dist/Registrations/register.d.ts +3 -0
- package/dist/Registrations/register.d.ts.map +1 -0
- package/dist/Registrations/register.js +222 -0
- package/dist/Registrations/register.js.map +1 -0
- package/dist/Registrations/ts-mutators.d.ts +41 -0
- package/dist/Registrations/ts-mutators.d.ts.map +1 -0
- package/dist/Registrations/ts-mutators.js +202 -0
- package/dist/Registrations/ts-mutators.js.map +1 -0
- package/dist/Registrations/types.d.ts +35 -0
- package/dist/Registrations/types.d.ts.map +1 -0
- package/dist/Registrations/types.js +3 -0
- package/dist/Registrations/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -16
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +12 -11
- package/stubs/handler.stub +14 -36
- package/stubs/listener.stub +26 -0
- package/stubs/page.stub +2 -20
- package/stubs/selector.stub +2 -0
- package/stubs/event.stub +0 -26
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerArtifact = registerArtifact;
|
|
4
|
+
const node_path_1 = require("node:path");
|
|
5
|
+
const exception_1 = require("@odg/exception");
|
|
6
|
+
const pascal_to_dot_lower_1 = require("./pascal-to-dot-lower");
|
|
7
|
+
const ts_mutators_1 = require("./ts-mutators");
|
|
8
|
+
/** TypeScript path alias for the listeners barrel (see tsconfig paths). */
|
|
9
|
+
const listenersTypeModuleSpecifier = "@listeners";
|
|
10
|
+
/** TypeScript path alias for the pages barrel (see tsconfig paths). */
|
|
11
|
+
const pagesTypeModuleSpecifier = "@pages";
|
|
12
|
+
/** TypeScript path alias for the handlers barrel (see tsconfig paths). */
|
|
13
|
+
const handlersTypeModuleSpecifier = "@handlers";
|
|
14
|
+
function resolveRelativeExportPath(filePath, barrelPath, fallbackExportName) {
|
|
15
|
+
if (!filePath) {
|
|
16
|
+
return `./${fallbackExportName}`;
|
|
17
|
+
}
|
|
18
|
+
const barrelDirectory = (0, node_path_1.dirname)(barrelPath);
|
|
19
|
+
const filePathWithoutExtension = filePath.replace(/\.ts$/, "");
|
|
20
|
+
const relativePath = (0, node_path_1.relative)(barrelDirectory, filePathWithoutExtension);
|
|
21
|
+
return `./${relativePath}`;
|
|
22
|
+
}
|
|
23
|
+
async function registerContainerEnumMember(containerEnumPath, memberName, memberValue) {
|
|
24
|
+
await (0, ts_mutators_1.ensureEnumMember)({
|
|
25
|
+
filePath: containerEnumPath,
|
|
26
|
+
enumName: "ContainerName",
|
|
27
|
+
memberName,
|
|
28
|
+
memberValue,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async function registerContainerInterfaceBinding(containerInterfacePath, enumMember, className, moduleSpecifier) {
|
|
32
|
+
await (0, ts_mutators_1.ensureValueNamedImport)({
|
|
33
|
+
filePath: containerInterfacePath,
|
|
34
|
+
moduleSpecifier,
|
|
35
|
+
name: className,
|
|
36
|
+
});
|
|
37
|
+
await (0, ts_mutators_1.ensureInterfaceProperty)({
|
|
38
|
+
filePath: containerInterfacePath,
|
|
39
|
+
interfaceName: "ContainerInterface",
|
|
40
|
+
propertyName: `[ContainerName.${enumMember}]`,
|
|
41
|
+
propertyType: className,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
async function registerBarrelExport(barrelPath, filePath, fallbackExportName) {
|
|
45
|
+
const relativeExportPath = resolveRelativeExportPath(filePath, barrelPath, fallbackExportName);
|
|
46
|
+
await (0, ts_mutators_1.ensureBarrelExport)({
|
|
47
|
+
barrelPath,
|
|
48
|
+
relativeExportPath,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async function registerConfigEnumMembers(descriptor, targets) {
|
|
52
|
+
if (!descriptor.configEnumMembers?.length || !targets.configEnumPath) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
for (const key of descriptor.configEnumMembers) {
|
|
56
|
+
await (0, ts_mutators_1.ensureEnumMember)({
|
|
57
|
+
filePath: targets.configEnumPath,
|
|
58
|
+
enumName: "ConfigName",
|
|
59
|
+
memberName: key,
|
|
60
|
+
memberValue: key,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async function registerEnvironmentExampleLines(descriptor, targets) {
|
|
65
|
+
if (!descriptor.envExampleLines?.length || !targets.envExamplePath) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
await (0, ts_mutators_1.ensureEnvironmentExampleLines)({
|
|
69
|
+
filePath: targets.envExamplePath,
|
|
70
|
+
lines: descriptor.envExampleLines,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
async function registerImports(targets) {
|
|
74
|
+
const imports = targets.typeImports ?? [];
|
|
75
|
+
if (imports.length === 0)
|
|
76
|
+
return;
|
|
77
|
+
const importTargets = new Set([
|
|
78
|
+
targets.containerEnumPath,
|
|
79
|
+
targets.eventEnumPath,
|
|
80
|
+
targets.configEnumPath,
|
|
81
|
+
targets.containerInterfacePath,
|
|
82
|
+
targets.eventsInterfacePath,
|
|
83
|
+
targets.pagesIndexPath,
|
|
84
|
+
targets.selectorsIndexPath,
|
|
85
|
+
targets.handlersIndexPath,
|
|
86
|
+
targets.listenersIndexPath,
|
|
87
|
+
].filter(Boolean));
|
|
88
|
+
await Promise.all([...importTargets].map(async (filePath) => (0, ts_mutators_1.ensureTopLevelStatements)({
|
|
89
|
+
filePath,
|
|
90
|
+
statements: imports,
|
|
91
|
+
})));
|
|
92
|
+
}
|
|
93
|
+
async function registerPage(descriptor, targets) {
|
|
94
|
+
if (descriptor.containerEnumMember && targets.containerEnumPath) {
|
|
95
|
+
await registerContainerEnumMember(targets.containerEnumPath, descriptor.containerEnumMember, (0, pascal_to_dot_lower_1.resolveContainerEnumMemberValue)(undefined, descriptor.containerEnumMember));
|
|
96
|
+
}
|
|
97
|
+
if (descriptor.pageClassName && targets.pagesIndexPath) {
|
|
98
|
+
await registerBarrelExport(targets.pagesIndexPath, descriptor.filePath, descriptor.pageClassName);
|
|
99
|
+
}
|
|
100
|
+
if (descriptor.containerEnumMember && descriptor.pageClassName && targets.containerInterfacePath) {
|
|
101
|
+
await registerContainerInterfaceBinding(targets.containerInterfacePath, descriptor.containerEnumMember, descriptor.pageClassName, pagesTypeModuleSpecifier);
|
|
102
|
+
}
|
|
103
|
+
await registerConfigEnumMembers(descriptor, targets);
|
|
104
|
+
await registerEnvironmentExampleLines(descriptor, targets);
|
|
105
|
+
}
|
|
106
|
+
async function registerSelector(descriptor, targets) {
|
|
107
|
+
if (!descriptor.selectorClassName || !targets.selectorsIndexPath)
|
|
108
|
+
return;
|
|
109
|
+
await registerBarrelExport(targets.selectorsIndexPath, descriptor.filePath, descriptor.selectorClassName);
|
|
110
|
+
}
|
|
111
|
+
async function registerHandler(descriptor, targets) {
|
|
112
|
+
if (descriptor.containerEnumMember && targets.containerEnumPath) {
|
|
113
|
+
await registerContainerEnumMember(targets.containerEnumPath, descriptor.containerEnumMember, (0, pascal_to_dot_lower_1.resolveContainerEnumMemberValue)(undefined, descriptor.containerEnumMember));
|
|
114
|
+
}
|
|
115
|
+
if (descriptor.handlerClassName && targets.handlersIndexPath) {
|
|
116
|
+
await registerBarrelExport(targets.handlersIndexPath, descriptor.filePath, descriptor.handlerClassName);
|
|
117
|
+
}
|
|
118
|
+
if (descriptor.containerEnumMember && descriptor.handlerClassName && targets.containerInterfacePath) {
|
|
119
|
+
await registerContainerInterfaceBinding(targets.containerInterfacePath, descriptor.containerEnumMember, descriptor.handlerClassName, handlersTypeModuleSpecifier);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async function registerEventsInterface(descriptor, targets) {
|
|
123
|
+
const payloadType = targets.eventPayloadType;
|
|
124
|
+
if (!payloadType || !descriptor.eventEnumMember || !targets.eventsInterfacePath) {
|
|
125
|
+
throw new exception_1.InvalidArgumentException("Missing explicit event payload type: pass --eventPayloadType to register EventsInterface safely.");
|
|
126
|
+
}
|
|
127
|
+
await (0, ts_mutators_1.ensureInterfaceProperty)({
|
|
128
|
+
filePath: targets.eventsInterfacePath,
|
|
129
|
+
interfaceName: "EventBaseInterface",
|
|
130
|
+
propertyName: `[EventName.${descriptor.eventEnumMember}]`,
|
|
131
|
+
propertyType: payloadType,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
async function registerEventContainerInterface(descriptor, targets) {
|
|
135
|
+
if (!descriptor.listenerClassName
|
|
136
|
+
|| !descriptor.containerEnumMember
|
|
137
|
+
|| !targets.containerInterfacePath) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
await (0, ts_mutators_1.ensureTypeNamedImport)({
|
|
141
|
+
filePath: targets.containerInterfacePath,
|
|
142
|
+
moduleSpecifier: listenersTypeModuleSpecifier,
|
|
143
|
+
name: descriptor.listenerClassName,
|
|
144
|
+
});
|
|
145
|
+
await (0, ts_mutators_1.ensureInterfaceProperty)({
|
|
146
|
+
filePath: targets.containerInterfacePath,
|
|
147
|
+
interfaceName: "ContainerInterface",
|
|
148
|
+
propertyName: `[ContainerName.${descriptor.containerEnumMember}]`,
|
|
149
|
+
propertyType: descriptor.listenerClassName,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
async function registerEvent(descriptor, targets) {
|
|
153
|
+
if (descriptor.eventEnumMember && targets.eventEnumPath) {
|
|
154
|
+
await (0, ts_mutators_1.ensureEnumMember)({
|
|
155
|
+
filePath: targets.eventEnumPath,
|
|
156
|
+
enumName: "EventName",
|
|
157
|
+
memberName: descriptor.eventEnumMember,
|
|
158
|
+
memberValue: descriptor.eventEnumMember,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
if (descriptor.eventEnumMember && targets.eventsInterfacePath) {
|
|
162
|
+
await registerEventsInterface(descriptor, targets);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
async function registerListener(descriptor, targets) {
|
|
166
|
+
if (!descriptor.listenerClassName || !descriptor.containerEnumMember) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (targets.listenersIndexPath) {
|
|
170
|
+
await registerBarrelExport(targets.listenersIndexPath, descriptor.filePath, descriptor.listenerClassName);
|
|
171
|
+
}
|
|
172
|
+
if (descriptor.containerEnumMember && targets.containerEnumPath) {
|
|
173
|
+
await (0, ts_mutators_1.ensureEnumMember)({
|
|
174
|
+
filePath: targets.containerEnumPath,
|
|
175
|
+
enumName: "ContainerName",
|
|
176
|
+
memberName: descriptor.containerEnumMember,
|
|
177
|
+
memberValue: (0, pascal_to_dot_lower_1.resolveContainerEnumMemberValue)(targets.containerEnumMemberValue, descriptor.containerEnumMember),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
await registerEventContainerInterface(descriptor, targets);
|
|
181
|
+
}
|
|
182
|
+
async function registerConfig(descriptor, targets) {
|
|
183
|
+
await registerConfigEnumMembers(descriptor, targets);
|
|
184
|
+
await registerEnvironmentExampleLines(descriptor, targets);
|
|
185
|
+
if (!descriptor.configEnumMembers?.length || !targets.configValidatorPath) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
for (const key of descriptor.configEnumMembers) {
|
|
189
|
+
await (0, ts_mutators_1.ensureZodObjectEntry)({
|
|
190
|
+
filePath: targets.configValidatorPath,
|
|
191
|
+
constName: "configValidator",
|
|
192
|
+
propertyName: `[ConfigName.${key}]`,
|
|
193
|
+
propertyValue: descriptor.configValidatorType ?? "zod.string()",
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async function registerArtifact(descriptor, targets) {
|
|
198
|
+
if (!targets.enabled)
|
|
199
|
+
return;
|
|
200
|
+
await registerImports(targets);
|
|
201
|
+
switch (descriptor.kind) {
|
|
202
|
+
case "page":
|
|
203
|
+
await registerPage(descriptor, targets);
|
|
204
|
+
break;
|
|
205
|
+
case "selector":
|
|
206
|
+
await registerSelector(descriptor, targets);
|
|
207
|
+
break;
|
|
208
|
+
case "handler":
|
|
209
|
+
await registerHandler(descriptor, targets);
|
|
210
|
+
break;
|
|
211
|
+
case "event":
|
|
212
|
+
await registerEvent(descriptor, targets);
|
|
213
|
+
break;
|
|
214
|
+
case "listener":
|
|
215
|
+
await registerListener(descriptor, targets);
|
|
216
|
+
break;
|
|
217
|
+
case "config":
|
|
218
|
+
await registerConfig(descriptor, targets);
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/Registrations/register.ts"],"names":[],"mappings":";;AAuTA,4CA+BC;AAtVD,yCAA8C;AAE9C,8CAA0D;AAE1D,+DAAwE;AACxE,+CASuB;AAGvB,2EAA2E;AAC3E,MAAM,4BAA4B,GAAG,YAAY,CAAC;AAElD,uEAAuE;AACvE,MAAM,wBAAwB,GAAG,QAAQ,CAAC;AAE1C,0EAA0E;AAC1E,MAAM,2BAA2B,GAAG,WAAW,CAAC;AAEhD,SAAS,yBAAyB,CAC9B,QAA4B,EAC5B,UAAkB,EAClB,kBAA0B;IAE1B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,KAAK,kBAAkB,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,eAAe,GAAG,IAAA,mBAAO,EAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,wBAAwB,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,IAAA,oBAAQ,EAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;IAEzE,OAAO,KAAK,YAAY,EAAE,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,2BAA2B,CACtC,iBAAyB,EACzB,UAAkB,EAClB,WAAmB;IAEnB,MAAM,IAAA,8BAAgB,EAAC;QACnB,QAAQ,EAAE,iBAAiB;QAC3B,QAAQ,EAAE,eAAe;QACzB,UAAU;QACV,WAAW;KACd,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,iCAAiC,CAC5C,sBAA8B,EAC9B,UAAkB,EAClB,SAAiB,EACjB,eAAuB;IAEvB,MAAM,IAAA,oCAAsB,EAAC;QACzB,QAAQ,EAAE,sBAAsB;QAChC,eAAe;QACf,IAAI,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,MAAM,IAAA,qCAAuB,EAAC;QAC1B,QAAQ,EAAE,sBAAsB;QAChC,aAAa,EAAE,oBAAoB;QACnC,YAAY,EAAE,kBAAkB,UAAU,GAAG;QAC7C,YAAY,EAAE,SAAS;KAC1B,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,oBAAoB,CAC/B,UAAkB,EAClB,QAA4B,EAC5B,kBAA0B;IAE1B,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,QAAQ,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAE/F,MAAM,IAAA,gCAAkB,EAAC;QACrB,UAAU;QACV,kBAAkB;KACrB,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,UAA8B,EAAE,OAA4B;IACjG,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACnE,OAAO;IACX,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAC7C,MAAM,IAAA,8BAAgB,EAAC;YACnB,QAAQ,EAAE,OAAO,CAAC,cAAc;YAChC,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE,GAAG;YACf,WAAW,EAAE,GAAG;SACnB,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,KAAK,UAAU,+BAA+B,CAC1C,UAA8B,EAC9B,OAA4B;IAE5B,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACjE,OAAO;IACX,CAAC;IAED,MAAM,IAAA,2CAA6B,EAAC;QAChC,QAAQ,EAAE,OAAO,CAAC,cAAc;QAChC,KAAK,EAAE,UAAU,CAAC,eAAe;KACpC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA4B;IACvD,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IAE1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS;QAClC,OAAO,CAAC,iBAAiB;QACzB,OAAO,CAAC,aAAa;QACrB,OAAO,CAAC,cAAc;QACtB,OAAO,CAAC,sBAAsB;QAC9B,OAAO,CAAC,mBAAmB;QAC3B,OAAO,CAAC,cAAc;QACtB,OAAO,CAAC,kBAAkB;QAC1B,OAAO,CAAC,iBAAiB;QACzB,OAAO,CAAC,kBAAkB;KAC7B,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC,CAAC;IAE/B,MAAM,OAAO,CAAC,GAAG,CAAC,CAAE,GAAG,aAAa,CAAE,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAA,sCAAwB,EAAC;QACpF,QAAQ;QACR,UAAU,EAAE,OAAO;KACtB,CAAC,CAAC,CAAC,CAAC;AACT,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,UAA8B,EAAE,OAA4B;IACpF,IAAI,UAAU,CAAC,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9D,MAAM,2BAA2B,CAC7B,OAAO,CAAC,iBAAiB,EACzB,UAAU,CAAC,mBAAmB,EAC9B,IAAA,qDAA+B,EAAC,SAAS,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAC7E,CAAC;IACN,CAAC;IAED,IAAI,UAAU,CAAC,aAAa,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QACrD,MAAM,oBAAoB,CACtB,OAAO,CAAC,cAAc,EACtB,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,aAAa,CAC3B,CAAC;IACN,CAAC;IAED,IAAI,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC,aAAa,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;QAC/F,MAAM,iCAAiC,CACnC,OAAO,CAAC,sBAAsB,EAC9B,UAAU,CAAC,mBAAmB,EAC9B,UAAU,CAAC,aAAa,EACxB,wBAAwB,CAC3B,CAAC;IACN,CAAC;IAED,MAAM,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,+BAA+B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,UAA8B,EAAE,OAA4B;IACxF,IAAI,CAAC,UAAU,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,kBAAkB;QAAE,OAAO;IAEzE,MAAM,oBAAoB,CACtB,OAAO,CAAC,kBAAkB,EAC1B,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,iBAAiB,CAC/B,CAAC;AACN,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,UAA8B,EAAE,OAA4B;IACvF,IAAI,UAAU,CAAC,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9D,MAAM,2BAA2B,CAC7B,OAAO,CAAC,iBAAiB,EACzB,UAAU,CAAC,mBAAmB,EAC9B,IAAA,qDAA+B,EAAC,SAAS,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAC7E,CAAC;IACN,CAAC;IAED,IAAI,UAAU,CAAC,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC3D,MAAM,oBAAoB,CACtB,OAAO,CAAC,iBAAiB,EACzB,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,gBAAgB,CAC9B,CAAC;IACN,CAAC;IAED,IAAI,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC,gBAAgB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;QAClG,MAAM,iCAAiC,CACnC,OAAO,CAAC,sBAAsB,EAC9B,UAAU,CAAC,mBAAmB,EAC9B,UAAU,CAAC,gBAAgB,EAC3B,2BAA2B,CAC9B,CAAC;IACN,CAAC;AACL,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,UAA8B,EAAE,OAA4B;IAC/F,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAE7C,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC9E,MAAM,IAAI,oCAAwB,CAC9B,kGAAkG,CACrG,CAAC;IACN,CAAC;IAED,MAAM,IAAA,qCAAuB,EAAC;QAC1B,QAAQ,EAAE,OAAO,CAAC,mBAAmB;QACrC,aAAa,EAAE,oBAAoB;QACnC,YAAY,EAAE,cAAc,UAAU,CAAC,eAAe,GAAG;QACzD,YAAY,EAAE,WAAW;KAC5B,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,+BAA+B,CAC1C,UAA8B,EAC9B,OAA4B;IAE5B,IACI,CAAC,UAAU,CAAC,iBAAiB;WAC1B,CAAC,UAAU,CAAC,mBAAmB;WAC/B,CAAC,OAAO,CAAC,sBAAsB,EACpC,CAAC;QACC,OAAO;IACX,CAAC;IAED,MAAM,IAAA,mCAAqB,EAAC;QACxB,QAAQ,EAAE,OAAO,CAAC,sBAAsB;QACxC,eAAe,EAAE,4BAA4B;QAC7C,IAAI,EAAE,UAAU,CAAC,iBAAiB;KACrC,CAAC,CAAC;IAEH,MAAM,IAAA,qCAAuB,EAAC;QAC1B,QAAQ,EAAE,OAAO,CAAC,sBAAsB;QACxC,aAAa,EAAE,oBAAoB;QACnC,YAAY,EAAE,kBAAkB,UAAU,CAAC,mBAAmB,GAAG;QACjE,YAAY,EAAE,UAAU,CAAC,iBAAiB;KAC7C,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,UAA8B,EAAE,OAA4B;IACrF,IAAI,UAAU,CAAC,eAAe,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QACtD,MAAM,IAAA,8BAAgB,EAAC;YACnB,QAAQ,EAAE,OAAO,CAAC,aAAa;YAC/B,QAAQ,EAAE,WAAW;YACrB,UAAU,EAAE,UAAU,CAAC,eAAe;YACtC,WAAW,EAAE,UAAU,CAAC,eAAe;SAC1C,CAAC,CAAC;IACP,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC5D,MAAM,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,UAA8B,EAAE,OAA4B;IACxF,IAAI,CAAC,UAAU,CAAC,iBAAiB,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;QACnE,OAAO;IACX,CAAC;IAED,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC7B,MAAM,oBAAoB,CACtB,OAAO,CAAC,kBAAkB,EAC1B,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,iBAAiB,CAC/B,CAAC;IACN,CAAC;IAED,IAAI,UAAU,CAAC,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9D,MAAM,IAAA,8BAAgB,EAAC;YACnB,QAAQ,EAAE,OAAO,CAAC,iBAAiB;YACnC,QAAQ,EAAE,eAAe;YACzB,UAAU,EAAE,UAAU,CAAC,mBAAmB;YAC1C,WAAW,EAAE,IAAA,qDAA+B,EACxC,OAAO,CAAC,wBAAwB,EAChC,UAAU,CAAC,mBAAmB,CACjC;SACJ,CAAC,CAAC;IACP,CAAC;IAED,MAAM,+BAA+B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,UAA8B,EAAE,OAA4B;IACtF,MAAM,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,+BAA+B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAE3D,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACxE,OAAO;IACX,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAC7C,MAAM,IAAA,kCAAoB,EAAC;YACvB,QAAQ,EAAE,OAAO,CAAC,mBAAmB;YACrC,SAAS,EAAE,iBAAiB;YAC5B,YAAY,EAAE,eAAe,GAAG,GAAG;YACnC,aAAa,EAAE,UAAU,CAAC,mBAAmB,IAAI,cAAc;SAClE,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,UAA8B,EAAE,OAA4B;IAC/F,IAAI,CAAC,OAAO,CAAC,OAAO;QAAE,OAAO;IAE7B,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE/B,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,MAAM;YACP,MAAM,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAExC,MAAM;QACV,KAAK,UAAU;YACX,MAAM,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAE5C,MAAM;QACV,KAAK,SAAS;YACV,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAE3C,MAAM;QACV,KAAK,OAAO;YACR,MAAM,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEzC,MAAM;QACV,KAAK,UAAU;YACX,MAAM,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAE5C,MAAM;QACV,KAAK,QAAQ;YACT,MAAM,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAE1C,MAAM;IACd,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare function ensureEnumMember(parameters: {
|
|
2
|
+
filePath: string;
|
|
3
|
+
enumName: string;
|
|
4
|
+
memberName: string;
|
|
5
|
+
memberValue?: string;
|
|
6
|
+
}): Promise<boolean>;
|
|
7
|
+
export declare function ensureBarrelExport(parameters: {
|
|
8
|
+
barrelPath: string;
|
|
9
|
+
relativeExportPath: string;
|
|
10
|
+
}): Promise<boolean>;
|
|
11
|
+
export declare function ensureTopLevelStatements(parameters: {
|
|
12
|
+
filePath: string;
|
|
13
|
+
statements: string[];
|
|
14
|
+
}): Promise<boolean>;
|
|
15
|
+
export declare function ensureInterfaceProperty(parameters: {
|
|
16
|
+
filePath: string;
|
|
17
|
+
interfaceName: string;
|
|
18
|
+
propertyName: string;
|
|
19
|
+
propertyType: string;
|
|
20
|
+
}): Promise<boolean>;
|
|
21
|
+
export declare function ensureEnvironmentExampleLines(parameters: {
|
|
22
|
+
filePath: string;
|
|
23
|
+
lines: string[];
|
|
24
|
+
}): Promise<boolean>;
|
|
25
|
+
export declare function ensureZodObjectEntry(parameters: {
|
|
26
|
+
filePath: string;
|
|
27
|
+
constName: string;
|
|
28
|
+
propertyName: string;
|
|
29
|
+
propertyValue: string;
|
|
30
|
+
}): Promise<boolean>;
|
|
31
|
+
export declare function ensureTypeNamedImport(parameters: {
|
|
32
|
+
filePath: string;
|
|
33
|
+
moduleSpecifier: string;
|
|
34
|
+
name: string;
|
|
35
|
+
}): Promise<boolean>;
|
|
36
|
+
export declare function ensureValueNamedImport(parameters: {
|
|
37
|
+
filePath: string;
|
|
38
|
+
moduleSpecifier: string;
|
|
39
|
+
name: string;
|
|
40
|
+
}): Promise<boolean>;
|
|
41
|
+
//# sourceMappingURL=ts-mutators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-mutators.d.ts","sourceRoot":"","sources":["../../src/Registrations/ts-mutators.ts"],"names":[],"mappings":"AAuIA,wBAAsB,gBAAgB,CAAC,UAAU,EAAE;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BnB;AAED,wBAAsB,kBAAkB,CAAC,UAAU,EAAE;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBnB;AAED,wBAAsB,wBAAwB,CAAC,UAAU,EAAE;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBnB;AAED,wBAAsB,uBAAuB,CAAC,UAAU,EAAE;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBnB;AAED,wBAAsB,6BAA6B,CAAC,UAAU,EAAE;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBnB;AAED,wBAAsB,oBAAoB,CAAC,UAAU,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBnB;AAED,wBAAsB,qBAAqB,CAAC,UAAU,EAAE;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnB;AAED,wBAAsB,sBAAsB,CAAC,UAAU,EAAE;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnB"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureEnumMember = ensureEnumMember;
|
|
4
|
+
exports.ensureBarrelExport = ensureBarrelExport;
|
|
5
|
+
exports.ensureTopLevelStatements = ensureTopLevelStatements;
|
|
6
|
+
exports.ensureInterfaceProperty = ensureInterfaceProperty;
|
|
7
|
+
exports.ensureEnvironmentExampleLines = ensureEnvironmentExampleLines;
|
|
8
|
+
exports.ensureZodObjectEntry = ensureZodObjectEntry;
|
|
9
|
+
exports.ensureTypeNamedImport = ensureTypeNamedImport;
|
|
10
|
+
exports.ensureValueNamedImport = ensureValueNamedImport;
|
|
11
|
+
const exception_1 = require("@odg/exception");
|
|
12
|
+
const ts_morph_1 = require("ts-morph");
|
|
13
|
+
function createProject() {
|
|
14
|
+
return new ts_morph_1.Project({
|
|
15
|
+
manipulationSettings: {
|
|
16
|
+
quoteKind: ts_morph_1.QuoteKind.Double,
|
|
17
|
+
useTrailingCommas: true,
|
|
18
|
+
},
|
|
19
|
+
skipAddingFilesFromTsConfig: true,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function addSourceFile(project, filePath) {
|
|
23
|
+
return project.addSourceFileAtPathIfExists(filePath)
|
|
24
|
+
?? project.createSourceFile(filePath, "", { scriptKind: ts_morph_1.ScriptKind.TS, overwrite: false });
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Collapses duplicate commas that ts-morph can emit when appending enum members
|
|
28
|
+
* (e.g. after trailing commas and section comments).
|
|
29
|
+
*
|
|
30
|
+
* @param {string} source Full source text
|
|
31
|
+
* @returns {string} Source with adjacent duplicate commas normalized
|
|
32
|
+
*/
|
|
33
|
+
function collapseAdjacentDuplicateCommas(source) {
|
|
34
|
+
let result = source;
|
|
35
|
+
let previous = "";
|
|
36
|
+
while (result !== previous) {
|
|
37
|
+
previous = result;
|
|
38
|
+
result = result.replaceAll(/,\s*,/g, ",");
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
function appendNamedImport(importDeclaration, name) {
|
|
43
|
+
const hasNamed = importDeclaration.getNamedImports().some((named) => named.getName() === name);
|
|
44
|
+
if (hasNamed) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
importDeclaration.addNamedImport({ name });
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
function mutateNamedImport(sourceFile, moduleSpecifier, name, isTypeOnly) {
|
|
51
|
+
const importDeclaration = sourceFile.getImportDeclarations().find((declaration) => declaration.getModuleSpecifierValue() === moduleSpecifier
|
|
52
|
+
&& declaration.isTypeOnly() === isTypeOnly);
|
|
53
|
+
if (importDeclaration) {
|
|
54
|
+
return appendNamedImport(importDeclaration, name);
|
|
55
|
+
}
|
|
56
|
+
sourceFile.addImportDeclaration({
|
|
57
|
+
isTypeOnly,
|
|
58
|
+
namedImports: [{ name }],
|
|
59
|
+
moduleSpecifier,
|
|
60
|
+
});
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
async function commitNamedImport(parameters, isTypeOnly) {
|
|
64
|
+
const project = createProject();
|
|
65
|
+
const sourceFile = addSourceFile(project, parameters.filePath);
|
|
66
|
+
if (!mutateNamedImport(sourceFile, parameters.moduleSpecifier, parameters.name, isTypeOnly)) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
await sourceFile.save();
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
function resolveZodObjectLiteral(parameters, sourceFile) {
|
|
73
|
+
const variableDeclaration = sourceFile
|
|
74
|
+
.getVariableDeclarations()
|
|
75
|
+
.find((declaration) => declaration.getName() === parameters.constName);
|
|
76
|
+
if (!variableDeclaration) {
|
|
77
|
+
throw new exception_1.InvalidArgumentException(`Const "${parameters.constName}" not found in ${parameters.filePath}`);
|
|
78
|
+
}
|
|
79
|
+
const initializer = variableDeclaration.getInitializer();
|
|
80
|
+
if (!initializer || !ts_morph_1.Node.isCallExpression(initializer)) {
|
|
81
|
+
throw new exception_1.InvalidArgumentException(`"${parameters.constName}" initializer is not a call expression`);
|
|
82
|
+
}
|
|
83
|
+
const [firstArgument] = initializer.getArguments();
|
|
84
|
+
if (!ts_morph_1.Node.isObjectLiteralExpression(firstArgument)) {
|
|
85
|
+
throw new exception_1.InvalidArgumentException(`"${parameters.constName}" first argument is not an object literal`);
|
|
86
|
+
}
|
|
87
|
+
return firstArgument;
|
|
88
|
+
}
|
|
89
|
+
function hasObjectPropertyByNamePrefix(objectLiteral, propertyName) {
|
|
90
|
+
return objectLiteral.getProperties().some((property) => property.getText().startsWith(propertyName));
|
|
91
|
+
}
|
|
92
|
+
async function ensureEnumMember(parameters) {
|
|
93
|
+
const project = createProject();
|
|
94
|
+
const sourceFile = addSourceFile(project, parameters.filePath);
|
|
95
|
+
const enumDeclaration = sourceFile.getEnum(parameters.enumName);
|
|
96
|
+
if (!enumDeclaration) {
|
|
97
|
+
throw new exception_1.InvalidArgumentException(`Enum "${parameters.enumName}" not found in ${parameters.filePath}`);
|
|
98
|
+
}
|
|
99
|
+
const existing = enumDeclaration.getMembers().some((member) => {
|
|
100
|
+
const memberName = member.getName().split("\"").join("");
|
|
101
|
+
return memberName === parameters.memberName;
|
|
102
|
+
});
|
|
103
|
+
if (existing) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
enumDeclaration.addMember({
|
|
107
|
+
name: `"${parameters.memberName}"`,
|
|
108
|
+
initializer: `"${parameters.memberValue ?? parameters.memberName}"`,
|
|
109
|
+
});
|
|
110
|
+
sourceFile.replaceWithText(collapseAdjacentDuplicateCommas(sourceFile.getFullText()));
|
|
111
|
+
await sourceFile.save();
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
async function ensureBarrelExport(parameters) {
|
|
115
|
+
const project = createProject();
|
|
116
|
+
const sourceFile = addSourceFile(project, parameters.barrelPath);
|
|
117
|
+
const normalized = parameters.relativeExportPath.startsWith("./")
|
|
118
|
+
? parameters.relativeExportPath
|
|
119
|
+
: `./${parameters.relativeExportPath}`;
|
|
120
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
121
|
+
const already = sourceFile.getExportDeclarations().some((declaration) => declaration.getModuleSpecifierValue() === normalized);
|
|
122
|
+
if (already) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
sourceFile.addExportDeclaration({
|
|
126
|
+
moduleSpecifier: normalized,
|
|
127
|
+
isTypeOnly: false,
|
|
128
|
+
});
|
|
129
|
+
await sourceFile.save();
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
async function ensureTopLevelStatements(parameters) {
|
|
133
|
+
if (parameters.statements.length === 0) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
const project = createProject();
|
|
137
|
+
const sourceFile = addSourceFile(project, parameters.filePath);
|
|
138
|
+
const text = sourceFile.getFullText();
|
|
139
|
+
const toAdd = parameters.statements.filter((statement) => !text.includes(statement));
|
|
140
|
+
if (toAdd.length === 0) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
sourceFile.insertStatements(0, `${toAdd.join("\n")}\n`);
|
|
144
|
+
await sourceFile.save();
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
async function ensureInterfaceProperty(parameters) {
|
|
148
|
+
const project = createProject();
|
|
149
|
+
const sourceFile = addSourceFile(project, parameters.filePath);
|
|
150
|
+
const iface = sourceFile.getInterface(parameters.interfaceName);
|
|
151
|
+
if (!iface) {
|
|
152
|
+
throw new exception_1.InvalidArgumentException(`Interface "${parameters.interfaceName}" not found in ${parameters.filePath}`);
|
|
153
|
+
}
|
|
154
|
+
const exists = iface.getProperties().some((property) => property.getName() === parameters.propertyName);
|
|
155
|
+
if (exists) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
iface.addProperty({
|
|
159
|
+
name: parameters.propertyName,
|
|
160
|
+
type: parameters.propertyType,
|
|
161
|
+
hasQuestionToken: false,
|
|
162
|
+
});
|
|
163
|
+
await sourceFile.save();
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
async function ensureEnvironmentExampleLines(parameters) {
|
|
167
|
+
const project = createProject();
|
|
168
|
+
const sourceFile = addSourceFile(project, parameters.filePath);
|
|
169
|
+
/**
|
|
170
|
+
* This file can be non-TS; we treat it as raw text but keep a single write path.
|
|
171
|
+
*/
|
|
172
|
+
const existing = sourceFile.getFullText();
|
|
173
|
+
const missing = parameters.lines.filter((line) => !existing.includes(line));
|
|
174
|
+
if (missing.length === 0) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
const insertNewline = existing.endsWith("\n") || existing.length === 0 ? "" : "\n";
|
|
178
|
+
sourceFile.replaceWithText(`${existing}${insertNewline}${missing.join("\n")}\n`);
|
|
179
|
+
await sourceFile.save();
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
async function ensureZodObjectEntry(parameters) {
|
|
183
|
+
const project = createProject();
|
|
184
|
+
const sourceFile = addSourceFile(project, parameters.filePath);
|
|
185
|
+
const zodObjectLiteral = resolveZodObjectLiteral(parameters, sourceFile);
|
|
186
|
+
if (hasObjectPropertyByNamePrefix(zodObjectLiteral, parameters.propertyName)) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
zodObjectLiteral.addPropertyAssignment({
|
|
190
|
+
name: parameters.propertyName,
|
|
191
|
+
initializer: parameters.propertyValue,
|
|
192
|
+
});
|
|
193
|
+
await sourceFile.save();
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
async function ensureTypeNamedImport(parameters) {
|
|
197
|
+
return commitNamedImport(parameters, true);
|
|
198
|
+
}
|
|
199
|
+
async function ensureValueNamedImport(parameters) {
|
|
200
|
+
return commitNamedImport(parameters, false);
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=ts-mutators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-mutators.js","sourceRoot":"","sources":["../../src/Registrations/ts-mutators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export type ArtifactKind = "config" | "event" | "handler" | "listener" | "page" | "selector";
|
|
2
|
+
export interface RegistrationTargets {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
containerEnumPath?: string;
|
|
5
|
+
eventEnumPath?: string;
|
|
6
|
+
configEnumPath?: string;
|
|
7
|
+
containerInterfacePath?: string;
|
|
8
|
+
eventsInterfacePath?: string;
|
|
9
|
+
pagesIndexPath?: string;
|
|
10
|
+
selectorsIndexPath?: string;
|
|
11
|
+
handlersIndexPath?: string;
|
|
12
|
+
listenersIndexPath?: string;
|
|
13
|
+
envExamplePath?: string;
|
|
14
|
+
/** Path to the file containing `configValidator = zod.object({...})` to mutate. */
|
|
15
|
+
configValidatorPath?: string;
|
|
16
|
+
eventPayloadType?: string;
|
|
17
|
+
typeImports?: string[];
|
|
18
|
+
/** Overrides ContainerName enum value for event/listener registration (default: dot.lower from class name). */
|
|
19
|
+
containerEnumMemberValue?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ArtifactDescriptor {
|
|
22
|
+
kind: ArtifactKind;
|
|
23
|
+
name: string;
|
|
24
|
+
pageClassName?: string;
|
|
25
|
+
selectorClassName?: string;
|
|
26
|
+
handlerClassName?: string;
|
|
27
|
+
eventEnumMember?: string;
|
|
28
|
+
listenerClassName?: string;
|
|
29
|
+
containerEnumMember?: string;
|
|
30
|
+
filePath?: string;
|
|
31
|
+
configEnumMembers?: string[];
|
|
32
|
+
envExampleLines?: string[];
|
|
33
|
+
configValidatorType?: string;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Registrations/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;AAE7F,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,CAAC;IAGjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mFAAmF;IACnF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,+GAA+G;IAC/G,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,YAAY,CAAC;IAGnB,IAAI,EAAE,MAAM,CAAC;IAGb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAG3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/Registrations/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|