@kumologica/sdk 3.1.0-alpha2 → 3.1.0-beta2

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.
Files changed (49) hide show
  1. package/cli/.DS_Store +0 -0
  2. package/cli/KumologicaError.js +17 -0
  3. package/cli/cli.js +2 -1
  4. package/cli/commands/create-commands/create-project-iteratively.js +42 -0
  5. package/cli/commands/create-commands/index.js +5 -0
  6. package/cli/commands/create.js +55 -22
  7. package/cli/commands/list-templates.js +24 -0
  8. package/cli/commands/open.js +1 -1
  9. package/cli/commands/test-utils/TestSuiteController.js +0 -1
  10. package/cli/commands/test.js +3 -2
  11. package/cli/utils/download-template-from-repo.js +346 -0
  12. package/cli/utils/download-test.js +12 -0
  13. package/cli/utils/download.js +119 -0
  14. package/cli/utils/fs/copy-dir-contents-sync.js +15 -0
  15. package/cli/utils/fs/create-zip-file.js +39 -0
  16. package/cli/utils/fs/dir-exists-sync.js +14 -0
  17. package/cli/utils/fs/dir-exists.js +17 -0
  18. package/cli/utils/fs/file-exists-sync.js +14 -0
  19. package/cli/utils/fs/file-exists.js +12 -0
  20. package/cli/utils/fs/get-tmp-dir-path.js +22 -0
  21. package/cli/utils/fs/parse.js +40 -0
  22. package/cli/utils/fs/read-file-sync.js +11 -0
  23. package/cli/utils/fs/read-file.js +10 -0
  24. package/cli/utils/fs/safe-move-file.js +58 -0
  25. package/cli/utils/fs/walk-dir-sync.js +34 -0
  26. package/cli/utils/fs/write-file-sync.js +31 -0
  27. package/cli/utils/fs/write-file.js +32 -0
  28. package/cli/{commands/utils.js → utils/logger.js} +7 -1
  29. package/cli/utils/rename-service.js +49 -0
  30. package/package.json +18 -33
  31. package/src/app/ui/editor-api/lib/auth/index.js +75 -73
  32. package/src/app/ui/editor-api/lib/auth/strategies.js +132 -132
  33. package/src/app/ui/editor-api/lib/index.js +2 -2
  34. package/src/app/ui/editor-client/public/red/main-modals.min.js +1 -16
  35. package/src/app/ui/editor-client/public/red/main.min.js +1 -16
  36. package/src/app/ui/editor-client/public/red/red.js +64 -44
  37. package/src/app/ui/editor-client/public/red/red.min.js +19 -16
  38. package/src/app/ui/editor-client/public/red/style.min.css +1 -16
  39. package/src/app/ui/editor-client/public/vendor/ace/mode-jsonata.js +1 -1
  40. package/src/app/ui/editor-client/public/vendor/ace/snippets/jsonata.js +1 -1
  41. package/src/app/ui/editor-client/public/vendor/simplemde/simplemde.min.css +7 -0
  42. package/src/app/ui/editor-client/public/vendor/simplemde/simplemde.min.js +15 -0
  43. package/src/app/ui/editor-client/public/vendor/xterm/lib/xterm.js +2 -0
  44. package/src/app/ui/editor-client/src/js/ui/common/tabs.js +25 -17
  45. package/src/app/ui/editor-client/src/js/ui/palette-navigator.js +3 -2
  46. package/src/app/ui/editor-client/src/js/ui/search.js +21 -13
  47. package/src/app/ui/editor-client/src/js/ui/view.js +5 -3
  48. package/src/app/ui/editor-client/src/js/ui/workspaces.js +10 -9
  49. package/src/app/ui/editor-client/src/sass/palette.scss +1 -0
