@codegraft/core 0.1.0-beta.8 → 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.
@@ -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 { type FormatStyle } from './format.js';
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
- /** Detected formatting conventions when the codemod opts into `format`, else `null` with
10
- * `null`, inserted text is recorded verbatim (whitespace clean-up left to Prettier). */
11
- style: FormatStyle | null;
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
@@ -1 +1 @@
1
- {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
@@ -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 { detectStyle, reindent } from './format.js';
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.collector.removeLines(node.documentStartIndex, node.documentEndIndex, options.collapseBlankBefore);
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
- // Formatting on: collapse the line when the node owned it, the way Prettier did before it was
228
- // dropped. Off: verbatim delete, leaving residual blank lines for the downstream formatter.
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 (this.#session.style && next.endsWith('\n'))
262
- next += this.#session.collector.indentAt(at);
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
- const elements = node.children;
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
- const elements = node.children;
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.style?.eol ?? '\n';
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 === '' && this.#session.style) {
386
- this.#session.collector.removeFormatted(comment.documentStartIndex, comment.documentEndIndex);
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. Under format it collapses those
413
- // whole lines but stops at the node's line, leaving the node's own line for a following `remove`
414
- // to collapse independently: the two deletes abut at the node's line start and compose. Off: the
415
- // verbatim `[comment, node)` delete, residual whitespace left for the downstream formatter.
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
- // Detect the file's indent unit / EOL once, only when the codemod opts into formatting.
656
- const style = format ? detectStyle(source) : null;
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
- style,
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
  };
@@ -1 +1 @@
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,WAAW,EAAE,QAAQ,EAAoB,MAAM,aAAa,CAAA;AACrE,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,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAC5E,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,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;gBAChH,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,8FAA8F;YAC9F,4FAA4F;YAC5F,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;;gBACzF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;QACnE,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,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;YACrD,sFAAsF;YACtF,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YAC5F,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,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAA;QAC7H,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,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC9B,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;qBACjD,CAAC;oBACJ,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;oBAC1C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAA;gBACvG,CAAC;YACH,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;YACjF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;YAChE,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,4FAA4F;IAC5F,OAAO,CAAC,IAAY;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC9B,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;;oBACjD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAA;YAClI,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAA;gBACjD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;YACvF,CAAC;QACH,CAAC;QACD,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,KAAK,EAAE,GAAG,IAAI,IAAI,CAAA;QAC5C,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,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACvC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;YAC/F,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,iGAAiG;QACjG,iGAAiG;QACjG,iGAAiG;QACjG,4FAA4F;QAC5F,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK;YAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;;YAC/G,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACxF,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,iGAAiG;IACjG,6DAA6D;IAE7D,iGAAiG;IACjG,SAAS,CAAC,IAAY,EAAE,KAAa;QACnC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC1F,CAAC;IACD;yCACqC;IACrC,KAAK,CAAC,IAAY,EAAE,KAAa;QAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,GAAG,IAAI,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACtD,OAAO,KAAK,CAAC,GAAG,GAAG,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/D,CAAC;IACD;;uGAEmG;IACnG,cAAc,CAAC,IAAc,EAAE,IAAc,EAAE,IAAY;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAA;QACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACzB,kGAAkG;YAClG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,IAAI,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QACtD,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YACpD,wFAAwF;YACxF,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAA;YAC9D,OAAM;QACR,CAAC;QACD,iGAAiG;QACjG,kGAAkG;QAClG,sFAAsF;QACtF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACtD,IAAI,QAAQ;YAAE,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,GAAG,GAAG,CAAC,CAAA;aACrE,IAAI,GAAG,KAAK,GAAG;YAAE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;;YACnE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,GAAG,IAAI,CAAC,CAAA;IAC/D,CAAC;IACD;oCACgC;IAChC,UAAU,CAAC,IAAc,EAAE,IAAY;QACrC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAA;QACjD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC/C,OAAM;QACR,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC7E,MAAM,MAAM,GAAG,WAAW,GAAG,KAAK,CAAC,UAAU,CAAA;QAC7C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC,CAAA;IAC7H,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;;0FAE0F;AAC1F,SAAS,iBAAiB,CAAC,IAAc,EAAE,GAAG,GAAG,GAAG;IAClD,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,yEAAyE;AACzE,SAAS,aAAa,CAAC,IAAc;IACnC,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,0FAA0F;AAC1F,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAA;AAEhF,uGAAuG;AACvG,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAA;AAElE,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;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAItC,MAAgC,EAChC,OAAoD,EACpD,OAAkD;IAElD,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAA;IACpC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,KAAK,CAAA;IACvC,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;YACvC,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,wFAAwF;YACxF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACjD,uFAAuF;YACvF,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAA;YACtD,MAAM,OAAO,GAAY;gBACvB,SAAS;gBACT,KAAK;gBACL,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,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE;YAC/D,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO;gBACvC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBACtC,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"}
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -1,12 +1,12 @@
1
1
  import type { SourceMap } from './types.js';
2
2
  /**
3
- * Collects edits against a source string and produces the transformed code (and, on
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
- * dropped silently — the text-layer side of outer-wins. Because edits are applied
8
- * through magic-string at their original offsets, the kept text keeps its original
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;;gBAKZ,MAAM,EAAE,MAAM;IAK1B,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;;;;;;;;;;qCAUiC;IACjC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAWjD;;;;;mGAK+F;IAC/F,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAOhD;;;4BAGwB;IACxB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,mBAAmB,UAAQ,GAAG,IAAI;IAa1E;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;oFACgF;IAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI/B,QAAQ,IAAI,MAAM;IAIlB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;CAgBvC"}
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"}
@@ -1,20 +1,18 @@
1
1
  import MagicString from 'magic-string';
2
2
  /**
3
- * Collects edits against a source string and produces the transformed code (and, on
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
- * dropped silently — the text-layer side of outer-wins. Because edits are applied
8
- * through magic-string at their original offsets, the kept text keeps its original
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,OAAO,CAAQ;IACf,QAAQ,GAA4B,EAAE,CAAA;IAE/C,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACvB,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;;;;;;;;;;qCAUiC;IACjC,eAAe,CAAC,KAAa,EAAE,GAAW;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC/C,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;QACtH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA,CAAC,oEAAoE;QAC5F,IAAI,CAAC,SAAS;YAAE,OAAM;QACtB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA,CAAC,0DAA0D;QACxF,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA,CAAC,sBAAsB;IAC7F,CAAC;IAED;;;;;mGAK+F;IAC/F,cAAc,CAAC,KAAa,EAAE,GAAW;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;;YACzG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED;;;4BAGwB;IACxB,WAAW,CAAC,KAAa,EAAE,GAAW,EAAE,mBAAmB,GAAG,KAAK;QACjE,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO,SAAS,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;gBAChD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;oBAAE,MAAK,CAAC,4BAA4B;gBAClG,SAAS,GAAG,SAAS,CAAA;YACvB,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;IAC5E,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;oFACgF;IAChF,QAAQ,CAAC,KAAa;QACpB,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAE,CAAC,CAAC,CAAC,CAAA;IAC9E,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,gEAAgE;IAChE,UAAU,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IACtD,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"}
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,11 +1,22 @@
1
- /** A source file's guessed formatting: the indent unit (`'\t'` or N spaces) and line ending. */
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
21
  * to position, every following non-blank line is re-anchored to `baseIndent` (its indentation
11
22
  * relative to the block's own base preserved), and line breaks become `eol`.
@@ -15,4 +26,17 @@ export declare function detectStyle(source: string): FormatStyle;
15
26
  * applying `baseIndent` re-anchors a "hanging" block (continuation lines still at their source
16
27
  * indent) to the target, instead of stacking `baseIndent` on top of the indent already there. */
17
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];
18
42
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAIA,gGAAgG;AAChG,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;6FAC6F;AAC7F,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAEvD;AA0CD;;;;;;;kGAOkG;AAClG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAU9E"}
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
  }
