@codegraft/core 0.1.0-beta.7 → 0.1.0-beta.9
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/dist/collection.d.ts +6 -6
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +31 -147
- package/dist/collection.js.map +1 -1
- package/dist/containers.d.ts +15 -0
- package/dist/containers.d.ts.map +1 -0
- package/dist/containers.js +39 -0
- package/dist/containers.js.map +1 -0
- package/dist/edit-collector.d.ts +6 -33
- package/dist/edit-collector.d.ts.map +1 -1
- package/dist/edit-collector.js +6 -70
- package/dist/edit-collector.js.map +1 -1
- package/dist/format.d.ts +32 -3
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +58 -6
- package/dist/format.js.map +1 -1
- package/dist/formatter.d.ts +54 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +177 -0
- package/dist/formatter.js.map +1 -0
- package/dist/types.d.ts +8 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/collection.d.ts
CHANGED
|
@@ -2,13 +2,13 @@ import type { GrammarId, LazyTransformer, RichNode, ZoneSplitter } from './types
|
|
|
2
2
|
import type { NodeTypeOf, NodeTypeAllOf, FieldNameOf } from './generated/node-types.js';
|
|
3
3
|
import { EditCollector } from './edit-collector.js';
|
|
4
4
|
import { type Resolver } from './resolver.js';
|
|
5
|
-
import {
|
|
5
|
+
import { Formatter } from './formatter.js';
|
|
6
6
|
/** Shared per-transform state a {@link Collection} records edits into. */
|
|
7
7
|
interface Session {
|
|
8
8
|
collector: EditCollector;
|
|
9
|
-
/**
|
|
10
|
-
*
|
|
11
|
-
|
|
9
|
+
/** The layout formatter every edit's rendering is delegated to (re-indent, container layout, line
|
|
10
|
+
* collapse). Always present — formatting is applied on every transform. */
|
|
11
|
+
formatter: Formatter;
|
|
12
12
|
/** The binding resolver for `node`'s zone (JS/TS/TSX), or `null` if unsupported. */
|
|
13
13
|
resolver(node: RichNode): Resolver | null;
|
|
14
14
|
}
|
|
@@ -169,11 +169,11 @@ export declare class Collection<G extends GrammarId = GrammarId> {
|
|
|
169
169
|
* edits, which are emitted via magic-string.
|
|
170
170
|
*
|
|
171
171
|
* `namespace` opts into the scan-gate (a source not mentioning it is returned untouched,
|
|
172
|
-
* unparsed) and ensures the TypeScript grammar for `evaluate`'s string form.
|
|
172
|
+
* unparsed) and ensures the TypeScript grammar for `evaluate`'s string form. Formatting is applied
|
|
173
|
+
* on every transform; its style is detected per source and tunable via `transform`'s `FormatOptions`.
|
|
173
174
|
*/
|
|
174
175
|
export declare function createCodemodTransformer<Ctx extends Record<string, unknown> = Record<string, unknown>, G extends GrammarId = GrammarId>(target: GrammarId | ZoneSplitter, codemod: (root: Collection<G>, context: Ctx) => void, options?: {
|
|
175
176
|
namespace?: string;
|
|
176
|
-
format?: boolean;
|
|
177
177
|
}): LazyTransformer<Ctx>;
|
|
178
178
|
export {};
|
|
179
179
|
//# sourceMappingURL=collection.d.ts.map
|
package/dist/collection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EAGR,YAAY,EACb,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAa,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIlG,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EAGR,YAAY,EACb,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAa,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIlG,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAI1C,0EAA0E;AAC1E,UAAU,OAAO;IACf,SAAS,EAAE,aAAa,CAAA;IACxB;gFAC4E;IAC5E,SAAS,EAAE,SAAS,CAAA;IACpB,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAA;CAC1C;AAED;;;2CAG2C;AAC3C,KAAK,WAAW,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;AACrH;oGACoG;AACpG,KAAK,YAAY,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI;KAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;CAAE,CAAA;AAExG,oGAAoG;AACpG,KAAK,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAA;AAE1F;;;;;;;;;;GAUG;AACH,qBAAa,UAAU,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;;gBAIzC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO;IAO/C;wEACoE;IACpE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAgBjE;gGAC4F;IAC5F,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAY7C,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;IAIlE,mGAAmG;IACnG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAI3C,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC;IAIvB,QAAQ,IAAI,UAAU,CAAC,CAAC,CAAC;IAIzB,mEAAmE;IACnE,QAAQ,IAAI,UAAU,CAAC,CAAC,CAAC;IAIzB,WAAW,IAAI,UAAU,CAAC,CAAC,CAAC;IAI5B,WAAW,IAAI,UAAU,CAAC,CAAC,CAAC;IAI5B,8FAA8F;IAC9F,SAAS,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAQ9C,kGAAkG;IAClG,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC;IAI7B,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC;IAItB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAKhC,IAAI,IAAI,MAAM;IAId,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAKhD,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IAI3C,KAAK,IAAI,QAAQ,EAAE;IAInB,sGAAsG;IACtG,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO;IAItC,gDAAgD;IAChD,QAAQ,IAAI,MAAM,EAAE;IAMpB,IAAI,IAAI,IAAI,QAAQ,CAEnB;IACD,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,IAAI,IAAI,IAAI,aAAa,CAAC,CAAC,CAAC,CAE3B;IACD,gFAAgF;IAChF,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAI1C,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAMnC;8EAC0E;IAC1E,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAMlC,2FAA2F;IAC3F,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAMlC,mGAAmG;IACnG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAM1C,2FAA2F;IAC3F,eAAe,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAQvC;;;0FAGsF;IACtF,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM;IASjE,6FAA6F;IAC7F,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAQnC;6EACyE;IACzE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI;IAUlF;;;;;;;;;OASG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAiBpG;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAcjC,yFAAyF;IACzF,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAWpC,wFAAwF;IACxF,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAOnC,yDAAyD;IACzD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQzC;;;;qGAIiG;IACjG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK1B,4FAA4F;IAC5F,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B;qFACiF;IACjF,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAUrC,uFAAuF;IACvF,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKjC,oFAAoF;IACpF,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvC,oDAAoD;IACpD,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAMtC,mGAAmG;IACnG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC,yEAAyE;IACzE,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKtC;;wFAEoF;IACpF,cAAc,IAAI,IAAI;IAWtB;;;oFAGgF;IAChF,iBAAiB,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI;IAcrD;4FACwF;IACxF,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAQnD;wDACoD;IACpD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAYpC;oFACgF;IAChF,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;CAkClE;AAuFD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,CAAC,SAAS,SAAS,GAAG,SAAS,EAE/B,MAAM,EAAE,SAAS,GAAG,YAAY,EAChC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,EACpD,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,eAAe,CAAC,GAAG,CAAC,CAkDtB"}
|
package/dist/collection.js
CHANGED
|
@@ -5,7 +5,9 @@ import { attachComments, COMMENT_TYPES } from './comment-attachment.js';
|
|
|
5
5
|
import { EditCollector } from './edit-collector.js';
|
|
6
6
|
import { evaluate as evaluateNode } from './evaluate.js';
|
|
7
7
|
import { createResolver } from './resolver.js';
|
|
8
|
-
import {
|
|
8
|
+
import { resolveStyle } from './format.js';
|
|
9
|
+
import { Formatter } from './formatter.js';
|
|
10
|
+
import { trailingSeparator } from './containers.js';
|
|
9
11
|
import { assert } from './assert.js';
|
|
10
12
|
/**
|
|
11
13
|
* A jscodeshift-style selection of CST nodes bound to one transform run. Query methods
|
|
@@ -185,7 +187,7 @@ export class Collection {
|
|
|
185
187
|
/** Replace each selected node with `text`, or with the string a callback derives from it. */
|
|
186
188
|
replaceWith(text) {
|
|
187
189
|
for (const node of this.#nodes) {
|
|
188
|
-
const next = this.#reindent(this.#text(text, node), node.documentStartIndex);
|
|
190
|
+
const next = this.#session.formatter.reindent(this.#text(text, node), node.documentStartIndex);
|
|
189
191
|
this.#session.collector.overwrite(node.documentStartIndex, node.documentEndIndex, next);
|
|
190
192
|
}
|
|
191
193
|
return this;
|
|
@@ -215,7 +217,7 @@ export class Collection {
|
|
|
215
217
|
remove(options) {
|
|
216
218
|
for (const node of this.#nodes) {
|
|
217
219
|
if (options?.wholeLines) {
|
|
218
|
-
this.#session.
|
|
220
|
+
this.#session.formatter.removeWholeLines(node.documentStartIndex, node.documentEndIndex, options.collapseBlankBefore);
|
|
219
221
|
continue;
|
|
220
222
|
}
|
|
221
223
|
let end = node.documentEndIndex;
|
|
@@ -224,12 +226,8 @@ export class Collection {
|
|
|
224
226
|
if (comma)
|
|
225
227
|
end = comma.documentEndIndex;
|
|
226
228
|
}
|
|
227
|
-
//
|
|
228
|
-
|
|
229
|
-
if (this.#session.style)
|
|
230
|
-
this.#session.collector.removeFormatted(node.documentStartIndex, end);
|
|
231
|
-
else
|
|
232
|
-
this.#session.collector.remove(node.documentStartIndex, end);
|
|
229
|
+
// Collapse the line when the node owned it, the way Prettier would have.
|
|
230
|
+
this.#session.formatter.removeNode(node.documentStartIndex, end);
|
|
233
231
|
}
|
|
234
232
|
return this;
|
|
235
233
|
}
|
|
@@ -256,10 +254,10 @@ export class Collection {
|
|
|
256
254
|
insertBefore(text) {
|
|
257
255
|
for (const node of this.#nodes) {
|
|
258
256
|
const at = node.documentStartIndex;
|
|
259
|
-
let next = this.#reindent(this.#text(text, node), at);
|
|
257
|
+
let next = this.#session.formatter.reindent(this.#text(text, node), at);
|
|
260
258
|
// A trailing newline would leave the displaced node at column 0 — restore its indent.
|
|
261
|
-
if (
|
|
262
|
-
next += this.#session.
|
|
259
|
+
if (next.endsWith('\n'))
|
|
260
|
+
next += this.#session.formatter.indentAt(at);
|
|
263
261
|
this.#session.collector.insertLeft(at, next);
|
|
264
262
|
}
|
|
265
263
|
return this;
|
|
@@ -267,7 +265,7 @@ export class Collection {
|
|
|
267
265
|
/** Insert `text` (literal or derived per node) immediately after each selected node. */
|
|
268
266
|
insertAfter(text) {
|
|
269
267
|
for (const node of this.#nodes) {
|
|
270
|
-
this.#session.collector.insertRight(node.documentEndIndex, this.#reindent(this.#text(text, node), node.documentStartIndex));
|
|
268
|
+
this.#session.collector.insertRight(node.documentEndIndex, this.#session.formatter.reindent(this.#text(text, node), node.documentStartIndex));
|
|
271
269
|
}
|
|
272
270
|
return this;
|
|
273
271
|
}
|
|
@@ -285,40 +283,14 @@ export class Collection {
|
|
|
285
283
|
* container keeps its layout — the element lands on its own line at the elements' indent, with a
|
|
286
284
|
* trailing separator matching the container's style — while an inline one stays on one line. */
|
|
287
285
|
append(text) {
|
|
288
|
-
for (const node of this.#nodes)
|
|
289
|
-
|
|
290
|
-
if (NEWLINE_CONTAINERS.has(node.type)) {
|
|
291
|
-
if (elements.length === 0)
|
|
292
|
-
this.#fillBlock(node, text);
|
|
293
|
-
else {
|
|
294
|
-
const last = elements[elements.length - 1];
|
|
295
|
-
this.#session.collector.insertRight(last.documentEndIndex, this.#line(text, last.documentStartIndex));
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
else if (elements.length === 0) {
|
|
299
|
-
this.#session.collector.insertRight(openDelimiter(node).documentEndIndex, text);
|
|
300
|
-
}
|
|
301
|
-
else {
|
|
302
|
-
this.#appendElement(node, elements[elements.length - 1], text);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
286
|
+
for (const node of this.#nodes)
|
|
287
|
+
this.#session.formatter.append(node, text);
|
|
305
288
|
return this;
|
|
306
289
|
}
|
|
307
290
|
/** Prepend `text` as the first element of each container — the mirror of {@link append}. */
|
|
308
291
|
prepend(text) {
|
|
309
|
-
for (const node of this.#nodes)
|
|
310
|
-
|
|
311
|
-
if (NEWLINE_CONTAINERS.has(node.type)) {
|
|
312
|
-
if (elements.length === 0)
|
|
313
|
-
this.#fillBlock(node, text);
|
|
314
|
-
else
|
|
315
|
-
this.#session.collector.insertRight(openDelimiter(node).documentEndIndex, this.#line(text, elements[0].documentStartIndex));
|
|
316
|
-
}
|
|
317
|
-
else {
|
|
318
|
-
const open = openDelimiter(node).documentEndIndex;
|
|
319
|
-
this.#session.collector.insertRight(open, elements.length === 0 ? text : text + ', ');
|
|
320
|
-
}
|
|
321
|
-
}
|
|
292
|
+
for (const node of this.#nodes)
|
|
293
|
+
this.#session.formatter.prepend(node, text);
|
|
322
294
|
return this;
|
|
323
295
|
}
|
|
324
296
|
/** Insert a top-level import once: a no-op if a statement importing the same module already
|
|
@@ -328,7 +300,7 @@ export class Collection {
|
|
|
328
300
|
const imports = this.find('import_statement').#nodes;
|
|
329
301
|
if (imports.some((imp) => importSource(imp.text) === source))
|
|
330
302
|
return this;
|
|
331
|
-
const eol = this.#session.
|
|
303
|
+
const eol = this.#session.formatter.eol;
|
|
332
304
|
if (imports.length === 0)
|
|
333
305
|
return this.prependToFile(statement + eol);
|
|
334
306
|
this.#session.collector.insertRight(imports[imports.length - 1].documentEndIndex, eol + statement);
|
|
@@ -382,8 +354,8 @@ export class Collection {
|
|
|
382
354
|
if (!comment)
|
|
383
355
|
continue;
|
|
384
356
|
const next = fn(comment.text);
|
|
385
|
-
if (next === ''
|
|
386
|
-
this.#session.
|
|
357
|
+
if (next === '') {
|
|
358
|
+
this.#session.formatter.removeNode(comment.documentStartIndex, comment.documentEndIndex);
|
|
387
359
|
}
|
|
388
360
|
else {
|
|
389
361
|
this.#session.collector.overwrite(comment.documentStartIndex, comment.documentEndIndex, next);
|
|
@@ -409,14 +381,10 @@ export class Collection {
|
|
|
409
381
|
if (!comment)
|
|
410
382
|
return this;
|
|
411
383
|
// The contract is "drop the directive and the gap up to the node" — so removal still runs to the
|
|
412
|
-
// node, taking any comments stacked under the directive with it.
|
|
413
|
-
//
|
|
414
|
-
//
|
|
415
|
-
|
|
416
|
-
if (this.#session.style)
|
|
417
|
-
this.#session.collector.removeUpToLine(comment.documentStartIndex, node.documentStartIndex);
|
|
418
|
-
else
|
|
419
|
-
this.#session.collector.remove(comment.documentStartIndex, node.documentStartIndex);
|
|
384
|
+
// node, taking any comments stacked under the directive with it. It collapses those whole lines
|
|
385
|
+
// but stops at the node's line, leaving the node's own line for a following `remove` to collapse
|
|
386
|
+
// independently: the two deletes abut at the node's line start and compose.
|
|
387
|
+
this.#session.formatter.removeLeadingTo(comment.documentStartIndex, node.documentStartIndex);
|
|
420
388
|
return this;
|
|
421
389
|
}
|
|
422
390
|
/** Evaluate a string expression (e.g. a directive's captured text) against `context`. Parsed as
|
|
@@ -428,63 +396,6 @@ export class Collection {
|
|
|
428
396
|
#text(arg, node) {
|
|
429
397
|
return typeof arg === 'function' ? arg(new _a([node], this.#session)) : arg;
|
|
430
398
|
}
|
|
431
|
-
// Inserted-text formatting — each helper's verbatim arm (no `style`) reproduces the pre-`format`
|
|
432
|
-
// behaviour byte-for-byte, so the option is purely additive.
|
|
433
|
-
/** `text` re-indented to the line at `index`; unchanged when not formatting (or single-line). */
|
|
434
|
-
#reindent(text, index) {
|
|
435
|
-
const { style } = this.#session;
|
|
436
|
-
return style ? reindent(text, this.#session.collector.indentAt(index), style.eol) : text;
|
|
437
|
-
}
|
|
438
|
-
/** `text` as a fresh line at the indentation of the sibling at `index`; the bare `\n` body
|
|
439
|
-
* separator when not formatting. */
|
|
440
|
-
#line(text, index) {
|
|
441
|
-
const { style } = this.#session;
|
|
442
|
-
if (!style)
|
|
443
|
-
return '\n' + text;
|
|
444
|
-
const indent = this.#session.collector.indentAt(index);
|
|
445
|
-
return style.eol + indent + reindent(text, indent, style.eol);
|
|
446
|
-
}
|
|
447
|
-
/** Append `text` after the last element `last` of a delimited container — comma-separated
|
|
448
|
-
* (array/object/arguments) or `;`-separated (interface/object-type body) — preserving the
|
|
449
|
-
* container's layout under `format` (see the branches). The verbatim arm stays byte-identical. */
|
|
450
|
-
#appendElement(node, last, text) {
|
|
451
|
-
const collector = this.#session.collector;
|
|
452
|
-
if (!this.#session.style) {
|
|
453
|
-
// Verbatim: the historical inline comma join, kept byte-identical (whitespace is Prettier's job).
|
|
454
|
-
collector.insertRight(last.documentEndIndex, ', ' + text);
|
|
455
|
-
return;
|
|
456
|
-
}
|
|
457
|
-
const sep = SEMI_CONTAINERS.has(node.type) ? ';' : ',';
|
|
458
|
-
if (node.startPosition.row === node.endPosition.row) {
|
|
459
|
-
// Inline container: keep it on one line, separated (and, for `;`, terminated) by `sep`.
|
|
460
|
-
collector.insertRight(last.documentEndIndex, `${sep} ${text}`);
|
|
461
|
-
return;
|
|
462
|
-
}
|
|
463
|
-
// Multi-line: a fresh line at the elements' indent, mirroring the container's trailing-separator
|
|
464
|
-
// style — extend an existing trailing `sep`, add the mandatory `,` a comma list omits, or rely on
|
|
465
|
-
// the newline alone for a `;` list (where the separator between members is optional).
|
|
466
|
-
const trailing = trailingSeparator(last, sep);
|
|
467
|
-
const line = this.#line(text, last.documentStartIndex);
|
|
468
|
-
if (trailing)
|
|
469
|
-
collector.insertRight(trailing.documentEndIndex, line + sep);
|
|
470
|
-
else if (sep === ';')
|
|
471
|
-
collector.insertRight(last.documentEndIndex, line);
|
|
472
|
-
else
|
|
473
|
-
collector.insertRight(last.documentEndIndex, sep + line);
|
|
474
|
-
}
|
|
475
|
-
/** Open an empty `{}` block onto its own indented line — `{}` → `{⏎ text⏎}` — or insert `text`
|
|
476
|
-
* bare when not formatting. */
|
|
477
|
-
#fillBlock(node, text) {
|
|
478
|
-
const open = openDelimiter(node).documentEndIndex;
|
|
479
|
-
const { style } = this.#session;
|
|
480
|
-
if (!style) {
|
|
481
|
-
this.#session.collector.insertRight(open, text);
|
|
482
|
-
return;
|
|
483
|
-
}
|
|
484
|
-
const blockIndent = this.#session.collector.indentAt(node.documentStartIndex);
|
|
485
|
-
const indent = blockIndent + style.indentUnit;
|
|
486
|
-
this.#session.collector.insertRight(open, style.eol + indent + reindent(text, indent, style.eol) + style.eol + blockIndent);
|
|
487
|
-
}
|
|
488
399
|
/** Capture this node's text, delete it, and re-insert it at `target` via `place`. */
|
|
489
400
|
#move(target, place) {
|
|
490
401
|
const node = this.#single();
|
|
@@ -512,34 +423,6 @@ _a = Collection;
|
|
|
512
423
|
function snippet(value) {
|
|
513
424
|
return value instanceof Collection ? value.text : String(value);
|
|
514
425
|
}
|
|
515
|
-
/** The separator token (a `,` by default, or `;` for a `;`-list) immediately after `node` among its
|
|
516
|
-
* parent's children (comments skipped), or `null` — the trailing separator `remove({ separator })`
|
|
517
|
-
* drops alongside a list element, and `append` extends to keep the container's style. */
|
|
518
|
-
function trailingSeparator(node, sep = ',') {
|
|
519
|
-
const siblings = node.parent?.allChildren;
|
|
520
|
-
if (!siblings)
|
|
521
|
-
return null;
|
|
522
|
-
const i = siblings.indexOf(node);
|
|
523
|
-
if (i === -1)
|
|
524
|
-
return null;
|
|
525
|
-
for (let j = i + 1; j < siblings.length; j++) {
|
|
526
|
-
const sib = siblings[j];
|
|
527
|
-
if (COMMENT_TYPES[sib.language].has(sib.type))
|
|
528
|
-
continue;
|
|
529
|
-
return sib.type === sep ? sib : null;
|
|
530
|
-
}
|
|
531
|
-
return null;
|
|
532
|
-
}
|
|
533
|
-
/** The opening delimiter token (`[` / `{` / `(`) of a container node. */
|
|
534
|
-
function openDelimiter(node) {
|
|
535
|
-
const open = node.allChildren[0];
|
|
536
|
-
assert(open, `container '${node.type}' has no opening delimiter`);
|
|
537
|
-
return open;
|
|
538
|
-
}
|
|
539
|
-
// Containers whose elements are separated by newlines (a block / class body), not commas.
|
|
540
|
-
const NEWLINE_CONTAINERS = new Set(['statement_block', 'class_body', 'program']);
|
|
541
|
-
// Containers whose members are separated/terminated by `;` (a TS interface / object type), not commas.
|
|
542
|
-
const SEMI_CONTAINERS = new Set(['interface_body', 'object_type']);
|
|
543
426
|
/** The module specifier of an import statement's source text, for idempotent `ensureImport`. */
|
|
544
427
|
function importSource(statementText) {
|
|
545
428
|
const match = statementText.match(/from\s*['"]([^'"]+)['"]/) ?? statementText.match(/import\s*['"]([^'"]+)['"]/);
|
|
@@ -630,11 +513,11 @@ function rootOf(node) {
|
|
|
630
513
|
* edits, which are emitted via magic-string.
|
|
631
514
|
*
|
|
632
515
|
* `namespace` opts into the scan-gate (a source not mentioning it is returned untouched,
|
|
633
|
-
* unparsed) and ensures the TypeScript grammar for `evaluate`'s string form.
|
|
516
|
+
* unparsed) and ensures the TypeScript grammar for `evaluate`'s string form. Formatting is applied
|
|
517
|
+
* on every transform; its style is detected per source and tunable via `transform`'s `FormatOptions`.
|
|
634
518
|
*/
|
|
635
519
|
export function createCodemodTransformer(target, codemod, options) {
|
|
636
520
|
const namespace = options?.namespace;
|
|
637
|
-
const format = options?.format ?? false;
|
|
638
521
|
let pending = null;
|
|
639
522
|
async function build() {
|
|
640
523
|
await Parser.init();
|
|
@@ -645,20 +528,21 @@ export function createCodemodTransformer(target, codemod, options) {
|
|
|
645
528
|
await target.init();
|
|
646
529
|
if (namespace !== undefined)
|
|
647
530
|
await Parser.loadGrammar('typescript');
|
|
648
|
-
function run(source, context) {
|
|
531
|
+
function run(source, context, options) {
|
|
649
532
|
const collector = new EditCollector(source);
|
|
650
533
|
if (namespace !== undefined && !source.includes(namespace))
|
|
651
534
|
return collector;
|
|
652
535
|
const zones = splitAndParse(source, target);
|
|
653
536
|
for (const zone of zones)
|
|
654
537
|
attachComments(zone.tree);
|
|
655
|
-
//
|
|
656
|
-
|
|
538
|
+
// Every edit is rendered layout-aware: the file's indent unit / EOL are detected once (and
|
|
539
|
+
// overridable per apply via `options`).
|
|
540
|
+
const formatter = new Formatter(collector, source, resolveStyle(source, options));
|
|
657
541
|
// One resolver per zone tree, built on first use (only if the codemod asks for scope).
|
|
658
542
|
const resolvers = new Map();
|
|
659
543
|
const session = {
|
|
660
544
|
collector,
|
|
661
|
-
|
|
545
|
+
formatter,
|
|
662
546
|
resolver(node) {
|
|
663
547
|
const treeRoot = rootOf(node);
|
|
664
548
|
if (!resolvers.has(treeRoot))
|
|
@@ -670,9 +554,9 @@ export function createCodemodTransformer(target, codemod, options) {
|
|
|
670
554
|
return collector;
|
|
671
555
|
}
|
|
672
556
|
return {
|
|
673
|
-
transform: (source, context) => run(source, context).toString(),
|
|
557
|
+
transform: (source, context, options) => run(source, context, options).toString(),
|
|
674
558
|
transformWithMap(source, context, options) {
|
|
675
|
-
const collector = run(source, context);
|
|
559
|
+
const collector = run(source, context, options);
|
|
676
560
|
return { code: collector.toString(), map: collector.generateMap(options?.source ?? 'input') };
|
|
677
561
|
},
|
|
678
562
|
};
|
package/dist/collection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":";AASA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,cAAc,EAAiB,MAAM,eAAe,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAwBpC;;;;;;;;;;GAUG;AACH,MAAM,OAAO,UAAU;IACZ,MAAM,CAAY;IAClB,QAAQ,CAAS;IAE1B,YAAY,KAAiB,EAAE,OAAgB;QAC7C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACzB,CAAC;IAED,kBAAkB;IAElB;wEACoE;IACpE,IAAI,CAAC,IAAmB,EAAE,KAAuB;QAC/C,MAAM,GAAG,GAAe,EAAE,CAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAY,CAAA;QAChC,MAAM,IAAI,GAAG,CAAC,IAAc,EAAQ,EAAE;YACpC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;oBACrE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;oBACf,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACjB,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,CAAA;YACb,CAAC;QACH,CAAC,CAAA;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAED;gGAC4F;IAC5F,YAAY,CAAC,OAAgB;QAC3B,MAAM,GAAG,GAAe,EAAE,CAAA;QAC1B,MAAM,IAAI,GAAG,CAAC,IAAc,EAAQ,EAAE;YACpC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrC,IAAI,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC5G,IAAI,CAAC,KAAK,CAAC,CAAA;YACb,CAAC;QACH,CAAC,CAAA;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,SAA2C;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAU,CAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAClG,CAAC;IAED,mGAAmG;IACnG,OAAO,CAAC,IAAmB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC9F,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC/E,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,mEAAmE;IACnE,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1G,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9E,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/E,CAAC;IAED,8FAA8F;IAC9F,SAAS,CAAC,IAAoB;QAC5B,MAAM,GAAG,GAAe,EAAE,CAAA;QAC1B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,KAAK,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM;gBAAE,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/F,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,kGAAkG;IAClG,YAAY;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACvE,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,EAAE,CAAC,KAAa;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;IAC3B,CAAC;IAED,OAAO,CAAC,EAAiC;QACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM;YAAE,EAAE,CAAC,IAAI,EAAU,CAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC5E,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAI,EAA8B;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAU,CAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAChF,CAAC;IAED,KAAK;QACH,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IACzB,CAAC;IAED,sGAAsG;IACtG,QAAQ,CAAC,IAAmB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,gDAAgD;IAChD,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,uDAAuD;IAEvD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,EAAE,CAAA;IACvB,CAAC;IACD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAA;IAC5B,CAAC;IACD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAwB,CAAA;IAChD,CAAC;IACD,gFAAgF;IAChF,KAAK,CAAC,IAAoB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAiB,CAAC,CAAA;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC3C,CAAC;IACD,6FAA6F;IAC7F,QAAQ,CAAC,OAAgB;QACvB,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAA;IAC9C,CAAC;IAED,oDAAoD;IAEpD;8EAC0E;IAC1E,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;QAC3D,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACzC,CAAC;IAED,2FAA2F;IAC3F,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;QAC1D,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACzC,CAAC;IAED,mGAAmG;IACnG,MAAM,CAAC,IAAY;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC7D,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC3C,CAAC;IAED,2FAA2F;IAC3F,eAAe;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAA;QACpE,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACjD,CAAC;IAED,yBAAyB;IAEzB;;;0FAGsF;IACtF,IAAI,CAAC,OAA6B,EAAE,GAAG,MAAiB;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;QACxG,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAA;QAC3C,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,QAAQ,aAAa,KAAK,EAAE,CAAC,CAAA;QAC3G,OAAO,KAAK,CAAA;IACd,CAAC;IAED,kBAAkB;IAElB,6FAA6F;IAC7F,WAAW,CAAC,IAAgB;QAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAC9F,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;QACzF,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;6EACyE;IACzE,QAAQ,CAAC,IAAoB,EAAE,IAA4C;QACzE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAiB,CAAC,CAAA;YAC3C,IAAI,CAAC,KAAK;gBAAE,SAAQ;YACpB,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACjE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;QAC3F,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,OAAsF;QAC3F,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;gBACxB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;gBACrH,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAA;YAC/B,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;gBACrC,IAAI,KAAK;oBAAE,GAAG,GAAG,KAAK,CAAC,gBAAgB,CAAA;YACzC,CAAC;YACD,yEAAyE;YACzE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;QAClE,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAmB;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;YACpF,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAA;QACtF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAChG,OAAO,IAAI,CAAA;IACb,CAAC;IAED,sBAAsB;IAEtB,yFAAyF;IACzF,YAAY,CAAC,IAAgB;QAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAA;YAClC,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;YACvE,sFAAsF;YACtF,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YACrE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAC9C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,wFAAwF;IACxF,WAAW,CAAC,IAAgB;QAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAA;QAC/I,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,yDAAyD;IACzD,IAAI,CAAC,MAAc,EAAE,KAAa;QAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAA;YACnE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;QACnE,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;qGAIiG;IACjG,MAAM,CAAC,IAAY;QACjB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC1E,OAAO,IAAI,CAAA;IACb,CAAC;IAED,4FAA4F;IAC5F,OAAO,CAAC,IAAY;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC3E,OAAO,IAAI,CAAA;IACb,CAAC;IAED;qFACiF;IACjF,YAAY,CAAC,SAAiB;QAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAmC,CAAC,CAAC,MAAM,CAAA;QACrE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC;YAAE,OAAO,IAAI,CAAA;QACzE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAA;QACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,GAAG,CAAC,CAAA;QACpE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,GAAG,GAAG,SAAS,CAAC,CAAA;QAClG,OAAO,IAAI,CAAA;IACb,CAAC;IAED,uFAAuF;IACvF,aAAa,CAAC,IAAY;QACxB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAA;QAC9E,OAAO,IAAI,CAAA;IACb,CAAC;IAED,oFAAoF;IACpF,UAAU,CAAC,MAAqB;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAA;IAC9G,CAAC;IAED,oDAAoD;IACpD,SAAS,CAAC,MAAqB;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAA;IAC7G,CAAC;IAED,qBAAqB;IAErB,mGAAmG;IACnG,iBAAiB,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;IACvC,CAAC;IAED,yEAAyE;IACzE,kBAAkB,CAAC,IAAY;QAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,GAAG,IAAI,CAAC,CAAA;QACtG,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;wFAEoF;IACpF,cAAc;QACZ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAA;YACjC,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;YACpG,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAA;YAC1E,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;oFAGgF;IAChF,iBAAiB,CAAC,EAA4B;QAC5C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACvC,IAAI,CAAC,OAAO;gBAAE,SAAQ;YACtB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC7B,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;YAC1F,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;YAC/F,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;4FACwF;IACxF,SAAS,CAAC,OAAe;QACvB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACzC,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAA;QACzB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;wDACoD;IACpD,aAAa,CAAC,OAAe;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACtE,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QACzB,iGAAiG;QACjG,gGAAgG;QAChG,iGAAiG;QACjG,4EAA4E;QAC5E,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC5F,OAAO,IAAI,CAAA;IACb,CAAC;IAED;oFACgF;IAChF,kBAAkB,CAAC,UAAkB,EAAE,OAAgB;QACrD,OAAO,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,sBAAsB;IAEtB,KAAK,CAAC,GAAe,EAAE,IAAc;QACnC,OAAO,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAU,CAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACxF,CAAC;IACD,qFAAqF;IACrF,KAAK,CAAC,MAAqB,EAAE,KAA6C;QACxE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;QAC7B,MAAM,CACJ,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,EACpG,gCAAgC,CACjC,CAAA;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC9E,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CAAC,KAAiB;QACvB,OAAO,IAAI,EAAU,CAAI,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IAChD,CAAC;IACD,OAAO;QACL,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,+BAA+B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QACrF,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC;IACD,UAAU;QACR,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,qBAAqB,CAAC,CAAA;QACrD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5F,CAAC;CACF;;AAED,0FAA0F;AAC1F,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACjE,CAAC;AAED,gGAAgG;AAChG,SAAS,YAAY,CAAC,aAAqB;IACzC,MAAM,KAAK,GACT,aAAa,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;IACpG,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAChC,CAAC;AAED,SAAS,OAAO,CAAsB,IAAc,EAAE,KAAuB;IAC3E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAA2C,EAAE,CAAC;QAC7F,IAAI,OAAO,KAAK,SAAS;YAAE,SAAQ;QACnC,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAA;QAClC,CAAC;aAAM,IAAI,OAAO,YAAY,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;QACvD,CAAC;aAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,OAAO;gBAAE,OAAO,KAAK,CAAA;QACpD,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAgB,CAAC,CAAA,CAAC,gDAAgD;YAC3F,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;gBAAE,OAAO,KAAK,CAAA;QACtD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,kGAAkG;AAClG,SAAS,SAAS,CAAC,IAAc,EAAE,GAAW;IAC5C,OAAO,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAgB,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;AAChF,CAAC;AAED,mFAAmF;AACnF,SAAS,MAAM,CAAC,IAAc,EAAE,IAAY;IAC1C,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzF,CAAC;AAED,+EAA+E;AAC/E,SAAS,cAAc,CAAC,IAAc,EAAE,IAAY;IAClD,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM;QAAE,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC;YAAE,OAAO,GAAG,CAAA;IACpF,OAAO,IAAI,CAAA;AACb,CAAC;AAED,kFAAkF;AAClF,SAAS,SAAS,CAAC,IAAc,EAAE,KAAa;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAA;IACtC,MAAM,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACvC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAS,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAA;AACzD,CAAC;AAED,6FAA6F;AAC7F,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,SAAS;IACT,iBAAiB;IACjB,sBAAsB;IACtB,gCAAgC;IAChC,qBAAqB;IACrB,oBAAoB;IACpB,gBAAgB;IAChB,mBAAmB;IACnB,eAAe;IACf,kBAAkB;IAClB,cAAc;CACf,CAAC,CAAA;AACF,SAAS,OAAO,CAAC,IAAc;IAC7B,KAAK,IAAI,GAAG,GAAoB,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM;QAAE,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,CAAA;IACtG,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,OAAO,GAAG,CAAI,CAAW,EAAU,EAAE,CAAC,CAAC,KAAK,IAAI,CAAA;AAEtD,SAAS,MAAM,CAAC,KAAiB;IAC/B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;AAC5B,CAAC;AAED,+FAA+F;AAC/F,SAAS,MAAM,CAAC,IAAc;IAC5B,IAAI,GAAG,GAAG,IAAI,CAAA;IACd,OAAO,GAAG,CAAC,MAAM;QAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;IACnC,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CAItC,MAAgC,EAChC,OAAoD,EACpD,OAAgC;IAEhC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAA;IACpC,IAAI,OAAO,GAAqC,IAAI,CAAA;IAEpD,KAAK,UAAU,KAAK;QAClB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QACnB,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAA;QACxE,KAAK,MAAM,OAAO,IAAI,QAAQ;YAAE,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACjE,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QACnD,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QAEnE,SAAS,GAAG,CAAC,MAAc,EAAE,OAAY,EAAE,OAAkC;YAC3E,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;YAC3C,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAA;YAC5E,MAAM,KAAK,GAAW,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACnD,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnD,2FAA2F;YAC3F,wCAAwC;YACxC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;YACjF,uFAAuF;YACvF,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAA;YACtD,MAAM,OAAO,GAAY;gBACvB,SAAS;gBACT,SAAS;gBACT,QAAQ,CAAC,IAAI;oBACX,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;oBAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;oBAC/E,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAA;gBACxC,CAAC;aACF,CAAA;YACD,OAAO,CAAC,IAAI,UAAU,CAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;YAC5E,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO;YACL,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE;YACjF,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO;gBACvC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;gBAC/C,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,EAAE,CAAA;YAC/F,CAAC;SACF,CAAA;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,IAAI;YACF,OAAO,KAAK,KAAK,EAAE,CAAA;YACnB,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RichNode } from './types.js';
|
|
2
|
+
/** The opening delimiter token (`[` / `{` / `(`) of a container node. */
|
|
3
|
+
export declare function openDelimiter(node: RichNode): RichNode;
|
|
4
|
+
/** The separator token (a `,` by default, or `;` for a `;`-list) immediately after `node` among its
|
|
5
|
+
* parent's children (comments skipped), or `null` — the trailing separator `remove({ separator })`
|
|
6
|
+
* drops alongside a list element, and `append` extends to keep the container's style. */
|
|
7
|
+
export declare function trailingSeparator(node: RichNode, sep?: string): RichNode | null;
|
|
8
|
+
/** Whether `node` spans more than one line (its open and close sit on different rows) — the cue for
|
|
9
|
+
* `append`/`prepend` to lay an element on its own line rather than inline. */
|
|
10
|
+
export declare function isMultiline(node: RichNode): boolean;
|
|
11
|
+
/** Containers whose elements are separated by newlines (a block / class body), not commas. */
|
|
12
|
+
export declare const NEWLINE_CONTAINERS: Set<string>;
|
|
13
|
+
/** Containers whose members are separated/terminated by `;` (a TS interface / object type). */
|
|
14
|
+
export declare const SEMI_CONTAINERS: Set<string>;
|
|
15
|
+
//# sourceMappingURL=containers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAQ1C,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAItD;AAED;;0FAE0F;AAC1F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAM,GAAG,QAAQ,GAAG,IAAI,CAW5E;AAED;+EAC+E;AAC/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEnD;AAED,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,aAAwD,CAAA;AAEvF,+FAA+F;AAC/F,eAAO,MAAM,eAAe,aAA6C,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { COMMENT_TYPES } from './comment-attachment.js';
|
|
2
|
+
import { assert } from './assert.js';
|
|
3
|
+
// Structural queries over container nodes (arrays / objects / blocks / interface bodies …), shared by
|
|
4
|
+
// the Collection (routing, `remove({ separator })`) and the Formatter (layout). Kept here so neither
|
|
5
|
+
// has to import the other.
|
|
6
|
+
/** The opening delimiter token (`[` / `{` / `(`) of a container node. */
|
|
7
|
+
export function openDelimiter(node) {
|
|
8
|
+
const open = node.allChildren[0];
|
|
9
|
+
assert(open, `container '${node.type}' has no opening delimiter`);
|
|
10
|
+
return open;
|
|
11
|
+
}
|
|
12
|
+
/** The separator token (a `,` by default, or `;` for a `;`-list) immediately after `node` among its
|
|
13
|
+
* parent's children (comments skipped), or `null` — the trailing separator `remove({ separator })`
|
|
14
|
+
* drops alongside a list element, and `append` extends to keep the container's style. */
|
|
15
|
+
export function trailingSeparator(node, sep = ',') {
|
|
16
|
+
const siblings = node.parent?.allChildren;
|
|
17
|
+
if (!siblings)
|
|
18
|
+
return null;
|
|
19
|
+
const i = siblings.indexOf(node);
|
|
20
|
+
if (i === -1)
|
|
21
|
+
return null;
|
|
22
|
+
for (let j = i + 1; j < siblings.length; j++) {
|
|
23
|
+
const sib = siblings[j];
|
|
24
|
+
if (COMMENT_TYPES[sib.language].has(sib.type))
|
|
25
|
+
continue;
|
|
26
|
+
return sib.type === sep ? sib : null;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
/** Whether `node` spans more than one line (its open and close sit on different rows) — the cue for
|
|
31
|
+
* `append`/`prepend` to lay an element on its own line rather than inline. */
|
|
32
|
+
export function isMultiline(node) {
|
|
33
|
+
return node.startPosition.row !== node.endPosition.row;
|
|
34
|
+
}
|
|
35
|
+
/** Containers whose elements are separated by newlines (a block / class body), not commas. */
|
|
36
|
+
export const NEWLINE_CONTAINERS = new Set(['statement_block', 'class_body', 'program']);
|
|
37
|
+
/** Containers whose members are separated/terminated by `;` (a TS interface / object type). */
|
|
38
|
+
export const SEMI_CONTAINERS = new Set(['interface_body', 'object_type']);
|
|
39
|
+
//# sourceMappingURL=containers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,sGAAsG;AACtG,qGAAqG;AACrG,2BAA2B;AAE3B,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,CAAC,IAAI,EAAE,cAAc,IAAI,CAAC,IAAI,4BAA4B,CAAC,CAAA;IACjE,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;0FAE0F;AAC1F,MAAM,UAAU,iBAAiB,CAAC,IAAc,EAAE,GAAG,GAAG,GAAG;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAA;IACzC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC1B,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAQ;QACvD,OAAO,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;IACtC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAA;AACxD,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAA;AAEvF,+FAA+F;AAC/F,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAA"}
|
package/dist/edit-collector.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { SourceMap } from './types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* demand, a source map) via magic-string.
|
|
3
|
+
* A pure edit buffer: collects text edits against a source string and produces the transformed code
|
|
4
|
+
* (and, on demand, a source map) via magic-string. It knows nothing about lines, indentation, or
|
|
5
|
+
* formatting — that policy lives in the {@link Formatter}, which drives this buffer.
|
|
5
6
|
*
|
|
6
|
-
* Overlap is resolved **first-wins**: an edit overlapping one already accepted is
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* position, so the generated map is precise.
|
|
7
|
+
* Overlap is resolved **first-wins**: an edit overlapping one already accepted is dropped silently —
|
|
8
|
+
* the text-layer side of outer-wins. Because edits are applied through magic-string at their original
|
|
9
|
+
* offsets, the kept text keeps its original position, so the generated map is precise.
|
|
10
10
|
*/
|
|
11
11
|
export declare class EditCollector {
|
|
12
12
|
#private;
|
|
@@ -15,38 +15,11 @@ export declare class EditCollector {
|
|
|
15
15
|
overwrite(start: number, end: number, replacement: string): void;
|
|
16
16
|
/** Delete `[start, end)`. */
|
|
17
17
|
remove(start: number, end: number): void;
|
|
18
|
-
/** Format-aware delete of `[start, end)`: when the span owns its line(s) — only indentation
|
|
19
|
-
* before `start`, only whitespace after `end` up to the line break — drop the whole lines so no
|
|
20
|
-
* blank line is left behind; otherwise an in-line delete. Used under `format` so removing an
|
|
21
|
-
* own-line node collapses its line the way Prettier would, while an inline element (`[1, x, 3]`)
|
|
22
|
-
* is left untouched around the hole.
|
|
23
|
-
*
|
|
24
|
-
* The content, the leading indent, and the trailing line break are claimed separately so the
|
|
25
|
-
* removal composes after an abutting edit: a prior `unwrap`/`dropDirective` that already consumed
|
|
26
|
-
* the run up to `start` leaves the content abutting it (no overlap, so it lands), while the
|
|
27
|
-
* leading-indent claim it overlaps is dropped on its own (first-wins) instead of taking the whole
|
|
28
|
-
* line removal down with it. */
|
|
29
|
-
removeFormatted(start: number, end: number): void;
|
|
30
|
-
/** Delete `[start, end)` where `end` begins a following node, collapsing the lines before it:
|
|
31
|
-
* when `start` opens its own line and `end` sits on a later line, drop `[start's line, end's
|
|
32
|
-
* line)` so the leading run (a directive comment and any comments stacked under it) vanishes
|
|
33
|
-
* whole-line while `end`'s own line — its indentation included — is left for a later edit to
|
|
34
|
-
* collapse independently. Otherwise (an inline `start`, or `end` on the same line) a verbatim
|
|
35
|
-
* `[start, end)` delete. Used by `dropDirective` so it composes with a following `remove`. */
|
|
36
|
-
removeUpToLine(start: number, end: number): void;
|
|
37
|
-
/** Delete the whole lines `[start, end)` touches — from the start of `start`'s line (leading
|
|
38
|
-
* indentation included) through the newline after `end`'s line, so nothing blank is left behind.
|
|
39
|
-
* With `collapseBlankBefore`, also absorb whole blank lines immediately above (a separator before
|
|
40
|
-
* a dropped block). */
|
|
41
|
-
removeLines(start: number, end: number, collapseBlankBefore?: boolean): void;
|
|
42
18
|
/** Insert `text` at `index`, attached to the left chunk. A point insertion: it claims no
|
|
43
19
|
* range, so it composes with edits on either side (and survives removal of the right side). */
|
|
44
20
|
insertLeft(index: number, text: string): void;
|
|
45
21
|
/** Insert `text` at `index`, attached to the right chunk. */
|
|
46
22
|
insertRight(index: number, text: string): void;
|
|
47
|
-
/** The leading whitespace of the line containing `index` — the base indent an inserted block
|
|
48
|
-
* should match. Empty when the line starts with a non-whitespace character. */
|
|
49
|
-
indentAt(index: number): string;
|
|
50
23
|
toString(): string;
|
|
51
24
|
generateMap(source: string): SourceMap;
|
|
52
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-collector.d.ts","sourceRoot":"","sources":["../src/edit-collector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C;;;;;;;;GAQG;AACH,qBAAa,aAAa;;
|
|
1
|
+
{"version":3,"file":"edit-collector.d.ts","sourceRoot":"","sources":["../src/edit-collector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C;;;;;;;;GAQG;AACH,qBAAa,aAAa;;gBAIZ,MAAM,EAAE,MAAM;IAI1B,yFAAyF;IACzF,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAMhE,6BAA6B;IAC7B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKxC;oGACgG;IAChG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7C,6DAA6D;IAC7D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9C,QAAQ,IAAI,MAAM;IAIlB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;CAWvC"}
|
package/dist/edit-collector.js
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
import MagicString from 'magic-string';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* demand, a source map) via magic-string.
|
|
3
|
+
* A pure edit buffer: collects text edits against a source string and produces the transformed code
|
|
4
|
+
* (and, on demand, a source map) via magic-string. It knows nothing about lines, indentation, or
|
|
5
|
+
* formatting — that policy lives in the {@link Formatter}, which drives this buffer.
|
|
5
6
|
*
|
|
6
|
-
* Overlap is resolved **first-wins**: an edit overlapping one already accepted is
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* position, so the generated map is precise.
|
|
7
|
+
* Overlap is resolved **first-wins**: an edit overlapping one already accepted is dropped silently —
|
|
8
|
+
* the text-layer side of outer-wins. Because edits are applied through magic-string at their original
|
|
9
|
+
* offsets, the kept text keeps its original position, so the generated map is precise.
|
|
10
10
|
*/
|
|
11
11
|
export class EditCollector {
|
|
12
12
|
#magic;
|
|
13
|
-
#source;
|
|
14
13
|
#claimed = [];
|
|
15
14
|
constructor(source) {
|
|
16
15
|
this.#magic = new MagicString(source);
|
|
17
|
-
this.#source = source;
|
|
18
16
|
}
|
|
19
17
|
/** Replace `[start, end)` with `replacement` (an empty range inserts before `start`). */
|
|
20
18
|
overwrite(start, end, replacement) {
|
|
@@ -31,59 +29,6 @@ export class EditCollector {
|
|
|
31
29
|
return;
|
|
32
30
|
this.#magic.remove(start, end);
|
|
33
31
|
}
|
|
34
|
-
/** Format-aware delete of `[start, end)`: when the span owns its line(s) — only indentation
|
|
35
|
-
* before `start`, only whitespace after `end` up to the line break — drop the whole lines so no
|
|
36
|
-
* blank line is left behind; otherwise an in-line delete. Used under `format` so removing an
|
|
37
|
-
* own-line node collapses its line the way Prettier would, while an inline element (`[1, x, 3]`)
|
|
38
|
-
* is left untouched around the hole.
|
|
39
|
-
*
|
|
40
|
-
* The content, the leading indent, and the trailing line break are claimed separately so the
|
|
41
|
-
* removal composes after an abutting edit: a prior `unwrap`/`dropDirective` that already consumed
|
|
42
|
-
* the run up to `start` leaves the content abutting it (no overlap, so it lands), while the
|
|
43
|
-
* leading-indent claim it overlaps is dropped on its own (first-wins) instead of taking the whole
|
|
44
|
-
* line removal down with it. */
|
|
45
|
-
removeFormatted(start, end) {
|
|
46
|
-
const lineStart = this.#lineStart(start);
|
|
47
|
-
const newline = this.#source.indexOf('\n', end);
|
|
48
|
-
const lineEnd = newline === -1 ? this.#source.length : newline;
|
|
49
|
-
const ownsLines = this.#source.slice(lineStart, start).trim() === '' && this.#source.slice(end, lineEnd).trim() === '';
|
|
50
|
-
this.remove(start, end); // the content — abuts any prior edit at `start`, so it always lands
|
|
51
|
-
if (!ownsLines)
|
|
52
|
-
return;
|
|
53
|
-
this.remove(lineStart, start); // leading indent — may be already gone under a prior edit
|
|
54
|
-
this.remove(end, newline === -1 ? this.#source.length : newline + 1); // trailing line break
|
|
55
|
-
}
|
|
56
|
-
/** Delete `[start, end)` where `end` begins a following node, collapsing the lines before it:
|
|
57
|
-
* when `start` opens its own line and `end` sits on a later line, drop `[start's line, end's
|
|
58
|
-
* line)` so the leading run (a directive comment and any comments stacked under it) vanishes
|
|
59
|
-
* whole-line while `end`'s own line — its indentation included — is left for a later edit to
|
|
60
|
-
* collapse independently. Otherwise (an inline `start`, or `end` on the same line) a verbatim
|
|
61
|
-
* `[start, end)` delete. Used by `dropDirective` so it composes with a following `remove`. */
|
|
62
|
-
removeUpToLine(start, end) {
|
|
63
|
-
const startLine = this.#lineStart(start);
|
|
64
|
-
const endLine = this.#lineStart(end);
|
|
65
|
-
if (endLine > startLine && this.#source.slice(startLine, start).trim() === '')
|
|
66
|
-
this.remove(startLine, endLine);
|
|
67
|
-
else
|
|
68
|
-
this.remove(start, end);
|
|
69
|
-
}
|
|
70
|
-
/** Delete the whole lines `[start, end)` touches — from the start of `start`'s line (leading
|
|
71
|
-
* indentation included) through the newline after `end`'s line, so nothing blank is left behind.
|
|
72
|
-
* With `collapseBlankBefore`, also absorb whole blank lines immediately above (a separator before
|
|
73
|
-
* a dropped block). */
|
|
74
|
-
removeLines(start, end, collapseBlankBefore = false) {
|
|
75
|
-
let lineStart = this.#lineStart(start);
|
|
76
|
-
if (collapseBlankBefore) {
|
|
77
|
-
while (lineStart > 0) {
|
|
78
|
-
const prevStart = this.#lineStart(lineStart - 1);
|
|
79
|
-
if (this.#source.slice(prevStart, lineStart - 1).trim() !== '')
|
|
80
|
-
break; // a non-blank line stops it
|
|
81
|
-
lineStart = prevStart;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
const newline = this.#source.indexOf('\n', end);
|
|
85
|
-
this.remove(lineStart, newline === -1 ? this.#source.length : newline + 1);
|
|
86
|
-
}
|
|
87
32
|
/** Insert `text` at `index`, attached to the left chunk. A point insertion: it claims no
|
|
88
33
|
* range, so it composes with edits on either side (and survives removal of the right side). */
|
|
89
34
|
insertLeft(index, text) {
|
|
@@ -93,21 +38,12 @@ export class EditCollector {
|
|
|
93
38
|
insertRight(index, text) {
|
|
94
39
|
this.#magic.appendRight(index, text);
|
|
95
40
|
}
|
|
96
|
-
/** The leading whitespace of the line containing `index` — the base indent an inserted block
|
|
97
|
-
* should match. Empty when the line starts with a non-whitespace character. */
|
|
98
|
-
indentAt(index) {
|
|
99
|
-
return /^[ \t]*/.exec(this.#source.slice(this.#lineStart(index), index))[0];
|
|
100
|
-
}
|
|
101
41
|
toString() {
|
|
102
42
|
return this.#magic.toString();
|
|
103
43
|
}
|
|
104
44
|
generateMap(source) {
|
|
105
45
|
return this.#magic.generateMap({ source, includeContent: true, hires: true });
|
|
106
46
|
}
|
|
107
|
-
// Offset of the first character of the line containing `index`.
|
|
108
|
-
#lineStart(index) {
|
|
109
|
-
return this.#source.lastIndexOf('\n', index - 1) + 1;
|
|
110
|
-
}
|
|
111
47
|
// Half-open intervals [start, end): reject one overlapping an accepted edit (touching
|
|
112
48
|
// boundaries don't overlap), so magic-string never sees a conflicting operation.
|
|
113
49
|
#claim(start, end) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-collector.js","sourceRoot":"","sources":["../src/edit-collector.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,cAAc,CAAA;AAGtC;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACf,MAAM,CAAa;IACnB,
|
|
1
|
+
{"version":3,"file":"edit-collector.js","sourceRoot":"","sources":["../src/edit-collector.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,cAAc,CAAA;AAGtC;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACf,MAAM,CAAa;IACnB,QAAQ,GAA4B,EAAE,CAAA;IAE/C,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC;IAED,yFAAyF;IACzF,SAAS,CAAC,KAAa,EAAE,GAAW,EAAE,WAAmB;QACvD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;YAAE,OAAM;QACpC,IAAI,KAAK,KAAK,GAAG;YAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;;YACxD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,CAAC,CAAA;IAClD,CAAC;IAED,6BAA6B;IAC7B,MAAM,CAAC,KAAa,EAAE,GAAW;QAC/B,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;YAAE,OAAM;QACrD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAChC,CAAC;IAED;oGACgG;IAChG,UAAU,CAAC,KAAa,EAAE,IAAY;QACpC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,6DAA6D;IAC7D,WAAW,CAAC,KAAa,EAAE,IAAY;QACrC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IAC/B,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/E,CAAC;IAED,sFAAsF;IACtF,iFAAiF;IACjF,MAAM,CAAC,KAAa,EAAE,GAAW;QAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;QACtE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
package/dist/format.d.ts
CHANGED
|
@@ -1,13 +1,42 @@
|
|
|
1
|
-
/** A source file's
|
|
1
|
+
/** A source file's resolved formatting: the indent unit (`'\t'` or N spaces) and line ending. */
|
|
2
2
|
export interface FormatStyle {
|
|
3
3
|
indentUnit: string;
|
|
4
4
|
eol: string;
|
|
5
5
|
}
|
|
6
|
+
/** Per-apply formatting configuration (`transform(src, ctx, options)`) — each field overrides what
|
|
7
|
+
* would otherwise be detected from the source. The extension point prettier-like options (trailing
|
|
8
|
+
* comma, semicolons, quotes, print width) would grow on. */
|
|
9
|
+
export interface FormatOptions {
|
|
10
|
+
/** Force the indent unit (`'\t'` or N spaces) instead of guessing it. */
|
|
11
|
+
indentUnit?: string;
|
|
12
|
+
/** Force the line ending (`'\n'` / `'\r\n'`) instead of guessing it. */
|
|
13
|
+
eol?: string;
|
|
14
|
+
}
|
|
6
15
|
/** Guess the indent unit (most common indentation step, detect-indent style; tabs when they
|
|
7
16
|
* dominate) and EOL (first line break) of `source`, defaulting to two spaces and `'\n'`. */
|
|
8
17
|
export declare function detectStyle(source: string): FormatStyle;
|
|
18
|
+
/** The {@link FormatStyle} for an apply: detected from `source`, with any explicit `options` winning. */
|
|
19
|
+
export declare function resolveStyle(source: string, options?: FormatOptions): FormatStyle;
|
|
9
20
|
/** Re-indent a snippet for a line indented by `baseIndent`: the first line is left for the caller
|
|
10
|
-
* to position,
|
|
11
|
-
*
|
|
21
|
+
* to position, every following non-blank line is re-anchored to `baseIndent` (its indentation
|
|
22
|
+
* relative to the block's own base preserved), and line breaks become `eol`.
|
|
23
|
+
*
|
|
24
|
+
* The block's base is the least-indented continuation line — *not* the first line, which a node's
|
|
25
|
+
* `.text` leaves at column 0 even when the node sits deep in the source. Stripping that base before
|
|
26
|
+
* applying `baseIndent` re-anchors a "hanging" block (continuation lines still at their source
|
|
27
|
+
* indent) to the target, instead of stacking `baseIndent` on top of the indent already there. */
|
|
12
28
|
export declare function reindent(text: string, baseIndent: string, eol: string): string;
|
|
29
|
+
/** Offset of the first character of the line containing `index`. */
|
|
30
|
+
export declare function lineStartOf(source: string, index: number): number;
|
|
31
|
+
/** The leading whitespace of the line containing `index` — the base indent an inserted block should
|
|
32
|
+
* match. Empty when the line starts with a non-whitespace character. */
|
|
33
|
+
export declare function indentOf(source: string, index: number): string;
|
|
34
|
+
/** A space or tab — the horizontal whitespace separating inline list elements (`undefined` past
|
|
35
|
+
* either end of the source is not whitespace). */
|
|
36
|
+
export declare function isHSpace(char: string | undefined): boolean;
|
|
37
|
+
/** The whole-line span `[from, to)` covering the lines `[start, end)` touches — from the start of
|
|
38
|
+
* `start`'s line (leading indentation included) through the newline after `end`'s line, so nothing
|
|
39
|
+
* blank is left behind. With `collapseBlankBefore`, also absorb whole blank lines immediately above
|
|
40
|
+
* (a separator before a dropped block). */
|
|
41
|
+
export declare function wholeLineRange(source: string, start: number, end: number, collapseBlankBefore?: boolean): [number, number];
|
|
13
42
|
//# sourceMappingURL=format.d.ts.map
|
package/dist/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAIA,
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAIA,iGAAiG;AACjG,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;6DAE6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;6FAC6F;AAC7F,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAEvD;AAED,yGAAyG;AACzG,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,WAAW,CAMjF;AA0CD;;;;;;;kGAOkG;AAClG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAU9E;AAKD,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;yEACyE;AACzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;mDACmD;AACnD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE1D;AAED;;;4CAG4C;AAC5C,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,mBAAmB,UAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAWxH"}
|
package/dist/format.js
CHANGED
|
@@ -6,6 +6,14 @@
|
|
|
6
6
|
export function detectStyle(source) {
|
|
7
7
|
return { indentUnit: detectIndentUnit(source), eol: detectEol(source) };
|
|
8
8
|
}
|
|
9
|
+
/** The {@link FormatStyle} for an apply: detected from `source`, with any explicit `options` winning. */
|
|
10
|
+
export function resolveStyle(source, options) {
|
|
11
|
+
const detected = detectStyle(source);
|
|
12
|
+
return {
|
|
13
|
+
indentUnit: options?.indentUnit ?? detected.indentUnit,
|
|
14
|
+
eol: options?.eol ?? detected.eol,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
9
17
|
function detectEol(source) {
|
|
10
18
|
return /\r\n|\n/.exec(source)?.[0] ?? '\n';
|
|
11
19
|
}
|
|
@@ -47,14 +55,58 @@ function detectIndentUnit(source) {
|
|
|
47
55
|
return ' '.repeat(unit || 2);
|
|
48
56
|
}
|
|
49
57
|
/** Re-indent a snippet for a line indented by `baseIndent`: the first line is left for the caller
|
|
50
|
-
* to position,
|
|
51
|
-
*
|
|
58
|
+
* to position, every following non-blank line is re-anchored to `baseIndent` (its indentation
|
|
59
|
+
* relative to the block's own base preserved), and line breaks become `eol`.
|
|
60
|
+
*
|
|
61
|
+
* The block's base is the least-indented continuation line — *not* the first line, which a node's
|
|
62
|
+
* `.text` leaves at column 0 even when the node sits deep in the source. Stripping that base before
|
|
63
|
+
* applying `baseIndent` re-anchors a "hanging" block (continuation lines still at their source
|
|
64
|
+
* indent) to the target, instead of stacking `baseIndent` on top of the indent already there. */
|
|
52
65
|
export function reindent(text, baseIndent, eol) {
|
|
53
66
|
if (!text.includes('\n'))
|
|
54
67
|
return text;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
.
|
|
68
|
+
const lines = text.split(/\r\n|\n/);
|
|
69
|
+
let base = Infinity;
|
|
70
|
+
for (let i = 1; i < lines.length; i++) {
|
|
71
|
+
if (lines[i].trim() === '')
|
|
72
|
+
continue;
|
|
73
|
+
base = Math.min(base, /^[ \t]*/.exec(lines[i])[0].length);
|
|
74
|
+
}
|
|
75
|
+
if (base === Infinity)
|
|
76
|
+
base = 0; // a single-or-blank-continuation snippet: nothing to strip
|
|
77
|
+
return lines.map((line, i) => (i === 0 || line.trim() === '' ? line : baseIndent + line.slice(base))).join(eol);
|
|
78
|
+
}
|
|
79
|
+
// —— Pure line/whitespace queries over a source string (shared by the formatter and whole-line
|
|
80
|
+
// removal). They take the source explicitly so they stay independent of the edit buffer. ——
|
|
81
|
+
/** Offset of the first character of the line containing `index`. */
|
|
82
|
+
export function lineStartOf(source, index) {
|
|
83
|
+
return source.lastIndexOf('\n', index - 1) + 1;
|
|
84
|
+
}
|
|
85
|
+
/** The leading whitespace of the line containing `index` — the base indent an inserted block should
|
|
86
|
+
* match. Empty when the line starts with a non-whitespace character. */
|
|
87
|
+
export function indentOf(source, index) {
|
|
88
|
+
return /^[ \t]*/.exec(source.slice(lineStartOf(source, index), index))[0];
|
|
89
|
+
}
|
|
90
|
+
/** A space or tab — the horizontal whitespace separating inline list elements (`undefined` past
|
|
91
|
+
* either end of the source is not whitespace). */
|
|
92
|
+
export function isHSpace(char) {
|
|
93
|
+
return char === ' ' || char === '\t';
|
|
94
|
+
}
|
|
95
|
+
/** The whole-line span `[from, to)` covering the lines `[start, end)` touches — from the start of
|
|
96
|
+
* `start`'s line (leading indentation included) through the newline after `end`'s line, so nothing
|
|
97
|
+
* blank is left behind. With `collapseBlankBefore`, also absorb whole blank lines immediately above
|
|
98
|
+
* (a separator before a dropped block). */
|
|
99
|
+
export function wholeLineRange(source, start, end, collapseBlankBefore = false) {
|
|
100
|
+
let from = lineStartOf(source, start);
|
|
101
|
+
if (collapseBlankBefore) {
|
|
102
|
+
while (from > 0) {
|
|
103
|
+
const prevStart = lineStartOf(source, from - 1);
|
|
104
|
+
if (source.slice(prevStart, from - 1).trim() !== '')
|
|
105
|
+
break; // a non-blank line stops it
|
|
106
|
+
from = prevStart;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const newline = source.indexOf('\n', end);
|
|
110
|
+
return [from, newline === -1 ? source.length : newline + 1];
|
|
59
111
|
}
|
|
60
112
|
//# sourceMappingURL=format.js.map
|
package/dist/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,iGAAiG;AACjG,mGAAmG;
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { RichNode } from './types.js';
|
|
2
|
+
import type { EditCollector } from './edit-collector.js';
|
|
3
|
+
import { type FormatStyle } from './format.js';
|
|
4
|
+
/**
|
|
5
|
+
* The layout-formatting policy: how an edit is *rendered* once the codemod has decided *what* to
|
|
6
|
+
* edit. Built per-apply from the source plus a resolved {@link FormatStyle}. The {@link Collection}
|
|
7
|
+
* delegates the rendering of each edit to it; the {@link EditCollector} it drives stays a pure edit
|
|
8
|
+
* buffer.
|
|
9
|
+
*
|
|
10
|
+
* This is the single home for indentation/EOL re-rendering, container layout (separators, trailing
|
|
11
|
+
* commas, brace padding), and line-collapse on removal — and the place prettier-like options
|
|
12
|
+
* (trailing-comma/semicolon/quote/print-width) would grow.
|
|
13
|
+
*/
|
|
14
|
+
export declare class Formatter {
|
|
15
|
+
#private;
|
|
16
|
+
constructor(collector: EditCollector, source: string, style: FormatStyle);
|
|
17
|
+
/** The line ending — for inserting whole statements (`ensureImport`). */
|
|
18
|
+
get eol(): string;
|
|
19
|
+
/** The leading whitespace of the line containing `index` — for restoring a displaced node's indent. */
|
|
20
|
+
indentAt(index: number): string;
|
|
21
|
+
/** `text` re-indented to the line at `index` (single-line text is unchanged) — for a replaced or
|
|
22
|
+
* inserted snippet. */
|
|
23
|
+
reindent(text: string, index: number): string;
|
|
24
|
+
/** Append `text` as the last element of `node`: a fresh indented line in a block/class body, after
|
|
25
|
+
* the last element of a comma- or `;`-separated list, or as the sole element of an empty one. */
|
|
26
|
+
append(node: RichNode, text: string): void;
|
|
27
|
+
/** Prepend `text` as the first element of `node` — the mirror of {@link append}. */
|
|
28
|
+
prepend(node: RichNode, text: string): void;
|
|
29
|
+
/** Delete `[start, end)`, collapsing whitespace the way Prettier would: when the span owns its
|
|
30
|
+
* line(s) — only indentation before `start`, only whitespace after `end` up to the line break —
|
|
31
|
+
* drop the whole lines so no blank line is left; otherwise an in-line delete that also clears one
|
|
32
|
+
* residual separating space, so a removed mid-list element (`[1, two(), 3]`) leaves `[1, 3]`, not
|
|
33
|
+
* `[1, 3]`.
|
|
34
|
+
*
|
|
35
|
+
* In the own-line case the content, the leading indent, and the trailing line break are removed
|
|
36
|
+
* separately so the deletion composes after an abutting edit: a prior `unwrap`/`dropDirective` that
|
|
37
|
+
* already consumed the run up to `start` leaves the content abutting it (no overlap, so it lands),
|
|
38
|
+
* while the leading-indent removal it overlaps is dropped on its own (first-wins) instead of taking
|
|
39
|
+
* the whole line removal down with it. */
|
|
40
|
+
removeNode(start: number, end: number): void;
|
|
41
|
+
/** Delete `[start, end)` where `end` begins a following node, collapsing the lines before it: when
|
|
42
|
+
* `start` opens its own line and `end` sits on a later line, drop `[start's line, end's line)` so
|
|
43
|
+
* the leading run (a directive comment and any comments stacked under it) vanishes whole-line while
|
|
44
|
+
* `end`'s own line — its indentation included — is left for a later edit to collapse independently.
|
|
45
|
+
* Otherwise (an inline `start`, or `end` on the same line) a plain `[start, end)` delete. Used by
|
|
46
|
+
* `dropDirective` so it composes with a following `remove`. */
|
|
47
|
+
removeLeadingTo(start: number, end: number): void;
|
|
48
|
+
/** Delete the whole lines `[start, end)` touches — leading indentation through the trailing newline,
|
|
49
|
+
* so nothing blank is left. With `collapseBlankBefore`, also absorb whole blank lines immediately
|
|
50
|
+
* above (a separator before a dropped block). The explicit whole-line removal `remove({ wholeLines })`
|
|
51
|
+
* asks for, where collapsing per node isn't enough. */
|
|
52
|
+
removeWholeLines(start: number, end: number, collapseBlankBefore?: boolean): void;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,KAAK,WAAW,EAA6D,MAAM,aAAa,CAAA;AAGzG;;;;;;;;;GASG;AACH,qBAAa,SAAS;;gBAKR,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW;IAMxE,yEAAyE;IACzE,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,uGAAuG;IACvG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI/B;4BACwB;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAM7C;sGACkG;IAClG,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAY1C,oFAAoF;IACpF,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAW3C;;;;;;;;;;+CAU2C;IAC3C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAiB5C;;;;;oEAKgE;IAChE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAOjD;;;4DAGwD;IACxD,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,mBAAmB,UAAQ,GAAG,IAAI;CAmEhF"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { reindent, indentOf, isHSpace, lineStartOf, wholeLineRange } from './format.js';
|
|
2
|
+
import { openDelimiter, trailingSeparator, isMultiline, NEWLINE_CONTAINERS, SEMI_CONTAINERS } from './containers.js';
|
|
3
|
+
/**
|
|
4
|
+
* The layout-formatting policy: how an edit is *rendered* once the codemod has decided *what* to
|
|
5
|
+
* edit. Built per-apply from the source plus a resolved {@link FormatStyle}. The {@link Collection}
|
|
6
|
+
* delegates the rendering of each edit to it; the {@link EditCollector} it drives stays a pure edit
|
|
7
|
+
* buffer.
|
|
8
|
+
*
|
|
9
|
+
* This is the single home for indentation/EOL re-rendering, container layout (separators, trailing
|
|
10
|
+
* commas, brace padding), and line-collapse on removal — and the place prettier-like options
|
|
11
|
+
* (trailing-comma/semicolon/quote/print-width) would grow.
|
|
12
|
+
*/
|
|
13
|
+
export class Formatter {
|
|
14
|
+
#collector;
|
|
15
|
+
#source;
|
|
16
|
+
#style;
|
|
17
|
+
constructor(collector, source, style) {
|
|
18
|
+
this.#collector = collector;
|
|
19
|
+
this.#source = source;
|
|
20
|
+
this.#style = style;
|
|
21
|
+
}
|
|
22
|
+
/** The line ending — for inserting whole statements (`ensureImport`). */
|
|
23
|
+
get eol() {
|
|
24
|
+
return this.#style.eol;
|
|
25
|
+
}
|
|
26
|
+
/** The leading whitespace of the line containing `index` — for restoring a displaced node's indent. */
|
|
27
|
+
indentAt(index) {
|
|
28
|
+
return indentOf(this.#source, index);
|
|
29
|
+
}
|
|
30
|
+
/** `text` re-indented to the line at `index` (single-line text is unchanged) — for a replaced or
|
|
31
|
+
* inserted snippet. */
|
|
32
|
+
reindent(text, index) {
|
|
33
|
+
return reindent(text, indentOf(this.#source, index), this.#style.eol);
|
|
34
|
+
}
|
|
35
|
+
// —— append / prepend an element to a container ——
|
|
36
|
+
/** Append `text` as the last element of `node`: a fresh indented line in a block/class body, after
|
|
37
|
+
* the last element of a comma- or `;`-separated list, or as the sole element of an empty one. */
|
|
38
|
+
append(node, text) {
|
|
39
|
+
const elements = node.children;
|
|
40
|
+
if (NEWLINE_CONTAINERS.has(node.type)) {
|
|
41
|
+
if (elements.length === 0)
|
|
42
|
+
this.#fillBlock(node, text);
|
|
43
|
+
else {
|
|
44
|
+
const last = elements[elements.length - 1];
|
|
45
|
+
this.#collector.insertRight(last.documentEndIndex, this.#line(text, last.documentStartIndex));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else if (elements.length === 0)
|
|
49
|
+
this.#fillContainer(node, text);
|
|
50
|
+
else
|
|
51
|
+
this.#appendElement(node, elements[elements.length - 1], text);
|
|
52
|
+
}
|
|
53
|
+
/** Prepend `text` as the first element of `node` — the mirror of {@link append}. */
|
|
54
|
+
prepend(node, text) {
|
|
55
|
+
const elements = node.children;
|
|
56
|
+
if (NEWLINE_CONTAINERS.has(node.type)) {
|
|
57
|
+
if (elements.length === 0)
|
|
58
|
+
this.#fillBlock(node, text);
|
|
59
|
+
else
|
|
60
|
+
this.#collector.insertRight(openDelimiter(node).documentEndIndex, this.#line(text, elements[0].documentStartIndex));
|
|
61
|
+
}
|
|
62
|
+
else if (elements.length === 0)
|
|
63
|
+
this.#fillContainer(node, text);
|
|
64
|
+
else
|
|
65
|
+
this.#prependElement(node, elements[0], text);
|
|
66
|
+
}
|
|
67
|
+
// —— removal: emit the collapse edits ——
|
|
68
|
+
/** Delete `[start, end)`, collapsing whitespace the way Prettier would: when the span owns its
|
|
69
|
+
* line(s) — only indentation before `start`, only whitespace after `end` up to the line break —
|
|
70
|
+
* drop the whole lines so no blank line is left; otherwise an in-line delete that also clears one
|
|
71
|
+
* residual separating space, so a removed mid-list element (`[1, two(), 3]`) leaves `[1, 3]`, not
|
|
72
|
+
* `[1, 3]`.
|
|
73
|
+
*
|
|
74
|
+
* In the own-line case the content, the leading indent, and the trailing line break are removed
|
|
75
|
+
* separately so the deletion composes after an abutting edit: a prior `unwrap`/`dropDirective` that
|
|
76
|
+
* already consumed the run up to `start` leaves the content abutting it (no overlap, so it lands),
|
|
77
|
+
* while the leading-indent removal it overlaps is dropped on its own (first-wins) instead of taking
|
|
78
|
+
* the whole line removal down with it. */
|
|
79
|
+
removeNode(start, end) {
|
|
80
|
+
const lineStart = lineStartOf(this.#source, start);
|
|
81
|
+
const newline = this.#source.indexOf('\n', end);
|
|
82
|
+
const lineEnd = newline === -1 ? this.#source.length : newline;
|
|
83
|
+
const ownsLines = this.#source.slice(lineStart, start).trim() === '' && this.#source.slice(end, lineEnd).trim() === '';
|
|
84
|
+
if (!ownsLines) {
|
|
85
|
+
// Inline hole: drop one separating space when both sides are spaced (a mid-list element), so no
|
|
86
|
+
// double space is left. Never at a list edge (one side non-space) or across a line break.
|
|
87
|
+
const trim = isHSpace(this.#source[end]) && isHSpace(this.#source[start - 1]) ? 1 : 0;
|
|
88
|
+
this.#collector.remove(start, end + trim);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
this.#collector.remove(start, end); // the content — abuts any prior edit at `start`, so it lands
|
|
92
|
+
this.#collector.remove(lineStart, start); // leading indent — may be already gone under a prior edit
|
|
93
|
+
this.#collector.remove(end, newline === -1 ? this.#source.length : newline + 1); // trailing line break
|
|
94
|
+
}
|
|
95
|
+
/** Delete `[start, end)` where `end` begins a following node, collapsing the lines before it: when
|
|
96
|
+
* `start` opens its own line and `end` sits on a later line, drop `[start's line, end's line)` so
|
|
97
|
+
* the leading run (a directive comment and any comments stacked under it) vanishes whole-line while
|
|
98
|
+
* `end`'s own line — its indentation included — is left for a later edit to collapse independently.
|
|
99
|
+
* Otherwise (an inline `start`, or `end` on the same line) a plain `[start, end)` delete. Used by
|
|
100
|
+
* `dropDirective` so it composes with a following `remove`. */
|
|
101
|
+
removeLeadingTo(start, end) {
|
|
102
|
+
const startLine = lineStartOf(this.#source, start);
|
|
103
|
+
const endLine = lineStartOf(this.#source, end);
|
|
104
|
+
if (endLine > startLine && this.#source.slice(startLine, start).trim() === '')
|
|
105
|
+
this.#collector.remove(startLine, endLine);
|
|
106
|
+
else
|
|
107
|
+
this.#collector.remove(start, end);
|
|
108
|
+
}
|
|
109
|
+
/** Delete the whole lines `[start, end)` touches — leading indentation through the trailing newline,
|
|
110
|
+
* so nothing blank is left. With `collapseBlankBefore`, also absorb whole blank lines immediately
|
|
111
|
+
* above (a separator before a dropped block). The explicit whole-line removal `remove({ wholeLines })`
|
|
112
|
+
* asks for, where collapsing per node isn't enough. */
|
|
113
|
+
removeWholeLines(start, end, collapseBlankBefore = false) {
|
|
114
|
+
const [from, to] = wholeLineRange(this.#source, start, end, collapseBlankBefore);
|
|
115
|
+
this.#collector.remove(from, to);
|
|
116
|
+
}
|
|
117
|
+
// —— internals ——
|
|
118
|
+
/** `text` as a fresh line at the indentation of the sibling at `index`. */
|
|
119
|
+
#line(text, index) {
|
|
120
|
+
const indent = indentOf(this.#source, index);
|
|
121
|
+
return this.#style.eol + indent + reindent(text, indent, this.#style.eol);
|
|
122
|
+
}
|
|
123
|
+
/** Open an empty `{}` block onto its own indented line — `{}` → `{⏎ text⏎}`. */
|
|
124
|
+
#fillBlock(node, text) {
|
|
125
|
+
const blockIndent = indentOf(this.#source, node.documentStartIndex);
|
|
126
|
+
const indent = blockIndent + this.#style.indentUnit;
|
|
127
|
+
const eol = this.#style.eol;
|
|
128
|
+
this.#collector.insertRight(openDelimiter(node).documentEndIndex, eol + indent + reindent(text, indent, eol) + eol + blockIndent);
|
|
129
|
+
}
|
|
130
|
+
/** Fill an empty delimited container with its sole element: a brace container is padded
|
|
131
|
+
* (`{}` → `{ text }`); an array / argument list is not (`[]` → `[text]`). */
|
|
132
|
+
#fillContainer(node, text) {
|
|
133
|
+
const open = openDelimiter(node);
|
|
134
|
+
const pad = open.text === '{' ? ' ' : '';
|
|
135
|
+
this.#collector.insertRight(open.documentEndIndex, pad + text + pad);
|
|
136
|
+
}
|
|
137
|
+
/** Append `text` after the last element `last` of a delimited container. A multi-line container
|
|
138
|
+
* places it on a fresh line at the elements' indent, mirroring the trailing-separator style —
|
|
139
|
+
* extend an existing trailing `sep`, add the mandatory `,` a comma list omits, or rely on the
|
|
140
|
+
* newline alone for a `;` list (where the separator between members is optional); an inline one
|
|
141
|
+
* stays on one line. */
|
|
142
|
+
#appendElement(node, last, text) {
|
|
143
|
+
const sep = this.#separatorFor(node);
|
|
144
|
+
if (!isMultiline(node)) {
|
|
145
|
+
this.#collector.insertRight(last.documentEndIndex, `${sep} ${text}`);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const trailing = trailingSeparator(last, sep);
|
|
149
|
+
const line = this.#line(text, last.documentStartIndex);
|
|
150
|
+
if (trailing)
|
|
151
|
+
this.#collector.insertRight(trailing.documentEndIndex, line + sep);
|
|
152
|
+
else if (sep === ';')
|
|
153
|
+
this.#collector.insertRight(last.documentEndIndex, line);
|
|
154
|
+
else
|
|
155
|
+
this.#collector.insertRight(last.documentEndIndex, sep + line);
|
|
156
|
+
}
|
|
157
|
+
/** Prepend `text` before the first element `first` — the mirror of {@link #appendElement}. The new
|
|
158
|
+
* element is always followed by the old first, so a multi-line container puts it on a fresh line
|
|
159
|
+
* after the open delimiter, separator-terminated (`;` only where the body terminates members with
|
|
160
|
+
* one); an inline one inserts before the first element so brace padding stays intact
|
|
161
|
+
* (`{ a }` → `{ x, a }`). */
|
|
162
|
+
#prependElement(node, first, text) {
|
|
163
|
+
const sep = this.#separatorFor(node);
|
|
164
|
+
if (!isMultiline(node)) {
|
|
165
|
+
this.#collector.insertLeft(first.documentStartIndex, `${text}${sep} `);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const terminate = sep === ',' || trailingSeparator(first, sep) !== null;
|
|
169
|
+
this.#collector.insertRight(openDelimiter(node).documentEndIndex, this.#line(text, first.documentStartIndex) + (terminate ? sep : ''));
|
|
170
|
+
}
|
|
171
|
+
/** The token that separates a container's elements — `;` for a TS interface / object type, else
|
|
172
|
+
* `,`. The seam a future `semi`/separator option would hook into. */
|
|
173
|
+
#separatorFor(node) {
|
|
174
|
+
return SEMI_CONTAINERS.has(node.type) ? ';' : ',';
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { NodeTypeAll, FieldName } from './generated/node-types.js';
|
|
2
|
+
import type { FormatOptions } from './format.js';
|
|
2
3
|
/** A real tree-sitter grammar. There is no id for SFC file formats — those are
|
|
3
4
|
* handled by a {@link ZoneSplitter}, which maps each section to one of these. */
|
|
4
5
|
export type GrammarId = 'javascript' | 'typescript' | 'tsx' | 'html' | 'css' | 'yaml';
|
|
@@ -93,12 +94,15 @@ export interface SourceMap {
|
|
|
93
94
|
* and is constrained to a record so it can flow into the body and `transform(src, ctx)`.
|
|
94
95
|
*/
|
|
95
96
|
export interface Transformer<Ctx extends Record<string, unknown> = Record<string, unknown>> {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
*
|
|
97
|
+
/** Apply the codemod to `source`. The recorded edits are always rendered indentation-aware —
|
|
98
|
+
* inserts re-indented to the file's unit/EOL, a removed node's line collapsed — keyed off the
|
|
99
|
+
* source's detected style; `options` overrides that detection per apply (see {@link FormatOptions}). */
|
|
100
|
+
transform(source: string, context: Ctx, options?: FormatOptions): string;
|
|
101
|
+
/** Like {@link transform} but also returns a source map (`options.source` names the input in the
|
|
102
|
+
* map). Used by build-pipeline integrations such as `@codegraft/unplugin`. */
|
|
99
103
|
transformWithMap(source: string, context: Ctx, options?: {
|
|
100
104
|
source?: string;
|
|
101
|
-
}): {
|
|
105
|
+
} & FormatOptions): {
|
|
102
106
|
code: string;
|
|
103
107
|
map: SourceMap;
|
|
104
108
|
};
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codegraft/core",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.9",
|
|
4
4
|
"description": "Tree-sitter runtime for Codegraft: parser, RichNode, comment attachment, zone splitting, the Collection, scope resolver, and edit application.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|