@microsoft/webui 0.0.18 → 0.0.20

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 (39) hide show
  1. package/README.md +136 -16
  2. package/bin/webui +0 -0
  3. package/dist/index.d.ts +113 -30
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +135 -75
  6. package/dist/index.js.map +1 -1
  7. package/dist/projection/adapters/esbuild.d.ts +14 -0
  8. package/dist/projection/adapters/esbuild.d.ts.map +1 -0
  9. package/dist/projection/adapters/esbuild.js +501 -0
  10. package/dist/projection/adapters/esbuild.js.map +1 -0
  11. package/dist/projection/compiler.d.ts +12 -0
  12. package/dist/projection/compiler.d.ts.map +1 -0
  13. package/dist/projection/compiler.js +1216 -0
  14. package/dist/projection/compiler.js.map +1 -0
  15. package/dist/projection/diagnostics.d.ts +153 -0
  16. package/dist/projection/diagnostics.d.ts.map +1 -0
  17. package/dist/projection/diagnostics.js +210 -0
  18. package/dist/projection/diagnostics.js.map +1 -0
  19. package/dist/projection/fixtures/conformance.d.ts +40 -0
  20. package/dist/projection/fixtures/conformance.d.ts.map +1 -0
  21. package/dist/projection/fixtures/conformance.js +602 -0
  22. package/dist/projection/fixtures/conformance.js.map +1 -0
  23. package/dist/projection/graph.d.ts +158 -0
  24. package/dist/projection/graph.d.ts.map +1 -0
  25. package/dist/projection/graph.js +4 -0
  26. package/dist/projection/graph.js.map +1 -0
  27. package/dist/projection/index.d.ts +37 -0
  28. package/dist/projection/index.d.ts.map +1 -0
  29. package/dist/projection/index.js +17 -0
  30. package/dist/projection/index.js.map +1 -0
  31. package/dist/projection/loader.d.ts +10 -0
  32. package/dist/projection/loader.d.ts.map +1 -0
  33. package/dist/projection/loader.js +45 -0
  34. package/dist/projection/loader.js.map +1 -0
  35. package/dist/projection/manifest.d.ts +119 -0
  36. package/dist/projection/manifest.d.ts.map +1 -0
  37. package/dist/projection/manifest.js +396 -0
  38. package/dist/projection/manifest.js.map +1 -0
  39. package/package.json +31 -9
