@lightningjs/blits 1.30.2 → 1.31.1
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 +1035 -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/.editorconfig
DELETED
package/.eslintignore
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
**/node_modules
|
package/.eslintrc.cjs
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
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 2023 Comcast
|
|
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
|
-
module.exports = {
|
|
21
|
-
root: true,
|
|
22
|
-
env: {
|
|
23
|
-
browser: true,
|
|
24
|
-
es6: true,
|
|
25
|
-
node: true,
|
|
26
|
-
},
|
|
27
|
-
plugins: ['prettier'],
|
|
28
|
-
extends: ['eslint:recommended', 'plugin:prettier/recommended', 'prettier'],
|
|
29
|
-
rules: {
|
|
30
|
-
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
|
31
|
-
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
|
32
|
-
quotes: [2, 'single', 'avoid-escape'],
|
|
33
|
-
semi: [2, 'never'],
|
|
34
|
-
'no-extra-boolean-cast': 'off',
|
|
35
|
-
'no-unused-vars': [
|
|
36
|
-
1,
|
|
37
|
-
{
|
|
38
|
-
argsIgnorePattern: 'res|next|^err',
|
|
39
|
-
},
|
|
40
|
-
],
|
|
41
|
-
'prettier/prettier': [
|
|
42
|
-
'error',
|
|
43
|
-
{
|
|
44
|
-
trailingComma: 'es5',
|
|
45
|
-
singleQuote: true,
|
|
46
|
-
tabWidth: 2,
|
|
47
|
-
semi: false,
|
|
48
|
-
printWidth: 100,
|
|
49
|
-
endOfLine: 'auto',
|
|
50
|
-
},
|
|
51
|
-
],
|
|
52
|
-
},
|
|
53
|
-
parser: '@babel/eslint-parser',
|
|
54
|
-
parserOptions: {
|
|
55
|
-
ecmaVersion: 2018,
|
|
56
|
-
sourceType: 'module',
|
|
57
|
-
requireConfigFile: false,
|
|
58
|
-
babelOptions: {
|
|
59
|
-
plugins: ['@babel/plugin-syntax-import-assertions'],
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
globals: {
|
|
63
|
-
globalThis: false,
|
|
64
|
-
},
|
|
65
|
-
}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
name: Comment ESLint Results
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_run:
|
|
5
|
-
workflows: ["Run ESLint"]
|
|
6
|
-
types:
|
|
7
|
-
- completed
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
comment-lint-results:
|
|
11
|
-
if: github.event.workflow_run.conclusion == 'failure'
|
|
12
|
-
runs-on: ubuntu-latest
|
|
13
|
-
permissions:
|
|
14
|
-
pull-requests: write
|
|
15
|
-
|
|
16
|
-
steps:
|
|
17
|
-
- name: Download Lint Results
|
|
18
|
-
id: download
|
|
19
|
-
uses: actions/github-script@v6
|
|
20
|
-
with:
|
|
21
|
-
result-encoding: string
|
|
22
|
-
script: |
|
|
23
|
-
|
|
24
|
-
try {
|
|
25
|
-
core.info('Downloading lint-results artifact');
|
|
26
|
-
const runId = context.payload.workflow_run.id;
|
|
27
|
-
|
|
28
|
-
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
|
29
|
-
owner: context.repo.owner,
|
|
30
|
-
repo: context.repo.repo,
|
|
31
|
-
run_id: runId
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
const art = artifacts.data.artifacts.find(a => a.name === "lint-results");
|
|
35
|
-
if (!art) {
|
|
36
|
-
core.setFailed('No lint-results artifact found');
|
|
37
|
-
return 'false';
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
core.info(`Found artifact id ${art.id}, downloading…`);
|
|
41
|
-
const dl = await github.rest.actions.downloadArtifact({
|
|
42
|
-
owner: context.repo.owner,
|
|
43
|
-
repo: context.repo.repo,
|
|
44
|
-
artifact_id: art.id,
|
|
45
|
-
archive_format: 'zip'
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
require('fs').writeFileSync('lint-results.zip', Buffer.from(dl.data));
|
|
49
|
-
core.info('Downloaded and saved lint-results.zip');
|
|
50
|
-
return 'true';
|
|
51
|
-
|
|
52
|
-
} catch (err) {
|
|
53
|
-
core.setFailed(`Download failed: ${err.message}`);
|
|
54
|
-
return 'false';
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
- name: Extract Lint Results
|
|
58
|
-
if: steps.download.outputs.result == 'true'
|
|
59
|
-
id: extract
|
|
60
|
-
run: |
|
|
61
|
-
mkdir -p extracted
|
|
62
|
-
unzip -o lint-results.zip -d extracted
|
|
63
|
-
|
|
64
|
-
# Read PR information
|
|
65
|
-
if [ -f extracted/pr_number.txt ]; then
|
|
66
|
-
echo "PR_NUMBER=$(cat extracted/pr_number.txt)" >> $GITHUB_ENV
|
|
67
|
-
else
|
|
68
|
-
echo "PR_NUMBER=0" >> $GITHUB_ENV
|
|
69
|
-
fi
|
|
70
|
-
|
|
71
|
-
if [ -f extracted/errors.md ] || [ -f extracted/lint-results/errors.md ]; then
|
|
72
|
-
if [ -f extracted/errors.md ]; then
|
|
73
|
-
# Handle flat structure
|
|
74
|
-
echo "LINT_ERRORS<<EOF" >> $GITHUB_ENV
|
|
75
|
-
cat extracted/errors.md >> $GITHUB_ENV
|
|
76
|
-
echo "EOF" >> $GITHUB_ENV
|
|
77
|
-
else
|
|
78
|
-
# Handle nested structure
|
|
79
|
-
echo "LINT_ERRORS<<EOF" >> $GITHUB_ENV
|
|
80
|
-
cat extracted/lint-results/errors.md >> $GITHUB_ENV
|
|
81
|
-
echo "EOF" >> $GITHUB_ENV
|
|
82
|
-
fi
|
|
83
|
-
echo "HAS_ERRORS=true" >> $GITHUB_OUTPUT
|
|
84
|
-
else
|
|
85
|
-
echo "HAS_ERRORS=false" >> $GITHUB_OUTPUT
|
|
86
|
-
fi
|
|
87
|
-
|
|
88
|
-
- name: Post Lint Results as PR Comment
|
|
89
|
-
if: steps.extract.outputs.HAS_ERRORS == 'true'
|
|
90
|
-
uses: actions/github-script@v6
|
|
91
|
-
with:
|
|
92
|
-
script: |
|
|
93
|
-
try {
|
|
94
|
-
// First check if PR number was passed from the lint workflow
|
|
95
|
-
let prNumber = parseInt(process.env.PR_NUMBER);
|
|
96
|
-
|
|
97
|
-
// Fallback to the workflow_run PR data if available
|
|
98
|
-
if (!prNumber || isNaN(prNumber) || prNumber === 0) {
|
|
99
|
-
const pulls = context.payload.workflow_run.pull_requests;
|
|
100
|
-
core.info(`Looking for PR information in workflow_run: Found ${pulls.length} PR(s)`);
|
|
101
|
-
|
|
102
|
-
if (pulls.length === 0) {
|
|
103
|
-
core.warning('No pull request information found. Skipping comment.');
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
prNumber = pulls[0].number;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
core.info(`Posting lint errors comment to PR #${prNumber}`);
|
|
111
|
-
|
|
112
|
-
const body = process.env.LINT_ERRORS;
|
|
113
|
-
|
|
114
|
-
await github.rest.issues.createComment({
|
|
115
|
-
owner: context.repo.owner,
|
|
116
|
-
repo: context.repo.repo,
|
|
117
|
-
issue_number: prNumber,
|
|
118
|
-
body
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
core.info('Lint errors comment posted successfully');
|
|
122
|
-
} catch (err) {
|
|
123
|
-
core.error('Failed to post lint comment:', err);
|
|
124
|
-
core.setFailed(err.message);
|
|
125
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
name: Comment Test Results
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_run:
|
|
5
|
-
workflows: ["Run Blits Tests"]
|
|
6
|
-
types: [completed]
|
|
7
|
-
|
|
8
|
-
jobs:
|
|
9
|
-
comment-test-results:
|
|
10
|
-
runs-on: ubuntu-latest
|
|
11
|
-
permissions:
|
|
12
|
-
pull-requests: write
|
|
13
|
-
|
|
14
|
-
steps:
|
|
15
|
-
- name: Download Test Results
|
|
16
|
-
uses: actions/github-script@v6
|
|
17
|
-
with:
|
|
18
|
-
script: |
|
|
19
|
-
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
|
20
|
-
owner: context.repo.owner,
|
|
21
|
-
repo: context.repo.repo,
|
|
22
|
-
run_id: ${{ github.event.workflow_run.id }}
|
|
23
|
-
});
|
|
24
|
-
const art = artifacts.data.artifacts.find(a => a.name === "test-results");
|
|
25
|
-
if (!art) {
|
|
26
|
-
core.setFailed('No test-results artifact found');
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
const dl = await github.rest.actions.downloadArtifact({
|
|
30
|
-
owner: context.repo.owner,
|
|
31
|
-
repo: context.repo.repo,
|
|
32
|
-
artifact_id: art.id,
|
|
33
|
-
archive_format: 'zip'
|
|
34
|
-
});
|
|
35
|
-
require('fs').writeFileSync('test-results.zip', Buffer.from(dl.data));
|
|
36
|
-
|
|
37
|
-
- name: Extract Test Results
|
|
38
|
-
run: |
|
|
39
|
-
|
|
40
|
-
mkdir -p extracted
|
|
41
|
-
unzip -o test-results.zip -d extracted
|
|
42
|
-
|
|
43
|
-
# Set environment variables from the extracted files
|
|
44
|
-
echo "TIMESTAMP=$(cat extracted/timestamp.txt)" >> $GITHUB_ENV
|
|
45
|
-
echo "SUMMARY=$(cat extracted/summary.txt)" >> $GITHUB_ENV
|
|
46
|
-
echo "FAILED=$(cat extracted/failed.txt)" >> $GITHUB_ENV
|
|
47
|
-
|
|
48
|
-
# Read PR information
|
|
49
|
-
if [ -f extracted/pr_number.txt ]; then
|
|
50
|
-
echo "PR_NUMBER=$(cat extracted/pr_number.txt)" >> $GITHUB_ENV
|
|
51
|
-
else
|
|
52
|
-
echo "PR_NUMBER=0" >> $GITHUB_ENV
|
|
53
|
-
fi
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
# Copy error file if it exists
|
|
57
|
-
if [ -f extracted/error.txt ]; then
|
|
58
|
-
cp extracted/error.txt raw_error.txt
|
|
59
|
-
fi
|
|
60
|
-
|
|
61
|
-
- name: Post Test Results as PR Comment
|
|
62
|
-
uses: actions/github-script@v6
|
|
63
|
-
with:
|
|
64
|
-
script: |
|
|
65
|
-
const fs = require('fs');
|
|
66
|
-
|
|
67
|
-
try {
|
|
68
|
-
// First check if PR number was passed from the test workflow
|
|
69
|
-
let prNumber = parseInt(process.env.PR_NUMBER);
|
|
70
|
-
|
|
71
|
-
// Fallback to the workflow_run PR data if available
|
|
72
|
-
if (!prNumber || isNaN(prNumber) || prNumber === 0) {
|
|
73
|
-
const pulls = context.payload.workflow_run.pull_requests;
|
|
74
|
-
console.log(`Looking for PR information in workflow_run: Found ${pulls.length} PR(s).`);
|
|
75
|
-
|
|
76
|
-
if (pulls.length === 0) {
|
|
77
|
-
console.warn('No pull request information found. Skipping comment.');
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
prNumber = pulls[0].number;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
console.log(`Posting comment to PR #${prNumber}`);
|
|
85
|
-
|
|
86
|
-
const status = process.env.FAILED === 'true' ? '❌ FAILED' : '✅ PASSED';
|
|
87
|
-
let commentBody = `#### Test Results: ${status}\n`
|
|
88
|
-
+ `**Run at:** ${process.env.TIMESTAMP}\n\n`
|
|
89
|
-
+ `**Summary:**\n${process.env.SUMMARY}`;
|
|
90
|
-
|
|
91
|
-
if (fs.existsSync('raw_error.txt')) {
|
|
92
|
-
commentBody += '\n\n**Error Output:**\n```\n'
|
|
93
|
-
+ fs.readFileSync('raw_error.txt', 'utf8')
|
|
94
|
-
+ '\n```';
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
await github.rest.issues.createComment({
|
|
98
|
-
owner: context.repo.owner,
|
|
99
|
-
repo: context.repo.repo,
|
|
100
|
-
issue_number: prNumber,
|
|
101
|
-
body: commentBody
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
console.log(`Successfully posted comment to PR #${prNumber}`);
|
|
105
|
-
|
|
106
|
-
} catch (err) {
|
|
107
|
-
console.error('🛑 Failed to post test results comment:', err);
|
|
108
|
-
core.setFailed(`Comment step failed: ${err.message}`);
|
|
109
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
name: Trigger Website Docs Update
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [ master ]
|
|
6
|
-
paths:
|
|
7
|
-
- 'docs/**'
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
trigger:
|
|
11
|
-
runs-on: ubuntu-latest
|
|
12
|
-
steps:
|
|
13
|
-
- name: Trigger Deployment
|
|
14
|
-
timeout-minutes: 5
|
|
15
|
-
run: |
|
|
16
|
-
response=$(curl -X POST -d {} -H "Content-Type:application/json" -w "%{http_code}" -s -o /dev/null \
|
|
17
|
-
--max-time 30 \
|
|
18
|
-
--connect-timeout 10 \
|
|
19
|
-
--retry 2 \
|
|
20
|
-
--retry-delay 5 \
|
|
21
|
-
"${{ secrets.WEBSITE_DEPLOY_URL }}")
|
|
22
|
-
if [ "$response" -ge 200 ] && [ "$response" -lt 300 ]; then
|
|
23
|
-
echo "Deployment triggered successfully"
|
|
24
|
-
else
|
|
25
|
-
echo "Failed to trigger deployment. Status code: $response"
|
|
26
|
-
exit 1
|
|
27
|
-
fi
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
name: Run Blits Tests
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
pull_request:
|
|
5
|
-
branches:
|
|
6
|
-
- dev
|
|
7
|
-
- master
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
run-blits-tests:
|
|
11
|
-
runs-on: ubuntu-latest
|
|
12
|
-
outputs:
|
|
13
|
-
tests_failed: ${{ steps.analyze-results.outputs.result && fromJSON(steps.analyze-results.outputs.result).testsFailed }}
|
|
14
|
-
|
|
15
|
-
steps:
|
|
16
|
-
- name: Checkout Code
|
|
17
|
-
uses: actions/checkout@v3
|
|
18
|
-
|
|
19
|
-
- name: Set up Node.js
|
|
20
|
-
uses: actions/setup-node@v3
|
|
21
|
-
with:
|
|
22
|
-
node-version: 20.16.0
|
|
23
|
-
|
|
24
|
-
- name: Save PR Information
|
|
25
|
-
run: |
|
|
26
|
-
echo '${{ github.event.pull_request.number }}' > ./pr_number.txt
|
|
27
|
-
echo '${{ github.event.pull_request.head.repo.full_name }}' > ./pr_repo.txt
|
|
28
|
-
echo '${{ github.event.pull_request.head.ref }}' > ./pr_branch.txt
|
|
29
|
-
|
|
30
|
-
- name: Install Dependencies
|
|
31
|
-
run: npm install
|
|
32
|
-
|
|
33
|
-
- name: Run Tests
|
|
34
|
-
id: run-tests
|
|
35
|
-
run: npm run test > test-report.txt 2>&1 || echo "Command failed with exit code $?" >> test-report.txt
|
|
36
|
-
|
|
37
|
-
- name: Analyze Test Results
|
|
38
|
-
id: analyze-results
|
|
39
|
-
uses: actions/github-script@v6
|
|
40
|
-
with:
|
|
41
|
-
result-encoding: json
|
|
42
|
-
script: |
|
|
43
|
-
const fs = require('fs');
|
|
44
|
-
const timestamp = new Date().toISOString();
|
|
45
|
-
|
|
46
|
-
const results = {
|
|
47
|
-
timestamp,
|
|
48
|
-
summary: '',
|
|
49
|
-
testsFailed: false,
|
|
50
|
-
error: null
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
// Check if test report exists and has content
|
|
54
|
-
if (!fs.existsSync('test-report.txt') || !fs.statSync('test-report.txt').size) {
|
|
55
|
-
results.summary = 'Test execution error: No test output generated.';
|
|
56
|
-
results.testsFailed = true;
|
|
57
|
-
return outputResults(results);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Read test report
|
|
61
|
-
const testOutput = fs.readFileSync('test-report.txt', 'utf8');
|
|
62
|
-
|
|
63
|
-
// Check for errors and test results
|
|
64
|
-
const hasError = testOutput.includes('Error');
|
|
65
|
-
const testSummaryMatch = testOutput.match(/passed:\s*(\d+)\s*failed:\s*(\d+)\s*of\s*(\d+)\s*tests/);
|
|
66
|
-
|
|
67
|
-
if (hasError && (!testSummaryMatch || testSummaryMatch[3] === '0')) {
|
|
68
|
-
// Error with no tests or zero tests
|
|
69
|
-
results.summary = 'Test execution encountered errors. No tests were run.';
|
|
70
|
-
results.testsFailed = true;
|
|
71
|
-
results.error = testOutput;
|
|
72
|
-
} else if (testSummaryMatch) {
|
|
73
|
-
// We have a test summary
|
|
74
|
-
const passed = parseInt(testSummaryMatch[1]);
|
|
75
|
-
const failed = parseInt(testSummaryMatch[2]);
|
|
76
|
-
const total = parseInt(testSummaryMatch[3]);
|
|
77
|
-
|
|
78
|
-
results.summary = testSummaryMatch[0];
|
|
79
|
-
|
|
80
|
-
if (failed > 0 || total === 0) {
|
|
81
|
-
results.testsFailed = true;
|
|
82
|
-
|
|
83
|
-
if (total === 0) {
|
|
84
|
-
results.summary = 'No tests were found to run. This is considered a failure.';
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
} else {
|
|
88
|
-
// No test summary found
|
|
89
|
-
results.summary = 'Test execution produced no valid test summary';
|
|
90
|
-
results.testsFailed = true;
|
|
91
|
-
results.error = testOutput;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return outputResults(results);
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Outputs results and saves result files
|
|
98
|
-
*/
|
|
99
|
-
function outputResults(results) {
|
|
100
|
-
try {
|
|
101
|
-
fs.writeFileSync('./timestamp.txt', results.timestamp);
|
|
102
|
-
fs.writeFileSync('./summary.txt', results.summary);
|
|
103
|
-
fs.writeFileSync('./failed.txt', results.testsFailed.toString());
|
|
104
|
-
|
|
105
|
-
// Save error output if it exists
|
|
106
|
-
if (results.error) {
|
|
107
|
-
fs.writeFileSync('./error.txt', results.error);
|
|
108
|
-
}
|
|
109
|
-
} catch (err) {
|
|
110
|
-
console.error('Error saving test results:', err);
|
|
111
|
-
core.warning(`Error saving test results: ${err.message}`);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
return results;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
- name: Upload Test Report Artifact
|
|
118
|
-
if: always()
|
|
119
|
-
uses: actions/upload-artifact@v4
|
|
120
|
-
with:
|
|
121
|
-
name: test-report
|
|
122
|
-
path: test-report.txt
|
|
123
|
-
|
|
124
|
-
- name: Upload Test Results
|
|
125
|
-
if: always()
|
|
126
|
-
uses: actions/upload-artifact@v4
|
|
127
|
-
with:
|
|
128
|
-
name: test-results
|
|
129
|
-
path: |
|
|
130
|
-
|
|
131
|
-
./timestamp.txt
|
|
132
|
-
./summary.txt
|
|
133
|
-
./failed.txt
|
|
134
|
-
./error.txt
|
|
135
|
-
./pr_number.txt
|
|
136
|
-
./pr_repo.txt
|
|
137
|
-
./pr_branch.txt
|
|
138
|
-
|
|
139
|
-
# Fail the workflow if tests failed
|
|
140
|
-
- name: Check Test Status
|
|
141
|
-
if: ${{ steps.analyze-results.outputs.result && fromJSON(steps.analyze-results.outputs.result).testsFailed }}
|
|
142
|
-
run: exit 1
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
name: Run ESLint
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
pull_request:
|
|
5
|
-
branches:
|
|
6
|
-
- dev
|
|
7
|
-
- master
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
run-lint:
|
|
11
|
-
runs-on: ubuntu-latest
|
|
12
|
-
permissions:
|
|
13
|
-
contents: read
|
|
14
|
-
|
|
15
|
-
steps:
|
|
16
|
-
- name: Checkout Code
|
|
17
|
-
uses: actions/checkout@v3
|
|
18
|
-
with:
|
|
19
|
-
# Needed to compare changes against base branch
|
|
20
|
-
fetch-depth: 0
|
|
21
|
-
|
|
22
|
-
- name: Save PR Information
|
|
23
|
-
run: |
|
|
24
|
-
echo '${{ github.event.pull_request.number }}' > ./pr_number.txt
|
|
25
|
-
echo '${{ github.event.pull_request.head.repo.full_name }}' > ./pr_repo.txt
|
|
26
|
-
echo '${{ github.event.pull_request.head.ref }}' > ./pr_branch.txt
|
|
27
|
-
|
|
28
|
-
- name: Set up Node.js
|
|
29
|
-
uses: actions/setup-node@v3
|
|
30
|
-
with:
|
|
31
|
-
node-version: 20.16.0
|
|
32
|
-
|
|
33
|
-
- name: Install Dependencies
|
|
34
|
-
run: npm install
|
|
35
|
-
|
|
36
|
-
- name: Get list of changed JS files
|
|
37
|
-
id: changed-files
|
|
38
|
-
run: |
|
|
39
|
-
# Get the list of changed .js files compared to the base branch
|
|
40
|
-
git diff --name-only --diff-filter=ACMRT origin/${{ github.base_ref }} HEAD | grep '\.js$' > js-changed-files.txt || true
|
|
41
|
-
|
|
42
|
-
if [ -s js-changed-files.txt ]; then
|
|
43
|
-
echo "has_js_changes=true" >> $GITHUB_OUTPUT
|
|
44
|
-
cat js-changed-files.txt | tr '\n' ' ' > js-changed-files-spaces.txt
|
|
45
|
-
echo "files=$(cat js-changed-files-spaces.txt)" >> $GITHUB_OUTPUT
|
|
46
|
-
else
|
|
47
|
-
echo "has_js_changes=false" >> $GITHUB_OUTPUT
|
|
48
|
-
fi
|
|
49
|
-
|
|
50
|
-
- name: Run ESLint on changed files
|
|
51
|
-
id: eslint
|
|
52
|
-
if: steps.changed-files.outputs.has_js_changes == 'true'
|
|
53
|
-
run: |
|
|
54
|
-
# Create directory for output
|
|
55
|
-
mkdir -p ./lint-results
|
|
56
|
-
|
|
57
|
-
# Run ESLint only on changed files with the project's config
|
|
58
|
-
# Filtering out warnings - only keep errors
|
|
59
|
-
npx eslint --config .eslintrc.cjs ${{ steps.changed-files.outputs.files }} -f json > ./lint-results/eslint-output.json || true
|
|
60
|
-
|
|
61
|
-
# Check if there are any errors in the ESLint output
|
|
62
|
-
if [ -s ./lint-results/eslint-output.json ]; then
|
|
63
|
-
error_count=$(node -e "
|
|
64
|
-
const results = require('./lint-results/eslint-output.json');
|
|
65
|
-
let errorCount = 0;
|
|
66
|
-
for (const file of results) {
|
|
67
|
-
errorCount += file.errorCount || 0;
|
|
68
|
-
}
|
|
69
|
-
console.log(errorCount);
|
|
70
|
-
")
|
|
71
|
-
|
|
72
|
-
echo "errors_found=$error_count" >> $GITHUB_OUTPUT
|
|
73
|
-
|
|
74
|
-
if [ "$error_count" -gt 0 ]; then
|
|
75
|
-
# Create the formatted error report
|
|
76
|
-
echo '❌ **Linting errors found**' > ./lint-results/errors.md
|
|
77
|
-
echo '' >> ./lint-results/errors.md
|
|
78
|
-
echo 'These linting errors must be fixed before this PR can be merged:' >> ./lint-results/errors.md
|
|
79
|
-
echo '' >> ./lint-results/errors.md
|
|
80
|
-
echo '```' >> ./lint-results/errors.md
|
|
81
|
-
|
|
82
|
-
# Extract and format errors from the JSON
|
|
83
|
-
error_count=$(node -e "
|
|
84
|
-
const results = require('./lint-results/eslint-output.json');
|
|
85
|
-
let errorSummary = '';
|
|
86
|
-
|
|
87
|
-
for (const file of results) {
|
|
88
|
-
if (file.errorCount > 0) {
|
|
89
|
-
const filePath = file.filePath.replace(process.env.GITHUB_WORKSPACE + '/', '');
|
|
90
|
-
errorSummary += filePath + '\\n';
|
|
91
|
-
|
|
92
|
-
for (const msg of file.messages) {
|
|
93
|
-
if (msg.severity === 2) {
|
|
94
|
-
errorSummary += ' Line ' + msg.line + ':' + msg.column + ': ' +
|
|
95
|
-
msg.message + ' (' + msg.ruleId + ')\\n';
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
errorSummary += '\\n';
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
console.log(errorSummary.trim());
|
|
103
|
-
")
|
|
104
|
-
|
|
105
|
-
echo "$error_count" >> ./lint-results/errors.md
|
|
106
|
-
echo '```' >> ./lint-results/errors.md
|
|
107
|
-
echo '' >> ./lint-results/errors.md
|
|
108
|
-
echo '_Run `npm run lint:fix` to automatically fix some of these issues._' >> ./lint-results/errors.md
|
|
109
|
-
fi
|
|
110
|
-
else
|
|
111
|
-
echo "errors_found=0" >> $GITHUB_OUTPUT
|
|
112
|
-
fi
|
|
113
|
-
|
|
114
|
-
- name: Upload Lint Results
|
|
115
|
-
if: steps.changed-files.outputs.has_js_changes == 'true'
|
|
116
|
-
uses: actions/upload-artifact@v4
|
|
117
|
-
with:
|
|
118
|
-
name: lint-results
|
|
119
|
-
path: |
|
|
120
|
-
./lint-results/
|
|
121
|
-
./pr_number.txt
|
|
122
|
-
./pr_repo.txt
|
|
123
|
-
./pr_branch.txt
|
|
124
|
-
|
|
125
|
-
# Fail the workflow if linting errors found
|
|
126
|
-
- name: Check Lint Status
|
|
127
|
-
if: steps.changed-files.outputs.has_js_changes == 'true' && steps.eslint.outputs.errors_found != '0'
|
|
128
|
-
run: exit 1
|
package/.husky/pre-commit
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
npx lint-staged
|
package/.husky/pre-push
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
node ./scripts/prepush.js
|
package/.vscode/extensions.json
DELETED
package/.vscode/settings.json
DELETED
package/COPYING
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
./LICENSE
|
package/banner.png
DELETED
|
Binary file
|
package/docs/.nojekyll
DELETED
|
File without changes
|
package/docs/README.md
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Blits - Lightning 3 App Development Framework
|
|
2
|
-
|
|
3
|
-
With Blits, the App Development Framework for Lightning 3, it becomes a breeze to build great Lightning 3 applications.
|
|
4
|
-
|
|
5
|
-
Blits is built on top of the Lightning 3 Renderer and aims to provide a **great developer experience**, making it fun and easy to build your apps!
|
|
6
|
-
|
|
7
|
-
Built from the ground up by the LightningJS team, we're offering a **Complete App framework**, full of features to speed up development, while keeping it **lightweight** with a focus on **performance**.
|
|
8
|
-
|
|
9
|
-
The Blits framework uses a **readable** XML-style template syntax and comes with built-in reactivity.
|
|
10
|
-
|
|
11
|
-
## Why Blits?
|
|
12
|
-
|
|
13
|
-
You may be wondering where the name Blits comes from?
|
|
14
|
-
|
|
15
|
-
Firstly, it's short, memorable and just has a nice ring to it.
|
|
16
|
-
|
|
17
|
-
"Blits" is a Dutch word (a significant portion of the Lightning Open Source team is based in the Netherlands). It means _flashy_ and it's often used for things that are _great_ or _cool_.
|
|
18
|
-
|
|
19
|
-
Finally it's a nerdy reference to the computer term "Bit Blits" commonly used in graphics processing, for rapidly moving a block of data into memory - quite similar to what Lightning is doing 🙂
|