lucid-package 1.0.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.
@@ -0,0 +1,8 @@
1
+
2
+ // /mnt/ephemeral/jenkins-home/.cache/bazel/_bazel_jenkins/6b84037ad5d281962ef7fea680930a51/sandbox/linux-sandbox/69596/execroot/lucid/node_modules/@bazel/typescript/internal/ts_project_options_validator.js checked attributes for //extensibility/lucid-package:lucid-package
3
+ // composite: false
4
+ // declaration: true
5
+ // declaration_map: false
6
+ // incremental: false
7
+ // source_map: false
8
+ // emit_declaration_only: false
package/index.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('./src/index.js');
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "lucid-package",
3
+ "version": "1.0.1",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "bin": {
7
+ "lucid-package": "index.js"
8
+ },
9
+ "keywords": [],
10
+ "author": "",
11
+ "license": "ISC",
12
+ "devDependencies": {
13
+ "@types/argparse": "^2.0.10",
14
+ "@types/express": "^4.17.13",
15
+ "@types/node": "^16.11.11"
16
+ },
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "dependencies": {
21
+ "argparse": "^2.0.1",
22
+ "express": "^4.17.1",
23
+ "jszip": "^3.7.1",
24
+ "password-prompt": "^1.1.2",
25
+ "ts-loader": "^9.2.6",
26
+ "webpack": "^5.64.4",
27
+ "webpack-cli": "^4.9.1"
28
+ }
29
+ }
@@ -0,0 +1,3 @@
1
+ export declare function createEditorExtension(name: string): Promise<void>;
2
+ export declare function buildEditorExtension(name: string): Promise<void>;
3
+ export declare function debugEditorExtension(name: string): Promise<void>;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.debugEditorExtension = exports.buildEditorExtension = exports.createEditorExtension = void 0;
4
+ const fs = require("fs/promises");
5
+ const filesystemutil_1 = require("./filesystemutil");
6
+ const package_1 = require("./package");
7
+ const express = require("express");
8
+ const child_process = require("child_process");
9
+ const WebPackCLI = require('webpack-cli');
10
+ async function createEditorExtension(name) {
11
+ console.log('Creating empty editor extension in editorextensions/' + name);
12
+ filesystemutil_1.copyFolderRecursiveSync(__dirname + '/../templates/editorextension', 'editorextensions/' + name);
13
+ await package_1.modifyManifest((manifest) => {
14
+ manifest.extensions.push({
15
+ name: name,
16
+ title: name,
17
+ codePath: `editorextensions/${name}/bin/extension.js`,
18
+ });
19
+ });
20
+ console.log(`Installing dependencies`);
21
+ process.chdir('editorextensions/' + name);
22
+ console.log(child_process.execSync('npm install').toString());
23
+ }
24
+ exports.createEditorExtension = createEditorExtension;
25
+ async function buildEditorExtension(name) {
26
+ process.chdir('editorextensions/' + name);
27
+ const cli = new WebPackCLI();
28
+ await cli.run(['node', 'webpack', '--mode', 'production']);
29
+ }
30
+ exports.buildEditorExtension = buildEditorExtension;
31
+ async function debugEditorExtension(name) {
32
+ process.chdir('editorextensions/' + name);
33
+ const cli = new WebPackCLI();
34
+ cli.run(['node', 'webpack', '--watch']);
35
+ const app = express();
36
+ app.get('/extension.js', async (req, res) => {
37
+ res.header('Access-Control-Allow-Origin', '*');
38
+ res.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
39
+ res.send((await fs.readFile('bin/extension.js')).toString());
40
+ });
41
+ app.listen(9900, () => {
42
+ console.log('Listening at http://localhost:9900/extension.js');
43
+ });
44
+ }
45
+ exports.debugEditorExtension = debugEditorExtension;
@@ -0,0 +1 @@
1
+ export declare function copyFolderRecursiveSync(source: string, targetFolder: string): void;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.copyFolderRecursiveSync = void 0;
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+ function copyFileSync(source, target) {
7
+ var targetFile = target;
8
+ // If target is a directory, a new file with the same name will be created
9
+ if (fs.existsSync(target)) {
10
+ if (fs.lstatSync(target).isDirectory()) {
11
+ targetFile = path.join(target, path.basename(source));
12
+ }
13
+ }
14
+ fs.writeFileSync(targetFile, fs.readFileSync(source));
15
+ }
16
+ function copyFolderRecursiveSync(source, targetFolder) {
17
+ var files = [];
18
+ // Check if folder needs to be created or integrated
19
+ if (!fs.existsSync(targetFolder)) {
20
+ fs.mkdirSync(targetFolder);
21
+ }
22
+ // Copy
23
+ if (fs.lstatSync(source).isDirectory()) {
24
+ files = fs.readdirSync(source);
25
+ files.forEach((file) => {
26
+ var curSource = path.join(source, file);
27
+ if (fs.lstatSync(curSource).isDirectory()) {
28
+ copyFolderRecursiveSync(curSource, path.join(targetFolder, file));
29
+ }
30
+ else {
31
+ copyFileSync(curSource, targetFolder);
32
+ }
33
+ });
34
+ }
35
+ }
36
+ exports.copyFolderRecursiveSync = copyFolderRecursiveSync;
package/src/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/src/index.js ADDED
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const editorextension_1 = require("./editorextension");
4
+ const package_1 = require("./package");
5
+ const argparse_1 = require("argparse");
6
+ class LucidSuiteExtensionCLI {
7
+ run(args) {
8
+ const parser = new argparse_1.ArgumentParser({
9
+ description: 'Create and manage Lucid extensibility packages',
10
+ });
11
+ const subparsers = parser.add_subparsers({ dest: 'command' });
12
+ const createParser = subparsers.add_parser('create', {
13
+ help: 'Create a new Lucid extensibility package in a new directory',
14
+ });
15
+ createParser.add_argument('name', { type: 'str' });
16
+ const packageParser = subparsers.add_parser('package', {
17
+ help: 'Sign and zip the current package for upload to the developer dashboard',
18
+ });
19
+ packageParser.add_argument('private-key-path', {
20
+ help: `Path to a file containing the private key to be used in signing the package. Create such a key with:
21
+ openssl genrsa -aes128 -out private.pem 4096`,
22
+ });
23
+ const createExtensionParser = subparsers.add_parser('create-editor-extension', {
24
+ help: 'Create a new editor extension as part of the current package',
25
+ });
26
+ createExtensionParser.add_argument('name');
27
+ const buildExtensionParser = subparsers.add_parser('build-editor-extension', {
28
+ help: 'Compile an editor extension in production mode; use this to check types and validate final compiled output',
29
+ });
30
+ buildExtensionParser.add_argument('name');
31
+ const testExtensionParser = subparsers.add_parser('test-editor-extension', {
32
+ help: 'Compile an editor extension in debug mode, and serve it at localhost:9900. Watch for changes to the code and recompile as needed',
33
+ });
34
+ testExtensionParser.add_argument('name');
35
+ const parsed = parser.parse_args(args);
36
+ switch (parsed['command']) {
37
+ case 'create':
38
+ package_1.createEmptyPackage(parsed['name']);
39
+ break;
40
+ case 'package':
41
+ if (package_1.currentlyInPackage()) {
42
+ package_1.packageAndSign(parsed['private-key-path']);
43
+ }
44
+ else {
45
+ console.error('Not currently in a Lucid extensibility package folder');
46
+ }
47
+ break;
48
+ case 'create-editor-extension':
49
+ if (package_1.currentlyInPackage()) {
50
+ editorextension_1.createEditorExtension(parsed['name']);
51
+ }
52
+ else {
53
+ console.error('Not currently in a Lucid extensibility package folder');
54
+ }
55
+ break;
56
+ case 'build-editor-extension':
57
+ if (package_1.currentlyInPackage()) {
58
+ editorextension_1.buildEditorExtension(parsed['name']);
59
+ }
60
+ else {
61
+ console.error('Not currently in a Lucid extensibility package folder');
62
+ }
63
+ break;
64
+ case 'test-editor-extension':
65
+ if (package_1.currentlyInPackage()) {
66
+ editorextension_1.debugEditorExtension(parsed['name']);
67
+ }
68
+ else {
69
+ console.error('Not currently in a Lucid extensibility package folder');
70
+ }
71
+ break;
72
+ default:
73
+ parser.print_help();
74
+ }
75
+ }
76
+ }
77
+ new LucidSuiteExtensionCLI().run(process.argv.slice(2));
@@ -0,0 +1,13 @@
1
+ export declare function createEmptyPackage(root: string): Promise<void>;
2
+ export declare function currentlyInPackage(): boolean;
3
+ declare type PackageManifest = {
4
+ version: string;
5
+ extensions: {
6
+ name: string;
7
+ title: string;
8
+ codePath: string;
9
+ }[];
10
+ };
11
+ export declare function modifyManifest(callback: (manifest: PackageManifest) => void | Promise<void>): Promise<void>;
12
+ export declare function packageAndSign(privateKeyPath: string): Promise<void>;
13
+ export {};
package/src/package.js ADDED
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.packageAndSign = exports.modifyManifest = exports.currentlyInPackage = exports.createEmptyPackage = void 0;
4
+ const fs = require("fs/promises");
5
+ const fsOld = require("fs");
6
+ const filesystemutil_1 = require("./filesystemutil");
7
+ const child_process = require("child_process");
8
+ const JSZip = require("jszip");
9
+ const crypto = require("crypto");
10
+ async function createEmptyPackage(root) {
11
+ console.log('Creating empty Lucid Suite package in ' + root);
12
+ filesystemutil_1.copyFolderRecursiveSync(__dirname + '/../templates/package', root);
13
+ }
14
+ exports.createEmptyPackage = createEmptyPackage;
15
+ function currentlyInPackage() {
16
+ return (fsOld.existsSync('editorextensions') && fsOld.existsSync('shapelibraries') && fsOld.existsSync('manifest.json'));
17
+ }
18
+ exports.currentlyInPackage = currentlyInPackage;
19
+ async function modifyManifest(callback) {
20
+ const manifest = JSON.parse((await fs.readFile('manifest.json')).toString());
21
+ await callback(manifest);
22
+ await fs.writeFile('manifest.json', JSON.stringify(manifest, undefined, 2));
23
+ }
24
+ exports.modifyManifest = modifyManifest;
25
+ async function packageAndSign(privateKeyPath) {
26
+ const zip = new JSZip();
27
+ //Increment the patch number automatically on each build
28
+ await modifyManifest(async (manifest) => {
29
+ const parts = manifest.version.split('.');
30
+ parts[parts.length - 1] = String(parseInt(parts[parts.length - 1], 10) + 1);
31
+ manifest.version = parts.join('.');
32
+ //For each extension, compile it and add it to the archive
33
+ for (const extension of manifest.extensions) {
34
+ const parts = extension.codePath.split('/');
35
+ if (parts[0] === 'editorextensions') {
36
+ //Can't just call the method, as the WebpackCLI class does process.exit(2) :facepalm:
37
+ console.log(`Compiling editor extension ${parts[1]}`);
38
+ console.log(child_process
39
+ .execSync(process.argv[0] + ' ' + process.argv[1] + ' build-editor-extension ' + parts[1])
40
+ .toString());
41
+ }
42
+ zip.file(extension.codePath, await fs.readFile(extension.codePath));
43
+ }
44
+ //Add the manifest itself
45
+ zip.file('manifest.json', JSON.stringify(manifest, undefined, 2));
46
+ //Write out the zip file and the signature
47
+ const zipBytes = await zip.generateAsync({ type: 'uint8array' });
48
+ const privateKey = await fs.readFile(privateKeyPath);
49
+ console.log('Signing package with ' + privateKeyPath);
50
+ let signature;
51
+ try {
52
+ signature = crypto.sign('sha256', zipBytes, {
53
+ key: privateKey,
54
+ padding: crypto.constants.RSA_PKCS1_PADDING,
55
+ });
56
+ }
57
+ catch (e) {
58
+ if (e instanceof Error && e.message.includes('Passphrase required')) {
59
+ let prompt = require('password-prompt');
60
+ let passphrase = await prompt('Private key passphrase: ', {
61
+ method: 'hide',
62
+ });
63
+ signature = crypto.sign('sha256', zipBytes, {
64
+ key: privateKey,
65
+ padding: crypto.constants.RSA_PKCS1_PADDING,
66
+ passphrase,
67
+ });
68
+ }
69
+ else {
70
+ return;
71
+ }
72
+ }
73
+ console.log('Writing file package.zip');
74
+ await fs.writeFile('package.zip', zipBytes);
75
+ console.log('Writing file signature');
76
+ await fs.writeFile('signature', signature);
77
+ });
78
+ }
79
+ exports.packageAndSign = packageAndSign;
@@ -0,0 +1,779 @@
1
+ {
2
+ "requires": true,
3
+ "lockfileVersion": 1,
4
+ "dependencies": {
5
+ "@types/eslint": {
6
+ "version": "8.2.0",
7
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz",
8
+ "integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==",
9
+ "dev": true,
10
+ "requires": {
11
+ "@types/estree": "*",
12
+ "@types/json-schema": "*"
13
+ }
14
+ },
15
+ "@types/eslint-scope": {
16
+ "version": "3.7.1",
17
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz",
18
+ "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==",
19
+ "dev": true,
20
+ "requires": {
21
+ "@types/eslint": "*",
22
+ "@types/estree": "*"
23
+ }
24
+ },
25
+ "@types/estree": {
26
+ "version": "0.0.50",
27
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
28
+ "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
29
+ "dev": true
30
+ },
31
+ "@types/json-schema": {
32
+ "version": "7.0.9",
33
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
34
+ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
35
+ "dev": true
36
+ },
37
+ "@types/node": {
38
+ "version": "16.11.11",
39
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz",
40
+ "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==",
41
+ "dev": true
42
+ },
43
+ "@webassemblyjs/ast": {
44
+ "version": "1.11.1",
45
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
46
+ "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
47
+ "dev": true,
48
+ "requires": {
49
+ "@webassemblyjs/helper-numbers": "1.11.1",
50
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
51
+ }
52
+ },
53
+ "@webassemblyjs/floating-point-hex-parser": {
54
+ "version": "1.11.1",
55
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
56
+ "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
57
+ "dev": true
58
+ },
59
+ "@webassemblyjs/helper-api-error": {
60
+ "version": "1.11.1",
61
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
62
+ "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
63
+ "dev": true
64
+ },
65
+ "@webassemblyjs/helper-buffer": {
66
+ "version": "1.11.1",
67
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
68
+ "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
69
+ "dev": true
70
+ },
71
+ "@webassemblyjs/helper-numbers": {
72
+ "version": "1.11.1",
73
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
74
+ "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
75
+ "dev": true,
76
+ "requires": {
77
+ "@webassemblyjs/floating-point-hex-parser": "1.11.1",
78
+ "@webassemblyjs/helper-api-error": "1.11.1",
79
+ "@xtuc/long": "4.2.2"
80
+ }
81
+ },
82
+ "@webassemblyjs/helper-wasm-bytecode": {
83
+ "version": "1.11.1",
84
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
85
+ "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
86
+ "dev": true
87
+ },
88
+ "@webassemblyjs/helper-wasm-section": {
89
+ "version": "1.11.1",
90
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
91
+ "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
92
+ "dev": true,
93
+ "requires": {
94
+ "@webassemblyjs/ast": "1.11.1",
95
+ "@webassemblyjs/helper-buffer": "1.11.1",
96
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
97
+ "@webassemblyjs/wasm-gen": "1.11.1"
98
+ }
99
+ },
100
+ "@webassemblyjs/ieee754": {
101
+ "version": "1.11.1",
102
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
103
+ "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
104
+ "dev": true,
105
+ "requires": {
106
+ "@xtuc/ieee754": "^1.2.0"
107
+ }
108
+ },
109
+ "@webassemblyjs/leb128": {
110
+ "version": "1.11.1",
111
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
112
+ "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
113
+ "dev": true,
114
+ "requires": {
115
+ "@xtuc/long": "4.2.2"
116
+ }
117
+ },
118
+ "@webassemblyjs/utf8": {
119
+ "version": "1.11.1",
120
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
121
+ "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
122
+ "dev": true
123
+ },
124
+ "@webassemblyjs/wasm-edit": {
125
+ "version": "1.11.1",
126
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
127
+ "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
128
+ "dev": true,
129
+ "requires": {
130
+ "@webassemblyjs/ast": "1.11.1",
131
+ "@webassemblyjs/helper-buffer": "1.11.1",
132
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
133
+ "@webassemblyjs/helper-wasm-section": "1.11.1",
134
+ "@webassemblyjs/wasm-gen": "1.11.1",
135
+ "@webassemblyjs/wasm-opt": "1.11.1",
136
+ "@webassemblyjs/wasm-parser": "1.11.1",
137
+ "@webassemblyjs/wast-printer": "1.11.1"
138
+ }
139
+ },
140
+ "@webassemblyjs/wasm-gen": {
141
+ "version": "1.11.1",
142
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
143
+ "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
144
+ "dev": true,
145
+ "requires": {
146
+ "@webassemblyjs/ast": "1.11.1",
147
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
148
+ "@webassemblyjs/ieee754": "1.11.1",
149
+ "@webassemblyjs/leb128": "1.11.1",
150
+ "@webassemblyjs/utf8": "1.11.1"
151
+ }
152
+ },
153
+ "@webassemblyjs/wasm-opt": {
154
+ "version": "1.11.1",
155
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
156
+ "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
157
+ "dev": true,
158
+ "requires": {
159
+ "@webassemblyjs/ast": "1.11.1",
160
+ "@webassemblyjs/helper-buffer": "1.11.1",
161
+ "@webassemblyjs/wasm-gen": "1.11.1",
162
+ "@webassemblyjs/wasm-parser": "1.11.1"
163
+ }
164
+ },
165
+ "@webassemblyjs/wasm-parser": {
166
+ "version": "1.11.1",
167
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
168
+ "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
169
+ "dev": true,
170
+ "requires": {
171
+ "@webassemblyjs/ast": "1.11.1",
172
+ "@webassemblyjs/helper-api-error": "1.11.1",
173
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
174
+ "@webassemblyjs/ieee754": "1.11.1",
175
+ "@webassemblyjs/leb128": "1.11.1",
176
+ "@webassemblyjs/utf8": "1.11.1"
177
+ }
178
+ },
179
+ "@webassemblyjs/wast-printer": {
180
+ "version": "1.11.1",
181
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
182
+ "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
183
+ "dev": true,
184
+ "requires": {
185
+ "@webassemblyjs/ast": "1.11.1",
186
+ "@xtuc/long": "4.2.2"
187
+ }
188
+ },
189
+ "@xtuc/ieee754": {
190
+ "version": "1.2.0",
191
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
192
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
193
+ "dev": true
194
+ },
195
+ "@xtuc/long": {
196
+ "version": "4.2.2",
197
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
198
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
199
+ "dev": true
200
+ },
201
+ "acorn": {
202
+ "version": "8.6.0",
203
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz",
204
+ "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==",
205
+ "dev": true
206
+ },
207
+ "acorn-import-assertions": {
208
+ "version": "1.8.0",
209
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
210
+ "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
211
+ "dev": true
212
+ },
213
+ "ajv": {
214
+ "version": "6.12.6",
215
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
216
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
217
+ "dev": true,
218
+ "requires": {
219
+ "fast-deep-equal": "^3.1.1",
220
+ "fast-json-stable-stringify": "^2.0.0",
221
+ "json-schema-traverse": "^0.4.1",
222
+ "uri-js": "^4.2.2"
223
+ }
224
+ },
225
+ "ajv-keywords": {
226
+ "version": "3.5.2",
227
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
228
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
229
+ "dev": true
230
+ },
231
+ "ansi-styles": {
232
+ "version": "4.3.0",
233
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
234
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
235
+ "dev": true,
236
+ "requires": {
237
+ "color-convert": "^2.0.1"
238
+ }
239
+ },
240
+ "big.js": {
241
+ "version": "5.2.2",
242
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
243
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
244
+ "dev": true
245
+ },
246
+ "braces": {
247
+ "version": "3.0.2",
248
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
249
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
250
+ "dev": true,
251
+ "requires": {
252
+ "fill-range": "^7.0.1"
253
+ }
254
+ },
255
+ "browserslist": {
256
+ "version": "4.18.1",
257
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz",
258
+ "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
259
+ "dev": true,
260
+ "requires": {
261
+ "caniuse-lite": "^1.0.30001280",
262
+ "electron-to-chromium": "^1.3.896",
263
+ "escalade": "^3.1.1",
264
+ "node-releases": "^2.0.1",
265
+ "picocolors": "^1.0.0"
266
+ }
267
+ },
268
+ "buffer-from": {
269
+ "version": "1.1.2",
270
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
271
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
272
+ "dev": true
273
+ },
274
+ "caniuse-lite": {
275
+ "version": "1.0.30001283",
276
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz",
277
+ "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==",
278
+ "dev": true
279
+ },
280
+ "chalk": {
281
+ "version": "4.1.2",
282
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
283
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
284
+ "dev": true,
285
+ "requires": {
286
+ "ansi-styles": "^4.1.0",
287
+ "supports-color": "^7.1.0"
288
+ },
289
+ "dependencies": {
290
+ "supports-color": {
291
+ "version": "7.2.0",
292
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
293
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
294
+ "dev": true,
295
+ "requires": {
296
+ "has-flag": "^4.0.0"
297
+ }
298
+ }
299
+ }
300
+ },
301
+ "chrome-trace-event": {
302
+ "version": "1.0.3",
303
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
304
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
305
+ "dev": true
306
+ },
307
+ "color-convert": {
308
+ "version": "2.0.1",
309
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
310
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
311
+ "dev": true,
312
+ "requires": {
313
+ "color-name": "~1.1.4"
314
+ }
315
+ },
316
+ "color-name": {
317
+ "version": "1.1.4",
318
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
319
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
320
+ "dev": true
321
+ },
322
+ "commander": {
323
+ "version": "2.20.3",
324
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
325
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
326
+ "dev": true
327
+ },
328
+ "electron-to-chromium": {
329
+ "version": "1.4.9",
330
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.9.tgz",
331
+ "integrity": "sha512-7AyB4SiLtGJbLACXezs8BDjDbZizuoiyHTQxbcvzfi5LYWRXVSFdmPvuDjtlWQmsVSONRicZfSBj3xgft0Wvrg==",
332
+ "dev": true
333
+ },
334
+ "emojis-list": {
335
+ "version": "3.0.0",
336
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
337
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
338
+ "dev": true
339
+ },
340
+ "enhanced-resolve": {
341
+ "version": "5.8.3",
342
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz",
343
+ "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==",
344
+ "dev": true,
345
+ "requires": {
346
+ "graceful-fs": "^4.2.4",
347
+ "tapable": "^2.2.0"
348
+ }
349
+ },
350
+ "es-module-lexer": {
351
+ "version": "0.9.3",
352
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
353
+ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
354
+ "dev": true
355
+ },
356
+ "escalade": {
357
+ "version": "3.1.1",
358
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
359
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
360
+ "dev": true
361
+ },
362
+ "eslint-scope": {
363
+ "version": "5.1.1",
364
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
365
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
366
+ "dev": true,
367
+ "requires": {
368
+ "esrecurse": "^4.3.0",
369
+ "estraverse": "^4.1.1"
370
+ }
371
+ },
372
+ "esrecurse": {
373
+ "version": "4.3.0",
374
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
375
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
376
+ "dev": true,
377
+ "requires": {
378
+ "estraverse": "^5.2.0"
379
+ },
380
+ "dependencies": {
381
+ "estraverse": {
382
+ "version": "5.3.0",
383
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
384
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
385
+ "dev": true
386
+ }
387
+ }
388
+ },
389
+ "estraverse": {
390
+ "version": "4.3.0",
391
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
392
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
393
+ "dev": true
394
+ },
395
+ "events": {
396
+ "version": "3.3.0",
397
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
398
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
399
+ "dev": true
400
+ },
401
+ "fast-deep-equal": {
402
+ "version": "3.1.3",
403
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
404
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
405
+ "dev": true
406
+ },
407
+ "fast-json-stable-stringify": {
408
+ "version": "2.1.0",
409
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
410
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
411
+ "dev": true
412
+ },
413
+ "fill-range": {
414
+ "version": "7.0.1",
415
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
416
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
417
+ "dev": true,
418
+ "requires": {
419
+ "to-regex-range": "^5.0.1"
420
+ }
421
+ },
422
+ "glob-to-regexp": {
423
+ "version": "0.4.1",
424
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
425
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
426
+ "dev": true
427
+ },
428
+ "graceful-fs": {
429
+ "version": "4.2.8",
430
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
431
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
432
+ "dev": true
433
+ },
434
+ "has-flag": {
435
+ "version": "4.0.0",
436
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
437
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
438
+ "dev": true
439
+ },
440
+ "is-number": {
441
+ "version": "7.0.0",
442
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
443
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
444
+ "dev": true
445
+ },
446
+ "jest-worker": {
447
+ "version": "27.4.2",
448
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
449
+ "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
450
+ "dev": true,
451
+ "requires": {
452
+ "@types/node": "*",
453
+ "merge-stream": "^2.0.0",
454
+ "supports-color": "^8.0.0"
455
+ }
456
+ },
457
+ "json-parse-better-errors": {
458
+ "version": "1.0.2",
459
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
460
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
461
+ "dev": true
462
+ },
463
+ "json-schema-traverse": {
464
+ "version": "0.4.1",
465
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
466
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
467
+ "dev": true
468
+ },
469
+ "json5": {
470
+ "version": "2.2.0",
471
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
472
+ "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
473
+ "dev": true,
474
+ "requires": {
475
+ "minimist": "^1.2.5"
476
+ }
477
+ },
478
+ "loader-runner": {
479
+ "version": "4.2.0",
480
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
481
+ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
482
+ "dev": true
483
+ },
484
+ "loader-utils": {
485
+ "version": "2.0.2",
486
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
487
+ "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
488
+ "dev": true,
489
+ "requires": {
490
+ "big.js": "^5.2.2",
491
+ "emojis-list": "^3.0.0",
492
+ "json5": "^2.1.2"
493
+ }
494
+ },
495
+ "lru-cache": {
496
+ "version": "6.0.0",
497
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
498
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
499
+ "dev": true,
500
+ "requires": {
501
+ "yallist": "^4.0.0"
502
+ }
503
+ },
504
+ "merge-stream": {
505
+ "version": "2.0.0",
506
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
507
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
508
+ "dev": true
509
+ },
510
+ "micromatch": {
511
+ "version": "4.0.4",
512
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
513
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
514
+ "dev": true,
515
+ "requires": {
516
+ "braces": "^3.0.1",
517
+ "picomatch": "^2.2.3"
518
+ }
519
+ },
520
+ "mime-db": {
521
+ "version": "1.51.0",
522
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
523
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
524
+ "dev": true
525
+ },
526
+ "mime-types": {
527
+ "version": "2.1.34",
528
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
529
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
530
+ "dev": true,
531
+ "requires": {
532
+ "mime-db": "1.51.0"
533
+ }
534
+ },
535
+ "minimist": {
536
+ "version": "1.2.5",
537
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
538
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
539
+ "dev": true
540
+ },
541
+ "neo-async": {
542
+ "version": "2.6.2",
543
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
544
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
545
+ "dev": true
546
+ },
547
+ "node-releases": {
548
+ "version": "2.0.1",
549
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
550
+ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
551
+ "dev": true
552
+ },
553
+ "picocolors": {
554
+ "version": "1.0.0",
555
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
556
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
557
+ "dev": true
558
+ },
559
+ "picomatch": {
560
+ "version": "2.3.0",
561
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
562
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
563
+ "dev": true
564
+ },
565
+ "punycode": {
566
+ "version": "2.1.1",
567
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
568
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
569
+ "dev": true
570
+ },
571
+ "randombytes": {
572
+ "version": "2.1.0",
573
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
574
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
575
+ "dev": true,
576
+ "requires": {
577
+ "safe-buffer": "^5.1.0"
578
+ }
579
+ },
580
+ "raw-loader": {
581
+ "version": "4.0.2",
582
+ "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz",
583
+ "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==",
584
+ "dev": true,
585
+ "requires": {
586
+ "loader-utils": "^2.0.0",
587
+ "schema-utils": "^3.0.0"
588
+ }
589
+ },
590
+ "safe-buffer": {
591
+ "version": "5.2.1",
592
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
593
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
594
+ "dev": true
595
+ },
596
+ "schema-utils": {
597
+ "version": "3.1.1",
598
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
599
+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
600
+ "dev": true,
601
+ "requires": {
602
+ "@types/json-schema": "^7.0.8",
603
+ "ajv": "^6.12.5",
604
+ "ajv-keywords": "^3.5.2"
605
+ }
606
+ },
607
+ "semver": {
608
+ "version": "7.3.5",
609
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
610
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
611
+ "dev": true,
612
+ "requires": {
613
+ "lru-cache": "^6.0.0"
614
+ }
615
+ },
616
+ "serialize-javascript": {
617
+ "version": "6.0.0",
618
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
619
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
620
+ "dev": true,
621
+ "requires": {
622
+ "randombytes": "^2.1.0"
623
+ }
624
+ },
625
+ "source-map": {
626
+ "version": "0.6.1",
627
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
628
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
629
+ "dev": true
630
+ },
631
+ "source-map-support": {
632
+ "version": "0.5.21",
633
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
634
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
635
+ "dev": true,
636
+ "requires": {
637
+ "buffer-from": "^1.0.0",
638
+ "source-map": "^0.6.0"
639
+ }
640
+ },
641
+ "supports-color": {
642
+ "version": "8.1.1",
643
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
644
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
645
+ "dev": true,
646
+ "requires": {
647
+ "has-flag": "^4.0.0"
648
+ }
649
+ },
650
+ "tapable": {
651
+ "version": "2.2.1",
652
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
653
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
654
+ "dev": true
655
+ },
656
+ "terser": {
657
+ "version": "5.10.0",
658
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
659
+ "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
660
+ "dev": true,
661
+ "requires": {
662
+ "commander": "^2.20.0",
663
+ "source-map": "~0.7.2",
664
+ "source-map-support": "~0.5.20"
665
+ },
666
+ "dependencies": {
667
+ "source-map": {
668
+ "version": "0.7.3",
669
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
670
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
671
+ "dev": true
672
+ }
673
+ }
674
+ },
675
+ "terser-webpack-plugin": {
676
+ "version": "5.2.5",
677
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz",
678
+ "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==",
679
+ "dev": true,
680
+ "requires": {
681
+ "jest-worker": "^27.0.6",
682
+ "schema-utils": "^3.1.1",
683
+ "serialize-javascript": "^6.0.0",
684
+ "source-map": "^0.6.1",
685
+ "terser": "^5.7.2"
686
+ }
687
+ },
688
+ "to-regex-range": {
689
+ "version": "5.0.1",
690
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
691
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
692
+ "dev": true,
693
+ "requires": {
694
+ "is-number": "^7.0.0"
695
+ }
696
+ },
697
+ "ts-loader": {
698
+ "version": "9.2.6",
699
+ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz",
700
+ "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==",
701
+ "dev": true,
702
+ "requires": {
703
+ "chalk": "^4.1.0",
704
+ "enhanced-resolve": "^5.0.0",
705
+ "micromatch": "^4.0.0",
706
+ "semver": "^7.3.4"
707
+ }
708
+ },
709
+ "typescript": {
710
+ "version": "4.5.2",
711
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz",
712
+ "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==",
713
+ "dev": true
714
+ },
715
+ "uri-js": {
716
+ "version": "4.4.1",
717
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
718
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
719
+ "dev": true,
720
+ "requires": {
721
+ "punycode": "^2.1.0"
722
+ }
723
+ },
724
+ "watchpack": {
725
+ "version": "2.3.0",
726
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz",
727
+ "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==",
728
+ "dev": true,
729
+ "requires": {
730
+ "glob-to-regexp": "^0.4.1",
731
+ "graceful-fs": "^4.1.2"
732
+ }
733
+ },
734
+ "webpack": {
735
+ "version": "5.64.4",
736
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.4.tgz",
737
+ "integrity": "sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==",
738
+ "dev": true,
739
+ "requires": {
740
+ "@types/eslint-scope": "^3.7.0",
741
+ "@types/estree": "^0.0.50",
742
+ "@webassemblyjs/ast": "1.11.1",
743
+ "@webassemblyjs/wasm-edit": "1.11.1",
744
+ "@webassemblyjs/wasm-parser": "1.11.1",
745
+ "acorn": "^8.4.1",
746
+ "acorn-import-assertions": "^1.7.6",
747
+ "browserslist": "^4.14.5",
748
+ "chrome-trace-event": "^1.0.2",
749
+ "enhanced-resolve": "^5.8.3",
750
+ "es-module-lexer": "^0.9.0",
751
+ "eslint-scope": "5.1.1",
752
+ "events": "^3.2.0",
753
+ "glob-to-regexp": "^0.4.1",
754
+ "graceful-fs": "^4.2.4",
755
+ "json-parse-better-errors": "^1.0.2",
756
+ "loader-runner": "^4.2.0",
757
+ "mime-types": "^2.1.27",
758
+ "neo-async": "^2.6.2",
759
+ "schema-utils": "^3.1.0",
760
+ "tapable": "^2.1.1",
761
+ "terser-webpack-plugin": "^5.1.3",
762
+ "watchpack": "^2.3.0",
763
+ "webpack-sources": "^3.2.2"
764
+ }
765
+ },
766
+ "webpack-sources": {
767
+ "version": "3.2.2",
768
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz",
769
+ "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==",
770
+ "dev": true
771
+ },
772
+ "yallist": {
773
+ "version": "4.0.0",
774
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
775
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
776
+ "dev": true
777
+ }
778
+ }
779
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "devDependencies": {
3
+ "lucid-extension-sdk": "*",
4
+ "raw-loader": "^4.0.2",
5
+ "ts-loader": "^9.2.6",
6
+ "typescript": "^4.5.2",
7
+ "webpack": "^5.64.4"
8
+ },
9
+ "dependencies": {}
10
+ }
@@ -0,0 +1,23 @@
1
+ <html>
2
+ <body>
3
+ <input type="file" id="upload"></input>
4
+
5
+ <script type="text/javascript">
6
+ const input = document.getElementById('upload');
7
+ input.addEventListener('change', (event) => {
8
+ if (input.files?.length == 1) {
9
+ const fr = new FileReader();
10
+ fr.onload = () => {
11
+ parent.postMessage({
12
+ id:'import.custom.complete',
13
+ name:input.files[0].name,
14
+ content:fr.result,
15
+ }, '*')
16
+ };
17
+ fr.readAsText(input.files[0]);
18
+ }
19
+ });
20
+
21
+ </script>
22
+ </body>
23
+ </html>
@@ -0,0 +1,4 @@
1
+ declare module '*.html' {
2
+ const content: string;
3
+ export default content;
4
+ }
@@ -0,0 +1,6 @@
1
+ import {EditorClient} from 'lucid-extension-sdk';
2
+ import importHtml from '../resources/import.html';
3
+
4
+ const client = new EditorClient();
5
+
6
+ console.log(importHtml);
@@ -0,0 +1,3 @@
1
+ declare module console {
2
+ export function log(...args: any[]): void;
3
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "compilerOptions": {
3
+ "declaration": true,
4
+ "emitDecoratorMetadata": true,
5
+ "experimentalDecorators": true,
6
+ "forceConsistentCasingInFileNames": true,
7
+ "module": "commonjs",
8
+ "moduleResolution": "node",
9
+ "newLine": "lf",
10
+ "noEmitOnError": false,
11
+ "noImplicitAny": true,
12
+ "noImplicitReturns": true,
13
+ "noImplicitThis": true,
14
+ "noUnusedLocals": false,
15
+ "pretty": true,
16
+ "removeComments": false,
17
+ "skipLibCheck": true,
18
+ "sourceMap": false,
19
+ "strictBindCallApply": true,
20
+ "strictFunctionTypes": true,
21
+ "strictNullChecks": true,
22
+ "strictPropertyInitialization": true,
23
+ "target": "ES2017",
24
+ "types": [],
25
+ "lib": ["es5", "es6", "ES2016.Array.Include", "ES2017.String", "ES2018.Promise", "esnext.asynciterable"],
26
+ "outDir": "bin",
27
+ },
28
+ "files":[
29
+ "resources/resource.d.ts",
30
+ ],
31
+ "include": [
32
+ "src/**/*"
33
+ ],
34
+ "exclude": [
35
+ "node_modules"
36
+ ]
37
+ }
@@ -0,0 +1,26 @@
1
+ const path = require('path');
2
+
3
+ module.exports = {
4
+ entry: './src/extension.ts',
5
+ module: {
6
+ rules: [
7
+ {
8
+ test: /\.tsx?$/,
9
+ use: 'ts-loader',
10
+ exclude: /node_modules/,
11
+ },
12
+ {
13
+ test:/\/resources\//,
14
+ use:'raw-loader',
15
+ }
16
+ ],
17
+ },
18
+ resolve: {
19
+ extensions: ['.tsx', '.ts', '.js'],
20
+ },
21
+ output: {
22
+ filename: 'bin/extension.js',
23
+ path: __dirname
24
+ },
25
+ mode:'development',
26
+ };
@@ -0,0 +1,4 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "extensions": []
4
+ }