@@ -0,0 +1,396 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * Versioned deterministic JSON manifest schema for WebUI state projection.
5
+ *
6
+ * See DESIGN.md §"Bundler-Neutral State Projection Compiler" for the
7
+ * authoritative cross-language contract.
8
+ */
9
+ import { createHash } from "node:crypto";
10
+ /** The only valid schema string for this version. */
11
+ export const MANIFEST_SCHEMA = "webui.state-projection/v1";
12
+ /** Sentinel hash value for virtual modules/outputs with no physical bytes. */
13
+ export const VIRTUAL_HASH = "virtual";
14
+ /** Computes `"sha256:<64 lowercase hex>"` over exact UTF-8/byte content. */
15
+ export function hashContent(content) {
16
+ const hash = createHash("sha256");
17
+ if (typeof content === "string")
18
+ hash.update(content, "utf8");
19
+ else
20
+ hash.update(content);
21
+ return `sha256:${hash.digest("hex")}`;
22
+ }
23
+ /** Cross-language lexical ordering: raw UTF-8 bytes, ascending. */
24
+ export function compareUtf8(left, right) {
25
+ return Buffer.compare(Buffer.from(left, "utf8"), Buffer.from(right, "utf8"));
26
+ }
27
+ /**
28
+ * Computes the deterministic manifest `buildId`.
29
+ *
30
+ * Each canonical record is encoded as a record label followed by
31
+ * `<utf8-byte-length>:<value>` fields and one LF. Length-prefixing avoids
32
+ * delimiter ambiguity for paths and Unicode identifiers.
33
+ */
34
+ export function computeBuildId(params) {
35
+ const records = [];
36
+ appendRecord(records, "schema", [MANIFEST_SCHEMA]);
37
+ appendRecord(records, "producer", [
38
+ params.producerName,
39
+ params.producerVersion,
40
+ ]);
41
+ appendRecord(records, "adapter", [
42
+ params.adapterName,
43
+ params.adapterBundler,
44
+ ]);
45
+ appendRecord(records, "root", [params.root]);
46
+ appendRecord(records, "analysis", [params.analysisHash]);
47
+ appendRecord(records, "inputs", [String(params.sortedInputs.length)]);
48
+ for (const [path, hash] of params.sortedInputs) {
49
+ appendRecord(records, "input", [path, hash]);
50
+ }
51
+ appendRecord(records, "outputs", [String(params.sortedOutputs.length)]);
52
+ for (const [path, hash] of params.sortedOutputs) {
53
+ appendRecord(records, "output", [path, hash]);
54
+ }
55
+ appendRecord(records, "components", [
56
+ String(params.sortedComponents.length),
57
+ ]);
58
+ for (const [tag, module, outputs, hydrationKeys, navigationKeys,] of params.sortedComponents) {
59
+ appendRecord(records, "component", [
60
+ tag,
61
+ module,
62
+ String(outputs.length),
63
+ ...outputs,
64
+ String(hydrationKeys.length),
65
+ ...hydrationKeys,
66
+ String(navigationKeys.length),
67
+ ...navigationKeys,
68
+ ]);
69
+ }
70
+ const entryClosures = params.sortedEntryClosures ?? [];
71
+ if (entryClosures.length > 0) {
72
+ appendRecord(records, "entryClosures", [String(entryClosures.length)]);
73
+ for (const [entry, closure] of entryClosures) {
74
+ appendRecord(records, "entryClosure", [
75
+ entry,
76
+ String(closure.length),
77
+ ...closure,
78
+ ]);
79
+ }
80
+ }
81
+ return hashContent(records.join(""));
82
+ }
83
+ function appendRecord(destination, label, fields) {
84
+ let record = label;
85
+ for (const field of fields) {
86
+ record += `${Buffer.byteLength(field, "utf8")}:${field}`;
87
+ }
88
+ destination.push(`${record}\n`);
89
+ }
90
+ /** Serializes a manifest to its canonical compact JSON form. */
91
+ export function serializeManifestCanonical(manifest) {
92
+ const inputs = sortRecord(manifest.inputs);
93
+ const outputs = sortRecord(manifest.outputs);
94
+ const components = {};
95
+ for (const tag of Object.keys(manifest.components).sort(compareUtf8)) {
96
+ const entry = manifest.components[tag];
97
+ components[tag] = {
98
+ module: entry.module,
99
+ outputs: [...entry.outputs].sort(compareUtf8),
100
+ hydrationKeys: [...entry.hydrationKeys].sort(compareUtf8),
101
+ navigationKeys: [...entry.navigationKeys].sort(compareUtf8),
102
+ };
103
+ }
104
+ const entryClosures = manifest.entryClosures ?? {};
105
+ const entryClosureKeys = Object.keys(entryClosures).sort(compareUtf8);
106
+ const sortedEntryClosures = {};
107
+ for (const entry of entryClosureKeys) {
108
+ sortedEntryClosures[entry] = entryClosures[entry];
109
+ }
110
+ return JSON.stringify({
111
+ schema: manifest.schema,
112
+ producer: manifest.producer,
113
+ adapter: manifest.adapter,
114
+ root: manifest.root,
115
+ analysisHash: manifest.analysisHash,
116
+ buildId: manifest.buildId,
117
+ outputs,
118
+ inputs,
119
+ components,
120
+ // Omitted when empty so the JSON matches a pre-`entryClosures` manifest
121
+ // byte for byte, exactly like the Rust `skip_serializing_if`.
122
+ ...(entryClosureKeys.length > 0
123
+ ? { entryClosures: sortedEntryClosures }
124
+ : {}),
125
+ });
126
+ }
127
+ function sortRecord(value) {
128
+ const result = {};
129
+ for (const key of Object.keys(value).sort(compareUtf8)) {
130
+ result[key] = value[key];
131
+ }
132
+ return result;
133
+ }
134
+ /**
135
+ * Validates a parsed manifest's structural and canonical invariants.
136
+ *
137
+ * Stale file validation is intentionally performed by the consuming host.
138
+ */
139
+ export function validateManifestSchema(value) {
140
+ const errors = new Set();
141
+ if (!isRecord(value))
142
+ return ["PROJ-M008"];
143
+ rejectUnknownKeys(value, [
144
+ "schema",
145
+ "producer",
146
+ "adapter",
147
+ "root",
148
+ "analysisHash",
149
+ "buildId",
150
+ "outputs",
151
+ "inputs",
152
+ "components",
153
+ "entryClosures",
154
+ ], errors);
155
+ if (value["schema"] !== MANIFEST_SCHEMA)
156
+ errors.add("PROJ-M002");
157
+ if (!isProducerInfo(value["producer"]))
158
+ errors.add("PROJ-M009");
159
+ if (!isAdapterInfo(value["adapter"]))
160
+ errors.add("PROJ-M009");
161
+ if (typeof value["root"] !== "string" ||
162
+ !isCanonicalRoot(value["root"])) {
163
+ errors.add("PROJ-S003");
164
+ }
165
+ if (!isSha256(value["analysisHash"]) || !isSha256(value["buildId"])) {
166
+ errors.add("PROJ-S004");
167
+ }
168
+ const inputs = validateHashRecord(value["inputs"], errors);
169
+ const outputs = validateHashRecord(value["outputs"], errors);
170
+ validateComponents(value["components"], inputs, outputs, errors);
171
+ validateEntryClosures(value["entryClosures"], outputs, errors);
172
+ return [...errors];
173
+ }
174
+ /**
175
+ * Validates per-entry closures against declared outputs.
176
+ *
177
+ * Closure member order is meaningful (largest-first), so members are checked
178
+ * for uniqueness and membership but deliberately not for sortedness.
179
+ */
180
+ function validateEntryClosures(value, outputs, errors) {
181
+ if (value === undefined)
182
+ return;
183
+ if (!isRecord(value)) {
184
+ errors.add("PROJ-M009");
185
+ return;
186
+ }
187
+ const entries = Object.keys(value);
188
+ if (entries.length === 0 || !isSortedUnique(entries))
189
+ errors.add("PROJ-M009");
190
+ for (const [entry, closure] of Object.entries(value)) {
191
+ if (outputs?.[entry] === undefined || !isStringArray(closure)) {
192
+ errors.add("PROJ-M009");
193
+ continue;
194
+ }
195
+ const seen = new Set();
196
+ for (const member of closure) {
197
+ if (member === entry ||
198
+ outputs[member] === undefined ||
199
+ seen.has(member)) {
200
+ errors.add("PROJ-M009");
201
+ }
202
+ seen.add(member);
203
+ }
204
+ }
205
+ }
206
+ function validateHashRecord(value, errors) {
207
+ if (!isRecord(value)) {
208
+ errors.add("PROJ-M009");
209
+ return undefined;
210
+ }
211
+ const keys = Object.keys(value);
212
+ if (!isSortedUnique(keys))
213
+ errors.add("PROJ-M009");
214
+ for (const [path, hash] of Object.entries(value)) {
215
+ if (typeof hash !== "string" || !isHash(hash)) {
216
+ errors.add("PROJ-S004");
217
+ continue;
218
+ }
219
+ const virtual = isVirtualPath(path);
220
+ if (!virtual && !isCanonicalFilePath(path))
221
+ errors.add("PROJ-S003");
222
+ if ((virtual && hash !== VIRTUAL_HASH) ||
223
+ (!virtual && hash === VIRTUAL_HASH)) {
224
+ errors.add("PROJ-S004");
225
+ }
226
+ }
227
+ return value;
228
+ }
229
+ function validateComponents(value, inputs, outputs, errors) {
230
+ if (!isRecord(value)) {
231
+ errors.add("PROJ-M009");
232
+ return;
233
+ }
234
+ const tags = Object.keys(value);
235
+ if (tags.length > 65_535)
236
+ errors.add("PROJ-S002");
237
+ if (!isSortedUnique(tags))
238
+ errors.add("PROJ-M009");
239
+ for (const [tag, rawEntry] of Object.entries(value)) {
240
+ if (!isComponentTag(tag) || !isRecord(rawEntry)) {
241
+ errors.add("PROJ-M009");
242
+ continue;
243
+ }
244
+ rejectUnknownKeys(rawEntry, ["module", "outputs", "hydrationKeys", "navigationKeys"], errors);
245
+ const module = rawEntry["module"];
246
+ const componentOutputs = rawEntry["outputs"];
247
+ const hydrationKeys = rawEntry["hydrationKeys"];
248
+ const navigationKeys = rawEntry["navigationKeys"];
249
+ if (typeof module !== "string" ||
250
+ !isCanonicalFilePath(module) ||
251
+ inputs?.[module] === undefined ||
252
+ inputs[module] === VIRTUAL_HASH) {
253
+ errors.add("PROJ-M009");
254
+ }
255
+ if (!isStringArray(componentOutputs) ||
256
+ componentOutputs.length === 0 ||
257
+ !isSortedUnique(componentOutputs)) {
258
+ errors.add("PROJ-M009");
259
+ }
260
+ else {
261
+ for (const output of componentOutputs) {
262
+ if (outputs?.[output] === undefined)
263
+ errors.add("PROJ-M009");
264
+ }
265
+ }
266
+ if (!isStringArray(hydrationKeys) ||
267
+ !isSortedUnique(hydrationKeys) ||
268
+ !isStringArray(navigationKeys) ||
269
+ !isSortedUnique(navigationKeys)) {
270
+ errors.add("PROJ-M009");
271
+ }
272
+ else if (hydrationKeys.some((key) => key.length === 0 || hasControlCharacter(key)) ||
273
+ navigationKeys.some((key) => key.length === 0 || hasControlCharacter(key)) ||
274
+ hydrationKeys.some((key) => binarySearch(navigationKeys, key) === false)) {
275
+ errors.add("PROJ-M009");
276
+ }
277
+ }
278
+ }
279
+ function rejectUnknownKeys(value, allowed, errors) {
280
+ const allowedSet = new Set(allowed);
281
+ if (Object.keys(value).some((key) => !allowedSet.has(key))) {
282
+ errors.add("PROJ-M009");
283
+ }
284
+ }
285
+ function isProducerInfo(value) {
286
+ if (!isRecord(value))
287
+ return false;
288
+ const keys = Object.keys(value);
289
+ return (keys.length === 2 &&
290
+ keys.includes("name") &&
291
+ keys.includes("version") &&
292
+ value["name"] === "@microsoft/webui/projection.js" &&
293
+ typeof value["version"] === "string" &&
294
+ value["version"].length > 0);
295
+ }
296
+ function isAdapterInfo(value) {
297
+ if (!isRecord(value))
298
+ return false;
299
+ const keys = Object.keys(value);
300
+ return (keys.length === 2 &&
301
+ keys.includes("name") &&
302
+ keys.includes("bundler") &&
303
+ typeof value["name"] === "string" &&
304
+ value["name"].length > 0 &&
305
+ typeof value["bundler"] === "string" &&
306
+ value["bundler"].length > 0);
307
+ }
308
+ function isRecord(value) {
309
+ return typeof value === "object" && value !== null && !Array.isArray(value);
310
+ }
311
+ function isStringArray(value) {
312
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string");
313
+ }
314
+ function isHash(value) {
315
+ return value === VIRTUAL_HASH || isSha256(value);
316
+ }
317
+ function isSha256(value) {
318
+ if (typeof value !== "string" || value.length !== 71)
319
+ return false;
320
+ if (!value.startsWith("sha256:"))
321
+ return false;
322
+ for (let index = 7; index < value.length; index++) {
323
+ const code = value.charCodeAt(index);
324
+ const digit = code >= 48 && code <= 57;
325
+ const lowerHex = code >= 97 && code <= 102;
326
+ if (!digit && !lowerHex)
327
+ return false;
328
+ }
329
+ return true;
330
+ }
331
+ function isCanonicalRoot(value) {
332
+ if (value === ".")
333
+ return true;
334
+ const segments = value.split("/");
335
+ return segments.length <= 32 && segments.every((segment) => segment === "..");
336
+ }
337
+ function isVirtualPath(value) {
338
+ return value.startsWith("virtual:");
339
+ }
340
+ function isCanonicalFilePath(value) {
341
+ if (value.length === 0 ||
342
+ value.startsWith("/") ||
343
+ value.startsWith("./") ||
344
+ value.includes("\\") ||
345
+ hasControlCharacter(value)) {
346
+ return false;
347
+ }
348
+ const segments = value.split("/");
349
+ return segments.every((segment) => segment.length > 0 && segment !== "." && segment !== "..");
350
+ }
351
+ function isComponentTag(value) {
352
+ if (value.length < 3 || !value.includes("-"))
353
+ return false;
354
+ for (let index = 0; index < value.length; index++) {
355
+ const code = value.charCodeAt(index);
356
+ const valid = (code >= 97 && code <= 122) ||
357
+ (code >= 48 && code <= 57) ||
358
+ code === 45 ||
359
+ code === 46 ||
360
+ code === 95;
361
+ if (!valid)
362
+ return false;
363
+ }
364
+ return value.charCodeAt(0) >= 97 && value.charCodeAt(0) <= 122;
365
+ }
366
+ function isSortedUnique(values) {
367
+ for (let index = 1; index < values.length; index++) {
368
+ if (compareUtf8(values[index - 1], values[index]) >= 0)
369
+ return false;
370
+ }
371
+ return true;
372
+ }
373
+ function binarySearch(values, target) {
374
+ let low = 0;
375
+ let high = values.length;
376
+ while (low < high) {
377
+ const middle = low + ((high - low) >> 1);
378
+ const order = compareUtf8(values[middle], target);
379
+ if (order === 0)
380
+ return true;
381
+ if (order < 0)
382
+ low = middle + 1;
383
+ else
384
+ high = middle;
385
+ }
386
+ return false;
387
+ }
388
+ function hasControlCharacter(value) {
389
+ for (let index = 0; index < value.length; index++) {
390
+ const code = value.charCodeAt(index);
391
+ if (code <= 31 || code === 127)
392
+ return true;
393
+ }
394
+ return false;
395
+ }
396
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/projection/manifest.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,qDAAqD;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,2BAAoC,CAAC;AAGpE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG,SAAkB,CAAC;AAK/C,4EAA4E;AAC5E,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;;QACzD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAa;IACrD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,MA6B9B;IACC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IACnD,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE;QAChC,MAAM,CAAC,YAAY;QACnB,MAAM,CAAC,eAAe;KACvB,CAAC,CAAC;IACH,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE;QAC/B,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,cAAc;KACtB,CAAC,CAAC;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACzD,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAC/C,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QAChD,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE;QAClC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC;KACvC,CAAC,CAAC;IACH,KAAK,MAAM,CACT,GAAG,EACH,MAAM,EACN,OAAO,EACP,aAAa,EACb,cAAc,EACf,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC7B,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE;YACjC,GAAG;YACH,MAAM;YACN,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACtB,GAAG,OAAO;YACV,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;YAC5B,GAAG,aAAa;YAChB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;YAC7B,GAAG,cAAc;SAClB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC;IACvD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvE,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,aAAa,EAAE,CAAC;YAC7C,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE;gBACpC,KAAK;gBACL,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;gBACtB,GAAG,OAAO;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,YAAY,CACnB,WAAqB,EACrB,KAAa,EACb,MAA6B;IAE7B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;IAC3D,CAAC;IACD,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,0BAA0B,CACxC,QAA4B;IAE5B,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAmC,EAAE,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAE,CAAC;QACxC,UAAU,CAAC,GAAG,CAAC,GAAG;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;YAC7C,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;YACzD,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;SAC5D,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC;IACnD,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtE,MAAM,mBAAmB,GAA0C,EAAE,CAAC;IACtE,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,mBAAmB,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAE,CAAC;IACrD,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,OAAO;QACP,MAAM;QACN,UAAU;QACV,wEAAwE;QACxE,8DAA8D;QAC9D,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAC7B,CAAC,CAAC,EAAE,aAAa,EAAE,mBAAmB,EAAE;YACxC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CACjB,KAAuC;IAEvC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAE,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAiFD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,iBAAiB,CACf,KAAK,EACL;QACE,QAAQ;QACR,UAAU;QACV,SAAS;QACT,MAAM;QACN,cAAc;QACd,SAAS;QACT,SAAS;QACT,QAAQ;QACR,YAAY;QACZ,eAAe;KAChB,EACD,MAAM,CACP,CAAC;IAEF,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,eAAe;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACjE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAChE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9D,IACE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ;QACjC,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAC/B,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACjE,qBAAqB,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAC5B,KAAc,EACd,OAAqD,EACrD,MAAmB;IAEnB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9E,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,IAAI,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IACE,MAAM,KAAK,KAAK;gBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS;gBAC7B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAChB,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc,EACd,MAAmB;IAEnB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACpE,IACE,CAAC,OAAO,IAAI,IAAI,KAAK,YAAY,CAAC;YAClC,CAAC,CAAC,OAAO,IAAI,IAAI,KAAK,YAAY,CAAC,EACnC,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,KAAyC,CAAC;AACnD,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc,EACd,MAAoD,EACpD,OAAqD,EACrD,MAAmB;IAEnB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEnD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,iBAAiB,CACf,QAAQ,EACR,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,CAAC,EACxD,MAAM,CACP,CAAC;QACF,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAClD,IACE,OAAO,MAAM,KAAK,QAAQ;YAC1B,CAAC,mBAAmB,CAAC,MAAM,CAAC;YAC5B,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,SAAS;YAC9B,MAAM,CAAC,MAAM,CAAC,KAAK,YAAY,EAC/B,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;QACD,IACE,CAAC,aAAa,CAAC,gBAAgB,CAAC;YAChC,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAC7B,CAAC,cAAc,CAAC,gBAAgB,CAAC,EACjC,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;gBACtC,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,SAAS;oBAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QACD,IACE,CAAC,aAAa,CAAC,aAAa,CAAC;YAC7B,CAAC,cAAc,CAAC,aAAa,CAAC;YAC9B,CAAC,aAAa,CAAC,cAAc,CAAC;YAC9B,CAAC,cAAc,CAAC,cAAc,CAAC,EAC/B,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;aAAM,IACL,aAAa,CAAC,IAAI,CAChB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,CACtD;YACD,cAAc,CAAC,IAAI,CACjB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,CACtD;YACD,aAAa,CAAC,IAAI,CAChB,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,KAAK,KAAK,CACrD,EACD,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAwC,EACxC,OAA8B,EAC9B,MAAmB;IAEnB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,CACL,IAAI,CAAC,MAAM,KAAK,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,KAAK,gCAAgC;QAClD,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ;QACpC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,CACL,IAAI,CAAC,MAAM,KAAK,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ;QACjC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;QACxB,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ;QACpC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,KAAK,KAAK,YAAY,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACnE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC;QAC3C,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,QAAQ,CAAC,MAAM,IAAI,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,IACE,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,mBAAmB,CAAC,KAAK,CAAC,EAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,QAAQ,CAAC,KAAK,CACnB,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CACvE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,KAAK,GACT,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC;YAC3B,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;YAC1B,IAAI,KAAK,EAAE;YACX,IAAI,KAAK,EAAE;YACX,IAAI,KAAK,EAAE,CAAC;QACd,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AACjE,CAAC;AAED,SAAS,cAAc,CAAC,MAA6B;IACnD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACnD,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAE,EAAE,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CACnB,MAA6B,EAC7B,MAAc;IAEd,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAE,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7B,IAAI,KAAK,GAAG,CAAC;YAAE,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;;YAC3B,IAAI,GAAG,MAAM,CAAC;IACrB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@microsoft/webui",
3
3
  "description": "WebUI — high-performance server-side rendering framework. Build-time protocol compiler and streaming renderer.",
