xbintsc 0.5.31 → 0.5.36
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/README.md +25 -16
- package/README.zh-CN.md +10 -8
- package/dist/scripts/check-version.d.ts +27 -0
- package/dist/scripts/check-version.js +71 -0
- package/dist/scripts/check-version.js.map +1 -0
- package/dist/scripts/package-platform.d.ts +58 -0
- package/dist/scripts/package-platform.js +142 -0
- package/dist/scripts/package-platform.js.map +1 -0
- package/dist/scripts/verify-platform-package.d.ts +34 -0
- package/dist/scripts/verify-platform-package.js +161 -0
- package/dist/scripts/verify-platform-package.js.map +1 -0
- package/dist/src/binder/references.js +14 -1
- package/dist/src/binder/references.js.map +1 -1
- package/dist/src/cli/help.d.ts +1 -1
- package/dist/src/cli/main.js +3 -1
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/codegen/generator/module.d.ts +1 -0
- package/dist/src/codegen/generator/module.js +54 -0
- package/dist/src/codegen/generator/module.js.map +1 -1
- package/dist/src/codegen/generator/statements/variables.js +6 -4
- package/dist/src/codegen/generator/statements/variables.js.map +1 -1
- package/dist/src/driver/runtime-lib.d.ts +29 -4
- package/dist/src/driver/runtime-lib.js +68 -10
- package/dist/src/driver/runtime-lib.js.map +1 -1
- package/dist/src/driver/version.d.ts +1 -1
- package/dist/src/driver/version.js +1 -1
- package/dist/src/extensions/gui/css.d.ts +26 -0
- package/dist/src/extensions/gui/css.js +100 -0
- package/dist/src/extensions/gui/css.js.map +1 -0
- package/dist/src/extensions/gui/html.js +9 -2
- package/dist/src/extensions/gui/html.js.map +1 -1
- package/dist/src/extensions/gui/index.js +22 -7
- package/dist/src/extensions/gui/index.js.map +1 -1
- package/dist/src/extensions/gui/three.d.ts +16 -0
- package/dist/src/extensions/gui/three.js +22 -0
- package/dist/src/extensions/gui/three.js.map +1 -0
- package/dist/src/extensions/media/index.d.ts +6 -5
- package/dist/src/extensions/media/index.js +15 -16
- package/dist/src/extensions/media/index.js.map +1 -1
- package/dist/src/parser/context.d.ts +41 -0
- package/dist/src/parser/context.js +89 -4
- package/dist/src/parser/context.js.map +1 -1
- package/dist/src/parser/literals.js +6 -12
- package/dist/src/parser/literals.js.map +1 -1
- package/dist/tests/driver/platform-package.test.d.ts +1 -0
- package/dist/tests/driver/platform-package.test.js +49 -0
- package/dist/tests/driver/platform-package.test.js.map +1 -0
- package/dist/tests/driver/runtime-lib.test.js +51 -4
- package/dist/tests/driver/runtime-lib.test.js.map +1 -1
- package/dist/tests/e2e/compile-builtins.test.js +24 -0
- package/dist/tests/e2e/compile-builtins.test.js.map +1 -1
- package/dist/tests/e2e/compile-objects-classes.test.js +23 -0
- package/dist/tests/e2e/compile-objects-classes.test.js.map +1 -1
- package/dist/tests/e2e/gui-audio.test.d.ts +14 -0
- package/dist/tests/e2e/gui-audio.test.js +287 -0
- package/dist/tests/e2e/gui-audio.test.js.map +1 -0
- package/dist/tests/e2e/gui-browser.test.js +1 -1
- package/dist/tests/e2e/gui-browser.test.js.map +1 -1
- package/dist/tests/e2e/gui-effects.test.d.ts +6 -0
- package/dist/tests/e2e/gui-effects.test.js +262 -0
- package/dist/tests/e2e/gui-effects.test.js.map +1 -0
- package/dist/tests/e2e/gui-example-webgl.test.d.ts +10 -0
- package/dist/tests/e2e/gui-example-webgl.test.js +75 -0
- package/dist/tests/e2e/gui-example-webgl.test.js.map +1 -0
- package/dist/tests/e2e/gui-example-webgl2.test.d.ts +8 -0
- package/dist/tests/e2e/gui-example-webgl2.test.js +72 -0
- package/dist/tests/e2e/gui-example-webgl2.test.js.map +1 -0
- package/dist/tests/e2e/gui-helpers.d.ts +7 -0
- package/dist/tests/e2e/gui-helpers.js +1 -0
- package/dist/tests/e2e/gui-helpers.js.map +1 -1
- package/dist/tests/e2e/gui-layout.test.js +48 -0
- package/dist/tests/e2e/gui-layout.test.js.map +1 -1
- package/dist/tests/e2e/gui-media.test.js +83 -4
- package/dist/tests/e2e/gui-media.test.js.map +1 -1
- package/dist/tests/e2e/gui-style.test.js +55 -0
- package/dist/tests/e2e/gui-style.test.js.map +1 -1
- package/dist/tests/e2e/gui-webgl.test.d.ts +11 -0
- package/dist/tests/e2e/gui-webgl.test.js +437 -0
- package/dist/tests/e2e/gui-webgl.test.js.map +1 -0
- package/dist/tests/e2e/gui-webgl2-3d.test.d.ts +4 -0
- package/dist/tests/e2e/gui-webgl2-3d.test.js +264 -0
- package/dist/tests/e2e/gui-webgl2-3d.test.js.map +1 -0
- package/dist/tests/e2e/gui-webgl2-blit.test.d.ts +10 -0
- package/dist/tests/e2e/gui-webgl2-blit.test.js +262 -0
- package/dist/tests/e2e/gui-webgl2-blit.test.js.map +1 -0
- package/dist/tests/e2e/gui-webgl2-formats.test.d.ts +6 -0
- package/dist/tests/e2e/gui-webgl2-formats.test.js +395 -0
- package/dist/tests/e2e/gui-webgl2-formats.test.js.map +1 -0
- package/dist/tests/e2e/gui-webgl2-mrt.test.d.ts +4 -0
- package/dist/tests/e2e/gui-webgl2-mrt.test.js +105 -0
- package/dist/tests/e2e/gui-webgl2-mrt.test.js.map +1 -0
- package/dist/tests/e2e/gui-webgl2-ubo.test.d.ts +8 -0
- package/dist/tests/e2e/gui-webgl2-ubo.test.js +112 -0
- package/dist/tests/e2e/gui-webgl2-ubo.test.js.map +1 -0
- package/dist/tests/e2e/gui-webgl2.test.d.ts +10 -0
- package/dist/tests/e2e/gui-webgl2.test.js +282 -0
- package/dist/tests/e2e/gui-webgl2.test.js.map +1 -0
- package/dist/tests/extensions/gui-index.test.js +1 -0
- package/dist/tests/extensions/gui-index.test.js.map +1 -1
- package/dist/tests/extensions/gui.test.js +41 -0
- package/dist/tests/extensions/gui.test.js.map +1 -1
- package/dist/tests/extensions/media.test.js +8 -3
- package/dist/tests/extensions/media.test.js.map +1 -1
- package/dist/tests/parser/expressions.test.js +30 -0
- package/dist/tests/parser/expressions.test.js.map +1 -1
- package/dist/tests/platform-tarball.test.d.ts +1 -0
- package/dist/tests/platform-tarball.test.js +111 -0
- package/dist/tests/platform-tarball.test.js.map +1 -0
- package/dist/tests/version.test.js +6 -0
- package/dist/tests/version.test.js.map +1 -1
- package/doc/ai/contributing.md +11 -0
- package/doc/ai/extensions.md +35 -12
- package/doc/ai/troubleshooting.md +17 -11
- package/doc/ai/zh-CN/contributing.md +9 -0
- package/doc/ai/zh-CN/extensions.md +30 -10
- package/doc/ai/zh-CN/troubleshooting.md +14 -8
- package/doc/gui/api.md +63 -14
- package/doc/gui/build.md +79 -16
- package/doc/gui/canvas.md +11 -3
- package/doc/gui/dom.md +35 -17
- package/doc/gui/known-issues.md +57 -24
- package/doc/gui/layout.md +18 -0
- package/doc/gui/media.md +21 -13
- package/doc/gui/rendering.md +50 -3
- package/doc/gui/webgl.md +315 -0
- package/doc/gui.md +113 -18
- package/doc/npm-package.md +59 -29
- package/doc/requirements.md +24 -11
- package/doc/zh-CN/gui/api.md +53 -11
- package/doc/zh-CN/gui/build.md +70 -16
- package/doc/zh-CN/gui/canvas.md +9 -2
- package/doc/zh-CN/gui/dom.md +22 -7
- package/doc/zh-CN/gui/known-issues.md +45 -19
- package/doc/zh-CN/gui/layout.md +14 -0
- package/doc/zh-CN/gui/media.md +18 -11
- package/doc/zh-CN/gui/rendering.md +41 -4
- package/doc/zh-CN/gui/webgl.md +121 -0
- package/doc/zh-CN/gui.md +91 -15
- package/doc/zh-CN/npm-package.md +48 -24
- package/doc/zh-CN/requirements.md +16 -7
- package/llms.txt +2 -0
- package/package.json +17 -1
- package/runtime/ext_gui/audio.cpp +365 -153
- package/runtime/ext_gui/audio_buffer.cpp +166 -0
- package/runtime/ext_gui/audio_buffer.h +37 -0
- package/runtime/ext_gui/audio_decode.cpp +219 -0
- package/runtime/ext_gui/audio_decode.h +39 -0
- package/runtime/ext_gui/audio_device.cpp +87 -0
- package/runtime/ext_gui/audio_effects.cpp +163 -0
- package/runtime/ext_gui/audio_effects.h +25 -0
- package/runtime/ext_gui/audio_internal.h +30 -0
- package/runtime/ext_gui/audio_mixer.cpp +494 -0
- package/runtime/ext_gui/audio_mixer.h +238 -0
- package/runtime/ext_gui/audio_param.cpp +104 -0
- package/runtime/ext_gui/audio_param_object.cpp +155 -0
- package/runtime/ext_gui/browser.cpp +50 -14
- package/runtime/ext_gui/canvas.cpp +3 -18
- package/runtime/ext_gui/canvas_internal.h +10 -0
- package/runtime/ext_gui/canvas_raster.cpp +60 -0
- package/runtime/ext_gui/clip_values.cpp +246 -0
- package/runtime/ext_gui/css.cpp +94 -0
- package/runtime/ext_gui/css.h +22 -1
- package/runtime/ext_gui/css_match.cpp +3 -0
- package/runtime/ext_gui/css_selector.cpp +30 -3
- package/runtime/ext_gui/css_sheet.cpp +89 -45
- package/runtime/ext_gui/document.cpp +4 -1
- package/runtime/ext_gui/document.h +2 -0
- package/runtime/ext_gui/dom.h +16 -0
- package/runtime/ext_gui/dom_api.cpp +1 -0
- package/runtime/ext_gui/dom_api_canvas.cpp +17 -80
- package/runtime/ext_gui/dom_api_canvas_extra.cpp +130 -1
- package/runtime/ext_gui/dom_api_canvas_pending.cpp +41 -0
- package/runtime/ext_gui/dom_api_internal.h +275 -0
- package/runtime/ext_gui/dom_api_webgl.cpp +383 -0
- package/runtime/ext_gui/dom_api_webgl2.cpp +549 -0
- package/runtime/ext_gui/dom_api_webgl2_draw.cpp +269 -0
- package/runtime/ext_gui/dom_api_webgl_buffer.cpp +216 -0
- package/runtime/ext_gui/dom_api_webgl_compressed.cpp +167 -0
- package/runtime/ext_gui/dom_api_webgl_framebuffer.cpp +160 -0
- package/runtime/ext_gui/dom_api_webgl_rt.h +30 -0
- package/runtime/ext_gui/dom_api_webgl_shader.cpp +443 -0
- package/runtime/ext_gui/dom_api_webgl_source.cpp +161 -0
- package/runtime/ext_gui/dom_api_webgl_state.cpp +590 -0
- package/runtime/ext_gui/dom_api_webgl_texture.cpp +485 -0
- package/runtime/ext_gui/dom_api_webgl_ubo.cpp +81 -0
- package/runtime/ext_gui/effect_values.cpp +312 -0
- package/runtime/ext_gui/gradient_values.cpp +476 -0
- package/runtime/ext_gui/grid_values.cpp +230 -0
- package/runtime/ext_gui/gui.cpp +44 -9
- package/runtime/ext_gui/gui_canvas.cpp +50 -2
- package/runtime/ext_gui/gui_engine.h +36 -4
- package/runtime/ext_gui/gui_events.cpp +4 -1
- package/runtime/ext_gui/gui_media.cpp +1 -1
- package/runtime/ext_gui/gui_webgl.cpp +83 -0
- package/runtime/ext_gui/image_bitmap.cpp +28 -0
- package/runtime/ext_gui/image_bitmap.h +26 -0
- package/runtime/ext_gui/image_bitmap_browser.cpp +136 -0
- package/runtime/ext_gui/layout.cpp +21 -0
- package/runtime/ext_gui/layout_flow.cpp +81 -4
- package/runtime/ext_gui/layout_flow_internal.h +31 -0
- package/runtime/ext_gui/layout_grid.cpp +374 -0
- package/runtime/ext_gui/media.cpp +32 -0
- package/runtime/ext_gui/media.h +14 -1
- package/runtime/ext_gui/media_api.h +25 -2
- package/runtime/ext_gui/media_query.cpp +211 -0
- package/runtime/ext_gui/paint.cpp +111 -77
- package/runtime/ext_gui/paint.h +33 -3
- package/runtime/ext_gui/paint_background.cpp +229 -0
- package/runtime/ext_gui/paint_clip.cpp +268 -0
- package/runtime/ext_gui/paint_effects.cpp +324 -0
- package/runtime/ext_gui/paint_internal.h +85 -0
- package/runtime/ext_gui/renderer.cpp +8 -31
- package/runtime/ext_gui/renderer_clip.cpp +196 -0
- package/runtime/ext_gui/renderer_image.cpp +13 -8
- package/runtime/ext_gui/renderer_internal.h +15 -8
- package/runtime/ext_gui/renderer_text.cpp +6 -31
- package/runtime/ext_gui/style.cpp +343 -20
- package/runtime/ext_gui/style.h +144 -3
- package/runtime/ext_gui/style_print.cpp +134 -1
- package/runtime/ext_gui/style_values.cpp +152 -126
- package/runtime/ext_gui/style_values_internal.h +35 -0
- package/runtime/ext_gui/webgl.h +600 -0
- package/runtime/ext_gui/webgl2_constants.h +274 -0
- package/runtime/ext_gui/webgl_blit.cpp +95 -0
- package/runtime/ext_gui/webgl_buffer.cpp +480 -0
- package/runtime/ext_gui/webgl_buffer_objects.cpp +270 -0
- package/runtime/ext_gui/webgl_clear.cpp +142 -0
- package/runtime/ext_gui/webgl_compressed.cpp +180 -0
- package/runtime/ext_gui/webgl_constants.h +317 -0
- package/runtime/ext_gui/webgl_context.cpp +551 -0
- package/runtime/ext_gui/webgl_draw.cpp +560 -0
- package/runtime/ext_gui/webgl_draw_buffers.cpp +75 -0
- package/runtime/ext_gui/webgl_glsl.h +165 -0
- package/runtime/ext_gui/webgl_glsl_compile.cpp +437 -0
- package/runtime/ext_gui/webgl_glsl_rewrite.cpp +367 -0
- package/runtime/ext_gui/webgl_glsl_scan.cpp +590 -0
- package/runtime/ext_gui/webgl_glsl_scan_block.cpp +126 -0
- package/runtime/ext_gui/webgl_glsl_tokens.h +28 -0
- package/runtime/ext_gui/webgl_msl.cpp +62 -0
- package/runtime/ext_gui/webgl_msl.h +33 -0
- package/runtime/ext_gui/webgl_pipeline.cpp +326 -0
- package/runtime/ext_gui/webgl_program_blocks.cpp +58 -0
- package/runtime/ext_gui/webgl_program_internal.h +24 -0
- package/runtime/ext_gui/webgl_shader.cpp +594 -0
- package/runtime/ext_gui/webgl_state.cpp +228 -0
- package/runtime/ext_gui/webgl_texture.cpp +420 -0
- package/runtime/ext_gui/webgl_texture_3d.cpp +215 -0
- package/runtime/ext_gui/webgl_uniform.cpp +167 -0
- package/runtime/ext_gui/webgl_uniform_block.h +31 -0
- package/runtime/ext_gui/webgl_webgl2.cpp +277 -0
- package/runtime/ext_media/decode_audio.cpp +308 -0
- package/runtime/ext_media/media.cpp +1 -1
- package/runtime/ext_media/media_bridge.c +11 -3
- package/runtime/rt.h +17 -0
- package/runtime/rt_internal.h +1 -0
- package/runtime/xt_array_buffer.c +30 -0
- package/runtime/xt_containers/access.inc +8 -0
- package/runtime/xt_regex/api.inc +2 -0
- package/runtime/xt_regex/matcher.inc +16 -3
- package/runtime/xt_regex/parser.inc +8 -2
- package/runtime/xt_regex/types.inc +3 -0
- package/runtime/xt_stdlib2/regexp-match.inc +60 -21
- package/runtime/xt_stdlib2/regexp.inc +1 -0
- package/runtime/xt_typed_array/elements.inc +13 -0
- package/runtime/xt_typed_array.c +1 -1
- package/scripts/build-gui.ts +90 -3
- package/scripts/build-media.ts +335 -62
- package/scripts/build-runtime.ts +21 -16
- package/scripts/check-version.ts +39 -9
- package/scripts/package-platform.ts +183 -0
- package/scripts/set-platform-version.ts +62 -0
- package/scripts/setup-vs-toolchain.ps1 +152 -0
- package/scripts/verify-platform-package.ts +182 -0
- package/src/binder/references.ts +13 -1
- package/src/cli/main.ts +5 -1
- package/src/codegen/generator/module.ts +50 -0
- package/src/codegen/generator/statements/variables.ts +6 -3
- package/src/driver/runtime-lib.ts +73 -9
- package/src/driver/version.ts +1 -1
- package/src/extensions/gui/css.ts +113 -0
- package/src/extensions/gui/html.ts +9 -2
- package/src/extensions/gui/index.ts +22 -7
- package/src/extensions/gui/three.ts +25 -0
- package/src/extensions/media/index.ts +16 -18
- package/src/parser/context.ts +99 -4
- package/src/parser/literals.ts +6 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-lib.js","sourceRoot":"","sources":["../../../src/driver/runtime-lib.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"runtime-lib.js","sourceRoot":"","sources":["../../../src/driver/runtime-lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D,uDAAuD;AACvD,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAU,CAAC;AAEjD;;;GAGG;AACH,SAAS,qBAAqB;IAC5B,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB,EAAE,OAAe,YAAY,EAAE;IACvF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,GAAG,GAAG,WAAW,CAAC;IACtB,SAAS,CAAC;QACR,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,qBAAqB,EAAE,EAAE,GAAG,sBAAsB,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,6DAA6D;AAC7D,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAA0B,cAAc,EAAE;IACtE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAE,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,OAA0B,cAAc,EAAE;IAE1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC;YAChD,IAAI,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
* `main`/`master` only (see `.githooks/pre-commit`), so feature branches never
|
|
10
10
|
* change this line and merging two of them cannot conflict here.
|
|
11
11
|
*/
|
|
12
|
-
export const COMPILER_VERSION = "0.5.
|
|
12
|
+
export const COMPILER_VERSION = "0.5.36";
|
|
13
13
|
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GUI extension: inline external stylesheets into the HTML asset.
|
|
3
|
+
*
|
|
4
|
+
* The engine's CSS cascade only reads `<style>` elements (`document.cpp` skips
|
|
5
|
+
* `<link rel="stylesheet">` because resolving it would need I/O at runtime).
|
|
6
|
+
* A page that ships its CSS as a separate file therefore loses *all* styling
|
|
7
|
+
* once it is compiled. The bundler, unlike the runtime, can read files, so this
|
|
8
|
+
* loader rewrites every local stylesheet link (and every local `@import` inside
|
|
9
|
+
* it) into an inline `<style>` block. The page keeps its author-time structure
|
|
10
|
+
* and the compiled binary has no runtime file dependency.
|
|
11
|
+
*
|
|
12
|
+
* Remote URLs are left untouched: there is no network-backed style loader, so
|
|
13
|
+
* the engine simply ignores them, exactly as before.
|
|
14
|
+
*/
|
|
15
|
+
/** A resolved local stylesheet: its inlined text is returned to the caller. */
|
|
16
|
+
export interface InlinedStylesheets {
|
|
17
|
+
readonly html: string;
|
|
18
|
+
/** Every stylesheet file that was read (for bundler cache invalidation). */
|
|
19
|
+
readonly dependencies: readonly string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Replace `<link rel="stylesheet">` elements with inline `<style>` blocks,
|
|
23
|
+
* recursively resolving local `@import` rules. Returns the rewritten HTML and
|
|
24
|
+
* the list of stylesheet files it read.
|
|
25
|
+
*/
|
|
26
|
+
export declare function inlineStylesheets(htmlFile: string, html: string): InlinedStylesheets;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GUI extension: inline external stylesheets into the HTML asset.
|
|
3
|
+
*
|
|
4
|
+
* The engine's CSS cascade only reads `<style>` elements (`document.cpp` skips
|
|
5
|
+
* `<link rel="stylesheet">` because resolving it would need I/O at runtime).
|
|
6
|
+
* A page that ships its CSS as a separate file therefore loses *all* styling
|
|
7
|
+
* once it is compiled. The bundler, unlike the runtime, can read files, so this
|
|
8
|
+
* loader rewrites every local stylesheet link (and every local `@import` inside
|
|
9
|
+
* it) into an inline `<style>` block. The page keeps its author-time structure
|
|
10
|
+
* and the compiled binary has no runtime file dependency.
|
|
11
|
+
*
|
|
12
|
+
* Remote URLs are left untouched: there is no network-backed style loader, so
|
|
13
|
+
* the engine simply ignores them, exactly as before.
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
16
|
+
import { dirname, resolve } from "node:path";
|
|
17
|
+
/** Read a stylesheet as a byte string (one code unit per UTF-8 byte).
|
|
18
|
+
*
|
|
19
|
+
* The bundler hands asset loaders the same shape (`sourceTextBytes`), so CSS
|
|
20
|
+
* must join the HTML *as bytes*. Decoding it to UTF-16 and putting that into
|
|
21
|
+
* the byte-string document would make codegen encode the HTML's own bytes a
|
|
22
|
+
* second time. `toString("latin1")` is exactly the byte-string mapping; the
|
|
23
|
+
* self-hosted runtime's `readFileSync` already returns bytes. */
|
|
24
|
+
function readCssText(file) {
|
|
25
|
+
const data = readFileSync(file);
|
|
26
|
+
return typeof data === "string" ? data : data.toString("latin1");
|
|
27
|
+
}
|
|
28
|
+
/** True for a URL the compiler cannot read (http:, data:, //host, …). */
|
|
29
|
+
const URL_SPEC = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
|
|
30
|
+
/** Read one attribute from an element's attribute text. */
|
|
31
|
+
function attribute(attributes, name) {
|
|
32
|
+
const pattern = new RegExp(`(?:^|\\s)${name}\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s"'=<>\`]+))`, "i");
|
|
33
|
+
const match = pattern.exec(attributes);
|
|
34
|
+
if (!match)
|
|
35
|
+
return undefined;
|
|
36
|
+
return match[1] ?? match[2] ?? match[3];
|
|
37
|
+
}
|
|
38
|
+
/** Strip a `?query` / `#fragment`, then resolve against a base file. */
|
|
39
|
+
function localPath(baseFile, specifier) {
|
|
40
|
+
if (specifier === "" || URL_SPEC.test(specifier))
|
|
41
|
+
return undefined;
|
|
42
|
+
const clean = specifier.split(/[?#]/, 1)[0] ?? specifier;
|
|
43
|
+
return resolve(dirname(baseFile), clean);
|
|
44
|
+
}
|
|
45
|
+
/** True when the `rel` attribute lists `stylesheet` among its tokens. */
|
|
46
|
+
function isStylesheet(rel) {
|
|
47
|
+
if (rel === undefined)
|
|
48
|
+
return false;
|
|
49
|
+
return rel.toLowerCase().split(/\s+/).includes("stylesheet");
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Inline every local `@import` in `css`. Imports are resolved relative to
|
|
53
|
+
* `cssFile`, which is the file the rules came from (not the HTML page), so a
|
|
54
|
+
* partial that imports a sibling keeps working. A cycle is cut at the repeated
|
|
55
|
+
* file rather than recursing forever.
|
|
56
|
+
*/
|
|
57
|
+
function inlineImports(css, cssFile, dependencies, stack) {
|
|
58
|
+
/* `@import url("./x.css") screen;` and `@import "./x.css";` are the two
|
|
59
|
+
* spellings the CSS parser accepts. Match one at a time so a single bad
|
|
60
|
+
* import cannot swallow the rest of the sheet. */
|
|
61
|
+
const pattern = /@import\s+(?:url\(\s*(?:"([^"]*)"|'([^']*)'|([^'")\s]+))\s*\)|"([^"]*)"|'([^']*)')\s*[^;]*;/gi;
|
|
62
|
+
return css.replace(pattern, (match, a, b, c, d, e) => {
|
|
63
|
+
const specifier = a ?? b ?? c ?? d ?? e;
|
|
64
|
+
if (specifier === undefined)
|
|
65
|
+
return "";
|
|
66
|
+
const file = localPath(cssFile, specifier);
|
|
67
|
+
if (file === undefined)
|
|
68
|
+
return match;
|
|
69
|
+
if (stack.includes(file))
|
|
70
|
+
return "";
|
|
71
|
+
if (!existsSync(file))
|
|
72
|
+
return match;
|
|
73
|
+
dependencies.add(file);
|
|
74
|
+
const nested = readCssText(file);
|
|
75
|
+
return inlineImports(nested, file, dependencies, [...stack, file]);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Replace `<link rel="stylesheet">` elements with inline `<style>` blocks,
|
|
80
|
+
* recursively resolving local `@import` rules. Returns the rewritten HTML and
|
|
81
|
+
* the list of stylesheet files it read.
|
|
82
|
+
*/
|
|
83
|
+
export function inlineStylesheets(htmlFile, html) {
|
|
84
|
+
const dependencies = new Set();
|
|
85
|
+
const rewritten = html.replace(/<link\b([^>]*)>/gi, (match, attributes) => {
|
|
86
|
+
if (!isStylesheet(attribute(attributes, "rel")))
|
|
87
|
+
return match;
|
|
88
|
+
const href = attribute(attributes, "href");
|
|
89
|
+
if (href === undefined)
|
|
90
|
+
return match;
|
|
91
|
+
const file = localPath(htmlFile, href);
|
|
92
|
+
if (file === undefined || !existsSync(file))
|
|
93
|
+
return match;
|
|
94
|
+
dependencies.add(file);
|
|
95
|
+
const css = inlineImports(readCssText(file), file, dependencies, [file]);
|
|
96
|
+
return `<style data-xt-href="${href.replace(/"/g, """)}">\n${css}\n</style>`;
|
|
97
|
+
});
|
|
98
|
+
return { html: rewritten, dependencies: [...dependencies] };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../../../src/extensions/gui/css.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ import { SourceFile } from "../../diagnostics/source.js";
|
|
|
28
28
|
import { Parser } from "../../parser/parser.js";
|
|
29
29
|
import { artifactPath } from "../../canonical.js";
|
|
30
30
|
import { hashString } from "../../driver/cache.js";
|
|
31
|
+
import { inlineStylesheets } from "./css.js";
|
|
31
32
|
/** Matches an inline `<script …>body</script>` element, attributes included. */
|
|
32
33
|
const SCRIPT_RE = /<script\b([^>]*)>([\s\S]*?)<\/script\s*>/gi;
|
|
33
34
|
/** `<script src>` targets that are URLs (http:, data:, //host, …). */
|
|
@@ -161,7 +162,10 @@ export function loadHtmlAsset(path, source) {
|
|
|
161
162
|
const imports = [];
|
|
162
163
|
const importedText = new Set();
|
|
163
164
|
const bound = new Set();
|
|
164
|
-
|
|
165
|
+
/* The engine's cascade only reads `<style>` elements, so a linked stylesheet
|
|
166
|
+
* would be dropped at runtime. Inline it (and its `@import`s) now. */
|
|
167
|
+
const styles = inlineStylesheets(path, source);
|
|
168
|
+
const html = styles.html.replace(SCRIPT_RE, (match, attributes, inlineBody) => {
|
|
165
169
|
if (!isExecutable(attribute(attributes, "type"), attribute(attributes, "lang")))
|
|
166
170
|
return match;
|
|
167
171
|
const src = attribute(attributes, "src");
|
|
@@ -211,7 +215,10 @@ export function loadHtmlAsset(path, source) {
|
|
|
211
215
|
offset += part.length + 1;
|
|
212
216
|
}
|
|
213
217
|
parts.push(`export default ${JSON.stringify(html)};`);
|
|
214
|
-
const result = {
|
|
218
|
+
const result = {
|
|
219
|
+
moduleSource: parts.join("\n"),
|
|
220
|
+
...(styles.dependencies.length > 0 ? { dependencies: styles.dependencies } : {}),
|
|
221
|
+
};
|
|
215
222
|
return sourceRanges.length > 0 ? { ...result, sourceRanges } : result;
|
|
216
223
|
}
|
|
217
224
|
//# sourceMappingURL=html.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../../../src/extensions/gui/html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EACL,YAAY,EACZ,UAAU,GAMX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../../../src/extensions/gui/html.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,9 +21,10 @@
|
|
|
21
21
|
* needs to bind the top-level functions.
|
|
22
22
|
*/
|
|
23
23
|
import { join } from "node:path";
|
|
24
|
-
import {
|
|
25
|
-
import { findRuntimeLibrary } from "../../driver/runtime-lib.js";
|
|
24
|
+
import { platformSlug } from "../../driver/paths.js";
|
|
25
|
+
import { findRuntimeLibrary, runtimeLibDir } from "../../driver/runtime-lib.js";
|
|
26
26
|
import { loadHtmlAsset } from "./html.js";
|
|
27
|
+
import { loadScriptAsset } from "./three.js";
|
|
27
28
|
/** Top-level `gui` module bindings. */
|
|
28
29
|
const guiModule = {
|
|
29
30
|
namespace: "gui",
|
|
@@ -73,6 +74,19 @@ const hostTypes = [
|
|
|
73
74
|
"ReadableStream",
|
|
74
75
|
"WebGLRenderingContext",
|
|
75
76
|
"WebGL2RenderingContext",
|
|
77
|
+
"WebGLBuffer",
|
|
78
|
+
"WebGLTexture",
|
|
79
|
+
"WebGLShader",
|
|
80
|
+
"WebGLProgram",
|
|
81
|
+
"WebGLFramebuffer",
|
|
82
|
+
"WebGLRenderbuffer",
|
|
83
|
+
"WebGLUniformLocation",
|
|
84
|
+
"WebGLActiveInfo",
|
|
85
|
+
"WebGLVertexArrayObject",
|
|
86
|
+
"WebGLSampler",
|
|
87
|
+
"WebGLQuery",
|
|
88
|
+
"WebGLSync",
|
|
89
|
+
"WebGLTransformFeedback",
|
|
76
90
|
"XRWebGLLayer",
|
|
77
91
|
"XRWebGLBinding",
|
|
78
92
|
];
|
|
@@ -83,7 +97,7 @@ const browserGlobals = {
|
|
|
83
97
|
navigator: { symbol: "xt_browser_navigator" },
|
|
84
98
|
localStorage: { symbol: "xt_browser_local_storage" },
|
|
85
99
|
__THREE_DEVTOOLS__: { symbol: "xt_browser_missing" },
|
|
86
|
-
createImageBitmap: { symbol: "
|
|
100
|
+
createImageBitmap: { symbol: "xt_browser_create_image_bitmap" },
|
|
87
101
|
};
|
|
88
102
|
for (const type of hostTypes) {
|
|
89
103
|
browserGlobals[type] = { symbol: "xt_browser_type", argument: type };
|
|
@@ -91,7 +105,7 @@ for (const type of hostTypes) {
|
|
|
91
105
|
/** Absolute path to the per-platform prebuilt GUI archive (`gui.a`, or
|
|
92
106
|
* `gui.lib` with the MSVC ABI on Windows). */
|
|
93
107
|
function guiArchive() {
|
|
94
|
-
return join(
|
|
108
|
+
return join(runtimeLibDir(), "gui.a");
|
|
95
109
|
}
|
|
96
110
|
export const guiExtension = {
|
|
97
111
|
name: "gui",
|
|
@@ -100,7 +114,8 @@ export const guiExtension = {
|
|
|
100
114
|
const archive = findRuntimeLibrary("gui");
|
|
101
115
|
if (archive === undefined) {
|
|
102
116
|
throw new Error(`GUI native library not found at ${guiArchive()} (or gui.lib).\n` +
|
|
103
|
-
`
|
|
117
|
+
`The optional @xbintsc/${platformSlug()} package ships it: reinstall xbintsc ` +
|
|
118
|
+
`without --omit=optional, or build it from a source checkout (see doc/gui.md).`);
|
|
104
119
|
}
|
|
105
120
|
return [archive];
|
|
106
121
|
},
|
|
@@ -177,7 +192,7 @@ export const guiExtension = {
|
|
|
177
192
|
}),
|
|
178
193
|
/** Browser globals (`window`, `document`, the DOM type names). */
|
|
179
194
|
globalValues: () => browserGlobals,
|
|
180
|
-
/** Rewrite imported `.html` assets
|
|
181
|
-
assetLoaders: () => ({ ".html": loadHtmlAsset }),
|
|
195
|
+
/** Rewrite imported `.html` assets and patch three.js's shader unroller. */
|
|
196
|
+
assetLoaders: () => ({ ".html": loadHtmlAsset, ".js": loadScriptAsset, ".mjs": loadScriptAsset }),
|
|
182
197
|
};
|
|
183
198
|
//# sourceMappingURL=index.js.map
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/gui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GUI extension: three.js shader-unroller compatibility.
|
|
3
|
+
*
|
|
4
|
+
* three.js's `WebGLRenderer` runs unchanged on this engine's real WebGL 2
|
|
5
|
+
* backend; no Canvas2D fallback (and no renderer wrapper) is needed. The one
|
|
6
|
+
* shader-side workaround is its `unrollLoops` pass: its lazy global regex does
|
|
7
|
+
* not behave reliably on this runtime, and the shader rewriter already defines
|
|
8
|
+
* `UNROLLED_LOOP_INDEX` and keeps the numeric `for` loop. Disabling the pattern
|
|
9
|
+
* therefore leaves valid GLSL instead of a half-expanded loop.
|
|
10
|
+
*/
|
|
11
|
+
import type { AssetLoadResult } from "../registry.js";
|
|
12
|
+
/**
|
|
13
|
+
* Patch a three.js ES module so its shaders keep their light loops. Any other
|
|
14
|
+
* `.js` asset is returned verbatim.
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadScriptAsset(path: string, source: string): AssetLoadResult;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GUI extension: three.js shader-unroller compatibility.
|
|
3
|
+
*
|
|
4
|
+
* three.js's `WebGLRenderer` runs unchanged on this engine's real WebGL 2
|
|
5
|
+
* backend; no Canvas2D fallback (and no renderer wrapper) is needed. The one
|
|
6
|
+
* shader-side workaround is its `unrollLoops` pass: its lazy global regex does
|
|
7
|
+
* not behave reliably on this runtime, and the shader rewriter already defines
|
|
8
|
+
* `UNROLLED_LOOP_INDEX` and keeps the numeric `for` loop. Disabling the pattern
|
|
9
|
+
* therefore leaves valid GLSL instead of a half-expanded loop.
|
|
10
|
+
*/
|
|
11
|
+
/** three.js's unroll-loop regex declaration (r150–r16x naming). */
|
|
12
|
+
const LOOP_PATTERN = /const unrollLoopPattern = [^\n]*;/;
|
|
13
|
+
/**
|
|
14
|
+
* Patch a three.js ES module so its shaders keep their light loops. Any other
|
|
15
|
+
* `.js` asset is returned verbatim.
|
|
16
|
+
*/
|
|
17
|
+
export function loadScriptAsset(path, source) {
|
|
18
|
+
return {
|
|
19
|
+
moduleSource: source.replace(LOOP_PATTERN, "const unrollLoopPattern = /__xt_never_match__/;"),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=three.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"three.js","sourceRoot":"","sources":["../../../../src/extensions/gui/three.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,mEAAmE;AACnE,MAAM,YAAY,GAAG,mCAAmC,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAc;IAC1D,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,iDAAiD,CAAC;KAC9F,CAAC;AACJ,CAAC"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* so a program that only needs windows and HTML/CSS does not pay for a media
|
|
7
7
|
* stack it never uses. This extension supplies the decoding half:
|
|
8
8
|
*
|
|
9
|
-
* - `media.a` (
|
|
10
|
-
*
|
|
9
|
+
* - `media.a` (`media.lib` with the MSVC ABI on Windows, built by
|
|
10
|
+
* `npm run media`) contains the FFmpeg-linked player from
|
|
11
|
+
* `runtime/ext_media/media.cpp` and the static FFmpeg libraries;
|
|
11
12
|
* - `runtime/ext_media/media_bridge.c` is compiled and linked directly. Its
|
|
12
13
|
* constructor installs the player table into the GUI engine and references
|
|
13
14
|
* the backend entry points, which makes the linker extract the archive
|
|
@@ -19,9 +20,9 @@
|
|
|
19
20
|
*
|
|
20
21
|
* xbintsc run app.ts --ext gui,media
|
|
21
22
|
*
|
|
22
|
-
* The archive is
|
|
23
|
-
*
|
|
24
|
-
*
|
|
23
|
+
* The archive is built for every host platform. On Windows FFmpeg is compiled
|
|
24
|
+
* with the MSVC-targeting clang-cl so its COFF objects and static CRT match
|
|
25
|
+
* `gui.lib`; see `doc/gui/build.md`.
|
|
25
26
|
*/
|
|
26
27
|
import type { Extension } from "../registry.js";
|
|
27
28
|
export declare const mediaExtension: Extension;
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* so a program that only needs windows and HTML/CSS does not pay for a media
|
|
7
7
|
* stack it never uses. This extension supplies the decoding half:
|
|
8
8
|
*
|
|
9
|
-
* - `media.a` (
|
|
10
|
-
*
|
|
9
|
+
* - `media.a` (`media.lib` with the MSVC ABI on Windows, built by
|
|
10
|
+
* `npm run media`) contains the FFmpeg-linked player from
|
|
11
|
+
* `runtime/ext_media/media.cpp` and the static FFmpeg libraries;
|
|
11
12
|
* - `runtime/ext_media/media_bridge.c` is compiled and linked directly. Its
|
|
12
13
|
* constructor installs the player table into the GUI engine and references
|
|
13
14
|
* the backend entry points, which makes the linker extract the archive
|
|
@@ -19,16 +20,16 @@
|
|
|
19
20
|
*
|
|
20
21
|
* xbintsc run app.ts --ext gui,media
|
|
21
22
|
*
|
|
22
|
-
* The archive is
|
|
23
|
-
*
|
|
24
|
-
*
|
|
23
|
+
* The archive is built for every host platform. On Windows FFmpeg is compiled
|
|
24
|
+
* with the MSVC-targeting clang-cl so its COFF objects and static CRT match
|
|
25
|
+
* `gui.lib`; see `doc/gui/build.md`.
|
|
25
26
|
*/
|
|
26
27
|
import { join } from "node:path";
|
|
27
28
|
import { findRuntimeDir, platformSlug } from "../../driver/paths.js";
|
|
28
|
-
import { findRuntimeLibrary } from "../../driver/runtime-lib.js";
|
|
29
|
+
import { findRuntimeLibrary, runtimeLibDir } from "../../driver/runtime-lib.js";
|
|
29
30
|
/** Absolute path to the per-platform prebuilt media archive. */
|
|
30
31
|
function mediaArchive() {
|
|
31
|
-
return join(
|
|
32
|
+
return join(runtimeLibDir(), process.platform === "win32" ? "media.lib" : "media.a");
|
|
32
33
|
}
|
|
33
34
|
export const mediaExtension = {
|
|
34
35
|
name: "media",
|
|
@@ -41,20 +42,18 @@ export const mediaExtension = {
|
|
|
41
42
|
*/
|
|
42
43
|
runtimeSources: () => [join(findRuntimeDir(), "ext_media", "media_bridge.c")],
|
|
43
44
|
nativeObjects: () => {
|
|
44
|
-
if (process.platform === "win32") {
|
|
45
|
-
throw new Error("the media extension is not available on Windows yet: it needs an MSVC-compatible " +
|
|
46
|
-
"FFmpeg build (see doc/gui/known-issues.md). Build without --ext media; media " +
|
|
47
|
-
"elements then report an 'error' event.");
|
|
48
|
-
}
|
|
49
45
|
const archive = findRuntimeLibrary("media");
|
|
50
46
|
if (archive === undefined) {
|
|
51
|
-
throw new Error(`media native library not found at ${mediaArchive()} (or media.lib).\n` +
|
|
52
|
-
`
|
|
47
|
+
throw new Error(`media native library not found at ${mediaArchive()} (media.a or media.lib).\n` +
|
|
48
|
+
`The optional @xbintsc/${platformSlug()} package ships it: reinstall xbintsc ` +
|
|
49
|
+
`without --omit=optional, or build it with \`npm run media\` (see doc/gui/build.md).`);
|
|
53
50
|
}
|
|
54
51
|
return [archive];
|
|
55
52
|
},
|
|
56
53
|
/** `media.a` is C++ and FFmpeg itself needs libm; the GUI extension already
|
|
57
|
-
* contributes the C++ runtime and the OS frameworks.
|
|
58
|
-
|
|
54
|
+
* contributes the C++ runtime and the OS frameworks. On Windows the FFmpeg
|
|
55
|
+
* objects reference the Win32 crypto/COM services (`bcrypt`, `ole32`) and
|
|
56
|
+
* `user32`. */
|
|
57
|
+
linkerFlags: () => process.platform === "win32" ? ["-lbcrypt", "-lole32", "-luser32"] : ["-lm"],
|
|
59
58
|
};
|
|
60
59
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/media/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/media/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEhF,gEAAgE;AAChE,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAc;IACvC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,uEAAuE;IACpF,QAAQ,EAAE,CAAC,KAAK,CAAC;IACjB;;;;OAIG;IACH,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAC7E,aAAa,EAAE,GAAG,EAAE;QAClB,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,qCAAqC,YAAY,EAAE,4BAA4B;gBAC7E,yBAAyB,YAAY,EAAE,uCAAuC;gBAC9E,qFAAqF,CACxF,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IACD;;;mBAGe;IACf,WAAW,EAAE,GAAG,EAAE,CAChB,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;CAC/E,CAAC"}
|
|
@@ -11,11 +11,22 @@ import type { SourceFile } from "../diagnostics/source.js";
|
|
|
11
11
|
import { Scanner } from "../lexer/scanner.js";
|
|
12
12
|
import { Token, TokenKind } from "../lexer/token.js";
|
|
13
13
|
import type { Identifier, StringLiteral } from "../ast/nodes.js";
|
|
14
|
+
/**
|
|
15
|
+
* The template-literal context of the scanner at one point in the token
|
|
16
|
+
* stream. `frames` holds the brace depth of every open `${ … }` substitution
|
|
17
|
+
* (innermost last); `pendingOffset` is the `}` that must be re-read as template
|
|
18
|
+
* text before the next token is scanned.
|
|
19
|
+
*/
|
|
20
|
+
interface TemplateState {
|
|
21
|
+
readonly frames: readonly number[];
|
|
22
|
+
readonly pendingOffset: number | undefined;
|
|
23
|
+
}
|
|
14
24
|
export interface ParserState {
|
|
15
25
|
index: number;
|
|
16
26
|
tokens: Token[];
|
|
17
27
|
pos: number;
|
|
18
28
|
consumed: number;
|
|
29
|
+
template: TemplateState;
|
|
19
30
|
}
|
|
20
31
|
export declare class ParserContext {
|
|
21
32
|
readonly scanner: Scanner;
|
|
@@ -27,6 +38,16 @@ export declare class ParserContext {
|
|
|
27
38
|
speculating: number;
|
|
28
39
|
/** Monotonic count of tokens consumed; used to detect lack of progress. */
|
|
29
40
|
consumed: number;
|
|
41
|
+
/** Brace depth of each open `${ … }` substitution, innermost last. */
|
|
42
|
+
private templateFrames;
|
|
43
|
+
/** Offset of the `}` that must be re-read as template text on the next scan. */
|
|
44
|
+
private pendingTemplateOffset;
|
|
45
|
+
/**
|
|
46
|
+
* Template context after each buffered token. A parser method that rewinds
|
|
47
|
+
* the scanner (the regex fallback) restores the context recorded on the
|
|
48
|
+
* current token so a template that was only seen by lookahead stays coherent.
|
|
49
|
+
*/
|
|
50
|
+
private readonly templateStates;
|
|
30
51
|
constructor(source: SourceFile, diagnostics: DiagnosticBag);
|
|
31
52
|
get token(): Token;
|
|
32
53
|
/**
|
|
@@ -38,6 +59,25 @@ export declare class ParserContext {
|
|
|
38
59
|
atAhead(k: number, kind: TokenKind): boolean;
|
|
39
60
|
lookAhead(k: number): Token;
|
|
40
61
|
nextToken(): Token;
|
|
62
|
+
/**
|
|
63
|
+
* Scan the next token, keeping a template literal together. A `${ … }`
|
|
64
|
+
* substitution is ordinary token stream (so the parser can parse the
|
|
65
|
+
* expression), but the `}` that closes it must be followed by a token that
|
|
66
|
+
* re-reads the source as template text. Scanning the tail of a template as
|
|
67
|
+
* normal tokens would let its raw text (quotes, parens, `}`) leak into
|
|
68
|
+
* lookahead - and `findMatchingParen` would then count characters that are
|
|
69
|
+
* part of the literal.
|
|
70
|
+
*/
|
|
71
|
+
private scanToken;
|
|
72
|
+
/**
|
|
73
|
+
* Discard any lookahead and continue scanning at `offset`. Used when a
|
|
74
|
+
* literal's raw text has to be re-read (the regex fallback). The template
|
|
75
|
+
* context is restored to the state recorded for the current token, because
|
|
76
|
+
* the skipped source cannot have opened or closed a template.
|
|
77
|
+
*/
|
|
78
|
+
rescanFrom(offset: number): void;
|
|
79
|
+
private snapshotTemplateState;
|
|
80
|
+
private restoreTemplateState;
|
|
41
81
|
parseExpected(kind: TokenKind, message?: string): Token;
|
|
42
82
|
error(code: DiagnosticCode, message: string, token?: Token): void;
|
|
43
83
|
/**
|
|
@@ -56,3 +96,4 @@ export declare class ParserContext {
|
|
|
56
96
|
saveState(): ParserState;
|
|
57
97
|
restoreState(state: ParserState): void;
|
|
58
98
|
}
|
|
99
|
+
export {};
|