verteilen-core 1.2.17 → 1.2.19

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.
@@ -63,6 +63,7 @@ export interface Project {
63
63
  acl?: ACLType;
64
64
  }
65
65
  export interface Node {
66
+ cluster: boolean;
66
67
  uuid: string;
67
68
  parent?: string;
68
69
  url: string;
@@ -1,6 +1,7 @@
1
1
  import { DatabaseContainer, Project } from "./base";
2
2
  import ws from 'ws';
3
3
  import { ServiceMode } from "./enum";
4
+ import { ACLType, LocalPermission } from "./server";
4
5
  type ProjectCall = (p: Project) => Project;
5
6
  type DatabaseCall = () => Array<DatabaseContainer>;
6
7
  export interface WebsocketPack {
@@ -133,9 +134,12 @@ export interface PluginWithToken extends Plugin {
133
134
  token: Array<string>;
134
135
  }
135
136
  export interface PluginList {
137
+ owner?: string;
136
138
  title?: string;
137
139
  url?: string;
138
140
  plugins: Array<Plugin>;
141
+ permission?: LocalPermission;
142
+ acl?: ACLType;
139
143
  }
140
144
  export interface PluginState {
141
145
  name: string;
@@ -144,10 +148,13 @@ export interface PluginState {
144
148
  supported: boolean;
145
149
  }
146
150
  export interface PluginPageTemplate {
151
+ owner?: string;
147
152
  name: string;
148
153
  project: Array<TemplateGroup>;
149
154
  database: Array<TemplateGroup2>;
150
155
  url?: string;
156
+ permission?: LocalPermission;
157
+ acl?: ACLType;
151
158
  }
152
159
  export interface PluginPageData {
153
160
  plugins: Array<PluginList>;
@@ -196,7 +196,7 @@ class WebsocketManager {
196
196
  const data = [];
197
197
  this.targets.forEach(x => {
198
198
  if (x.websocket.readyState == interface_1.SocketState.CLOSED) {
199
- data.push({ uuid: x.uuid, url: x.websocket.url });
199
+ data.push({ cluster: false, uuid: x.uuid, url: x.websocket.url });
200
200
  }
201
201
  });
202
202
  data.forEach(d => this.removeByUUID(d.uuid));
@@ -206,6 +206,7 @@ class WebsocketManager {
206
206
  result = this.targets.map(x => {
207
207
  return {
208
208
  s: false,
209
+ cluster: false,
209
210
  uuid: x.uuid,
210
211
  state: x.websocket.readyState,
211
212
  url: x.websocket.url,
@@ -7,8 +7,8 @@ const GetCurrentPlugin = async (loader) => {
7
7
  plugins: [],
8
8
  templates: []
9
9
  };
10
- const root = loader.join(loader.root, 'plugin');
11
- const root2 = loader.join(loader.root, 'template');
10
+ const root = loader.join(loader.root, 'template');
11
+ const root2 = loader.join(loader.root, 'plugin');
12
12
  if (!loader.exists(root))
13
13
  await loader.mkdir(root);
14
14
  if (!loader.exists(root2))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "verteilen-core",
3
- "version": "1.2.17",
3
+ "version": "1.2.19",
4
4
  "license": "MIT",
5
5
  "homepage": "https://verteilen.github.io/wiki/",
6
6
  "author": "Elly",
@@ -278,6 +278,12 @@ export interface Project {
278
278
  * Which specified in this type of structure
279
279
  */
280
280
  export interface Node {
281
+ /**
282
+ * **Cluster Mode**\
283
+ * Check if the node is cluster\
284
+ * This mean it does not have compute ability
285
+ */
286
+ cluster: boolean
281
287
  /**
282
288
  * **ID**\
283
289
  * The UUID of the compute node
@@ -10,6 +10,7 @@
10
10
  import { DatabaseContainer, Project } from "./base"
11
11
  import ws from 'ws'
12
12
  import { ServiceMode } from "./enum"
13
+ import { ACLType, LocalPermission } from "./server"
13
14
 
14
15
  type ProjectCall = (p:Project) => Project
15
16
  type DatabaseCall = () => Array<DatabaseContainer>
@@ -243,9 +244,22 @@ export interface PluginWithToken extends Plugin {
243
244
  }
244
245
 
245
246
  export interface PluginList {
247
+ owner?: string
246
248
  title?: string
247
249
  url?: string
248
250
  plugins: Array<Plugin>
251
+ /**
252
+ * **Local Permission**\
253
+ * Client-side only permission field\
254
+ * Server will check user token and defined its permission level\
255
+ * And modify this field and send back to user
256
+ */
257
+ permission?: LocalPermission
258
+ /**
259
+ * **Accessibility**\
260
+ * Could be public, protected, private
261
+ */
262
+ acl?: ACLType
249
263
  }
250
264
 
251
265
  export interface PluginState {
@@ -256,10 +270,23 @@ export interface PluginState {
256
270
  }
257
271
 
258
272
  export interface PluginPageTemplate {
273
+ owner?: string
259
274
  name: string
260
275
  project: Array<TemplateGroup>
261
276
  database: Array<TemplateGroup2>
262
277
  url?: string
278
+ /**
279
+ * **Local Permission**\
280
+ * Client-side only permission field\
281
+ * Server will check user token and defined its permission level\
282
+ * And modify this field and send back to user
283
+ */
284
+ permission?: LocalPermission
285
+ /**
286
+ * **Accessibility**\
287
+ * Could be public, protected, private
288
+ */
289
+ acl?: ACLType
263
290
  }
264
291
 
265
292
  export interface PluginPageData {
@@ -232,7 +232,7 @@ export class WebsocketManager {
232
232
  const data:Array<Node> = []
233
233
  this.targets.forEach(x => {
234
234
  if(x.websocket.readyState == SocketState.CLOSED){
235
- data.push({uuid: x.uuid, url: x.websocket.url})
235
+ data.push({cluster: false, uuid: x.uuid, url: x.websocket.url})
236
236
  }
237
237
  })
238
238
  data.forEach(d => this.removeByUUID(d.uuid))
@@ -243,6 +243,7 @@ export class WebsocketManager {
243
243
  result = this.targets.map(x => {
244
244
  return {
245
245
  s: false,
246
+ cluster: false,
246
247
  uuid: x.uuid,
247
248
  state: x.websocket.readyState,
248
249
  url: x.websocket.url,
@@ -43,8 +43,8 @@ export const GetCurrentPlugin = async (loader:RecordIOBase):Promise<PluginPageDa
43
43
  plugins: [],
44
44
  templates: []
45
45
  }
46
- const root = loader.join(loader.root, 'plugin')
47
- const root2 = loader.join(loader.root, 'template')
46
+ const root = loader.join(loader.root, 'template')
47
+ const root2 = loader.join(loader.root, 'plugin')
48
48
  if(!loader.exists(root)) await loader.mkdir(root)
49
49
  if(!loader.exists(root2)) await loader.mkdir(root2)
50
50
 
@@ -0,0 +1,35 @@
1
+ import * as path from "path"
2
+ import * as os from "os"
3
+ import * as fsp from "fs/promises"
4
+ import * as fs from "fs"
5
+ import { GetCurrentPlugin } from "../../src/server/plugin"
6
+ import { DATA_FOLDER } from "../../src/interface"
7
+ import { RecordIOBase } from "../../src/server/io"
8
+
9
+ const CreateIO = ():RecordIOBase => {
10
+ return {
11
+ root: path.join(os.homedir(), DATA_FOLDER),
12
+ join: path.join,
13
+ read_dir: (path:string) => fsp.readdir(path, { withFileTypes: false }),
14
+ read_dir_dir: (path:string) => fsp.readdir(path, { withFileTypes: true }).then(x => x.filter(y => !y.isFile()).map(y => y.name)),
15
+ read_dir_file: (path:string) => fsp.readdir(path, { withFileTypes: true }).then(x => x.filter(y => y.isFile()).map(y => y.name)),
16
+ read_string: (path:string, options?:any) => fsp.readFile(path, options).then(x => x.toString('utf-8')),
17
+ write_string: (path:string, content:string) => fsp.writeFile(path, content),
18
+ exists: (path:string) => fs.existsSync(path),
19
+ mkdir: async (path:string) => { await fsp.mkdir(path, {recursive: true}) },
20
+ rm: (path:string) => fsp.rm(path, {recursive: true}),
21
+ cp: (path:string, newpath:string) => fsp.cp(path, newpath)
22
+ }
23
+ }
24
+
25
+ describe("Get plugin test", () => {
26
+ test("Query plugin", async () => {
27
+ const plugin = await GetCurrentPlugin(CreateIO())
28
+ const p = await fsp.readdir(path.join(os.homedir(), DATA_FOLDER, "plugin"), { withFileTypes: true })
29
+ const t = await fsp.readdir(path.join(os.homedir(), DATA_FOLDER, "template"), { withFileTypes: true })
30
+ const p2 = p.filter(x => x.isFile()).map(x => x.name)
31
+ const t2 = t.filter(x => x.isFile()).map(x => x.name)
32
+ expect(plugin.plugins.length).toBe(p2.length)
33
+ expect(plugin.templates.length).toBe(t2.length)
34
+ })
35
+ })
package/test/TEST.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/test/TEST.js DELETED
@@ -1,88 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- const pem = __importStar(require("pem"));
37
- const https = __importStar(require("https"));
38
- const ws = __importStar(require("ws"));
39
- let h = undefined;
40
- let w = undefined;
41
- async function get_pem() {
42
- return new Promise(resolve => {
43
- pem.createCertificate({ days: 1, selfSigned: true }, (err, keys) => {
44
- resolve([keys.clientKey, keys.certificate]);
45
- });
46
- });
47
- }
48
- async function start_server() {
49
- const pems = await get_pem();
50
- h = https.createServer({ key: pems[0], cert: pems[1], minVersion: 'TLSv1.2', maxVersion: 'TLSv1.3' }, (req, res) => {
51
- res.writeHead(200);
52
- res.end('HTTPS server is running');
53
- });
54
- h.addListener('upgrade', (req, res, head) => console.log('UPGRADE:', req.url));
55
- w = new ws.Server({ server: h });
56
- w.on('listening', (socket) => {
57
- console.log("Listen Event");
58
- });
59
- w.on('error', (err) => {
60
- console.log("Error Event");
61
- });
62
- w.on('connection', (socket) => {
63
- socket.on('message', (data) => {
64
- console.log("Recevied Data: ", data.toString());
65
- });
66
- });
67
- h.listen(10000, () => {
68
- console.log("Listen to 10000");
69
- });
70
- }
71
- async function start_client() {
72
- return new Promise((resolve) => {
73
- const cli = new ws.WebSocket("wss://127.0.0.1:10000", { agent: new https.Agent(), rejectUnauthorized: false });
74
- cli.on('error', (err) => {
75
- console.log("Socket Error: ", err);
76
- });
77
- setTimeout(() => {
78
- cli.send("Hello World");
79
- cli.close();
80
- resolve(undefined);
81
- }, 1000);
82
- });
83
- }
84
- async function main() {
85
- await start_server();
86
- await start_client();
87
- }
88
- main();
@@ -1 +0,0 @@
1
- export {};
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const job_execute_1 = require("../../src/client/job_execute");
4
- const interface_1 = require("../../src/interface");
5
- describe("Client Execute Test", () => {
6
- let execute = undefined;
7
- let job = undefined;
8
- afterAll(() => {
9
- execute = undefined;
10
- });
11
- test("Testing condition (OS when path not exist)", async () => {
12
- job = {
13
- index: 0,
14
- uuid: "UUID",
15
- runtime_uuid: "Runtime",
16
- category: interface_1.JobCategory.Condition,
17
- type: interface_1.JobType2.CHECK_PATH,
18
- script: "",
19
- string_args: ["Not Exist"],
20
- number_args: [],
21
- boolean_args: [],
22
- id_args: [],
23
- };
24
- execute = new job_execute_1.ClientJobExecute((str) => console.log(str), (str) => console.log(str), job, undefined, { plugins: [] });
25
- await expect(execute.execute()).rejects.toBeDefined();
26
- });
27
- test("Testing condition (OS when path exist)", async () => {
28
- job = {
29
- index: 0,
30
- uuid: "UUID",
31
- runtime_uuid: "Runtime",
32
- category: interface_1.JobCategory.Condition,
33
- type: interface_1.JobType2.CHECK_PATH,
34
- script: "",
35
- string_args: [process.cwd()],
36
- number_args: [],
37
- boolean_args: [],
38
- id_args: [],
39
- };
40
- execute = new job_execute_1.ClientJobExecute((str) => console.log(str), (str) => console.log(str), job, undefined, { plugins: [] });
41
- await expect(execute.execute()).resolves.toBeDefined();
42
- });
43
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,66 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const job_database_1 = require("../../src/client/job_database");
4
- const javascript_1 = require("../../src/client/javascript");
5
- const os_1 = require("../../src/client/os");
6
- const interface_1 = require("../../src/interface");
7
- describe("JS Test", () => {
8
- let js = undefined;
9
- let os = undefined;
10
- let para = undefined;
11
- let database = undefined;
12
- let lib = undefined;
13
- beforeAll(() => {
14
- os = new os_1.ClientOS(() => "", () => "", (str) => console.log(str), (str) => console.log(str));
15
- para = new job_database_1.ClientJobDatabase();
16
- database = {
17
- uuid: "",
18
- title: "",
19
- canWrite: true,
20
- containers: [
21
- { name: "n1", type: interface_1.DataType.Number, value: 7, hidden: false, runtimeOnly: false },
22
- { name: "n2", type: interface_1.DataType.Number, value: 5, hidden: false, runtimeOnly: false },
23
- { name: "s1", type: interface_1.DataType.String, value: "Hello World", hidden: false, runtimeOnly: false },
24
- { name: "b1", type: interface_1.DataType.Boolean, value: true, hidden: false, runtimeOnly: false },
25
- { name: "e1", type: interface_1.DataType.Expression, value: 0, meta: "n1 + n2", hidden: false, runtimeOnly: false },
26
- ]
27
- };
28
- js = new javascript_1.ClientJavascript((str) => console.log(str), (str) => console.log(str), () => undefined);
29
- javascript_1.ClientJavascript.Init((str) => console.log(str), (str) => console.log(str), os, para, () => lib, () => database, () => undefined);
30
- });
31
- afterAll(() => {
32
- js = undefined;
33
- os = undefined;
34
- para = undefined;
35
- database = undefined;
36
- lib = undefined;
37
- });
38
- test("Env test getter", async () => {
39
- expect(await js.JavascriptExecuteWithLib(`return env.getnumber("n1");`, [])).toBe(7);
40
- expect(await js.JavascriptExecuteWithLib(`return env.getnumber("n2");`, [])).toBe(5);
41
- expect(await js.JavascriptExecuteWithLib(`return env.getstring("s1");`, [])).toBe("Hello World");
42
- expect(await js.JavascriptExecuteWithLib(`return env.getboolean("b1");`, [])).toBe(true);
43
- expect(await js.JavascriptExecuteWithLib(`return env.getnumber("nnn");`, [])).toBe(undefined);
44
- expect(await js.JavascriptExecuteWithLib(`return env.getstring("sss");`, [])).toBe(undefined);
45
- expect(await js.JavascriptExecuteWithLib(`return env.getboolean("bbb");`, [])).toBe(undefined);
46
- });
47
- test("Env test loop", async () => {
48
- expect(await js.JavascriptExecuteWithLib(`
49
- result = 0;
50
- n = env.getnumber("n2");
51
- for(i=0;i<3;i++){
52
- result += n;
53
- }
54
- return result;
55
- `, [])).toBe(15);
56
- });
57
- test("Env test has", async () => {
58
- expect(await js.JavascriptExecuteWithLib(`return env.hasnumber("n1");`, [])).toBe(true);
59
- expect(await js.JavascriptExecuteWithLib(`return env.hasnumber("n2");`, [])).toBe(true);
60
- expect(await js.JavascriptExecuteWithLib(`return env.hasstring("s1");`, [])).toBe(true);
61
- expect(await js.JavascriptExecuteWithLib(`return env.hasboolean("b1");`, [])).toBe(true);
62
- expect(await js.JavascriptExecuteWithLib(`return env.hasnumber("nnn");`, [])).toBe(false);
63
- expect(await js.JavascriptExecuteWithLib(`return env.hasstring("sss");`, [])).toBe(false);
64
- expect(await js.JavascriptExecuteWithLib(`return env.hasboolean("bbb");`, [])).toBe(false);
65
- });
66
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- describe("Client Test", () => {
4
- let client;
5
- beforeAll(() => {
6
- });
7
- afterAll(() => {
8
- });
9
- test("Check init state", () => {
10
- });
11
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,137 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const job_database_1 = require("../../src/client/job_database");
4
- const os_1 = require("../../src/client/os");
5
- const interface_1 = require("../../src/interface");
6
- const base_1 = require("../../src/script/execute/base");
7
- describe("Express Test", () => {
8
- let os = undefined;
9
- let para = undefined;
10
- let database = undefined;
11
- let lib = undefined;
12
- const generateJob = (str) => {
13
- return {
14
- uuid: "test-job",
15
- category: interface_1.JobCategory.Execution,
16
- type: interface_1.JobType.JAVASCRIPT,
17
- script: "",
18
- string_args: str,
19
- number_args: [],
20
- boolean_args: [],
21
- id_args: [],
22
- };
23
- };
24
- const generateTask = (Job, property, cronjob) => {
25
- return {
26
- uuid: "test-task",
27
- title: "Test Task",
28
- description: "This is a test task",
29
- setupjob: false,
30
- cronjob: cronjob ? true : false,
31
- cronjobKey: cronjob ?? "",
32
- multi: false,
33
- multiKey: "",
34
- properties: property,
35
- jobs: [Job],
36
- };
37
- };
38
- beforeEach(() => {
39
- os = new os_1.ClientOS(() => "", () => "", (str) => console.log(str), (str) => console.log(str));
40
- para = new job_database_1.ClientJobDatabase();
41
- database = {
42
- uuid: "",
43
- title: "",
44
- canWrite: true,
45
- containers: [
46
- { name: "n1", type: interface_1.DataType.Number, value: 7, hidden: false, runtimeOnly: false },
47
- { name: "n2", type: interface_1.DataType.Number, value: 5, hidden: false, runtimeOnly: false },
48
- { name: "DATA_0", type: interface_1.DataType.Number, value: 10, hidden: false, runtimeOnly: false },
49
- { name: "DATA_1", type: interface_1.DataType.Number, value: 1000, hidden: false, runtimeOnly: false },
50
- { name: "HELLO_0", type: interface_1.DataType.Number, value: 99, hidden: false, runtimeOnly: false },
51
- { name: "HELLO_1", type: interface_1.DataType.Number, value: 9999, hidden: false, runtimeOnly: false },
52
- { name: "s1", type: interface_1.DataType.String, value: "Hello World", hidden: false, runtimeOnly: false },
53
- { name: "b1", type: interface_1.DataType.Boolean, value: true, hidden: false, runtimeOnly: false },
54
- { name: "e1", type: interface_1.DataType.Expression, value: 0, meta: "n1+n2", hidden: false, runtimeOnly: false },
55
- { name: "b1", type: interface_1.DataType.Object, value: {
56
- data: [{ k: 5, p: 5, n: 5 }, { k: 10, p: 122, n: 5 }]
57
- }, hidden: false, runtimeOnly: false },
58
- ]
59
- };
60
- });
61
- afterEach(() => {
62
- os = undefined;
63
- para = undefined;
64
- database = undefined;
65
- lib = undefined;
66
- });
67
- test("Property getter", () => {
68
- const job = generateJob(["%e1%", "KKK %s1%", "%POS%"]);
69
- const task = generateTask(job, [{
70
- name: "POS",
71
- expression: "n1 + n2 + n1"
72
- }]);
73
- base_1.ExecuteManager_Base.string_args_transform(task, job, (str) => console.log(str), database, 1);
74
- expect(job.string_args[0]).toBe("12");
75
- expect(job.string_args[1]).toBe("KKK Hello World");
76
- expect(job.string_args[2]).toBe("19");
77
- });
78
- test("Nest getter", () => {
79
- const job = generateJob(["%POS%", "Hello %POS_Deep%", "%POS_Deepp%"]);
80
- const task = generateTask(job, [
81
- {
82
- name: "POS",
83
- expression: `STRING(["b1.data.", ck, ".p"])`
84
- },
85
- {
86
- name: "POS_Deep",
87
- expression: "POS",
88
- deep: 2
89
- },
90
- {
91
- name: "POS_Deepp",
92
- expression: "POS_Deep + 1"
93
- }
94
- ]);
95
- base_1.ExecuteManager_Base.string_args_transform(task, job, (str) => console.log(str), database, 1);
96
- expect(job.string_args[0]).toBe("b1.data.1.p");
97
- expect(job.string_args[1]).toBe("Hello 122");
98
- expect(job.string_args[2]).toBe("123");
99
- });
100
- test("_ck_ getter 0", () => {
101
- const job = generateJob(["%p1%", "%p2%"]);
102
- const task = generateTask(job, [
103
- {
104
- name: "p1",
105
- expression: `DATA__ck_`
106
- },
107
- {
108
- name: "p2",
109
- expression: "HELLO__ck_",
110
- },
111
- ]);
112
- base_1.ExecuteManager_Base.string_args_transform(task, job, (str) => console.log(str), database, 0);
113
- expect(job.string_args[0]).toBe("10");
114
- expect(job.string_args[1]).toBe("99");
115
- });
116
- test("_ck_ getter 1", () => {
117
- const job = generateJob(["%p1%", "%p2%"]);
118
- const task = generateTask(job, [
119
- {
120
- name: "p1",
121
- expression: `DATA__ck_`
122
- },
123
- {
124
- name: "p2",
125
- expression: "HELLO__ck_",
126
- },
127
- ]);
128
- base_1.ExecuteManager_Base.string_args_transform(task, job, (str) => console.log(str), database, 1);
129
- expect(job.string_args[0]).toBe("1000");
130
- expect(job.string_args[1]).toBe("9999");
131
- });
132
- test("Cronjob Key Testing", () => {
133
- expect(base_1.ExecuteManager_Base.get_number_global("e1", database)).toBe(12);
134
- expect(base_1.ExecuteManager_Base.get_number_global("n1", database)).toBe(7);
135
- expect(base_1.ExecuteManager_Base.get_number_global("b1.data.0.p", database)).toBe(5);
136
- });
137
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,109 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const interface_1 = require("../../src/interface");
4
- const util_parser_1 = require("../../src/script/execute/util_parser");
5
- describe('Parser testing (Replace Text Feature)', () => {
6
- test("Single replace", () => {
7
- expect(util_parser_1.Util_Parser.replaceAll('E %YYY% KK', '%YYY%', '6')).toBe('E 6 KK');
8
- });
9
- test("Multiple replace", () => {
10
- expect(util_parser_1.Util_Parser.replaceAll('E %YYY% KK %YYY%', '%YYY%', '6')).toBe('E 6 KK 6');
11
- });
12
- });
13
- describe('Parser testing (ToKeyValue)', () => {
14
- let p = undefined;
15
- beforeAll(() => {
16
- p = { uuid: '', title: '', canWrite: true, containers: [
17
- { name: 'n1', value: 0, type: interface_1.DataType.Number, hidden: false, runtimeOnly: false },
18
- { name: 's1', value: "Test", type: interface_1.DataType.Number, hidden: false, runtimeOnly: false },
19
- { name: 'b1', value: true, type: interface_1.DataType.Number, hidden: false, runtimeOnly: false },
20
- ] };
21
- });
22
- afterAll(() => {
23
- p = undefined;
24
- });
25
- test("Testing value transform", () => {
26
- const a = util_parser_1.Util_Parser.to_keyvalue(p);
27
- expect(a.length).toBe(3);
28
- expect(a[0].key).toBe("n1");
29
- expect(a[0].value).toBe("0");
30
- expect(a[1].key).toBe("s1");
31
- expect(a[1].value).toBe("Test");
32
- expect(a[2].key).toBe("b1");
33
- expect(a[2].value).toBe("true");
34
- });
35
- });
36
- describe('Parser testing (replacePara)', () => {
37
- let p = undefined;
38
- let e = undefined;
39
- beforeAll(() => {
40
- p = { uuid: '', title: '', canWrite: true, containers: [
41
- { name: 'n1', value: 7, type: interface_1.DataType.Number, hidden: false, runtimeOnly: false },
42
- { name: 'n2', value: 9, type: interface_1.DataType.Number, hidden: false, runtimeOnly: false },
43
- { name: 's1', value: "Test", type: interface_1.DataType.String, hidden: false, runtimeOnly: false },
44
- { name: 'b1', value: true, type: interface_1.DataType.Boolean, hidden: false, runtimeOnly: false },
45
- { name: 'o1', value: {
46
- t: "Test", t2: "Hello",
47
- deep: { d: "World" },
48
- data: [{ iframe: 5, p: 5, n: 5 }, { iframe: 10, p: 5, n: 5 }]
49
- }, type: interface_1.DataType.Object, hidden: false, runtimeOnly: false },
50
- { name: 'Se1', value: 0, meta: [123456], config: { types: [interface_1.DataTypeBase.Number] }, type: interface_1.DataType.Select, hidden: false, runtimeOnly: false },
51
- { name: 'Li1', value: ["Hello", "World"], type: interface_1.DataType.List, hidden: false, runtimeOnly: false },
52
- ] };
53
- e = new util_parser_1.Util_Parser([...util_parser_1.Util_Parser.to_keyvalue(p), { key: 'ck', value: 1 }]);
54
- });
55
- afterAll(() => {
56
- p = undefined;
57
- e = undefined;
58
- });
59
- test("Number replace", () => {
60
- expect(e.replacePara("%n1% Hello")).toBe("7 Hello");
61
- });
62
- test("String replace", () => {
63
- expect(e.replacePara("%s1% Hello")).toBe("Test Hello");
64
- expect(e.replacePara("%s1%/%s1%/Hello")).toBe("Test/Test/Hello");
65
- });
66
- test("Boolean replace", () => {
67
- expect(e.replacePara("%b1% Hello")).toBe("true Hello");
68
- });
69
- test("Expression replace", () => {
70
- expect(e.replacePara("%{ n1 * n2 }% Hello")).toBe("63 Hello");
71
- });
72
- test("Expression replace include index", () => {
73
- expect(e.replacePara("%{ n_ck_ * n2 }% Hello")).toBe("63 Hello");
74
- });
75
- test("Prevent Failed Expression replace", () => {
76
- expect(e.replacePara("%{ n1 * OK }% Hello")).toBe("0 Hello");
77
- });
78
- test("Prevent replace", () => {
79
- expect(e.replacePara("%OK% Hello")).toBe("%OK% Hello");
80
- });
81
- test("Object replace", () => {
82
- expect(e.replacePara("%o1.t%")).toBe("Test");
83
- expect(e.replacePara("%o1.t2%")).toBe("Hello");
84
- expect(e.replacePara("%o1.deep.d%")).toBe("World");
85
- expect(e.replacePara("%o1.data.length%")).toBe("2");
86
- expect(e.replacePara("%o1.data.length%")).toBe("2");
87
- expect(e.replacePara("%o1.data.length%")).toBe("2");
88
- expect(e.replacePara("%o1.data.0.iframe%")).toBe("5");
89
- expect(e.replacePara("%o1.data.1.iframe%")).toBe("10");
90
- });
91
- test("List replace one", () => {
92
- expect(e.replacePara("Hello %Li1.1%")).toBe("Hello World");
93
- });
94
- test("List replace both", () => {
95
- expect(e.replacePara("%Li1.0% %Li1.1%")).toBe("Hello World");
96
- });
97
- test("List Length replace", () => {
98
- expect(e.replacePara("D%Li1.length%")).toBe("D2");
99
- });
100
- test("List Length replace", () => {
101
- expect(e.replacePara("D%Li1.length%")).toBe("D2");
102
- });
103
- test("Select replace", () => {
104
- expect(e.replacePara("D%Se1%")).toBe("D123456");
105
- });
106
- test("Ignore", () => {
107
- expect(e.replacePara("^%05d.png")).toBe("%05d.png");
108
- });
109
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- describe("Execute Manager Test", () => {
4
- let socket;
5
- beforeAll(() => {
6
- });
7
- afterAll(() => {
8
- socket = undefined;
9
- });
10
- test("Check init state", () => {
11
- });
12
- });