4
4
  "license": "MIT",
5
- "version": "0.0.18",
5
+ "version": "0.0.20",
6
6
  "type": "module",
7
7
  "repository": {
8
8
  "type": "git",
@@ -13,7 +13,10 @@
13
13
  },
14
14
  "files": [
15
15
  "bin/",
16
- "dist/",
16
+ "dist/index.*",
17
+ "dist/install.*",
18
+ "dist/platform.*",
19
+ "dist/projection/",
17
20
  "wasm/"
18
21
  ],
19
22
  "engines": {
@@ -31,24 +34,43 @@
31
34
  "types": "./dist/platform.d.ts",
32
35
  "default": "./dist/platform.js"
33
36
  }
37
+ },
38
+ "./projection.js": {
39
+ "import": {
40
+ "types": "./dist/projection/index.d.ts",
41
+ "default": "./dist/projection/index.js"
42
+ }
34
43
  }
35
44
  },
36
45
  "optionalDependencies": {
37
- "@microsoft/webui-darwin-arm64": "0.0.18",
38
- "@microsoft/webui-darwin-x64": "0.0.18",
39
- "@microsoft/webui-linux-arm64": "0.0.18",
40
- "@microsoft/webui-linux-x64": "0.0.18",
41
- "@microsoft/webui-win32-arm64": "0.0.18",
42
- "@microsoft/webui-win32-x64": "0.0.18"
46
+ "@microsoft/webui-darwin-arm64": "0.0.20",
47
+ "@microsoft/webui-darwin-x64": "0.0.20",
48
+ "@microsoft/webui-linux-arm64": "0.0.20",
49
+ "@microsoft/webui-linux-x64": "0.0.20",
50
+ "@microsoft/webui-win32-x64": "0.0.20",
51
+ "@microsoft/webui-win32-arm64": "0.0.20"
52
+ },
53
+ "peerDependencies": {
54
+ "esbuild": "^0.28.1",
55
+ "typescript": "^6.0.3"
56
+ },
57
+ "peerDependenciesMeta": {
58
+ "esbuild": {
59
+ "optional": true
60
+ },
61
+ "typescript": {
62
+ "optional": true
63
+ }
43
64
  },
44
65
  "devDependencies": {
45
66
  "@types/node": "^26.1.0",
67
+ "esbuild": "^0.28.1",
46
68
  "typescript": "^6.0.3"
47
69
  },
48
70
  "scripts": {
49
71
  "build": "tsc",
50
72
  "postbuild": "node dist/install.js",
51
73
  "postinstall": "node --input-type=module -e \"try{await import('./dist/install.js')}catch{}\"",
52
- "test": "tsc --project tsconfig.test.json && node --test dist/test/integration.test.js"
74
+ "test": "tsc --project tsconfig.test.json && node --test dist/test/integration.test.js dist/test/projection-cli-fallback.test.js dist/test/projection-conformance.test.js dist/test/projection-compiler.test.js dist/test/projection-esbuild.test.js dist/test/projection-peers.test.js"
53
75
  }
54
76
  }