@betty-blocks/cli 25.27.3 → 25.30.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/assets/app-functions/templates/test/helpers.js +3 -0
- package/assets/app-functions/templates/test/say-hello.test.js +4 -0
- package/assets/component-set/__package.json +57 -17
- package/assets/component-set/src/prefabs/helloWorld.ts +48 -0
- package/assets/component-set/src/utils.ts +18 -0
- package/build/bb-functions-test.js +30 -0
- package/build/bb-functions-test.js.map +1 -0
- package/build/bb-functions.js +2 -0
- package/build/bb-functions.js.map +1 -1
- package/build/functions/testRunner.js +207 -0
- package/build/functions/testRunner.js.map +1 -0
- package/build/types.js.map +1 -1
- package/package.json +2 -1
- package/assets/component-set/src/prefabs/helloWorld.js +0 -52
|
@@ -1,28 +1,68 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "component-set",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.227.0",
|
|
4
4
|
"main": "dist/templates.json",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
|
-
"private":
|
|
6
|
+
"private": false,
|
|
7
7
|
"devDependencies": {
|
|
8
|
-
"@betty-blocks/cli": "^
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"eslint-plugin
|
|
15
|
-
"eslint
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
8
|
+
"@betty-blocks/cli": "^25.27.1",
|
|
9
|
+
"@commitlint/cli": "^16.1.0",
|
|
10
|
+
"@commitlint/config-angular": "^16.0.0",
|
|
11
|
+
"@semantic-release/changelog": "^6.0.1",
|
|
12
|
+
"@semantic-release/git": "^10.0.1",
|
|
13
|
+
"@types/node": "^17.0.10",
|
|
14
|
+
"@typescript-eslint/eslint-plugin": "^5.21.0",
|
|
15
|
+
"@typescript-eslint/parser": "^5.21.0",
|
|
16
|
+
"eslint": "^8.3.0",
|
|
17
|
+
"eslint-config-airbnb": "^19.0.4",
|
|
18
|
+
"eslint-config-airbnb-typescript": "^17.0.0",
|
|
19
|
+
"eslint-config-prettier": "^8.3.0",
|
|
20
|
+
"eslint-plugin-import": "^2.25.3",
|
|
21
|
+
"eslint-plugin-jsx-a11y": "^6.5.1",
|
|
22
|
+
"eslint-plugin-prettier": "^4.0.0",
|
|
23
|
+
"eslint-plugin-react": "^7.27.1",
|
|
24
|
+
"eslint-plugin-react-hooks": "^4.3.0",
|
|
25
|
+
"husky": "^4.2.5",
|
|
26
|
+
"nodemon": "^2.0.15",
|
|
27
|
+
"prettier": "^2.5.0",
|
|
28
|
+
"semantic-release": "^19.0.2",
|
|
29
|
+
"webpack": "^5.64.4",
|
|
30
|
+
"webpack-cli": "^4.9.1"
|
|
31
|
+
},
|
|
32
|
+
"husky": {
|
|
33
|
+
"hooks": {
|
|
34
|
+
"pre-commit": "yarn lint",
|
|
35
|
+
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
|
|
36
|
+
}
|
|
19
37
|
},
|
|
20
38
|
"scripts": {
|
|
21
|
-
"start": "bb components serve",
|
|
39
|
+
"start": "bb components serve -p 5002",
|
|
22
40
|
"build": "bb components build",
|
|
23
41
|
"dev": "nodemon",
|
|
24
|
-
"
|
|
25
|
-
"lint": "
|
|
42
|
+
"lint": "eslint --ext .js,.ts,.tsx ./src",
|
|
43
|
+
"lint:ci": "yarn lint --max-warnings 0",
|
|
44
|
+
"prettier:base": "prettier --single-quote",
|
|
45
|
+
"prettier:check": "yarn prettier:base --list-different \"src/**/*.js\"",
|
|
46
|
+
"prettier:write": "yarn prettier:base --write \"src/**/*.js\"",
|
|
47
|
+
"upload": "bb components publish -b material-ui-component-set",
|
|
48
|
+
"test": "echo \"Error: no test specified\" && exit 0",
|
|
49
|
+
"bundle": "npx webpack --config webpack.config.js"
|
|
50
|
+
},
|
|
51
|
+
"files": ["dist"],
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@betty-blocks/component-sdk": "^1.7.1",
|
|
54
|
+
"@date-io/date-fns": "^1.3.13",
|
|
55
|
+
"@material-ui/core": "^4.9.11",
|
|
56
|
+
"@material-ui/icons": "^4.11.2",
|
|
57
|
+
"@material-ui/lab": "^4.0.0-alpha.50",
|
|
58
|
+
"@material-ui/pickers": "^3.2.10",
|
|
59
|
+
"@material-ui/styles": "^4.9.10",
|
|
60
|
+
"date-fns": "^2.11.0",
|
|
61
|
+
"react": "^16.13.1",
|
|
62
|
+
"react-dom": "^16.13.1"
|
|
26
63
|
},
|
|
27
|
-
"
|
|
64
|
+
"repository": {
|
|
65
|
+
"type": "git",
|
|
66
|
+
"url": "https://github.com/bettyblocks/material-ui-component-set.git"
|
|
67
|
+
}
|
|
28
68
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
component,
|
|
4
|
+
prefab,
|
|
5
|
+
variable,
|
|
6
|
+
Icon,
|
|
7
|
+
font,
|
|
8
|
+
buttongroup,
|
|
9
|
+
color,
|
|
10
|
+
ThemeColor,
|
|
11
|
+
} from '@betty-blocks/component-sdk';
|
|
12
|
+
import { showOn } from '../utils';
|
|
13
|
+
|
|
14
|
+
const attributes = {
|
|
15
|
+
category: 'CONTENT',
|
|
16
|
+
icon: Icon.TextInputIcon,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const options = {
|
|
20
|
+
content: variable('Content', { value: ['This is my first component!'] }),
|
|
21
|
+
type: font('Type', { value: 'Title1' }),
|
|
22
|
+
align: buttongroup(
|
|
23
|
+
'Align',
|
|
24
|
+
[
|
|
25
|
+
['Left', 'left'],
|
|
26
|
+
['Center', 'center'],
|
|
27
|
+
['Right', 'right'],
|
|
28
|
+
],
|
|
29
|
+
{ value: 'left' },
|
|
30
|
+
),
|
|
31
|
+
padding: buttongroup(
|
|
32
|
+
'Padding',
|
|
33
|
+
[
|
|
34
|
+
['None', 'none'],
|
|
35
|
+
['Dense', 'dense'],
|
|
36
|
+
['Normal', 'normal'],
|
|
37
|
+
],
|
|
38
|
+
{ value: 'normal' },
|
|
39
|
+
),
|
|
40
|
+
color: color('Text color', {
|
|
41
|
+
value: ThemeColor.BLACK,
|
|
42
|
+
...showOn('styles'),
|
|
43
|
+
}),
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export default prefab('Hello World', attributes, null, [
|
|
47
|
+
component('HelloWorld', { options }, []),
|
|
48
|
+
]);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { PrefabComponentOption, showIfTrue } from '@betty-blocks/component-sdk';
|
|
2
|
+
|
|
3
|
+
// TODO: export OptionProducer from the sdk
|
|
4
|
+
type OptionProducer = (key: string) => PrefabComponentOption;
|
|
5
|
+
type Attributes = Partial<PrefabComponentOption>;
|
|
6
|
+
|
|
7
|
+
export type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
8
|
+
|
|
9
|
+
export const updateOption = (
|
|
10
|
+
producer: OptionProducer,
|
|
11
|
+
attrs: Attributes,
|
|
12
|
+
): OptionProducer => {
|
|
13
|
+
return (key) => ({ ...producer(key), ...attrs });
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const showOn = (key: string) => ({
|
|
17
|
+
configuration: { condition: showIfTrue(key) },
|
|
18
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* npm dependencies */
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
const commander_1 = __importDefault(require("commander"));
|
|
17
|
+
/* internal dependencies */
|
|
18
|
+
const testRunner_1 = require("./functions/testRunner");
|
|
19
|
+
/* process arguments */
|
|
20
|
+
commander_1.default
|
|
21
|
+
.usage('[pattern/for/test-files]')
|
|
22
|
+
.name('bb functions test')
|
|
23
|
+
.parse(process.argv);
|
|
24
|
+
const { args: [pattern], } = commander_1.default;
|
|
25
|
+
/* execute command */
|
|
26
|
+
// eslint-disable-next-line no-void
|
|
27
|
+
void (() => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
+
yield testRunner_1.runTest(pattern, process.cwd());
|
|
29
|
+
}))();
|
|
30
|
+
//# sourceMappingURL=bb-functions-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bb-functions-test.js","sourceRoot":"","sources":["../src/bb-functions-test.ts"],"names":[],"mappings":";AAAA,sBAAsB;;;;;;;;;;;;;;AAEtB,0DAAgC;AAEhC,2BAA2B;AAE3B,uDAAiD;AAEjD,uBAAuB;AAEvB,mBAAO;KACJ,KAAK,CAAC,0BAA0B,CAAC;KACjC,IAAI,CAAC,mBAAmB,CAAC;KACzB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvB,MAAM,EACJ,IAAI,EAAE,CAAC,OAAO,CAAC,GAChB,GAAG,mBAAO,CAAC;AAEZ,qBAAqB;AAErB,mCAAmC;AACnC,KAAK,CAAC,GAAwB,EAAE;IAC9B,MAAM,oBAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,CAAC,CAAA,CAAC,EAAE,CAAC"}
|
package/build/bb-functions.js
CHANGED
|
@@ -16,6 +16,7 @@ const availableCommands = [
|
|
|
16
16
|
'validate',
|
|
17
17
|
'autoversion',
|
|
18
18
|
'bump',
|
|
19
|
+
'test',
|
|
19
20
|
];
|
|
20
21
|
/* process arguments */
|
|
21
22
|
commander_1.default
|
|
@@ -30,6 +31,7 @@ commander_1.default
|
|
|
30
31
|
.command('new [function-name]', 'Initialize a new function')
|
|
31
32
|
.command('publish', 'publish functions of current working directory')
|
|
32
33
|
.command('validate', 'validate functions of current working directory')
|
|
34
|
+
.command('test', 'test your functions within a local light-weight version of the ActionJS environment')
|
|
33
35
|
.on('command:*', ([command]) => {
|
|
34
36
|
if (!availableCommands.includes(command)) {
|
|
35
37
|
console.error('Invalid command: %s\n', command);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bb-functions.js","sourceRoot":"","sources":["../src/bb-functions.ts"],"names":[],"mappings":";AAAA,sBAAsB;;;;;AAEtB,0DAAgC;AAMhC,WAAW;AAEX,MAAM,iBAAiB,GAAuB;IAC5C,MAAM;IACN,OAAO;IACP,QAAQ;IACR,KAAK;IACL,OAAO;IACP,SAAS;IACT,UAAU;IACV,aAAa;IACb,MAAM;CACP,CAAC;AAEF,uBAAuB;AAEvB,mBAAO;KACJ,KAAK,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;KACzC,IAAI,CAAC,cAAc,CAAC;KACpB,OAAO,CACN,aAAa,EACb,yDAAyD,CAC1D;KACA,OAAO,CAAC,OAAO,EAAE,0DAA0D,CAAC;KAC5E,OAAO,CAAC,MAAM,EAAE,yDAAyD,CAAC;KAC1E,OAAO,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KAC5D,OAAO,CAAC,OAAO,EAAE,6CAA6C,CAAC;KAC/D,OAAO,CAAC,QAAQ,EAAE,sDAAsD,CAAC;KACzE,OAAO,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;KAC3D,OAAO,CAAC,SAAS,EAAE,gDAAgD,CAAC;KACpE,OAAO,CAAC,UAAU,EAAE,iDAAiD,CAAC;
|
|
1
|
+
{"version":3,"file":"bb-functions.js","sourceRoot":"","sources":["../src/bb-functions.ts"],"names":[],"mappings":";AAAA,sBAAsB;;;;;AAEtB,0DAAgC;AAMhC,WAAW;AAEX,MAAM,iBAAiB,GAAuB;IAC5C,MAAM;IACN,OAAO;IACP,QAAQ;IACR,KAAK;IACL,OAAO;IACP,SAAS;IACT,UAAU;IACV,aAAa;IACb,MAAM;IACN,MAAM;CACP,CAAC;AAEF,uBAAuB;AAEvB,mBAAO;KACJ,KAAK,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;KACzC,IAAI,CAAC,cAAc,CAAC;KACpB,OAAO,CACN,aAAa,EACb,yDAAyD,CAC1D;KACA,OAAO,CAAC,OAAO,EAAE,0DAA0D,CAAC;KAC5E,OAAO,CAAC,MAAM,EAAE,yDAAyD,CAAC;KAC1E,OAAO,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KAC5D,OAAO,CAAC,OAAO,EAAE,6CAA6C,CAAC;KAC/D,OAAO,CAAC,QAAQ,EAAE,sDAAsD,CAAC;KACzE,OAAO,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;KAC3D,OAAO,CAAC,SAAS,EAAE,gDAAgD,CAAC;KACpE,OAAO,CAAC,UAAU,EAAE,iDAAiD,CAAC;KACtE,OAAO,CACN,MAAM,EACN,qFAAqF,CACtF;KACA,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAW,EAAQ,EAAE;IAC7C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAA2B,CAAC,EAAE;QAC5D,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;QAChD,mBAAO,CAAC,UAAU,EAAE,CAAC;KACtB;AACH,CAAC,CAAC;KACD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* npm dependencies */
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
const adm_zip_1 = __importDefault(require("adm-zip"));
|
|
17
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
18
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
19
|
+
const glob_1 = __importDefault(require("glob"));
|
|
20
|
+
const isolated_vm_1 = __importDefault(require("isolated-vm"));
|
|
21
|
+
const path_1 = __importDefault(require("path"));
|
|
22
|
+
const child_process_1 = require("child_process");
|
|
23
|
+
/* internal dependencies */
|
|
24
|
+
const functionDefinitions_1 = require("./functionDefinitions");
|
|
25
|
+
/* execute command */
|
|
26
|
+
const check = chalk_1.default.green(`✔`);
|
|
27
|
+
const cross = chalk_1.default.red(`✖`);
|
|
28
|
+
const right = chalk_1.default.green(`›`);
|
|
29
|
+
const build = (pattern, workingDir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
+
const testFiles = glob_1.default
|
|
31
|
+
.sync(`${pattern || 'test/'}**`.replace(/\\/g, '/'))
|
|
32
|
+
.reduce((files, match) => {
|
|
33
|
+
const file = match.replace(/\//g, path_1.default.sep);
|
|
34
|
+
if (file.match(/\.test\.js$/)) {
|
|
35
|
+
files.push(file);
|
|
36
|
+
}
|
|
37
|
+
return files;
|
|
38
|
+
}, []);
|
|
39
|
+
if (!testFiles.length) {
|
|
40
|
+
return { exitCode: 1, stdout: 'No test files found.', stderr: '' };
|
|
41
|
+
}
|
|
42
|
+
const functionsDir = path_1.default.join(workingDir, 'functions');
|
|
43
|
+
const tmpDir = path_1.default.join(workingDir, '.tmp');
|
|
44
|
+
const zipFile = functionDefinitions_1.zipFunctionDefinitions(functionsDir);
|
|
45
|
+
const zip = new adm_zip_1.default(zipFile);
|
|
46
|
+
zip.extractAllTo(path_1.default.join(tmpDir, 'app'), true);
|
|
47
|
+
fs_extra_1.default.writeJSONSync(path_1.default.join(tmpDir, 'package.json'), {
|
|
48
|
+
name: 'app',
|
|
49
|
+
dependencies: { app: 'file:./app' },
|
|
50
|
+
devDependencies: {
|
|
51
|
+
webpack: '^5.10.0',
|
|
52
|
+
'webpack-cli': '^4.2.0',
|
|
53
|
+
},
|
|
54
|
+
scripts: {
|
|
55
|
+
all: 'yarn --force && yarn build',
|
|
56
|
+
build: 'npx webpack --config webpack.config.js',
|
|
57
|
+
},
|
|
58
|
+
}, { spaces: 2 });
|
|
59
|
+
fs_extra_1.default.writeFileSync(path_1.default.join(tmpDir, 'webpack.config.js'), `module.exports = {
|
|
60
|
+
target: 'node',
|
|
61
|
+
entry: './app.js',
|
|
62
|
+
mode: 'production',
|
|
63
|
+
output: {
|
|
64
|
+
filename: 'app.bundle.js',
|
|
65
|
+
libraryTarget: 'var',
|
|
66
|
+
library: 'app',
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
`);
|
|
70
|
+
fs_extra_1.default.writeFileSync(path_1.default.join(tmpDir, 'app.js'), `import { default as $app } from 'app';
|
|
71
|
+
|
|
72
|
+
${testFiles.map((file) => fs_extra_1.default.readFileSync(file, 'utf-8')).join('\n\n')}
|
|
73
|
+
`);
|
|
74
|
+
let stdout = '';
|
|
75
|
+
let stderr = '';
|
|
76
|
+
const exitCode = yield new Promise((res) => {
|
|
77
|
+
const process = child_process_1.spawn(`cd ${tmpDir} && yarn && yarn all`, {
|
|
78
|
+
shell: true,
|
|
79
|
+
});
|
|
80
|
+
process.stdout.on('data', (data) => {
|
|
81
|
+
stdout += data;
|
|
82
|
+
});
|
|
83
|
+
process.stderr.on('data', (data) => {
|
|
84
|
+
stderr += data;
|
|
85
|
+
});
|
|
86
|
+
process.on('close', res);
|
|
87
|
+
});
|
|
88
|
+
return { exitCode, stdout, stderr };
|
|
89
|
+
});
|
|
90
|
+
const run = (workingDir) => {
|
|
91
|
+
const helpers = path_1.default.join(workingDir, 'test', 'helpers.js');
|
|
92
|
+
const bundle = path_1.default.join(workingDir, '.tmp', 'dist', 'app.bundle.js');
|
|
93
|
+
const isolate = new isolated_vm_1.default.Isolate({ memoryLimit: 128 });
|
|
94
|
+
const context = isolate.createContextSync();
|
|
95
|
+
context.global.setSync('ivm', isolated_vm_1.default);
|
|
96
|
+
context.global.setSync(`$console`, new isolated_vm_1.default.Reference((level, args) =>
|
|
97
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
98
|
+
console[level](...args)));
|
|
99
|
+
const script = isolate.compileScriptSync(`function run(resolve, reject) {
|
|
100
|
+
|
|
101
|
+
const tests = [];
|
|
102
|
+
let failures = 0;
|
|
103
|
+
|
|
104
|
+
const console = (() => {
|
|
105
|
+
const log = (level) =>
|
|
106
|
+
(...args) =>
|
|
107
|
+
$console.apply(null, [
|
|
108
|
+
level,
|
|
109
|
+
new ivm.ExternalCopy(args).copyInto()
|
|
110
|
+
]);
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
log: log('log'),
|
|
114
|
+
debug: log('debug'),
|
|
115
|
+
info: log('info'),
|
|
116
|
+
warn: log('warn'),
|
|
117
|
+
error: log('error'),
|
|
118
|
+
};
|
|
119
|
+
})();
|
|
120
|
+
|
|
121
|
+
const isEqual = (t,e) => {
|
|
122
|
+
function n(t){return Object.prototype.toString.call(t).slice(8,-1).toLowerCase()}let r=n(t);return r===n(e)&&("array"===r?function(){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(!isEqual(t[n],e[n]))return!1;return!0}():"object"===r?function(){if(Object.keys(t).length!==Object.keys(e).length)return!1;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&!isEqual(t[n],e[n]))return!1;return!0}():"function"===r?t.toString()===e.toString():t===e)
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const test = (desc, fn) => {
|
|
126
|
+
tests.push(new Promise((resolve, reject) => {
|
|
127
|
+
fn()
|
|
128
|
+
.then(() => {
|
|
129
|
+
console.log('\\x1b[32m%s\\x1b[0m', '\\u2714 test ' + JSON.stringify(desc));
|
|
130
|
+
resolve();
|
|
131
|
+
})
|
|
132
|
+
.catch((e) => {
|
|
133
|
+
console.log('\\x1b[31m%s\\x1b[0m', '\\u2718 test ' + JSON.stringify(desc));
|
|
134
|
+
console.error(e.message);
|
|
135
|
+
resolve();
|
|
136
|
+
failures++;
|
|
137
|
+
});
|
|
138
|
+
}));
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
const assert = (left, right) => {
|
|
142
|
+
if (!isEqual(left, right)) {
|
|
143
|
+
throw new Error(\`\\x1b[31m Assertion failed\\x1b[0m
|
|
144
|
+
\\x1b[36mleft:\\x1b[0m \${JSON.stringify(left)}
|
|
145
|
+
\\x1b[36mright:\\x1b[0m \${JSON.stringify(right)}\`);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
${fs_extra_1.default.existsSync(helpers) ? fs_extra_1.default.readFileSync(helpers, 'utf-8') : ''}
|
|
150
|
+
${fs_extra_1.default.readFileSync(bundle, 'utf-8')}
|
|
151
|
+
|
|
152
|
+
Promise.all(tests).then(() => {
|
|
153
|
+
let summary;
|
|
154
|
+
|
|
155
|
+
if (failures) {
|
|
156
|
+
summary = \`\\x1b[31m\${tests.length} tests, \${failures} failure\${
|
|
157
|
+
failures > 1 ? 's' : ''
|
|
158
|
+
}\\x1b[0m\`;
|
|
159
|
+
} else {
|
|
160
|
+
summary = \`\\x1b[32m\${tests.length} tests, 0 failures\\x1b[0m\`;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
resolve.applyIgnored(null, [
|
|
164
|
+
new ivm.ExternalCopy(summary).copyInto()
|
|
165
|
+
]);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
`);
|
|
169
|
+
return new Promise((resolve, reject) => {
|
|
170
|
+
try {
|
|
171
|
+
script.runSync(context);
|
|
172
|
+
context.global
|
|
173
|
+
.getSync('run', { reference: true })
|
|
174
|
+
.applySync(null, [new isolated_vm_1.default.Reference(resolve), new isolated_vm_1.default.Reference(reject)], { timeout: 60000 });
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
reject(error);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
};
|
|
181
|
+
const runTest = (pattern, workingDir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
182
|
+
try {
|
|
183
|
+
let time;
|
|
184
|
+
const start = () => new Date().getTime();
|
|
185
|
+
const stop = () => (new Date().getTime() - time) / 1000;
|
|
186
|
+
console.log(`${right} Building artifacts ...`);
|
|
187
|
+
time = start();
|
|
188
|
+
const { exitCode, stdout } = yield build(pattern, workingDir);
|
|
189
|
+
const buildTime = stop();
|
|
190
|
+
if (exitCode) {
|
|
191
|
+
console.log(`${cross} ${stdout}`);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
console.log(`${check} Build succeeded`);
|
|
195
|
+
console.log(`${right} Running tests ...`);
|
|
196
|
+
time = start();
|
|
197
|
+
const summary = yield run(workingDir);
|
|
198
|
+
const testTime = stop();
|
|
199
|
+
console.log(`\nFinished in ${(buildTime + testTime).toFixed(3)} seconds (build: ${buildTime.toFixed(3)}s, tests: ${testTime.toFixed(3)})`);
|
|
200
|
+
console.log(summary);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
console.log(`${cross} ${String(error)}`);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
exports.runTest = runTest;
|
|
207
|
+
//# sourceMappingURL=testRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testRunner.js","sourceRoot":"","sources":["../../src/functions/testRunner.ts"],"names":[],"mappings":"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"}
|
package/build/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;AAmIA,IAAY,qBAQX;AARD,WAAY,qBAAqB;IAC/B,4CAAmB,CAAA;IACnB,0CAAiB,CAAA;IACjB,0CAAiB,CAAA;IACjB,wCAAe,CAAA;IACf,sCAAa,CAAA;IACb,sCAAa,CAAA;IACb,0CAAiB,CAAA;AACnB,CAAC,EARW,qBAAqB,GAArB,6BAAqB,KAArB,6BAAqB,QAQhC;AAED,oBAAoB;AACpB,IAAY,yBASX;AATD,WAAY,yBAAyB;IACnC,4CAAe,CAAA;IACf,kDAAqB,CAAA;IACrB,8CAAiB,CAAA;IACjB,0CAAa,CAAA;IACb,sDAAyB,CAAA;IACzB,kDAAqB,CAAA;IACrB,0CAAa,CAAA;IACb,0CAAa,CAAA;AACf,CAAC,EATW,yBAAyB,GAAzB,iCAAyB,KAAzB,iCAAyB,QASpC;AA0BD,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;AACnB,CAAC,EAHW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAG1B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@betty-blocks/cli",
|
|
3
|
-
"version": "25.
|
|
3
|
+
"version": "25.30.0",
|
|
4
4
|
"description": "A Betty Blocks CLI",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"author": "Niek Nijland <niek.nijland@bettyblocks.com>",
|
|
@@ -76,6 +76,7 @@
|
|
|
76
76
|
"form-data": "^4.0.0",
|
|
77
77
|
"fs-extra": "^8.1.0",
|
|
78
78
|
"glob": "^7.2.0",
|
|
79
|
+
"isolated-vm": "^4.0.0",
|
|
79
80
|
"joi": "^17.2.1",
|
|
80
81
|
"jsdoc-api": "^7.1.0",
|
|
81
82
|
"jsonschema": "^1.4.0",
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
(() => ({
|
|
2
|
-
name: 'HelloWorld',
|
|
3
|
-
icon: 'TitleIcon',
|
|
4
|
-
category: 'CONTENT',
|
|
5
|
-
structure: [
|
|
6
|
-
{
|
|
7
|
-
name: 'HelloWorld',
|
|
8
|
-
options: [
|
|
9
|
-
{
|
|
10
|
-
type: 'FONT',
|
|
11
|
-
label: 'Type',
|
|
12
|
-
key: 'type',
|
|
13
|
-
value: 'Title1',
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
type: 'TEXT',
|
|
17
|
-
label: 'Content',
|
|
18
|
-
key: 'content',
|
|
19
|
-
value: 'Hello World!',
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
type: 'CUSTOM',
|
|
23
|
-
label: 'Align',
|
|
24
|
-
key: 'align',
|
|
25
|
-
value: 'center',
|
|
26
|
-
configuration: {
|
|
27
|
-
as: 'BUTTONGROUP',
|
|
28
|
-
dataType: 'string',
|
|
29
|
-
allowedInput: [
|
|
30
|
-
{ name: 'Left', value: 'left' },
|
|
31
|
-
{ name: 'Center', value: 'center' },
|
|
32
|
-
{ name: 'Right', value: 'right' },
|
|
33
|
-
],
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
type: 'SIZES',
|
|
38
|
-
label: 'Padding',
|
|
39
|
-
key: 'padding',
|
|
40
|
-
value: ['S', 'S', 'S', 'S'],
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
type: 'COLOR',
|
|
44
|
-
label: 'Color',
|
|
45
|
-
key: 'color',
|
|
46
|
-
value: 'Black',
|
|
47
|
-
},
|
|
48
|
-
],
|
|
49
|
-
descendants: [],
|
|
50
|
-
},
|
|
51
|
-
],
|
|
52
|
-
}))();
|