From 2b3b4764ebfbd7c665be05a47ed3a7d2a0096d54 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Wed, 27 May 2020 14:22:26 -0500 Subject: [PATCH 01/87] add import endpoint --- .../packages/server/src/controllers/import.ts | 107 ++++++++++++++++++ Composer/packages/server/src/router/api.ts | 4 + 2 files changed, 111 insertions(+) create mode 100644 Composer/packages/server/src/controllers/import.ts diff --git a/Composer/packages/server/src/controllers/import.ts b/Composer/packages/server/src/controllers/import.ts new file mode 100644 index 0000000000..c6ac3de51e --- /dev/null +++ b/Composer/packages/server/src/controllers/import.ts @@ -0,0 +1,107 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import path from 'path'; +import fs from 'fs'; + +import { PluginLoader } from '@bfc/plugin-loader'; +import downloadNpmPackage from 'download-npm-package'; + +import { BotProjectService } from '../services/project'; +import { LocalDiskStorage } from '../models/storage/localDiskStorage'; + +const TMP_DIR = '/tmp'; + +export const ImportController = { + import: async (req, res) => { + const user = await PluginLoader.getUserFromRequest(req); + const projectId = req.params.projectId; + const currentProject = await BotProjectService.getProjectById(projectId, user); + currentProject; + + // get URL or package name + const packageName = req.query.package || req.body.package; + const version = req.query.version || req.body.version; + + if (packageName) { + try { + const files = await fetchAndExtract(packageName, version); + + if (files.length) { + console.log('**************************************************************************'); + // copy declarative files into this project's imported dialogs folder + if (!currentProject.fileStorage.exists(path.join(currentProject.dataDir, 'importedDialogs', packageName))) { + await currentProject.fileStorage.mkDir(path.join(currentProject.dataDir, 'importedDialogs', packageName), { + recursive: true, + }); + } + + for (let f = 0; f < files.length; f++) { + const file = files[f]; + await currentProject.fileStorage.mkDir( + path.join(currentProject.dataDir, 'importedDialogs', packageName, file.path), + { + recursive: true, + } + ); + + // process some files + // * rename common.lg to something else + // * rename dialogs into namespace? + // * update references to renamed dialogs, lu and LG files + // * if schema included, rebuild schema + // * add an import statement for new common.lg into main common.lg? + // ^^ for an LG library, this would be helpful - but not necessary for all LG files + + console.log('WRITE FILE', file.filename); + await currentProject.fileStorage.writeFile( + path.join(currentProject.dataDir, 'importedDialogs', packageName, file.filename), + file.content + ); + } + } + + console.log('**************************************************************************'); + + res.json(files); + } catch (err) { + return res.status(500).json(err); + } + } else { + res.status(500).json({ message: 'Please specify a package name or git url to import' }); + } + }, +}; + +const fetchAndExtract = async (uri, version) => { + // process package as an npm module. + if (!version) { + version = 'latest'; + } + + // download and extract the files from Npm + await downloadNpmPackage({ + arg: `${uri}@${version}`, + dir: TMP_DIR, + }); + + const patterns: string[] = [ + '**/*.dialog', + '**/*.lg', + '**/*.lu', + 'manifests/*.json', + '!(generated/**)', + '!(runtime/**)', + ]; + const ldfs = new LocalDiskStorage(); + const files = await ldfs.glob(patterns, path.join(TMP_DIR, uri)); + + return files.map((f) => { + return { + filename: f, + fullpath: path.join(TMP_DIR, uri, f), + path: path.dirname(path.join(f)), + content: fs.readFileSync(path.join(TMP_DIR, uri, f), 'utf8'), + }; + }); +}; diff --git a/Composer/packages/server/src/router/api.ts b/Composer/packages/server/src/router/api.ts index 536d7bf499..3a51ea7594 100644 --- a/Composer/packages/server/src/router/api.ts +++ b/Composer/packages/server/src/router/api.ts @@ -8,6 +8,7 @@ import { StorageController } from '../controllers/storage'; import { PublishController } from '../controllers/publisher'; import { AssetController } from '../controllers/asset'; import { EjectController } from '../controllers/eject'; +import { ImportController } from '../controllers/import'; const router: Router = express.Router({}); @@ -52,6 +53,9 @@ router.post('/runtime/eject/:projectId/:template', EjectController.eject); //assets router.get('/assets/projectTemplates', AssetController.getProjTemplates); +// import +router.get('/projects/:projectId/import', ImportController.import); + const ErrorHandler = (handler: RequestHandler) => (req: Request, res: Response, next: NextFunction) => { Promise.resolve(handler(req, res, next)).catch(next); }; From 8c1281a6af86a6a2a38f90497406d8c6daeead21 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Wed, 27 May 2020 14:22:42 -0500 Subject: [PATCH 02/87] ne dependency --- Composer/packages/server/package-lock.json | 773 +++++++++++++++++---- Composer/packages/server/package.json | 1 + Composer/yarn.lock | 370 +++++++++- 3 files changed, 982 insertions(+), 162 deletions(-) diff --git a/Composer/packages/server/package-lock.json b/Composer/packages/server/package-lock.json index 40e0bb16c9..46cef11bd3 100644 --- a/Composer/packages/server/package-lock.json +++ b/Composer/packages/server/package-lock.json @@ -4,65 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@azure/ms-rest-js": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.8.12.tgz", - "integrity": "sha512-1jHF1jHDXHKgdql+3uEh7798WXap3J9CefltYvH6iRypua4tu1C6mN1LFkaSUY/+OtOvkzTZkL83cxAfQPP8QA==", - "requires": { - "@types/tunnel": "0.0.0", - "axios": "^0.19.0", - "form-data": "^2.3.2", - "tough-cookie": "^2.4.3", - "tslib": "^1.9.2", - "tunnel": "0.0.6", - "uuid": "^3.2.1", - "xml2js": "^0.4.19" - }, - "dependencies": { - "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - }, - "dependencies": { - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - } - }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" - } - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } - } - }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -190,21 +131,6 @@ "@types/mime": "*" } }, - "@types/tunnel": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.0.tgz", - "integrity": "sha512-FGDp0iBRiBdPjOgjJmn1NH0KDLN+Z8fRmo+9J7XGBhubq1DPrGrbmG4UTlGzrpbCpesMqD0sWkzi27EYkOMHyg==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.0.tgz", - "integrity": "sha512-GnZbirvmqZUzMgkFn70c74OQpTTUcCzlhQliTzYjQMqg+hVKcDnxdL19Ne3UdYzdMA/+W3eb646FWn/ZaT1NfQ==" - } - } - }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -214,6 +140,11 @@ "negotiator": "0.6.2" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -257,11 +188,6 @@ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -322,6 +248,15 @@ } } }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -358,6 +293,38 @@ } } }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "requires": { + "pako": "~0.2.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -384,6 +351,16 @@ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -414,14 +391,6 @@ "object-visit": "^1.0.0" } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -457,6 +426,19 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -477,6 +459,11 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -514,11 +501,6 @@ } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -542,6 +524,75 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz", "integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA==" }, + "download-npm-package": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/download-npm-package/-/download-npm-package-3.1.12.tgz", + "integrity": "sha512-h1qYREp2NsIGkpJYsCo9t0Jdnl2YWKNWlTAHxu1YI8dCRyBno/HaPOOz/WpTKnRcJhDtrkO9LkELz5FLl048ag==", + "requires": { + "download-package-tarball": "^1.0.0", + "get-package-json-from-registry": "^2.0.0", + "home": "^1.0.1", + "mkdirp-then": "^1.2.0", + "npm-package-arg": "^4.2.0", + "registry-info": "^1.0.0" + } + }, + "download-package-tarball": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/download-package-tarball/-/download-package-tarball-1.0.7.tgz", + "integrity": "sha512-9HQLxzr8obeuO/7kKYVTtqjtttBu1ClWIAMPwcexT7KtqDS4dvJh5mz3yngvNSkpm0YIOIO0ae16vntqOkzafQ==", + "requires": { + "download-tarball": "^1.0.0", + "fs-extra": "^3.0.0", + "mkdirp-then": "^1.2.0", + "npm-package-arg": "^4.2.0", + "rimraf-then": "^1.0.0", + "then-read-json": "^1.0.3", + "then-tmp": "^1.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "download-tarball": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/download-tarball/-/download-tarball-1.1.0.tgz", + "integrity": "sha512-nQUzhiejjochmNpbjx055yiYuObGMPOz4Vv2laKpRS3bmLfeqZ3vph08PA+e3oUZTBvW7bff2Vs9TDLlT31tmw==", + "requires": { + "got": "^6.3.0", + "gunzip-maybe": "^1.3.1", + "http-https-agent": "^1.0.2", + "object-assign": "^4.1.0", + "promisify-function": "^1.3.2", + "pump": "^1.0.1", + "tar-fs": "^1.13.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -552,6 +603,14 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -800,6 +859,11 @@ } } }, + "fast-cache": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fast-cache/-/fast-cache-1.1.1.tgz", + "integrity": "sha1-Raexe1W+XIWp80zss1FUMMzFuhk=" + }, "fast-glob": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", @@ -881,11 +945,44 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "get-npm-registry-package": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/get-npm-registry-package/-/get-npm-registry-package-1.0.7.tgz", + "integrity": "sha512-ijfMeinDv/odbmRUAAFaV2Om0h1GEujYlg2h+TY0SH412NIH0jRRRCIRFmm/FGp/7zaFdTZsaxM3aRvNQZVcLg==", + "requires": { + "got": "^6.3.0", + "http-https-agent": "^1.0.1", + "npm-package-arg": "^4.2.0", + "registry-info": "^1.0.0", + "url-join": "^1.1.0" + } + }, + "get-package-json-from-registry": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/get-package-json-from-registry/-/get-package-json-from-registry-2.2.2.tgz", + "integrity": "sha512-arS5dG2kfVD2Hn9uco2dC/a9OdJaMkr4vHWoHJgqgtedjv8gdlgPc02wwtYSd6uY+vuq0bgZ2MJpPRcb+TZO1g==", + "requires": { + "fast-cache": "^1.1.0", + "get-npm-registry-package": "^1.0.1", + "immutable-object-methods": "^1.2.1", + "resolve-npm-version": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -953,6 +1050,42 @@ "slash": "^2.0.0" } }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "gunzip-maybe": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", + "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", + "requires": { + "browserify-zlib": "^0.1.4", + "is-deflate": "^1.0.0", + "is-gzip": "^1.0.0", + "peek-stream": "^1.1.0", + "pumpify": "^1.3.3", + "through2": "^2.0.3" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -982,6 +1115,19 @@ } } }, + "home": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/home/-/home-1.0.1.tgz", + "integrity": "sha1-lqQjzrSbmDeP9e886uBZpVf53TU=", + "requires": { + "os-homedir": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -1006,6 +1152,14 @@ } } }, + "http-https-agent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/http-https-agent/-/http-https-agent-1.0.2.tgz", + "integrity": "sha1-ONAUtO3mW4J/910XDxaqw3f24DQ=", + "requires": { + "lodash.startswith": "^4.1.0" + } + }, "iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", @@ -1019,6 +1173,14 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, + "immutable-object-methods": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/immutable-object-methods/-/immutable-object-methods-1.3.2.tgz", + "integrity": "sha512-+BkFnEv/pxnspkYBvPDRg20nL0DOvF/D6zjjzBbxH3LqvJpviz6ilDKjsm/0QwB6XzYAwAZju9SNhhjtCVH2Tw==", + "requires": { + "object-assign": "^4.1.0" + } + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1033,6 +1195,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, "ipaddr.js": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", @@ -1079,6 +1246,11 @@ } } }, + "is-deflate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", + "integrity": "sha1-yGKQHDwWH7CdrHzcfnhPgOmPLxQ=" + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -1114,6 +1286,11 @@ "is-extglob": "^2.1.1" } }, + "is-gzip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=" + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -1140,6 +1317,21 @@ "isobject": "^3.0.1" } }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -1155,6 +1347,14 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -1165,6 +1365,16 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, + "lodash.startswith": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.startswith/-/lodash.startswith-4.2.1.tgz", + "integrity": "sha1-xZjErc4YiiflMUVzHNxsDnF3YAw=" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -1236,6 +1446,11 @@ "mime-db": "1.43.0" } }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -1255,11 +1470,38 @@ } } }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp-then": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mkdirp-then/-/mkdirp-then-1.2.0.tgz", + "integrity": "sha1-pJLIecpNhz9e5FAI+PVf0BUN48U=", + "requires": { + "any-promise": "^1.1.0", + "mkdirp": "^0.5.0" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -1283,6 +1525,20 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "npm-package-arg": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-4.2.1.tgz", + "integrity": "sha1-WTMD/eqF98Qid18X+et2cPaA4+w=", + "requires": { + "hosted-git-info": "^2.1.5", + "semver": "^5.1.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -1348,6 +1604,21 @@ "wrappy": "1" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -1407,6 +1678,16 @@ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" }, + "peek-stream": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", + "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", + "requires": { + "buffer-from": "^1.0.0", + "duplexify": "^3.5.0", + "through2": "^2.0.3" + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -1417,6 +1698,21 @@ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promisify-function": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/promisify-function/-/promisify-function-1.3.2.tgz", + "integrity": "sha1-8AangFVPi/xuVoaGMjuHc/q89Gk=" + }, "proxy-addr": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", @@ -1426,15 +1722,35 @@ "ipaddr.js": "1.8.0" } }, - "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } }, "qs": { "version": "6.5.2", @@ -1475,6 +1791,31 @@ } } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -1484,6 +1825,32 @@ "safe-regex": "^1.1.0" } }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-info": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/registry-info/-/registry-info-1.0.0.tgz", + "integrity": "sha1-IoSLjT0PHF6wo/tPEh2I6MasEwM=", + "requires": { + "registry-auth-token": "^3.0.1", + "registry-url": "^3.1.0" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "^1.0.1" + } + }, "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", @@ -1494,6 +1861,14 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, + "resolve-npm-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-npm-version/-/resolve-npm-version-1.0.1.tgz", + "integrity": "sha1-Ef7effj8edA7bgy7RCYYZ8lDAu4=", + "requires": { + "semver": "^5.2.0" + } + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -1504,6 +1879,23 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "rimraf-then": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rimraf-then/-/rimraf-then-1.0.1.tgz", + "integrity": "sha1-vURYp561YbdUiq7ArDdT70Kf5ws=", + "requires": { + "any-promise": "^1.3.0", + "rimraf": "2" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -1522,10 +1914,10 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "send": { "version": "0.16.2", @@ -1769,6 +2161,110 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, + "then-read-json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/then-read-json/-/then-read-json-1.0.3.tgz", + "integrity": "sha1-mg+kzNpdd7s0iceRKQjM2kxHQuA=", + "requires": { + "graceful-fs": "^4.1.4", + "mz": "^2.0.0" + } + }, + "then-tmp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/then-tmp/-/then-tmp-1.0.2.tgz", + "integrity": "sha1-Wh/uMIQ3wExIQv380G56mSSbvms=", + "requires": { + "promisify-function": "^1.3.2", + "tmp": "0.0.29" + } + }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tmp": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", + "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -1812,25 +2308,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" - }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1859,6 +2336,11 @@ "set-value": "^2.0.1" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -1900,26 +2382,44 @@ } } }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, + "url-join": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", + "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=" + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1930,19 +2430,10 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" } } } diff --git a/Composer/packages/server/package.json b/Composer/packages/server/package.json index bfcaee66ab..855a34ccdc 100644 --- a/Composer/packages/server/package.json +++ b/Composer/packages/server/package.json @@ -73,6 +73,7 @@ "cookie-parser": "^1.4.4", "debug": "^4.1.1", "dotenv": "^8.1.0", + "download-npm-package": "^3.1.12", "ejs": "^2.7.1", "express": "^4.16.4", "express-session": "^1.17.0", diff --git a/Composer/yarn.lock b/Composer/yarn.lock index 10186d8bc8..f0ea5048a6 100644 --- a/Composer/yarn.lock +++ b/Composer/yarn.lock @@ -4731,6 +4731,11 @@ any-observable@^0.3.0: resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== +any-promise@^1.0.0, any-promise@^1.1.0, any-promise@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -5743,6 +5748,13 @@ browserify-sign@^4.0.0: inherits "^2.0.1" parse-asn1 "^5.0.0" +browserify-zlib@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0= + dependencies: + pako "~0.2.0" + browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" @@ -6119,6 +6131,11 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + cardinal@^2.1.1: version "2.1.1" resolved "https://botbuilder.myget.org/F/botbuilder-declarative/npm/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" @@ -6260,6 +6277,11 @@ chokidar@^3.2.2: optionalDependencies: fsevents "~2.1.2" +chownr@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chownr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" @@ -7009,6 +7031,13 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -8444,6 +8473,44 @@ dotenv@^8.2.0: resolved "https://botbuilder.myget.org/F/botframework-cli/npm/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha1-l+YZJZradQ7qPk6j4mvO6lQksWo= +download-npm-package@^3.1.12: + version "3.1.12" + resolved "https://registry.yarnpkg.com/download-npm-package/-/download-npm-package-3.1.12.tgz#9f82d4ee8678391f37d3bab35a0354f459172c97" + integrity sha512-h1qYREp2NsIGkpJYsCo9t0Jdnl2YWKNWlTAHxu1YI8dCRyBno/HaPOOz/WpTKnRcJhDtrkO9LkELz5FLl048ag== + dependencies: + download-package-tarball "^1.0.0" + get-package-json-from-registry "^2.0.0" + home "^1.0.1" + mkdirp-then "^1.2.0" + npm-package-arg "^4.2.0" + registry-info "^1.0.0" + +download-package-tarball@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/download-package-tarball/-/download-package-tarball-1.0.7.tgz#df043e2aeae688907600decf1b82416e67ffb4d8" + integrity sha512-9HQLxzr8obeuO/7kKYVTtqjtttBu1ClWIAMPwcexT7KtqDS4dvJh5mz3yngvNSkpm0YIOIO0ae16vntqOkzafQ== + dependencies: + download-tarball "^1.0.0" + fs-extra "^3.0.0" + mkdirp-then "^1.2.0" + npm-package-arg "^4.2.0" + rimraf-then "^1.0.0" + then-read-json "^1.0.3" + then-tmp "^1.0.0" + +download-tarball@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/download-tarball/-/download-tarball-1.1.0.tgz#2ac42353158b41f66d42c79a4fd8fcac42c90547" + integrity sha512-nQUzhiejjochmNpbjx055yiYuObGMPOz4Vv2laKpRS3bmLfeqZ3vph08PA+e3oUZTBvW7bff2Vs9TDLlT31tmw== + dependencies: + got "^6.3.0" + gunzip-maybe "^1.3.1" + http-https-agent "^1.0.2" + object-assign "^4.1.0" + promisify-function "^1.3.2" + pump "^1.0.1" + tar-fs "^1.13.0" + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -8454,7 +8521,7 @@ duplexer@^0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= -duplexify@^3.4.2, duplexify@^3.6.0: +duplexify@^3.4.2, duplexify@^3.5.0, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== @@ -9337,6 +9404,11 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= +fast-cache@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fast-cache/-/fast-cache-1.1.1.tgz#45a7b17b55be5c85a9f34cecb3515430ccc5ba19" + integrity sha1-Raexe1W+XIWp80zss1FUMMzFuhk= + fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -9817,6 +9889,15 @@ fs-extra@8.1.0, fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" + integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + fs-extra@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -9950,11 +10031,32 @@ get-node-dimensions@^1.2.1: resolved "https://registry.yarnpkg.com/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz#fb7b4bb57060fb4247dd51c9d690dfbec56b0823" integrity sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ== +get-npm-registry-package@^1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/get-npm-registry-package/-/get-npm-registry-package-1.0.7.tgz#3d032a37fe2c7ce647f334a10cb047512ffce3bd" + integrity sha512-ijfMeinDv/odbmRUAAFaV2Om0h1GEujYlg2h+TY0SH412NIH0jRRRCIRFmm/FGp/7zaFdTZsaxM3aRvNQZVcLg== + dependencies: + got "^6.3.0" + http-https-agent "^1.0.1" + npm-package-arg "^4.2.0" + registry-info "^1.0.0" + url-join "^1.1.0" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== +get-package-json-from-registry@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/get-package-json-from-registry/-/get-package-json-from-registry-2.2.2.tgz#252d53553ed19c5e97db00d4fc2bbea4c3282019" + integrity sha512-arS5dG2kfVD2Hn9uco2dC/a9OdJaMkr4vHWoHJgqgtedjv8gdlgPc02wwtYSd6uY+vuq0bgZ2MJpPRcb+TZO1g== + dependencies: + fast-cache "^1.1.0" + get-npm-registry-package "^1.0.1" + immutable-object-methods "^1.2.1" + resolve-npm-version "^1.0.0" + get-port@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" @@ -10247,6 +10349,23 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +got@^6.3.0: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + got@^8.3.1: version "8.3.2" resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" @@ -10292,16 +10411,16 @@ graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +graceful-fs@^4.1.4, graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== -graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - graphlib@^2.1.7: version "2.1.7" resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.7.tgz#b6a69f9f44bd9de3963ce6804a2fc9e73d86aecc" @@ -10324,6 +10443,18 @@ gud@^1.0.0: resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== +gunzip-maybe@^1.3.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz#b913564ae3be0eda6f3de36464837a9cd94b98ac" + integrity sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw== + dependencies: + browserify-zlib "^0.1.4" + is-deflate "^1.0.0" + is-gzip "^1.0.0" + peek-stream "^1.1.0" + pumpify "^1.3.3" + through2 "^2.0.3" + gzip-size@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" @@ -10516,6 +10647,13 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +home@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/home/-/home-1.0.1.tgz#96a423ceb49b98378ff5ef3ceae059a557f9dd35" + integrity sha1-lqQjzrSbmDeP9e886uBZpVf53TU= + dependencies: + os-homedir "^1.0.1" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -10533,6 +10671,11 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== +hosted-git-info@^2.1.5: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + hosted-git-info@^3.0.4: version "3.0.4" resolved "https://botbuilder.myget.org/F/botframework-cli/npm/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" @@ -10681,6 +10824,13 @@ http-errors@1.7.2, http-errors@^1.7.2, http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-https-agent@^1.0.1, http-https-agent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/http-https-agent/-/http-https-agent-1.0.2.tgz#38d014b4ede65b827ff75d170f16aac377f6e034" + integrity sha1-ONAUtO3mW4J/910XDxaqw3f24DQ= + dependencies: + lodash.startswith "^4.1.0" + http-parser-js@>=0.4.0: version "0.5.0" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" @@ -10848,6 +10998,13 @@ immer@^5.2.0: resolved "https://registry.yarnpkg.com/immer/-/immer-5.2.0.tgz#d5bc1850b9cce3bbf9c809c91b5d60f11c415462" integrity sha512-fstQQo9692Y7ET02wKp5iq5HoHAty+3jouMzVvjloQYHtIs6STzNHXvxLPCRprRcGrJ1DYq5gyLv6+KEf3VGgw== +immutable-object-methods@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/immutable-object-methods/-/immutable-object-methods-1.3.2.tgz#bfd9ab4f97159277063fbe43f77a741624d80757" + integrity sha512-+BkFnEv/pxnspkYBvPDRg20nL0DOvF/D6zjjzBbxH3LqvJpviz6ilDKjsm/0QwB6XzYAwAZju9SNhhjtCVH2Tw== + dependencies: + object-assign "^4.1.0" + import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -11165,6 +11322,11 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= +is-deflate@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-deflate/-/is-deflate-1.0.0.tgz#c862901c3c161fb09dac7cdc7e784f80e98f2f14" + integrity sha1-yGKQHDwWH7CdrHzcfnhPgOmPLxQ= + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -11253,6 +11415,11 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-gzip@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" + integrity sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM= + is-installed-globally@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" @@ -11366,6 +11533,11 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -11390,6 +11562,11 @@ is-resolvable@^1.0.0: resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + is-retry-allowed@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" @@ -11400,7 +11577,7 @@ is-root@2.0.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.0.0.tgz#838d1e82318144e5a6f77819d90207645acc7019" integrity sha512-F/pJIk8QD6OX5DNhRB7hWamLsUilmkDGho48KbgZ6xg/lmAZXHxzXQ91jzB3yRSw5kdQGGGc4yz8HYhTYIMWPg== -is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -12153,6 +12330,13 @@ jsonc-parser@^2.2.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.2.0.tgz#f206f87f9d49d644b7502052c04e82dd6392e9ef" integrity sha512-4fLQxW1j/5fWj6p78vAlAafoCKtuBm6ghv+Ij5W2DrDx0qE+ZdEl2c6Ko1mgJNF5ftX1iEWQQ4Ap7+3GlhjkOA== +jsonfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -12684,6 +12868,11 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.startswith@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.startswith/-/lodash.startswith-4.2.1.tgz#c598c4adce188a27e53145731cdc6c0e7177600c" + integrity sha1-xZjErc4YiiflMUVzHNxsDnF3YAw= + lodash.template@^4.2.4, lodash.template@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -13252,6 +13441,14 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" +mkdirp-then@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mkdirp-then/-/mkdirp-then-1.2.0.tgz#a492c879ca4d873f5ee45008f8f55fd0150de3c5" + integrity sha1-pJLIecpNhz9e5FAI+PVf0BUN48U= + dependencies: + any-promise "^1.1.0" + mkdirp "^0.5.0" + mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.2, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -13364,6 +13561,15 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mz@^2.0.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -13652,6 +13858,14 @@ npm-conf@^1.1.3: config-chain "^1.1.11" pify "^3.0.0" +npm-package-arg@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.2.1.tgz#593303fdea85f7c422775f17f9eb7670f680e3ec" + integrity sha1-WTMD/eqF98Qid18X+et2cPaA4+w= + dependencies: + hosted-git-info "^2.1.5" + semver "^5.1.0" + npm-packlist@^1.1.6: version "1.4.1" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" @@ -13959,7 +14173,7 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: +os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= @@ -13973,7 +14187,7 @@ os-locale@^3.0.0, os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -14143,6 +14357,11 @@ pako@^1.0.11: resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= + pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" @@ -14369,6 +14588,15 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +peek-stream@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz#3b35d84b7ccbbd262fff31dc10da56856ead6d67" + integrity sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA== + dependencies: + buffer-from "^1.0.0" + duplexify "^3.5.0" + through2 "^2.0.3" + pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -15185,7 +15413,7 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0: +prepend-http@^1.0.0, prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= @@ -15314,6 +15542,11 @@ promise@^7.1.1: dependencies: asap "~2.0.3" +promisify-function@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/promisify-function/-/promisify-function-1.3.2.tgz#f006a780554f8bfc6e568686323b8773fabcf469" + integrity sha1-8AangFVPi/xuVoaGMjuHc/q89Gk= + prompts@^2.0.1: version "2.0.4" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.4.tgz#179f9d4db3128b9933aa35f93a800d8fce76a682" @@ -15396,6 +15629,14 @@ public-encrypt@^4.0.0: randombytes "^2.0.1" safe-buffer "^5.1.2" +pump@^1.0.0, pump@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -15962,7 +16203,7 @@ regexpu-core@^4.7.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" -registry-auth-token@^3.3.2: +registry-auth-token@^3.0.1, registry-auth-token@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== @@ -15977,6 +16218,14 @@ registry-auth-token@^4.0.0: dependencies: rc "^1.2.8" +registry-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/registry-info/-/registry-info-1.0.0.tgz#22848b8d3d0f1c5eb0a3fb4f121d88e8c6ac1303" + integrity sha1-IoSLjT0PHF6wo/tPEh2I6MasEwM= + dependencies: + registry-auth-token "^3.0.1" + registry-url "^3.1.0" + registry-url@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" @@ -16238,6 +16487,13 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve-npm-version@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-npm-version/-/resolve-npm-version-1.0.1.tgz#11fede7df8fc79d03b6e0cbb44261867c94302ee" + integrity sha1-Ef7effj8edA7bgy7RCYYZ8lDAu4= + dependencies: + semver "^5.2.0" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -16320,20 +16576,28 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== +rimraf-then@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rimraf-then/-/rimraf-then-1.0.1.tgz#bd4458a79eb561b7548aaec0ac3753ef429fe70b" + integrity sha1-vURYp561YbdUiq7ArDdT70Kf5ws= dependencies: - glob "^7.1.3" + any-promise "^1.3.0" + rimraf "2" -rimraf@^2.7.1: +rimraf@2, rimraf@^2.7.1: version "2.7.1" resolved "https://botbuilder.myget.org/F/botbuilder-declarative/npm/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= dependencies: glob "^7.1.3" +rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -16543,7 +16807,7 @@ semver@7.3.2, semver@^7.2.1, semver@^7.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@^5.7.1: +semver@^5.1.0, semver@^5.2.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -17595,7 +17859,17 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar-stream@^1.5.0: +tar-fs@^1.13.0: + version "1.16.3" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" + integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== + dependencies: + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" + +tar-stream@^1.1.2, tar-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== @@ -17736,6 +18010,36 @@ text-table@0.2.0, text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +then-read-json@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/then-read-json/-/then-read-json-1.0.3.tgz#9a0fa4ccda5d77bb3489c7912908ccda4c4742e0" + integrity sha1-mg+kzNpdd7s0iceRKQjM2kxHQuA= + dependencies: + graceful-fs "^4.1.4" + mz "^2.0.0" + +then-tmp@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/then-tmp/-/then-tmp-1.0.2.tgz#5a1fee308437c04c4842fdfcd06e7a99249bbe6b" + integrity sha1-Wh/uMIQ3wExIQv380G56mSSbvms= + dependencies: + promisify-function "^1.3.2" + tmp "0.0.29" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= + dependencies: + any-promise "^1.0.0" + throat@^4.0.0, throat@^4.1.0: version "4.1.0" resolved "https://botbuilder.myget.org/F/botframework-cli/npm/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -17751,7 +18055,7 @@ throttleit@^1.0.0: resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= -through2@^2.0.0, through2@^2.0.1: +through2@^2.0.0, through2@^2.0.1, through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -17769,7 +18073,7 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow== -timed-out@^4.0.1: +timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= @@ -17786,6 +18090,13 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= +tmp@0.0.29: + version "0.0.29" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" + integrity sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA= + dependencies: + os-tmpdir "~1.0.1" + tmp@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" @@ -18305,6 +18616,11 @@ untildify@4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + upath@^1.1.0, upath@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" @@ -18346,6 +18662,11 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-join@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" + integrity sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg= + url-loader@2.2.0: version "2.2.0" resolved "https://botbuilder.myget.org/F/botbuilder-declarative/npm/url-loader/-/url-loader-2.2.0.tgz#af321aece1fd0d683adc8aaeb27829f29c75b46e" @@ -18364,6 +18685,13 @@ url-loader@^1.1.2: mime "^2.0.3" schema-utils "^1.0.0" +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" From 2451a27fff7ebd2d57fdeb58e1ebc428169e4125 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Thu, 11 Jun 2020 14:40:25 -0500 Subject: [PATCH 03/87] add support for getting a github project --- Composer/packages/server/package-lock.json | 36 ++++++ Composer/packages/server/package.json | 1 + .../packages/server/src/controllers/import.ts | 122 +++++++++++------- 3 files changed, 113 insertions(+), 46 deletions(-) diff --git a/Composer/packages/server/package-lock.json b/Composer/packages/server/package-lock.json index 46cef11bd3..ca96d43cf4 100644 --- a/Composer/packages/server/package-lock.json +++ b/Composer/packages/server/package-lock.json @@ -248,6 +248,15 @@ } } }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, "bl": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", @@ -325,6 +334,11 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -356,6 +370,14 @@ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -2308,6 +2330,11 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -2387,6 +2414,15 @@ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" }, + "unzip-stream": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unzip-stream/-/unzip-stream-0.3.0.tgz", + "integrity": "sha512-NG1h/MdGIX3HzyqMjyj1laBCmlPYhcO4xEy7gEqqzGiSLw7XqDQCnY4nYSn5XSaH8mQ6TFkaujrO8d/PIZN85A==", + "requires": { + "binary": "^0.3.0", + "mkdirp": "^0.5.1" + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", diff --git a/Composer/packages/server/package.json b/Composer/packages/server/package.json index d0deade07e..1346ae71cd 100644 --- a/Composer/packages/server/package.json +++ b/Composer/packages/server/package.json @@ -92,6 +92,7 @@ "path-to-regexp": "^6.1.0", "portfinder": "1.0.25", "ts-md5": "^1.2.7", + "unzip-stream": "^0.3.0", "vscode-languageserver": "^5.3.0-next", "vscode-ws-jsonrpc": "^0.1.1", "ws": "^5.0.0" diff --git a/Composer/packages/server/src/controllers/import.ts b/Composer/packages/server/src/controllers/import.ts index c6ac3de51e..23eb6ae200 100644 --- a/Composer/packages/server/src/controllers/import.ts +++ b/Composer/packages/server/src/controllers/import.ts @@ -4,6 +4,8 @@ import path from 'path'; import fs from 'fs'; +import * as unzipper from 'unzip-stream'; +import axios from 'axios'; import { PluginLoader } from '@bfc/plugin-loader'; import downloadNpmPackage from 'download-npm-package'; @@ -25,46 +27,9 @@ export const ImportController = { if (packageName) { try { - const files = await fetchAndExtract(packageName, version); - - if (files.length) { - console.log('**************************************************************************'); - // copy declarative files into this project's imported dialogs folder - if (!currentProject.fileStorage.exists(path.join(currentProject.dataDir, 'importedDialogs', packageName))) { - await currentProject.fileStorage.mkDir(path.join(currentProject.dataDir, 'importedDialogs', packageName), { - recursive: true, - }); - } - - for (let f = 0; f < files.length; f++) { - const file = files[f]; - await currentProject.fileStorage.mkDir( - path.join(currentProject.dataDir, 'importedDialogs', packageName, file.path), - { - recursive: true, - } - ); - - // process some files - // * rename common.lg to something else - // * rename dialogs into namespace? - // * update references to renamed dialogs, lu and LG files - // * if schema included, rebuild schema - // * add an import statement for new common.lg into main common.lg? - // ^^ for an LG library, this would be helpful - but not necessary for all LG files - - console.log('WRITE FILE', file.filename); - await currentProject.fileStorage.writeFile( - path.join(currentProject.dataDir, 'importedDialogs', packageName, file.filename), - file.content - ); - } - } - - console.log('**************************************************************************'); - - res.json(files); - } catch (err) { + const files = await importRemoteAsset(currentProject, packageName, version); + return res.json(files); + } catch { return res.status(500).json(err); } } else { @@ -73,17 +38,82 @@ export const ImportController = { }, }; +const importRemoteAsset = async (currentProject, packageName, version) => { + const files = await fetchAndExtract(packageName, version); + + if (files.length) { + // copy declarative files into this project's imported dialogs folder + if (!currentProject.fileStorage.exists(path.join(currentProject.dataDir, 'importedDialogs', packageName))) { + await currentProject.fileStorage.mkDir(path.join(currentProject.dataDir, 'importedDialogs', packageName), { + recursive: true, + }); + } + + for (let f = 0; f < files.length; f++) { + const file = files[f]; + await currentProject.fileStorage.mkDir( + path.join(currentProject.dataDir, 'importedDialogs', packageName, file.path), + { + recursive: true, + } + ); + + // process some files?? + // * rename common.lg to something else + // * rename dialogs into namespace? + // * update references to renamed dialogs, lu and LG files + // * if schema included, rebuild schema + // * add an import statement for new common.lg into main common.lg? + // ^^ for an LG library, this would be helpful - but not necessary for all LG files + + await currentProject.fileStorage.writeFile( + path.join(currentProject.dataDir, 'importedDialogs', packageName, file.filename), + file.content + ); + } + } + + return files; +}; + const fetchAndExtract = async (uri, version) => { // process package as an npm module. + + let type = 'npm'; + + // github packages are in the form of user/repo and potentially #version + if (uri.match(/\//)) { + type = 'github'; + } + if (!version) { - version = 'latest'; + switch (type) { + case 'npm': + version = 'latest'; + break; + case 'github': + version = 'master'; + break; + } } - // download and extract the files from Npm - await downloadNpmPackage({ - arg: `${uri}@${version}`, - dir: TMP_DIR, - }); + switch (type) { + case 'npm': + // download and extract the files from Npm + await downloadNpmPackage({ + arg: `${uri}@${version}`, + dir: TMP_DIR, + }); + break; + case 'github': + const stream = await axios({ + method: 'get', + url: `https://github.com/${uri}/archive/${version}.zip`, + responseType: 'stream', + }); + stream.data.pipe(unzipper.Extract(TMP_DIR)); + break; + } const patterns: string[] = [ '**/*.dialog', From c7b76604d0da1ae0cbd3659ff02fb367ccbc4db5 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Fri, 12 Jun 2020 10:40:12 -0500 Subject: [PATCH 04/87] allow import from github --- .../packages/server/src/controllers/import.ts | 111 ++++++++++-------- 1 file changed, 63 insertions(+), 48 deletions(-) diff --git a/Composer/packages/server/src/controllers/import.ts b/Composer/packages/server/src/controllers/import.ts index 23eb6ae200..34951eda11 100644 --- a/Composer/packages/server/src/controllers/import.ts +++ b/Composer/packages/server/src/controllers/import.ts @@ -29,7 +29,7 @@ export const ImportController = { try { const files = await importRemoteAsset(currentProject, packageName, version); return res.json(files); - } catch { + } catch (err) { return res.status(500).json(err); } } else { @@ -76,62 +76,77 @@ const importRemoteAsset = async (currentProject, packageName, version) => { return files; }; -const fetchAndExtract = async (uri, version) => { +const fetchAndExtract = async ( + uri, + version +): Promise<{ filename: string; fullpath: string; path: string; content: string }[]> => { // process package as an npm module. - let type = 'npm'; + const filterFiles = async () => { + const patterns: string[] = [ + '**/*.dialog', + '**/*.lg', + '**/*.lu', + 'manifests/*.json', + '!(generated/**)', + '!(runtime/**)', + ]; + const ldfs = new LocalDiskStorage(); + const files = await ldfs.glob(patterns, path.join(TMP_DIR, uri)); + + return files.map((f) => { + return { + filename: f, + fullpath: path.join(TMP_DIR, uri, f), + path: path.dirname(path.join(f)), + content: fs.readFileSync(path.join(TMP_DIR, uri, f), 'utf8'), + }; + }); + }; + + return new Promise(async (resolve, reject) => { + let type = 'npm'; + + // github packages are in the form of user/repo and potentially #version + if (uri.match(/\//)) { + type = 'github'; + } - // github packages are in the form of user/repo and potentially #version - if (uri.match(/\//)) { - type = 'github'; - } + if (!version) { + switch (type) { + case 'npm': + version = 'latest'; + break; + case 'github': + version = 'master'; + break; + } + } + + let stream; - if (!version) { switch (type) { case 'npm': - version = 'latest'; + // download and extract the files from Npm + await downloadNpmPackage({ + arg: `${uri}@${version}`, + dir: TMP_DIR, + }); + resolve(await filterFiles()); break; case 'github': - version = 'master'; + stream = await axios({ + method: 'get', + url: `https://github.com/${uri}/archive/${version}.zip`, + responseType: 'stream', + }); + stream.data.pipe( + unzipper.Extract({ path: path.join(TMP_DIR, uri) }).on('close', async () => { + console.log('EXTRACTED GITHUB ZIP FILE!!'); + resolve(await filterFiles()); + }) + ); break; } - } - - switch (type) { - case 'npm': - // download and extract the files from Npm - await downloadNpmPackage({ - arg: `${uri}@${version}`, - dir: TMP_DIR, - }); - break; - case 'github': - const stream = await axios({ - method: 'get', - url: `https://github.com/${uri}/archive/${version}.zip`, - responseType: 'stream', - }); - stream.data.pipe(unzipper.Extract(TMP_DIR)); - break; - } - - const patterns: string[] = [ - '**/*.dialog', - '**/*.lg', - '**/*.lu', - 'manifests/*.json', - '!(generated/**)', - '!(runtime/**)', - ]; - const ldfs = new LocalDiskStorage(); - const files = await ldfs.glob(patterns, path.join(TMP_DIR, uri)); - - return files.map((f) => { - return { - filename: f, - fullpath: path.join(TMP_DIR, uri, f), - path: path.dirname(path.join(f)), - content: fs.readFileSync(path.join(TMP_DIR, uri, f), 'utf8'), - }; }); }; From 93e089332c9a69649098edb781232af773c2c3c3 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Fri, 12 Jun 2020 11:17:41 -0500 Subject: [PATCH 05/87] fix issue with internal reference --- .../packages/server/src/controllers/import.ts | 212 +++++++++--------- 1 file changed, 111 insertions(+), 101 deletions(-) diff --git a/Composer/packages/server/src/controllers/import.ts b/Composer/packages/server/src/controllers/import.ts index 34951eda11..e2d04e1a8e 100644 --- a/Composer/packages/server/src/controllers/import.ts +++ b/Composer/packages/server/src/controllers/import.ts @@ -14,12 +14,18 @@ import { LocalDiskStorage } from '../models/storage/localDiskStorage'; const TMP_DIR = '/tmp'; +export interface FileRef { + filename: string; + fullpath: string; + path: string; + content: string; +} + export const ImportController = { - import: async (req, res) => { + import: async function (req, res) { const user = await PluginLoader.getUserFromRequest(req); const projectId = req.params.projectId; const currentProject = await BotProjectService.getProjectById(projectId, user); - currentProject; // get URL or package name const packageName = req.query.package || req.body.package; @@ -27,126 +33,130 @@ export const ImportController = { if (packageName) { try { - const files = await importRemoteAsset(currentProject, packageName, version); + const files = await ImportController.importRemoteAsset(currentProject, packageName, version); return res.json(files); } catch (err) { + console.error('Error in import', err); return res.status(500).json(err); } } else { res.status(500).json({ message: 'Please specify a package name or git url to import' }); } }, -}; + importRemoteAsset: async function (currentProject, packageName, version): Promise { + console.log('Fetching package', packageName); + const files = await ImportController.fetchAndExtract(packageName, version); + console.log(`Got ${files.length} files`); + if (files.length) { + // copy declarative files into this project's imported dialogs folder + if (!currentProject.fileStorage.exists(path.join(currentProject.dataDir, 'importedDialogs', packageName))) { + await currentProject.fileStorage.mkDir(path.join(currentProject.dataDir, 'importedDialogs', packageName), { + recursive: true, + }); + } -const importRemoteAsset = async (currentProject, packageName, version) => { - const files = await fetchAndExtract(packageName, version); + for (let f = 0; f < files.length; f++) { + const file = files[f]; + await currentProject.fileStorage.mkDir( + path.join(currentProject.dataDir, 'importedDialogs', packageName, file.path), + { + recursive: true, + } + ); - if (files.length) { - // copy declarative files into this project's imported dialogs folder - if (!currentProject.fileStorage.exists(path.join(currentProject.dataDir, 'importedDialogs', packageName))) { - await currentProject.fileStorage.mkDir(path.join(currentProject.dataDir, 'importedDialogs', packageName), { - recursive: true, - }); + // process some files?? + // * rename common.lg to something else + // * rename dialogs into namespace? + // * update references to renamed dialogs, lu and LG files + // * if schema included, rebuild schema + // * add an import statement for new common.lg into main common.lg? + // ^^ for an LG library, this would be helpful - but not necessary for all LG files + + // write all the files into a subfolder of importedDialogs/ + await currentProject.fileStorage.writeFile( + path.join(currentProject.dataDir, 'importedDialogs', packageName, file.filename), + file.content + ); + } } - for (let f = 0; f < files.length; f++) { - const file = files[f]; - await currentProject.fileStorage.mkDir( - path.join(currentProject.dataDir, 'importedDialogs', packageName, file.path), - { - recursive: true, - } - ); - - // process some files?? - // * rename common.lg to something else - // * rename dialogs into namespace? - // * update references to renamed dialogs, lu and LG files - // * if schema included, rebuild schema - // * add an import statement for new common.lg into main common.lg? - // ^^ for an LG library, this would be helpful - but not necessary for all LG files - - await currentProject.fileStorage.writeFile( - path.join(currentProject.dataDir, 'importedDialogs', packageName, file.filename), - file.content - ); - } - } + return files; + }, + fetchAndExtract: async function (uri, version): Promise { + // process package as an npm module. + + const filterFiles = async () => { + const patterns: string[] = [ + '**/*.dialog', + '**/*.lg', + '**/*.lu', + 'manifests/*.json', + '!(generated/**)', + '!(runtime/**)', + ]; + const ldfs = new LocalDiskStorage(); + const files = await ldfs.glob(patterns, path.join(TMP_DIR, uri)); + + const results = files.map((f) => { + return { + filename: f, + fullpath: path.join(TMP_DIR, uri, f), + path: path.dirname(path.join(f)), + content: fs.readFileSync(path.join(TMP_DIR, uri, f), 'utf8'), + }; + }); - return files; -}; + // clean up temporary files. + ldfs.rmrfDir(path.join(TMP_DIR, uri)); -const fetchAndExtract = async ( - uri, - version -): Promise<{ filename: string; fullpath: string; path: string; content: string }[]> => { - // process package as an npm module. - - const filterFiles = async () => { - const patterns: string[] = [ - '**/*.dialog', - '**/*.lg', - '**/*.lu', - 'manifests/*.json', - '!(generated/**)', - '!(runtime/**)', - ]; - const ldfs = new LocalDiskStorage(); - const files = await ldfs.glob(patterns, path.join(TMP_DIR, uri)); - - return files.map((f) => { - return { - filename: f, - fullpath: path.join(TMP_DIR, uri, f), - path: path.dirname(path.join(f)), - content: fs.readFileSync(path.join(TMP_DIR, uri, f), 'utf8'), - }; - }); - }; + return results; + }; - return new Promise(async (resolve, reject) => { - let type = 'npm'; + return new Promise(async (resolve, reject) => { + let type = 'npm'; - // github packages are in the form of user/repo and potentially #version - if (uri.match(/\//)) { - type = 'github'; - } + // github packages are in the form of user/repo and potentially #version + if (uri.match(/\//)) { + type = 'github'; + } + + if (!version) { + switch (type) { + case 'npm': + version = 'latest'; + break; + case 'github': + version = 'master'; + break; + } + } + + let stream; - if (!version) { switch (type) { case 'npm': - version = 'latest'; + console.log(`Fetching with NPM`); + // download and extract the files from Npm + await downloadNpmPackage({ + arg: `${uri}@${version}`, + dir: TMP_DIR, + }); + resolve(await filterFiles()); break; case 'github': - version = 'master'; + console.log(`Fetching from Github`); + stream = await axios({ + method: 'get', + url: `https://github.com/${uri}/archive/${version}.zip`, + responseType: 'stream', + }); + stream.data.pipe( + unzipper.Extract({ path: path.join(TMP_DIR, uri) }).on('close', async () => { + resolve(await filterFiles()); + }) + ); break; } - } - - let stream; - - switch (type) { - case 'npm': - // download and extract the files from Npm - await downloadNpmPackage({ - arg: `${uri}@${version}`, - dir: TMP_DIR, - }); - resolve(await filterFiles()); - break; - case 'github': - stream = await axios({ - method: 'get', - url: `https://github.com/${uri}/archive/${version}.zip`, - responseType: 'stream', - }); - stream.data.pipe( - unzipper.Extract({ path: path.join(TMP_DIR, uri) }).on('close', async () => { - console.log('EXTRACTED GITHUB ZIP FILE!!'); - resolve(await filterFiles()); - }) - ); - break; - } - }); + }); + }, }; From 945f3cba8e98660b87bc8e1bdc1f591ba6cb0a61 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Fri, 12 Jun 2020 11:35:52 -0500 Subject: [PATCH 06/87] add support for nuget packages --- .../packages/server/src/controllers/import.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Composer/packages/server/src/controllers/import.ts b/Composer/packages/server/src/controllers/import.ts index e2d04e1a8e..1e569c0024 100644 --- a/Composer/packages/server/src/controllers/import.ts +++ b/Composer/packages/server/src/controllers/import.ts @@ -119,6 +119,9 @@ export const ImportController = { if (uri.match(/\//)) { type = 'github'; } + if (uri.match(/\./)) { + type = 'nuget'; + } if (!version) { switch (type) { @@ -128,6 +131,9 @@ export const ImportController = { case 'github': version = 'master'; break; + case 'nuget': + version = null; + break; } } @@ -156,6 +162,19 @@ export const ImportController = { }) ); break; + case 'nuget': + console.log(`Fetching from Nuget`); + stream = await axios({ + method: 'get', + url: `https://www.nuget.org/api/v2/package/${uri}${version ? `/${version}` : ''}`, + responseType: 'stream', + }); + stream.data.pipe( + unzipper.Extract({ path: path.join(TMP_DIR, uri) }).on('close', async () => { + resolve(await filterFiles()); + }) + ); + break; } }); }, From 09d63c0ca5b3a9580180f608b535be72223fc917 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Mon, 22 Jun 2020 10:45:31 -0500 Subject: [PATCH 07/87] new deps --- .../packages/server/src/controllers/import.ts | 2 +- Composer/yarn.lock | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Composer/packages/server/src/controllers/import.ts b/Composer/packages/server/src/controllers/import.ts index 1e569c0024..0f103da364 100644 --- a/Composer/packages/server/src/controllers/import.ts +++ b/Composer/packages/server/src/controllers/import.ts @@ -66,7 +66,7 @@ export const ImportController = { // process some files?? // * rename common.lg to something else - // * rename dialogs into namespace? + // * rename dialogs into namespace? use the root dialog as basename? // * update references to renamed dialogs, lu and LG files // * if schema included, rebuild schema // * add an import statement for new common.lg into main common.lg? diff --git a/Composer/yarn.lock b/Composer/yarn.lock index fce99312e3..90e6a6fe1d 100644 --- a/Composer/yarn.lock +++ b/Composer/yarn.lock @@ -5542,6 +5542,14 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== +binary@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + bl@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" @@ -5905,6 +5913,11 @@ buffer@^5.5.0: base64-js "^1.0.2" ieee754 "^1.1.4" +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= + builder-util-runtime@8.6.2: version "8.6.2" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.6.2.tgz#8270e15b012d8d3b110f3e327b0fd8b0e07b1686" @@ -6184,6 +6197,13 @@ ccount@^1.0.3: resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff" integrity sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw== +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= + dependencies: + traverse ">=0.3.0 <0.4" + chalk@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" @@ -18262,6 +18282,11 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= + tree-kill@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" @@ -18661,6 +18686,14 @@ unzip-response@^2.0.1: resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= +unzip-stream@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/unzip-stream/-/unzip-stream-0.3.0.tgz#c30c054cd6b0d64b13a23cd3ece911eb0b2b52d8" + integrity sha512-NG1h/MdGIX3HzyqMjyj1laBCmlPYhcO4xEy7gEqqzGiSLw7XqDQCnY4nYSn5XSaH8mQ6TFkaujrO8d/PIZN85A== + dependencies: + binary "^0.3.0" + mkdirp "^0.5.1" + upath@^1.1.0, upath@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" From 584f77e9196ab8289db0da5ae0ac2e729040f2a4 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Wed, 15 Jul 2020 17:48:00 -0500 Subject: [PATCH 08/87] semi-functional UI for importing assets from the web, some error checking, exciting stuff --- Composer/packages/client/src/constants.ts | 1 + .../client/src/pages/library/Library.tsx | 52 +++++++++-- .../client/src/pages/library/importDialog.tsx | 1 + .../client/src/pages/library/libraryList.tsx | 92 +++++++++++++------ .../client/src/pages/library/styles.ts | 5 + .../client/src/pages/library/workingModal.tsx | 33 +++++++ .../client/src/store/action/import.ts | 8 +- Composer/packages/client/src/store/index.tsx | 4 +- .../src/store/persistence/FilePersistence.ts | 1 + .../client/src/store/reducer/index.ts | 26 ++++++ Composer/packages/client/src/store/types.ts | 7 ++ .../packages/server/src/controllers/import.ts | 60 +++++++++--- 12 files changed, 237 insertions(+), 53 deletions(-) create mode 100644 Composer/packages/client/src/pages/library/workingModal.tsx diff --git a/Composer/packages/client/src/constants.ts b/Composer/packages/client/src/constants.ts index 6d7678db23..9c108099bb 100644 --- a/Composer/packages/client/src/constants.ts +++ b/Composer/packages/client/src/constants.ts @@ -106,6 +106,7 @@ export enum ActionTypes { SET_CUSTOM_RUNTIME_TOGGLE = 'SET_CUSTOM_RUNTIME_TOGGLE', SET_RUNTIME_FIELD = 'SET_RUNTIME_FIELD', GET_BOILERPLATE_SUCCESS = 'GET_BOILERPLATE_SUCCESS', + IMPORT_SUCCESS = 'IMPORT_SUCCESS', } export const Tips = { diff --git a/Composer/packages/client/src/pages/library/Library.tsx b/Composer/packages/client/src/pages/library/Library.tsx index ea7050b7a3..691704724b 100644 --- a/Composer/packages/client/src/pages/library/Library.tsx +++ b/Composer/packages/client/src/pages/library/Library.tsx @@ -10,10 +10,13 @@ import { Dialog, DialogType } from 'office-ui-fabric-react/lib/Dialog'; import { StoreContext } from '../../store'; import { ToolBar, IToolBarItem } from '../../components/ToolBar'; +import { LibraryRef } from '../../store/types'; +import { OpenConfirmModal } from '../../components/Modal/ConfirmDialog'; import { ContentHeaderStyle, HeaderText, ContentStyle, contentEditor } from './styles'; import { ImportDialog } from './importDialog'; -import { LibraryList, LibraryItem } from './libraryList'; +import { LibraryList } from './libraryList'; +import { WorkingModal } from './workingModal'; interface LibraryPageProps extends RouteComponentProps<{}> { targetName?: string; @@ -22,14 +25,15 @@ interface LibraryPageProps extends RouteComponentProps<{}> { const Library: React.FC = (props) => { const { state, actions } = useContext(StoreContext); const { settings } = state; - const [items, setItems] = useState([]); + const [items, setItems] = useState([]); + const [selectedItem, setSelectedItem] = useState(); + const [working, setWorking] = useState(false); const [addDialogHidden, setAddDialogHidden] = useState(true); - props; - useEffect(() => { - setItems([{ name: 'foo-library', lastImported: new Date(), url: 'http://foo.goo' }]); - }, [settings]); + setItems(settings.importedLibraries || []); + }, [settings.importedLibraries]); + const toolbarItems: IToolBarItem[] = [ { type: 'action', @@ -51,7 +55,36 @@ const Library: React.FC = (props) => { }; const importFromWeb = async (packageName, version) => { - await actions.importLibrary(packageName, version); + console.log('IMPORT FROM WEB', packageName); + // TODO: check to see if package already exists in this project + const existing = settings.importedLibraries?.find((l) => l.name === packageName); + let okToProceed = true; + if (existing) { + const title = formatMessage('Update Library'); + const msg = formatMessage( + 'Any changes you made to this library will be lost! Are you sure you want to continue?' + ); + okToProceed = (await OpenConfirmModal(title, msg)) ? true : false; + } + + if (okToProceed) { + closeDialog(); + setWorking(true); + await actions.importLibrary(packageName, version); + setWorking(false); + } + }; + + const redownload = async () => { + return importFromWeb(selectedItem?.name, selectedItem?.version); + }; + + const selectItem = (item: LibraryRef | null) => { + if (item) { + setSelectedItem(item); + } else { + setSelectedItem(undefined); + } }; return ( @@ -65,6 +98,7 @@ const Library: React.FC = (props) => { > +