@operato/scene-excel 0.0.26

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.
@@ -0,0 +1 @@
1
+ declare module '*.png'
package/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ ### [0.0.26](https://github.com/things-scene/operato-scene/compare/v0.0.25...v0.0.26) (2022-01-01)
7
+
8
+
9
+ ### :rocket: New Features
10
+
11
+ * add scene-excel ([bb4bcda](https://github.com/things-scene/operato-scene/commit/bb4bcdab98fd1a392cf6c697bc9fbb312765755a))
12
+
13
+
14
+ ### :bug: Bug Fix
15
+
16
+ * upgrade [@operato](https://github.com/operato) modules ([ddcb27f](https://github.com/things-scene/operato-scene/commit/ddcb27f7562243d9fc581fed3090c3be42ce1d28))
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Hearty, Oh
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,31 @@
1
+ ## node package를 설치한다.
2
+
3
+ `$ yarn`
4
+
5
+ ## 실행
6
+
7
+ `$ yarn serve`
8
+ `$ yarn serve:dev`
9
+
10
+ ## 포트를 바꾸려면, -p 3001 식으로 추가해준다.
11
+
12
+ `$ yarn serve`
13
+ `$ yarn serve -p 3001`
14
+
15
+ ## test in browser
16
+
17
+ http://localhost:3000
18
+
19
+ ## build
20
+
21
+ `$ yarn build`
22
+
23
+ | type | filename | for | tested |
24
+ | ---- | ------------------------------------------ | -------------- | ------ |
25
+ | UMD | things-scene-excel.js | modern browser | O |
26
+ | UMD | things-scene-excel-ie.js | ie 11 | O |
27
+ | ESM | things-scene-excel.mjs | modern browser | O |
28
+
29
+ ## publish
30
+
31
+ `$ yarn publish`
Binary file
Binary file
@@ -0,0 +1,31 @@
1
+ import { Properties, Shape } from '@hatiolab/things-scene';
2
+ declare const Excel_base: (new (...args: any[]) => {
3
+ isDataSource(): boolean;
4
+ }) & typeof Shape;
5
+ export default class Excel extends Excel_base {
6
+ static _image: HTMLImageElement;
7
+ static get image(): HTMLImageElement;
8
+ private repeatTimer?;
9
+ private src?;
10
+ dispose(): void;
11
+ ready(): void;
12
+ render(context: CanvasRenderingContext2D): void;
13
+ get nature(): {
14
+ mutable: boolean;
15
+ resizable: boolean;
16
+ rotatable: boolean;
17
+ properties: {
18
+ type: string;
19
+ label: string;
20
+ name: string;
21
+ placeholder: string;
22
+ }[];
23
+ help: string;
24
+ };
25
+ _initInterval(): void;
26
+ _startRepeater(): void;
27
+ _stopRepeater(): void;
28
+ ondropfile(transfered: any, files: any): void;
29
+ onchange(after: Properties, before: Properties): void;
30
+ }
31
+ export {};
package/dist/excel.js ADDED
@@ -0,0 +1,130 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { Component, DataSource, RectPath, Shape } from '@hatiolab/things-scene';
5
+ import COMPONENT_IMAGE from '../assets/symbol-excel.png';
6
+ // @ts-ignore
7
+ import XLSX from '!xlsx';
8
+ const NATURE = {
9
+ mutable: false,
10
+ resizable: true,
11
+ rotatable: true,
12
+ properties: [
13
+ {
14
+ type: 'string',
15
+ label: 'src',
16
+ name: 'src',
17
+ placeholder: 'Excel File URL'
18
+ },
19
+ {
20
+ type: 'number',
21
+ label: 'period',
22
+ name: 'period',
23
+ placeholder: 'seconds'
24
+ }
25
+ ],
26
+ help: 'scene/component/excel'
27
+ };
28
+ async function fetchData(url) {
29
+ if (!url.startsWith('data:')) {
30
+ // prevent read from cache
31
+ if (url.indexOf('?') !== -1) {
32
+ url = url + `&ts=${Date.now()}`;
33
+ }
34
+ else {
35
+ url = url + `?ts=${Date.now()}`;
36
+ }
37
+ }
38
+ const file = await fetch(url, {
39
+ method: 'GET',
40
+ headers: {
41
+ 'Content-Type': 'application/xlsx'
42
+ },
43
+ credentials: 'include'
44
+ });
45
+ const workbook = XLSX.read(await file.arrayBuffer(), { type: 'array' });
46
+ var result = {};
47
+ workbook.SheetNames.forEach((sheet) => {
48
+ var roa = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]);
49
+ if (roa.length) {
50
+ result[sheet] = roa;
51
+ }
52
+ });
53
+ console.log('result', result);
54
+ return result;
55
+ }
56
+ export default class Excel extends DataSource(RectPath(Shape)) {
57
+ static get image() {
58
+ if (!Excel._image) {
59
+ Excel._image = new Image();
60
+ Excel._image.src = COMPONENT_IMAGE;
61
+ }
62
+ return Excel._image;
63
+ }
64
+ dispose() {
65
+ this._stopRepeater();
66
+ super.dispose();
67
+ }
68
+ ready() {
69
+ const { src } = this.state;
70
+ if (src) {
71
+ this._initInterval();
72
+ }
73
+ }
74
+ render(context) {
75
+ /*
76
+ * TODO role이 publisher 인지 subscriber 인지에 따라서 구분할 수 있는 표시를 추가할 것.
77
+ */
78
+ var { left, top, width, height } = this.bounds;
79
+ context.beginPath();
80
+ this.drawImage(context, Excel.image, left, top, width, height);
81
+ }
82
+ get nature() {
83
+ return NATURE;
84
+ }
85
+ _initInterval() {
86
+ this._stopRepeater();
87
+ this._startRepeater();
88
+ }
89
+ _startRepeater() {
90
+ var { src, period } = this.state;
91
+ period = Number(period);
92
+ var fetchable = true;
93
+ if (period && this.app.isViewMode) {
94
+ this.repeatTimer = setInterval(() => {
95
+ fetchable &&
96
+ this.repeatTimer &&
97
+ requestAnimationFrame(() => {
98
+ fetchable = true;
99
+ fetchData(src).then(data => {
100
+ this.setState('data', data);
101
+ });
102
+ });
103
+ fetchable = false;
104
+ }, period * 1000);
105
+ }
106
+ fetchData(src).then(data => {
107
+ this.setState('data', data);
108
+ });
109
+ }
110
+ _stopRepeater() {
111
+ if (this.repeatTimer)
112
+ clearTimeout(this.repeatTimer);
113
+ delete this.repeatTimer;
114
+ }
115
+ ondropfile(transfered, files) {
116
+ for (let i = 0; i < transfered.length; i++) {
117
+ if (/\.xlsx?$/.test(transfered[i].name)) {
118
+ this.src = files[i];
119
+ return;
120
+ }
121
+ }
122
+ }
123
+ onchange(after, before) {
124
+ if ('period' in after || 'src' in after) {
125
+ this._initInterval();
126
+ }
127
+ }
128
+ }
129
+ Component.register('excel', Excel);
130
+ //# sourceMappingURL=excel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel.js","sourceRoot":"","sources":["../src/excel.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, DataSource, Properties, RectPath, Shape } from '@hatiolab/things-scene'\n\nimport COMPONENT_IMAGE from '../assets/symbol-excel.png'\n// @ts-ignore\nimport XLSX from '!xlsx'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'string',\n label: 'src',\n name: 'src',\n placeholder: 'Excel File URL'\n },\n {\n type: 'number',\n label: 'period',\n name: 'period',\n placeholder: 'seconds'\n }\n ],\n help: 'scene/component/excel'\n}\n\nasync function fetchData(url: string) {\n if (!url.startsWith('data:')) {\n // prevent read from cache\n if (url.indexOf('?') !== -1) {\n url = url + `&ts=${Date.now()}`\n } else {\n url = url + `?ts=${Date.now()}`\n }\n }\n\n const file = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/xlsx'\n },\n credentials: 'include'\n })\n\n const workbook: XLSX.WorkBook = XLSX.read(await file.arrayBuffer(), { type: 'array' })\n\n var result: { [key: string]: unknown } = {}\n workbook.SheetNames.forEach((sheet: string) => {\n var roa = XLSX.utils.sheet_to_json(workbook.Sheets[sheet])\n if (roa.length) {\n result[sheet] = roa\n }\n })\n\n console.log('result', result)\n return result\n}\n\nexport default class Excel extends DataSource(RectPath(Shape)) {\n static _image: HTMLImageElement\n\n static get image() {\n if (!Excel._image) {\n Excel._image = new Image()\n Excel._image.src = COMPONENT_IMAGE\n }\n\n return Excel._image\n }\n\n private repeatTimer?: NodeJS.Timer\n private src?: string\n\n dispose() {\n this._stopRepeater()\n super.dispose()\n }\n\n ready() {\n const { src } = this.state\n\n if (src) {\n this._initInterval()\n }\n }\n\n render(context: CanvasRenderingContext2D) {\n /*\n * TODO role이 publisher 인지 subscriber 인지에 따라서 구분할 수 있는 표시를 추가할 것.\n */\n\n var { left, top, width, height } = this.bounds\n\n context.beginPath()\n this.drawImage(context, Excel.image, left, top, width, height)\n }\n\n get nature() {\n return NATURE\n }\n\n _initInterval() {\n this._stopRepeater()\n this._startRepeater()\n }\n\n _startRepeater() {\n var { src, period } = this.state\n period = Number(period)\n\n var fetchable = true\n\n if (period && this.app.isViewMode) {\n this.repeatTimer = setInterval(() => {\n fetchable &&\n this.repeatTimer &&\n requestAnimationFrame(() => {\n fetchable = true\n fetchData(src).then(data => {\n this.setState('data', data)\n })\n })\n fetchable = false\n }, period * 1000)\n }\n\n fetchData(src).then(data => {\n this.setState('data', data)\n })\n }\n\n _stopRepeater() {\n if (this.repeatTimer) clearTimeout(this.repeatTimer)\n\n delete this.repeatTimer\n }\n\n ondropfile(transfered: any, files: any) {\n for (let i = 0; i < transfered.length; i++) {\n if (/\\.xlsx?$/.test(transfered[i].name)) {\n this.src = files[i]\n return\n }\n }\n }\n\n onchange(after: Properties, before: Properties) {\n if ('period' in after || 'src' in after) {\n this._initInterval()\n }\n }\n}\n\nComponent.register('excel', Excel)\n"]}
@@ -0,0 +1,3 @@
1
+ import Excel from './excel';
2
+ declare const _default: (typeof Excel)[];
3
+ export default _default;
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ import Excel from './excel';
2
+ export default [Excel];
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,eAAe,CAAC,KAAK,CAAC,CAAA","sourcesContent":["import Excel from './excel'\n\nexport default [Excel]\n"]}
@@ -0,0 +1,16 @@
1
+ declare const _default: {
2
+ type: string;
3
+ description: string;
4
+ group: string;
5
+ icon: any;
6
+ model: {
7
+ type: string;
8
+ left: number;
9
+ top: number;
10
+ width: number;
11
+ height: number;
12
+ fillStyle: string;
13
+ strokeStyle: string;
14
+ };
15
+ };
16
+ export default _default;
@@ -0,0 +1,18 @@
1
+ import icon from '../../assets/icon-excel.png';
2
+ export default {
3
+ type: 'excel',
4
+ description: 'excel',
5
+ group: 'dataSource',
6
+ /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */
7
+ icon,
8
+ model: {
9
+ type: 'excel',
10
+ left: 10,
11
+ top: 10,
12
+ width: 100,
13
+ height: 100,
14
+ fillStyle: 'cyan',
15
+ strokeStyle: 'darkgray'
16
+ }
17
+ };
18
+ //# sourceMappingURL=excel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel.js","sourceRoot":"","sources":["../../src/templates/excel.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,6BAA6B,CAAA;AAE9C,eAAe;IACb,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,OAAO;IACpB,KAAK,EAAE,YAAY;IACnB,gGAAgG;IAChG,IAAI;IACJ,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,EAAE;QACR,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,UAAU;KACxB;CACF,CAAA","sourcesContent":["import icon from '../../assets/icon-excel.png'\n\nexport default {\n type: 'excel',\n description: 'excel',\n group: 'dataSource',\n /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */\n icon,\n model: {\n type: 'excel',\n left: 10,\n top: 10,\n width: 100,\n height: 100,\n fillStyle: 'cyan',\n strokeStyle: 'darkgray'\n }\n}\n"]}
@@ -0,0 +1,16 @@
1
+ declare const _default: {
2
+ type: string;
3
+ description: string;
4
+ group: string;
5
+ icon: any;
6
+ model: {
7
+ type: string;
8
+ left: number;
9
+ top: number;
10
+ width: number;
11
+ height: number;
12
+ fillStyle: string;
13
+ strokeStyle: string;
14
+ };
15
+ }[];
16
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import excel from './excel';
2
+ export default [excel];
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,eAAe,CAAC,KAAK,CAAC,CAAA","sourcesContent":["import excel from './excel'\n\nexport default [excel]\n"]}
@@ -0,0 +1,6 @@
1
+ # excel
2
+ Excel에서 데이터를 수집하는 컴포넌트
3
+ ## properties
4
+ - 소스 : Excel데이터의 소스 url 혹은 binary data
5
+ - excel을 업로드하거나 파일서버를 제공하여 해당 url을 소스로 사용가능
6
+ - period : 데이터 리프레시 주기
@@ -0,0 +1,6 @@
1
+ # excel
2
+ compoent that get data from excel
3
+ ## properties
4
+ - source : Excel data source url or binary data for excel data
5
+ - We can upload excel to attachment and get link and align url to source
6
+ - period : Refresh period
@@ -0,0 +1,6 @@
1
+ # excel
2
+ 从Excel中提取数据的组件
3
+ ## properties
4
+ - 源 : Excel数据源地址或binary数据
5
+ - 我们可以上传Excel文件到附件中或提供一个文件服务器将Excel文件的地址作为数据源
6
+ - period : 数据刷新周期
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@operato/scene-excel",
3
+ "description": "Excel integration component for things-scene",
4
+ "license": "MIT",
5
+ "version": "0.0.26",
6
+ "author": "heartyoh",
7
+ "main": "dist/index.js",
8
+ "module": "dist/index.js",
9
+ "things-scene": true,
10
+ "publishConfig": {
11
+ "access": "public",
12
+ "@operato:registry": "https://registry.npmjs.org"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/things-scene/operato-scene.git",
17
+ "directory": "packages/excel"
18
+ },
19
+ "scripts": {
20
+ "serve": "tsc && things-factory-dev",
21
+ "start": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"",
22
+ "build": "tsc",
23
+ "prepublish": "tsc",
24
+ "lint": "eslint --ext .ts,.html . --ignore-path .gitignore && prettier \"**/*.ts\" --check --ignore-path .gitignore",
25
+ "format": "eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore",
26
+ "migration": "things-factory-migration"
27
+ },
28
+ "dependencies": {
29
+ "@hatiolab/things-scene": "^2.7.31",
30
+ "xlsx": "^0.16.8"
31
+ },
32
+ "devDependencies": {
33
+ "@hatiolab/prettier-config": "^1.0.0",
34
+ "@operato/board": "^0.3.1",
35
+ "@things-factory/builder": "^4.0.26",
36
+ "@things-factory/operato-board": "^4.0.26",
37
+ "@types/xlsx": "^0.0.36",
38
+ "@typescript-eslint/eslint-plugin": "^4.33.0",
39
+ "@typescript-eslint/parser": "^4.33.0",
40
+ "@web/dev-server": "^0.1.28",
41
+ "concurrently": "^5.3.0",
42
+ "eslint": "^7.32.0",
43
+ "eslint-config-prettier": "^8.3.0",
44
+ "husky": "^4.3.8",
45
+ "lint-staged": "^10.5.4",
46
+ "prettier": "^2.4.1",
47
+ "tslib": "^2.3.1",
48
+ "typescript": "^4.5.2"
49
+ },
50
+ "prettier": "@hatiolab/prettier-config",
51
+ "husky": {
52
+ "hooks": {
53
+ "pre-commit": "lint-staged"
54
+ }
55
+ },
56
+ "lint-staged": {
57
+ "*.ts": [
58
+ "eslint --fix",
59
+ "prettier --write"
60
+ ]
61
+ },
62
+ "gitHead": "f344a223fc2cd34a5f47e18558b20eb94ca0cea1"
63
+ }
package/src/excel.ts ADDED
@@ -0,0 +1,159 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+
5
+ import { Component, DataSource, Properties, RectPath, Shape } from '@hatiolab/things-scene'
6
+
7
+ import COMPONENT_IMAGE from '../assets/symbol-excel.png'
8
+ // @ts-ignore
9
+ import XLSX from '!xlsx'
10
+
11
+ const NATURE = {
12
+ mutable: false,
13
+ resizable: true,
14
+ rotatable: true,
15
+ properties: [
16
+ {
17
+ type: 'string',
18
+ label: 'src',
19
+ name: 'src',
20
+ placeholder: 'Excel File URL'
21
+ },
22
+ {
23
+ type: 'number',
24
+ label: 'period',
25
+ name: 'period',
26
+ placeholder: 'seconds'
27
+ }
28
+ ],
29
+ help: 'scene/component/excel'
30
+ }
31
+
32
+ async function fetchData(url: string) {
33
+ if (!url.startsWith('data:')) {
34
+ // prevent read from cache
35
+ if (url.indexOf('?') !== -1) {
36
+ url = url + `&ts=${Date.now()}`
37
+ } else {
38
+ url = url + `?ts=${Date.now()}`
39
+ }
40
+ }
41
+
42
+ const file = await fetch(url, {
43
+ method: 'GET',
44
+ headers: {
45
+ 'Content-Type': 'application/xlsx'
46
+ },
47
+ credentials: 'include'
48
+ })
49
+
50
+ const workbook: XLSX.WorkBook = XLSX.read(await file.arrayBuffer(), { type: 'array' })
51
+
52
+ var result: { [key: string]: unknown } = {}
53
+ workbook.SheetNames.forEach((sheet: string) => {
54
+ var roa = XLSX.utils.sheet_to_json(workbook.Sheets[sheet])
55
+ if (roa.length) {
56
+ result[sheet] = roa
57
+ }
58
+ })
59
+
60
+ console.log('result', result)
61
+ return result
62
+ }
63
+
64
+ export default class Excel extends DataSource(RectPath(Shape)) {
65
+ static _image: HTMLImageElement
66
+
67
+ static get image() {
68
+ if (!Excel._image) {
69
+ Excel._image = new Image()
70
+ Excel._image.src = COMPONENT_IMAGE
71
+ }
72
+
73
+ return Excel._image
74
+ }
75
+
76
+ private repeatTimer?: NodeJS.Timer
77
+ private src?: string
78
+
79
+ dispose() {
80
+ this._stopRepeater()
81
+ super.dispose()
82
+ }
83
+
84
+ ready() {
85
+ const { src } = this.state
86
+
87
+ if (src) {
88
+ this._initInterval()
89
+ }
90
+ }
91
+
92
+ render(context: CanvasRenderingContext2D) {
93
+ /*
94
+ * TODO role이 publisher 인지 subscriber 인지에 따라서 구분할 수 있는 표시를 추가할 것.
95
+ */
96
+
97
+ var { left, top, width, height } = this.bounds
98
+
99
+ context.beginPath()
100
+ this.drawImage(context, Excel.image, left, top, width, height)
101
+ }
102
+
103
+ get nature() {
104
+ return NATURE
105
+ }
106
+
107
+ _initInterval() {
108
+ this._stopRepeater()
109
+ this._startRepeater()
110
+ }
111
+
112
+ _startRepeater() {
113
+ var { src, period } = this.state
114
+ period = Number(period)
115
+
116
+ var fetchable = true
117
+
118
+ if (period && this.app.isViewMode) {
119
+ this.repeatTimer = setInterval(() => {
120
+ fetchable &&
121
+ this.repeatTimer &&
122
+ requestAnimationFrame(() => {
123
+ fetchable = true
124
+ fetchData(src).then(data => {
125
+ this.setState('data', data)
126
+ })
127
+ })
128
+ fetchable = false
129
+ }, period * 1000)
130
+ }
131
+
132
+ fetchData(src).then(data => {
133
+ this.setState('data', data)
134
+ })
135
+ }
136
+
137
+ _stopRepeater() {
138
+ if (this.repeatTimer) clearTimeout(this.repeatTimer)
139
+
140
+ delete this.repeatTimer
141
+ }
142
+
143
+ ondropfile(transfered: any, files: any) {
144
+ for (let i = 0; i < transfered.length; i++) {
145
+ if (/\.xlsx?$/.test(transfered[i].name)) {
146
+ this.src = files[i]
147
+ return
148
+ }
149
+ }
150
+ }
151
+
152
+ onchange(after: Properties, before: Properties) {
153
+ if ('period' in after || 'src' in after) {
154
+ this._initInterval()
155
+ }
156
+ }
157
+ }
158
+
159
+ Component.register('excel', Excel)
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ import Excel from './excel'
2
+
3
+ export default [Excel]
@@ -0,0 +1,18 @@
1
+ import icon from '../../assets/icon-excel.png'
2
+
3
+ export default {
4
+ type: 'excel',
5
+ description: 'excel',
6
+ group: 'dataSource',
7
+ /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */
8
+ icon,
9
+ model: {
10
+ type: 'excel',
11
+ left: 10,
12
+ top: 10,
13
+ width: 100,
14
+ height: 100,
15
+ fillStyle: 'cyan',
16
+ strokeStyle: 'darkgray'
17
+ }
18
+ }
@@ -0,0 +1,3 @@
1
+ import excel from './excel'
2
+
3
+ export default [excel]
@@ -0,0 +1,5 @@
1
+ import templates from './templates'
2
+
3
+ export default {
4
+ templates
5
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "keyword": "keyword"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "keyword": "키워드"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "keyword": "关键词"
3
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es2018",
4
+ "module": "esnext",
5
+ "moduleResolution": "node",
6
+ "noEmitOnError": true,
7
+ "lib": ["es2017", "dom"],
8
+ "strict": true,
9
+ "esModuleInterop": false,
10
+ "allowSyntheticDefaultImports": true,
11
+ "experimentalDecorators": true,
12
+ "importHelpers": true,
13
+ "outDir": "dist",
14
+ "sourceMap": true,
15
+ "inlineSources": true,
16
+ "rootDir": "src",
17
+ "declaration": true,
18
+ "incremental": true,
19
+ "typeRoots": ["./node_modules", "@types"],
20
+ "types": ["node"]
21
+ },
22
+ "include": ["**/*.ts", "*.d.ts"]
23
+ }
@@ -0,0 +1 @@
1
+ {"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","./@types/global/index.d.ts","../../node_modules/tslib/tslib.d.ts","../../node_modules/@types/lodash/common/common.d.ts","../../node_modules/@types/lodash/common/array.d.ts","../../node_modules/@types/lodash/common/collection.d.ts","../../node_modules/@types/lodash/common/date.d.ts","../../node_modules/@types/lodash/common/function.d.ts","../../node_modules/@types/lodash/common/lang.d.ts","../../node_modules/@types/lodash/common/math.d.ts","../../node_modules/@types/lodash/common/number.d.ts","../../node_modules/@types/lodash/common/object.d.ts","../../node_modules/@types/lodash/common/seq.d.ts","../../node_modules/@types/lodash/common/string.d.ts","../../node_modules/@types/lodash/common/util.d.ts","../../node_modules/@types/lodash/index.d.ts","../../node_modules/@hatiolab/things-scene/things-scene.d.ts","./src/excel.ts","./src/index.ts","./src/templates/excel.ts","./src/templates/index.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/globals.global.d.ts","../../node_modules/@types/node/index.d.ts"],"fileInfos":[{"version":"6adbf5efd0e374ff5f427a4f26a5a413e9734eee5067a0e86da69aea41910b52","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"version":"abba1071bfd89e55e88a054b0c851ea3e8a494c340d0f3fab19eb18f6afb0c9e","affectsGlobalScope":true},{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"4378fc8122ec9d1a685b01eb66c46f62aba6b239ca7228bb6483bcf8259ee493","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"d071129cba6a5f2700be09c86c07ad2791ab67d4e5ed1eb301d6746c62745ea4","affectsGlobalScope":true},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true},"c4f5f288a2b8dcfb6183e29612ec26b7a049314a6a10b7e6e700a8307077455a","12f4cfe2fe60b810c3174537bc2ddb20c1067b7768643d12cb1266fd183afb75","675e702f2032766a91eeadee64f51014c64688525da99dccd8178f0c599f13a8","378df8bbbb9e3f6fca05d58f644aab538e1062eab5e778fb0b83d41125df246d","d88a479cccf787b4aa82362150fbeba5211a32dbfafa7b92ba6995ecaf9a1a89","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","c24ad9be9adf28f0927e3d9d9e9cec1c677022356f241ccbbfb97bfe8fb3d1a1","0ec0998e2d085e8ea54266f547976ae152c9dd6cdb9ac4d8a520a230f5ebae84","9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","ae9930989ed57478eb03b9b80ad3efa7a3eacdfeff0f78ecf7894c4963a64f93","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","3e59f00ab03c33717b3130066d4debb272da90eeded4935ff0604c2bc25a5cae","6ac6f24aff52e62c3950461aa17eab26e3a156927858e6b654baef0058b4cd1e",{"version":"0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8","affectsGlobalScope":true},"a7970032f227e550a42369401c1b222c8177740e2650cab9c2e6a0ed15a6e68f","054ef5d30053652d4cd4f611c8e0f5fb6b5d383290dd421f532a4fb2c16e2762","20a189c4b5e6578303f7d8d48fc32d35de93ded66464f320ddaa5e5d0df0230f","a4eba63cdc19082cc40bb3f7f43808834b845a610a7e305507be18a81674b113","51ea2ce9a327d040fe0454db3e0fc79eeda9dc7b6e4809aa8384961a785aa021","0d5a2ee1fdfa82740e0103389b9efd6bfe145a20018a2da3c02b89666181f4d9","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"92d63add669d18ebc349efbacd88966d6f2ccdddfb1b880b2db98ae3aa7bf7c4","affectsGlobalScope":true},"ccc94049a9841fe47abe5baef6be9a38fc6228807974ae675fb15dc22531b4be",{"version":"9acfe4d1ff027015151ce81d60797b04b52bffe97ad8310bb0ec2e8fd61e1303","affectsGlobalScope":true},"95843d5cfafced8f3f8a5ce57d2335f0bcd361b9483587d12a25e4bd403b8216","afc6e96061af46bcff47246158caee7e056f5288783f2d83d6858cd25be1c565",{"version":"34f5bcac12b36d70304b73de5f5aab3bb91bd9919f984be80579ebcad03a624e","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","2f520601649a893e6a49a8851ebfcf4be8ce090dc1281c2a08a871cb04e8251f","f50c975ab7b50e25a69e3d8a3773894125b44e9698924105f23b812bf7488baf","2b8c764f856a1dd0a9a2bf23e5efddbff157de8138b0754010be561ae5fcaa90","76650408392bf49a8fbf3e2b6b302712a92d76af77b06e2da1cc8077359c4409","0af3121e68297b2247dd331c0d24dba599e50736a7517a5622d5591aae4a3122","6972fca26f6e9bd56197568d4379f99071a90766e06b4fcb5920a0130a9202be",{"version":"4a2628e95962c8ab756121faa3ac2ed348112ff7a87b5c286dd2cc3326546b4c","affectsGlobalScope":true},"80793b2277f31baa199234daed806fff0fb11491d1ebd3357e520c3558063f00","a049a59a02009fc023684fcfaf0ac526fe36c35dcc5d2b7d620c1750ba11b083","5533392c50c51b1a5c32b89f13145db929c574ef1c5949cf67a074a05ea107d9","b287b810b5035d5685f1df6e1e418f1ca452a3ed4f59fd5cc081dbf2045f0d9b","4b9a003b5c556c96784132945bb41c655ea11273b1917f5c8d0c154dd5fd20dd","a458dc78104cc80048ac24fdc02fe6dce254838094c2f25641b3f954d9721241",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"902cd98bf46e95caf4118a0733fb801e9e90eec3edaed6abdad77124afec9ca2","abc1c425b2ad6720433f40f1877abfa4223f0f3dd486c9c28c492179ca183cb6","cd4854d38f4eb5592afd98ab95ca17389a7dfe38013d9079e802d739bdbcc939","94eed4cc2f5f658d5e229ff1ccd38860bddf4233e347bf78edd2154dee1f2b99",{"version":"bd1a08e30569b0fb2f0b21035eb9b039871f68faa9b98accf847e9c878c5e0a9","affectsGlobalScope":true},"9f1069b9e2c051737b1f9b4f1baf50e4a63385a6a89c32235549ae87fc3d5492","ee18f2da7a037c6ceeb112a084e485aead9ea166980bf433474559eac1b46553","29c2706fa0cc49a2bd90c83234da33d08bb9554ecec675e91c1f85087f5a5324","0acbf26bf958f9e80c1ffa587b74749d2697b75b484062d36e103c137c562bc3","d7838022c7dab596357a9604b9c6adffe37dc34085ce0779c958ce9545bd7139","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true},"a279435e7813d1f061c0cab6ab77b1b9377e8d96851e5ed4a76a1ce6eb6e628f","c33a6ea7147af60d8e98f1ac127047f4b0d4e2ce28b8f08ff3de07ca7cc00637",{"version":"b42b47e17b8ece2424ae8039feb944c2e3ba4b262986aebd582e51efbdca93dc","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","2408611d9b4146e35d1dbd1f443ccd8e187c74614a54b80300728277529dbf11","998a3de5237518c0b3ac00a11b3b4417affb008aa20aedee52f3fdae3cb86151","ad41008ffe077206e1811fc873f4d9005b5fd7f6ab52bb6118fef600815a5cb4","d88ecca73348e7c337541c4b8b60a50aca5e87384f6b8a422fc6603c637e4c21","badae0df9a8016ac36994b0a0e7b82ba6aaa3528e175a8c3cb161e4683eec03e","c3db860bcaaaeb3bbc23f353bbda1f8ab82756c8d5e973bebb3953cb09ea68f2","235a53595bd20b0b0eeb1a29cb2887c67c48375e92f03749b2488fbd46d0b1a0","bc09393cd4cd13f69cf1366d4236fbae5359bb550f0de4e15767e9a91d63dfb1","9c266243b01545e11d2733a55ad02b4c00ecdbda99c561cd1674f96e89cdc958","c71155c05fc76ff948a4759abc1cb9feec036509f500174bc18dad4c7827a60c",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"1cdb8f094b969dcc183745dc88404e2d8fcf2a858c6e7cc2441011476573238e"],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"esModuleInterop":false,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":99,"noEmitOnError":true,"outDir":"./dist","rootDir":"./src","sourceMap":true,"strict":true,"target":5},"fileIdsList":[[54,103],[42,44,45,46,47,48,49,50,51,52,53,54,103],[42,43,45,46,47,48,49,50,51,52,53,54,103],[43,44,45,46,47,48,49,50,51,52,53,54,103],[42,43,44,46,47,48,49,50,51,52,53,54,103],[42,43,44,45,47,48,49,50,51,52,53,54,103],[42,43,44,45,46,48,49,50,51,52,53,54,103],[42,43,44,45,46,47,49,50,51,52,53,54,103],[42,43,44,45,46,47,48,50,51,52,53,54,103],[42,43,44,45,46,47,48,49,51,52,53,54,103],[42,43,44,45,46,47,48,49,50,52,53,54,103],[42,43,44,45,46,47,48,49,50,51,53,54,103],[42,43,44,45,46,47,48,49,50,51,52,54,103],[42,43,44,45,46,47,48,49,50,51,52,53,103],[60,103],[63,103],[64,69,103],[65,75,76,83,92,102,103],[65,66,75,83,103],[67,103],[68,69,76,84,103],[69,92,99,103],[70,72,75,83,103],[71,103],[72,73,103],[74,75,103],[75,103],[75,76,77,92,102,103],[75,76,77,92,103],[103],[78,83,92,102,103],[75,76,78,79,83,92,99,102,103],[78,80,92,99,102,103],[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109],[75,81,103],[82,102,103],[72,75,83,92,103],[84,103],[85,103],[63,86,103],[87,101,103,107],[88,103],[89,103],[75,90,103],[90,91,103,105],[75,92,93,94,103],[92,94,103],[92,93,103],[95,103],[96,103],[75,97,98,103],[97,98,103],[69,83,99,103],[100,103],[83,101,103],[64,78,89,102,103],[69,103],[92,103,104],[103,105],[103,106],[64,69,75,77,86,92,102,103,105,107],[92,103,108],[40,41,55,103],[41,56,103],[40,41,103],[41,58,103]],"referencedMap":[[55,1],[43,2],[44,3],[42,4],[45,5],[46,6],[47,7],[48,8],[49,9],[50,10],[51,11],[52,12],[53,13],[54,14],[60,15],[61,15],[63,16],[64,17],[65,18],[66,19],[67,20],[68,21],[69,22],[70,23],[71,24],[72,25],[73,25],[74,26],[75,27],[76,28],[77,29],[62,30],[109,30],[78,31],[79,32],[80,33],[110,34],[81,35],[82,36],[83,37],[84,38],[85,39],[86,40],[87,41],[88,42],[89,43],[90,44],[91,45],[92,46],[94,47],[93,48],[95,49],[96,50],[97,51],[98,52],[99,53],[100,54],[101,55],[102,56],[103,57],[104,58],[105,59],[106,60],[107,61],[108,62],[41,30],[8,30],[10,30],[9,30],[2,30],[11,30],[12,30],[13,30],[14,30],[15,30],[16,30],[17,30],[18,30],[3,30],[4,30],[22,30],[19,30],[20,30],[21,30],[23,30],[24,30],[25,30],[5,30],[26,30],[27,30],[28,30],[29,30],[6,30],[30,30],[31,30],[32,30],[33,30],[7,30],[38,30],[34,30],[35,30],[36,30],[37,30],[1,30],[39,30],[40,30],[56,63],[57,64],[58,65],[59,66]],"exportedModulesMap":[[55,1],[43,2],[44,3],[42,4],[45,5],[46,6],[47,7],[48,8],[49,9],[50,10],[51,11],[52,12],[53,13],[54,14],[60,15],[61,15],[63,16],[64,17],[65,18],[66,19],[67,20],[68,21],[69,22],[70,23],[71,24],[72,25],[73,25],[74,26],[75,27],[76,28],[77,29],[62,30],[109,30],[78,31],[79,32],[80,33],[110,34],[81,35],[82,36],[83,37],[84,38],[85,39],[86,40],[87,41],[88,42],[89,43],[90,44],[91,45],[92,46],[94,47],[93,48],[95,49],[96,50],[97,51],[98,52],[99,53],[100,54],[101,55],[102,56],[103,57],[104,58],[105,59],[106,60],[107,61],[108,62],[41,30],[8,30],[10,30],[9,30],[2,30],[11,30],[12,30],[13,30],[14,30],[15,30],[16,30],[17,30],[18,30],[3,30],[4,30],[22,30],[19,30],[20,30],[21,30],[23,30],[24,30],[25,30],[5,30],[26,30],[27,30],[28,30],[29,30],[6,30],[30,30],[31,30],[32,30],[33,30],[7,30],[38,30],[34,30],[35,30],[36,30],[37,30],[1,30],[39,30],[40,30],[56,63],[57,64],[58,65],[59,66]],"semanticDiagnosticsPerFile":[55,43,44,42,45,46,47,48,49,50,51,52,53,54,60,61,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,62,109,78,79,80,110,81,82,83,84,85,86,87,88,89,90,91,92,94,93,95,96,97,98,99,100,101,102,103,104,105,106,107,108,41,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,30,31,32,33,7,38,34,35,36,37,1,39,40,56,57,58,59]},"version":"4.5.2"}