@idfkit/core 0.2.0 → 0.3.0-rc.1

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.
Files changed (50) hide show
  1. package/dist/conformance.d.ts +1 -1
  2. package/dist/conformance.d.ts.map +1 -1
  3. package/dist/conformance.js +1 -1
  4. package/dist/conformance.js.map +1 -1
  5. package/dist/document.d.ts +16 -0
  6. package/dist/document.d.ts.map +1 -1
  7. package/dist/document.js +0 -0
  8. package/dist/document.js.map +1 -1
  9. package/dist/extensible.d.ts +5 -0
  10. package/dist/extensible.d.ts.map +1 -0
  11. package/dist/extensible.js +126 -0
  12. package/dist/extensible.js.map +1 -0
  13. package/dist/internal.d.ts +11 -0
  14. package/dist/internal.d.ts.map +1 -1
  15. package/dist/internal.js +11 -0
  16. package/dist/internal.js.map +1 -1
  17. package/dist/object.d.ts +34 -2
  18. package/dist/object.d.ts.map +1 -1
  19. package/dist/object.js +43 -6
  20. package/dist/object.js.map +1 -1
  21. package/dist/parse/epjson.d.ts.map +1 -1
  22. package/dist/parse/epjson.js +23 -1
  23. package/dist/parse/epjson.js.map +1 -1
  24. package/dist/parse/idf.d.ts +16 -0
  25. package/dist/parse/idf.d.ts.map +1 -1
  26. package/dist/parse/idf.js +76 -4
  27. package/dist/parse/idf.js.map +1 -1
  28. package/dist/parse/lexer.d.ts.map +1 -1
  29. package/dist/parse/lexer.js +21 -3
  30. package/dist/parse/lexer.js.map +1 -1
  31. package/dist/preserve/source.d.ts +3 -0
  32. package/dist/preserve/source.d.ts.map +1 -0
  33. package/dist/preserve/source.js +60 -0
  34. package/dist/preserve/source.js.map +1 -0
  35. package/dist/preserve/write.d.ts +2 -0
  36. package/dist/preserve/write.d.ts.map +1 -0
  37. package/dist/preserve/write.js +85 -0
  38. package/dist/preserve/write.js.map +1 -0
  39. package/dist/syntax/layer.d.ts.map +1 -1
  40. package/dist/syntax/layer.js +30 -6
  41. package/dist/syntax/layer.js.map +1 -1
  42. package/dist/write/epjson.d.ts +19 -0
  43. package/dist/write/epjson.d.ts.map +1 -1
  44. package/dist/write/epjson.js +12 -0
  45. package/dist/write/epjson.js.map +1 -1
  46. package/dist/write/idf.d.ts +23 -7
  47. package/dist/write/idf.d.ts.map +1 -1
  48. package/dist/write/idf.js +51 -7
  49. package/dist/write/idf.js.map +1 -1
  50. package/package.json +4 -4
package/dist/parse/idf.js CHANGED
@@ -1,5 +1,8 @@
1
1
  import { IdfDocument } from '../document.js';
2
- import { lex } from './lexer.js';
2
+ import { SOURCE } from '../internal.js';
3
+ import { statementIndexes } from '../preserve/source.js';
4
+ import { layerCollector } from '../syntax/layer.js';
5
+ import { lex, objectCollector } from './lexer.js';
3
6
  import { scan } from './scan.js';