@@ -0,0 +1,119 @@
1
+ // This file is mostly adapted from https://github.com/kevva/download repository
2
+
3
+ // License of the original module - https://github.com/kevva/download/blob/master/license
4
+
5
+ // MIT License
6
+
7
+ // Copyright (c) Kevin Mårtensson <kevinmartensson@gmail.com> (github.com/kevva)
8
+
9
+ // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10
+
11
+ // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
12
+
13
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+
15
+ 'use strict';
16
+
17
+ const fsp = require('fs').promises;
18
+ const path = require('path');
19
+ const { URL } = require('url');
20
+ const contentDisposition = require('content-disposition');
21
+ const archiveType = require('archive-type');
22
+ const decompress = require('decompress');
23
+ const filenamify = require('filenamify');
24
+ const getStream = require('get-stream');
25
+ const got = require('got');
26
+ const makeDir = require('make-dir');
27
+ const pEvent = require('p-event');
28
+ const FileType = require('file-type');
29
+ const extName = require('ext-name');
30
+
31
+ const filenameFromPath = (res) => path.basename(new URL(res.requestUrl).pathname);
32
+
33
+ const getExtFromMime = (res) => {
34
+ const header = res.headers['content-type'];
35
+
36
+ if (!header) {
37
+ return null;
38
+ }
39
+
40
+ const exts = extName.mime(header);
41
+
42
+ if (exts.length !== 1) {
43
+ return null;
44
+ }
45
+
46
+ return exts[0].ext;
47
+ };
48
+
49
+ const getFilename = async (res, data) => {
50
+ const header = res.headers['content-disposition'];
51
+
52
+ if (header) {
53
+ const parsed = contentDisposition.parse(header);
54
+
55
+ if (parsed.parameters && parsed.parameters.filename) {
56
+ return parsed.parameters.filename;
57
+ }
58
+ }
59
+
60
+ let filename = filenameFromPath(res);
61
+
62
+ if (!path.extname(filename)) {
63
+ const ext = ((await FileType.fromBuffer(data)) || {}).ext || getExtFromMime(res);
64
+
65
+ if (ext) {
66
+ filename = `${filename}.${ext}`;
67
+ }
68
+ }
69
+
70
+ return filename;
71
+ };
72
+
73
+ module.exports = (uri, output, opts) => {
74
+ if (typeof output === 'object') {
75
+ opts = output;
76
+ output = null;
77
+ }
78
+
79
+ opts = Object.assign(
80
+ {
81
+ https: {
82
+ rejectUnauthorized: process.env.npm_config_strict_ssl !== 'false',
83
+ },
84
+ responseType: 'buffer',
85
+ },
86
+ opts
87
+ );
88
+
89
+ const stream = got.stream(uri, opts);
90
+
91
+ const promise = pEvent(stream, 'response')
92
+ .then((res) => {
93
+ const encoding = opts.responseType === 'buffer' ? 'buffer' : opts.encoding;
94
+ return Promise.all([getStream(stream, { encoding }), res]);
95
+ })
96
+ .then(async (result) => {
97
+ const [data, res] = result;
98
+
99
+ if (!output) {
100
+ return opts.extract && archiveType(data) ? decompress(data, opts) : data;
101
+ }
102
+
103
+ const filename = opts.filename || filenamify(await getFilename(res, data));
104
+ const outputFilepath = path.join(output, filename);
105
+
106
+ if (opts.extract && archiveType(data)) {
107
+ return decompress(data, path.dirname(outputFilepath), opts);
108
+ }
109
+
110
+ return makeDir(path.dirname(outputFilepath))
111
+ .then(() => fsp.writeFile(outputFilepath, data))
112
+ .then(() => data);
113
+ });
114
+
115
+ stream.then = promise.then.bind(promise);
116
+ stream.catch = promise.catch.bind(promise);
117
+
118
+ return stream;
119
+ };
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ const fse = require('fs-extra');
4
+
5
+ const isNotSymbolicLink = (src) => !fse.lstatSync(src).isSymbolicLink();
6
+
7
+ function copyDirContentsSync(srcDir, destDir, { noLinks = false } = {}) {
8
+ const copySyncOptions = {
9
+ dereference: true,
10
+ filter: noLinks ? isNotSymbolicLink : null,
11
+ };
12
+ fse.copySync(srcDir, destDir, copySyncOptions);
13
+ }
14
+
15
+ module.exports = copyDirContentsSync;
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const archiver = require('archiver');
6
+ const BbPromise = require('bluebird');
7
+ const walkDirSync = require('./walk-dir-sync');
8
+
9
+ async function createZipFile(srcDirPath, outputFilePath) {
10
+ const files = walkDirSync(srcDirPath).map((file) => ({
11
+ input: file,
12
+ output: file.replace(path.join(srcDirPath, path.sep), ''),
13
+ }));
14
+
15
+ return new BbPromise((resolve, reject) => {
16
+ const output = fs.createWriteStream(outputFilePath);
17
+ const archive = archiver('zip', {
18
+ zlib: { level: 9 },
19
+ });
20
+
21
+ output.on('open', () => {
22
+ archive.pipe(output);
23
+
24
+ files.forEach((file) => {
25
+ // TODO: update since this is REALLY slow
26
+ if (fs.lstatSync(file.input).isFile()) {
27
+ archive.append(fs.createReadStream(file.input), { name: file.output });
28
+ }
29
+ });
30
+
31
+ archive.finalize();
32
+ });
33
+
34
+ archive.on('error', (err) => reject(err));
35
+ output.on('close', () => resolve(outputFilePath));
36
+ });
37
+ }
38
+
39
+ module.exports = createZipFile;
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ const fse = require('fs-extra');
4
+
5
+ function dirExistsSync(dirPath) {
6
+ try {
7
+ const stats = fse.statSync(dirPath);
8
+ return stats.isDirectory();
9
+ } catch (e) {
10
+ return false;
11
+ }
12
+ }
13
+
14
+ module.exports = dirExistsSync;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ const fsp = require('fs').promises;
4
+
5
+ async function dirExists(path) {
6
+ return fsp.lstat(path).then(
7
+ (stats) => stats.isDirectory(),
8
+ (error) => {
9
+ if (error.code === 'ENOENT') {
10
+ return false;
11
+ }
12
+ throw error;
13
+ }
14
+ );
15
+ }
16
+
17
+ module.exports = dirExists;
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ const fse = require('fs-extra');
4
+
5
+ function fileExistsSync(filePath) {
6
+ try {
7
+ const stats = fse.statSync(filePath);
8
+ return stats.isFile();
9
+ } catch (e) {
10
+ return false;
11
+ }
12
+ }
13
+
14
+ module.exports = fileExistsSync;
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ const fsp = require('fs').promises;
4
+
5
+ async function fileExists(filePath) {
6
+ return fsp
7
+ .lstat(filePath)
8
+ .then((stats) => stats.isFile())
9
+ .catch(() => false);
10
+ }
11
+
12
+ module.exports = fileExists;
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ const os = require('os');
4
+ const path = require('path');
5
+ const crypto = require('crypto');
6
+
7
+
8
+ function getBaseTmpDirPath() {
9
+ return path.join(os.tmpdir(), 'tmp-templates-kumologica');
10
+ }
11
+
12
+ function getTmpDirPath() {
13
+ return path.join(
14
+ getBaseTmpDirPath(),
15
+ crypto.randomBytes(8).toString('hex')
16
+ );
17
+ }
18
+
19
+ module.exports = {
20
+ getBaseTmpDirPath,
21
+ getTmpDirPath
22
+ }
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ const jc = require('json-cycle');
4
+ const yaml = require('js-yaml');
5
+ const _ = require('lodash');
6
+ // const cloudformationSchema = require('@serverless/utils/cloudformation-schema');
7
+
8
+ const loadYaml = (contents, options) => {
9
+ let data;
10
+ let error;
11
+ try {
12
+ data = yaml.load(contents.toString(), options || {});
13
+ } catch (exception) {
14
+ error = exception;
15
+ }
16
+ return { data, error };
17
+ };
18
+
19
+ function parse(filePath, contents) {
20
+ // Auto-parse JSON
21
+ if (filePath.endsWith('.json') || filePath.endsWith('.tfstate')) {
22
+ return jc.parse(contents);
23
+ } else if (filePath.endsWith('.yml') || filePath.endsWith('.yaml')) {
24
+ const options = {
25
+ filename: filePath,
26
+ };
27
+ let result = loadYaml(contents.toString(), options);
28
+ // if (result.error && result.error.name === 'YAMLException') {
29
+ // _.merge(options, { schema: cloudformationSchema });
30
+ // result = loadYaml(contents.toString(), options);
31
+ // }
32
+ if (result.error) {
33
+ throw result.error;
34
+ }
35
+ return result.data;
36
+ }
37
+ return contents.toString().trim();
38
+ }
39
+
40
+ module.exports = parse;
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ const fse = require('fs-extra');
4
+ const parse = require('./parse');
5
+
6
+ function readFileSync(filePath) {
7
+ const contents = fse.readFileSync(filePath);
8
+ return parse(filePath, contents);
9
+ }
10
+
11
+ module.exports = readFileSync;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ const fsp = require('fs').promises;
4
+ const parse = require('./parse');
5
+
6
+ async function readFile(filePath) {
7
+ return fsp.readFile(filePath, 'utf8').then((contents) => parse(filePath, contents));
8
+ }
9
+
10
+ module.exports = readFile;
@@ -0,0 +1,58 @@
1
+ 'use strict';
2
+
3
+ const fsp = require('fs').promises;
4
+ const fse = require('fs-extra');
5
+ const crypto = require('crypto');
6
+ const path = require('path');
7
+
8
+ /**
9
+ * Given a path that designates a location of a file on another device,
10
+ * will return a path to file in the same folder, but with a unique name
11
+ * to avoid collisions.
12
+ *
13
+ * @param {*} destPath the path to the final location of the file being moved
14
+ * @returns a unique path to a file on the same device as the file being moved
15
+ */
16
+ const generateTemporaryPathOnDestinationDevice = (destPath) => {
17
+ const dirName = path.dirname(destPath);
18
+ // Generate a unique destination file name to get the file onto the destination filesystem
19
+ const tempName = path.basename(destPath) + crypto.randomBytes(8).toString('hex');
20
+ return path.join(dirName, tempName);
21
+ };
22
+
23
+ /**
24
+ * Allows a file to be moved (renamed) even across filesystem boundaries.
25
+ *
26
+ * If the rename fails because the file is getting renamed across file system boundaries,
27
+ * the file is first copied to the destination file system under a temporary name,
28
+ * and then renamed from there.
29
+ *
30
+ * This is done because rename is atomic but copy is not, and can leave partially copied files.
31
+ *
32
+ * @param {*} oldPath the original file that should be moved
33
+ * @param {*} newPath the path to move the file to
34
+ */
35
+ async function safeMoveFile(oldPath, newPath) {
36
+ try {
37
+ // Golden path, we simply rename the file in an atomic operation
38
+ await fsp.rename(oldPath, newPath);
39
+ } catch (err) {
40
+ // The EXDEV error indicates that the rename failed because the rename was across filesystem boundaries
41
+ // This might occur if a distro uses tmpfs for temporary directories
42
+ if (err.code === 'EXDEV') {
43
+ // Generate a unique destination file name to get the file onto the destination filesystem
44
+ const tempPath = generateTemporaryPathOnDestinationDevice(newPath);
45
+
46
+ // Copy onto the destination filesystem (not guaranteed to be atomic)
47
+ await fse.copy(oldPath, tempPath);
48
+ // Atomically move the file onto the destination path, overwriting it
49
+ await fsp.rename(tempPath, newPath);
50
+ // Delete the old file once both the above operations succeed
51
+ await fse.remove(oldPath);
52
+ } else {
53
+ throw err;
54
+ }
55
+ }
56
+ }
57
+
58
+ module.exports = safeMoveFile;
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ const path = require('path');
4
+ const fs = require('fs');
5
+
6
+ function walkDirSync(dirPath, opts) {
7
+ const options = Object.assign(
8
+ {
9
+ noLinks: false,
10
+ gitIgnore: true,
11
+ recursive: false
12
+ },
13
+ opts
14
+ );
15
+ let filePaths = [];
16
+ const list = fs.readdirSync(dirPath);
17
+ list.forEach((filePathParam) => {
18
+ let filePath = filePathParam;
19
+ filePath = path.join(dirPath, filePath);
20
+ const stat = options.noLinks ? fs.lstatSync(filePath) : fs.statSync(filePath);
21
+ // skipping symbolic links when noLinks option
22
+ if ((options.noLinks && stat && stat.isSymbolicLink()) || (options.gitIgnore && filePathParam === '.git')){
23
+ return;
24
+ } else if (stat && stat.isDirectory() && options.recursive) {
25
+ filePaths = filePaths.concat(walkDirSync(filePath, opts));
26
+ } else {
27
+ filePaths.push(filePathParam);
28
+ }
29
+ });
30
+
31
+ return filePaths;
32
+ }
33
+
34
+ module.exports = walkDirSync;
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ const fse = require('fs-extra');
4
+ const path = require('path');
5
+ const jc = require('json-cycle');
6
+ const yaml = require('js-yaml');
7
+
8
+ function writeFileSync(filePath, conts, cycles) {
9
+ let contents = conts || '';
10
+
11
+ fse.mkdirsSync(path.dirname(filePath));
12
+
13
+ if (filePath.indexOf('.json') !== -1 && typeof contents !== 'string') {
14
+ if (cycles) {
15
+ contents = jc.stringify(contents, null, 2);
16
+ } else {
17
+ contents = JSON.stringify(contents, null, 2);
18
+ }
19
+ }
20
+
21
+ const yamlFileExists = filePath.indexOf('.yaml') !== -1;
22
+ const ymlFileExists = filePath.indexOf('.yml') !== -1;
23
+
24
+ if ((yamlFileExists || ymlFileExists) && typeof contents !== 'string') {
25
+ contents = yaml.dump(contents);
26
+ }
27
+
28
+ return fse.writeFileSync(filePath, contents);
29
+ }
30
+
31
+ module.exports = writeFileSync;
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ const fsp = require('fs').promises;
4
+ const fse = require('fs-extra');
5
+ const path = require('path');
6
+ const jc = require('json-cycle');
7
+ const yaml = require('js-yaml');
8
+
9
+ async function writeFile(filePath, conts, cycles) {
10
+ let contents = conts || '';
11
+
12
+ return fse.mkdirs(path.dirname(filePath)).then(() => {
13
+ if (filePath.indexOf('.json') !== -1 && typeof contents !== 'string') {
14
+ if (cycles) {
15
+ contents = jc.stringify(contents, null, 2);
16
+ } else {
17
+ contents = JSON.stringify(contents, null, 2);
18
+ }
19
+ }
20
+
21
+ const yamlFileExists = filePath.indexOf('.yaml') !== -1;
22
+ const ymlFileExists = filePath.indexOf('.yml') !== -1;
23
+
24
+ if ((yamlFileExists || ymlFileExists) && typeof contents !== 'string') {
25
+ contents = yaml.dump(contents);
26
+ }
27
+
28
+ return fsp.writeFile(filePath, contents);
29
+ });
30
+ }
31
+
32
+ module.exports = writeFile;
@@ -1,5 +1,6 @@
1
1
  const chalk = require('chalk');