@@ -68,4 +76,37 @@ export function reindent(text, baseIndent, eol) {
68
76
  base = 0; // a single-or-blank-continuation snippet: nothing to strip
69
77
  return lines.map((line, i) => (i === 0 || line.trim() === '' ? line : baseIndent + line.slice(base))).join(eol);
70
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];
111
+ }
71
112
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
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
- transform(source: string, context: Ctx): string;
97
- /** Like {@link transform} but also returns a source map (`options.source` names the
98
- * input in the map). Used by build-pipeline integrations such as `@codegraft/unplugin`. */
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
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAEvE;kFACkF;AAClF,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAErF,4DAA4D;AAC5D,MAAM,MAAM,KAAK,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAA;IAC9B,4DAA4D;IAC5D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,QAAQ,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC3F;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,wCAAwC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAA;IAC7B,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAA;IAChC;6DACyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAA;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAA;IAChC,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAA;IACxC,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,CAAA;IAC9C,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAA;IACpC,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,EAAE,CAAA;IACrC,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,iFAAiF;IACjF,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,IAAI;IACnB,QAAQ,EAAE,SAAS,CAAA;IACnB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,QAAQ,CAAA;CACf;AAED;0BAC0B;AAC1B,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;IAClC,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,IAAI,MAAM,CAAA;IAClB,KAAK,IAAI,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxF,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM,CAAA;IAC/C;gGAC4F;IAC5F,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,SAAS,CAAA;KAAE,CAAA;CAChH;AAED,uEAAuE;AACvE,MAAM,WAAW,eAAe,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC5F,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY,CAAA;IACzC,2DAA2D;IAC3D,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;CAClC"}
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.8",
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",