@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,602 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * Shared conformance fixtures for bundler-neutral projection adapters.
5
+ */
6
+ import * as path from "node:path";
7
+ import { VIRTUAL_HASH, compareUtf8, computeBuildId, hashContent, serializeManifestCanonical, validateManifestSchema, } from "../manifest.js";
8
+ const FIXTURE_ROOT = path.resolve(".webui-projection-conformance");
9
+ const MANIFEST_PATH = path.join(FIXTURE_ROOT, "dist", "webui-projection.json");
10
+ /**
11
+ * Run all compiler-scoped fixtures, including byte-for-byte determinism and
12
+ * full manifest structural/hash validation.
13
+ */
14
+ export async function runConformanceSuite(adapterFactory, options = {}) {
15
+ const selected = options.filter
16
+ ? ALL_CASES.filter(options.filter)
17
+ : ALL_CASES;
18
+ const passed = [];
19
+ const failed = [];
20
+ const skipped = [];
21
+ for (const fixture of selected) {
22
+ if (fixture.scope !== "compiler") {
23
+ skipped.push(fixture.id);
24
+ continue;
25
+ }
26
+ const context = {
27
+ graph: fixture.graph,
28
+ membership: fixture.membership,
29
+ outputContents: fixture.outputContents,
30
+ rootDir: FIXTURE_ROOT,
31
+ manifestPath: MANIFEST_PATH,
32
+ bundlerName: "test",
33
+ bundlerVersion: "0.0.0",
34
+ };
35
+ if (fixture.expectedComponents === null) {
36
+ const actualCodes = await captureDiagnosticCodes(adapterFactory, context);
37
+ if (!sameStrings(actualCodes, fixture.expectedDiagnosticCodes)) {
38
+ failed.push({
39
+ id: fixture.id,
40
+ reason: "diagnostic codes differ",
41
+ expected: fixture.expectedDiagnosticCodes,
42
+ actual: actualCodes,
43
+ });
44
+ }
45
+ else {
46
+ passed.push(fixture.id);
47
+ }
48
+ continue;
49
+ }
50
+ try {
51
+ const first = await adapterFactory(context);
52
+ const second = await adapterFactory(context);
53
+ const firstJson = serializeManifestCanonical(first);
54
+ const secondJson = serializeManifestCanonical(second);
55
+ if (firstJson !== secondJson) {
56
+ failed.push({
57
+ id: fixture.id,
58
+ reason: "identical inputs produced different manifest bytes",
59
+ expected: firstJson,
60
+ actual: secondJson,
61
+ });
62
+ continue;
63
+ }
64
+ const mismatch = validateSuccessManifest(fixture, first);
65
+ if (mismatch) {
66
+ failed.push({
67
+ id: fixture.id,
68
+ reason: mismatch,
69
+ expected: fixture.expectedComponents,
70
+ actual: first,
71
+ });
72
+ }
73
+ else {
74
+ passed.push(fixture.id);
75
+ }
76
+ }
77
+ catch (error) {
78
+ failed.push({
79
+ id: fixture.id,
80
+ reason: "expected success but compilation failed",
81
+ expected: fixture.expectedComponents,
82
+ actual: error,
83
+ });
84
+ }
85
+ }
86
+ return { passed, failed, skipped };
87
+ }
88
+ async function captureDiagnosticCodes(factory, context) {
89
+ try {
90
+ await factory(context);
91
+ return ["<no-error>"];
92
+ }
93
+ catch (error) {
94
+ if (error instanceof Error &&
95
+ "diagnostics" in error &&
96
+ Array.isArray(error.diagnostics)) {
97
+ return error.diagnostics
98
+ .map((diagnostic) => diagnostic.code)
99
+ .sort(compareUtf8);
100
+ }
101
+ return ["<non-projection-error>"];
102
+ }
103
+ }
104
+ function validateSuccessManifest(fixture, manifest) {
105
+ const schemaErrors = validateManifestSchema(manifest);
106
+ if (schemaErrors.length > 0) {
107
+ return `schema validation failed: ${schemaErrors.join(", ")}`;
108
+ }
109
+ if (manifest.root !== "..") {
110
+ return `expected root "..", got "${manifest.root}"`;
111
+ }
112
+ if (manifest.adapter.name !== "test" || manifest.adapter.bundler !== "test@0.0.0") {
113
+ return "adapter identity differs";
114
+ }
115
+ if (serializeComponents(manifest.components) !==
116
+ serializeComponents(fixture.expectedComponents ?? {})) {
117
+ return "component entries differ";
118
+ }
119
+ const expectedInputs = expectedInputHashes(fixture.graph);
120
+ if (JSON.stringify(manifest.inputs) !==
121
+ JSON.stringify(expectedInputs)) {
122
+ return "input hashes differ";
123
+ }
124
+ const expectedOutputs = expectedOutputHashes(fixture.membership, fixture.outputContents);
125
+ if (JSON.stringify(manifest.outputs) !==
126
+ JSON.stringify(expectedOutputs)) {
127
+ return "output hashes differ";
128
+ }
129
+ const expectedBuildId = computeBuildId({
130
+ producerName: manifest.producer.name,
131
+ producerVersion: manifest.producer.version,
132
+ adapterName: manifest.adapter.name,
133
+ adapterBundler: manifest.adapter.bundler,
134
+ root: manifest.root,
135
+ analysisHash: manifest.analysisHash,
136
+ sortedInputs: Object.entries(manifest.inputs),
137
+ sortedOutputs: Object.entries(manifest.outputs),
138
+ sortedComponents: Object.entries(manifest.components).map(([tag, entry]) => [
139
+ tag,
140
+ entry.module,
141
+ entry.outputs,
142
+ entry.hydrationKeys,
143
+ entry.navigationKeys,
144
+ ]),
145
+ });
146
+ return manifest.buildId === expectedBuildId
147
+ ? undefined
148
+ : "buildId does not cover the canonical manifest proof";
149
+ }
150
+ function expectedInputHashes(graph) {
151
+ const entries = [];
152
+ for (const node of graph.modules.values()) {
153
+ entries.push([
154
+ canonicalId(node.id),
155
+ node.kind === "virtual"
156
+ ? VIRTUAL_HASH
157
+ : hashContent(node.source ?? ""),
158
+ ]);
159
+ }
160
+ entries.sort((left, right) => compareUtf8(left[0], right[0]));
161
+ return Object.fromEntries(entries);
162
+ }
163
+ function expectedOutputHashes(membership, contents) {
164
+ const entries = [];
165
+ for (const outputId of membership.outputs.keys()) {
166
+ entries.push([
167
+ canonicalId(outputId),
168
+ isVirtual(outputId)
169
+ ? VIRTUAL_HASH
170
+ : hashContent(contents.get(outputId)),
171
+ ]);
172
+ }
173
+ entries.sort((left, right) => compareUtf8(left[0], right[0]));
174
+ return Object.fromEntries(entries);
175
+ }
176
+ function serializeComponents(value) {
177
+ const entries = Object.entries(value).sort((left, right) => compareUtf8(left[0], right[0]));
178
+ return JSON.stringify(entries);
179
+ }
180
+ function sameStrings(left, right) {
181
+ return (JSON.stringify([...left].sort(compareUtf8)) ===
182
+ JSON.stringify([...right].sort(compareUtf8)));
183
+ }
184
+ function canonicalId(id) {
185
+ if (isVirtual(id)) {
186
+ const bytes = Buffer.from(id.slice(1), "utf8");
187
+ let result = "virtual:";
188
+ for (const byte of bytes) {
189
+ result += byte.toString(16).padStart(2, "0");
190
+ }
191
+ return result;
192
+ }
193
+ return path.relative(FIXTURE_ROOT, id).split(path.sep).join("/");
194
+ }
195
+ function isVirtual(id) {
196
+ return id.charCodeAt(0) === 0;
197
+ }
198
+ function fileId(relative) {
199
+ return path.join(FIXTURE_ROOT, relative);
200
+ }
201
+ function fileModule(relative, source, imports = []) {
202
+ const id = fileId(relative);
203
+ return [id, { id, kind: "file", source, imports }];
204
+ }
205
+ function virtualModule(id, source, imports = []) {
206
+ return [id, { id, kind: "virtual", source, imports }];
207
+ }
208
+ function resolved(specifier, relative, kind = "static", packageName) {
209
+ return {
210
+ specifier,
211
+ resolvedId: fileId(relative),
212
+ external: false,
213
+ kind,
214
+ ...(packageName === undefined ? {} : { packageName }),
215
+ };
216
+ }
217
+ function framework(specifier = "@microsoft/webui-framework") {
218
+ return {
219
+ specifier,
220
+ resolvedId: undefined,
221
+ external: true,
222
+ kind: "static",
223
+ packageName: "@microsoft/webui-framework",
224
+ };
225
+ }
226
+ function graph(modules, entries) {
227
+ return { modules: new Map(modules), entries };
228
+ }
229
+ function emitted(outputs) {
230
+ const membership = new Map();
231
+ const outputContents = new Map();
232
+ for (const [relative, members, content] of outputs) {
233
+ const id = fileId(relative);
234
+ membership.set(id, new Set(members));
235
+ outputContents.set(id, content);
236
+ }
237
+ return { membership: { outputs: membership }, outputContents };
238
+ }
239
+ function component(module, outputs, hydrationKeys, navigationKeys = hydrationKeys) {
240
+ return {
241
+ module,
242
+ outputs,
243
+ hydrationKeys,
244
+ navigationKeys,
245
+ };
246
+ }
247
+ function success(id, description, fixtureGraph, output, expectedComponents) {
248
+ return {
249
+ id,
250
+ description,
251
+ scope: "compiler",
252
+ graph: fixtureGraph,
253
+ membership: output.membership,
254
+ outputContents: output.outputContents,
255
+ expectedComponents,
256
+ expectedDiagnosticCodes: [],
257
+ };
258
+ }
259
+ function failure(id, description, fixtureGraph, output, codes) {
260
+ return {
261
+ id,
262
+ description,
263
+ scope: "compiler",
264
+ graph: fixtureGraph,
265
+ membership: output.membership,
266
+ outputContents: output.outputContents,
267
+ expectedComponents: null,
268
+ expectedDiagnosticCodes: codes,
269
+ };
270
+ }
271
+ function rustCase(id, description) {
272
+ return {
273
+ id,
274
+ description,
275
+ scope: "rust",
276
+ graph: { modules: new Map(), entries: [] },
277
+ membership: { outputs: new Map() },
278
+ outputContents: new Map(),
279
+ expectedComponents: {},
280
+ expectedDiagnosticCodes: [],
281
+ };
282
+ }
283
+ const contactId = fileId("src/contact-card.ts");
284
+ const contactGraph = graph([
285
+ fileModule("src/contact-card.ts", `
286
+ import { observable, attr, WebUIElement } from '@microsoft/webui-framework';
287
+ class ContactCard extends WebUIElement {
288
+ @observable email = '';
289
+ @attr firstName = '';
290
+ @attr({ attribute: 'last-name' }) lastName = '';
291
+ }
292
+ ContactCard.define('contact-card');
293
+ `, [framework()]),
294
+ fileModule("src/index.ts", "import './contact-card.ts';", [
295
+ resolved("./contact-card.ts", "src/contact-card.ts"),
296
+ ]),
297
+ ], [fileId("src/index.ts")]);
298
+ /** Canonical compiler and host conformance cases. */
299
+ export const ALL_CASES = [
300
+ success("basic-single-entry", "Direct decorators use exact JavaScript property names.", contactGraph, emitted([
301
+ [
302
+ "dist/index.js",
303
+ [fileId("src/index.ts"), contactId],
304
+ "bundle:contact",
305
+ ],
306
+ ]), {
307
+ "contact-card": component("src/contact-card.ts", ["dist/index.js"], ["email", "firstName", "lastName"]),
308
+ }),
309
+ success("empty-keys", "A proven WebUI class with no reactive properties emits empty surfaces.", graph([
310
+ fileModule("src/static-banner.ts", `
311
+ import { WebUIElement } from '@microsoft/webui-framework';
312
+ class StaticBanner extends WebUIElement {}
313
+ StaticBanner.define('static-banner');
314
+ `, [framework()]),
315
+ ], [fileId("src/static-banner.ts")]), emitted([
316
+ [
317
+ "dist/index.js",
318
+ [fileId("src/static-banner.ts")],
319
+ "bundle:static",
320
+ ],
321
+ ]), {
322
+ "static-banner": component("src/static-banner.ts", ["dist/index.js"], []),
323
+ }),
324
+ success("aliased-decorator", "Named decorator aliases preserve framework identity.", graph([
325
+ fileModule("src/counter.ts", `
326
+ import { observable as obs, WebUIElement } from '@microsoft/webui-framework';
327
+ class Counter extends WebUIElement { @obs count = 0; }
328
+ Counter.define('my-counter');
329
+ `, [framework()]),
330
+ ], [fileId("src/counter.ts")]), emitted([
331
+ ["dist/index.js", [fileId("src/counter.ts")], "bundle:counter"],
332
+ ]), {
333
+ "my-counter": component("src/counter.ts", ["dist/index.js"], ["count"]),
334
+ }),
335
+ success("namespace-decorator", "Namespace framework imports resolve decorators and base classes.", graph([
336
+ fileModule("src/widget.ts", `
337
+ import * as webui from '@microsoft/webui-framework';
338
+ class Widget extends webui.WebUIElement { @webui.observable value = ''; }
339
+ Widget.define('my-widget');
340
+ `, [framework()]),
341
+ ], [fileId("src/widget.ts")]), emitted([
342
+ ["dist/index.js", [fileId("src/widget.ts")], "bundle:widget"],
343
+ ]), {
344
+ "my-widget": component("src/widget.ts", ["dist/index.js"], ["value"]),
345
+ }),
346
+ success("adapter-resolved-alias", "Package aliases use adapter package identity rather than path guessing.", graph([
347
+ fileModule("src/alias-card.ts", `
348
+ import { observable, WebUIElement } from '#webui';
349
+ class AliasCard extends WebUIElement { @observable value = ''; }
350
+ AliasCard.define('alias-card');
351
+ `, [framework("#webui")]),
352
+ ], [fileId("src/alias-card.ts")]), emitted([
353
+ [
354
+ "dist/index.js",
355
+ [fileId("src/alias-card.ts")],
356
+ "bundle:alias",
357
+ ],
358
+ ]), {
359
+ "alias-card": component("src/alias-card.ts", ["dist/index.js"], ["value"]),
360
+ }),
361
+ success("re-export-chain", "Named and star re-exports resolve through adapter-provided edges.", graph([
362
+ fileModule("src/framework-barrel.ts", "export { observable } from '@microsoft/webui-framework';", [framework()]),
363
+ fileModule("src/app-barrel.ts", "export * from './framework-barrel.ts';", [resolved("./framework-barrel.ts", "src/framework-barrel.ts")]),
364
+ fileModule("src/card.ts", `
365
+ import { observable } from './app-barrel.ts';
366
+ import { WebUIElement } from '@microsoft/webui-framework';
367
+ class Card extends WebUIElement { @observable title = ''; }
368
+ Card.define('my-card');
369
+ `, [
370
+ resolved("./app-barrel.ts", "src/app-barrel.ts"),
371
+ framework(),
372
+ ]),
373
+ ], [fileId("src/card.ts")]), emitted([
374
+ [
375
+ "dist/index.js",
376
+ [
377
+ fileId("src/framework-barrel.ts"),
378
+ fileId("src/app-barrel.ts"),
379
+ fileId("src/card.ts"),
380
+ ],
381
+ "bundle:barrel",
382
+ ],
383
+ ]), {
384
+ "my-card": component("src/card.ts", ["dist/index.js"], ["title"]),
385
+ }),
386
+ success("inheritance-single", "Inherited and local keys are unioned exactly.", graph([
387
+ fileModule("src/base.ts", `
388
+ import { observable, WebUIElement } from '@microsoft/webui-framework';
389
+ export class Base extends WebUIElement { @observable shared = ''; }
390
+ `, [framework()]),
391
+ fileModule("src/derived.ts", `
392
+ import { observable } from '@microsoft/webui-framework';
393
+ import { Base } from './base.ts';
394
+ class Derived extends Base { @observable own = ''; }
395
+ Derived.define('my-derived');
396
+ `, [framework(), resolved("./base.ts", "src/base.ts")]),
397
+ ], [fileId("src/derived.ts")]), emitted([
398
+ [
399
+ "dist/index.js",
400
+ [fileId("src/base.ts"), fileId("src/derived.ts")],
401
+ "bundle:derived",
402
+ ],
403
+ ]), {
404
+ "my-derived": component("src/derived.ts", ["dist/index.js"], ["own", "shared"]),
405
+ }),
406
+ success("inheritance-multi", "Multiple inheritance hops remain deterministic.", graph([
407
+ fileModule("src/a.ts", `
408
+ import { observable, WebUIElement } from '@microsoft/webui-framework';
409
+ export class A extends WebUIElement { @observable aKey = ''; }
410
+ `, [framework()]),
411
+ fileModule("src/b.ts", `
412
+ import { observable } from '@microsoft/webui-framework';
413
+ import { A } from './a.ts';
414
+ export class B extends A { @observable bKey = ''; }
415
+ `, [framework(), resolved("./a.ts", "src/a.ts")]),
416
+ fileModule("src/c.ts", `
417
+ import { observable } from '@microsoft/webui-framework';
418
+ import { B } from './b.ts';
419
+ class C extends B { @observable cKey = ''; }
420
+ C.define('my-c');
421
+ `, [framework(), resolved("./b.ts", "src/b.ts")]),
422
+ ], [fileId("src/c.ts")]), emitted([
423
+ [
424
+ "dist/index.js",
425
+ [fileId("src/a.ts"), fileId("src/b.ts"), fileId("src/c.ts")],
426
+ "bundle:multi",
427
+ ],
428
+ ]), {
429
+ "my-c": component("src/c.ts", ["dist/index.js"], ["aKey", "bKey", "cKey"]),
430
+ }),
431
+ success("code-splitting", "Final output membership identifies the shipped split chunk.", graph([
432
+ fileModule("src/index.ts", "import('./detail.ts');", [
433
+ resolved("./detail.ts", "src/detail.ts", "dynamic"),
434
+ ]),
435
+ fileModule("src/detail.ts", `
436
+ import { observable, WebUIElement } from '@microsoft/webui-framework';
437
+ class DetailPane extends WebUIElement { @observable item = null; }
438
+ DetailPane.define('detail-pane');
439
+ `, [framework()]),
440
+ ], [fileId("src/index.ts")]), emitted([
441
+ ["dist/index.js", [fileId("src/index.ts")], "bundle:index"],
442
+ [
443
+ "dist/chunks/detail.js",
444
+ [fileId("src/detail.ts")],
445
+ "bundle:detail",
446
+ ],
447
+ ]), {
448
+ "detail-pane": component("src/detail.ts", ["dist/chunks/detail.js"], ["item"]),
449
+ }),
450
+ success("tree-shaking", "A defined class absent from every emitted output is excluded.", graph([
451
+ fileModule("src/unused.ts", `
452
+ import { observable, WebUIElement } from '@microsoft/webui-framework';
453
+ class Unused extends WebUIElement { @observable value = ''; }
454
+ Unused.define('unused-card');
455
+ `, [framework()]),
456
+ fileModule("src/index.ts", "export const live = true;"),
457
+ ], [fileId("src/index.ts")]), emitted([
458
+ ["dist/index.js", [fileId("src/index.ts")], "bundle:live"],
459
+ ]), {}),
460
+ success("shared-component", "One component may belong to one shared output used by multiple entries.", graph([
461
+ fileModule("src/shared.ts", `
462
+ import { attr, WebUIElement } from '@microsoft/webui-framework';
463
+ export class Shared extends WebUIElement { @attr label = ''; }
464
+ Shared.define('shared-btn');
465
+ `, [framework()]),
466
+ fileModule("src/a.ts", "import './shared.ts';", [
467
+ resolved("./shared.ts", "src/shared.ts"),
468
+ ]),
469
+ fileModule("src/b.ts", "import './shared.ts';", [
470
+ resolved("./shared.ts", "src/shared.ts"),
471
+ ]),
472
+ ], [fileId("src/a.ts"), fileId("src/b.ts")]), emitted([
473
+ ["dist/a.js", [fileId("src/a.ts")], "bundle:a"],
474
+ ["dist/b.js", [fileId("src/b.ts")], "bundle:b"],
475
+ [
476
+ "dist/chunks/shared.js",
477
+ [fileId("src/shared.ts")],
478
+ "bundle:shared",
479
+ ],
480
+ ]), {
481
+ "shared-btn": component("src/shared.ts", ["dist/chunks/shared.js"], ["label"]),
482
+ }),
483
+ success("custom-elements-imported-class", "customElements.define resolves an imported class symbol.", graph([
484
+ fileModule("src/card.ts", `
485
+ import { observable, WebUIElement } from '@microsoft/webui-framework';
486
+ export class Card extends WebUIElement { @observable value = ''; }
487
+ `, [framework()]),
488
+ fileModule("src/register.ts", `
489
+ import { Card as ImportedCard } from './card.ts';
490
+ customElements.define('imported-card', ImportedCard);
491
+ `, [resolved("./card.ts", "src/card.ts")]),
492
+ ], [fileId("src/register.ts")]), emitted([
493
+ [
494
+ "dist/index.js",
495
+ [fileId("src/card.ts"), fileId("src/register.ts")],
496
+ "bundle:imported",
497
+ ],
498
+ ]), {
499
+ "imported-card": component("src/card.ts", ["dist/index.js"], ["value"]),
500
+ }),
501
+ success("class-expression", "Exported class expressions retain exact semantics.", graph([
502
+ fileModule("src/expression.ts", `
503
+ import { observable, WebUIElement } from '@microsoft/webui-framework';
504
+ const ExpressionCard = class extends WebUIElement { @observable value = ''; };
505
+ ExpressionCard.define('expression-card');
506
+ `, [framework()]),
507
+ ], [fileId("src/expression.ts")]), emitted([
508
+ [
509
+ "dist/index.js",
510
+ [fileId("src/expression.ts")],
511
+ "bundle:expression",
512
+ ],
513
+ ]), {
514
+ "expression-card": component("src/expression.ts", ["dist/index.js"], ["value"]),
515
+ }),
516
+ success("unrelated-define-ignored", "Unrelated static define APIs do not produce false projection diagnostics.", graph([
517
+ fileModule("src/schema.ts", `
518
+ class Schema {}
519
+ const dynamicName = getName();
520
+ Schema.define(dynamicName);
521
+ `),
522
+ ], [fileId("src/schema.ts")]), emitted([
523
+ ["dist/index.js", [fileId("src/schema.ts")], "bundle:schema"],
524
+ ]), {}),
525
+ success("virtual-source", "Virtual graph inputs are provenance-only and never re-read from disk.", graph([
526
+ virtualModule("\0virtual:polyfill", undefined),
527
+ fileModule("src/index.ts", "import 'virtual:polyfill';", [
528
+ {
529
+ specifier: "virtual:polyfill",
530
+ resolvedId: "\0virtual:polyfill",
531
+ external: false,
532
+ kind: "static",
533
+ },
534
+ ]),
535
+ ], [fileId("src/index.ts")]), emitted([
536
+ [
537
+ "dist/index.js",
538
+ [fileId("src/index.ts"), "\0virtual:polyfill"],
539
+ "bundle:virtual",
540
+ ],
541
+ ]), {}),
542
+ failure("duplicate-tag-error", "Two shipped WebUI classes cannot own one tag.", graph([
543
+ fileModule("src/a.ts", `
544
+ import { WebUIElement } from '@microsoft/webui-framework';
545
+ class A extends WebUIElement {}
546
+ A.define('duplicate-card');
547
+ `, [framework()]),
548
+ fileModule("src/b.ts", `
549
+ import { WebUIElement } from '@microsoft/webui-framework';
550
+ class B extends WebUIElement {}
551
+ B.define('duplicate-card');
552
+ `, [framework()]),
553
+ ], [fileId("src/a.ts"), fileId("src/b.ts")]), emitted([
554
+ [
555
+ "dist/index.js",
556
+ [fileId("src/a.ts"), fileId("src/b.ts")],
557
+ "bundle:duplicate",
558
+ ],
559
+ ]), ["PROJ-C010"]),
560
+ failure("unresolvable-base-error", "A likely WebUI class with unresolved inheritance cannot prove exact keys.", graph([
561
+ fileModule("src/derived.ts", `
562
+ import { observable } from '@microsoft/webui-framework';
563
+ import { MissingBase } from './missing.ts';
564
+ class Derived extends MissingBase { @observable value = ''; }
565
+ Derived.define('derived-card');
566
+ `, [framework()]),
567
+ ], [fileId("src/derived.ts")]), emitted([
568
+ [
569
+ "dist/index.js",
570
+ [fileId("src/derived.ts")],
571
+ "bundle:missing-base",
572
+ ],
573
+ ]), ["PROJ-C005"]),
574
+ failure("dynamic-tag-error", "A proven WebUI class requires a literal component tag.", graph([
575
+ fileModule("src/dynamic.ts", `
576
+ import { WebUIElement } from '@microsoft/webui-framework';
577
+ const tag = 'dynamic-card';
578
+ class DynamicCard extends WebUIElement {}
579
+ DynamicCard.define(tag);
580
+ `, [framework()]),
581
+ ], [fileId("src/dynamic.ts")]), emitted([
582
+ [
583
+ "dist/index.js",
584
+ [fileId("src/dynamic.ts")],
585
+ "bundle:dynamic",
586
+ ],
587
+ ]), ["PROJ-C008"]),
588
+ {
589
+ ...failure("missing-output-bytes-error", "Physical emitted outputs require exact bytes.", contactGraph, emitted([
590
+ [
591
+ "dist/index.js",
592
+ [fileId("src/index.ts"), contactId],
593
+ "bundle:contact",
594
+ ],
595
+ ]), ["PROJ-C014"]),
596
+ outputContents: new Map(),
597
+ },
598
+ rustCase("stale-input-error", "The Rust consumer rejects source hashes that no longer match disk."),
599
+ rustCase("missing-coverage-error", "The Rust consumer rejects a compiled scripted tag absent from all fragments."),
600
+ rustCase("external-bundle", "The Rust consumer merges disjoint application and external bundle fragments."),
601
+ ];
602
+ //# sourceMappingURL=conformance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformance.js","sourceRoot":"","sources":["../../../src/projection/fixtures/conformance.ts"],"names":[],"mappings":"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"}