4
7
  /**
5
8
  * Parse IDF text into a document.
@@ -32,9 +35,28 @@ export function parseIdf(text, schema, options = {}) {
32
35
  diagnostics.push(diagnostic);
33
36
  options.onDiagnostic?.(diagnostic);
34
37
  };
35
- const raw = lex(text, { onDiagnostic: report });
38
+ // One pass when the caller asked for preservation, two collectors composed over it; the ordinary
39
+ // read is untouched and still asks the scan for nothing it does not want.
40
+ const preserve = options.preserveFormatting === true;
41
+ const layerBuild = preserve ? layerCollector(text) : undefined;
42
+ let raw;
43
+ if (layerBuild === undefined) {
44
+ raw = lex(text, { onDiagnostic: report });
45
+ }
46
+ else {
47
+ const objects = objectCollector(text, { onDiagnostic: report });
48
+ scan(text, both(layerBuild.handler, objects.handler));
49
+ raw = objects.objects;
50
+ }
51
+ const layer = layerBuild?.finish();
36
52
  const document = new IdfDocument(schema);
37
- for (const object of raw) {
53
+ // `anchors[i]` is the object statement `i` produced, or `undefined` for one the read rejected.
54
+ const anchors = layer === undefined
55
+ ? []
56
+ : new Array(layer.statements.length).fill(undefined);
57
+ const statementOf = layer === undefined ? undefined : statementIndexes(layer, raw);
58
+ for (let index = 0; index < raw.length; index += 1) {
59
+ const object = raw[index];
38
60
  const canonical = schema.resolve(object.typeName);
39
61
  if (canonical === undefined) {
40
62
  report({
@@ -56,7 +78,14 @@ export function parseIdf(text, schema, options = {}) {
56
78
  try {
57
79
  const invalid = [];
58
80
  const { name, values } = interpret(definition, object, invalid);
59
- document.addRaw(canonical, definition.anon === 1 ? null : name, values);
81
+ const built = document.addRaw(canonical, definition.anon === 1 ? null : name, values);
82
+ // The anchoring, built here rather than in a second walk: this is the one place that knows
83
+ // both which statement was read and which object it produced.
84
+ const at = statementOf?.[index];
85
+ if (at !== undefined) {
86
+ anchors[at] = built;
87
+ built[SOURCE] = at;
88
+ }
60
89
  // Reported after the object is built, never instead of building it: a value of the wrong
61
90
  // kind does not stop the parse, so a caller reading strictly gets the document they always
62
91
  // got. This adds a finding where there was silence, and nothing else.
@@ -87,8 +116,51 @@ export function parseIdf(text, schema, options = {}) {
87
116
  });
88
117
  }
89
118
  }
119
+ if (layer !== undefined) {
120
+ document.adoptSource({ format: 'idf', layer, anchors, countAtRead: document.size });
121
+ }
90
122
  return { document, diagnostics };
91
123
  }
124
+ /**
125
+ * Two scan handlers over one pass.
126
+ *
127
+ * Written out member by member rather than built by reflection, so that a member added to
128
+ * `ScanHandler` is a compile error here rather than a member one of the two collectors silently
129
+ * stops receiving. Neither collector ever asks the scan to stop, so a composed member returns
130
+ * nothing and the scan runs to the end as it does for either alone.
131
+ */
132
+ function both(first, second) {
133
+ return {
134
+ statementStart(offset, line, column) {
135
+ first.statementStart?.(offset, line, column);
136
+ second.statementStart?.(offset, line, column);
137
+ },
138
+ fieldText(start, end) {
139
+ first.fieldText?.(start, end);
140
+ second.fieldText?.(start, end);
141
+ },
142
+ fieldEnd(index, start, end, line) {
143
+ first.fieldEnd?.(index, start, end, line);
144
+ second.fieldEnd?.(index, start, end, line);
145
+ },
146
+ separator(offset) {
147
+ first.separator?.(offset);
148
+ second.separator?.(offset);
149
+ },
150
+ terminator(offset) {
151
+ first.terminator?.(offset);
152
+ second.terminator?.(offset);
153
+ },
154
+ comment(start, end) {
155
+ first.comment?.(start, end);
156
+ second.comment?.(start, end);
157
+ },
158
+ statementEnd(end, unterminated) {
159
+ first.statementEnd?.(end, unterminated);
160
+ second.statementEnd?.(end, unterminated);
161
+ },
162
+ };
163
+ }
92
164
  /** Map positional IDF values onto named schema fields. */
