@microsoft/webui 0.0.17 → 0.0.19

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 +92 -19
  2. package/bin/webui +0 -0
  3. package/dist/index.d.ts +37 -36
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +89 -80
  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 +426 -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 +1166 -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 +144 -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 +97 -0
  36. package/dist/projection/manifest.d.ts.map +1 -0
  37. package/dist/projection/manifest.js +340 -0
  38. package/dist/projection/manifest.js.map +1 -0
  39. package/package.json +33 -11
@@ -0,0 +1,340 @@
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
+ return hashContent(records.join(""));
71
+ }
72
+ function appendRecord(destination, label, fields) {
73
+ let record = label;
74
+ for (const field of fields) {
75
+ record += `${Buffer.byteLength(field, "utf8")}:${field}`;
76
+ }
77
+ destination.push(`${record}\n`);
78
+ }
79
+ /** Serializes a manifest to its canonical compact JSON form. */
80
+ export function serializeManifestCanonical(manifest) {
81
+ const inputs = sortRecord(manifest.inputs);
82
+ const outputs = sortRecord(manifest.outputs);
83
+ const components = {};
84
+ for (const tag of Object.keys(manifest.components).sort(compareUtf8)) {
85
+ const entry = manifest.components[tag];
86
+ components[tag] = {
87
+ module: entry.module,
88
+ outputs: [...entry.outputs].sort(compareUtf8),
89
+ hydrationKeys: [...entry.hydrationKeys].sort(compareUtf8),
90
+ navigationKeys: [...entry.navigationKeys].sort(compareUtf8),
91
+ };
92
+ }
93
+ return JSON.stringify({
94
+ schema: manifest.schema,
95
+ producer: manifest.producer,
96
+ adapter: manifest.adapter,
97
+ root: manifest.root,
98
+ analysisHash: manifest.analysisHash,
99
+ buildId: manifest.buildId,
100
+ outputs,
101
+ inputs,
102
+ components,
103
+ });
104
+ }
105
+ function sortRecord(value) {
106
+ const result = {};
107
+ for (const key of Object.keys(value).sort(compareUtf8)) {
108
+ result[key] = value[key];
109
+ }
110
+ return result;
111
+ }
112
+ /**
113
+ * Validates a parsed manifest's structural and canonical invariants.
114
+ *
115
+ * Stale file validation is intentionally performed by the consuming host.
116
+ */
117
+ export function validateManifestSchema(value) {
118
+ const errors = new Set();
119
+ if (!isRecord(value))
120
+ return ["PROJ-M008"];
121
+ rejectUnknownKeys(value, [
122
+ "schema",
123
+ "producer",
124
+ "adapter",
125
+ "root",
126
+ "analysisHash",
127
+ "buildId",
128
+ "outputs",
129
+ "inputs",
130
+ "components",
131
+ ], errors);
132
+ if (value["schema"] !== MANIFEST_SCHEMA)
133
+ errors.add("PROJ-M002");
134
+ if (!isProducerInfo(value["producer"]))
135
+ errors.add("PROJ-M009");
136
+ if (!isAdapterInfo(value["adapter"]))
137
+ errors.add("PROJ-M009");
138
+ if (typeof value["root"] !== "string" ||
139
+ !isCanonicalRoot(value["root"])) {
140
+ errors.add("PROJ-S003");
141
+ }
142
+ if (!isSha256(value["analysisHash"]) || !isSha256(value["buildId"])) {
143
+ errors.add("PROJ-S004");
144
+ }
145
+ const inputs = validateHashRecord(value["inputs"], errors);
146
+ const outputs = validateHashRecord(value["outputs"], errors);
147
+ validateComponents(value["components"], inputs, outputs, errors);
148
+ return [...errors];
149
+ }
150
+ function validateHashRecord(value, errors) {
151
+ if (!isRecord(value)) {
152
+ errors.add("PROJ-M009");
153
+ return undefined;
154
+ }
155
+ const keys = Object.keys(value);
156
+ if (!isSortedUnique(keys))
157
+ errors.add("PROJ-M009");
158
+ for (const [path, hash] of Object.entries(value)) {
159
+ if (typeof hash !== "string" || !isHash(hash)) {
160
+ errors.add("PROJ-S004");
161
+ continue;
162
+ }
163
+ const virtual = isVirtualPath(path);
164
+ if (!virtual && !isCanonicalFilePath(path))
165
+ errors.add("PROJ-S003");
166
+ if ((virtual && hash !== VIRTUAL_HASH) ||
167
+ (!virtual && hash === VIRTUAL_HASH)) {
168
+ errors.add("PROJ-S004");
169
+ }
170
+ }
171
+ return value;
172
+ }
173
+ function validateComponents(value, inputs, outputs, errors) {
174
+ if (!isRecord(value)) {
175
+ errors.add("PROJ-M009");
176
+ return;
177
+ }
178
+ const tags = Object.keys(value);
179
+ if (tags.length > 65_535)
180
+ errors.add("PROJ-S002");
181
+ if (!isSortedUnique(tags))
182
+ errors.add("PROJ-M009");
183
+ for (const [tag, rawEntry] of Object.entries(value)) {
184
+ if (!isComponentTag(tag) || !isRecord(rawEntry)) {
185
+ errors.add("PROJ-M009");
186
+ continue;
187
+ }
188
+ rejectUnknownKeys(rawEntry, ["module", "outputs", "hydrationKeys", "navigationKeys"], errors);
189
+ const module = rawEntry["module"];
190
+ const componentOutputs = rawEntry["outputs"];
191
+ const hydrationKeys = rawEntry["hydrationKeys"];
192
+ const navigationKeys = rawEntry["navigationKeys"];
193
+ if (typeof module !== "string" ||
194
+ !isCanonicalFilePath(module) ||
195
+ inputs?.[module] === undefined ||
196
+ inputs[module] === VIRTUAL_HASH) {
197
+ errors.add("PROJ-M009");
198
+ }
199
+ if (!isStringArray(componentOutputs) ||
200
+ componentOutputs.length === 0 ||
201
+ !isSortedUnique(componentOutputs)) {
202
+ errors.add("PROJ-M009");
203
+ }
204
+ else {
205
+ for (const output of componentOutputs) {
206
+ if (outputs?.[output] === undefined)
207
+ errors.add("PROJ-M009");
208
+ }
209
+ }
210
+ if (!isStringArray(hydrationKeys) ||
211
+ !isSortedUnique(hydrationKeys) ||
212
+ !isStringArray(navigationKeys) ||
213
+ !isSortedUnique(navigationKeys)) {
214
+ errors.add("PROJ-M009");
215
+ }
216
+ else if (hydrationKeys.some((key) => key.length === 0 || hasControlCharacter(key)) ||
217
+ navigationKeys.some((key) => key.length === 0 || hasControlCharacter(key)) ||
218
+ hydrationKeys.some((key) => binarySearch(navigationKeys, key) === false)) {
219
+ errors.add("PROJ-M009");
220
+ }
221
+ }
222
+ }
223
+ function rejectUnknownKeys(value, allowed, errors) {
224
+ const allowedSet = new Set(allowed);
225
+ if (Object.keys(value).some((key) => !allowedSet.has(key))) {
226
+ errors.add("PROJ-M009");
227
+ }
228
+ }
229
+ function isProducerInfo(value) {
230
+ if (!isRecord(value))
231
+ return false;
232
+ const keys = Object.keys(value);
233
+ return (keys.length === 2 &&
234
+ keys.includes("name") &&
235
+ keys.includes("version") &&
236
+ value["name"] === "@microsoft/webui/projection.js" &&
237
+ typeof value["version"] === "string" &&
238
+ value["version"].length > 0);
239
+ }
240
+ function isAdapterInfo(value) {
241
+ if (!isRecord(value))
242
+ return false;
243
+ const keys = Object.keys(value);
244
+ return (keys.length === 2 &&
245
+ keys.includes("name") &&
246
+ keys.includes("bundler") &&
247
+ typeof value["name"] === "string" &&
248
+ value["name"].length > 0 &&
249
+ typeof value["bundler"] === "string" &&
250
+ value["bundler"].length > 0);
251
+ }
252
+ function isRecord(value) {
253
+ return typeof value === "object" && value !== null && !Array.isArray(value);
254
+ }
255
+ function isStringArray(value) {
256
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string");
257
+ }
258
+ function isHash(value) {
259
+ return value === VIRTUAL_HASH || isSha256(value);
260
+ }
261
+ function isSha256(value) {
262
+ if (typeof value !== "string" || value.length !== 71)
263
+ return false;
264
+ if (!value.startsWith("sha256:"))
265
+ return false;
266
+ for (let index = 7; index < value.length; index++) {
267
+ const code = value.charCodeAt(index);
268
+ const digit = code >= 48 && code <= 57;
269
+ const lowerHex = code >= 97 && code <= 102;
270
+ if (!digit && !lowerHex)
271
+ return false;
272
+ }
273
+ return true;
274
+ }
275
+ function isCanonicalRoot(value) {
276
+ if (value === ".")
277
+ return true;
278
+ const segments = value.split("/");
279
+ return segments.length <= 32 && segments.every((segment) => segment === "..");
280
+ }
281
+ function isVirtualPath(value) {
282
+ return value.startsWith("virtual:");
283
+ }
284
+ function isCanonicalFilePath(value) {
285
+ if (value.length === 0 ||
286
+ value.startsWith("/") ||
287
+ value.startsWith("./") ||
288
+ value.includes("\\") ||
289
+ hasControlCharacter(value)) {
290
+ return false;
291
+ }
292
+ const segments = value.split("/");
293
+ return segments.every((segment) => segment.length > 0 && segment !== "." && segment !== "..");
294
+ }
295
+ function isComponentTag(value) {
296
+ if (value.length < 3 || !value.includes("-"))
297
+ return false;
298
+ for (let index = 0; index < value.length; index++) {
299
+ const code = value.charCodeAt(index);
300
+ const valid = (code >= 97 && code <= 122) ||
301
+ (code >= 48 && code <= 57) ||
302
+ code === 45 ||
303
+ code === 46 ||
304
+ code === 95;
305
+ if (!valid)
306
+ return false;
307
+ }
308
+ return value.charCodeAt(0) >= 97 && value.charCodeAt(0) <= 122;
309
+ }
310
+ function isSortedUnique(values) {
311
+ for (let index = 1; index < values.length; index++) {
312
+ if (compareUtf8(values[index - 1], values[index]) >= 0)
313
+ return false;
314
+ }
315
+ return true;
316
+ }
317
+ function binarySearch(values, target) {
318
+ let low = 0;
319
+ let high = values.length;
320
+ while (low < high) {
321
+ const middle = low + ((high - low) >> 1);
322
+ const order = compareUtf8(values[middle], target);
323
+ if (order === 0)
324
+ return true;
325
+ if (order < 0)
326
+ low = middle + 1;
327
+ else
328
+ high = middle;
329
+ }
330
+ return false;
331
+ }
332
+ function hasControlCharacter(value) {
333
+ for (let index = 0; index < value.length; index++) {
334
+ const code = value.charCodeAt(index);
335
+ if (code <= 31 || code === 127)
336
+ return true;
337
+ }
338
+ return false;
339
+ }
340
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/projection/manifest.ts"],"names":[],"mappings":"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"}
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.17",
5
+ "version": "0.0.19",
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.17",
38
- "@microsoft/webui-linux-arm64": "0.0.17",
39
- "@microsoft/webui-darwin-x64": "0.0.17",
40
- "@microsoft/webui-linux-x64": "0.0.17",
41
- "@microsoft/webui-win32-arm64": "0.0.17",
42
- "@microsoft/webui-win32-x64": "0.0.17"
46
+ "@microsoft/webui-darwin-arm64": "0.0.19",
47
+ "@microsoft/webui-linux-x64": "0.0.19",
48
+ "@microsoft/webui-linux-arm64": "0.0.19",
49
+ "@microsoft/webui-win32-x64": "0.0.19",
50
+ "@microsoft/webui-win32-arm64": "0.0.19",
51
+ "@microsoft/webui-darwin-x64": "0.0.19"
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
- "@types/node": "^25.3.5",
46
- "typescript": "^5.9.3"
66
+ "@types/node": "^26.1.0",
67
+ "esbuild": "^0.28.1",
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
  }