2
2
 
3
+ /* Loggers */
3
4
  function logError(message) {
4
5
  console.log(chalk.red(message));
5
6
  }
@@ -8,7 +9,12 @@ function logNotice(message) {
8
9
  console.log(chalk.yellow(message));
9
10
  }
10
11
 
12
+ function logInfo(message) {
13
+ console.log(message);
14
+ }
15
+
11
16
  module.exports = {
12
17
  logError,
13
- logNotice
18
+ logNotice,
19
+ logInfo
14
20
  }
@@ -0,0 +1,49 @@
1
+ 'use strict';
2
+
3
+ const path = require('path');
4
+ const fse = require('fs-extra');
5
+
6
+ const fileExistsSync = require('./fs/file-exists-sync');
7
+ const readFileSync = require('./fs/read-file-sync');
8
+ const writeFileSync = require('./fs/write-file-sync');
9
+ const KumologicaError = require('../KumologicaError');
10
+
11
+ function renameYmlService(name, ymlServiceFile) {
12
+ const serverlessYml = fse
13
+ .readFileSync(ymlServiceFile, 'utf-8')
14
+ .replace(/(^|\s|#)service\s*:.+/, (ignore, prefix) => `${prefix}service: ${name}`)
15
+ .replace(
16
+ /(^|\s|#)service\s*:\s*\n(\s+)name:.+/,
17
+ (match, prefix, indent) => `${prefix}service:\n${indent}name: ${name}`
18
+ );
19
+
20
+ fse.writeFileSync(ymlServiceFile, serverlessYml);
21
+ }
22
+
23
+ function renameTsService(name, tsServicefile) {
24
+ const serverlessTs = fse
25
+ .readFileSync(tsServicefile, 'utf-8')
26
+ .replace(/(^|\s)service\s*:\s*('|").+('|")/, (ignore, prefix) => `${prefix}service: '${name}'`)
27
+ .replace(
28
+ /(^|\s)service\s*:\s*{\s*\n(\s+)name:\s*('|").+('|")/,
29
+ (match, prefix, indent) => `${prefix}service: {\n${indent}name: '${name}'`
30
+ );
31
+
32
+ fse.writeFileSync(tsServicefile, serverlessTs);
33
+ }
34
+
35
+ function renameService(targetProjectDir, projectName) {
36
+ const name = projectName;
37
+ const packageFile = path.join(targetProjectDir, 'package.json');
38
+ if (fileExistsSync(packageFile)) {
39
+ const json = readFileSync(packageFile);
40
+ writeFileSync(packageFile, Object.assign(json, { name }));
41
+ }
42
+ const packageLockFile = path.join(targetProjectDir, 'package-lock.json');
43
+ if (fileExistsSync(packageLockFile)) {
44
+ const json = readFileSync(packageLockFile);
45
+ writeFileSync(packageLockFile, Object.assign(json, { name }));
46
+ }
47
+ }
48
+
49
+ module.exports.renameService = renameService;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "productName": "Kumologica Designer",
4
4
  "copyright": "Copyright 2020 Kumologica Pty Ltd, All Rights Reserved.",
5
5
  "author": "Kumologica Pty Ltd <contact@kumologica.com>",
6
- "version": "3.1.0-alpha2",
6
+ "version": "3.1.0-beta2",
7
7
  "description": "Kumologica Designer, harnessing Serverless for your cloud integration needs",
8
8
  "main": "src/app/main.js",
9
9
  "files": [
@@ -65,62 +65,52 @@
65
65
  "license": "Proprietary",
66
66
  "dependencies": {
67
67
  "@electron/remote": "^2.0.8",
68
- "@kumologica/builder": "3.1.0-alpha2",
69
- "@kumologica/devkit": "3.1.0-alpha2",
70
- "@kumologica/runtime": "3.1.0-alpha2",
68
+ "@kumologica/builder": "3.1.0-beta2",
69
+ "@kumologica/devkit": "3.1.0-beta2",
70
+ "@kumologica/runtime": "3.1.0-beta2",
71
71
  "adm-zip": "0.4.13",
72
72
  "ajv": "8.10.0",
73
- "aws-sdk": "2.513.0",
73
+ "aws-sdk": "2.814.0",
74
74
  "basic-auth": "2.0.1",
75
75
  "bcryptjs": "2.4.3",
76
- "body-parser": "1.19.0",
76
+ "body-parser": "1.20.1",
77
77
  "chalk": "2.4.2",
78
- "child_process": "1.0.2",
78
+ "child-process-ext": "^2.1.1",
79
79
  "clone": "2.1.2",
80
80
  "cookie-parser": "1.4.4",
81
81
  "cors": "^2.8.5",
82
82
  "dagre": "^0.8.5",
83
83
  "debounce": "^1.2.0",
84
- "electron": "19.0.0",
85
- "electron-tabs": "^1.0.1",
84
+ "electron": "19.1.9",
86
85
  "electron-updater": "4.3.9",
87
86
  "enquirer": "^2.3.1",
88
87
  "express": "4.17.3",
89
88
  "express-session": "1.16.2",
90
- "extract-json-from-string": "1.0.1",
91
89
  "fs-extra": "10.1.0",
92
90
  "glob": "7.1.6",
93
- "got": "11.8.2",
91
+ "got": "11.8.5",
94
92
  "hash-sum": "2.0.0",
95
- "http-shutdown": "1.2.1",
96
93
  "iconv-lite": "0.5.0",
97
94
  "ini": "^2.0.0",
98
- "js-yaml": "3.13.1",
99
- "jsonata": "1.7.0",
100
- "jsonpath": "1.0.2",
95
+ "js-yaml": "^3.13.1",
96
+ "json-cycle": "^1.3.0",
97
+ "jsonpath": "1.1.1",
101
98
  "memorystore": "1.6.1",
102
99
  "mime": "2.4.4",
103
- "minimist": "^1.2.3",
104
- "multer": "1.4.1",
105
100
  "mustache": "3.0.1",
106
- "oauth2orize": "1.11.0",
107
101
  "os": "0.1.1",
108
- "passport": "0.4.0",
109
- "passport-http-bearer": "1.0.1",
110
- "passport-oauth2-client-password": "0.1.2",
111
102
  "request": "2.88.0",
112
103
  "rimraf": "3.0.0",
113
104
  "shell-path": "2.1.0",
114
105
  "simple-git": "^3.14.1",
115
106
  "simplemde": "1.11.2",
116
107
  "smoketail": "0.2.2",
117
- "socket.io": "2.3.0",
118
108
  "tcp-port-used": "1.0.2",
119
109
  "util": "0.12.1",
120
110
  "when": "3.7.8",
121
111
  "wide-align": "^1.1.5",
122
112
  "wildcard-match": "^5.1.2",
123
- "ws": "7.1.1",
113
+ "ws": "7.5.9",
124
114
  "xterm": "4.1.0",
125
115
  "xterm-addon-fit": "0.2.1",
126
116
  "yargs": "17.3.1"
@@ -129,32 +119,27 @@
129
119
  "@types/node": "^12.6.8",
130
120
  "chai": "^4.2.0",
131
121
  "grunt": "^1.0.4",
132
- "grunt-chmod": "~1.1.1",
133
122
  "grunt-cli": "~1.3.2",
134
- "grunt-concurrent": "~2.3.1",
123
+ "grunt-concurrent": "3.0.0",
135
124
  "grunt-contrib-clean": "~1.1.0",
136
125
  "grunt-contrib-compress": "~1.4.0",
137
126
  "grunt-contrib-concat": "~1.0.1",
138
127
  "grunt-contrib-copy": "~1.0.0",
139
- "grunt-contrib-jshint": "~1.1.0",
140
- "grunt-contrib-uglify-es": "github:gruntjs/grunt-contrib-uglify#harmony",
141
128
  "grunt-contrib-watch": "~1.1.0",
142
129
  "grunt-jsdoc": "^2.2.1",
143
- "grunt-jsdoc-to-markdown": "^4.0.0",
144
- "grunt-jsonlint": "~1.1.0",
130
+ "grunt-jsdoc-to-markdown": "6.0.0",
145
131
  "grunt-mkdir": "~1.0.0",
146
132
  "grunt-mocha-istanbul": "5.0.2",
147
- "grunt-nodemon": "~0.4.2",
148
133
  "grunt-npm-command": "~0.1.2",
149
134
  "grunt-sass": "3.1.0",
150
135
  "grunt-simple-mocha": "~0.4.1",
151
- "grunt-webdriver": "^2.0.3",
136
+ "grunt-terser": "2.0.0",
152
137
  "istanbul": "^0.4.5",
153
138
  "license-checker": "^25.0.1",
154
139
  "license-compatibility-checker": "^0.3.4",
155
140
  "license-report": "^3.0.0",
156
- "mocha": "^6.2.0",
157
- "node-sass": "^6.0.0",
141
+ "mocha": "10.2.0",
142
+ "node-sass": "8.0.0",
158
143
  "tslint": "^5.18.0",
159
144
  "typescript": "^3.5.3"
160
145
  },