@danielsimonjr/sciengjs 0.7.1 → 0.9.0

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 (90) hide show
  1. package/README.md +61 -4
  2. package/THIRD_PARTY_NOTICES.md +5 -0
  3. package/dist/config.d.ts +4 -0
  4. package/dist/config.js +9 -1
  5. package/dist/config.js.map +1 -1
  6. package/dist/core.js +2 -0
  7. package/dist/core.js.map +1 -1
  8. package/dist/errors.d.ts +2 -0
  9. package/dist/errors.js +4 -0
  10. package/dist/errors.js.map +1 -1
  11. package/dist/graph/backend-pdf.js +3 -2
  12. package/dist/graph/backend-pdf.js.map +1 -1
  13. package/dist/graph/backend-png.js +3 -2
  14. package/dist/graph/backend-png.js.map +1 -1
  15. package/dist/graph/backend-svg.js +3 -2
  16. package/dist/graph/backend-svg.js.map +1 -1
  17. package/dist/graph/dot.d.ts +0 -2
  18. package/dist/graph/dot.js +0 -4
  19. package/dist/graph/dot.js.map +1 -1
  20. package/dist/graph/text.d.ts +12 -0
  21. package/dist/graph/text.js +21 -0
  22. package/dist/graph/text.js.map +1 -0
  23. package/dist/mermaid/backend-pdf.js +2 -1
  24. package/dist/mermaid/backend-pdf.js.map +1 -1
  25. package/dist/mermaid/backend-png.js +2 -1
  26. package/dist/mermaid/backend-png.js.map +1 -1
  27. package/dist/mermaid/backend-svg.js +2 -1
  28. package/dist/mermaid/backend-svg.js.map +1 -1
  29. package/dist/mermaid/class.js +3 -7
  30. package/dist/mermaid/class.js.map +1 -1
  31. package/dist/mermaid/common.d.ts +0 -10
  32. package/dist/mermaid/common.js +2 -16
  33. package/dist/mermaid/common.js.map +1 -1
  34. package/dist/mermaid/sequence-layout.js +1 -1
  35. package/dist/mermaid/sequence-layout.js.map +1 -1
  36. package/dist/mermaid/sequence.js +2 -1
  37. package/dist/mermaid/sequence.js.map +1 -1
  38. package/dist/mermaid/state.js +3 -1
  39. package/dist/mermaid/state.js.map +1 -1
  40. package/dist/mesh/backend-glb.d.ts +11 -3
  41. package/dist/mesh/backend-glb.js +36 -11
  42. package/dist/mesh/backend-glb.js.map +1 -1
  43. package/dist/mesh/backend-stl.d.ts +7 -0
  44. package/dist/mesh/backend-stl.js +19 -0
  45. package/dist/mesh/backend-stl.js.map +1 -0
  46. package/dist/mesh/cad-build.d.ts +69 -0
  47. package/dist/mesh/cad-build.js +195 -0
  48. package/dist/mesh/cad-build.js.map +1 -0
  49. package/dist/mesh/cad-builder.d.ts +56 -0
  50. package/dist/mesh/cad-builder.js +78 -0
  51. package/dist/mesh/cad-builder.js.map +1 -0
  52. package/dist/mesh/cad-document.d.ts +140 -0
  53. package/dist/mesh/cad-document.js +300 -0
  54. package/dist/mesh/cad-document.js.map +1 -0
  55. package/dist/mesh/index.d.ts +7 -1
  56. package/dist/mesh/index.js +5 -1
  57. package/dist/mesh/index.js.map +1 -1
  58. package/dist/mesh/stl.d.ts +10 -0
  59. package/dist/mesh/stl.js +49 -0
  60. package/dist/mesh/stl.js.map +1 -0
  61. package/dist/registry.js +7 -0
  62. package/dist/registry.js.map +1 -1
  63. package/dist/sysml/backend-pdf.d.ts +3 -0
  64. package/dist/sysml/backend-pdf.js +10 -0
  65. package/dist/sysml/backend-pdf.js.map +1 -0
  66. package/dist/sysml/backend-png.d.ts +6 -0
  67. package/dist/sysml/backend-png.js +19 -0
  68. package/dist/sysml/backend-png.js.map +1 -0
  69. package/dist/sysml/backend-svg.d.ts +3 -0
  70. package/dist/sysml/backend-svg.js +8 -0
  71. package/dist/sysml/backend-svg.js.map +1 -0
  72. package/dist/sysml/index.d.ts +8 -0
  73. package/dist/sysml/index.js +9 -0
  74. package/dist/sysml/index.js.map +1 -0
  75. package/dist/sysml/parse.d.ts +99 -0
  76. package/dist/sysml/parse.js +480 -0
  77. package/dist/sysml/parse.js.map +1 -0
  78. package/dist/sysml/render.d.ts +7 -0
  79. package/dist/sysml/render.js +11 -0
  80. package/dist/sysml/render.js.map +1 -0
  81. package/dist/sysml/tokens.d.ts +14 -0
  82. package/dist/sysml/tokens.js +93 -0
  83. package/dist/sysml/tokens.js.map +1 -0
  84. package/dist/sysml/views.d.ts +16 -0
  85. package/dist/sysml/views.js +156 -0
  86. package/dist/sysml/views.js.map +1 -0
  87. package/dist/version.d.ts +1 -1
  88. package/dist/version.js +1 -1
  89. package/dist/worker/protocol.d.ts +4 -0
  90. package/package.json +106 -101
