@effect-app/eslint-codegen-model 1.42.0 → 1.42.2
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/CHANGELOG.md +12 -0
- package/dist/.tsbuildinfo +1 -1
- package/eslint.config.mjs +1 -1
- package/package.json +9 -8
- package/dist/compiler.d.ts +0 -3
- package/dist/compiler.d.ts.map +0 -1
- package/dist/compiler.js +0 -256
package/eslint.config.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from "node:path"
|
|
2
2
|
import { fileURLToPath } from "node:url"
|
|
3
|
-
import { augmentedConfig } from "
|
|
3
|
+
import { augmentedConfig } from "effect-app/eslint.base.config"
|
|
4
4
|
|
|
5
5
|
const __filename = fileURLToPath(import.meta.url)
|
|
6
6
|
const __dirname = path.dirname(__filename)
|
package/package.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"name": "@effect-app/eslint-codegen-model",
|
|
3
3
|
"description": "Contains eslint helpers",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "1.42.
|
|
5
|
+
"version": "1.42.2",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@babel/generator": "7.28.
|
|
8
|
-
"@babel/parser": "7.28.
|
|
9
|
-
"@typescript-eslint/utils": "8.
|
|
7
|
+
"@babel/generator": "7.28.3",
|
|
8
|
+
"@babel/parser": "7.28.4",
|
|
9
|
+
"@typescript-eslint/utils": "8.42.0",
|
|
10
10
|
"eslint-plugin-codegen": "0.17.0",
|
|
11
11
|
"glob": "8.1.0",
|
|
12
12
|
"io-ts": "2.2.22",
|
|
@@ -15,23 +15,24 @@
|
|
|
15
15
|
"lodash": "4.17.21"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
18
|
-
"effect": "^3.17.
|
|
18
|
+
"effect": "^3.17.13"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@types/babel__generator": "7.27.0",
|
|
22
22
|
"@types/babel__traverse": "7.28.0",
|
|
23
23
|
"@types/glob": "8.1.0",
|
|
24
24
|
"@types/lodash": "4.17.20",
|
|
25
|
-
"effect": "^3.17.
|
|
25
|
+
"effect": "^3.17.13",
|
|
26
26
|
"madge": "8.0.0",
|
|
27
|
-
"typescript": "
|
|
27
|
+
"typescript": "~5.9.2",
|
|
28
|
+
"effect-app": "3.3.4"
|
|
28
29
|
},
|
|
29
30
|
"main": "index.js",
|
|
30
31
|
"author": "Wessel van der Veen & Scott vanBommel",
|
|
31
32
|
"license": "ISC",
|
|
32
33
|
"scripts": {
|
|
33
34
|
"watch": "pnpm build:tsc -w",
|
|
34
|
-
"build:tsc": "pnpm clean-dist &&
|
|
35
|
+
"build:tsc": "pnpm clean-dist && tsc --build",
|
|
35
36
|
"build": "tspc",
|
|
36
37
|
"circular": "madge --circular --ts-config ./tsconfig.json --extensions ts ./src",
|
|
37
38
|
"ncu": "ncu",
|
package/dist/compiler.d.ts
DELETED
package/dist/compiler.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,YAAY,CAAA;AA6B3C,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,cAAc,UAAQ,OAExE,GAAG,IAAI,0BAsNnB"}
|
package/dist/compiler.js
DELETED
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.processNode = void 0;
|
|
27
|
-
const typescript_1 = __importStar(require("typescript"));
|
|
28
|
-
const sortUnion = (a, b) => {
|
|
29
|
-
if (a !== "null" && a !== "undefined" && (b === "null" || b === "undefined")) {
|
|
30
|
-
return -1;
|
|
31
|
-
}
|
|
32
|
-
if (b !== "null" && b !== "undefined" && (a === "null" || a === "undefined")) {
|
|
33
|
-
return 1;
|
|
34
|
-
}
|
|
35
|
-
if (a < b) {
|
|
36
|
-
return -1;
|
|
37
|
-
}
|
|
38
|
-
if (a > b) {
|
|
39
|
-
return 1;
|
|
40
|
-
}
|
|
41
|
-
return 0;
|
|
42
|
-
};
|
|
43
|
-
const sortAlpha = (a, b) => {
|
|
44
|
-
if (a < b) {
|
|
45
|
-
return -1;
|
|
46
|
-
}
|
|
47
|
-
if (a > b) {
|
|
48
|
-
return 1;
|
|
49
|
-
}
|
|
50
|
-
return 0;
|
|
51
|
-
};
|
|
52
|
-
// TODO: we don't support string literals with spaces in them currently.
|
|
53
|
-
const rx = /(([^\s\<\>\,\[\(]+)? \| ([^\s\<\>\,\]\)]+))+/;
|
|
54
|
-
function sortIt(str) {
|
|
55
|
-
return str.split(" | ").sort(sortUnion).join(" | ");
|
|
56
|
-
}
|
|
57
|
-
const debug = false; // true
|
|
58
|
-
function processNode(tc, root, writeFullTypes = false) {
|
|
59
|
-
const processed = [];
|
|
60
|
-
return (n) => {
|
|
61
|
-
var _a, _b;
|
|
62
|
-
if ( /*ts.isClassDeclaration(n) || ts.isTypeAliasDeclaration(n)*/true) {
|
|
63
|
-
let modelName = null;
|
|
64
|
-
if (typescript_1.default.isClassDeclaration(n)) {
|
|
65
|
-
if (n.getText().match(/(Extended(Tagged)?Class)|ExtendedTaggedRequest/)) {
|
|
66
|
-
modelName = (_a = n.name) === null || _a === void 0 ? void 0 : _a.escapedText;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (!modelName) {
|
|
70
|
-
const constructorName = (_b = n.name) === null || _b === void 0 ? void 0 : _b.escapedText;
|
|
71
|
-
// TODO: Remove requirement
|
|
72
|
-
if (!(constructorName === null || constructorName === void 0 ? void 0 : constructorName.endsWith("Constructor"))) {
|
|
73
|
-
//console.log("$$$constructorName doesnt end with Constructor", constructorName)
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
modelName = constructorName.replace("Constructor", "");
|
|
77
|
-
}
|
|
78
|
-
if (processed.includes(modelName)) {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
processed.push(modelName);
|
|
82
|
-
if (!writeFullTypes) {
|
|
83
|
-
return [
|
|
84
|
-
`export namespace ${modelName} {`,
|
|
85
|
-
` export class From extends S.FromClass<typeof ${modelName}>() {}`,
|
|
86
|
-
// ` export const From: FromOps = { $: {} }`,
|
|
87
|
-
// ` export interface FromAspects {}`,
|
|
88
|
-
"}",
|
|
89
|
-
];
|
|
90
|
-
}
|
|
91
|
-
//console.log("$$$ constructorName", constructorName)
|
|
92
|
-
const t = tc.getTypeAtLocation(n);
|
|
93
|
-
const result = { encoded: [], parsed: [] };
|
|
94
|
-
const unions = {};
|
|
95
|
-
//console.log("$$$ fields", t.getProperties().map(x => x.escapedName))
|
|
96
|
-
t.getProperties().forEach((c) => {
|
|
97
|
-
const method = c.name;
|
|
98
|
-
if (method === "encoded" || method === "parsed") {
|
|
99
|
-
//console.log("$$$ method", method)
|
|
100
|
-
//console.log(c.members)
|
|
101
|
-
const tt = tc.getTypeOfSymbolAtLocation(c, n);
|
|
102
|
-
// const s = tc.getReturnTypeOfSignature(tt.getCallSignatures()[0])
|
|
103
|
-
// const type = tc.getReturnTypeOfSignature(s! as any /* TODO */)
|
|
104
|
-
tt.getProperties().forEach(p => {
|
|
105
|
-
var _a;
|
|
106
|
-
const isLookup = debug && p.escapedName === "carrier";
|
|
107
|
-
//kind = 207,
|
|
108
|
-
//arguments[0].escapedText === "HosterRole"
|
|
109
|
-
//console.log("$$$p", p.escapedName)
|
|
110
|
-
//if (p.escapedName === "opposite") {
|
|
111
|
-
//console.log("$$$ a union!", p.declarations?.map(x => x.forEachChild(c => {
|
|
112
|
-
// TODO: have to find nullable, array, set, map, etc.
|
|
113
|
-
// TODO: "From"
|
|
114
|
-
// but also should find fully custom sets like PurchaseOrderModulesSet - we should be able to just use those directly, incl PurchaseOrderModulesSet.From
|
|
115
|
-
// for now just skip them?
|
|
116
|
-
(_a = p.declarations) === null || _a === void 0 ? void 0 : _a.map(x => x.forEachChild(c => {
|
|
117
|
-
var _a;
|
|
118
|
-
if (isLookup) {
|
|
119
|
-
console.log("$$$ lookup", c.kind, c);
|
|
120
|
-
}
|
|
121
|
-
if (c.kind === typescript_1.SyntaxKind.CallExpression) { // 207 -- SyntaxKind.ElementAccessExpression) {
|
|
122
|
-
let it = c.arguments[0];
|
|
123
|
-
//const isState = p.escapedName === "state"
|
|
124
|
-
if (isLookup) {
|
|
125
|
-
console.log("$$$ state it", it);
|
|
126
|
-
}
|
|
127
|
-
const isNullable = ((_a = it.expression) === null || _a === void 0 ? void 0 : _a.escapedText) === "nullable";
|
|
128
|
-
const isIt = it.arguments && it.arguments[0]; //it.expression?.escapedText === "nullable"
|
|
129
|
-
if (isIt) {
|
|
130
|
-
//console.log("$$ nullable", it.arguments[0])
|
|
131
|
-
// TODO: usually the union is on the last input, we need to support all elements individually however
|
|
132
|
-
it = it.arguments[it.arguments.length - 1];
|
|
133
|
-
}
|
|
134
|
-
//console.log("$args", it)
|
|
135
|
-
//tc.getTypeAtLocation(it)
|
|
136
|
-
const tt = tc.getTypeAtLocation(c); //tc.getTypeOfSymbolAtLocation(it.parent, n)
|
|
137
|
-
const typeDecl = tc.typeToString(tt, root, typescript_1.default.TypeFormatFlags.NoTruncation
|
|
138
|
-
//ts.TypeFormatFlags.None
|
|
139
|
-
//ts.TypeFormatFlags.AddUndefined |
|
|
140
|
-
// | ts.TypeFormatFlags.NoTypeReduction
|
|
141
|
-
// | ts.TypeFormatFlags.MultilineObjectLiterals
|
|
142
|
-
//| ts.TypeFormatFlags.InTypeAlias
|
|
143
|
-
| typescript_1.default.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope // prevents import(*)
|
|
144
|
-
// | ts.TypeFormatFlags.UseStructuralFallback
|
|
145
|
-
);
|
|
146
|
-
if (isLookup) {
|
|
147
|
-
console.log("$$ type", typeDecl);
|
|
148
|
-
}
|
|
149
|
-
const matches = typeDecl.match(rx);
|
|
150
|
-
if (isLookup) {
|
|
151
|
-
console.log("$$ matches", matches);
|
|
152
|
-
}
|
|
153
|
-
const isOptional = typeDecl.match(/\>, "optional"/);
|
|
154
|
-
if (matches) {
|
|
155
|
-
let replaced = matches[0].replace(rx, (match) => sortIt(match));
|
|
156
|
-
replaced = sortIt(isOptional ? isNullable ? replaced.replace(" | null", " | undefined | null") : replaced + " | undefined" : replaced);
|
|
157
|
-
//console.log("$$ replaced", replaced, it.escapedText, matches)
|
|
158
|
-
// if (it.escapedText === "TaskState") {
|
|
159
|
-
// console.log("Help", it)
|
|
160
|
-
// }
|
|
161
|
-
if (isLookup) {
|
|
162
|
-
console.log("$$$ replaced", it.escapedText, replaced);
|
|
163
|
-
}
|
|
164
|
-
if (it.escapedText && !it.escapedText.endsWith("Set") /* skip the "Set" problem */ && replaced.replace(" | null", "").includes("|")) {
|
|
165
|
-
const replacement = it.escapedText + (isNullable ? " | null" : "") + (isOptional ? " | undefined" : "");
|
|
166
|
-
// if (it.escapedText === "TaskState") {
|
|
167
|
-
// console.log("$$$", { replaced, replacement })
|
|
168
|
-
// unions[replaced] = replacement
|
|
169
|
-
// } else {
|
|
170
|
-
unions[replaced] = replacement;
|
|
171
|
-
if (isLookup) {
|
|
172
|
-
console.log("$$ repl", { replaced, replacement });
|
|
173
|
-
}
|
|
174
|
-
//}
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
// if (isIt) {
|
|
178
|
-
// console.log("$$ no name found", it.escapedText)
|
|
179
|
-
// }
|
|
180
|
-
// console.log("$$ no name found??", it)
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
//c.kind === 346 ? console.log(c) : null
|
|
185
|
-
//console.log((c as any).flowNode?.node?.name)
|
|
186
|
-
}));
|
|
187
|
-
//}
|
|
188
|
-
});
|
|
189
|
-
if (debug && Object.keys(unions).length) {
|
|
190
|
-
console.log("$$$ unions to replace", unions);
|
|
191
|
-
}
|
|
192
|
-
const typeDecl = tc.typeToString(tt, root, typescript_1.default.TypeFormatFlags.NoTruncation
|
|
193
|
-
//ts.TypeFormatFlags.None
|
|
194
|
-
//ts.TypeFormatFlags.AddUndefined |
|
|
195
|
-
// | ts.TypeFormatFlags.NoTypeReduction
|
|
196
|
-
// | ts.TypeFormatFlags.MultilineObjectLiterals
|
|
197
|
-
//| ts.TypeFormatFlags.InTypeAlias
|
|
198
|
-
| typescript_1.default.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope // prevents import(*)
|
|
199
|
-
// | ts.TypeFormatFlags.UseStructuralFallback
|
|
200
|
-
);
|
|
201
|
-
const str = typeDecl === "{}" ? [] :
|
|
202
|
-
// drop leading { and trailing }
|
|
203
|
-
typeDecl.substring(2, typeDecl.length - 2)
|
|
204
|
-
.split(";")
|
|
205
|
-
.map(l => l.trim())
|
|
206
|
-
// todo; skip the first split, as its the property
|
|
207
|
-
.map(l => l.replace(rx, (match) => {
|
|
208
|
-
var _a;
|
|
209
|
-
const rpl = sortIt(match);
|
|
210
|
-
//if (debug) { console.log("Searching for", rpl, { unions}) }
|
|
211
|
-
if (rpl.endsWith(" | undefined")) {
|
|
212
|
-
const sub = unions[rpl.replace(" | undefined", "")];
|
|
213
|
-
return sub ? sub + " | undefined" : (_a = unions[rpl]) !== null && _a !== void 0 ? _a : rpl;
|
|
214
|
-
}
|
|
215
|
-
const sub = unions[rpl];
|
|
216
|
-
return (sub ? sub : rpl);
|
|
217
|
-
})
|
|
218
|
-
.replaceAll(" Array<", " ReadonlyArray<") // .replaceAll(/(Array|Set|Map)\</", "ReadonlyArray<") //
|
|
219
|
-
.replaceAll(" Set<", " ReadonlySet<")
|
|
220
|
-
.replaceAll(" Map<", " ReadonlyMap<")
|
|
221
|
-
.replaceAll("(Array<", "(ReadonlyArray<") // .replaceAll(/(Array|Set|Map)\</", "ReadonlyArray<") //
|
|
222
|
-
.replaceAll("(Set<", "(ReadonlySet<")
|
|
223
|
-
.replaceAll("(Map<", "(ReadonlyMap<")
|
|
224
|
-
.replaceAll(" Array.Array<", " ReadonlyArray<") // .replaceAll(/(Array|Set|Map)\</", "ReadonlyArray<") //
|
|
225
|
-
.replaceAll(" Set.Set<", " ReadonlySet<")
|
|
226
|
-
.replaceAll(" Map.Map<", " ReadonlyMap<"))
|
|
227
|
-
// we sort for now, because otherwise we have sometimes multiple times changing back and forth between editor and console.
|
|
228
|
-
.sort(sortAlpha);
|
|
229
|
-
// Taken care of by "ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope"
|
|
230
|
-
//.replaceAll(/import\("[^"]+"\)\./g, "")
|
|
231
|
-
result[method] = str;
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
if (!("parsed" in result)) {
|
|
235
|
-
throw new Error("No parsed result");
|
|
236
|
-
}
|
|
237
|
-
if (!("encoded" in result)) {
|
|
238
|
-
throw new Error("No encoded result");
|
|
239
|
-
}
|
|
240
|
-
const encoded = result.encoded.filter(x => !!x);
|
|
241
|
-
const parsed = result.parsed.filter(x => !!x);
|
|
242
|
-
return [
|
|
243
|
-
`export interface ${modelName} {${parsed.length ? "\n" + parsed.map(l => " " + l).join("\n") + "\n" : ""}}`,
|
|
244
|
-
`export namespace ${modelName} {`,
|
|
245
|
-
` export interface From {${encoded.length ? "\n" + encoded.map(l => " " + l).join("\n") + "\n " : ""}}`,
|
|
246
|
-
` export const From: FromOps = {}`,
|
|
247
|
-
// ` export const From: FromOps = { $: {} }`,
|
|
248
|
-
// ` export interface FromAspects {}`,
|
|
249
|
-
` export interface FromOps {}`,
|
|
250
|
-
"}",
|
|
251
|
-
];
|
|
252
|
-
}
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
exports.processNode = processNode;
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBMkM7QUFFM0MsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUU7SUFDekMsSUFBSSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSSxXQUFXLElBQUksQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzVFLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDWCxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzdFLE9BQU8sQ0FBQyxDQUFBO0lBQ1YsQ0FBQztJQUNELElBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUFDLENBQUM7SUFDeEIsSUFBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLENBQUMsQ0FBQztJQUFDLENBQUM7SUFDdkIsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUE7QUFFRCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRTtJQUN6QyxJQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFBQyxDQUFDO0lBQ3hCLElBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxDQUFDLENBQUM7SUFBQyxDQUFDO0lBQ3ZCLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFBO0FBRUQsd0VBQXdFO0FBQ3hFLE1BQU0sRUFBRSxHQUFH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
|