@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/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 "../../eslint.base.config.mjs"
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.0",
5
+ "version": "1.42.2",
6
6
  "dependencies": {
7
- "@babel/generator": "7.28.0",
8
- "@babel/parser": "7.28.0",
9
- "@typescript-eslint/utils": "8.39.0",
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.6"
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.6",
25
+ "effect": "^3.17.13",
26
26
  "madge": "8.0.0",
27
- "typescript": "^5.8.3"
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 && tspc --build",
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",
@@ -1,3 +0,0 @@
1
- import ts from "typescript";
2
- export declare function processNode(tc: ts.TypeChecker, root: ts.Node, writeFullTypes?: boolean): (n: ts.Node) => string[] | undefined;
3
- //# sourceMappingURL=compiler.d.ts.map
@@ -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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