diff --git a/Composer/packages/lib/shared/src/types/indexers.ts b/Composer/packages/lib/shared/src/types/indexers.ts index 18803f149c..cd8a68b2a1 100644 --- a/Composer/packages/lib/shared/src/types/indexers.ts +++ b/Composer/packages/lib/shared/src/types/indexers.ts @@ -14,6 +14,7 @@ export enum FileExtensions { Lg = '.lg', Qna = '.qna', Setting = 'appsettings.json', + FormDialogSchema = '.form-dialog', } export interface FileInfo { diff --git a/Composer/packages/server/package.json b/Composer/packages/server/package.json index 17163b7924..c2c4ac3b26 100644 --- a/Composer/packages/server/package.json +++ b/Composer/packages/server/package.json @@ -62,6 +62,7 @@ "@bfc/plugin-loader": "*", "@bfc/shared": "*", "@microsoft/bf-dispatcher": "^4.10.0-preview.141651", + "@microsoft/bf-generate-library": "^4.10.0-daily.20200827.161452", "@microsoft/bf-lu": "^4.10.0-dev.20200808.5a7c973", "archiver": "^3.0.0", "axios": "^0.19.2", @@ -99,4 +100,4 @@ "resolutions": { "bl": "^2.2.1" } -} \ No newline at end of file +} diff --git a/Composer/packages/server/src/controllers/formDialog.ts b/Composer/packages/server/src/controllers/formDialog.ts new file mode 100644 index 0000000000..484987aaa7 --- /dev/null +++ b/Composer/packages/server/src/controllers/formDialog.ts @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { Request, Response } from 'express'; +import { PluginLoader } from '@bfc/plugin-loader'; +import { schemas, expandPropertyDefinition } from '@microsoft/bf-generate-library'; + +import { BotProjectService } from '../services/project'; + +const expandJsonSchemaProperty = async (req: Request, res: Response) => { + const { propertyName, schema } = req.body; + const result = await expandPropertyDefinition(propertyName, schema); + + if (result !== undefined) { + res.status(200).json(result); + } else { + res.status(404).json({ + message: 'Failed to get form dialog schema/property.', + }); + } +}; + +const getTemplateSchemas = async (req: Request, res: Response) => { + const result = await schemas(); + + if (result !== undefined) { + res.status(200).json(result); + } else { + res.status(404).json({ + message: 'Failed to retrieve form dialog template schemas.', + }); + } +}; + +const generate = async (req: Request, res: Response) => { + const projectId = req.params.projectId; + const user = await PluginLoader.getUserFromRequest(req); + + const currentProject = await BotProjectService.getProjectById(projectId, user); + if (currentProject !== undefined) { + const { name } = req.body; + + await currentProject.generateDialog(name); + const updatedProject = await BotProjectService.getProjectById(projectId, user); + res.status(200).json({ id: projectId, ...updatedProject.getProject() }); + } else { + res.status(404).json({ + message: `Could not generate form dialog. Project ${projectId} not found.`, + }); + } +}; + +export const FormDialogController = { + getTemplateSchemas, + generate, + expandJsonSchemaProperty, +}; diff --git a/Composer/packages/server/src/models/bot/botProject.ts b/Composer/packages/server/src/models/bot/botProject.ts index 5968b81df5..c0fd04b492 100644 --- a/Composer/packages/server/src/models/bot/botProject.ts +++ b/Composer/packages/server/src/models/bot/botProject.ts @@ -6,8 +6,9 @@ import fs from 'fs'; import axios from 'axios'; import { autofixReferInDialog } from '@bfc/indexers'; -import { getNewDesigner, FileInfo, Skill, Diagnostic, IBotProject, DialogSetting } from '@bfc/shared'; +import { getNewDesigner, FileInfo, Skill, Diagnostic, IBotProject, DialogSetting, FileExtensions } from '@bfc/shared'; import { UserIdentity, pluginLoader } from '@bfc/plugin-loader'; +import { FeedbackType, generate } from '@microsoft/bf-generate-library'; import { Path } from '../../utility/path'; import { copyDir } from '../../utility/storage'; @@ -488,6 +489,56 @@ export class BotProject implements IBotProject { return qnaEndpointKey; }; + public async generateDialog(name: string) { + const defaultLocale = this.settings?.defaultLanguage || defaultLanguage; + const relativePath = defaultFilePath(this.name, defaultLocale, `${name}${FileExtensions.FormDialogSchema}`); + const schemaPath = Path.resolve(this.dir, relativePath); + + const dialogPath = defaultFilePath(this.name, defaultLocale, `${name}${FileExtensions.Dialog}`); + const outDir = Path.dirname(Path.resolve(this.dir, dialogPath)); + + const feedback = (type: FeedbackType, message: string): void => { + // eslint-disable-next-line no-console + console.log(`${type} - ${message}`); + }; + + const generateParams = { + schemaPath, + prefix: name, + outDir, + metaSchema: undefined, + allLocales: undefined, + templateDirs: [], + force: false, + merge: true, + singleton: true, + feedback, + }; + + // schema path = path to the JSON schema file defining the form data + // prefix - the dialog name to prefix on generated assets + // outDir - the directory where the dialog assets will be saved + // metaSchema - deprecated + // allLocales - the additional locales for which to generate assets + // templateDirs - paths to directories containing customized templates + // force - if assets are overwritten causing any user customizations to be lost + // merge - if generated assets should be merged with any user customized assets + // singleton - if the generated assets should be merged into a single dialog + // feeback - a callback for status and progress and generation happens + await generate( + generateParams.schemaPath, + generateParams.prefix, + generateParams.outDir, + generateParams.metaSchema, + generateParams.allLocales, + generateParams.templateDirs, + generateParams.force, + generateParams.merge, + generateParams.singleton, + generateParams.feedback + ); + } + private async removeLocalRuntimeData(projectId) { const method = 'localpublish'; if (pluginLoader.extensions.publish[method]?.methods?.stopBot) { diff --git a/Composer/packages/server/src/models/bot/botStructure.ts b/Composer/packages/server/src/models/bot/botStructure.ts index 319c93ac87..02d0e0eb82 100644 --- a/Composer/packages/server/src/models/bot/botStructure.ts +++ b/Composer/packages/server/src/models/bot/botStructure.ts @@ -24,6 +24,7 @@ const BotStructureTemplate = { qna: 'dialogs/${DIALOGNAME}/knowledge-base/en-us/${DIALOGNAME}.en-us.qna', dialogSchema: 'dialogs/${DIALOGNAME}/${DIALOGNAME}.dialog.schema', }, + formDialogs: 'form-dialogs/${FORMDIALOGNAME}', skillManifests: 'manifests/${MANIFESTFILENAME}', }; @@ -52,13 +53,19 @@ export const defaultFilePath = (botName: string, defaultLocale: string, filename const LOCALE = locale; // 1. Even appsettings.json hit FileExtensions.Manifest, but it never use this do created. - // 2. When exprot bot as a skill, name is `EchoBot-4-2-1-preview-1-manifest.json` + // 2. When export bot as a skill, name is `EchoBot-4-2-1-preview-1-manifest.json` if (fileType === FileExtensions.Manifest) { return templateInterpolate(BotStructureTemplate.skillManifests, { MANIFESTFILENAME: filename, }); } + if (fileType === FileExtensions.FormDialogSchema) { + return templateInterpolate(BotStructureTemplate.formDialogs, { + FORMDIALOGNAME: filename, + }); + } + // common.lg if (fileId === CommonFileId && fileType === FileExtensions.Lg) { return templateInterpolate(BotStructureTemplate.common.lg, { diff --git a/Composer/packages/server/src/router/api.ts b/Composer/packages/server/src/router/api.ts index ae74c4c568..fdc6d542d7 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 { FormDialogController } from '../controllers/formDialog'; import * as PluginsController from '../controllers/plugins'; import { UtilitiesController } from './../controllers/utilities'; @@ -31,6 +32,11 @@ router.post('/projects/:projectId/qnaSettings/set', ProjectController.setQnASett router.post('/projects/:projectId/project/saveAs', ProjectController.saveProjectAs); router.get('/projects/:projectId/export', ProjectController.exportProject); +// form dialog generation apis +router.post('/formDialogs/expandJsonSchemaProperty', FormDialogController.expandJsonSchemaProperty); +router.get('/formDialogs/templateSchemas', FormDialogController.getTemplateSchemas); +router.post('/formDialogs/:projectId/generate', FormDialogController.generate); + // update the boilerplate content router.get('/projects/:projectId/boilerplateVersion', ProjectController.checkBoilerplateVersion); router.post('/projects/:projectId/updateBoilerplate', ProjectController.updateBoilerplate); diff --git a/Composer/yarn.lock b/Composer/yarn.lock index 9848d874ae..73fca233f7 100644 --- a/Composer/yarn.lock +++ b/Composer/yarn.lock @@ -2955,6 +2955,24 @@ argparse "~1.0.10" tslib "^1.10.0" +"@microsoft/bf-generate-library@^4.10.0-daily.20200827.161452": + version "4.10.0-daily.20200827.161452" + resolved "https://botbuilder.myget.org/F/botframework-cli/npm/@microsoft/bf-generate-library/-/@microsoft/bf-generate-library-4.10.0-daily.20200827.161452.tgz#b2c2552e61da31fbc400fe6bc0a48efb04f0e942" + integrity sha1-ssJVLmHaMfvEAP5rwKSO+wTw6UI= + dependencies: + "@microsoft/bf-lu" "^4.10.0-preview.148066" + adaptive-expressions "^4.10.0-preview-150886" + ajv "^6.9.1" + botbuilder-lg "^4.10.0-preview.150886" + clone "^2.1.2" + fs-extra "^8.1.0" + globby "^11.0.1" + json-schema-merge-allof "^0.6.0" + json-schema-ref-parser "^7.1.0" + openapi-types "^1.3.5" + seedrandom "~3.0.5" + swagger-parser "^8.0.4" + "@microsoft/bf-lu@4.10.0-preview.141651": version "4.10.0-preview.141651" resolved "https://botbuilder.myget.org/F/botframework-cli/npm/@microsoft/bf-lu/-/@microsoft/bf-lu-4.10.0-preview.141651.tgz#29ed2af803d23ee760354913f5b814873bc1285c" @@ -3003,6 +3021,30 @@ semver "^5.5.1" tslib "^1.10.0" +"@microsoft/bf-lu@^4.10.0-preview.148066": + version "4.10.1" + resolved "https://botbuilder.myget.org/F/botframework-cli/npm/@microsoft/bf-lu/-/@microsoft/bf-lu-4.10.1.tgz#ac4cbbde522d6b7f163e781e9976c8af0ef0833a" + integrity sha1-rEy73lIta38WPngemXbIrw7wgzo= + dependencies: + "@azure/cognitiveservices-luis-authoring" "4.0.0-preview.1" + "@azure/ms-rest-azure-js" "2.0.1" + "@oclif/command" "~1.5.19" + "@oclif/errors" "~1.2.2" + "@types/node-fetch" "~2.5.5" + antlr4 "^4.7.2" + chalk "2.4.1" + console-stream "^0.1.1" + deep-equal "^1.0.1" + delay "^4.3.0" + fs-extra "^8.1.0" + get-stdin "^6.0.0" + globby "^10.0.1" + intercept-stdout "^0.1.2" + lodash "^4.17.19" + node-fetch "~2.6.0" + semver "^5.5.1" + tslib "^1.10.0" + "@microsoft/load-themed-styles@^1.10.26": version "1.10.39" resolved "https://registry.yarnpkg.com/@microsoft/load-themed-styles/-/load-themed-styles-1.10.39.tgz#23024bfa264a01ab2f05a9fda9c97c1f90ef80d8" @@ -4442,6 +4484,25 @@ adaptive-expressions@4.10.0-preview-150886: moment "^2.25.1" moment-timezone "^0.5.28" +adaptive-expressions@4.10.1, adaptive-expressions@^4.10.0-preview-150886: + version "4.10.1" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/adaptive-expressions/-/adaptive-expressions-4.10.1.tgz#11308cd3aff402dc454dfaaa8d2af0ea3812554e" + integrity sha1-ETCM06/0AtxFTfqqjSrw6jgSVU4= + dependencies: + "@microsoft/recognizers-text-data-types-timex-expression" "1.1.4" + "@types/atob-lite" "^2.0.0" + "@types/lru-cache" "^5.1.0" + "@types/moment-timezone" "^0.5.13" + "@types/xmldom" "^0.1.29" + antlr4ts "0.5.0-alpha.3" + atob-lite "^2.0.0" + big-integer "^1.6.48" + jspath "^0.4.0" + lodash "^4.17.19" + lru-cache "^5.1.1" + moment "^2.25.1" + moment-timezone "^0.5.28" + address@1.0.3, address@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" @@ -5543,6 +5604,17 @@ botbuilder-lg@^4.10.0-preview-150886: path "^0.12.7" uuid "^3.4.0" +botbuilder-lg@^4.10.0-preview.150886: + version "4.10.1" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botbuilder-lg/-/botbuilder-lg-4.10.1.tgz#fb74d81fa32fb9bc07bfe58aea58d06052681134" + integrity sha1-+3TYH6MvubwHv+WK6ljQYFJoETQ= + dependencies: + adaptive-expressions "4.10.1" + antlr4ts "0.5.0-alpha.3" + lodash "^4.17.19" + path "^0.12.7" + uuid "^3.4.0" + boxen@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" @@ -6405,6 +6477,11 @@ clone-response@1.0.2, clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +clone@^2.1.2: + version "2.1.2" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + cls-hooked@^4.2.2: version "4.2.2" resolved "https://botbuilder.myget.org/F/botbuilder-declarative/npm/cls-hooked/-/cls-hooked-4.2.2.tgz#ad2e9a4092680cdaffeb2d3551da0e225eae1908" @@ -6527,7 +6604,7 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.18.0, commander@^2.20.0, commander@~2.20.3: +commander@^2.18.0, commander@^2.20.0, commander@^2.7.1, commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -6582,6 +6659,25 @@ compression@^1.7.4: safe-buffer "5.1.2" vary "~1.1.2" +compute-gcd@^1.2.0: + version "1.2.0" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/compute-gcd/-/compute-gcd-1.2.0.tgz#fc1ede5b65001e950226502f46543863e4fea10e" + integrity sha1-/B7eW2UAHpUCJlAvRlQ4Y+T+oQ4= + dependencies: + validate.io-array "^1.0.3" + validate.io-function "^1.0.2" + validate.io-integer-array "^1.0.0" + +compute-lcm@^1.1.0: + version "1.1.0" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/compute-lcm/-/compute-lcm-1.1.0.tgz#abd96d040b41b0a166f89944b5c8b7c511e21ad5" + integrity sha1-q9ltBAtBsKFm+JlEtci3xRHiGtU= + dependencies: + compute-gcd "^1.2.0" + validate.io-array "^1.0.3" + validate.io-function "^1.0.2" + validate.io-integer-array "^1.0.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -8466,8 +8562,8 @@ elegant-spinner@^1.0.1: elliptic@^6.0.0, elliptic@^6.5.3: version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha1-y1nrLv2vc6C9eMzXAVpirW4Pk9Y= dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -12214,6 +12310,13 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-schema-compare@^0.2.2: + version "0.2.2" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/json-schema-compare/-/json-schema-compare-0.2.2.tgz#dd601508335a90c7f4cfadb6b2e397225c908e56" + integrity sha1-3WAVCDNakMf0z622suOXIlyQjlY= + dependencies: + lodash "^4.17.4" + json-schema-defaults@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema-defaults/-/json-schema-defaults-0.4.0.tgz#b63ee7e7aa83f29b54cb31d31ecddeb056c3306c" @@ -12221,6 +12324,24 @@ json-schema-defaults@^0.4.0: dependencies: argparse "^1.0.9" +json-schema-merge-allof@^0.6.0: + version "0.6.0" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz#64d48820fec26b228db837475ce3338936bf59a5" + integrity sha1-ZNSIIP7CayKNuDdHXOMziTa/WaU= + dependencies: + compute-lcm "^1.1.0" + json-schema-compare "^0.2.2" + lodash "^4.17.4" + +json-schema-ref-parser@^7.1.0, json-schema-ref-parser@^7.1.3: + version "7.1.4" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/json-schema-ref-parser/-/json-schema-ref-parser-7.1.4.tgz#abb3f2613911e9060dc2268477b40591753facf0" + integrity sha1-q7PyYTkR6QYNwiaEd7QFkXU/rPA= + dependencies: + call-me-maybe "^1.0.1" + js-yaml "^3.13.1" + ono "^6.0.0" + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -12415,8 +12536,8 @@ killable@^1.0.1: kind-of@^2.0.1, kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0, kind-of@^4.0.0, kind-of@^5.0.0, kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0= kleur@^3.0.2: version "3.0.2" @@ -12840,8 +12961,8 @@ lodash.uniq@^4.5.0: "lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI= log-driver@^1.2.7: version "1.2.7" @@ -13361,8 +13482,8 @@ mixin-object@^2.0.1: 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" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8= dependencies: minimist "^1.2.5" @@ -14039,6 +14160,11 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +ono@^6.0.0: + version "6.0.1" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ono/-/ono-6.0.1.tgz#1bc14ffb8af1e5db3f7397f75b88e4a2d64bbd71" + integrity sha1-G8FP+4rx5ds/c5f3W4jkotZLvXE= + open@^7.0.3: version "7.0.3" resolved "https://botbuilder.myget.org/F/botframework-cli/npm/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48" @@ -14047,6 +14173,16 @@ open@^7.0.3: is-docker "^2.0.0" is-wsl "^2.1.1" +openapi-schemas@^1.0.2: + version "1.0.3" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/openapi-schemas/-/openapi-schemas-1.0.3.tgz#0fa2f19e44ce8a1cdab9c9f616df4babe1aa026b" + integrity sha1-D6LxnkTOihzaucn2Ft9Lq+GqAms= + +openapi-types@^1.3.5: + version "1.3.5" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/openapi-types/-/openapi-types-1.3.5.tgz#6718cfbc857fe6c6f1471f65b32bdebb9c10ce40" + integrity sha1-ZxjPvIV/5sbxRx9lsyveu5wQzkA= + opener@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" @@ -16730,6 +16866,11 @@ schema-utils@^2.6.6: ajv "^6.12.2" ajv-keywords "^3.4.1" +seedrandom@~3.0.5: + version "3.0.5" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha1-VO3IXJUiJSWwx6b2s1Q9jgs6oKc= + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -16881,8 +17022,8 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: set-value@^0.4.3, set-value@^2.0.0, set-value@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-3.0.2.tgz#74e8ecd023c33d0f77199d415409a40f21e61b90" - integrity sha512-npjkVoz+ank0zjlV9F47Fdbjfj/PfXyVhZvGALWsyIYU/qrMzpi6avjKW3/7KeSU2Df3I46BrN1xOI1+6vW0hA== + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/set-value/-/set-value-3.0.2.tgz#74e8ecd023c33d0f77199d415409a40f21e61b90" + integrity sha1-dOjs0CPDPQ93GZ1BVAmkDyHmG5A= dependencies: is-plain-object "^2.0.4" @@ -17791,6 +17932,24 @@ svgo@^1.1.1: unquote "~1.1.1" util.promisify "~1.0.0" +swagger-methods@^2.0.1: + version "2.0.2" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/swagger-methods/-/swagger-methods-2.0.2.tgz#5891d5536e54d5ba8e7ae1007acc9170f41c9590" + integrity sha1-WJHVU25U1bqOeuEAesyRcPQclZA= + +swagger-parser@^8.0.4: + version "8.0.4" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/swagger-parser/-/swagger-parser-8.0.4.tgz#ddec68723d13ee3748dd08fd5b7ba579327595da" + integrity sha1-3exocj0T7jdI3Qj9W3uleTJ1ldo= + dependencies: + call-me-maybe "^1.0.1" + json-schema-ref-parser "^7.1.3" + ono "^6.0.0" + openapi-schemas "^1.0.2" + openapi-types "^1.3.5" + swagger-methods "^2.0.1" + z-schema "^4.2.2" + symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -18742,6 +18901,41 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate.io-array@^1.0.3: + version "1.0.6" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" + integrity sha1-W1osr9j4uFq7L4hroVPy2Tond00= + +validate.io-function@^1.0.2: + version "1.0.2" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7" + integrity sha1-NDoZgC7TsZaCaceA5VjpNBHAutc= + +validate.io-integer-array@^1.0.0: + version "1.0.0" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz#2cabde033293a6bcbe063feafe91eaf46b13a089" + integrity sha1-LKveAzKTpry+Bj/q/pHq9GsToIk= + dependencies: + validate.io-array "^1.0.3" + validate.io-integer "^1.0.4" + +validate.io-integer@^1.0.4: + version "1.0.5" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068" + integrity sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg= + dependencies: + validate.io-number "^1.0.3" + +validate.io-number@^1.0.3: + version "1.0.3" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8" + integrity sha1-9j/+2iSL8opnqNSODjtGGhZluvg= + +validator@^12.0.0: + version "12.2.0" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/validator/-/validator-12.2.0.tgz#660d47e96267033fd070096c3b1a6f2db4380a0a" + integrity sha1-Zg1H6WJnAz/QcAlsOxpvLbQ4Cgo= + validator@~9.4.1: version "9.4.1" resolved "https://registry.yarnpkg.com/validator/-/validator-9.4.1.tgz#abf466d398b561cd243050112c6ff1de6cc12663" @@ -19724,6 +19918,17 @@ yup@^0.26.10: synchronous-promise "^2.0.5" toposort "^2.0.2" +z-schema@^4.2.2: + version "4.2.3" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/z-schema/-/z-schema-4.2.3.tgz#85f7eea7e6d4fe59a483462a98f511bd78fe9882" + integrity sha1-hffup+bU/lmkg0YqmPURvXj+mII= + dependencies: + lodash.get "^4.4.2" + lodash.isequal "^4.5.0" + validator "^12.0.0" + optionalDependencies: + commander "^2.7.1" + zip-stream@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.0.1.tgz#48a062488afe91dda42f823700fae589753ccd34"