effect-app 4.0.0 → 4.0.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 +21 -0
- package/dist/Array.d.ts +0 -17
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +2 -26
- package/dist/Chunk.d.ts +3 -27
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +4 -39
- package/dist/DateTime.d.ts +33 -0
- package/dist/DateTime.d.ts.map +1 -0
- package/dist/DateTime.js +18 -0
- package/dist/Effect.d.ts +0 -11
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +3 -18
- package/dist/Function.d.ts +0 -4
- package/dist/Function.d.ts.map +1 -1
- package/dist/Function.js +1 -7
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +4 -5
- package/dist/Model/dsl.d.ts +4 -3
- package/dist/Model/dsl.d.ts.map +1 -1
- package/dist/Model/dsl.js +6 -4
- package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -1
- package/dist/Model/query/new-kid-interpreter.js +5 -6
- package/dist/Option.d.ts +0 -2
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +1 -7
- package/dist/Pure.d.ts +4 -4
- package/dist/Pure.d.ts.map +1 -1
- package/dist/Pure.js +16 -16
- package/dist/Schema/ext.d.ts +0 -21
- package/dist/Schema/ext.d.ts.map +1 -1
- package/dist/Schema/ext.js +4 -10
- package/dist/Schema.d.ts +1 -1
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +2 -2
- package/dist/Set.d.ts.map +1 -1
- package/dist/Set.js +6 -5
- package/dist/client/apiClientFactory.d.ts.map +1 -1
- package/dist/client/apiClientFactory.js +7 -6
- package/dist/migration/nativeEffect.d.ts +21 -0
- package/dist/migration/nativeEffect.d.ts.map +1 -0
- package/dist/migration/nativeEffect.js +598 -0
- package/dist/utils.d.ts +0 -6
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -13
- package/dist/waitingGate.d.ts +38 -0
- package/dist/waitingGate.d.ts.map +1 -0
- package/dist/waitingGate.js +63 -0
- package/dist/withToast.d.ts.map +1 -1
- package/dist/withToast.js +42 -3
- package/package.json +2 -3
- package/src/Array.ts +4 -36
- package/src/Chunk.ts +4 -53
- package/src/DateTime.ts +473 -0
- package/src/Effect.ts +3 -22
- package/src/Function.ts +0 -7
- package/src/Model/Repository/internal/internal.ts +3 -4
- package/src/Model/dsl.ts +5 -4
- package/src/Model/query/new-kid-interpreter.ts +4 -5
- package/src/Option.ts +1 -8
- package/src/Pure.ts +15 -15
- package/src/Schema/ext.ts +3 -10
- package/src/Schema.ts +1 -1
- package/src/Set.ts +5 -4
- package/src/client/apiClientFactory.ts +8 -7
- package/src/migration/nativeEffect.ts +645 -0
- package/src/utils.ts +0 -17
- package/src/waitingGate.ts +82 -0
- package/src/withToast.ts +51 -5
- package/test/dateTimeLocal.test.ts +55 -0
- package/test/dist/dateTimeLocal.test.d.ts.map +1 -0
- package/test/dist/nativeEffectMigration.test.d.ts.map +1 -0
- package/test/dist/waitingGate.test.d.ts.map +1 -0
- package/test/nativeEffectMigration.test.ts +77 -0
- package/test/waitingGate.test.ts +64 -0
- package/dist/_ext/date.d.ts +0 -15
- package/dist/_ext/date.d.ts.map +0 -1
- package/dist/_ext/date.js +0 -16
- package/dist/_ext/misc.d.ts +0 -17
- package/dist/_ext/misc.d.ts.map +0 -1
- package/dist/_ext/misc.js +0 -19
- package/src/_ext/date.ts +0 -27
- package/src/_ext/misc.ts +0 -49
|
@@ -0,0 +1,598 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rewrites source that imported effect-app helpers now provided by Effect.
|
|
3
|
+
*
|
|
4
|
+
* The rewrite is textual and keeps the rest of the file. It understands named
|
|
5
|
+
* imports, aliases, and `import * as` namespaces from the effect-app entry points
|
|
6
|
+
* listed in {@link nativeEffectReplacements}.
|
|
7
|
+
*/
|
|
8
|
+
const struct = [["Struct", "effect/Struct"]];
|
|
9
|
+
const record = [["Record", "effect/Record"]];
|
|
10
|
+
const str = [["String", "effect/String"]];
|
|
11
|
+
const option = [["Option", "effect/Option"]];
|
|
12
|
+
const array = [["Array", "effect/Array"]];
|
|
13
|
+
const chunk = [["Chunk", "effect/Chunk"]];
|
|
14
|
+
const tuple = [["Tuple", "effect/Tuple"]];
|
|
15
|
+
const effect = [["Effect", "effect/Effect"]];
|
|
16
|
+
const dateTime = [["DateTime", "effect/DateTime"], ["pipeZonedLocal", "effect-app/DateTime"]];
|
|
17
|
+
const deferred = [["Deferred", "effect/Deferred"]];
|
|
18
|
+
const result = [["Result", "effect/Result"]];
|
|
19
|
+
const absurd = [["absurd", "effect/Function"]];
|
|
20
|
+
export const nativeEffectReplacements = [
|
|
21
|
+
{
|
|
22
|
+
module: "effect-app/utils",
|
|
23
|
+
name: "typedKeysOf",
|
|
24
|
+
expression: "Struct.keys",
|
|
25
|
+
imports: struct,
|
|
26
|
+
note: "Struct.keys returns `(keyof T & string)[]`."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
module: "effect-app/utils",
|
|
30
|
+
name: "typedValuesOf",
|
|
31
|
+
expression: "Record.values",
|
|
32
|
+
imports: record,
|
|
33
|
+
note: "Record.values reads a record with one value type. When each value's type depends on its key, use Object.values."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
module: "effect-app/utils",
|
|
37
|
+
name: "capitalize",
|
|
38
|
+
expression: "String.capitalize",
|
|
39
|
+
imports: str,
|
|
40
|
+
note: "Same first-character capitalization, including the empty string."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
module: "effect-app/utils",
|
|
44
|
+
name: "uncapitalize",
|
|
45
|
+
expression: "String.uncapitalize",
|
|
46
|
+
imports: str,
|
|
47
|
+
note: "Same first-character uncapitalization, including the empty string."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
module: "effect-app/utils",
|
|
51
|
+
name: "assertUnreachable",
|
|
52
|
+
expression: "absurd",
|
|
53
|
+
imports: absurd,
|
|
54
|
+
note: "absurd throws when an impossible value is reached. The error text no longer includes the value."
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
module: "effect-app/Function",
|
|
58
|
+
name: "tuple",
|
|
59
|
+
expression: "Tuple.make",
|
|
60
|
+
imports: tuple,
|
|
61
|
+
note: "Tuple.make returns a mutable tuple. It is assignable wherever a readonly tuple was expected."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
module: "effect-app/Array",
|
|
65
|
+
name: "toNonEmptyArray",
|
|
66
|
+
expression: "Option.liftPredicate(Array.isReadonlyArrayNonEmpty)",
|
|
67
|
+
imports: [...option, ...array],
|
|
68
|
+
note: "Option of the same readonly array when it is non-empty."
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
module: "effect-app/Array",
|
|
72
|
+
name: "NEROArrayFromArray",
|
|
73
|
+
expression: "Option.liftPredicate(Array.isReadonlyArrayNonEmpty)",
|
|
74
|
+
imports: [...option, ...array],
|
|
75
|
+
note: "Same as toNonEmptyArray."
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
module: "effect-app/Array",
|
|
79
|
+
name: "NEAFromArray",
|
|
80
|
+
expression: "Option.liftPredicate(Array.isArrayNonEmpty)",
|
|
81
|
+
imports: [...option, ...array],
|
|
82
|
+
note: "Option of the same mutable array when it is non-empty."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
module: "effect-app/Array",
|
|
86
|
+
name: "chunk_",
|
|
87
|
+
expression: "Array.chunksOf",
|
|
88
|
+
imports: [...array, ...chunk],
|
|
89
|
+
call: "chunk",
|
|
90
|
+
note: "Was a Chunk of mutable slices. Now a Chunk of Array.chunksOf groups. An empty input is an empty Chunk."
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
module: "effect-app/Array",
|
|
94
|
+
name: "_chunk_",
|
|
95
|
+
expression: "Array.chunksOf",
|
|
96
|
+
imports: array,
|
|
97
|
+
note: "The generator form is gone. Array.chunksOf returns the groups directly."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
module: "effect-app/Option",
|
|
101
|
+
name: "toBool",
|
|
102
|
+
expression: "Option.isSome",
|
|
103
|
+
imports: option,
|
|
104
|
+
note: "isSome is the boolean test and also narrows to Some."
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
module: "effect-app/Effect",
|
|
108
|
+
name: "annotateLogscoped",
|
|
109
|
+
expression: "Effect.annotateLogsScoped",
|
|
110
|
+
imports: effect,
|
|
111
|
+
note: "The old name was a typo of Effect.annotateLogsScoped."
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
module: "effect-app/Effect",
|
|
115
|
+
name: "await_",
|
|
116
|
+
expression: "Deferred.await",
|
|
117
|
+
imports: deferred,
|
|
118
|
+
note: "Await a Deferred. Effect.await_ was Deferred.await."
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
module: "effect-app/Chunk",
|
|
122
|
+
name: "findFirstSimple",
|
|
123
|
+
expression: "Chunk.findFirst",
|
|
124
|
+
imports: chunk,
|
|
125
|
+
note: "The alias passed the chunk first. Chunk.findFirst is dual, so the data-first call still typechecks."
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
module: "effect-app/Chunk",
|
|
129
|
+
name: "findLastSimple",
|
|
130
|
+
expression: "Chunk.findLast",
|
|
131
|
+
imports: chunk,
|
|
132
|
+
note: "Alias of Chunk.findLast."
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
module: "effect-app/Chunk",
|
|
136
|
+
name: "ChunkPartition",
|
|
137
|
+
expression: "Chunk.partition",
|
|
138
|
+
imports: chunk,
|
|
139
|
+
note: "Alias of Chunk.partition."
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
module: "effect-app/Chunk",
|
|
143
|
+
name: "uniq",
|
|
144
|
+
expression: "(equivalence) => (self) => Chunk.fromIterable(Array.dedupeWith(Chunk.toReadonlyArray(self), equivalence))",
|
|
145
|
+
imports: [...chunk, ...array],
|
|
146
|
+
note: "Keeps the first match under a custom equivalence. Equal values can use Chunk.dedupe instead."
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
module: "effect-app/Chunk",
|
|
150
|
+
name: "elem",
|
|
151
|
+
expression: "(equivalence, value) => Chunk.containsWith(equivalence)(value)",
|
|
152
|
+
imports: chunk,
|
|
153
|
+
note: "Equivalence is treated as symmetric. containsWith applies it as equivalence(needle, element)."
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
module: "effect-app/Schema",
|
|
157
|
+
name: "DateValid",
|
|
158
|
+
expression: "Date",
|
|
159
|
+
imports: [["Date", "effect-app/Schema"]],
|
|
160
|
+
note: "DateValid was an alias of effect-app Schema.Date. Schema.Date already rejects invalid dates."
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
module: "effect-app/_ext/misc",
|
|
164
|
+
name: "encaseMaybeInEffect_",
|
|
165
|
+
expression: "Effect.fromOption",
|
|
166
|
+
imports: effect,
|
|
167
|
+
note: "Effect.fromOption(option, onNone) fails with the lazy error on None."
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
module: "effect-app/_ext/misc",
|
|
171
|
+
name: "encaseMaybeEither_",
|
|
172
|
+
expression: "Result.fromOption",
|
|
173
|
+
imports: result,
|
|
174
|
+
note: "Result.fromOption(option, onNone)."
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
module: "effect-app/_ext/misc",
|
|
178
|
+
name: "toNullable",
|
|
179
|
+
expression: "(effect) => Effect.map(effect, Option.getOrNull)",
|
|
180
|
+
imports: [...effect, ...option],
|
|
181
|
+
note: "Maps a successful Option to its value or null."
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
module: "effect-app/_ext/misc",
|
|
185
|
+
name: "flatMapScoped",
|
|
186
|
+
expression: "(scoped, f) => Effect.scoped(Effect.flatMap(scoped, f))",
|
|
187
|
+
imports: effect,
|
|
188
|
+
note: "Closes the scope after the continuation."
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
module: "effect-app/_ext/misc",
|
|
192
|
+
name: "scope",
|
|
193
|
+
expression: "(scoped, effect) => Effect.scoped(Effect.andThen(scoped, effect))",
|
|
194
|
+
imports: effect,
|
|
195
|
+
note: "Runs the second effect inside the first effect's scope, then closes it."
|
|
196
|
+
},
|
|
197
|
+
...[
|
|
198
|
+
["DateAddDays", "days", "date-add"],
|
|
199
|
+
["DateAddHours", "hours", "date-add"],
|
|
200
|
+
["DateAddMinutes", "minutes", "date-add"],
|
|
201
|
+
["DateAddSeconds", "seconds", "date-add"],
|
|
202
|
+
["DateAddWeeks", "weeks", "date-add"],
|
|
203
|
+
["DateAddMonths", "months", "date-add"],
|
|
204
|
+
["DateAddYears", "years", "date-add"],
|
|
205
|
+
["DateSubDays", "days", "date-sub"],
|
|
206
|
+
["DateSubHours", "hours", "date-sub"],
|
|
207
|
+
["DateSubMinutes", "minutes", "date-sub"],
|
|
208
|
+
["DateSubSeconds", "seconds", "date-sub"],
|
|
209
|
+
["DateSubWeeks", "weeks", "date-sub"],
|
|
210
|
+
["DateSubMonths", "months", "date-sub"],
|
|
211
|
+
["DateSubYears", "years", "date-sub"]
|
|
212
|
+
]
|
|
213
|
+
.map(([name, unit, call]) => ({
|
|
214
|
+
module: "effect-app/_ext/date",
|
|
215
|
+
name,
|
|
216
|
+
expression: unit,
|
|
217
|
+
imports: dateTime,
|
|
218
|
+
call,
|
|
219
|
+
note: "pipeZonedLocal attaches the process timezone, runs DateTime.add or DateTime.subtract, and returns the instant with toDateUtc."
|
|
220
|
+
}))
|
|
221
|
+
];
|
|
222
|
+
const byModule = new Map();
|
|
223
|
+
for (const replacement of nativeEffectReplacements) {
|
|
224
|
+
const existing = byModule.get(replacement.module) ?? new Map();
|
|
225
|
+
existing.set(replacement.name, replacement);
|
|
226
|
+
byModule.set(replacement.module, existing);
|
|
227
|
+
}
|
|
228
|
+
const moduleNames = new Set(byModule.keys());
|
|
229
|
+
/** Rewrite one source file. `source` is the file text. */
|
|
230
|
+
export const migrateEffectAppSource = (source) => {
|
|
231
|
+
const imports = findImports(source);
|
|
232
|
+
const bindings = new Map();
|
|
233
|
+
const namespaceBindings = new Map();
|
|
234
|
+
const edits = [];
|
|
235
|
+
const needed = new Map();
|
|
236
|
+
const maskedSpans = [];
|
|
237
|
+
for (const statement of imports) {
|
|
238
|
+
const table = byModule.get(statement.module);
|
|
239
|
+
if (table === undefined)
|
|
240
|
+
continue;
|
|
241
|
+
maskedSpans.push({ start: statement.start, end: statement.end });
|
|
242
|
+
if (statement.namespace !== undefined) {
|
|
243
|
+
namespaceBindings.set(statement.namespace, table);
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
const removed = [];
|
|
247
|
+
for (const specifier of statement.specifiers) {
|
|
248
|
+
const replacement = table.get(specifier.imported);
|
|
249
|
+
if (replacement === undefined)
|
|
250
|
+
continue;
|
|
251
|
+
bindings.set(specifier.local, { replacement, local: specifier.local });
|
|
252
|
+
removed.push(specifier);
|
|
253
|
+
rememberImports(needed, replacement);
|
|
254
|
+
}
|
|
255
|
+
if (removed.length === 0)
|
|
256
|
+
continue;
|
|
257
|
+
if (removed.length === statement.specifiers.length) {
|
|
258
|
+
edits.push({ start: statement.start, end: statement.end, text: "" });
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
const kept = statement.specifiers.filter((specifier) => !removed.includes(specifier));
|
|
262
|
+
edits.push({
|
|
263
|
+
start: statement.clauseStart,
|
|
264
|
+
end: statement.clauseEnd,
|
|
265
|
+
text: `{ ${kept.map((specifier) => specifier.text).join(", ")} }`
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
const mask = maskSpans(maskNonCode(source), maskedSpans);
|
|
270
|
+
for (const [local, binding] of bindings) {
|
|
271
|
+
for (const match of identifierSpans(mask, local)) {
|
|
272
|
+
const rendered = render(binding.replacement, source, match + local.length);
|
|
273
|
+
edits.push({ start: match, end: rendered.end, text: rendered.text });
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
for (const [namespace, table] of namespaceBindings) {
|
|
277
|
+
let used = false;
|
|
278
|
+
for (const match of identifierSpans(mask, namespace)) {
|
|
279
|
+
const after = skipSpaces(source, match + namespace.length);
|
|
280
|
+
if (source[after] !== ".")
|
|
281
|
+
continue;
|
|
282
|
+
const propertyStart = after + 1;
|
|
283
|
+
const property = readIdentifier(source, propertyStart);
|
|
284
|
+
if (property === undefined)
|
|
285
|
+
continue;
|
|
286
|
+
const replacement = table.get(property.name);
|
|
287
|
+
if (replacement === undefined) {
|
|
288
|
+
used = true;
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
rememberImports(needed, replacement);
|
|
292
|
+
const rendered = render(replacement, source, propertyStart + property.name.length);
|
|
293
|
+
edits.push({ start: match, end: rendered.end, text: rendered.text });
|
|
294
|
+
}
|
|
295
|
+
if (!used) {
|
|
296
|
+
const statement = imports.find((item) => item.namespace === namespace && byModule.has(item.module));
|
|
297
|
+
if (statement !== undefined)
|
|
298
|
+
edits.push({ start: statement.start, end: statement.end, text: "" });
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return insertImports(applyEdits(source, edits), needed);
|
|
302
|
+
};
|
|
303
|
+
const render = (replacement, source, afterName) => {
|
|
304
|
+
const bare = { text: replacement.expression, end: afterName };
|
|
305
|
+
if (replacement.call === undefined)
|
|
306
|
+
return bare;
|
|
307
|
+
const open = skipSpaces(source, afterName);
|
|
308
|
+
if (source[open] !== "(")
|
|
309
|
+
return bare;
|
|
310
|
+
const args = splitArgs(source, open);
|
|
311
|
+
if (args === undefined)
|
|
312
|
+
return bare;
|
|
313
|
+
if (replacement.call === "chunk" && args.args.length === 2) {
|
|
314
|
+
return {
|
|
315
|
+
text: `Chunk.fromIterable(Array.chunksOf(${args.args[0]}, ${args.args[1]}))`,
|
|
316
|
+
end: args.end
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
if ((replacement.call === "date-add" || replacement.call === "date-sub") && args.args.length === 2) {
|
|
320
|
+
const method = replacement.call === "date-add" ? "add" : "subtract";
|
|
321
|
+
return {
|
|
322
|
+
text: `pipeZonedLocal(${args.args[0]}, DateTime.${method}({ ${replacement.expression}: ${args.args[1]} }))`,
|
|
323
|
+
end: args.end
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
return bare;
|
|
327
|
+
};
|
|
328
|
+
const rememberImports = (needed, replacement) => {
|
|
329
|
+
for (const [local, from] of replacement.imports) {
|
|
330
|
+
const names = needed.get(from) ?? new Set();
|
|
331
|
+
names.add(local);
|
|
332
|
+
needed.set(from, names);
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
const findImports = (source) => {
|
|
336
|
+
const found = [];
|
|
337
|
+
const pattern = /\bimport\s+(type\s+)?([\s\S]*?)\s+from\s+["']([^"']+)["']/g;
|
|
338
|
+
for (const match of source.matchAll(pattern)) {
|
|
339
|
+
const clause = match[2] ?? "";
|
|
340
|
+
const moduleName = match[3] ?? "";
|
|
341
|
+
if (!moduleNames.has(moduleName))
|
|
342
|
+
continue;
|
|
343
|
+
const start = lineStart(source, match.index ?? 0);
|
|
344
|
+
const end = lineEnd(source, (match.index ?? 0) + match[0].length);
|
|
345
|
+
const clauseStart = (match.index ?? 0) + match[0].indexOf(clause);
|
|
346
|
+
const namespace = /^\*\s+as\s+([A-Za-z_$][\w$]*)/.exec(clause.trim());
|
|
347
|
+
found.push({
|
|
348
|
+
start,
|
|
349
|
+
end,
|
|
350
|
+
clauseStart,
|
|
351
|
+
clauseEnd: clauseStart + clause.length,
|
|
352
|
+
module: moduleName,
|
|
353
|
+
...(namespace?.[1] === undefined ? {} : { namespace: namespace[1] }),
|
|
354
|
+
specifiers: namespace === null ? parseSpecifiers(clause) : []
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
return found;
|
|
358
|
+
};
|
|
359
|
+
const parseSpecifiers = (clause) => {
|
|
360
|
+
const brace = clause.indexOf("{");
|
|
361
|
+
if (brace < 0)
|
|
362
|
+
return [];
|
|
363
|
+
const end = clause.lastIndexOf("}");
|
|
364
|
+
const body = clause.slice(brace + 1, end);
|
|
365
|
+
return body.split(",").flatMap((part) => {
|
|
366
|
+
const text = part.trim();
|
|
367
|
+
if (text === "" || text.startsWith("type "))
|
|
368
|
+
return [];
|
|
369
|
+
const alias = /^([A-Za-z_$][\w$]*)(?:\s+as\s+([A-Za-z_$][\w$]*))?$/.exec(text);
|
|
370
|
+
if (alias === null)
|
|
371
|
+
return [];
|
|
372
|
+
return [{ imported: alias[1], local: alias[2] ?? alias[1], text }];
|
|
373
|
+
});
|
|
374
|
+
};
|
|
375
|
+
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
376
|
+
const identifierSpans = (mask, name) => {
|
|
377
|
+
const spans = [];
|
|
378
|
+
const pattern = new RegExp(`(?<![\\w$])${escapeRegExp(name)}(?![\\w$])`, "g");
|
|
379
|
+
for (const match of mask.matchAll(pattern))
|
|
380
|
+
spans.push(match.index ?? 0);
|
|
381
|
+
return spans;
|
|
382
|
+
};
|
|
383
|
+
const readIdentifier = (source, index) => {
|
|
384
|
+
const match = /^[A-Za-z_$][\w$]*/.exec(source.slice(index));
|
|
385
|
+
return match === null ? undefined : { name: match[0] };
|
|
386
|
+
};
|
|
387
|
+
const splitArgs = (source, open) => {
|
|
388
|
+
const balanced = readBalanced(source, open, "(", ")");
|
|
389
|
+
if (balanced === undefined)
|
|
390
|
+
return undefined;
|
|
391
|
+
const args = [];
|
|
392
|
+
let depth = 0;
|
|
393
|
+
let quote;
|
|
394
|
+
let start = 0;
|
|
395
|
+
const body = balanced.body;
|
|
396
|
+
for (let i = 0; i < body.length; i++) {
|
|
397
|
+
const char = body[i];
|
|
398
|
+
if (quote !== undefined) {
|
|
399
|
+
if (char === "\\") {
|
|
400
|
+
i++;
|
|
401
|
+
continue;
|
|
402
|
+
}
|
|
403
|
+
if (char === quote)
|
|
404
|
+
quote = undefined;
|
|
405
|
+
continue;
|
|
406
|
+
}
|
|
407
|
+
if (char === "'" || char === "\"" || char === "`") {
|
|
408
|
+
quote = char;
|
|
409
|
+
continue;
|
|
410
|
+
}
|
|
411
|
+
if (char === "(" || char === "[" || char === "{")
|
|
412
|
+
depth++;
|
|
413
|
+
if (char === ")" || char === "]" || char === "}")
|
|
414
|
+
depth--;
|
|
415
|
+
if (char === "," && depth === 0) {
|
|
416
|
+
args.push(body.slice(start, i).trim());
|
|
417
|
+
start = i + 1;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
const last = body.slice(start).trim();
|
|
421
|
+
if (last !== "")
|
|
422
|
+
args.push(last);
|
|
423
|
+
return { args, end: balanced.end };
|
|
424
|
+
};
|
|
425
|
+
const readBalanced = (source, open, left, right) => {
|
|
426
|
+
if (source[open] !== left)
|
|
427
|
+
return undefined;
|
|
428
|
+
let depth = 0;
|
|
429
|
+
let quote;
|
|
430
|
+
for (let i = open; i < source.length; i++) {
|
|
431
|
+
const char = source[i];
|
|
432
|
+
if (quote !== undefined) {
|
|
433
|
+
if (char === "\\") {
|
|
434
|
+
i++;
|
|
435
|
+
continue;
|
|
436
|
+
}
|
|
437
|
+
if (char === quote)
|
|
438
|
+
quote = undefined;
|
|
439
|
+
continue;
|
|
440
|
+
}
|
|
441
|
+
if (char === "'" || char === "\"" || char === "`") {
|
|
442
|
+
quote = char;
|
|
443
|
+
continue;
|
|
444
|
+
}
|
|
445
|
+
if (char === left)
|
|
446
|
+
depth++;
|
|
447
|
+
if (char === right) {
|
|
448
|
+
depth--;
|
|
449
|
+
if (depth === 0)
|
|
450
|
+
return { body: source.slice(open + 1, i), end: i + 1 };
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
return undefined;
|
|
454
|
+
};
|
|
455
|
+
const maskSpans = (mask, spans) => {
|
|
456
|
+
const chars = [...mask];
|
|
457
|
+
for (const span of spans) {
|
|
458
|
+
for (let i = span.start; i < span.end && i < chars.length; i++) {
|
|
459
|
+
if (chars[i] !== "\n")
|
|
460
|
+
chars[i] = " ";
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return chars.join("");
|
|
464
|
+
};
|
|
465
|
+
const skipSpaces = (source, index) => {
|
|
466
|
+
let i = index;
|
|
467
|
+
while (i < source.length && (source[i] === " " || source[i] === "\n" || source[i] === "\t"))
|
|
468
|
+
i++;
|
|
469
|
+
return i;
|
|
470
|
+
};
|
|
471
|
+
const lineStart = (source, index) => {
|
|
472
|
+
const start = source.lastIndexOf("\n", index - 1);
|
|
473
|
+
return start < 0 ? 0 : start + 1;
|
|
474
|
+
};
|
|
475
|
+
const lineEnd = (source, index) => {
|
|
476
|
+
const end = source.indexOf("\n", index);
|
|
477
|
+
return end < 0 ? source.length : end + 1;
|
|
478
|
+
};
|
|
479
|
+
const applyEdits = (source, edits) => {
|
|
480
|
+
const ordered = [...edits].sort((a, b) => b.start - a.start);
|
|
481
|
+
let next = source;
|
|
482
|
+
for (const edit of ordered)
|
|
483
|
+
next = next.slice(0, edit.start) + edit.text + next.slice(edit.end);
|
|
484
|
+
return next;
|
|
485
|
+
};
|
|
486
|
+
const insertImports = (source, needed) => {
|
|
487
|
+
const lines = [];
|
|
488
|
+
for (const [from, names] of needed) {
|
|
489
|
+
for (const name of names) {
|
|
490
|
+
if (hasImport(source, name, from))
|
|
491
|
+
continue;
|
|
492
|
+
lines.push(namedImportNames.has(name)
|
|
493
|
+
? `import { ${name} } from "${from}"`
|
|
494
|
+
: `import * as ${name} from "${from}"`);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
if (lines.length === 0)
|
|
498
|
+
return source.replace(/^\n+/, "");
|
|
499
|
+
const lastImport = lastImportEnd(source);
|
|
500
|
+
const block = `${lines.sort().join("\n")}\n`;
|
|
501
|
+
if (lastImport === 0)
|
|
502
|
+
return `${block}${source.replace(/^\n+/, "")}`;
|
|
503
|
+
return `${source.slice(0, lastImport)}${block}${source.slice(lastImport)}`.replace(/^\n+/, "");
|
|
504
|
+
};
|
|
505
|
+
const namedImportNames = new Set(["absurd", "Date", "pipeZonedLocal"]);
|
|
506
|
+
const hasImport = (source, name, from) => {
|
|
507
|
+
const fromPattern = from.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
508
|
+
const namespace = new RegExp(`import\\s+\\*\\s+as\\s+${name}\\s+from\\s+["']${fromPattern}["']`);
|
|
509
|
+
const named = new RegExp(`import\\s+(type\\s+)?\\{[^}]*\\b${name}\\b[^}]*}\\s+from\\s+["']${fromPattern}["']`);
|
|
510
|
+
const barrel = name === name[0]?.toUpperCase()
|
|
511
|
+
? new RegExp(`import\\s+(type\\s+)?\\{[^}]*\\b${name}\\b[^}]*}\\s+from\\s+["']effect["']`)
|
|
512
|
+
: undefined;
|
|
513
|
+
return namespace.test(source) || named.test(source) || barrel?.test(source) === true;
|
|
514
|
+
};
|
|
515
|
+
const lastImportEnd = (source) => {
|
|
516
|
+
const pattern = /\bimport\s+(type\s+)?[\s\S]*?\s+from\s+["'][^"']+["']/g;
|
|
517
|
+
let end = 0;
|
|
518
|
+
for (const match of source.matchAll(pattern)) {
|
|
519
|
+
end = lineEnd(source, (match.index ?? 0) + match[0].length);
|
|
520
|
+
}
|
|
521
|
+
return end;
|
|
522
|
+
};
|
|
523
|
+
const maskNonCode = (source) => {
|
|
524
|
+
const chars = [...source];
|
|
525
|
+
let i = 0;
|
|
526
|
+
const blank = (from, to) => {
|
|
527
|
+
for (let j = from; j < to; j++) {
|
|
528
|
+
if (chars[j] !== "\n")
|
|
529
|
+
chars[j] = " ";
|
|
530
|
+
}
|
|
531
|
+
};
|
|
532
|
+
while (i < source.length) {
|
|
533
|
+
const two = source.slice(i, i + 2);
|
|
534
|
+
if (two === "//") {
|
|
535
|
+
const end = source.indexOf("\n", i);
|
|
536
|
+
blank(i, end < 0 ? source.length : end);
|
|
537
|
+
i = end < 0 ? source.length : end;
|
|
538
|
+
continue;
|
|
539
|
+
}
|
|
540
|
+
if (two === "/*") {
|
|
541
|
+
const end = source.indexOf("*/", i + 2);
|
|
542
|
+
const stop = end < 0 ? source.length : end + 2;
|
|
543
|
+
blank(i, stop);
|
|
544
|
+
i = stop;
|
|
545
|
+
continue;
|
|
546
|
+
}
|
|
547
|
+
const char = source[i];
|
|
548
|
+
if (char === "'" || char === "\"") {
|
|
549
|
+
const stop = scanQuoted(source, i, char);
|
|
550
|
+
blank(i, stop);
|
|
551
|
+
i = stop;
|
|
552
|
+
continue;
|
|
553
|
+
}
|
|
554
|
+
if (char === "`") {
|
|
555
|
+
const stop = scanTemplate(source, i);
|
|
556
|
+
blank(i, stop);
|
|
557
|
+
i = stop;
|
|
558
|
+
continue;
|
|
559
|
+
}
|
|
560
|
+
i++;
|
|
561
|
+
}
|
|
562
|
+
return chars.join("");
|
|
563
|
+
};
|
|
564
|
+
const scanQuoted = (source, start, quote) => {
|
|
565
|
+
for (let i = start + 1; i < source.length; i++) {
|
|
566
|
+
if (source[i] === "\\") {
|
|
567
|
+
i++;
|
|
568
|
+
continue;
|
|
569
|
+
}
|
|
570
|
+
if (source[i] === quote)
|
|
571
|
+
return i + 1;
|
|
572
|
+
}
|
|
573
|
+
return source.length;
|
|
574
|
+
};
|
|
575
|
+
const scanTemplate = (source, start) => {
|
|
576
|
+
for (let i = start + 1; i < source.length; i++) {
|
|
577
|
+
if (source[i] === "\\") {
|
|
578
|
+
i++;
|
|
579
|
+
continue;
|
|
580
|
+
}
|
|
581
|
+
if (source[i] === "`")
|
|
582
|
+
return i + 1;
|
|
583
|
+
if (source.slice(i, i + 2) === "${") {
|
|
584
|
+
let depth = 1;
|
|
585
|
+
i += 2;
|
|
586
|
+
while (i < source.length && depth > 0) {
|
|
587
|
+
if (source[i] === "{")
|
|
588
|
+
depth++;
|
|
589
|
+
else if (source[i] === "}")
|
|
590
|
+
depth--;
|
|
591
|
+
i++;
|
|
592
|
+
}
|
|
593
|
+
i--;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
return source.length;
|
|
597
|
+
};
|
|
598
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlRWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZ3JhdGlvbi9uYXRpdmVFZmZlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBYUgsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBVSxDQUFBO0FBQ3JELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQVUsQ0FBQTtBQUNyRCxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFVLENBQUE7QUFDbEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBVSxDQUFBO0FBQ3JELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQVUsQ0FBQTtBQUNsRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFVLENBQUE7QUFDbEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBVSxDQUFBO0FBQ2xELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQVUsQ0FBQTtBQUNyRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFVLENBQUE7QUFDdEcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFVLENBQUE7QUFDM0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBVSxDQUFBO0FBQ3JELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENB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
|
package/dist/utils.d.ts
CHANGED
|
@@ -16,9 +16,6 @@ export interface Clone {
|
|
|
16
16
|
export declare const unsafeRight: <E, A>(ei: Result.Result<A, E>) => A;
|
|
17
17
|
export declare const unsafeSome: (makeErrorMessage: () => string) => <A>(o: Option.Option<A>) => A;
|
|
18
18
|
export declare function toString(v: unknown): string;
|
|
19
|
-
export declare const typedKeysOf: <T extends {}>(obj: T) => (keyof T)[];
|
|
20
|
-
export declare const typedValuesOf: <T extends {}>(obj: T) => ValueOf<T>[];
|
|
21
|
-
type ValueOf<T> = T[keyof T];
|
|
22
19
|
export type Constructor<T = any> = {
|
|
23
20
|
new (...args: any[]): T;
|
|
24
21
|
};
|
|
@@ -62,8 +59,6 @@ export declare const isOfType: <T extends {
|
|
|
62
59
|
}>(tag: GetTag<T>) => (e: {
|
|
63
60
|
_tag: string;
|
|
64
61
|
}) => e is T;
|
|
65
|
-
export declare function capitalize<T extends string>(string: T): Capitalize<T>;
|
|
66
|
-
export declare function uncapitalize<T extends string>(string: T): Uncapitalize<T>;
|
|
67
62
|
export declare function pretty(o: unknown): string;
|
|
68
63
|
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
69
64
|
export type IsUnion<T> = [T] extends [UnionToIntersection<T>] ? false : true;
|
|
@@ -134,7 +129,6 @@ export declare const LazySymbol: unique symbol;
|
|
|
134
129
|
export declare function lazyGetter<T extends object, T2>(creator: (target: T) => T2): (target: T) => T2;
|
|
135
130
|
export declare function exhaustiveMatch<T extends string>(): <Out extends Record<T, (t: T) => any>>(handlers: Out) => (t: T) => ReturnType<Out[keyof Out]>;
|
|
136
131
|
export declare function exhaustiveMatch_<T extends string>(t: T): <Out extends Record<T, (t: T) => any>>(handlers: Out) => ReturnType<Out[keyof Out]>;
|
|
137
|
-
export declare function assertUnreachable(x: never): never;
|
|
138
132
|
export type OptPromise<T extends () => any> = (...args: Parameters<T>) => Promise<ReturnType<T>> | ReturnType<T>;
|
|
139
133
|
export declare function access<T extends string, T2>(t: Record<T, T2>): (key: T) => Record<T, T2>[T];
|
|
140
134
|
export declare function todayAtUTCNoon(): Date;
|