From 98653364f688cec8df70f4db9ae0915c88e68f75 Mon Sep 17 00:00:00 2001 From: "Geoff Cox (Microsoft)" Date: Thu, 10 Sep 2020 09:55:45 -0700 Subject: [PATCH 01/44] feat: Added form dialog generation controller (#4037) * Added form dialog generation controller * Improved project not found error message. * PR fixes * Added generate comments --- .../packages/lib/shared/src/types/indexers.ts | 1 + Composer/packages/server/package.json | 3 +- .../server/src/controllers/formDialog.ts | 57 +++++ .../server/src/models/bot/botProject.ts | 53 +++- .../server/src/models/bot/botStructure.ts | 9 +- Composer/packages/server/src/router/api.ts | 6 + Composer/yarn.lock | 227 +++++++++++++++++- 7 files changed, 342 insertions(+), 14 deletions(-) create mode 100644 Composer/packages/server/src/controllers/formDialog.ts 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" From 9f19a7a83241e0d6bf317015ea3a3c61c99b5a25 Mon Sep 17 00:00:00 2001 From: "Geoff Cox (Microsoft)" Date: Thu, 10 Sep 2020 14:07:55 -0700 Subject: [PATCH 02/44] chore: Updated owners for PRs (#4083) * Updated owners for PRs * Update CODEOWNERS Co-authored-by: Chris Whitten --- .github/CODEOWNERS | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8a15b50af0..0ad65c962e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,8 +4,6 @@ /runtime/ @boydc2014 @luhan2017 @carlosscastro @benbrown -/Composer/ @cwhitten @boydc2014 @a-b-r-o-w-n @corinagum @beyackle @srinaath @tonyanziano +/Composer/ @cwhitten @boydc2014 @a-b-r-o-w-n @beyackle @srinaath @tonyanziano @geoffcoxmsft @hatpick -/Composer/packages/extensions/visual-designer @yeze322 @cwhitten @boydc2014 @a-b-r-o-w-n - -/docs/ @cwhitten @boydc2014 @benbrown +/docs/ @cwhitten @boydc2014 @benbrown @geoffcoxmsft From 8a5ee1a079a061bd2fda54cd5cb0a53b18905220 Mon Sep 17 00:00:00 2001 From: Lu Han <32191031+luhan2017@users.noreply.github.com> Date: Fri, 11 Sep 2020 05:46:08 +0800 Subject: [PATCH 03/44] Handle endpoint empty (#4076) Co-authored-by: Chris Whitten --- runtime/dotnet/core/ComposerSettingsExtensions.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/runtime/dotnet/core/ComposerSettingsExtensions.cs b/runtime/dotnet/core/ComposerSettingsExtensions.cs index d23684f15b..d827eaf60b 100644 --- a/runtime/dotnet/core/ComposerSettingsExtensions.cs +++ b/runtime/dotnet/core/ComposerSettingsExtensions.cs @@ -28,7 +28,12 @@ public static IConfigurationBuilder UseComposerSettings(this IConfigurationBuild var qnaRegion = configuration.GetValue("qna:qnaRegion") ?? "westus"; var environment = configuration.GetValue("luis:environment") ?? Environment.UserName; var settings = new Dictionary(); - settings["luis:endpoint"] = configuration.GetValue("luis:endpoint") ?? $"https://{luisRegion}.api.cognitive.microsoft.com"; + var luisEndpoint = configuration.GetValue("luis:endpoint"); + if (String.IsNullOrWhiteSpace(luisEndpoint)) + { + luisEndpoint = $"https://{luisRegion}.api.cognitive.microsoft.com"; + } + settings["luis:endpoint"] = luisEndpoint; settings["BotRoot"] = botRoot; builder.AddInMemoryCollection(settings); if (environment == "Development") From 93248fe5791595cc908e12b9bb66bc7a4a76730e Mon Sep 17 00:00:00 2001 From: Andy Brown Date: Thu, 10 Sep 2020 17:55:23 -0700 Subject: [PATCH 04/44] refactor: rename plugins to extensions (#4075) * rename plugins to extensions where it makes sense * move packages out of extensions directory * rename extension to editor-extension * merge editor-extension and extension-client * fix type name * fix up remaining references to extensions directory * rename plugin-loader to extension * Aligned electron remote plugin dir with server remote plugin dir. * Fixed tests. * Typecheck fix Co-authored-by: Tony Anziano --- .github/CODEOWNERS | 2 + Composer/.dockerignore | 1 - Composer/Dockerfile | 6 +- Composer/README.md | 163 ------------------ Composer/TESTING.md | 2 +- Composer/jest.config.js | 8 +- Composer/package.json | 9 +- .../adaptive-flow/.eslintrc.js | 2 +- .../{extensions => }/adaptive-flow/.gitignore | 0 .../AdaptiveFlowEditor.test.tsx | 6 +- .../components/IconMenu.test.tsx | 0 .../components/KeyboardZone.test.tsx | 0 .../constants/ElementAttributes.test.tsx | 0 .../constants/KeyboardCommandTypes.test.ts | 0 .../constants/MenuTypes.test.ts | 0 .../constants/ScreenReaderMessage.test.ts | 0 .../constants/editorConfig.test.ts | 0 .../contexts/NodeRendererContext.test.tsx | 0 .../contexts/SelectionContext.test.tsx | 0 .../hooks/useEditorEventApi.test.ts | 0 .../renderers/EdgeMenu.test.tsx | 0 .../renderers/ElementWrapper.test.tsx | 0 .../renderers/NodeMenu.test.tsx | 0 .../renderers/NodeWrapper.test.tsx | 6 +- .../stubs/ShellApiStub.ts | 0 .../utils/NodeIndexGetter.test.ts | 0 .../utils/calculateRangeSelection.test.ts | 0 .../utils/cursorTracker/index.test.ts | 0 .../utils/cursorTracker/type.test.ts | 0 .../utils/getCustomSchema.test.ts | 0 .../mapKeyboardCommandToEditorEvent.test.ts | 0 .../utils/normalizeSelection.test.ts | 0 .../adaptive/AdaptiveDialog.test.tsx | 0 .../adaptive/AdaptiveTrigger.test.tsx | 0 .../components/ArrowLine.test.tsx | 0 .../components/Diamond.test.tsx | 0 .../components/ElementMeasurer.test.tsx | 0 .../components/FlowEdges.test.tsx | 0 .../components/IconBrick.test.tsx | 0 .../components/LoopIndicator.test.tsx | 0 .../components/OffsetContainer.test.tsx | 0 .../components/SVGContainer.test.tsx | 0 .../configs/builtinSchema.test.ts | 0 .../layouters/baseInputLayouter.test.ts | 0 .../layouters/calculateNodeBoundary.test.ts | 0 .../layouters/foreachLayouter.test.ts | 0 .../layouters/ifelseLayouter.test.ts | 0 .../layouters/measureJsonBoundary.test.ts | 0 .../layouters/sequentialLayouter.test.ts | 0 .../layouters/switchCaseLayouter.test.ts | 0 .../transformers/ObiTypes.test.ts | 0 .../transformers/todoBot.main.json | 0 .../transformers/transformForeach.test.ts | 0 .../transformers/transformIfCondition.test.ts | 0 .../transformers/transformObiRules.test.tsx | 0 .../transformers/transformRootDialog.test.ts | 0 .../transformers/transformStepGroup.test.ts | 0 .../transformSwitchCondition.test.ts | 0 .../utils/DesignerCache.test.ts | 0 .../utils/EdgeUtil.test.tsx | 0 .../utils/widgetRenderer.test.tsx | 2 +- .../widgets/ActionCard.test.tsx | 0 .../widgets/DialogRef.test.tsx | 0 .../widgets/ForeachWidget.test.tsx | 0 .../widgets/IfConditionWidget.test.tsx | 0 .../widgets/PromptWidget.test.tsx | 0 .../widgets/SwitchConditionWidget.test.tsx | 0 .../widgets/icon.test.tsx | 0 .../adaptive-flow/demo/index.html | 0 .../adaptive-flow/demo/readme.md | 0 .../demo/src/components/json-block/index.js | 0 .../adaptive-flow/demo/src/index.css | 0 .../adaptive-flow/demo/src/index.js | 0 .../adaptive-flow/demo/src/samples/index.js | 0 .../demo/src/samples/todo/AddToDo.json | 0 .../demo/src/samples/todo/ClearToDos.json | 0 .../demo/src/samples/todo/DeleteToDo.json | 0 .../demo/src/samples/todo/ShowToDos.json | 0 .../demo/src/samples/todo/ToDoBot.main.json | 0 .../demo/src/stories/EventsEditorDemo.js | 0 .../demo/src/stories/StepEditorDemo.css | 0 .../demo/src/stories/StepEditorDemo.js | 0 .../demo/src/stories/VisualEditorDemo.css | 0 .../demo/src/stories/VisualEditorDemo.js | 0 .../demo/src/stories/VisualSDKDemo.js | 0 .../adaptive-flow/demo/src/stories/story.css | 0 .../adaptive-flow/demo/tsconfig.json | 0 .../adaptive-flow/demo/webpack.config.demo.js | 0 .../adaptive-flow/jest.config.js | 0 .../adaptive-flow/package.json | 2 +- .../AdaptiveFlowEditor.tsx | 2 +- .../components/IconMenu.tsx | 0 .../components/KeyboardZone.ts | 0 .../constants/ElementAttributes.ts | 0 .../constants/KeyboardCommandTypes.ts | 0 .../constants/MenuTypes.ts | 0 .../constants/ScreenReaderMessage.ts | 0 .../constants/editorConfig.ts | 0 .../contexts/NodeRendererContext.ts | 0 .../contexts/SelectionContext.ts | 0 .../contexts/SelfHostContext.ts | 0 .../hooks/useEditorEventApi.ts | 2 +- .../hooks/useFlowUIOptions.ts | 2 +- .../hooks/useSelectionEffect.ts | 0 .../renderers/EdgeMenu/EdgeMenu.tsx | 2 +- .../renderers/EdgeMenu/createSchemaMenu.tsx | 2 +- .../renderers/EdgeMenu/defaultMenuOrder.ts | 0 .../renderers/EdgeMenu/index.tsx | 0 .../renderers/ElementWrapper.tsx | 0 .../renderers/NodeMenu.tsx | 0 .../renderers/NodeWrapper.tsx | 2 +- .../adaptive-flow-editor/renderers/index.tsx | 0 .../utils/NodeIndexGetter.ts | 0 .../utils/calculateRangeSelection.ts | 0 .../utils/cursorTracker/arrowMove.ts | 0 .../calculate/calculateBySchema.ts | 0 .../calculate/calculateByVector.ts | 0 .../utils/cursorTracker/index.ts | 0 .../utils/cursorTracker/locateElement.ts | 0 .../utils/cursorTracker/tabMove.ts | 0 .../utils/cursorTracker/type.ts | 0 .../utils/getCustomSchema.ts | 0 .../utils/mapKeyboardCommandToEditorEvent.ts | 0 .../utils/normalizeSelection.ts | 0 .../utils/scrollNodeIntoView.ts | 0 .../adaptive/AdaptiveDialog.tsx | 2 +- .../adaptive/AdaptiveTrigger.tsx | 0 .../components/ArrowLine.tsx | 0 .../components/Diamond.tsx | 0 .../components/ElementMeasurer.tsx | 0 .../components/FlowEdges.tsx | 0 .../components/IconBrick.tsx | 0 .../components/LoopIndicator.tsx | 0 .../components/OffsetContainer.tsx | 0 .../components/SVGContainer.tsx | 0 .../configs/builtinSchema.tsx | 0 .../configs/builtinWidgets.tsx | 2 +- .../constants/AdaptiveFieldNames.ts | 0 .../constants/AdaptiveKinds.ts | 0 .../constants/ElementColors.ts | 0 .../constants/ElementSizes.ts | 0 .../constants/NodeEventTypes.ts | 0 .../contexts/RendererContext.tsx | 0 .../contexts/SchemaContext.ts | 2 +- .../hooks/useSmartLayout.ts | 0 .../layouters/baseInputLayouter.ts | 0 .../layouters/calculateNodeBoundary.ts | 0 .../layouters/foreachLayouter.ts | 0 .../layouters/ifelseLayouter.ts | 0 .../layouters/measureJsonBoundary.ts | 0 .../layouters/sequentialLayouter.ts | 0 .../layouters/sharedLayouterUtils.ts | 0 .../layouters/switchCaseLayouter.ts | 0 .../adaptive-flow-renderer/models/Boundary.ts | 0 .../adaptive-flow-renderer/models/EdgeData.ts | 0 .../models/GraphLayout.ts | 0 .../models/GraphNode.ts | 0 .../models/IndexedNode.ts | 0 .../transformers/inheritParentProperty.ts | 0 .../transformers/transformBaseInput.ts | 0 .../transformers/transformForeach.ts | 0 .../transformers/transformIfCondition.ts | 0 .../transformers/transformObiRules.ts | 0 .../transformers/transformRootDialog.ts | 0 .../transformers/transformStepGroup.ts | 0 .../transformers/transformSwitchCondition.ts | 0 .../types/PluggableComponents.types.ts | 0 .../types/flowRenderer.types.ts | 0 .../adaptive-flow-renderer/types/nodeProps.ts | 0 .../utils/adaptive/outlineObiJson.ts | 0 .../utils/adaptive/stepBuilder.ts | 0 .../utils/visual/DesignerCache.ts | 0 .../utils/visual/EdgeUtil.tsx | 0 .../utils/visual/WidgetSchemaProvider.ts | 0 .../utils/visual/widgetRenderer.tsx | 2 +- .../widgets/ActionCard/ActionCard.tsx | 0 .../widgets/ActionCard/CardTemplate.tsx | 0 .../widgets/ActionCard/CardTemplateStyle.ts | 0 .../widgets/ActionCard/index.tsx | 0 .../widgets/ActionGroup.tsx | 0 .../widgets/ActionHeader/ActionHeader.tsx | 0 .../widgets/ActionHeader/ActionHeaderStyle.ts | 0 .../widgets/ActionHeader/icon.tsx | 0 .../widgets/ActionHeader/iconStyles.ts | 0 .../widgets/ActionHeader/index.tsx | 0 .../widgets/AdaptiveAction.tsx | 0 .../widgets/DialogRef.tsx | 0 .../widgets/ForeachWidget.tsx | 0 .../widgets/IfConditionWidget.tsx | 0 .../widgets/PromptWidget.tsx | 0 .../widgets/SwitchConditionWidget.tsx | 0 .../widgets/TriggerSummary/TriggerSummary.tsx | 0 .../widgets/TriggerSummary/index.tsx | 0 .../widgets/TriggerSummary/triggerStyles.ts | 0 .../adaptive-flow-renderer/widgets/index.ts | 0 .../widgets/styles/DisabledStyle.ts | 0 .../adaptive-flow/src/index.tsx | 0 .../adaptive-flow/tsconfig.build.json | 0 .../adaptive-flow/tsconfig.json | 2 +- .../adaptive-form/.eslintignore | 0 .../extension => adaptive-form}/.eslintrc.js | 2 +- .../{extensions => }/adaptive-form/.gitignore | 0 .../adaptive-form/jest.config.js | 0 .../adaptive-form/package.json | 4 +- .../src/components/AdaptiveForm.tsx | 2 +- .../src/components/CollapseField.tsx | 0 .../src/components/ErrorInfo.tsx | 0 .../src/components/ErrorMessage.tsx | 0 .../src/components/FieldLabel.tsx | 0 .../adaptive-form/src/components/FormRow.tsx | 2 +- .../src/components/FormTitle.tsx | 2 +- .../adaptive-form/src/components/Link.tsx | 0 .../src/components/LoadingTimeout.tsx | 0 .../src/components/SchemaField.tsx | 2 +- .../__tests__/ErrorMessage.test.tsx | 0 .../components/__tests__/FieldLabel.test.tsx | 0 .../src/components/__tests__/FormRow.test.tsx | 0 .../__tests__/LoadingTimeout.test.tsx | 0 .../components/__tests__/SchemaField.test.tsx | 4 +- .../src/components/fields/ArrayField.tsx | 2 +- .../src/components/fields/ArrayFieldItem.tsx | 2 +- .../src/components/fields/BooleanField.tsx | 2 +- .../src/components/fields/EditableField.tsx | 2 +- .../ExpressionField/ExpressionEditor.tsx | 2 +- .../ExpressionField/ExpressionField.tsx | 2 +- .../__tests__/ExpressionField.test.tsx | 0 .../ExpressionField/__tests__/utils.test.ts | 0 .../fields/ExpressionField/utils.ts | 2 +- .../components/fields/IntellisenseField.tsx | 2 +- .../src/components/fields/IntentField.tsx | 2 +- .../src/components/fields/JsonField.tsx | 2 +- .../src/components/fields/NumberField.tsx | 2 +- .../components/fields/ObjectArrayField.tsx | 2 +- .../src/components/fields/ObjectField.tsx | 2 +- .../fields/OneOfField/OneOfField.tsx | 2 +- .../OneOfField/__tests__/OneOfField.test.tsx | 0 .../fields/OneOfField/__tests__/utils.test.ts | 0 .../src/components/fields/OneOfField/index.ts | 0 .../src/components/fields/OneOfField/utils.ts | 2 +- .../fields/OpenObjectField/ObjectItem.tsx | 2 +- .../OpenObjectField/OpenObjectField.tsx | 2 +- .../__tests__/ObjectItem.test.tsx | 0 .../__tests__/OpenObjectField.test.tsx | 0 .../fields/OpenObjectField/index.ts | 0 .../fields/OpenObjectField/styles.ts | 0 .../src/components/fields/QnAActionsField.tsx | 2 +- .../src/components/fields/RecognizerField.tsx | 2 +- .../components/fields/RegexIntentField.tsx | 2 +- .../src/components/fields/SelectField.tsx | 2 +- .../src/components/fields/StringField.tsx | 2 +- .../components/fields/UnsupportedField.tsx | 2 +- .../fields/__tests__/ArrayField.test.tsx | 0 .../fields/__tests__/ArrayFieldItem.tsx | 0 .../fields/__tests__/BooleanField.test.tsx | 0 .../fields/__tests__/IntentField.test.tsx | 4 +- .../fields/__tests__/JsonField.test.tsx | 2 +- .../fields/__tests__/NumberField.test.tsx | 0 .../__tests__/ObjectArrayField.test.tsx | 4 +- .../fields/__tests__/ObjectField.test.tsx | 0 .../fields/__tests__/RecognizerField.test.tsx | 4 +- .../__tests__/RegexIntentField.test.tsx | 4 +- .../fields/__tests__/SelectField.test.tsx | 0 .../fields/__tests__/StringField.test.tsx | 0 .../__tests__/UnsupportedField.test.tsx | 0 .../components/fields/__tests__/testUtils.ts | 2 +- .../src/components/fields/index.ts | 0 .../src/components/fields/styles.ts | 0 .../adaptive-form/src/components/index.ts | 0 .../src/components/sharedStyles.ts | 0 .../adaptive-form/src/defaultRecognizers.ts | 2 +- .../adaptive-form/src/index.ts | 0 .../src/utils/__tests__/arrayUtils.test.ts | 0 .../__tests__/getOrderedProperties.test.ts | 0 .../src/utils/__tests__/getUIOptions.test.ts | 2 +- .../src/utils/__tests__/getValueType.test.ts | 0 .../src/utils/__tests__/objectUtils.test.ts | 0 .../__tests__/resolveFieldWidget.test.ts | 0 .../utils/__tests__/resolvePropSchema.test.ts | 0 .../src/utils/__tests__/resolveRef.test.ts | 0 .../utils/__tests__/uiOptionsHelpers.test.ts | 2 +- .../adaptive-form/src/utils/arrayUtils.ts | 2 +- .../src/utils/getHiddenProperties.ts | 2 +- .../src/utils/getIntellisenseUrl.ts | 0 .../src/utils/getOrderedProperties.ts | 2 +- .../adaptive-form/src/utils/getUIOptions.ts | 2 +- .../adaptive-form/src/utils/getValueType.ts | 0 .../adaptive-form/src/utils/index.ts | 0 .../adaptive-form/src/utils/objectUtils.ts | 2 +- .../src/utils/resolveFieldWidget.ts | 2 +- .../src/utils/resolvePropSchema.ts | 2 +- .../adaptive-form/src/utils/resolveRef.ts | 2 +- .../src/utils/uiOptionsHelpers.ts | 2 +- .../adaptive-form/tsconfig.build.json | 0 .../tsconfig.json | 2 +- Composer/packages/client/package.json | 2 +- Composer/packages/client/src/App.tsx | 4 +- .../client/src/pages/design/DesignPage.tsx | 10 +- .../src/pages/design/PropertyEditor.tsx | 2 +- .../design/exportSkillModal/constants.tsx | 2 +- .../exportSkillModal/content/Description.tsx | 2 +- .../exportSkillModal/content/Endpoints.tsx | 2 +- .../exportSkillModal/generateSkillManifest.ts | 2 +- .../pages/design/exportSkillModal/index.tsx | 2 +- .../client/src/pages/setting/SettingsPage.tsx | 4 +- .../Plugins.tsx => extensions/Extensions.tsx} | 72 ++++---- .../client/src/pages/setting/router.tsx | 4 +- Composer/packages/client/src/plugins.ts | 2 +- .../client/src/recoilModel/atoms/appState.ts | 6 +- .../src/recoilModel/dispatchers/extensions.ts | 92 ++++++++++ .../src/recoilModel/dispatchers/index.ts | 4 +- .../src/recoilModel/dispatchers/plugins.ts | 92 ---------- .../packages/client/src/recoilModel/types.ts | 7 +- Composer/packages/client/src/utils/hooks.ts | 8 +- Composer/packages/electron-server/src/main.ts | 2 +- .../.eslintrc.js | 2 +- .../.gitignore | 0 .../jest.config.js | 0 .../packages/extension-client/package.json | 30 ++++ .../src/EditorExtensionContext.ts} | 8 +- .../src/auth/index.ts | 0 .../src/auth/types.ts | 0 .../src/common/constants.ts | 0 .../src/common/index.ts | 4 +- .../src/components/EditorExtension.tsx} | 11 +- .../src/components/index.ts | 3 +- .../hooks/__tests__/useFlowConfig.test.tsx | 4 +- .../hooks/__tests__/useFormConfig.test.tsx | 4 +- .../hooks/__tests__/useMenuConfig.test.tsx | 4 +- .../__tests__/useRecognizerConfig.test.tsx | 4 +- .../src/hooks/index.ts | 0 .../src/hooks/useActionApi.ts | 0 .../src/hooks/useDebounce.ts | 0 .../src/hooks/useDialogApi.ts | 0 .../src/hooks/useDialogEditApi.ts | 0 .../src/hooks/useFlowConfig.ts | 4 +- .../src/hooks/useFormConfig.ts | 4 +- .../src/hooks/useLgApi.ts | 0 .../src/hooks/useLuApi.ts | 0 .../src/hooks/useMenuConfig.ts | 4 +- .../src/hooks/useRecognizerConfig.ts | 4 +- .../src/hooks/useShellApi.ts | 4 +- .../src/hooks/useTriggerApi.ts | 0 .../src/index.ts | 10 +- .../src/logger.ts | 2 +- .../src/page/index.ts | 0 .../src/publish/index.ts | 0 .../src/publish/types.ts | 0 .../src/types/extension.ts | 0 .../src/types/flowSchema.ts | 0 .../src/types/form.ts | 0 .../src/types/formSchema.ts | 0 .../src/types/index.ts | 0 .../src/types/menuSchema.ts | 0 .../__tests__/mergePluginConfigs.test.ts | 0 .../src/utils/index.ts | 0 .../src/utils/mergePluginConfigs.ts | 0 .../tsconfig.build.json | 0 .../tsconfig.json | 2 +- .../plugin-loader => extension}/.eslintrc.js | 2 +- .../plugin-loader => extension}/.gitignore | 0 .../plugin-loader => extension}/package.json | 2 +- .../plugin-loader => extension}/src/index.ts | 0 .../src/loader/composerPluginRegistration.ts | 0 .../src/loader/index.ts | 0 .../src/loader/pluginLoader.ts | 0 .../plugin-loader => extension}/src/logger.ts | 0 .../src/manager/index.ts | 0 .../src/manager/manager.ts | 6 +- .../src/storage/extensionManifestStore.ts | 0 .../src/storage/index.ts | 0 .../src/types/extension.ts | 0 .../src/types/types.ts | 0 .../tsconfig.json | 2 +- .../extensions/adaptive-form/tsconfig.json | 7 - .../extensions/client-plugin-lib/package.json | 21 --- .../extensions/client-plugin-lib/src/index.ts | 6 - .../extensions/extension/package.json | 31 ---- .../extensions/intellisense/.gitignore | 1 - .../extension => intellisense}/.gitignore | 0 .../intellisense/jest.config.js | 0 .../intellisense/package.json | 0 .../src/components/CompletionElement.tsx | 0 .../src/components/CompletionList.tsx | 0 .../src/components/IntellisenseTextField.tsx | 0 .../__tests__/IntellisenseTextField.test.tsx | 0 .../intellisense/src/components/index.ts | 0 .../src/hooks/useLanguageServer.ts | 0 .../src/utils/lspMessagesUtils.ts | 0 .../intellisense/src/utils/uiUtils.ts | 0 .../intellisense/tsconfig.build.json | 0 .../extension => intellisense}/tsconfig.json | 2 +- Composer/packages/lib/ui-shared/package.json | 4 +- .../__tests__/controllers/eject.test.ts | 4 +- .../__tests__/controllers/project.test.ts | 4 +- .../__tests__/controllers/publisher.test.ts | 2 +- .../models/asset/assetManager.test.ts | 4 +- Composer/packages/server/package.json | 2 +- .../packages/server/src/controllers/eject.ts | 2 +- .../controllers/{plugins.ts => extensions.ts} | 62 +++---- .../server/src/controllers/formDialog.ts | 2 +- .../server/src/controllers/project.ts | 2 +- .../server/src/controllers/publisher.ts | 2 +- .../server/src/controllers/storage.ts | 2 +- .../server/src/models/asset/assetManager.ts | 2 +- .../server/src/models/bot/botProject.ts | 2 +- .../models/settings/defaultSettingManager.ts | 2 +- .../src/models/settings/fileSettingManager.ts | 2 +- .../src/models/storage/storageFactory.ts | 2 +- Composer/packages/server/src/router/api.ts | 20 +-- Composer/packages/server/src/server.ts | 4 +- .../packages/server/src/services/project.ts | 2 +- .../packages/server/src/services/storage.ts | 2 +- .../packages/ui-plugins/composer/package.json | 4 +- .../composer/src/defaultMenuSchema.ts | 2 +- .../packages/ui-plugins/composer/src/index.ts | 2 +- .../ui-plugins/cross-trained/package.json | 4 +- .../ui-plugins/cross-trained/src/index.ts | 2 +- .../packages/ui-plugins/example/package.json | 4 +- .../packages/ui-plugins/example/src/index.ts | 2 +- Composer/packages/ui-plugins/lg/package.json | 4 +- .../packages/ui-plugins/lg/src/LgField.tsx | 2 +- .../ui-plugins/lg/src/LgWidget/LgWidget.tsx | 2 +- .../lg/src/LgWidget/useLgTemplate.ts | 2 +- Composer/packages/ui-plugins/lg/src/index.ts | 2 +- .../packages/ui-plugins/luis/package.json | 4 +- .../ui-plugins/luis/src/LuisIntentEditor.tsx | 2 +- .../packages/ui-plugins/luis/src/index.ts | 2 +- .../packages/ui-plugins/prompts/package.json | 6 +- .../prompts/src/PromptField/UserInput.tsx | 2 +- .../prompts/src/PromptField/index.tsx | 2 +- .../prompts/src/PromptField/types.ts | 2 +- .../packages/ui-plugins/prompts/src/index.tsx | 2 +- .../ui-plugins/schema-editor/package.json | 4 +- .../src/Fields/AdaptiveDialogField.tsx | 2 +- .../src/Fields/CollapsedField.tsx | 2 +- .../src/Fields/SchemaEditorField.tsx | 2 +- .../src/Fields/ValueRefField.tsx | 2 +- .../src/__tests__/SchemaEditorField.test.tsx | 6 +- .../schema-editor/src/formSchema.ts | 2 +- .../ui-plugins/schema-editor/src/index.ts | 2 +- .../ui-plugins/schema-editor/src/schema.ts | 2 +- .../ui-plugins/schema-editor/src/uiOptions.ts | 2 +- .../schema-editor/src/utils/getDefinitions.ts | 2 +- .../ui-plugins/select-dialog/package.json | 6 +- .../select-dialog/src/ComboBoxField.tsx | 2 +- .../select-dialog/src/SelectDialog.tsx | 2 +- .../src/__tests__/selectDialog.test.tsx | 6 +- .../ui-plugins/select-dialog/src/index.ts | 2 +- .../select-skill-dialog/package.json | 6 +- .../src/BeginSkillDialogField.tsx | 2 +- .../select-skill-dialog/src/ComboBoxField.tsx | 2 +- .../src/SelectSkillDialogField.tsx | 2 +- .../src/SkillEndpointField.tsx | 2 +- .../__tests__/BeginSkillDialogField.test.tsx | 6 +- .../src/__tests__/SelectSkillDialog.test.tsx | 6 +- .../select-skill-dialog/src/index.ts | 2 +- Composer/plugins/azurePublish/package.json | 4 +- Composer/plugins/azurePublish/src/index.ts | 2 +- Composer/plugins/azurePublish/src/schema.ts | 2 +- Composer/plugins/azurePublish/yarn.lock | 2 +- .../plugins/mockRemotePublish/package.json | 4 +- .../plugins/mockRemotePublish/src/index.ts | 2 +- .../plugins/mockRemotePublish/src/schema.ts | 2 +- Composer/plugins/mockRemotePublish/yarn.lock | 2 +- .../plugins/sample-ui-plugin/package.json | 2 +- .../src/client/page/index.tsx | 2 +- .../src/client/publish/index.tsx | 2 +- .../src/client/publish/main.tsx | 2 +- Composer/plugins/sample-ui-plugin/yarn.lock | 2 +- releases/1.1.1.md | 2 +- 470 files changed, 472 insertions(+), 668 deletions(-) rename Composer/packages/{extensions => }/adaptive-flow/.eslintrc.js (86%) rename Composer/packages/{extensions => }/adaptive-flow/.gitignore (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/AdaptiveFlowEditor.test.tsx (80%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/components/IconMenu.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/components/KeyboardZone.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/constants/ElementAttributes.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/constants/KeyboardCommandTypes.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/constants/MenuTypes.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/constants/ScreenReaderMessage.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/constants/editorConfig.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/contexts/NodeRendererContext.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/contexts/SelectionContext.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/hooks/useEditorEventApi.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/renderers/EdgeMenu.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/renderers/ElementWrapper.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/renderers/NodeMenu.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/renderers/NodeWrapper.test.tsx (84%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/stubs/ShellApiStub.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/utils/NodeIndexGetter.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/utils/calculateRangeSelection.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/utils/cursorTracker/index.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/utils/cursorTracker/type.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/utils/getCustomSchema.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/utils/mapKeyboardCommandToEditorEvent.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-editor/utils/normalizeSelection.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/adaptive/AdaptiveDialog.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/adaptive/AdaptiveTrigger.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/components/ArrowLine.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/components/Diamond.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/components/ElementMeasurer.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/components/FlowEdges.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/components/IconBrick.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/components/LoopIndicator.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/components/OffsetContainer.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/components/SVGContainer.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/configs/builtinSchema.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/layouters/baseInputLayouter.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/layouters/calculateNodeBoundary.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/layouters/foreachLayouter.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/layouters/ifelseLayouter.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/layouters/measureJsonBoundary.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/layouters/sequentialLayouter.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/layouters/switchCaseLayouter.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/transformers/ObiTypes.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/transformers/todoBot.main.json (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/transformers/transformForeach.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/transformers/transformIfCondition.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/transformers/transformObiRules.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/transformers/transformRootDialog.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/transformers/transformStepGroup.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/transformers/transformSwitchCondition.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/utils/DesignerCache.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/utils/EdgeUtil.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/utils/widgetRenderer.test.tsx (99%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/ActionCard.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/DialogRef.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/ForeachWidget.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/IfConditionWidget.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/PromptWidget.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/SwitchConditionWidget.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/icon.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/index.html (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/readme.md (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/components/json-block/index.js (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/index.css (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/index.js (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/samples/index.js (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/samples/todo/AddToDo.json (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/samples/todo/ClearToDos.json (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/samples/todo/DeleteToDo.json (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/samples/todo/ShowToDos.json (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/samples/todo/ToDoBot.main.json (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/stories/EventsEditorDemo.js (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/stories/StepEditorDemo.css (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/stories/StepEditorDemo.js (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/stories/VisualEditorDemo.css (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/stories/VisualEditorDemo.js (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/stories/VisualSDKDemo.js (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/src/stories/story.css (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/tsconfig.json (100%) rename Composer/packages/{extensions => }/adaptive-flow/demo/webpack.config.demo.js (100%) rename Composer/packages/{extensions => }/adaptive-flow/jest.config.js (100%) rename Composer/packages/{extensions => }/adaptive-flow/package.json (97%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/AdaptiveFlowEditor.tsx (99%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/components/IconMenu.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/components/KeyboardZone.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/constants/ElementAttributes.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/constants/KeyboardCommandTypes.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/constants/MenuTypes.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/constants/ScreenReaderMessage.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/constants/editorConfig.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/contexts/NodeRendererContext.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/contexts/SelectionContext.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/contexts/SelfHostContext.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/hooks/useEditorEventApi.ts (99%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/hooks/useFlowUIOptions.ts (78%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/hooks/useSelectionEffect.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/renderers/EdgeMenu/EdgeMenu.tsx (98%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/renderers/EdgeMenu/createSchemaMenu.tsx (99%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/renderers/EdgeMenu/defaultMenuOrder.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/renderers/EdgeMenu/index.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/renderers/ElementWrapper.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/renderers/NodeMenu.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/renderers/NodeWrapper.tsx (98%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/renderers/index.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/NodeIndexGetter.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/calculateRangeSelection.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/cursorTracker/arrowMove.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/cursorTracker/calculate/calculateBySchema.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/cursorTracker/calculate/calculateByVector.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/cursorTracker/index.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/cursorTracker/locateElement.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/cursorTracker/tabMove.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/cursorTracker/type.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/getCustomSchema.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/mapKeyboardCommandToEditorEvent.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/normalizeSelection.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-editor/utils/scrollNodeIntoView.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/adaptive/AdaptiveDialog.tsx (99%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/adaptive/AdaptiveTrigger.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/components/ArrowLine.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/components/Diamond.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/components/ElementMeasurer.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/components/FlowEdges.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/components/IconBrick.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/components/LoopIndicator.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/components/OffsetContainer.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/components/SVGContainer.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/configs/builtinSchema.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/configs/builtinWidgets.tsx (87%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/constants/AdaptiveFieldNames.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/constants/AdaptiveKinds.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/constants/ElementColors.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/constants/ElementSizes.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/constants/NodeEventTypes.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/contexts/RendererContext.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/contexts/SchemaContext.ts (88%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/hooks/useSmartLayout.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/layouters/baseInputLayouter.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/layouters/calculateNodeBoundary.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/layouters/foreachLayouter.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/layouters/ifelseLayouter.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/layouters/measureJsonBoundary.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/layouters/sequentialLayouter.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/layouters/sharedLayouterUtils.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/layouters/switchCaseLayouter.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/models/Boundary.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/models/EdgeData.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/models/GraphLayout.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/models/GraphNode.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/models/IndexedNode.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/transformers/inheritParentProperty.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/transformers/transformBaseInput.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/transformers/transformForeach.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/transformers/transformIfCondition.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/transformers/transformObiRules.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/transformers/transformRootDialog.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/transformers/transformStepGroup.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/transformers/transformSwitchCondition.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/types/PluggableComponents.types.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/types/flowRenderer.types.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/types/nodeProps.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/utils/adaptive/outlineObiJson.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/utils/adaptive/stepBuilder.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/utils/visual/DesignerCache.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/utils/visual/EdgeUtil.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/utils/visual/WidgetSchemaProvider.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/utils/visual/widgetRenderer.tsx (96%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/ActionCard/ActionCard.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/ActionCard/CardTemplate.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/ActionCard/CardTemplateStyle.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/ActionCard/index.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/ActionGroup.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/ActionHeader/ActionHeader.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/ActionHeader/ActionHeaderStyle.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/ActionHeader/icon.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/ActionHeader/iconStyles.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/ActionHeader/index.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/AdaptiveAction.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/DialogRef.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/ForeachWidget.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/IfConditionWidget.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/PromptWidget.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/SwitchConditionWidget.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/TriggerSummary/TriggerSummary.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/TriggerSummary/index.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/TriggerSummary/triggerStyles.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/index.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/adaptive-flow-renderer/widgets/styles/DisabledStyle.ts (100%) rename Composer/packages/{extensions => }/adaptive-flow/src/index.tsx (100%) rename Composer/packages/{extensions => }/adaptive-flow/tsconfig.build.json (100%) rename Composer/packages/{extensions => }/adaptive-flow/tsconfig.json (74%) rename Composer/packages/{extensions => }/adaptive-form/.eslintignore (100%) rename Composer/packages/{extensions/extension => adaptive-form}/.eslintrc.js (71%) rename Composer/packages/{extensions => }/adaptive-form/.gitignore (100%) rename Composer/packages/{extensions => }/adaptive-form/jest.config.js (100%) rename Composer/packages/{extensions => }/adaptive-form/package.json (94%) rename Composer/packages/{extensions => }/adaptive-form/src/components/AdaptiveForm.tsx (99%) rename Composer/packages/{extensions => }/adaptive-form/src/components/CollapseField.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/ErrorInfo.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/ErrorMessage.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/FieldLabel.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/FormRow.tsx (97%) rename Composer/packages/{extensions => }/adaptive-form/src/components/FormTitle.tsx (99%) rename Composer/packages/{extensions => }/adaptive-form/src/components/Link.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/LoadingTimeout.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/SchemaField.tsx (99%) rename Composer/packages/{extensions => }/adaptive-form/src/components/__tests__/ErrorMessage.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/__tests__/FieldLabel.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/__tests__/FormRow.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/__tests__/LoadingTimeout.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/__tests__/SchemaField.test.tsx (97%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/ArrayField.tsx (98%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/ArrayFieldItem.tsx (98%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/BooleanField.tsx (96%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/EditableField.tsx (98%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/ExpressionField/ExpressionEditor.tsx (96%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/ExpressionField/ExpressionField.tsx (99%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/ExpressionField/__tests__/ExpressionField.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/ExpressionField/__tests__/utils.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/ExpressionField/utils.ts (99%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/IntellisenseField.tsx (96%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/IntentField.tsx (97%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/JsonField.tsx (93%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/NumberField.tsx (97%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/ObjectArrayField.tsx (99%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/ObjectField.tsx (95%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/OneOfField/OneOfField.tsx (97%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/OneOfField/__tests__/OneOfField.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/OneOfField/__tests__/utils.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/OneOfField/index.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/OneOfField/utils.ts (99%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/OpenObjectField/ObjectItem.tsx (98%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/OpenObjectField/OpenObjectField.tsx (98%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/OpenObjectField/__tests__/ObjectItem.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/OpenObjectField/__tests__/OpenObjectField.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/OpenObjectField/index.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/OpenObjectField/styles.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/QnAActionsField.tsx (88%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/RecognizerField.tsx (99%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/RegexIntentField.tsx (95%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/SelectField.tsx (97%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/StringField.tsx (97%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/UnsupportedField.tsx (94%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/ArrayField.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/ArrayFieldItem.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/BooleanField.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/IntentField.test.tsx (97%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/JsonField.test.tsx (93%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/NumberField.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/ObjectArrayField.test.tsx (98%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/ObjectField.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/RecognizerField.test.tsx (97%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/RegexIntentField.test.tsx (95%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/SelectField.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/StringField.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/UnsupportedField.test.tsx (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/__tests__/testUtils.ts (89%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/index.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/fields/styles.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/index.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/components/sharedStyles.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/defaultRecognizers.ts (97%) rename Composer/packages/{extensions => }/adaptive-form/src/index.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/__tests__/arrayUtils.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/__tests__/getOrderedProperties.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/__tests__/getUIOptions.test.ts (99%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/__tests__/getValueType.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/__tests__/objectUtils.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/__tests__/resolveFieldWidget.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/__tests__/resolvePropSchema.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/__tests__/resolveRef.test.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/__tests__/uiOptionsHelpers.test.ts (98%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/arrayUtils.ts (97%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/getHiddenProperties.ts (91%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/getIntellisenseUrl.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/getOrderedProperties.ts (97%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/getUIOptions.ts (97%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/getValueType.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/index.ts (100%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/objectUtils.ts (97%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/resolveFieldWidget.ts (98%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/resolvePropSchema.ts (97%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/resolveRef.ts (99%) rename Composer/packages/{extensions => }/adaptive-form/src/utils/uiOptionsHelpers.ts (97%) rename Composer/packages/{extensions => }/adaptive-form/tsconfig.build.json (100%) rename Composer/packages/{extensions/intellisense => adaptive-form}/tsconfig.json (63%) rename Composer/packages/client/src/pages/setting/{plugins/Plugins.tsx => extensions/Extensions.tsx} (72%) create mode 100644 Composer/packages/client/src/recoilModel/dispatchers/extensions.ts delete mode 100644 Composer/packages/client/src/recoilModel/dispatchers/plugins.ts rename Composer/packages/{extensions/adaptive-form => extension-client}/.eslintrc.js (71%) rename Composer/packages/{extensions/client-plugin-lib => extension-client}/.gitignore (100%) rename Composer/packages/{extensions/extension => extension-client}/jest.config.js (100%) create mode 100644 Composer/packages/extension-client/package.json rename Composer/packages/{extensions/extension/src/extensionContext.ts => extension-client/src/EditorExtensionContext.ts} (67%) rename Composer/packages/{extensions/client-plugin-lib => extension-client}/src/auth/index.ts (100%) rename Composer/packages/{extensions/client-plugin-lib => extension-client}/src/auth/types.ts (100%) rename Composer/packages/{extensions/client-plugin-lib => extension-client}/src/common/constants.ts (100%) rename Composer/packages/{extensions/client-plugin-lib => extension-client}/src/common/index.ts (74%) rename Composer/packages/{extensions/extension/src/components/Extension.tsx => extension-client/src/components/EditorExtension.tsx} (55%) rename Composer/packages/{extensions/extension => extension-client}/src/components/index.ts (67%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/__tests__/useFlowConfig.test.tsx (81%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/__tests__/useFormConfig.test.tsx (81%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/__tests__/useMenuConfig.test.tsx (81%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/__tests__/useRecognizerConfig.test.tsx (81%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/index.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useActionApi.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useDebounce.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useDialogApi.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useDialogEditApi.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useFlowConfig.ts (74%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useFormConfig.ts (74%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useLgApi.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useLuApi.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useMenuConfig.ts (72%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useRecognizerConfig.ts (60%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useShellApi.ts (83%) rename Composer/packages/{extensions/extension => extension-client}/src/hooks/useTriggerApi.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/index.ts (51%) rename Composer/packages/{extensions/client-plugin-lib => extension-client}/src/logger.ts (66%) rename Composer/packages/{extensions/client-plugin-lib => extension-client}/src/page/index.ts (100%) rename Composer/packages/{extensions/client-plugin-lib => extension-client}/src/publish/index.ts (100%) rename Composer/packages/{extensions/client-plugin-lib => extension-client}/src/publish/types.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/types/extension.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/types/flowSchema.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/types/form.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/types/formSchema.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/types/index.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/types/menuSchema.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/utils/__tests__/mergePluginConfigs.test.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/utils/index.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/src/utils/mergePluginConfigs.ts (100%) rename Composer/packages/{extensions/extension => extension-client}/tsconfig.build.json (100%) rename Composer/packages/{extensions/plugin-loader => extension-client}/tsconfig.json (74%) rename Composer/packages/{extensions/plugin-loader => extension}/.eslintrc.js (82%) rename Composer/packages/{extensions/plugin-loader => extension}/.gitignore (100%) rename Composer/packages/{extensions/plugin-loader => extension}/package.json (95%) rename Composer/packages/{extensions/plugin-loader => extension}/src/index.ts (100%) rename Composer/packages/{extensions/plugin-loader => extension}/src/loader/composerPluginRegistration.ts (100%) rename Composer/packages/{extensions/plugin-loader => extension}/src/loader/index.ts (100%) rename Composer/packages/{extensions/plugin-loader => extension}/src/loader/pluginLoader.ts (100%) rename Composer/packages/{extensions/plugin-loader => extension}/src/logger.ts (100%) rename Composer/packages/{extensions/plugin-loader => extension}/src/manager/index.ts (100%) rename Composer/packages/{extensions/plugin-loader => extension}/src/manager/manager.ts (98%) rename Composer/packages/{extensions/plugin-loader => extension}/src/storage/extensionManifestStore.ts (100%) rename Composer/packages/{extensions/plugin-loader => extension}/src/storage/index.ts (100%) rename Composer/packages/{extensions/plugin-loader => extension}/src/types/extension.ts (100%) rename Composer/packages/{extensions/plugin-loader => extension}/src/types/types.ts (100%) rename Composer/packages/{extensions/client-plugin-lib => extension}/tsconfig.json (74%) delete mode 100644 Composer/packages/extensions/adaptive-form/tsconfig.json delete mode 100644 Composer/packages/extensions/client-plugin-lib/package.json delete mode 100644 Composer/packages/extensions/client-plugin-lib/src/index.ts delete mode 100644 Composer/packages/extensions/extension/package.json delete mode 100644 Composer/packages/extensions/intellisense/.gitignore rename Composer/packages/{extensions/extension => intellisense}/.gitignore (100%) rename Composer/packages/{extensions => }/intellisense/jest.config.js (100%) rename Composer/packages/{extensions => }/intellisense/package.json (100%) rename Composer/packages/{extensions => }/intellisense/src/components/CompletionElement.tsx (100%) rename Composer/packages/{extensions => }/intellisense/src/components/CompletionList.tsx (100%) rename Composer/packages/{extensions => }/intellisense/src/components/IntellisenseTextField.tsx (100%) rename Composer/packages/{extensions => }/intellisense/src/components/__tests__/IntellisenseTextField.test.tsx (100%) rename Composer/packages/{extensions => }/intellisense/src/components/index.ts (100%) rename Composer/packages/{extensions => }/intellisense/src/hooks/useLanguageServer.ts (100%) rename Composer/packages/{extensions => }/intellisense/src/utils/lspMessagesUtils.ts (100%) rename Composer/packages/{extensions => }/intellisense/src/utils/uiUtils.ts (100%) rename Composer/packages/{extensions => }/intellisense/tsconfig.build.json (100%) rename Composer/packages/{extensions/extension => intellisense}/tsconfig.json (63%) rename Composer/packages/server/src/controllers/{plugins.ts => extensions.ts} (50%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0ad65c962e..c640447209 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -6,4 +6,6 @@ /Composer/ @cwhitten @boydc2014 @a-b-r-o-w-n @beyackle @srinaath @tonyanziano @geoffcoxmsft @hatpick +/Composer/packages/adaptive-flow @yeze322 @cwhitten @boydc2014 @a-b-r-o-w-n + /docs/ @cwhitten @boydc2014 @benbrown @geoffcoxmsft diff --git a/Composer/.dockerignore b/Composer/.dockerignore index 19245eab5f..d942adbebd 100644 --- a/Composer/.dockerignore +++ b/Composer/.dockerignore @@ -7,7 +7,6 @@ **/server/tmp.zip # not ignore all lib folder because packages/lib, so probably we should rename that to libs packages/lib/*/lib -packages/extensions/*/lib Dockerfile .dockerignore diff --git a/Composer/Dockerfile b/Composer/Dockerfile index 4f6067ba23..cd3532955d 100644 --- a/Composer/Dockerfile +++ b/Composer/Dockerfile @@ -25,7 +25,11 @@ WORKDIR /app/Composer COPY --from=build /src/Composer/yarn.lock . COPY --from=build /src/Composer/package.json . COPY --from=build /src/Composer/packages/client ./packages/client -COPY --from=build /src/Composer/packages/extensions ./packages/extensions +COPY --from=build /src/Composer/packages/adaptive-flow ./packages/adaptive-flow +COPY --from=build /src/Composer/packages/adaptive-form ./packages/adaptive-form +COPY --from=build /src/Composer/packages/extension ./packages/extension +COPY --from=build /src/Composer/packages/extension-client ./packages/extension-client +COPY --from=build /src/Composer/packages/intellisense ./packages/intellisense COPY --from=build /src/Composer/packages/server ./packages/server COPY --from=build /src/Composer/packages/lib ./packages/lib COPY --from=build /src/Composer/packages/tools ./packages/tools diff --git a/Composer/README.md b/Composer/README.md index c7142f2575..f2b9bc0bc4 100644 --- a/Composer/README.md +++ b/Composer/README.md @@ -30,166 +30,3 @@ If you run into the issue of `There appears to be trouble with your network conn ## Documentation The documentation for Composer [can be found here](/toc.md). - -## Extension Framework -Composer is built on top of an extension framework, which allows anyone to provide an extension as the editor of certain type of bot assets. - -All editors, 1st party or 3rd party, are loaded in the same way by the extension framework. - -Non-editor extensions are not supported at this time, though the mechanisms for providing extensions will scale outside the dialog editor's. - -### What's an extension? what's in it -Each extension is a standalone React component package ([why React component](#why-react-component)) under Composer's `/packages/extensions` folder, which implements the extension `interface`. - -Composer is managed via yarn workspaces, producing such a folder layout. -``` -|- Composer - |- package.json // define the workspaces - |- packages - |- client // composer main app - |- server // composer api server - |- extensions - |- package.json // put all extension as one package - |- adaptive-form // dialog property editor - |- lib - |- shared // shared code -``` - -All extensions under `/extensions` folder will be eventually packed into one `extensions` package, then the `client` package will depends on this `extensions` package. - -### Extension Interface -The extension interface defines the way how an extension comminutes to the host. - -In React world, interface means the props passed into a component. An extension will be passed ino 3 props: -- data:any. which is the data to be edited by this editor. -- onChange: (newData) => void. which is the callback enables an editor to save the edited data. -- [shellApi](#shell-api). which is a set of apis providing other capabilities than data in\out. - -The rendering code of an extension will be sth like this: -``` - import SomeEditor from 'someplace' - - -``` - -#### data in\out story - -With this interface, it's pretty clear how data is in\out extension. Data is passed in through `data` prop, and been saved with `onChange` prop. - -#### shell api - -Shell api is a set of apis that provides other important functionalities that empower an extension to provide a more powerful and smooth editing experience. including - -* OpenSubEditor - ``` - openSubEditor(location:string, data:any, onChange:(newData:any) => void) - ``` - This is the most important api that support a [multiple editors](#multiple-editors) scenario, which allows an editor to delegate some editing task to another editor, and listen the changes. - - Note that, this api doesn't allow you to specify the type or the name of the sub editor. You only get to specify a data, the shell will use a centralized way to manage how editors are registered and picked up. See registration section in the below for more details. - - We may suppport other forms of openSubEditor later, but we expect this is the mosted used one. - -* ObjectGraph - - TBD, this will be an api that enable each extension have the knowledge of a global object graph. -* Alert -* ReadFile -* Prompt - -### Why React component - -There are many options to choose when picking an abstraction for an extension. Different level abstractions have different impacts on many aspects, like developing, testing, debuging and running the extension. - -A low-level abstraction like HTML page will give us perfect isolation, great flexibilty (use whatever language you want to build that), but usually result in a relatively high amount of effort to develop a robust api between host and extension because it's using the low-level messaging primitives, and also not good for performance because of the extreme isolation. - -A high-level abstraction like React component, will cost a little bit on isolation, but gain the best support from a mature and powerful framework, in every cycle of the development of extensions. It will help most of boosting the productivity, simplifying the architecure, and gain the best performance. - -Based on our scenario, we will use React as a start point, and host the extension in an `