xbintsc 0.5.45 → 0.5.52
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.
- package/AGENTS.md +1 -1
- package/README.md +5 -4
- package/README.zh-CN.md +4 -3
- package/dist/src/cli/extensions.d.ts +24 -0
- package/dist/src/cli/extensions.js +62 -0
- package/dist/src/cli/extensions.js.map +1 -0
- package/dist/src/cli/help.d.ts +1 -1
- package/dist/src/cli/help.js +3 -1
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/hints.js +8 -3
- package/dist/src/cli/hints.js.map +1 -1
- package/dist/src/cli/main.js +21 -28
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/diagnostics/diagnostic.d.ts +3 -1
- package/dist/src/diagnostics/diagnostic.js +2 -0
- package/dist/src/diagnostics/diagnostic.js.map +1 -1
- package/dist/src/driver/build-key.d.ts +2 -0
- package/dist/src/driver/build-key.js +1 -0
- package/dist/src/driver/build-key.js.map +1 -1
- package/dist/src/driver/compiler.js +61 -8
- package/dist/src/driver/compiler.js.map +1 -1
- package/dist/src/driver/config.d.ts +4 -0
- package/dist/src/driver/config.js +2 -0
- package/dist/src/driver/config.js.map +1 -1
- package/dist/src/driver/link-features.d.ts +37 -0
- package/dist/src/driver/link-features.js +123 -0
- package/dist/src/driver/link-features.js.map +1 -0
- package/dist/src/driver/options.d.ts +10 -0
- package/dist/src/driver/runtime-objects.d.ts +5 -0
- package/dist/src/driver/runtime-objects.js +20 -1
- package/dist/src/driver/runtime-objects.js.map +1 -1
- package/dist/src/driver/usage.d.ts +23 -0
- package/dist/src/driver/usage.js +353 -0
- package/dist/src/driver/usage.js.map +1 -0
- package/dist/src/driver/version.d.ts +1 -1
- package/dist/src/driver/version.js +1 -1
- package/dist/src/extensions/catalog.js +1 -2
- package/dist/src/extensions/catalog.js.map +1 -1
- package/dist/src/extensions/gui/features.d.ts +34 -0
- package/dist/src/extensions/gui/features.js +165 -0
- package/dist/src/extensions/gui/features.js.map +1 -0
- package/dist/src/extensions/gui/index.js +10 -4
- package/dist/src/extensions/gui/index.js.map +1 -1
- package/dist/src/extensions/link-feature.d.ts +70 -0
- package/dist/src/extensions/link-feature.js +18 -0
- package/dist/src/extensions/link-feature.js.map +1 -0
- package/dist/src/extensions/registry.d.ts +24 -4
- package/dist/src/extensions/registry.js +26 -3
- package/dist/src/extensions/registry.js.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.js +0 -1
- package/dist/src/index.js.map +1 -1
- package/dist/tests/cli/hints.test.js +5 -7
- package/dist/tests/cli/hints.test.js.map +1 -1
- package/dist/tests/driver/link-features.test.js +105 -0
- package/dist/tests/driver/link-features.test.js.map +1 -0
- package/dist/tests/driver/usage.test.d.ts +1 -0
- package/dist/tests/driver/usage.test.js +88 -0
- package/dist/tests/driver/usage.test.js.map +1 -0
- package/dist/tests/e2e/gui-audio.test.js +4 -4
- package/dist/tests/e2e/gui-audio.test.js.map +1 -1
- package/dist/tests/e2e/gui-css-coverage.test.d.ts +9 -0
- package/dist/tests/e2e/gui-css-coverage.test.js +333 -0
- package/dist/tests/e2e/gui-css-coverage.test.js.map +1 -0
- package/dist/tests/e2e/gui-css-features.test.d.ts +6 -0
- package/dist/tests/e2e/gui-css-features.test.js +270 -0
- package/dist/tests/e2e/gui-css-features.test.js.map +1 -0
- package/dist/tests/e2e/gui-effects.test.js +92 -11
- package/dist/tests/e2e/gui-effects.test.js.map +1 -1
- package/dist/tests/e2e/gui-feature-linking.test.d.ts +9 -0
- package/dist/tests/e2e/gui-feature-linking.test.js +68 -0
- package/dist/tests/e2e/gui-feature-linking.test.js.map +1 -0
- package/dist/tests/e2e/gui-font-face.test.d.ts +10 -0
- package/dist/tests/e2e/gui-font-face.test.js +142 -0
- package/dist/tests/e2e/gui-font-face.test.js.map +1 -0
- package/dist/tests/e2e/gui-fonts.test.d.ts +10 -0
- package/dist/tests/e2e/gui-fonts.test.js +150 -0
- package/dist/tests/e2e/gui-fonts.test.js.map +1 -0
- package/dist/tests/e2e/gui-helpers.d.ts +10 -1
- package/dist/tests/e2e/gui-helpers.js +6 -0
- package/dist/tests/e2e/gui-helpers.js.map +1 -1
- package/dist/tests/e2e/gui-layout.test.js +7 -3
- package/dist/tests/e2e/gui-layout.test.js.map +1 -1
- package/dist/tests/e2e/gui-media-disabled.test.d.ts +5 -4
- package/dist/tests/e2e/gui-media-disabled.test.js +7 -6
- package/dist/tests/e2e/gui-media-disabled.test.js.map +1 -1
- package/dist/tests/e2e/gui-media.test.d.ts +5 -4
- package/dist/tests/e2e/gui-media.test.js +9 -9
- package/dist/tests/e2e/gui-media.test.js.map +1 -1
- package/dist/tests/e2e/gui-paint.test.js +5 -2
- package/dist/tests/e2e/gui-paint.test.js.map +1 -1
- package/dist/tests/e2e/gui-shaping.test.d.ts +5 -0
- package/dist/tests/e2e/gui-shaping.test.js +47 -0
- package/dist/tests/e2e/gui-shaping.test.js.map +1 -0
- package/dist/tests/e2e/gui-track-sizing.test.d.ts +6 -0
- package/dist/tests/e2e/gui-track-sizing.test.js +173 -0
- package/dist/tests/e2e/gui-track-sizing.test.js.map +1 -0
- package/dist/tests/e2e/gui-transform.test.js +3 -2
- package/dist/tests/e2e/gui-transform.test.js.map +1 -1
- package/dist/tests/e2e/gui-webgl-pipeline-cache.test.d.ts +18 -0
- package/dist/tests/e2e/gui-webgl-pipeline-cache.test.js +120 -0
- package/dist/tests/e2e/gui-webgl-pipeline-cache.test.js.map +1 -0
- package/dist/tests/extensions/gui-features.test.d.ts +1 -0
- package/dist/tests/extensions/gui-features.test.js +175 -0
- package/dist/tests/extensions/gui-features.test.js.map +1 -0
- package/doc/ai/cli.md +5 -1
- package/doc/ai/extensions.md +56 -26
- package/doc/ai/troubleshooting.md +10 -7
- package/doc/ai/zh-CN/cli.md +5 -1
- package/doc/ai/zh-CN/extensions.md +48 -22
- package/doc/ai/zh-CN/troubleshooting.md +6 -5
- package/doc/gui/animation.md +39 -9
- package/doc/gui/api.md +2 -1
- package/doc/gui/build.md +137 -19
- package/doc/gui/canvas.md +1 -1
- package/doc/gui/dom.md +20 -4
- package/doc/gui/known-issues.md +63 -26
- package/doc/gui/layout.md +31 -8
- package/doc/gui/media.md +13 -7
- package/doc/gui/rendering.md +114 -39
- package/doc/gui/runtime.md +5 -0
- package/doc/gui/webgl.md +24 -6
- package/doc/gui.md +110 -47
- package/doc/implemented/cli.md +2 -0
- package/doc/implemented/extensions.md +9 -3
- package/doc/npm-package.md +4 -4
- package/doc/xbintsc.config.schema.json +10 -0
- package/doc/zh-CN/gui/animation.md +33 -10
- package/doc/zh-CN/gui/api.md +2 -1
- package/doc/zh-CN/gui/build.md +110 -16
- package/doc/zh-CN/gui/canvas.md +1 -1
- package/doc/zh-CN/gui/dom.md +16 -3
- package/doc/zh-CN/gui/known-issues.md +45 -15
- package/doc/zh-CN/gui/layout.md +23 -6
- package/doc/zh-CN/gui/media.md +11 -6
- package/doc/zh-CN/gui/rendering.md +84 -26
- package/doc/zh-CN/gui/runtime.md +3 -0
- package/doc/zh-CN/gui/webgl.md +3 -3
- package/doc/zh-CN/gui.md +92 -41
- package/doc/zh-CN/implemented/cli.md +2 -0
- package/doc/zh-CN/implemented/extensions.md +9 -3
- package/doc/zh-CN/npm-package.md +4 -3
- package/package.json +7 -7
- package/runtime/ext_gui/animation_values.cpp +425 -0
- package/runtime/ext_gui/animation_values.h +64 -0
- package/runtime/ext_gui/browser.cpp +22 -15
- package/runtime/ext_gui/browser_loop.cpp +13 -1
- package/runtime/ext_gui/canvas.h +1 -1
- package/runtime/ext_gui/canvas_raster.cpp +1 -1
- package/runtime/ext_gui/canvas_text.cpp +1 -1
- package/runtime/ext_gui/css.cpp +172 -21
- package/runtime/ext_gui/css.h +75 -4
- package/runtime/ext_gui/css_match.cpp +4 -0
- package/runtime/ext_gui/css_sheet.cpp +218 -2
- package/runtime/ext_gui/document.cpp +42 -192
- package/runtime/ext_gui/document.h +25 -12
- package/runtime/ext_gui/document_animation.cpp +428 -0
- package/runtime/ext_gui/dom_api_canvas.cpp +15 -8
- package/runtime/ext_gui/dom_api_canvas_extra.cpp +44 -20
- package/runtime/ext_gui/dom_api_canvas_image.cpp +3 -1
- package/runtime/ext_gui/dom_api_node_read.cpp +10 -0
- package/runtime/ext_gui/dom_api_offscreen.cpp +3 -1
- package/runtime/ext_gui/dom_api_style.cpp +7 -0
- package/runtime/ext_gui/dom_api_webgl_internal.h +4 -0
- package/runtime/ext_gui/dom_api_webgl_source.cpp +5 -2
- package/runtime/ext_gui/effect_values.cpp +245 -21
- package/runtime/ext_gui/gpu_bridge.c +28 -0
- package/runtime/ext_gui/gpu_feature.cpp +30 -0
- package/runtime/ext_gui/gpu_shader.cpp +22 -0
- package/runtime/ext_gui/gpu_shader_api.h +50 -0
- package/runtime/ext_gui/gradient_values.cpp +24 -0
- package/runtime/ext_gui/grid_values.cpp +23 -0
- package/runtime/ext_gui/gui.cpp +6 -37
- package/runtime/ext_gui/gui_canvas.cpp +14 -6
- package/runtime/ext_gui/gui_cursor.cpp +50 -0
- package/runtime/ext_gui/gui_engine.h +1 -18
- package/runtime/ext_gui/gui_events.cpp +19 -6
- package/runtime/ext_gui/gui_internal.h +3 -0
- package/runtime/ext_gui/gui_webgl.cpp +25 -10
- package/runtime/ext_gui/image_api.cpp +18 -0
- package/runtime/ext_gui/image_api.h +43 -0
- package/runtime/ext_gui/image_bitmap_browser.cpp +20 -11
- package/runtime/ext_gui/image_bridge.c +22 -0
- package/runtime/ext_gui/image_feature.cpp +107 -0
- package/runtime/ext_gui/inline_svg.cpp +95 -8
- package/runtime/ext_gui/inline_svg.h +5 -1
- package/runtime/ext_gui/layout.cpp +15 -9
- package/runtime/ext_gui/layout.h +8 -2
- package/runtime/ext_gui/layout_flex.cpp +134 -29
- package/runtime/ext_gui/layout_flow.cpp +58 -7
- package/runtime/ext_gui/layout_flow_internal.h +39 -4
- package/runtime/ext_gui/layout_grid.cpp +31 -0
- package/runtime/ext_gui/layout_inline.cpp +26 -2
- package/runtime/ext_gui/layout_vertical.cpp +196 -0
- package/runtime/ext_gui/media.cpp +4 -2
- package/runtime/ext_gui/media.h +3 -3
- package/runtime/ext_gui/media_api.h +7 -6
- package/runtime/ext_gui/paint.cpp +67 -9
- package/runtime/ext_gui/paint.h +61 -8
- package/runtime/ext_gui/paint_backdrop.cpp +211 -0
- package/runtime/ext_gui/paint_background.cpp +175 -97
- package/runtime/ext_gui/paint_effects.cpp +12 -6
- package/runtime/ext_gui/paint_internal.h +27 -0
- package/runtime/ext_gui/paint_outline.cpp +44 -0
- package/runtime/ext_gui/paint_shadow.cpp +368 -0
- package/runtime/ext_gui/renderer.cpp +15 -7
- package/runtime/ext_gui/renderer.h +11 -2
- package/runtime/ext_gui/renderer_backdrop.cpp +374 -0
- package/runtime/ext_gui/renderer_bitmap.cpp +82 -0
- package/runtime/ext_gui/renderer_gradient.cpp +51 -17
- package/runtime/ext_gui/renderer_image.cpp +19 -7
- package/runtime/ext_gui/renderer_internal.h +21 -0
- package/runtime/ext_gui/renderer_layer.cpp +37 -6
- package/runtime/ext_gui/renderer_text.cpp +2 -1
- package/runtime/ext_gui/stb_truetype.h +5077 -0
- package/runtime/ext_gui/style.cpp +62 -8
- package/runtime/ext_gui/style.h +111 -4
- package/runtime/ext_gui/style_cascade.cpp +83 -0
- package/runtime/ext_gui/style_internal.h +13 -1
- package/runtime/ext_gui/style_length.cpp +92 -0
- package/runtime/ext_gui/style_print.cpp +83 -2
- package/runtime/ext_gui/style_svg.cpp +40 -0
- package/runtime/ext_gui/style_text.cpp +302 -0
- package/runtime/ext_gui/style_ui.cpp +150 -0
- package/runtime/ext_gui/style_values.cpp +76 -62
- package/runtime/ext_gui/style_values_internal.h +23 -0
- package/runtime/ext_gui/text.cpp +27 -499
- package/runtime/ext_gui/text.h +18 -9
- package/runtime/ext_gui/text_api.h +45 -0
- package/runtime/ext_gui/text_bridge.c +23 -0
- package/runtime/ext_gui/text_cache.cpp +12 -3
- package/runtime/ext_gui/text_font_db.cpp +427 -0
- package/runtime/ext_gui/text_font_paths.cpp +250 -0
- package/runtime/ext_gui/text_font_paths.h +39 -0
- package/runtime/ext_gui/text_font_sfnt.cpp +396 -0
- package/runtime/ext_gui/text_font_sfnt.h +44 -0
- package/runtime/ext_gui/text_fonts.cpp +348 -0
- package/runtime/ext_gui/text_fonts.h +78 -0
- package/runtime/ext_gui/text_fonts_internal.h +77 -0
- package/runtime/ext_gui/text_glyph_cache.cpp +2 -2
- package/runtime/ext_gui/text_hb.cpp +438 -0
- package/runtime/ext_gui/text_stb.cpp +369 -0
- package/runtime/ext_gui/transform.cpp +107 -9
- package/runtime/ext_gui/transform.h +5 -0
- package/runtime/ext_gui/webgl_api.cpp +19 -0
- package/runtime/ext_gui/webgl_api.h +53 -0
- package/runtime/ext_gui/webgl_bridge.c +25 -0
- package/runtime/ext_gui/webgl_draw_setup.cpp +42 -1
- package/runtime/ext_gui/webgl_feature.cpp +82 -0
- package/runtime/ext_gui/webgl_feature.h +28 -0
- package/runtime/ext_gui/webgl_msl.cpp +41 -0
- package/runtime/ext_gui/webgl_msl.h +6 -0
- package/runtime/ext_gui/webgl_shader.cpp +40 -32
- package/runtime/ext_gui/window.cpp +7 -7
- package/runtime/ext_media/decode_audio.cpp +1 -1
- package/runtime/ext_media/media.cpp +1 -1
- package/runtime/ext_media/media_bridge.c +7 -7
- package/scripts/build-gui.ts +97 -98
- package/scripts/check-file-length.ts +1 -0
- package/scripts/gui-build-options.ts +122 -0
- package/src/cli/extensions.ts +72 -0
- package/src/cli/help.ts +3 -1
- package/src/cli/hints.ts +9 -3
- package/src/cli/main.ts +21 -27
- package/src/diagnostics/diagnostic.ts +2 -0
- package/src/driver/build-key.ts +3 -0
- package/src/driver/compiler.ts +63 -8
- package/src/driver/config.ts +6 -0
- package/src/driver/link-features.ts +163 -0
- package/src/driver/options.ts +10 -0
- package/src/driver/runtime-objects.ts +26 -1
- package/src/driver/usage.ts +376 -0
- package/src/driver/version.ts +1 -1
- package/src/extensions/catalog.ts +1 -2
- package/src/extensions/gui/features.ts +166 -0
- package/src/extensions/gui/index.ts +10 -4
- package/src/extensions/link-feature.ts +72 -0
- package/src/extensions/registry.ts +45 -4
- package/src/index.ts +3 -2
- package/dist/src/extensions/media/index.d.ts +0 -28
- package/dist/src/extensions/media/index.js +0 -59
- package/dist/src/extensions/media/index.js.map +0 -1
- package/dist/tests/extensions/media.test.js +0 -63
- package/dist/tests/extensions/media.test.js.map +0 -1
- package/src/extensions/media/index.ts +0 -65
- /package/dist/tests/{extensions/media.test.d.ts → driver/link-features.test.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/gui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/gui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional link features: runtime capabilities an extension can contribute
|
|
3
|
+
* without making every program pay for them.
|
|
4
|
+
*
|
|
5
|
+
* A feature is *not* an extension: the extension is the compile-time unit
|
|
6
|
+
* (`--ext gui`), while a feature is a heavy optional half of it (`FFmpeg`,
|
|
7
|
+
* `glslang`). The driver decides which features a program may use from a static
|
|
8
|
+
* scan of the bundled AST (see `src/driver/usage.ts`) and then links the
|
|
9
|
+
* feature's registration object and archives only for those.
|
|
10
|
+
*
|
|
11
|
+
* The registration object is the "strong reference": it is a C translation unit
|
|
12
|
+
* linked directly only when the feature is active. Its constructor installs the
|
|
13
|
+
* feature's dispatch table into the core, and its references force the linker to
|
|
14
|
+
* extract the archive members that implement the feature. This is the same
|
|
15
|
+
* mechanism the former `media` extension used for `media_bridge.c`.
|
|
16
|
+
*/
|
|
17
|
+
/** Facts about a bundled program that features use to decide whether they are needed. */
|
|
18
|
+
export interface ProgramUsage {
|
|
19
|
+
/**
|
|
20
|
+
* Every string literal value in the bundle, including the HTML/CSS of
|
|
21
|
+
* imported `.html` assets and the static chunks of template literals.
|
|
22
|
+
*/
|
|
23
|
+
readonly strings: readonly string[];
|
|
24
|
+
/** Identifiers and property names referenced anywhere in the bundle. */
|
|
25
|
+
readonly identifiers: ReadonlySet<string>;
|
|
26
|
+
/**
|
|
27
|
+
* One entry per `getContext(...)` call: the context kind when the argument
|
|
28
|
+
* could be resolved to a literal, or `undefined` when it is decided at run
|
|
29
|
+
* time (which must be treated conservatively as "might be WebGL").
|
|
30
|
+
*/
|
|
31
|
+
readonly getContext: readonly (string | undefined)[];
|
|
32
|
+
/**
|
|
33
|
+
* True when the program can build HTML/CSS from data the compiler cannot
|
|
34
|
+
* see (`innerHTML = fetched`, `loadHTML(buildPage())`, …). Features must
|
|
35
|
+
* assume they may be used when this is set.
|
|
36
|
+
*/
|
|
37
|
+
readonly dynamicMarkup: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* One optional capability an extension can contribute.
|
|
41
|
+
*
|
|
42
|
+
* `used()` is only consulted when the providing extension is enabled. When it
|
|
43
|
+
* returns true (or the user forces the feature) the driver compiles
|
|
44
|
+
* `runtimeSources()` and links `nativeObjects()`, which makes the implementations
|
|
45
|
+
* reachable. Nothing else about the feature exists at compile time.
|
|
46
|
+
*/
|
|
47
|
+
export interface LinkFeature {
|
|
48
|
+
/** Stable name used by `--feature` / `--no-feature`, e.g. `media`. */
|
|
49
|
+
readonly name: string;
|
|
50
|
+
/** One-line description for diagnostics and `--verbose`. */
|
|
51
|
+
readonly description: string;
|
|
52
|
+
/**
|
|
53
|
+
* C sources compiled and linked only when the feature is active. At least one
|
|
54
|
+
* of them must reference the feature's implementation so the linker extracts
|
|
55
|
+
* it from its archive.
|
|
56
|
+
*/
|
|
57
|
+
runtimeSources?(): readonly string[];
|
|
58
|
+
/**
|
|
59
|
+
* Pre-built objects/archives linked only when the feature is active. Throwing
|
|
60
|
+
* here means "the feature is unavailable on this host"; the driver turns that
|
|
61
|
+
* into a warning for auto-detected features and an error for forced ones.
|
|
62
|
+
*/
|
|
63
|
+
nativeObjects?(): readonly string[];
|
|
64
|
+
/** Extra linker flags contributed only when the feature is active. */
|
|
65
|
+
linkerFlags?(): readonly string[];
|
|
66
|
+
/** Other link features this one needs (activated with it). */
|
|
67
|
+
readonly requires?: readonly string[];
|
|
68
|
+
/** Whether the program may use this feature. */
|
|
69
|
+
used(usage: ProgramUsage): boolean;
|
|
70
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional link features: runtime capabilities an extension can contribute
|
|
3
|
+
* without making every program pay for them.
|
|
4
|
+
*
|
|
5
|
+
* A feature is *not* an extension: the extension is the compile-time unit
|
|
6
|
+
* (`--ext gui`), while a feature is a heavy optional half of it (`FFmpeg`,
|
|
7
|
+
* `glslang`). The driver decides which features a program may use from a static
|
|
8
|
+
* scan of the bundled AST (see `src/driver/usage.ts`) and then links the
|
|
9
|
+
* feature's registration object and archives only for those.
|
|
10
|
+
*
|
|
11
|
+
* The registration object is the "strong reference": it is a C translation unit
|
|
12
|
+
* linked directly only when the feature is active. Its constructor installs the
|
|
13
|
+
* feature's dispatch table into the core, and its references force the linker to
|
|
14
|
+
* extract the archive members that implement the feature. This is the same
|
|
15
|
+
* mechanism the former `media` extension used for `media_bridge.c`.
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=link-feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-feature.js","sourceRoot":"","sources":["../../../src/extensions/link-feature.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* The default registry ships an empty baseline; callers register the
|
|
11
11
|
* extensions they need before invoking the driver.
|
|
12
12
|
*/
|
|
13
|
+
import type { LinkFeature } from "./link-feature.js";
|
|
13
14
|
export interface BuiltinFunction {
|
|
14
15
|
/** Exported C symbol, called as `xt_value symbol(int32_t argc, xt_value *argv)`. */
|
|
15
16
|
readonly symbol: string;
|
|
@@ -100,7 +101,7 @@ export interface Extension {
|
|
|
100
101
|
/**
|
|
101
102
|
* Other extensions this one needs. The registry rejects a build that enables
|
|
102
103
|
* it without them, so a dependent extension fails with an actionable message
|
|
103
|
-
* instead of an unresolved symbol at link time
|
|
104
|
+
* instead of an unresolved symbol at link time.
|
|
104
105
|
*/
|
|
105
106
|
readonly requires?: readonly string[];
|
|
106
107
|
/** C/asm sources compiled and linked alongside the generated module. */
|
|
@@ -135,6 +136,18 @@ export interface Extension {
|
|
|
135
136
|
* learns about any particular asset format.
|
|
136
137
|
*/
|
|
137
138
|
assetLoaders?(): Readonly<Record<string, AssetLoader>>;
|
|
139
|
+
/**
|
|
140
|
+
* Optional heavy capabilities this extension can contribute only when a
|
|
141
|
+
* program may use them (`media`, `gpu`, `images`, `shaping`, `webgl`, …). The driver selects among them
|
|
142
|
+
* from the bundled source and links their registration source and archives
|
|
143
|
+
* only when active; see {@link LinkFeature}.
|
|
144
|
+
*/
|
|
145
|
+
linkFeatures?(): readonly LinkFeature[];
|
|
146
|
+
}
|
|
147
|
+
/** A link feature together with the extension that declared it. */
|
|
148
|
+
export interface LinkFeatureDeclaration {
|
|
149
|
+
readonly feature: LinkFeature;
|
|
150
|
+
readonly extension: string;
|
|
138
151
|
}
|
|
139
152
|
export declare class ExtensionRegistry {
|
|
140
153
|
private readonly extensions;
|
|
@@ -156,9 +169,10 @@ export declare class ExtensionRegistry {
|
|
|
156
169
|
moduleHints(): Readonly<Record<string, string>>;
|
|
157
170
|
unregister(name: string): boolean;
|
|
158
171
|
/**
|
|
159
|
-
* Throw when a registered extension requires one that is not registered
|
|
160
|
-
*
|
|
161
|
-
*
|
|
172
|
+
* Throw when a registered extension requires one that is not registered, or
|
|
173
|
+
* when two extensions declare the same link feature.
|
|
174
|
+
* Called before a build so a missing dependency reports which flags to pass
|
|
175
|
+
* instead of failing later with an unresolved symbol.
|
|
162
176
|
*/
|
|
163
177
|
validate(): this;
|
|
164
178
|
get(name: string): Extension | undefined;
|
|
@@ -176,6 +190,12 @@ export declare class ExtensionRegistry {
|
|
|
176
190
|
* extension (mirroring `modules()`).
|
|
177
191
|
*/
|
|
178
192
|
assetLoaders(): Readonly<Record<string, AssetLoader>>;
|
|
193
|
+
/**
|
|
194
|
+
* Every optional link feature declared by the registered extensions, paired
|
|
195
|
+
* with its provider. Features of extensions that are not enabled are absent,
|
|
196
|
+
* so a program cannot accidentally link `media` through `node`.
|
|
197
|
+
*/
|
|
198
|
+
linkFeatures(): readonly LinkFeatureDeclaration[];
|
|
179
199
|
runtimeSources(): readonly string[];
|
|
180
200
|
/** Flatten every registered extension's pre-built native objects. */
|
|
181
201
|
nativeObjects(): readonly string[];
|
|
@@ -50,11 +50,13 @@ export class ExtensionRegistry {
|
|
|
50
50
|
return this.extensions.delete(name);
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
53
|
-
* Throw when a registered extension requires one that is not registered
|
|
54
|
-
*
|
|
55
|
-
*
|
|
53
|
+
* Throw when a registered extension requires one that is not registered, or
|
|
54
|
+
* when two extensions declare the same link feature.
|
|
55
|
+
* Called before a build so a missing dependency reports which flags to pass
|
|
56
|
+
* instead of failing later with an unresolved symbol.
|
|
56
57
|
*/
|
|
57
58
|
validate() {
|
|
59
|
+
const features = new Map();
|
|
58
60
|
for (const extension of this.extensions.values()) {
|
|
59
61
|
for (const dependency of extension.requires ?? []) {
|
|
60
62
|
if (this.extensions.has(dependency))
|
|
@@ -62,6 +64,13 @@ export class ExtensionRegistry {
|
|
|
62
64
|
throw new Error(`extension '${extension.name}' requires the '${dependency}' extension; ` +
|
|
63
65
|
`pass --ext ${dependency},${extension.name}`);
|
|
64
66
|
}
|
|
67
|
+
for (const feature of extension.linkFeatures?.() ?? []) {
|
|
68
|
+
const owner = features.get(feature.name);
|
|
69
|
+
if (owner !== undefined && owner !== extension.name) {
|
|
70
|
+
throw new Error(`link feature '${feature.name}' is declared by both '${owner}' and '${extension.name}'`);
|
|
71
|
+
}
|
|
72
|
+
features.set(feature.name, extension.name);
|
|
73
|
+
}
|
|
65
74
|
}
|
|
66
75
|
return this;
|
|
67
76
|
}
|
|
@@ -125,6 +134,20 @@ export class ExtensionRegistry {
|
|
|
125
134
|
}
|
|
126
135
|
return merged;
|
|
127
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Every optional link feature declared by the registered extensions, paired
|
|
139
|
+
* with its provider. Features of extensions that are not enabled are absent,
|
|
140
|
+
* so a program cannot accidentally link `media` through `node`.
|
|
141
|
+
*/
|
|
142
|
+
linkFeatures() {
|
|
143
|
+
const declarations = [];
|
|
144
|
+
for (const extension of this.extensions.values()) {
|
|
145
|
+
for (const feature of extension.linkFeatures?.() ?? []) {
|
|
146
|
+
declarations.push({ feature, extension: extension.name });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return declarations;
|
|
150
|
+
}
|
|
128
151
|
runtimeSources() {
|
|
129
152
|
const sources = [];
|
|
130
153
|
for (const extension of this.extensions.values()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/extensions/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/extensions/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAwJH,MAAM,OAAO,iBAAiB;IACX,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC3D;;;;;OAKG;IACc,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEnD,QAAQ,CAAC,SAAoB;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,cAAc,SAAS,CAAC,IAAI,yBAAyB,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,SAAoB;QAChC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4EAA4E;IAC5E,WAAW;QACT,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC1D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,QAAQ;QACN,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAClD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;oBAAE,SAAS;gBAC9C,MAAM,IAAI,KAAK,CACb,cAAc,SAAS,CAAC,IAAI,mBAAmB,UAAU,eAAe;oBACtE,cAAc,UAAU,IAAI,SAAS,CAAC,IAAI,EAAE,CAC/C,CAAC;YACJ,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;gBACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oBACpD,MAAM,IAAI,KAAK,CACb,iBAAiB,OAAO,CAAC,IAAI,0BAA0B,KAAK,UAAU,SAAS,CAAC,IAAI,GAAG,CACxF,CAAC;gBACJ,CAAC;gBACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,8DAA8D;IAC9D,QAAQ;QACN,MAAM,MAAM,GAAoC,EAAE,CAAC;QACnD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;YACxC,IAAI,QAAQ;gBAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,0EAA0E;IAC1E,YAAY;QACV,MAAM,MAAM,GAAgC,EAAE,CAAC;QAC/C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;YAC1C,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,+DAA+D;IAC/D,OAAO;QACL,MAAM,MAAM,GAAoC,EAAE,CAAC;QACnD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;gBACnC,MAAM,CAAC,SAAS,CAAC,GAAG;oBAClB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,QAAQ,EAAE,SAAS;oBAClD,OAAO,EAAE,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;iBACrD,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,MAAM,MAAM,GAAgC,EAAE,CAAC;QAC/C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;YAC3C,IAAI,OAAO;gBAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,MAAM,YAAY,GAA6B,EAAE,CAAC;QAClD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;gBACvD,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,cAAc;QACZ,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,qEAAqE;IACrE,aAAa;QACX,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;YAC1C,IAAI,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,WAAW;QACT,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;YACxC,IAAI,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,uCAAuC;IACpD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACf,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;KAChC,CAAC;CACH,CAAC;AAEF,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,iBAAiB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACzD,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -14,10 +14,11 @@ export { bind, SymbolKind, ScopeKind, type BindResult, type FunctionInfo, type S
|
|
|
14
14
|
export { checkProgram, type CheckOptions } from "./checker/checker.js";
|
|
15
15
|
export { generate, type CodegenResult, type CodegenOptions } from "./codegen/llvm.js";
|
|
16
16
|
export { XT_UNDEFINED, XT_NULL, XT_TRUE, XT_FALSE, XT_BIGINT, numberLiteral, booleanLiteral, } from "./codegen/values.js";
|
|
17
|
-
export { ExtensionRegistry, createDefaultRegistry, coreExtension, type Extension, type ExtensionModule, type ModuleExport, type ModuleExports, type AssetLoader, type AssetLoadResult } from "./extensions/registry.js";
|
|
17
|
+
export { ExtensionRegistry, createDefaultRegistry, coreExtension, type Extension, type ExtensionModule, type ModuleExport, type ModuleExports, type AssetLoader, type AssetLoadResult, type LinkFeatureDeclaration } from "./extensions/registry.js";
|
|
18
|
+
export type { LinkFeature, ProgramUsage } from "./extensions/link-feature.js";
|
|
19
|
+
export type { LinkFeatureRequest, ResolvedLinkFeature } from "./driver/link-features.js";
|
|
18
20
|
export { bundledExtensions } from "./extensions/catalog.js";
|
|
19
21
|
export { nodeExtension } from "./extensions/node/index.js";
|
|
20
|
-
export { mediaExtension } from "./extensions/media/index.js";
|
|
21
22
|
export type { NodeModule } from "./extensions/node/module.js";
|
|
22
23
|
export { NativeExtensionError, loadNativeManifest, nativeExtensionFromManifest, parseNativeManifest, type NativeManifest, type NativeBuiltin, type NativeModule, type NativeModuleExport, } from "./extensions/native.js";
|
|
23
24
|
export * from "./driver/index.js";
|
package/dist/src/index.js
CHANGED
|
@@ -17,7 +17,6 @@ export { XT_UNDEFINED, XT_NULL, XT_TRUE, XT_FALSE, XT_BIGINT, numberLiteral, boo
|
|
|
17
17
|
export { ExtensionRegistry, createDefaultRegistry, coreExtension } from "./extensions/registry.js";
|
|
18
18
|
export { bundledExtensions } from "./extensions/catalog.js";
|
|
19
19
|
export { nodeExtension } from "./extensions/node/index.js";
|
|
20
|
-
export { mediaExtension } from "./extensions/media/index.js";
|
|
21
20
|
export { NativeExtensionError, loadNativeManifest, nativeExtensionFromManifest, parseNativeManifest, } from "./extensions/native.js";
|
|
22
21
|
export * from "./driver/index.js";
|
|
23
22
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAC;AACnE,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAuD,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,YAAY,EAAqB,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAA2C,MAAM,mBAAmB,CAAC;AACtF,OAAO,EACL,YAAY,EACZ,OAAO,EACP,OAAO,EACP,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAC;AACnE,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAuD,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,YAAY,EAAqB,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAA2C,MAAM,mBAAmB,CAAC;AACtF,OAAO,EACL,YAAY,EACZ,OAAO,EACP,OAAO,EACP,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,EAAoJ,MAAM,0BAA0B,CAAC;AAGrP,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,mBAAmB,GAKpB,MAAM,wBAAwB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
|
|
@@ -122,14 +122,12 @@ describe("documentation hints", () => {
|
|
|
122
122
|
expect(output).toContain(DOC_EXTENSIONS);
|
|
123
123
|
expect(output).not.toContain(DOC_LANGUAGE_SUPPORT);
|
|
124
124
|
});
|
|
125
|
-
it("
|
|
125
|
+
it("expands the deprecated --ext media to gui plus the media link feature", () => {
|
|
126
126
|
const entry = temporaryFile("console.log(1);");
|
|
127
|
-
const { io, err } = capture();
|
|
128
|
-
expect(run(["
|
|
129
|
-
|
|
130
|
-
expect(
|
|
131
|
-
expect(output).toContain(DOC_EXTENSIONS);
|
|
132
|
-
expect(output).not.toContain("internal error");
|
|
127
|
+
const { io, out, err } = capture();
|
|
128
|
+
expect(run(["emit", entry, "--ext", "media"], io)).toBe(0);
|
|
129
|
+
expect(err.join("")).toContain("'--ext media' is deprecated");
|
|
130
|
+
expect(out.join("")).toContain("define i32 @main");
|
|
133
131
|
});
|
|
134
132
|
it("classifies a missing extension archive as a setup failure", () => {
|
|
135
133
|
const mediaFailure = thrownFailure("media native library not found at /tmp/media.a");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hints.test.js","sourceRoot":"","sources":["../../../tests/cli/hints.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hints.test.js","sourceRoot":"","sources":["../../../tests/cli/hints.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { DiagnosticBag, DiagnosticCode } from "../../src/diagnostics/diagnostic.js";
|
|
3
|
+
import { createDefaultRegistry } from "../../src/extensions/registry.js";
|
|
4
|
+
import { resolveLinkFeatures } from "../../src/driver/link-features.js";
|
|
5
|
+
const EMPTY_USAGE = {
|
|
6
|
+
strings: [],
|
|
7
|
+
identifiers: new Set(),
|
|
8
|
+
getContext: [],
|
|
9
|
+
dynamicMarkup: false,
|
|
10
|
+
};
|
|
11
|
+
/** A feature that is used when `needle` appears in a string literal. */
|
|
12
|
+
function feature(name, needle, options = {}) {
|
|
13
|
+
return {
|
|
14
|
+
name,
|
|
15
|
+
description: `${name} feature`,
|
|
16
|
+
runtimeSources: () => [`/runtime/${name}_bridge.c`],
|
|
17
|
+
nativeObjects: options.unavailable
|
|
18
|
+
? () => {
|
|
19
|
+
throw new Error(`${name} native library not found`);
|
|
20
|
+
}
|
|
21
|
+
: () => [`/runtime/${name}.a`],
|
|
22
|
+
linkerFlags: () => (name === "media" ? ["-lm"] : []),
|
|
23
|
+
...(options.requires ? { requires: options.requires } : {}),
|
|
24
|
+
used: (usage) => usage.strings.some((value) => value.includes(needle)),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function registryWith(...features) {
|
|
28
|
+
const extension = { name: "fake", linkFeatures: () => features };
|
|
29
|
+
return createDefaultRegistry().register(extension);
|
|
30
|
+
}
|
|
31
|
+
function resolve(registry, usage, request = {}) {
|
|
32
|
+
const bag = new DiagnosticBag();
|
|
33
|
+
const active = resolveLinkFeatures(registry, usage, request, bag);
|
|
34
|
+
return { bag, names: active.map((entry) => entry.name) };
|
|
35
|
+
}
|
|
36
|
+
describe("resolveLinkFeatures", () => {
|
|
37
|
+
it("activates a feature only when the program may use it", () => {
|
|
38
|
+
const registry = registryWith(feature("media", "<video"));
|
|
39
|
+
expect(resolve(registry, EMPTY_USAGE).names).toEqual([]);
|
|
40
|
+
expect(resolve(registry, { ...EMPTY_USAGE, strings: ["<video>"] }).names).toEqual(["media"]);
|
|
41
|
+
});
|
|
42
|
+
it("forces features with --feature and keeps them out with --no-feature", () => {
|
|
43
|
+
const registry = registryWith(feature("media", "<video"), feature("gpu", "webgl"));
|
|
44
|
+
expect(resolve(registry, EMPTY_USAGE, { features: ["gpu"] }).names).toEqual(["gpu"]);
|
|
45
|
+
expect(resolve(registry, { ...EMPTY_USAGE, strings: ["<video>", "webgl"] }, { noFeatures: ["media"] }).names).toEqual(["gpu"]);
|
|
46
|
+
});
|
|
47
|
+
it("expands all and lets a specific name override it", () => {
|
|
48
|
+
const registry = registryWith(feature("media", "<video"), feature("gpu", "webgl"));
|
|
49
|
+
expect(resolve(registry, EMPTY_USAGE, { features: ["all"] }).names).toEqual(["media", "gpu"]);
|
|
50
|
+
expect(resolve(registry, EMPTY_USAGE, { features: ["all"], noFeatures: ["media"] }).names).toEqual(["gpu"]);
|
|
51
|
+
expect(resolve(registry, EMPTY_USAGE, { features: ["media"], noFeatures: ["all"] }).names).toEqual(["media"]);
|
|
52
|
+
});
|
|
53
|
+
it("activates required features and rejects a blocked dependency", () => {
|
|
54
|
+
const registry = registryWith(feature("gpu", "webgl"), feature("webgl", "webgl", { requires: ["gpu"] }));
|
|
55
|
+
expect(resolve(registry, EMPTY_USAGE, { features: ["webgl"] }).names).toEqual(["gpu", "webgl"]);
|
|
56
|
+
const blocked = resolve(registry, EMPTY_USAGE, { features: ["webgl"], noFeatures: ["gpu"] });
|
|
57
|
+
expect(blocked.bag.hasErrors).toBe(true);
|
|
58
|
+
expect(blocked.bag.diagnostics[0].message).toContain("requires 'gpu'");
|
|
59
|
+
});
|
|
60
|
+
it("rejects contradictory or unknown names", () => {
|
|
61
|
+
const registry = registryWith(feature("media", "<video"));
|
|
62
|
+
expect(resolve(registry, EMPTY_USAGE, { features: ["media"], noFeatures: ["media"] }).bag.hasErrors).toBe(true);
|
|
63
|
+
expect(resolve(registry, EMPTY_USAGE, { features: ["all"], noFeatures: ["all"] }).bag.hasErrors).toBe(true);
|
|
64
|
+
const unknown = resolve(registry, EMPTY_USAGE, { features: ["nope"] });
|
|
65
|
+
expect(unknown.bag.hasErrors).toBe(true);
|
|
66
|
+
expect(unknown.bag.diagnostics[0].code).toBe(DiagnosticCode.LinkFeatureUnavailable);
|
|
67
|
+
expect(unknown.bag.diagnostics[0].message).toContain("unknown link feature 'nope'");
|
|
68
|
+
});
|
|
69
|
+
it("does not expose a feature of an extension that is not enabled", () => {
|
|
70
|
+
const empty = createDefaultRegistry();
|
|
71
|
+
const result = resolve(empty, { ...EMPTY_USAGE, strings: ["<video>"] });
|
|
72
|
+
expect(result.names).toEqual([]);
|
|
73
|
+
});
|
|
74
|
+
it("warns when an auto-detected feature is unavailable", () => {
|
|
75
|
+
const registry = registryWith(feature("media", "<video", { unavailable: true }));
|
|
76
|
+
const result = resolve(registry, { ...EMPTY_USAGE, strings: ["<video>"] });
|
|
77
|
+
expect(result.names).toEqual([]);
|
|
78
|
+
expect(result.bag.hasErrors).toBe(false);
|
|
79
|
+
expect(result.bag.diagnostics).toHaveLength(1);
|
|
80
|
+
expect(result.bag.diagnostics[0].category).toBe("warning");
|
|
81
|
+
expect(result.bag.diagnostics[0].message).toContain("detected but is unavailable");
|
|
82
|
+
});
|
|
83
|
+
it("errors when a forced feature is unavailable", () => {
|
|
84
|
+
const registry = registryWith(feature("media", "<video", { unavailable: true }));
|
|
85
|
+
const result = resolve(registry, EMPTY_USAGE, { features: ["media"] });
|
|
86
|
+
expect(result.bag.hasErrors).toBe(true);
|
|
87
|
+
expect(result.bag.diagnostics[0].code).toBe(DiagnosticCode.LinkFeatureUnavailable);
|
|
88
|
+
expect(result.bag.diagnostics[0].message).toContain("native library not found");
|
|
89
|
+
});
|
|
90
|
+
it("carries the bridge, archive and linker flags of an active feature", () => {
|
|
91
|
+
const registry = registryWith(feature("media", "<video"));
|
|
92
|
+
const bag = new DiagnosticBag();
|
|
93
|
+
const active = resolveLinkFeatures(registry, { ...EMPTY_USAGE, strings: ["<video>"] }, {}, bag);
|
|
94
|
+
expect(active).toEqual([
|
|
95
|
+
{
|
|
96
|
+
name: "media",
|
|
97
|
+
description: "media feature",
|
|
98
|
+
runtimeSources: ["/runtime/media_bridge.c"],
|
|
99
|
+
nativeObjects: ["/runtime/media.a"],
|
|
100
|
+
linkerFlags: ["-lm"],
|
|
101
|
+
},
|
|
102
|
+
]);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=link-features.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-features.test.js","sourceRoot":"","sources":["../../../tests/driver/link-features.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { Parser } from "../../src/parser/parser.js";
|
|
3
|
+
import { SourceFile } from "../../src/diagnostics/source.js";
|
|
4
|
+
import { DiagnosticBag } from "../../src/diagnostics/diagnostic.js";
|
|
5
|
+
import { collectUsage } from "../../src/driver/usage.js";
|
|
6
|
+
/** Parse `source` and collect its usage facts. */
|
|
7
|
+
function usage(source) {
|
|
8
|
+
const bag = new DiagnosticBag();
|
|
9
|
+
const file = new SourceFile("usage.ts", source);
|
|
10
|
+
const ast = new Parser(file, bag).parseSourceFile();
|
|
11
|
+
expect(bag.diagnostics.filter((diagnostic) => diagnostic.category === "error")).toEqual([]);
|
|
12
|
+
return collectUsage(ast);
|
|
13
|
+
}
|
|
14
|
+
describe("collectUsage strings and identifiers", () => {
|
|
15
|
+
it("collects string literals, template chunks and HTML assets", () => {
|
|
16
|
+
const facts = usage(`
|
|
17
|
+
const page = \`<div class="a">\${1}</div>\`;
|
|
18
|
+
const tag = "<video>";
|
|
19
|
+
document.title = "webgl2";
|
|
20
|
+
`);
|
|
21
|
+
expect(facts.strings).toContain('<div class="a">');
|
|
22
|
+
expect(facts.strings).toContain("</div>");
|
|
23
|
+
expect(facts.strings).toContain("<video>");
|
|
24
|
+
expect(facts.strings).toContain("webgl2");
|
|
25
|
+
expect(facts.identifiers.has("document")).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
it("resolves a const alias for a markup sink", () => {
|
|
28
|
+
const facts = usage(`
|
|
29
|
+
const page = "<video src='x.mp4'></video>";
|
|
30
|
+
win.loadHTML(page);
|
|
31
|
+
`);
|
|
32
|
+
expect(facts.dynamicMarkup).toBe(false);
|
|
33
|
+
expect(facts.strings.some((value) => value.includes("<video"))).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
it("resolves a template whose substitutions are literals", () => {
|
|
36
|
+
const facts = usage(`
|
|
37
|
+
const size = 320;
|
|
38
|
+
win.loadHTML(\`<video width="\${size}"></video>\`);
|
|
39
|
+
`);
|
|
40
|
+
expect(facts.dynamicMarkup).toBe(false);
|
|
41
|
+
expect(facts.strings.some((value) => value.includes("<video"))).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
it("treats a runtime sink as dynamic markup", () => {
|
|
44
|
+
expect(usage(`win.loadHTML(buildPage());`).dynamicMarkup).toBe(true);
|
|
45
|
+
expect(usage(`el.innerHTML = fetched;`).dynamicMarkup).toBe(true);
|
|
46
|
+
expect(usage(`el.outerHTML = \`<div>\${data}</div>\`;`).dynamicMarkup).toBe(true);
|
|
47
|
+
expect(usage(`document.createElement(tag);`).dynamicMarkup).toBe(true);
|
|
48
|
+
expect(usage(`document.write(page);`).dynamicMarkup).toBe(true);
|
|
49
|
+
});
|
|
50
|
+
it("does not call a literal innerHTML dynamic", () => {
|
|
51
|
+
expect(usage(`el.innerHTML = "<b>hi</b>";`).dynamicMarkup).toBe(false);
|
|
52
|
+
});
|
|
53
|
+
it("treats setAttribute style values as markup when they are computed", () => {
|
|
54
|
+
expect(usage(`el.setAttribute("style", css);`).dynamicMarkup).toBe(true);
|
|
55
|
+
expect(usage(`el.setAttribute("style", "mix-blend-mode: multiply");`).dynamicMarkup).toBe(false);
|
|
56
|
+
expect(usage(`el.setAttribute(name, css);`).dynamicMarkup).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
it("treats a computed CSS property name as dynamic", () => {
|
|
59
|
+
expect(usage(`el.style.setProperty(prop, "multiply");`).dynamicMarkup).toBe(true);
|
|
60
|
+
expect(usage(`el.style.setProperty("mix-blend-mode", "multiply");`).dynamicMarkup).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
it("treats a run-time <style> text as dynamic CSS", () => {
|
|
63
|
+
const facts = usage(`
|
|
64
|
+
const style = document.createElement("style");
|
|
65
|
+
style.textContent = css;
|
|
66
|
+
`);
|
|
67
|
+
expect(facts.dynamicMarkup).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
it("ignores a non-const binding it cannot prove", () => {
|
|
70
|
+
expect(usage(`let page = "<video>"; win.loadHTML(page);`).dynamicMarkup).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe("collectUsage getContext kinds", () => {
|
|
74
|
+
it("records literal and aliased context kinds", () => {
|
|
75
|
+
const facts = usage(`
|
|
76
|
+
const kind = "webgl2";
|
|
77
|
+
canvas.getContext("2d");
|
|
78
|
+
canvas.getContext(kind);
|
|
79
|
+
canvas["getContext"]("webgl");
|
|
80
|
+
`);
|
|
81
|
+
expect(facts.getContext).toEqual(["2d", "webgl2", "webgl"]);
|
|
82
|
+
});
|
|
83
|
+
it("records an unknown kind when it is decided at run time", () => {
|
|
84
|
+
const facts = usage(`canvas.getContext(kind);`);
|
|
85
|
+
expect(facts.getContext).toEqual([undefined]);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=usage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.test.js","sourceRoot":"","sources":["../../../tests/driver/usage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,12 +16,12 @@ import { dirname, join } from "node:path";
|
|
|
16
16
|
import { fileURLToPath } from "node:url";
|
|
17
17
|
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
18
18
|
import { findRuntimeLibrary } from "../../src/driver/runtime-lib.js";
|
|
19
|
-
import { mediaExtension } from "../../src/extensions/media/index.js";
|
|
20
19
|
import { nodeExtension } from "../../src/extensions/node/index.js";
|
|
21
20
|
import { createGuiHarness, guiAvailable } from "./gui-helpers.js";
|
|
22
21
|
const harness = createGuiHarness();
|
|
23
22
|
/* A 20 ms 440 Hz Ogg/Vorbis tone. The engine's WAV decoder rejects it, so the
|
|
24
|
-
* test exercises the FFmpeg memory decoder behind the optional media
|
|
23
|
+
* test exercises the FFmpeg memory decoder behind the optional media link
|
|
24
|
+
* feature.
|
|
25
25
|
* Stored as base64 because the test work directory only takes text files. */
|
|
26
26
|
const fixtureDir = join(dirname(fileURLToPath(import.meta.url)), "fixtures");
|
|
27
27
|
const oggFixture = join(fixtureDir, "tiny-ogg.b64");
|
|
@@ -271,7 +271,7 @@ describe.skipIf(!guiAvailable)("gui extension — Web Audio", () => {
|
|
|
271
271
|
expect(value("ramp")).toBe("0.000:0.500:0.500");
|
|
272
272
|
expect(value("clock")).toBe("0.0027");
|
|
273
273
|
});
|
|
274
|
-
it.skipIf(!mediaAvailable || OGG_BASE64.length === 0)("decodes compressed audio through the media
|
|
274
|
+
it.skipIf(!mediaAvailable || OGG_BASE64.length === 0)("decodes compressed audio through the media link feature", () => {
|
|
275
275
|
const { value } = harness.compileAndRun("audio-media", `
|
|
276
276
|
import { Buffer } from "buffer";
|
|
277
277
|
|
|
@@ -286,7 +286,7 @@ describe.skipIf(!guiAvailable)("gui extension — Web Audio", () => {
|
|
|
286
286
|
(decoded.length > 50));
|
|
287
287
|
}
|
|
288
288
|
main();
|
|
289
|
-
`, { extensions: [
|
|
289
|
+
`, { extensions: [nodeExtension], console: true });
|
|
290
290
|
expect(value("bytes")).toBe("2707");
|
|
291
291
|
expect(value("ogg")).toBe("1:48000:true");
|
|
292
292
|
});
|