93
165
  function interpret(definition, object, invalid) {
94
166
  const order = definition.f;
@@ -1 +1 @@
1
- {"version":3,"file":"idf.js","sourceRoot":"","sources":["../../src/parse/idf.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idf.js","sourceRoot":"","sources":["../../src/parse/idf.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/parse/lexer.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,mBAAmB,GACnB,cAAc,GACd,OAAO,GACP,iBAAiB,GACjB,YAAY,GACZ,iBAAiB,GACjB,oBAAoB,GACpB,gBAAgB,CAAC;AAErB,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,KAAK,IAAI,CAAC;CACpD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,SAAS,EAAE,CAgFvE"}
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/parse/lexer.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,mBAAmB,GACnB,cAAc,GACd,OAAO,GACP,iBAAiB,GACjB,YAAY,GACZ,iBAAiB,GACjB,oBAAoB,GACpB,gBAAgB,CAAC;AAErB,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,KAAK,IAAI,CAAC;CACpD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,SAAS,EAAE,CAIvE"}
@@ -11,6 +11,24 @@ import { scan } from './scan.js';
11
11
  * for no comment and no region, so it pays for neither, and it builds no syntax layer.
12
12
  */
13
13
  export function lex(text, options = {}) {
14
+ const collector = objectCollector(text, options);
15
+ scan(text, collector.handler);
16
+ return collector.objects;
17
+ }
18
+ /**
19
+ * The lexer's own scan handler, and the objects it fills, separately.
20
+ *
21
+ * Split out for the same reason the layer's is: a caller that wants the raw objects AND the syntax
22
+ * layer from one pass composes the two handlers rather than scanning twice. The preserving read is
23
+ * that caller.
24
+ *
25
+ * `objects` is the live array the handler pushes into, so a caller reads it after its own scan
26
+ * returns. The handler is exactly what {@link lex} passes, unchanged, so nothing here decides
27
+ * anything the single-pass version did not.
28
+ *
29
+ * @internal
30
+ */
31
+ export function objectCollector(text, options = {}) {
14
32
  const objects = [];
15
33
  const report = options.onDiagnostic;
16
34
  /** Field text pieces, one per run the scan reports, joined when the field closes. */
@@ -27,7 +45,7 @@ export function lex(text, options = {}) {
27
45
  let objectLine = 1;
28
46
  let objectColumn = 0;
29
47
  let objectOffset = -1;
30
- scan(text, {
48
+ const handler = {
31
49
  statementStart(offset, line, column) {
32
50
  objectLine = line;
33
51
  objectColumn = column;
@@ -81,7 +99,7 @@ export function lex(text, options = {}) {
81
99
  }
82
100
  values = [];
83
101
  },
84
- });
85
- return objects;
102
+ };
103
+ return { handler, objects };
86
104
  }
87
105
  //# sourceMappingURL=lexer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/parse/lexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAmEjC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,UAAsB,EAAE;IACxD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAEpC,qFAAqF;IACrF,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,4EAA4E;IAC5E,IAAI,MAAM,GAAa,EAAE,CAAC;IAE1B;;;;;;OAMG;IACH,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IAEtB,IAAI,CAAC,IAAI,EAAE;QACT,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM;YACjC,UAAU,GAAG,IAAI,CAAC;YAClB,YAAY,GAAG,MAAM,CAAC;YACtB,YAAY,GAAG,MAAM,CAAC;QACxB,CAAC;QAED,SAAS,CAAC,KAAK,EAAE,GAAG;YAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,QAAQ;YACN,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;QAED,YAAY,CAAC,IAAI,EAAE,YAAY;YAC7B,IAAI,YAAY,EAAE,CAAC;gBACjB,0FAA0F;gBAC1F,0FAA0F;gBAC1F,8EAA8E;gBAC9E,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBACpC,IAAI,QAAQ,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzC,MAAM,EAAE,CAAC;wBACP,OAAO,EAAE,6BAA6B,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,iBAAiB;wBACzF,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,YAAY;wBAClB,MAAM,EAAE,YAAY,IAAI,SAAS;wBACjC,sFAAsF;wBACtF,uFAAuF;wBACvF,6DAA6D;wBAC7D,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;qBACpB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,GAAG,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;YACtC,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;gBACpB,MAAM,EAAE,CAAC;oBACP,OAAO,EAAE,0BAA0B;oBACnC,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,YAAY,IAAI,SAAS;oBACjC,IAAI,EAAE,YAAY;iBACnB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ;oBACR,MAAM;oBACN,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,YAAY,IAAI,SAAS;oBACjC,MAAM,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;iBACrD,CAAC,CAAC;YACL,CAAC;YACD,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/parse/lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { IdfObject } from '../object.js';
2
+ export declare function isUntouched(obj: IdfObject, source: PreservedSource | undefined): boolean;
3
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/preserve/source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA8E9C,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAKxF"}
@@ -0,0 +1,60 @@
1
+ import { SOURCE } from '../internal.js';
2
+ /**
3
+ * Whether an object is still exactly the characters it was read from.
4
+ *
5
+ * The third clause is not redundant: an object carrying an index from a file it is no longer in
6
+ * fails the identity check, which is what makes a document assembled from more than one source
7
+ * fall out rather than need handling.
8
+ *
9
+ * @internal
10
+ */
11
+ export function isWholeDocumentUntouched(document, source) {
12
+ if (document.size !== source.countAtRead)
13
+ return false;
14
+ for (const obj of document.objects()) {
15
+ if (!isUntouched(obj, source))
16
+ return false;
17
+ }
18
+ return true;
19
+ }
20
+ export function isUntouched(obj, source) {
21
+ if (source === undefined)
22
+ return false;
23
+ const at = obj[SOURCE];
24
+ if (at === undefined)
25
+ return false;
26
+ return source.anchors[at] === obj;
27
+ }
28
+ /**
29
+ * The statement each raw object was read from, by index into `objects`.
30
+ *
31
+ * The lexer records one offset per object and the layer records the same offset as the start of
32
+ * that statement's region, so the two match on a number both already hold. One pass with two
33
+ * cursors: the lexer's sequence is a subsequence of the layer's, because some statements produce
34
+ * no object.
35
+ *
36
+ * An object matching no statement gets `undefined` and is written by formatting, which is the
37
+ * honest answer for one whose characters cannot be located.
38
+ *
39
+ * @internal
40
+ */
41
+ export function statementIndexes(layer, objects) {
42
+ const found = new Array(objects.length).fill(undefined);
43
+ const statements = layer.statements;
44
+ let at = 0;
45
+ for (let index = 0; index < objects.length; index += 1) {
46
+ const offset = objects[index]?.offset;
47
+ if (offset === undefined)
48
+ continue;
49
+ while (at < statements.length && statements[at].region.start < offset)
50
+ at += 1;
51
+ if (at >= statements.length)
52
+ break;
53
+ if (statements[at].region.start === offset) {
54
+ found[index] = at;
55
+ at += 1;
56
+ }
57
+ }
58
+ return found;
59
+ }
60
+ //# sourceMappingURL=source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/preserve/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AA2DxC;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAA8D,EAC9D,MAAuB;IAEvB,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACvD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAc,EAAE,MAAmC;IAC7E,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC;AACpC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAkB,EAClB,OAA6B;IAE7B,MAAM,KAAK,GAA2B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACtC,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACnC,OAAO,EAAE,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM;YAAE,EAAE,IAAI,CAAC,CAAC;QAChF,IAAI,EAAE,IAAI,UAAU,CAAC,MAAM;YAAE,MAAM;QACnC,IAAI,UAAU,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC5C,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAClB,EAAE,IAAI,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/preserve/write.ts"],"names":[],"mappings":""}
@@ -0,0 +1,85 @@
1
+ import { OWNER } from '../internal.js';
2
+ import { writeObject } from '../write/idf.js';
3
+ import { isUntouched } from './source.js';
4
+ /**
5
+ * Reproduce the text a document was read from, per object.
6
+ *
7
+ * A walk over the statements the read scanned and the gaps between them. The gaps are
8
+ * unconditional and only the statements are decided: every character is either inside a statement
9
+ * or in a gap, because the layer tiles the text, and nothing in a gap belongs to an object. That
10
+ * is what makes the one-object diff structural rather than careful, and it is why nothing is
11
+ * reordered, no header is added and the version statement is not moved.
12
+ *
13
+ * A statement's region ends at its terminator, so a comment trailing the semicolon on the same
14
+ * line is in the gap: removing an object leaves it, and reformatting one leaves it below the new
15
+ * text. Behaviour rather than defects, and the alternative is a writer that guesses which comments
16
+ * are about which object.
17
+ *
18
+ * @internal
19
+ */
20
+ export function writePreserved(document, source, options) {
21
+ const text = source.layer.text;
22
+ const statements = source.layer.statements;
23
+ const parts = [];
24
+ // Everything before the first statement, which for a file with none is the whole text: an empty
25
+ // file and a file of comments are both reproduced by this line alone.
26
+ parts.push(text.slice(0, statements[0]?.region.start ?? text.length));
27
+ for (let index = 0; index < statements.length; index += 1) {
28
+ const statement = statements[index];
29
+ parts.push(statementPart(source, index, text, options));
30
+ // Unconditional: the gap is emitted whether the statement was copied, reformatted or dropped.
31
+ parts.push(text.slice(statement.region.end, statements[index + 1]?.region.start ?? text.length));
32
+ }
33
+ appendNewObjects(document, source, parts, options);
34
+ return parts.join('');
35
+ }
36
+ /**
37
+ * An anchor that is `undefined` is a statement the read rejected, an unknown type or a duplicate
38
+ * name. Its characters are reproduced: the read already reported a diagnostic, and the write is
39
+ * not the place to delete text the author wrote.
40
+ */
41
+ function statementPart(source, index, text, options) {
42
+ const statement = source.layer.statements[index];
43
+ const verbatim = text.slice(statement.region.start, statement.region.end);
44
+ const anchored = source.anchors[index];
45
+ if (anchored === undefined)
46
+ return verbatim;
47
+ // Removal is answered from ownership: `remove` already clears the owner, and recording it on
48
+ // the object would mean holding a reference to something the document has let go.
49
+ if (anchored[OWNER] === undefined)
50
+ return '';
51
+ if (isUntouched(anchored, source))
52
+ return verbatim;
53
+ return writeObject(anchored, options);
54
+ }
55
+ /**
56
+ * Objects no anchor names, formatted and appended after everything the layer holds.
57
+ *
58
+ * The end is the only placement that cannot disturb text the author wrote. The newline guard is
59
+ * the file-with-no-trailing-newline case: appending must not run onto the author's last line.
60
+ */
61
+ function appendNewObjects(document, source, parts, options) {
62
+ const anchored = new Set(source.anchors);
63
+ // The last non-empty part rather than a join of everything so far, which would make appending N
64
+ // objects cost N passes over the whole file.
65
+ let tail = lastNonEmpty(parts);
66
+ for (const obj of document.objects()) {
67
+ if (anchored.has(obj))
68
+ continue;
69
+ if (tail !== '' && !tail.endsWith('\n'))
70
+ parts.push('\n');
71
+ parts.push(writeObject(obj, options));
72
+ parts.push('\n');
73
+ tail = '\n';
74
+ }
75
+ }
76
+ /** The last part that carries a character, which is what decides whether the output ends in one. */
77
+ function lastNonEmpty(parts) {
78
+ for (let index = parts.length - 1; index >= 0; index -= 1) {
79
+ const part = parts[index];
80
+ if (part !== '')
81
+ return part;
82
+ }
83
+ return '';
84
+ }
85
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/preserve/write.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../../src/syntax/layer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAkB,MAAM,aAAa,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,qFAAqF;IACrF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAiHjD"}
1
+ {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../../src/syntax/layer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAkB,MAAM,aAAa,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,qFAAqF;IACrF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAIjD"}
@@ -14,6 +14,25 @@ import { TokenStore } from './tokens.js';
14
14
  * record per statement.
15
15
  */
16
16
  export function scanIdf(text) {
17
+ const collector = layerCollector(text);
18
+ scan(text, collector.handler);
19
+ return collector.finish();
20
+ }
21
+ /**
22
+ * The layer's own scan handler, and the layer it builds, separately.
23
+ *
24
+ * Split out so that a caller which wants the layer AND something else from the same characters can
25
+ * have both from one pass. The preserving read is that caller: it wants the layer and the raw
26
+ * objects, and running the scan twice would double the cost of the one option this library asks a
27
+ * caller to pay for.
28
+ *
29
+ * The handler is exactly what {@link scanIdf} passes, unchanged, so the layer a composed pass
30
+ * builds is the layer `scanIdf` builds. Nothing here decides anything the single-pass version did
31
+ * not.
32
+ *
33
+ * @internal
34
+ */
35
+ export function layerCollector(text) {
17
36
  const tokens = new TokenStore(initialCapacity(text.length));
18
37
  const statements = [];
19
38
  /**
@@ -42,7 +61,7 @@ export function scanIdf(text) {
42
61
  nextComment += 2;
43
62
  }
44
63
  };
45
- scan(text, {
64
+ const handler = {
46
65
  statementStart(offset) {
47
66
  openedAt = offset;
48
67
  fields = [];
@@ -110,11 +129,16 @@ export function scanIdf(text) {
110
129
  unterminated,
111
130
  });
112
131
  },
113
- });
114
- // Comments after the last terminator close no field, so nothing has flushed them. Text that is
115
- // only comments reaches here having reported no statement at all.
116
- flushComments(Infinity);
117
- return { text, statements, tokens };
132
+ };
133
+ return {
134
+ handler,
135
+ finish: () => {
136
+ // Comments after the last terminator close no field, so nothing has flushed them. Text that
137
+ // is only comments reaches here having reported no statement at all.
138
+ flushComments(Infinity);
139
+ return { text, statements, tokens };
140
+ },
141
+ };
118
142
  }
119
143
  /**
120
144
  * Stands in until a statement's first field closes, which it always does before the statement
@@ -1 +1 @@
1
- {"version":3,"file":"layer.js","sourceRoot":"","sources":["../../src/syntax/layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer.js","sourceRoot":"","sources":["../../src/syntax/layer.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,25 @@ export interface WriteEpJsonOptions {
7
7
  * @defaultValue 2
8
8
  */
9
9
  indent?: number;
10
+ /**
11
+ * Reproduce the text the document was read from, on this format's own terms.
12
+ *
13
+ * **All or nothing, which is not what the text format does.** The object notation has no
14
+ * statements, so there is nothing to anchor an object's own characters to and no way to
15
+ * reproduce one object while reformatting another. The retained text is therefore reproduced
16
+ * only while nothing has been touched, nothing added and nothing removed, and any change at all
17
+ * falls the whole document back to the ordinary writer.
18
+ *
19
+ * Both languages preserve this format on these terms. The difference is a property of the
20
+ * format, not of either library, and it is stated here because a reader who knows the text
21
+ * format's per-object terms would otherwise assume them.
22
+ *
23
+ * Tri-state as it is on the text writer: absent decides, `true` preserves and is a quiet
24
+ * fallback when there is nothing to preserve, `false` formats.
25
+ *
26
+ * @defaultValue undefined, meaning decide
27
+ */
28
+ preserveFormatting?: boolean;
10
29
  }
11
30
  /** Serialize a document to epJSON text. */
12
31
  export declare function writeEpJson<M extends AnyTypeMap>(document: IdfDocument<M>, options?: WriteEpJsonOptions): string;
@@ -1 +1 @@
1
- {"version":3,"file":"epjson.d.ts","sourceRoot":"","sources":["../../src/write/epjson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,CAAC,SAAS,UAAU,EAC9C,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAGR;AAED,qDAAqD;AACrD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAE/E"}
1
+ {"version":3,"file":"epjson.d.ts","sourceRoot":"","sources":["../../src/write/epjson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;;;;;;;;OAiBG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,CAAC,SAAS,UAAU,EAC9C,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAgBR;AAED,qDAAqD;AACrD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAE/E"}
@@ -1,5 +1,17 @@
1
+ import { isWholeDocumentUntouched } from '../preserve/source.js';
1
2
  /** Serialize a document to epJSON text. */
2
3
  export function writeEpJson(document, options = {}) {
4
+ const source = document.preservedSource;
5
+ if (options.preserveFormatting !== false &&
6
+ source !== undefined &&
7
+ source.format === 'epjson' &&
8
+ // Removal is decided from the count and from anchor identity, never from a scan of the
9
+ // survivors: every object left after a removal is still exactly its own characters, so asking
10
+ // only the survivors reproduces the original text with the removed object still in it. That is
11
+ // a file that loads and misrepresents the model, and it is the defect this clause exists for.
12
+ isWholeDocumentUntouched(document, source)) {
13
+ return source.layer.text;
14
+ }
3
15
  const indent = options.indent ?? 2;
4
16
  return JSON.stringify(document.toJSON(), null, indent);
5
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"epjson.js","sourceRoot":"","sources":["../../src/write/epjson.ts"],"names":[],"mappings":"AAYA,2CAA2C;AAC3C,MAAM,UAAU,WAAW,CACzB,QAAwB,EACxB,UAA8B,EAAE;IAEhC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,QAAQ,CAAuB,QAAwB;IACrE,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"epjson.js","sourceRoot":"","sources":["../../src/write/epjson.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AA+BjE,2CAA2C;AAC3C,MAAM,UAAU,WAAW,CACzB,QAAwB,EACxB,UAA8B,EAAE;IAEhC,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC;IACxC,IACE,OAAO,CAAC,kBAAkB,KAAK,KAAK;QACpC,MAAM,KAAK,SAAS;QACpB,MAAM,CAAC,MAAM,KAAK,QAAQ;QAC1B,uFAAuF;QACvF,8FAA8F;QAC9F,+FAA+F;QAC/F,8FAA8F;QAC9F,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1C,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,QAAQ,CAAuB,QAAwB;IACrE,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC3B,CAAC"}
@@ -54,17 +54,33 @@ export interface WriteIdfOptions {
54
54
  * @defaultValue false
55
55
  */
56
56
  compressed?: boolean;
57
+ /**
58
+ * Reproduce the text the document was read from, per object.
59
+ *
60
+ * Tri-state: absent decides from the document and the other options, `true` preserves and
61
+ * refuses a contradictory request, `false` formats. Asking for it on a document read without it
62
+ * is not an error, because nothing was promised.
63
+ *
64
+ * Refused together with `indent`, `commentColumn`, `ordering` or `versionFirst`: reproducing the
65
+ * original text and laying it out differently are contradictory. Not refused with `compressed`
66
+ * or `comments: false`, which ask for a different output FORM the source was never going to
67
+ * express, so producing it is honest.
68
+ *
69
+ * @defaultValue undefined, meaning decide
70
+ */
71
+ preserveFormatting?: boolean;
57
72
  }
58
73
  /**
59
74
  * Serialize a document to IDF text.
60
75
  *
61
- * One caveat worth stating plainly: this does not round-trip formatting.
62
- * `3.0` in the input comes back as `3`, because JavaScript has a single number
63
- * type and the distinction is lost the moment the value is parsed. The models
64
- * are semantically identical and EnergyPlus reads both, but a textual diff of
65
- * input against output will show those fields. Preserving the original text
66
- * needs a concrete syntax tree, which the Python library has and this does not
67
- * yet.
76
+ * Two behaviours, chosen by how the document was read. A document read with `preserveFormatting`
77
+ * is written back per object: anything unchanged is reproduced from the characters it was read
78
+ * from, and everything between the objects is copied. A document read without it is formatted,
79
+ * which is what this writer has always done and still does by default.
80
+ *
81
+ * The caveat that used to be stated here applies to the formatting path alone: `3.0` comes back as
82
+ * `3` for a field the schema does not declare numeric. On the preserving path nothing is
83
+ * re-rendered, so nothing is lost.
68
84
  */
69
85
  export declare function writeIdf<M extends AnyTypeMap>(document: IdfDocument<M>, options?: WriteIdfOptions): string;
70
86
  export interface ObjectWriteOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"idf.d.ts","sourceRoot":"","sources":["../../src/write/idf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,cAAc,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,UAAU,EAC3C,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE,eAAoB,GAC5B,MAAM,CAkCR;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,4BAA4B;AAC5B,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA4D/E"}
1
+ {"version":3,"file":"idf.d.ts","sourceRoot":"","sources":["../../src/write/idf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,cAAc,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,UAAU,EAC3C,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE,eAAoB,GAC5B,MAAM,CA2CR;AA0CD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,4BAA4B;AAC5B,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA4D/E"}