@lightningjs/blits 1.30.2 → 1.31.0
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/CHANGELOG.md +1029 -1019
- package/LICENSE +202 -202
- package/NOTICE +12 -12
- package/README.md +33 -33
- package/bin/index.js +8 -8
- package/blits.d.ts +6 -6
- package/index.d.ts +1099 -1099
- package/index.js +28 -28
- package/package.json +57 -56
- package/public/assets/fps_sprite.base64.js +1 -1
- package/scripts/postpublish.js +59 -59
- package/scripts/prepublishOnly.js +84 -84
- package/scripts/prepush.js +78 -78
- package/src/announcer/announcer.js +162 -162
- package/src/announcer/speechSynthesis.js +107 -107
- package/src/application.js +100 -100
- package/src/component/base/announcer.js +27 -27
- package/src/component/base/events.js +69 -69
- package/src/component/base/index.js +33 -33
- package/src/component/base/methods.js +244 -244
- package/src/component/base/router.js +41 -41
- package/src/component/base/timeouts_intervals.js +99 -99
- package/src/component/base/utils.js +72 -72
- package/src/component/setup/computed.js +48 -48
- package/src/component/setup/index.js +62 -62
- package/src/component/setup/input.js +30 -30
- package/src/component/setup/methods.js +37 -37
- package/src/component/setup/props.js +62 -62
- package/src/component/setup/routes.js +42 -42
- package/src/component/setup/state.js +59 -59
- package/src/component/setup/watch.js +35 -35
- package/src/component.js +437 -437
- package/src/components/Circle.js +73 -73
- package/src/components/FPScounter.js +1510 -1510
- package/src/components/RouterView.js +81 -81
- package/src/components/Sprite.js +94 -94
- package/src/components/index.js +28 -28
- package/src/constants.js +21 -21
- package/src/engine.js +1 -1
- package/src/engines/L3/element.js +744 -744
- package/src/engines/L3/fontLoader.js +38 -38
- package/src/engines/L3/index.js +7 -7
- package/src/engines/L3/launch.js +123 -123
- package/src/engines/L3/shaderLoader.js +12 -12
- package/src/engines/index.js +1 -1
- package/src/focus.js +90 -90
- package/src/helpers/deepEqualArray.js +50 -50
- package/src/helpers/fetchJson.js +34 -34
- package/src/helpers/sequence.js +26 -26
- package/src/launch.js +123 -123
- package/src/lib/blitsfileconverter/blitsfileconverter.js +52 -52
- package/src/lib/codegenerator/generator.js +788 -788
- package/src/lib/colors/colors.js +92 -92
- package/src/lib/colors/htmlColors.js +168 -168
- package/src/lib/componentId.js +49 -49
- package/src/lib/eventListeners.js +123 -123
- package/src/lib/hooks.js +59 -59
- package/src/lib/lifecycle.js +85 -85
- package/src/lib/log.js +117 -117
- package/src/lib/precompiler/precompiler.js +73 -73
- package/src/lib/reactivity/effect.js +93 -93
- package/src/lib/reactivity/reactive.js +208 -208
- package/src/lib/reactivityguard/computedprops.js +218 -218
- package/src/lib/symbols.js +108 -108
- package/src/lib/templateparser/parser.js +386 -386
- package/src/lib/utils.js +27 -27
- package/src/plugin.js +27 -27
- package/src/plugins/appstate.js +26 -26
- package/src/plugins/index.js +20 -20
- package/src/plugins/language.js +152 -152
- package/src/plugins/log.js +25 -25
- package/src/plugins/theme.js +94 -94
- package/src/router/router.js +516 -514
- package/src/router/transitions/fadeIn.js +27 -27
- package/src/router/transitions/fadeInOut.js +33 -33
- package/src/router/transitions/index.js +21 -21
- package/src/router/transitions/slideIn.js +28 -28
- package/src/router/transitions/slideInOut.js +33 -33
- package/src/settings.js +40 -40
- package/vite/blitsFileConverter.js +67 -67
- package/vite/index.js +28 -28
- package/vite/msdfGenerator.js +269 -269
- package/vite/preCompiler.js +47 -42
- package/vite/reactivityGuard.js +45 -45
- package/vscode/data/template-attributes.json +589 -589
- package/.editorconfig +0 -7
- package/.eslintignore +0 -1
- package/.eslintrc.cjs +0 -65
- package/.github/workflows/comment-lint-results.yml +0 -125
- package/.github/workflows/comment-test-results.yml +0 -109
- package/.github/workflows/deploy-docs.yml +0 -27
- package/.github/workflows/run-blits-tests.yml +0 -142
- package/.github/workflows/run-lint.yml +0 -128
- package/.husky/pre-commit +0 -1
- package/.husky/pre-push +0 -1
- package/.vscode/extensions.json +0 -7
- package/.vscode/settings.json +0 -9
- package/COPYING +0 -1
- package/banner.png +0 -0
- package/docs/.nojekyll +0 -0
- package/docs/README.md +0 -19
- package/docs/_sidebar.md +0 -37
- package/docs/built-in/directives.md +0 -50
- package/docs/built-in/for-loop.md +0 -204
- package/docs/built-in/layout.md +0 -168
- package/docs/components/component_state.md +0 -90
- package/docs/components/computed_properties.md +0 -45
- package/docs/components/lifecycle_events.md +0 -42
- package/docs/components/methods.md +0 -45
- package/docs/components/props.md +0 -56
- package/docs/components/user_input.md +0 -186
- package/docs/components/utility_methods.md +0 -320
- package/docs/components/watchers.md +0 -34
- package/docs/essentials/application_root.md +0 -19
- package/docs/essentials/components.md +0 -68
- package/docs/essentials/displaying_images.md +0 -67
- package/docs/essentials/displaying_text.md +0 -135
- package/docs/essentials/element_attributes.md +0 -195
- package/docs/essentials/settings.md +0 -117
- package/docs/essentials/template_syntax.md +0 -83
- package/docs/getting_started/file_structure.md +0 -58
- package/docs/getting_started/getting_started.md +0 -45
- package/docs/getting_started/intro.md +0 -20
- package/docs/index.html +0 -47
- package/docs/performance/lazy-loading.md +0 -161
- package/docs/plugins/global_app_state.md +0 -98
- package/docs/plugins/language.md +0 -172
- package/docs/plugins/text-to-speech-announcer.md +0 -120
- package/docs/plugins/theme.md +0 -176
- package/docs/router/basics.md +0 -175
- package/docs/router/hooks.md +0 -70
- package/docs/router/transitions.md +0 -146
- package/docs/sidebar.json +0 -171
- package/docs/transitions_animations/transitions.md +0 -150
- package/jsconfig.json +0 -12
- package/src/component/setup/props.test.js +0 -238
- package/src/component.test.js +0 -388
- package/src/components/Circle.orig.js +0 -31
- package/src/components/FPScounter.orig.js +0 -121
- package/src/components/RouterView.orig.js +0 -54
- package/src/components/Sprite.orig.js +0 -58
- package/src/components/index.orig.js +0 -28
- package/src/engines/L3/element.test.js +0 -579
- package/src/helpers/deepEqualArray.test.js +0 -127
- package/src/lib/codegenerator/generator.test.js +0 -3801
- package/src/lib/colors/colors.test.js +0 -290
- package/src/lib/componentId.test.js +0 -84
- package/src/lib/eventListeners.test.js +0 -236
- package/src/lib/reactivity/effect.test.js +0 -35
- package/src/lib/reactivity/reactive.test.js +0 -27
- package/src/lib/templateparser/parser.test.js +0 -1411
- package/src/router/router.test.js +0 -473
package/src/helpers/fetchJson.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
-
* following copyright and licenses apply:
|
|
4
|
-
*
|
|
5
|
-
* Copyright 2020 Metrological
|
|
6
|
-
*
|
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
export default (file) => {
|
|
21
|
-
return new Promise((resolve, reject) => {
|
|
22
|
-
const xhr = new XMLHttpRequest()
|
|
23
|
-
xhr.onreadystatechange = function () {
|
|
24
|
-
if (xhr.readyState == XMLHttpRequest.DONE) {
|
|
25
|
-
// file protocol returns 0
|
|
26
|
-
// http(s) protocol returns 200
|
|
27
|
-
if (xhr.status === 0 || xhr.status === 200) resolve(JSON.parse(xhr.responseText))
|
|
28
|
-
else reject(xhr.statusText)
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
xhr.open('GET', file)
|
|
32
|
-
xhr.send(null)
|
|
33
|
-
})
|
|
34
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
+
* following copyright and licenses apply:
|
|
4
|
+
*
|
|
5
|
+
* Copyright 2020 Metrological
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export default (file) => {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
const xhr = new XMLHttpRequest()
|
|
23
|
+
xhr.onreadystatechange = function () {
|
|
24
|
+
if (xhr.readyState == XMLHttpRequest.DONE) {
|
|
25
|
+
// file protocol returns 0
|
|
26
|
+
// http(s) protocol returns 200
|
|
27
|
+
if (xhr.status === 0 || xhr.status === 200) resolve(JSON.parse(xhr.responseText))
|
|
28
|
+
else reject(xhr.statusText)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
xhr.open('GET', file)
|
|
32
|
+
xhr.send(null)
|
|
33
|
+
})
|
|
34
|
+
}
|
package/src/helpers/sequence.js
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License.
|
|
5
|
-
* You may obtain a copy of the License at
|
|
6
|
-
*
|
|
7
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
* See the License for the specific language governing permissions and
|
|
13
|
-
* limitations under the License.
|
|
14
|
-
*
|
|
15
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
export default (steps) => {
|
|
19
|
-
return steps.reduce((promise, method) => {
|
|
20
|
-
return promise
|
|
21
|
-
.then(function () {
|
|
22
|
-
return method(...arguments)
|
|
23
|
-
})
|
|
24
|
-
.catch((e) => Promise.reject(e))
|
|
25
|
-
}, Promise.resolve(null))
|
|
26
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Comcast Cable Communications Management, LLC
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
* See the License for the specific language governing permissions and
|
|
13
|
+
* limitations under the License.
|
|
14
|
+
*
|
|
15
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
export default (steps) => {
|
|
19
|
+
return steps.reduce((promise, method) => {
|
|
20
|
+
return promise
|
|
21
|
+
.then(function () {
|
|
22
|
+
return method(...arguments)
|
|
23
|
+
})
|
|
24
|
+
.catch((e) => Promise.reject(e))
|
|
25
|
+
}, Promise.resolve(null))
|
|
26
|
+
}
|
package/src/launch.js
CHANGED
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License.
|
|
5
|
-
* You may obtain a copy of the License at
|
|
6
|
-
*
|
|
7
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
* See the License for the specific language governing permissions and
|
|
13
|
-
* limitations under the License.
|
|
14
|
-
*
|
|
15
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import Settings from './settings.js'
|
|
19
|
-
import { initLog, Log } from './lib/log.js'
|
|
20
|
-
import engine from './engine.js'
|
|
21
|
-
import blitsPackageInfo from '../package.json' assert { type: 'json' }
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* @typedef {Object} Font
|
|
25
|
-
* @property {string} family - Name of the font family
|
|
26
|
-
* @property {string} type - Type of font (web, msdf, sdf)
|
|
27
|
-
* @property {string} [file] - Location to the font file
|
|
28
|
-
* @property {string} [json] - Location of the font map (for msdf/sdf)
|
|
29
|
-
* @property {string} [png] - Location of the font png (for msdf/sdf)
|
|
30
|
-
*/
|
|
31
|
-
/**
|
|
32
|
-
* @typedef {Object} ShaderEffect
|
|
33
|
-
* @property {string} name
|
|
34
|
-
* @property {any} type
|
|
35
|
-
*/
|
|
36
|
-
/**
|
|
37
|
-
* @typedef {Object} Shader
|
|
38
|
-
* @property {string} name
|
|
39
|
-
* @property {any} type
|
|
40
|
-
*/
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* @typedef {import('@lightningjs/renderer').RendererMain} RendererMain
|
|
44
|
-
* @type {RendererMain}
|
|
45
|
-
*/
|
|
46
|
-
// @ts-ignore - We ignore this because it will be replaced by the renderer once the app is launched
|
|
47
|
-
export let renderer = {}
|
|
48
|
-
export const stage = {}
|
|
49
|
-
|
|
50
|
-
async function rendererVersion() {
|
|
51
|
-
let rendererPackageInfo
|
|
52
|
-
try {
|
|
53
|
-
// Dynamically import the renderer package.json
|
|
54
|
-
rendererPackageInfo = await import('../../renderer/package.json')
|
|
55
|
-
if (rendererPackageInfo !== undefined) {
|
|
56
|
-
return rendererPackageInfo.version
|
|
57
|
-
}
|
|
58
|
-
} catch (e) {
|
|
59
|
-
// Fallback to renderer version in dependencies
|
|
60
|
-
return blitsPackageInfo.dependencies['@lightningjs/renderer']
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* @typedef {Object} BlitsSettings
|
|
66
|
-
* @property {number} [w] - Width of the Application
|
|
67
|
-
* @property {number} [h] - Height of the Application
|
|
68
|
-
* @property {boolean} [multithreaded] - Whether to enable multithreaded
|
|
69
|
-
* @property {0|1|2|"info"|"warn"|"error"|"debug"[]} [debugLevel] - Debug level for console log messages
|
|
70
|
-
* @property {Font[]} [fonts] - Fonts to be used in the Application
|
|
71
|
-
* @property {ShaderEffect[]} [effects] - Effects to be used by DynamicShader
|
|
72
|
-
* @property {Shader[]} [shaders] - Shaders to be used in the application
|
|
73
|
-
* @property {string} [defaultFont] - Default font family to use in the Application
|
|
74
|
-
* @property {object} [keymap] - Custom keymapping
|
|
75
|
-
* @property {"Proxy"|"defineProperty"} [reactivityMode] - Mode of reactivity
|
|
76
|
-
* @property {"hd"|"720p"|720|"fhd"|"fullhd"|"1080p"|1080|"4k"|"2160p"|2160} [screenResolution] - Screen resolution of the device
|
|
77
|
-
* @property {"low"|"medium"|"high"|"retina"|number} [renderQuality] - Quality of the rendered App
|
|
78
|
-
* @property {number} [pixelRatio] - Custom pixel ratio of the device
|
|
79
|
-
* @property {number} [fpsInterval] - Interval in ms to receive FPS updates
|
|
80
|
-
* @property {number} [webWorkersLimit] - Maximum number of web workers
|
|
81
|
-
* @property {string} [canvasColor] - Background color of the canvas
|
|
82
|
-
* @property {boolean} [inspector] - Enable inspector
|
|
83
|
-
* @property {number|[number,number,number,number]} [viewportMargin] - Extra margin to the viewport
|
|
84
|
-
* @property {number} [gpuMemoryLimit] - Threshold after which textures are freed (deprecated)
|
|
85
|
-
* @property {object} [gpuMemory] - Configures the gpu memory settings
|
|
86
|
-
* @property {"webgl"|"canvas"} [renderMode] - Defines which mode the renderer should operate in
|
|
87
|
-
* @property {number} [holdTimeout] - Time after which a key press is considered a hold
|
|
88
|
-
* @property {HTMLCanvasElement} [canvas] - Custom canvas object used to render the App
|
|
89
|
-
* @property {number} [textureProcessingTimeLimit] - Max time renderer can process textures in a frame
|
|
90
|
-
* @property {Partial<import('@lightningjs/renderer').RendererMainSettings>} [advanced] - Advanced renderer settings
|
|
91
|
-
* @property {boolean} [announcer] - Whether or not the announcer should be activated on initialization
|
|
92
|
-
*/
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Blits App defines the structure of the Blits application.
|
|
96
|
-
* @typedef {import('./component').BlitsComponent} BlitsComponent
|
|
97
|
-
* @typedef {BlitsComponent & { quit: () => void }} BlitsAppComponent
|
|
98
|
-
* @typedef {() => BlitsAppComponent} BlitsAppFactory
|
|
99
|
-
*/
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Launches the Blits application with the given App, target, and settings.
|
|
103
|
-
* Sets up logging, version info, and initializes the renderer and stage singletons.
|
|
104
|
-
*
|
|
105
|
-
* @param {BlitsAppFactory} App - The root BlitsComponent to launch.
|
|
106
|
-
* @param {HTMLElement} target - The DOM element or rendering target.
|
|
107
|
-
* @param {BlitsSettings} settings - Configuration settings for the application.
|
|
108
|
-
* @returns {void}
|
|
109
|
-
*/
|
|
110
|
-
export default (App, target, settings) => {
|
|
111
|
-
Settings.set(settings)
|
|
112
|
-
|
|
113
|
-
initLog()
|
|
114
|
-
|
|
115
|
-
rendererVersion().then((v) => {
|
|
116
|
-
Log.info('Blits Version ', blitsPackageInfo.version)
|
|
117
|
-
Log.info('Renderer Version ', v)
|
|
118
|
-
})
|
|
119
|
-
|
|
120
|
-
stage.element = engine.Element
|
|
121
|
-
|
|
122
|
-
renderer = engine.Launch(App, target, settings)
|
|
123
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Comcast Cable Communications Management, LLC
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
* See the License for the specific language governing permissions and
|
|
13
|
+
* limitations under the License.
|
|
14
|
+
*
|
|
15
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import Settings from './settings.js'
|
|
19
|
+
import { initLog, Log } from './lib/log.js'
|
|
20
|
+
import engine from './engine.js'
|
|
21
|
+
import blitsPackageInfo from '../package.json' assert { type: 'json' }
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @typedef {Object} Font
|
|
25
|
+
* @property {string} family - Name of the font family
|
|
26
|
+
* @property {string} type - Type of font (web, msdf, sdf)
|
|
27
|
+
* @property {string} [file] - Location to the font file
|
|
28
|
+
* @property {string} [json] - Location of the font map (for msdf/sdf)
|
|
29
|
+
* @property {string} [png] - Location of the font png (for msdf/sdf)
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* @typedef {Object} ShaderEffect
|
|
33
|
+
* @property {string} name
|
|
34
|
+
* @property {any} type
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* @typedef {Object} Shader
|
|
38
|
+
* @property {string} name
|
|
39
|
+
* @property {any} type
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @typedef {import('@lightningjs/renderer').RendererMain} RendererMain
|
|
44
|
+
* @type {RendererMain}
|
|
45
|
+
*/
|
|
46
|
+
// @ts-ignore - We ignore this because it will be replaced by the renderer once the app is launched
|
|
47
|
+
export let renderer = {}
|
|
48
|
+
export const stage = {}
|
|
49
|
+
|
|
50
|
+
async function rendererVersion() {
|
|
51
|
+
let rendererPackageInfo
|
|
52
|
+
try {
|
|
53
|
+
// Dynamically import the renderer package.json
|
|
54
|
+
rendererPackageInfo = await import('../../renderer/package.json')
|
|
55
|
+
if (rendererPackageInfo !== undefined) {
|
|
56
|
+
return rendererPackageInfo.version
|
|
57
|
+
}
|
|
58
|
+
} catch (e) {
|
|
59
|
+
// Fallback to renderer version in dependencies
|
|
60
|
+
return blitsPackageInfo.dependencies['@lightningjs/renderer']
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @typedef {Object} BlitsSettings
|
|
66
|
+
* @property {number} [w] - Width of the Application
|
|
67
|
+
* @property {number} [h] - Height of the Application
|
|
68
|
+
* @property {boolean} [multithreaded] - Whether to enable multithreaded
|
|
69
|
+
* @property {0|1|2|"info"|"warn"|"error"|"debug"[]} [debugLevel] - Debug level for console log messages
|
|
70
|
+
* @property {Font[]} [fonts] - Fonts to be used in the Application
|
|
71
|
+
* @property {ShaderEffect[]} [effects] - Effects to be used by DynamicShader
|
|
72
|
+
* @property {Shader[]} [shaders] - Shaders to be used in the application
|
|
73
|
+
* @property {string} [defaultFont] - Default font family to use in the Application
|
|
74
|
+
* @property {object} [keymap] - Custom keymapping
|
|
75
|
+
* @property {"Proxy"|"defineProperty"} [reactivityMode] - Mode of reactivity
|
|
76
|
+
* @property {"hd"|"720p"|720|"fhd"|"fullhd"|"1080p"|1080|"4k"|"2160p"|2160} [screenResolution] - Screen resolution of the device
|
|
77
|
+
* @property {"low"|"medium"|"high"|"retina"|number} [renderQuality] - Quality of the rendered App
|
|
78
|
+
* @property {number} [pixelRatio] - Custom pixel ratio of the device
|
|
79
|
+
* @property {number} [fpsInterval] - Interval in ms to receive FPS updates
|
|
80
|
+
* @property {number} [webWorkersLimit] - Maximum number of web workers
|
|
81
|
+
* @property {string} [canvasColor] - Background color of the canvas
|
|
82
|
+
* @property {boolean} [inspector] - Enable inspector
|
|
83
|
+
* @property {number|[number,number,number,number]} [viewportMargin] - Extra margin to the viewport
|
|
84
|
+
* @property {number} [gpuMemoryLimit] - Threshold after which textures are freed (deprecated)
|
|
85
|
+
* @property {object} [gpuMemory] - Configures the gpu memory settings
|
|
86
|
+
* @property {"webgl"|"canvas"} [renderMode] - Defines which mode the renderer should operate in
|
|
87
|
+
* @property {number} [holdTimeout] - Time after which a key press is considered a hold
|
|
88
|
+
* @property {HTMLCanvasElement} [canvas] - Custom canvas object used to render the App
|
|
89
|
+
* @property {number} [textureProcessingTimeLimit] - Max time renderer can process textures in a frame
|
|
90
|
+
* @property {Partial<import('@lightningjs/renderer').RendererMainSettings>} [advanced] - Advanced renderer settings
|
|
91
|
+
* @property {boolean} [announcer] - Whether or not the announcer should be activated on initialization
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Blits App defines the structure of the Blits application.
|
|
96
|
+
* @typedef {import('./component').BlitsComponent} BlitsComponent
|
|
97
|
+
* @typedef {BlitsComponent & { quit: () => void }} BlitsAppComponent
|
|
98
|
+
* @typedef {() => BlitsAppComponent} BlitsAppFactory
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Launches the Blits application with the given App, target, and settings.
|
|
103
|
+
* Sets up logging, version info, and initializes the renderer and stage singletons.
|
|
104
|
+
*
|
|
105
|
+
* @param {BlitsAppFactory} App - The root BlitsComponent to launch.
|
|
106
|
+
* @param {HTMLElement} target - The DOM element or rendering target.
|
|
107
|
+
* @param {BlitsSettings} settings - Configuration settings for the application.
|
|
108
|
+
* @returns {void}
|
|
109
|
+
*/
|
|
110
|
+
export default (App, target, settings) => {
|
|
111
|
+
Settings.set(settings)
|
|
112
|
+
|
|
113
|
+
initLog()
|
|
114
|
+
|
|
115
|
+
rendererVersion().then((v) => {
|
|
116
|
+
Log.info('Blits Version ', blitsPackageInfo.version)
|
|
117
|
+
Log.info('Renderer Version ', v)
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
stage.element = engine.Element
|
|
121
|
+
|
|
122
|
+
renderer = engine.Launch(App, target, settings)
|
|
123
|
+
}
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License.
|
|
5
|
-
* You may obtain a copy of the License at
|
|
6
|
-
*
|
|
7
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
* See the License for the specific language governing permissions and
|
|
13
|
-
* limitations under the License.
|
|
14
|
-
*
|
|
15
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
export default (source) => {
|
|
19
|
-
const { template, script } = parseBlitsFile(source)
|
|
20
|
-
return injectTemplate(script, template)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const parseBlitsFile = (source) => {
|
|
24
|
-
const templateMatch = source.match(/<template>([\s\S]*?)<\/template>/)
|
|
25
|
-
const scriptMatch = source.match(/<script(?:\s+lang=["'](?:js|ts)["'])?\s*>([\s\S]*?)<\/script>/)
|
|
26
|
-
|
|
27
|
-
return {
|
|
28
|
-
template: templateMatch ? templateMatch[1].trim() : '',
|
|
29
|
-
script: scriptMatch ? scriptMatch[1].trim() : '',
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const injectTemplate = (script, template) => {
|
|
34
|
-
const componentRegex =
|
|
35
|
-
/(Blits\.Component|Component)\s*\(\s*(['"`])(?:(?=(\\?))\3.)*?\2\s*,\s*\{|Blits\.Application\s*\(\s*\{/
|
|
36
|
-
|
|
37
|
-
const match = script.match(componentRegex)
|
|
38
|
-
|
|
39
|
-
if (!match) {
|
|
40
|
-
// we might consider initializing a component if it's not found automatically
|
|
41
|
-
throw new Error(
|
|
42
|
-
'Could not find Blits.Component, Component, or Blits.Application initialization in the script'
|
|
43
|
-
)
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// The insertion point is right after the opening curly brace
|
|
47
|
-
const insertIndex = match.index + match[0].length
|
|
48
|
-
|
|
49
|
-
// Using template literals to preserve multiline strings and escape characters
|
|
50
|
-
const injection = `\n template: \`${template.replace(/`/g, '\\`')}\`,\n`
|
|
51
|
-
return script.slice(0, insertIndex) + injection + script.slice(insertIndex)
|
|
52
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Comcast Cable Communications Management, LLC
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
* See the License for the specific language governing permissions and
|
|
13
|
+
* limitations under the License.
|
|
14
|
+
*
|
|
15
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
export default (source) => {
|
|
19
|
+
const { template, script } = parseBlitsFile(source)
|
|
20
|
+
return injectTemplate(script, template)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const parseBlitsFile = (source) => {
|
|
24
|
+
const templateMatch = source.match(/<template>([\s\S]*?)<\/template>/)
|
|
25
|
+
const scriptMatch = source.match(/<script(?:\s+lang=["'](?:js|ts)["'])?\s*>([\s\S]*?)<\/script>/)
|
|
26
|
+
|
|
27
|
+
return {
|
|
28
|
+
template: templateMatch ? templateMatch[1].trim() : '',
|
|
29
|
+
script: scriptMatch ? scriptMatch[1].trim() : '',
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const injectTemplate = (script, template) => {
|
|
34
|
+
const componentRegex =
|
|
35
|
+
/(Blits\.Component|Component)\s*\(\s*(['"`])(?:(?=(\\?))\3.)*?\2\s*,\s*\{|Blits\.Application\s*\(\s*\{/
|
|
36
|
+
|
|
37
|
+
const match = script.match(componentRegex)
|
|
38
|
+
|
|
39
|
+
if (!match) {
|
|
40
|
+
// we might consider initializing a component if it's not found automatically
|
|
41
|
+
throw new Error(
|
|
42
|
+
'Could not find Blits.Component, Component, or Blits.Application initialization in the script'
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// The insertion point is right after the opening curly brace
|
|
47
|
+
const insertIndex = match.index + match[0].length
|
|
48
|
+
|
|
49
|
+
// Using template literals to preserve multiline strings and escape characters
|
|
50
|
+
const injection = `\n template: \`${template.replace(/`/g, '\\`')}\`,\n`
|
|
51
|
+
return script.slice(0, insertIndex) + injection + script.slice(insertIndex)
|
|
52
|
+
}
|