@@ -0,0 +1,480 @@
1
+ import { inputError } from "../errors.js";
2
+ import { tokenize } from "./tokens.js";
3
+ /** The statements that each place allows. */
4
+ const ALLOWED = {
5
+ package: ["package"],
6
+ "part def": ["package"],
7
+ "port def": ["package"],
8
+ "interface def": ["package"],
9
+ "requirement def": ["package"],
10
+ requirement: ["package", "requirement"],
11
+ satisfy: ["package", "part def"],
12
+ part: ["part def"],
13
+ port: ["part def"],
14
+ interface: ["part def"],
15
+ connect: ["part def"],
16
+ attribute: ["part def", "port def", "interface def", "requirement"],
17
+ };
18
+ const KEYWORDS = new Set(["package", "part", "port", "interface", "requirement", "attribute", "connect", "satisfy"]);
19
+ /**
20
+ * Parses a source of the SysML subset of the design. A construct outside the subset rejects with E_INPUT and the line.
21
+ * With lenient, the parser skips a statement with an unknown keyword and records a warning. The names resolve after
22
+ * the parser reads the whole source.
23
+ */
24
+ export function parseSysml(source, lenient) {
25
+ return new Parser(tokenize(source), lenient).run();
26
+ }
27
+ class Parser {
28
+ tokens;
29
+ lenient;
30
+ pos = 0;
31
+ model = {
32
+ partDefs: [], portDefs: [], interfaceDefs: [], requirementDefs: [], requirements: [], satisfies: [], warnings: [],
33
+ };
34
+ names = new Map();
35
+ rawSatisfies = [];
36
+ constructor(tokens, lenient) {
37
+ this.tokens = tokens;
38
+ this.lenient = lenient;
39
+ }
40
+ run() {
41
+ this.members("package", undefined, undefined);
42
+ const m = this.model;
43
+ if (m.partDefs.length + m.portDefs.length + m.interfaceDefs.length + m.requirementDefs.length + m.requirements.length === 0) {
44
+ throw inputError(1, "the source holds no definition and no requirement");
45
+ }
46
+ new Resolver(m, this.names).resolve(this.rawSatisfies);
47
+ return m;
48
+ }
49
+ peek(offset = 0) {
50
+ return this.tokens[this.pos + offset];
51
+ }
52
+ lastLine() {
53
+ return this.tokens[this.tokens.length - 1]?.line ?? 1;
54
+ }
55
+ next(what) {
56
+ const token = this.tokens[this.pos];
57
+ if (token === undefined)
58
+ throw inputError(this.lastLine(), `expected ${what}, found the end of the source`);
59
+ this.pos += 1;
60
+ return token;
61
+ }
62
+ symbol(value) {
63
+ const token = this.next(`"${value}"`);
64
+ if (token.kind !== "symbol" || token.value !== value) {
65
+ throw inputError(token.line, `expected "${value}", found "${token.value}"`);
66
+ }
67
+ return token;
68
+ }
69
+ isSymbol(value, offset = 0) {
70
+ const token = this.peek(offset);
71
+ return token !== undefined && token.kind === "symbol" && token.value === value;
72
+ }
73
+ name(what = "a name") {
74
+ const token = this.next(what);
75
+ if (token.kind !== "name")
76
+ throw inputError(token.line, `expected ${what}, found "${token.value}"`);
77
+ return token.value;
78
+ }
79
+ isWord(value, offset = 0) {
80
+ const token = this.peek(offset);
81
+ return token !== undefined && token.kind === "name" && token.value === value;
82
+ }
83
+ /** Reads `name ("." name)*`. */
84
+ path() {
85
+ const parts = [this.name()];
86
+ while (this.isSymbol(".")) {
87
+ this.pos += 1;
88
+ parts.push(this.name());
89
+ }
90
+ return parts;
91
+ }
92
+ /** Reads members until `}` when `open` is a line, or until the end of the source. */
93
+ members(place, owner, open) {
94
+ for (;;) {
95
+ const token = this.peek();
96
+ if (token === undefined) {
97
+ if (open !== undefined)
98
+ throw inputError(open, "the block is not closed by }");
99
+ return;
100
+ }
101
+ if (open !== undefined && token.kind === "symbol" && token.value === "}") {
102
+ this.pos += 1;
103
+ return;
104
+ }
105
+ this.statement(place, owner);
106
+ }
107
+ }
108
+ /** Reads `;` or a block of members. */
109
+ bodyOrEnd(place, owner) {
110
+ if (this.isSymbol(";")) {
111
+ this.pos += 1;
112
+ return;
113
+ }
114
+ const open = this.symbol("{");
115
+ this.members(place, owner, open.line);
116
+ }
117
+ define(name, kind, line) {
118
+ if (this.names.has(name))
119
+ throw inputError(line, `${name} is defined twice`);
120
+ this.names.set(name, kind);
121
+ }
122
+ statement(place, owner) {
123
+ const token = this.peek();
124
+ if (token.kind !== "name")
125
+ throw inputError(token.line, `unexpected "${token.value}"`);
126
+ const line = token.line;
127
+ if (!KEYWORDS.has(token.value)) {
128
+ if (!this.lenient)
129
+ throw inputError(line, `the keyword "${token.value}" is outside the subset`);
130
+ this.skip(token);
131
+ return;
132
+ }
133
+ const isDef = this.isWord("def", 1) && token.value !== "attribute" && token.value !== "connect" && token.value !== "satisfy" && token.value !== "package";
134
+ const statement = isDef ? `${token.value} def` : token.value;
135
+ if (!ALLOWED[statement].includes(place)) {
136
+ throw inputError(line, `${statement} is not allowed in ${place === "package" ? "a package" : `a ${place}`}`);
137
+ }
138
+ this.pos += isDef ? 2 : 1;
139
+ switch (statement) {
140
+ case "package":
141
+ this.name();
142
+ this.members("package", undefined, this.symbol("{").line);
143
+ return;
144
+ case "part def":
145
+ return this.partDef(line);
146
+ case "port def":
147
+ case "interface def":
148
+ return this.plainDef(statement, line);
149
+ case "requirement def":
150
+ return this.requirementDef(line);
151
+ case "requirement":
152
+ return this.requirement(owner, line);
153
+ case "satisfy":
154
+ return this.satisfy(owner, line);
155
+ case "attribute":
156
+ return this.attribute(owner, line);
157
+ case "part":
158
+ return this.partUsage(owner, line);
159
+ case "port":
160
+ return this.portUsage(owner, line);
161
+ case "interface":
162
+ return this.interfaceUsage(owner, line);
163
+ default:
164
+ return this.connect(owner, line);
165
+ }
166
+ }
167
+ /** Skips an unknown statement to its `;` or to its closed block, and records a warning. */
168
+ skip(start) {
169
+ let depth = 0;
170
+ for (;;) {
171
+ const token = this.peek();
172
+ if (token === undefined || (depth === 0 && token.kind === "symbol" && token.value === "}")) {
173
+ throw inputError(start.line, `the statement "${start.value}" is not closed`);
174
+ }
175
+ this.pos += 1;
176
+ if (token.kind !== "symbol")
177
+ continue;
178
+ if (token.value === "{")
179
+ depth += 1;
180
+ else if (token.value === "}") {
181
+ depth -= 1;
182
+ if (depth === 0)
183
+ break;
184
+ }
185
+ else if (token.value === ";" && depth === 0)
186
+ break;
187
+ }
188
+ this.model.warnings.push(`line ${start.line}: skipped the unsupported statement "${start.value}"`);
189
+ }
190
+ base() {
191
+ if (!this.isSymbol(":>"))
192
+ return undefined;
193
+ this.pos += 1;
194
+ return this.name("a base name");
195
+ }
196
+ partDef(line) {
197
+ const name = this.name();
198
+ this.define(name, "part def", line);
199
+ const def = { name, base: this.base(), attributes: [], parts: [], ports: [], connections: [], line };
200
+ this.model.partDefs.push(def);
201
+ this.bodyOrEnd("part def", def);
202
+ }
203
+ plainDef(kind, line) {
204
+ const name = this.name();
205
+ this.define(name, kind, line);
206
+ const def = { name, attributes: [], line };
207
+ (kind === "port def" ? this.model.portDefs : this.model.interfaceDefs).push(def);
208
+ this.bodyOrEnd(kind, def);
209
+ }
210
+ requirementDef(line) {
211
+ const name = this.name();
212
+ this.define(name, "requirement def", line);
213
+ const def = { name, base: this.base(), attributes: [], children: [], line };
214
+ this.model.requirementDefs.push(def);
215
+ this.bodyOrEnd("requirement", def);
216
+ }
217
+ requirement(owner, line) {
218
+ const name = this.name();
219
+ let def;
220
+ if (this.isSymbol(":")) {
221
+ this.pos += 1;
222
+ def = this.name("a requirement def name");
223
+ }
224
+ const ownerAddress = owner === undefined ? undefined : "address" in owner ? owner.address : owner.name;
225
+ const usage = {
226
+ name, address: ownerAddress === undefined ? name : `${ownerAddress}.${name}`, def, attributes: [], children: [], line,
227
+ };
228
+ if (owner === undefined) {
229
+ this.define(name, "requirement", line);
230
+ this.model.requirements.push(usage);
231
+ }
232
+ else {
233
+ claimFeature(owner, name, line);
234
+ owner.children.push(usage);
235
+ }
236
+ this.bodyOrEnd("requirement", usage);
237
+ }
238
+ satisfy(owner, line) {
239
+ const requirement = this.path();
240
+ if (!this.isWord("by")) {
241
+ const token = this.peek();
242
+ throw inputError(token?.line ?? line, `expected "by", found ${token === undefined ? "the end of the source" : `"${token.value}"`}`);
243
+ }
244
+ this.pos += 1;
245
+ const path = this.path();
246
+ this.symbol(";");
247
+ this.rawSatisfies.push({ requirement, path, owner: owner?.name, line });
248
+ }
249
+ attribute(owner, line) {
250
+ const name = this.name();
251
+ claimFeature(owner, name, line);
252
+ let type;
253
+ let value;
254
+ if (this.isSymbol(":")) {
255
+ this.pos += 1;
256
+ type = this.name("a type name");
257
+ }
258
+ if (this.isSymbol("=")) {
259
+ this.pos += 1;
260
+ const literal = this.next("a literal");
261
+ if (literal.kind === "symbol")
262
+ throw inputError(literal.line, `expected a literal, found "${literal.value}"`);
263
+ value = literal.kind === "string" ? JSON.stringify(literal.value) : literal.value;
264
+ }
265
+ this.symbol(";");
266
+ owner.attributes.push({ name, type, value, line });
267
+ }
268
+ typed(what) {
269
+ this.symbol(":");
270
+ return this.name(what);
271
+ }
272
+ partUsage(owner, line) {
273
+ const name = this.name();
274
+ claimFeature(owner, name, line);
275
+ const type = this.typed("a part def name");
276
+ let multiplicity;
277
+ if (this.isSymbol("[")) {
278
+ this.pos += 1;
279
+ multiplicity = this.number();
280
+ if (this.isSymbol("..")) {
281
+ this.pos += 1;
282
+ multiplicity += `..${this.isSymbol("*") ? (this.pos += 1, "*") : this.number()}`;
283
+ }
284
+ this.symbol("]");
285
+ }
286
+ this.symbol(";");
287
+ owner.parts.push({ name, type, multiplicity, line });
288
+ }
289
+ number() {
290
+ const token = this.next("a number");
291
+ if (token.kind !== "number")
292
+ throw inputError(token.line, `expected a number, found "${token.value}"`);
293
+ return token.value;
294
+ }
295
+ portUsage(owner, line) {
296
+ const name = this.name();
297
+ claimFeature(owner, name, line);
298
+ const type = this.typed("a port def name");
299
+ this.symbol(";");
300
+ owner.ports.push({ name, type, line });
301
+ }
302
+ end() {
303
+ const first = this.name("a connection end");
304
+ if (!this.isSymbol("."))
305
+ return { part: undefined, port: first };
306
+ this.pos += 1;
307
+ return { part: first, port: this.name("a port name") };
308
+ }
309
+ ends() {
310
+ const from = this.end();
311
+ if (!this.isWord("to")) {
312
+ const token = this.peek();
313
+ throw inputError(token?.line ?? this.lastLine(), `expected "to", found ${token === undefined ? "the end of the source" : `"${token.value}"`}`);
314
+ }
315
+ this.pos += 1;
316
+ const to = this.end();
317
+ this.symbol(";");
318
+ return { from, to };
319
+ }
320
+ connect(owner, line) {
321
+ owner.connections.push({ name: undefined, def: undefined, ...this.ends(), line });
322
+ }
323
+ interfaceUsage(owner, line) {
324
+ const name = this.name();
325
+ const def = this.typed("an interface def name");
326
+ if (!this.isWord("connect")) {
327
+ const token = this.peek();
328
+ throw inputError(token?.line ?? line, `expected "connect", found ${token === undefined ? "the end of the source" : `"${token.value}"`}`);
329
+ }
330
+ this.pos += 1;
331
+ owner.connections.push({ name, def, ...this.ends(), line });
332
+ }
333
+ }
334
+ /** The feature names of each owner, so that a name inside one owner is defined once. */
335
+ const features = new WeakMap();
336
+ function claimFeature(owner, name, line) {
337
+ let set = features.get(owner);
338
+ if (set === undefined) {
339
+ set = new Set();
340
+ features.set(owner, set);
341
+ }
342
+ if (set.has(name))
343
+ throw inputError(line, `${name} is defined twice`);
344
+ set.add(name);
345
+ }
346
+ /** Checks every reference of a parsed model and resolves the satisfy paths. */
347
+ class Resolver {
348
+ model;
349
+ names;
350
+ partDefs = new Map();
351
+ requirementAddresses = new Set();
352
+ constructor(model, names) {
353
+ this.model = model;
354
+ this.names = names;
355
+ for (const def of model.partDefs)
356
+ this.partDefs.set(def.name, def);
357
+ const walk = (list) => {
358
+ for (const r of list) {
359
+ this.requirementAddresses.add(r.address);
360
+ walk(r.children);
361
+ }
362
+ };
363
+ for (const def of model.requirementDefs) {
364
+ this.requirementAddresses.add(def.name);
365
+ walk(def.children);
366
+ }
367
+ walk(model.requirements);
368
+ }
369
+ expect(name, kind, line) {
370
+ if (this.names.get(name) !== kind)
371
+ throw inputError(line, `${name} names no ${kind}`);
372
+ }
373
+ chain(def) {
374
+ return baseChain(this.model.partDefs, def);
375
+ }
376
+ partOf(def, name) {
377
+ for (const at of this.chain(def)) {
378
+ const found = at.parts.find((p) => p.name === name);
379
+ if (found !== undefined)
380
+ return found;
381
+ }
382
+ return undefined;
383
+ }
384
+ hasPort(def, name) {
385
+ return this.chain(def).some((at) => at.ports.some((p) => p.name === name));
386
+ }
387
+ resolve(raw) {
388
+ const m = this.model;
389
+ for (const def of m.partDefs) {
390
+ if (def.base !== undefined)
391
+ this.expect(def.base, "part def", def.line);
392
+ }
393
+ for (const def of m.requirementDefs) {
394
+ if (def.base !== undefined)
395
+ this.expect(def.base, "requirement def", def.line);
396
+ }
397
+ this.noCycle(m.partDefs);
398
+ this.noCycle(m.requirementDefs);
399
+ for (const def of m.partDefs) {
400
+ for (const part of def.parts)
401
+ this.expect(part.type, "part def", part.line);
402
+ for (const port of def.ports)
403
+ this.expect(port.type, "port def", port.line);
404
+ }
405
+ for (const def of m.partDefs) {
406
+ for (const c of def.connections) {
407
+ if (c.def !== undefined)
408
+ this.expect(c.def, "interface def", c.line);
409
+ this.end(def, c.from, c.line);
410
+ this.end(def, c.to, c.line);
411
+ }
412
+ }
413
+ const usages = (list) => {
414
+ for (const r of list) {
415
+ if (r.def !== undefined)
416
+ this.expect(r.def, "requirement def", r.line);
417
+ usages(r.children);
418
+ }
419
+ };
420
+ for (const def of m.requirementDefs)
421
+ usages(def.children);
422
+ usages(m.requirements);
423
+ for (const s of raw)
424
+ m.satisfies.push(this.satisfy(s));
425
+ }
426
+ noCycle(defs) {
427
+ for (const def of defs) {
428
+ const chain = baseChain(defs, def);
429
+ const last = chain[chain.length - 1];
430
+ if (chain.some((d) => d.name === last.base))
431
+ throw inputError(def.line, `the specialization of ${def.name} is a cycle`);
432
+ }
433
+ }
434
+ end(def, end, line) {
435
+ if (end.part === undefined) {
436
+ if (!this.hasPort(def, end.port))
437
+ throw inputError(line, `${end.port} names no port of ${def.name}`);
438
+ return;
439
+ }
440
+ const part = this.partOf(def, end.part);
441
+ if (part === undefined)
442
+ throw inputError(line, `${end.part} names no part of ${def.name}`);
443
+ if (!this.hasPort(this.partDefs.get(part.type), end.port)) {
444
+ throw inputError(line, `${end.port} names no port of ${end.part}`);
445
+ }
446
+ }
447
+ satisfy(raw) {
448
+ const requirement = raw.requirement.join(".");
449
+ if (!this.requirementAddresses.has(requirement))
450
+ throw inputError(raw.line, `${requirement} names no requirement`);
451
+ const [first, second, ...rest] = raw.path;
452
+ if (rest.length > 0)
453
+ throw inputError(raw.line, `the path ${raw.path.join(".")} has more than two names`);
454
+ if (second === undefined) {
455
+ const owner = raw.owner === undefined ? undefined : this.partDefs.get(raw.owner);
456
+ if (owner !== undefined && this.partOf(owner, first) !== undefined) {
457
+ return { requirement, path: `${owner.name}.${first}`, line: raw.line };
458
+ }
459
+ this.expect(first, "part def", raw.line);
460
+ return { requirement, path: first, line: raw.line };
461
+ }
462
+ this.expect(first, "part def", raw.line);
463
+ if (this.partOf(this.partDefs.get(first), second) === undefined) {
464
+ throw inputError(raw.line, `${second} names no part of ${first}`);
465
+ }
466
+ return { requirement, path: `${first}.${second}`, line: raw.line };
467
+ }
468
+ }
469
+ /**
470
+ * The chain of a definition and its bases, the definition first. The chain stops at a base that names no definition
471
+ * of the list. The chain also stops at a base that is already in the chain, so a cycle cannot loop.
472
+ */
473
+ export function baseChain(defs, def) {
474
+ const out = [];
475
+ for (let at = def; at !== undefined && !out.includes(at); at = defs.find((d) => d.name === at.base)) {
476
+ out.push(at);
477
+ }
478
+ return out;
479
+ }
480
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/sysml/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAc,MAAM,aAAa,CAAC;AA4GnD,6CAA6C;AAC7C,MAAM,OAAO,GAAqC;IAChD,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,UAAU,EAAE,CAAC,SAAS,CAAC;IACvB,UAAU,EAAE,CAAC,SAAS,CAAC;IACvB,eAAe,EAAE,CAAC,SAAS,CAAC;IAC5B,iBAAiB,EAAE,CAAC,SAAS,CAAC;IAC9B,WAAW,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;IACvC,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;IAChC,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,OAAO,EAAE,CAAC,UAAU,CAAC;IACrB,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,CAAC;CACpE,CAAC;AAEF,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAE1I;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,OAAgB;IACzD,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,MAAM;IAQmB,MAAM;IAA4B,OAAO;IAP9D,GAAG,GAAG,CAAC,CAAC;IACC,KAAK,GAAe;QACnC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;KAClH,CAAC;IACe,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IAChC,YAAY,GAAiB,EAAE,CAAC;IAEjD,YAA6B,MAAe,EAAmB,OAAgB;sBAAlD,MAAM;uBAA4B,OAAO;IAAY,CAAC;IAEnF,GAAG;QACD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5H,MAAM,UAAU,CAAC,CAAC,EAAE,mDAAmD,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,IAAI,CAAC,MAAM,GAAG,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;IACxC,CAAC;IAEO,QAAQ;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;IACxD,CAAC;IAEO,IAAI,CAAC,IAAY;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,IAAI,+BAA+B,CAAC,CAAC;QAC5G,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,KAAa;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACrD,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,KAAK,aAAa,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,QAAQ,CAAC,KAAa,EAAE,MAAM,GAAG,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;IACjF,CAAC;IAEO,IAAI,CAAC,IAAI,GAAG,QAAQ;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,IAAI,YAAY,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QACpG,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,KAAa,EAAE,MAAM,GAAG,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;IAC/E,CAAC;IAED,gCAAgC;IACxB,IAAI;QACV,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qFAAqF;IAC7E,OAAO,CAAC,KAAY,EAAE,KAAc,EAAE,IAAwB;QACpE,SAAS,CAAC;YACR,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,IAAI,KAAK,SAAS;oBAAE,MAAM,UAAU,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;gBAC/E,OAAO;YACT,CAAC;YACD,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBACzE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,uCAAuC;IAC/B,SAAS,CAAC,KAAY,EAAE,KAAc;QAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAEO,MAAM,CAAC,IAAY,EAAE,IAAU,EAAE,IAAY;QACnD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,mBAAmB,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEO,SAAS,CAAC,KAAY,EAAE,KAAc;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAG,CAAC;QAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QACvF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,MAAM,UAAU,CAAC,IAAI,EAAE,gBAAgB,KAAK,CAAC,KAAK,yBAAyB,CAAC,CAAC;YAChG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC;QAC1J,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,SAAS,sBAAsB,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,SAAS;gBACZ,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC1D,OAAO;YACT,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5B,KAAK,UAAU,CAAC;YAChB,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACxC,KAAK,iBAAiB;gBACpB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACnC,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,WAAW,CAAC,KAA0B,EAAE,IAAI,CAAC,CAAC;YAC5D,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,OAAO,CAAC,KAA4B,EAAE,IAAI,CAAC,CAAC;YAC1D,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,SAAS,CAAC,KAAc,EAAE,IAAI,CAAC,CAAC;YAC9C,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,SAAS,CAAC,KAAgB,EAAE,IAAI,CAAC,CAAC;YAChD,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,SAAS,CAAC,KAAgB,EAAE,IAAI,CAAC,CAAC;YAChD,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,cAAc,CAAC,KAAgB,EAAE,IAAI,CAAC,CAAC;YACrD;gBACE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAgB,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,2FAA2F;IACnF,IAAI,CAAC,KAAY;QACvB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,SAAS,CAAC;YACR,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC3F,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,KAAK,CAAC,KAAK,iBAAiB,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YACtC,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG;gBAAE,KAAK,IAAI,CAAC,CAAC;iBAC/B,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBAC7B,KAAK,IAAI,CAAC,CAAC;gBACX,IAAI,KAAK,KAAK,CAAC;oBAAE,MAAM;YACzB,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC;gBAAE,MAAM;QACvD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,wCAAwC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IACrG,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3C,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;IAEO,OAAO,CAAC,IAAY;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,GAAG,GAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAC9G,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAEO,QAAQ,CAAC,IAAkC,EAAE,IAAY;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAa,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACrD,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEO,cAAc,CAAC,IAAY;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAC5F,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAEO,WAAW,CAAC,KAAwB,EAAE,IAAY;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,GAAuB,CAAC;QAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACvG,MAAM,KAAK,GAAgB;YACzB,IAAI,EAAE,OAAO,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,IAAI,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI;SACtH,CAAC;QACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/B,KAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAEO,OAAO,CAAC,KAA0B,EAAE,IAAY;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,wBAAwB,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACtI,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAEO,SAAS,CAAC,KAAY,EAAE,IAAY;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,IAAwB,CAAC;QAC7B,IAAI,KAAyB,CAAC;QAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,8BAA8B,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;YAC9G,KAAK,GAAG,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,IAAY;QACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEO,SAAS,CAAC,KAAc,EAAE,IAAY;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC3C,IAAI,YAAgC,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACd,YAAY,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACnF,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAEO,MAAM;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,6BAA6B,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QACvG,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAEO,SAAS,CAAC,KAAc,EAAE,IAAY;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAEO,GAAG;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACjE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;IACzD,CAAC;IAEO,IAAI;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,wBAAwB,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACjJ,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACtB,CAAC;IAEO,OAAO,CAAC,KAAc,EAAE,IAAY;QAC1C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IAEO,cAAc,CAAC,KAAc,EAAE,IAAY;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,6BAA6B,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAC3I,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF;AAID,wFAAwF;AACxF,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAuB,CAAC;AAEpD,SAAS,YAAY,CAAC,KAAa,EAAE,IAAY,EAAE,IAAY;IAC7D,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QAChB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,mBAAmB,CAAC,CAAC;IACtE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,MAAM,QAAQ;IAIiB,KAAK;IAA+B,KAAK;IAHrD,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtC,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1D,YAA6B,KAAiB,EAAmB,KAAwB;qBAA5D,KAAK;qBAA+B,KAAK;QACpE,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,CAAC,IAAmB,EAAQ,EAAE;YACzC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;IAEO,MAAM,CAAC,IAAY,EAAE,IAAU,EAAE,IAAY;QACnD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,aAAa,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IAEO,KAAK,CAAC,GAAY;QACxB,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAEO,MAAM,CAAC,GAAY,EAAE,IAAY;QACvC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACpD,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;QACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,OAAO,CAAC,GAAY,EAAE,IAAY;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,CAAC,GAAiB;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5E,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBAChC,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS;oBAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBACrE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,IAAmB,EAAQ,EAAE;YAC3C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS;oBAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBACvE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,eAAe;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,GAAG;YAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAEO,OAAO,CAAC,IAA8B;QAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;YACtC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,yBAAyB,GAAG,CAAC,IAAI,aAAa,CAAC,CAAC;QAC1H,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,GAAY,EAAE,GAAQ,EAAE,IAAY;QAC9C,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;gBAAE,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,qBAAqB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACrG,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,qBAAqB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,qBAAqB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,GAAe;QAC7B,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC;YAAE,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,WAAW,uBAAuB,CAAC,CAAC;QACnH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;QAC1C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAC1G,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjF,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAM,CAAC,KAAK,SAAS,EAAE,CAAC;gBACpE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;YACzE,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,KAAM,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1C,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,KAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAM,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAM,CAAE,EAAE,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YAClE,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,qBAAqB,KAAK,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACrE,CAAC;CACF;AASD;;;GAGG;AACH,MAAM,UAAU,SAAS,CAA0B,IAAkB,EAAE,GAAM;IAC3E,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,KAAK,IAAI,EAAE,GAAkB,GAAG,EAAE,EAAE,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACpH,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** The SVG text and the warnings of one SysML render. */
2
+ export interface SysmlSvg {
3
+ svg: string;
4
+ warnings: string[];
5
+ }
6
+ /** Renders one SysML source to SVG: the parser, the selected view to DOT, then the graph stage. */
7
+ export declare function renderSysmlSvg(source: string, options: Record<string, unknown>): Promise<SysmlSvg>;
@@ -0,0 +1,11 @@
1
+ import { dotToSvg } from "../graph/dot.js";
2
+ import { parseSysml } from "./parse.js";
3
+ import { readSysmlOptions, sysmlToDot } from "./views.js";
4
+ /** Renders one SysML source to SVG: the parser, the selected view to DOT, then the graph stage. */
5
+ export async function renderSysmlSvg(source, options) {
6
+ const opts = readSysmlOptions(options);
7
+ const model = parseSysml(source, opts.lenient);
8
+ const dot = await dotToSvg(sysmlToDot(model, opts));
9
+ return { svg: dot.svg, warnings: [...model.warnings, ...dot.warnings] };
10
+ }
11
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/sysml/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ1D,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,OAAgC;IACnF,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACpD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** The kind of a SysML token. */
2
+ export type TokenKind = "name" | "number" | "string" | "symbol";
3
+ /** One token of a SysML source, with its one-based line and column. A string token holds its text without quotes. */
4
+ export interface Token {
5
+ readonly kind: TokenKind;
6
+ readonly value: string;
7
+ readonly line: number;
8
+ readonly column: number;
9
+ }
10
+ /**
11
+ * Splits a SysML source into tokens. The function skips comments and white space. An unclosed comment, an unclosed string
12
+ * and a character outside the token set reject with E_INPUT and the line.
13
+ */
14
+ export declare function tokenize(source: string): Token[];
@@ -0,0 +1,93 @@
1
+ import { inputError } from "../errors.js";
2
+ /** The symbols of the subset, longest first, so that `:>`, `::` and `..` are one token each. */
3
+ const SYMBOLS = [":>", "::", "..", "{", "}", ";", ":", "[", "]", ".", "=", "*"];
4
+ const NAME = /[A-Za-z_][A-Za-z0-9_]*/y;
5
+ const NUMBER = /[0-9]+(?:\.[0-9]+)?/y;
6
+ /**
7
+ * Splits a SysML source into tokens. The function skips comments and white space. An unclosed comment, an unclosed string
8
+ * and a character outside the token set reject with E_INPUT and the line.
9
+ */
10
+ export function tokenize(source) {
11
+ const tokens = [];
12
+ let at = 0;
13
+ let line = 1;
14
+ let lineStart = 0;
15
+ while (at < source.length) {
16
+ const ch = source[at];
17
+ if (ch === "\n") {
18
+ at += 1;
19
+ line += 1;
20
+ lineStart = at;
21
+ continue;
22
+ }
23
+ if (ch === " " || ch === "\t" || ch === "\r") {
24
+ at += 1;
25
+ continue;
26
+ }
27
+ if (source.startsWith("//", at)) {
28
+ const end = source.indexOf("\n", at);
29
+ at = end < 0 ? source.length : end;
30
+ continue;
31
+ }
32
+ if (source.startsWith("/*", at)) {
33
+ const end = source.indexOf("*/", at + 2);
34
+ if (end < 0)
35
+ throw inputError(line, "the comment is not closed by */");
36
+ for (let k = at; k < end; k += 1) {
37
+ if (source[k] === "\n") {
38
+ line += 1;
39
+ lineStart = k + 1;
40
+ }
41
+ }
42
+ at = end + 2;
43
+ continue;
44
+ }
45
+ const column = at - lineStart + 1;
46
+ if (ch === '"') {
47
+ let text = "";
48
+ let k = at + 1;
49
+ for (;;) {
50
+ const c = source[k];
51
+ if (c === undefined || c === "\n")
52
+ throw inputError(line, "the string is not closed by a double quote");
53
+ if (c === '"')
54
+ break;
55
+ if (c === "\\" && (source[k + 1] === '"' || source[k + 1] === "\\")) {
56
+ text += source[k + 1];
57
+ k += 2;
58
+ continue;
59
+ }
60
+ text += c;
61
+ k += 1;
62
+ }
63
+ tokens.push({ kind: "string", value: text, line, column });
64
+ at = k + 1;
65
+ continue;
66
+ }
67
+ const word = match(NAME, source, at);
68
+ if (word !== undefined) {
69
+ tokens.push({ kind: "name", value: word, line, column });
70
+ at += word.length;
71
+ continue;
72
+ }
73
+ const number = match(NUMBER, source, at);
74
+ if (number !== undefined) {
75
+ tokens.push({ kind: "number", value: number, line, column });
76
+ at += number.length;
77
+ continue;
78
+ }
79
+ const symbol = SYMBOLS.find((s) => source.startsWith(s, at));
80
+ if (symbol === undefined) {
81
+ throw inputError(line, `the character "${String.fromCodePoint(source.codePointAt(at))}" is outside the subset`);
82
+ }
83
+ tokens.push({ kind: "symbol", value: symbol, line, column });
84
+ at += symbol.length;
85
+ }
86
+ return tokens;
87
+ }
88
+ /** The text of a sticky pattern at a position, or undefined. */
89
+ function match(pattern, source, at) {
90
+ pattern.lastIndex = at;
91
+ return pattern.exec(source)?.[0];
92
+ }
93
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/sysml/tokens.ts"],"names":[],"mappings":"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"}