diff --git a/.vscode/snippets.json.code-snippets b/.vscode/snippets.json.code-snippets index d4a4e9a0a1..038c4adab4 100644 --- a/.vscode/snippets.json.code-snippets +++ b/.vscode/snippets.json.code-snippets @@ -1,15 +1,15 @@ { - // Place your BotFramework-Composer workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and - // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope - // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is - // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: - // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. - // Placeholders with the same ids are connected. - "React component test scaffolding": { - "prefix": "rct", - "body": [ - "import React from 'react';", - "import { render } from '@bfc/test-utils';", + // Place your BotFramework-Composer workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and + // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope + // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is + // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. + // Placeholders with the same ids are connected. + "React component test scaffolding": { + "prefix": "rct", + "body": [ + "import React from 'react';", + "import { render } from '@botframework-composer/test-utils';", "import assign from 'lodash/assign';\n", "import { $1 } from '$2';\n", "const defaultProps = {\n $3\n};\n", @@ -17,10 +17,10 @@ " const props = assign({}, defaultProps, overrides);", " return render(<$1 {...props} />);", "}\n", - "describe('<$1 />', () => {", - " it.todo('$0');", - "});\n" - ], - "description": "React component test scaffolding" - } + "describe('<$1 />', () => {", + " it.todo('$0');", + "});\n" + ], + "description": "React component test scaffolding" + } } diff --git a/Composer/.npmrc b/Composer/.npmrc index 764364f5c9..5fca0d518b 100644 --- a/Composer/.npmrc +++ b/Composer/.npmrc @@ -1,2 +1 @@ -@bfcomposer:registry=https://botbuilder.myget.org/F/botbuilder-declarative/npm/ scripts-prepend-node-path=true diff --git a/Composer/package.json b/Composer/package.json index e422a09141..25560317c0 100644 --- a/Composer/package.json +++ b/Composer/package.json @@ -38,11 +38,11 @@ "scripts": { "build": "node scripts/begin.js && yarn build:prod && yarn l10n", "build:prod": "yarn build:dev && yarn build:client && yarn build:server && yarn build:electron", - "build:dev": "wsrun -ltm -x @bfc/electron-server -x @bfc/client -x @bfc/server -p @bfc/* -c build && yarn build:plugins", + "build:dev": "wsrun -ltm -x @bfc/electron-server -x @bfc/client -x @bfc/server -p @botframework-composer/* -p @bfc/* -c build && yarn build:plugins", "build:electron": "yarn workspace @bfc/electron-server build && yarn workspace @bfc/electron-server l10n", "build:server": "yarn workspace @bfc/server build", "build:client": "yarn workspace @bfc/client build", - "build:plugins": "yarn build:plugins:localpublish && yarn build:plugins:samples && yarn build:plugins:azurePublish && yarn build:plugins:runtimes & yarn build:plugins:vacore", + "build:plugins": "yarn build:plugins:localpublish && yarn build:plugins:samples && yarn build:plugins:azurePublish && yarn build:plugins:runtimes && yarn build:plugins:vacore", "build:plugins:localpublish": "cd plugins/localPublish && yarn install && yarn build", "build:plugins:samples": "cd plugins/samples && yarn install && yarn build", "build:plugins:azurePublish": "cd plugins/azurePublish && yarn install && yarn build", diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/AdaptiveFlowEditor.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/AdaptiveFlowEditor.test.tsx index 5717e536d3..3c411dfb34 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/AdaptiveFlowEditor.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/AdaptiveFlowEditor.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { EditorExtensionContext } from '@bfc/extension-client'; import AdaptiveFlowEditor from '../../src/adaptive-flow-editor/AdaptiveFlowEditor'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/components/IconMenu.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/components/IconMenu.test.tsx index bc2afc50e2..c759bf63c4 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/components/IconMenu.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/components/IconMenu.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent, findByText } from '@bfc/test-utils'; +import { render, fireEvent, findByText } from '@botframework-composer/test-utils'; import { IconMenu } from '../../../src/adaptive-flow-editor/components/IconMenu'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/components/KeyboardZone.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/components/KeyboardZone.test.tsx index 766bc2e211..d636746431 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/components/KeyboardZone.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/components/KeyboardZone.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import { enableKeyboardCommandAttributes } from '../../../src/adaptive-flow-editor/components/KeyboardZone'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/contexts/NodeRendererContext.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/contexts/NodeRendererContext.test.tsx index 40a9108bca..2ea28b9329 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/contexts/NodeRendererContext.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/contexts/NodeRendererContext.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React, { useContext } from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { DialogFactory } from '@bfc/shared'; import { NodeRendererContext } from '../../../src/adaptive-flow-editor/contexts/NodeRendererContext'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/contexts/SelectionContext.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/contexts/SelectionContext.test.tsx index 9f3e15288a..6385eb3b5a 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/contexts/SelectionContext.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/contexts/SelectionContext.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React, { useContext } from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { SelectionContext } from '../../../src/adaptive-flow-editor/contexts/SelectionContext'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/hooks/useEditorEventApi.test.ts b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/hooks/useEditorEventApi.test.ts index 64bfc2d68b..d198f87c69 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/hooks/useEditorEventApi.test.ts +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/hooks/useEditorEventApi.test.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { renderHook } from '@bfc/test-utils/lib/hooks'; +import { renderHook } from '@botframework-composer/test-utils/lib/hooks'; import { useEditorEventApi } from '../../../src/adaptive-flow-editor/hooks/useEditorEventApi'; import { ShellApiStub } from '../stubs/ShellApiStub'; @@ -9,7 +9,7 @@ import { defaultRendererContextValue } from '../../../src/adaptive-flow-editor/c import { defaultSelectionContextValue } from '../../../src/adaptive-flow-editor/contexts/SelectionContext'; import { NodeEventTypes } from '../../../src/adaptive-flow-renderer/constants/NodeEventTypes'; -describe('useSelectionEffect', () => { +describe('useEditorEventApi', () => { const hook = renderHook(() => useEditorEventApi( { diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/EdgeMenu.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/EdgeMenu.test.tsx index 85619b85f8..3c73a33342 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/EdgeMenu.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/EdgeMenu.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { DialogGroup } from '@bfc/shared'; import { EdgeMenu } from '../../../src/adaptive-flow-editor/renderers/EdgeMenu'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/ElementWrapper.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/ElementWrapper.test.tsx index 81a2850a7b..3452ef2e3f 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/ElementWrapper.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/ElementWrapper.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { ElementWrapper } from '../../../src/adaptive-flow-editor/renderers/ElementWrapper'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/NodeMenu.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/NodeMenu.test.tsx index bc770b8120..8b8d229806 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/NodeMenu.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/NodeMenu.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent, findAllByText } from '@bfc/test-utils'; +import { render, fireEvent, findAllByText } from '@botframework-composer/test-utils'; import { NodeMenu } from '../../../src/adaptive-flow-editor/renderers/NodeMenu'; import { NodeEventTypes } from '../../../src/adaptive-flow-renderer/constants/NodeEventTypes'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/NodeWrapper.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/NodeWrapper.test.tsx index e9fbf7bdb0..a48fb8e335 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/NodeWrapper.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/renderers/NodeWrapper.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import { EditorExtensionContext } from '@bfc/extension-client'; import { ActionNodeWrapper } from '../../../src/adaptive-flow-editor/renderers/NodeWrapper'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/stubs/ShellApiStub.ts b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/stubs/ShellApiStub.ts index 71a0939388..d2c5583c85 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/stubs/ShellApiStub.ts +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-editor/stubs/ShellApiStub.ts @@ -21,11 +21,16 @@ export const ShellApiStub: ShellApi = { updateLgTemplate: fnPromise, removeLgTemplate: fnPromise, removeLgTemplates: fnPromise, + updateLgFile: fnPromise, + debouncedUpdateLgTemplate: fnPromise, getLuIntent: fn, getLuIntents: fnList, addLuIntent: fnPromise, updateLuIntent: fnPromise, removeLuIntent: fn, + updateLuFile: fnPromise, + debouncedUpdateLuIntent: fnPromise, + renameLuIntent: fnPromise, updateRegExIntent: fn, createDialog: fnPromise, addCoachMarkRef: fn, @@ -36,6 +41,21 @@ export const ShellApiStub: ShellApi = { addSkillDialog: fnPromise, announce: fn, displayManifestModal: fn, + constructAction: fnPromise, + constructActions: fnPromise, + copyAction: fnPromise, + copyActions: fnPromise, + deleteAction: fnPromise, + deleteActions: fnPromise, + actionsContainLuIntent: fn, + updateQnaContent: fnPromise, + renameRegExIntent: fnPromise, + updateIntentTrigger: fnPromise, + commitChanges: fnPromise, + updateDialogSchema: fnPromise, + createTrigger: fnPromise, + updateSkillSetting: fnPromise, + updateFlowZoomRate: fnPromise, }; describe('ShellApiStub', () => { diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/adaptive/AdaptiveDialog.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/adaptive/AdaptiveDialog.test.tsx index 05373342e5..7e86d9de73 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/adaptive/AdaptiveDialog.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/adaptive/AdaptiveDialog.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { AdaptiveKinds } from '../../../src/adaptive-flow-renderer/constants/AdaptiveKinds'; import { AdaptiveDialog } from '../../../src/adaptive-flow-renderer/adaptive/AdaptiveDialog'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/adaptive/AdaptiveTrigger.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/adaptive/AdaptiveTrigger.test.tsx index c78b8af21f..95d0abf1c4 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/adaptive/AdaptiveTrigger.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/adaptive/AdaptiveTrigger.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { AdaptiveTrigger } from '../../../src/adaptive-flow-renderer/adaptive/AdaptiveTrigger'; import { SchemaContext } from '../../../src/adaptive-flow-renderer/contexts/SchemaContext'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/ArrowLine.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/ArrowLine.test.tsx index 3cbf26a596..4b85ca7396 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/ArrowLine.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/ArrowLine.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { ArrowLine } from '../../../src/adaptive-flow-renderer/components/ArrowLine'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/Diamond.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/Diamond.test.tsx index f6c432ebea..2baff4eeab 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/Diamond.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/Diamond.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { Diamond } from '../../../src/adaptive-flow-renderer/components/Diamond'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/ElementMeasurer.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/ElementMeasurer.test.tsx index 3d2ffc038a..422a8ec856 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/ElementMeasurer.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/ElementMeasurer.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { ElementMeasurer } from '../../../src/adaptive-flow-renderer/components/ElementMeasurer'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/FlowEdges.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/FlowEdges.test.tsx index b732a772c8..e614c13bfd 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/FlowEdges.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/FlowEdges.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { FlowEdges } from '../../../src/adaptive-flow-renderer/components/FlowEdges'; import { Edge } from '../../../src/adaptive-flow-renderer/models/EdgeData'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/IconBrick.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/IconBrick.test.tsx index f239f1559a..5e82e52614 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/IconBrick.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/IconBrick.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { IconBrick } from '../../../src/adaptive-flow-renderer/components/IconBrick'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/LoopIndicator.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/LoopIndicator.test.tsx index 91e51ea650..501300dd54 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/LoopIndicator.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/LoopIndicator.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { LoopIndicator } from '../../../src/adaptive-flow-renderer/components/LoopIndicator'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/OffsetContainer.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/OffsetContainer.test.tsx index 52be45c268..7768c425c7 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/OffsetContainer.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/OffsetContainer.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { OffsetContainer } from '../../../src/adaptive-flow-renderer/components/OffsetContainer'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/SVGContainer.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/SVGContainer.test.tsx index 93ff5ff221..b8326b5c6d 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/SVGContainer.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/components/SVGContainer.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { SVGContainer } from '../../../src/adaptive-flow-renderer/components/SVGContainer'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/utils/EdgeUtil.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/utils/EdgeUtil.test.tsx index 0152af5054..b25f6f0d6a 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/utils/EdgeUtil.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/utils/EdgeUtil.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { drawSVGEdge } from '../../../src/adaptive-flow-renderer/utils/visual/EdgeUtil'; import { EdgeDirection } from '../../../src/adaptive-flow-renderer/models/EdgeData'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/utils/widgetRenderer.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/utils/widgetRenderer.test.tsx index 5047f26d24..f2a653e0ab 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/utils/widgetRenderer.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/utils/widgetRenderer.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { WidgetComponent, FlowEditorWidgetMap, FlowWidget } from '@bfc/extension-client'; import { renderUIWidget, UIWidgetContext } from '../../../src/adaptive-flow-renderer/utils/visual/widgetRenderer'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/ActionCard.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/ActionCard.test.tsx index 0ff082eae3..f64c3d0a84 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/ActionCard.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/ActionCard.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { ActionCard } from '../../../src/adaptive-flow-renderer/widgets'; import { AdaptiveKinds } from '../../../src/adaptive-flow-renderer/constants/AdaptiveKinds'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/DialogRef.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/DialogRef.test.tsx index 477089175c..fa6a90262d 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/DialogRef.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/DialogRef.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { DialogRef } from '../../../src/adaptive-flow-renderer/widgets'; import { AdaptiveKinds } from '../../../src/adaptive-flow-renderer/constants/AdaptiveKinds'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/ForeachWidget.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/ForeachWidget.test.tsx index c9f3f24d09..79880d665b 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/ForeachWidget.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/ForeachWidget.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { ForeachWidget } from '../../../src/adaptive-flow-renderer/widgets'; import { AdaptiveKinds } from '../../../src/adaptive-flow-renderer/constants/AdaptiveKinds'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/IfConditionWidget.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/IfConditionWidget.test.tsx index a6a872cf52..618405aa52 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/IfConditionWidget.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/IfConditionWidget.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { IfConditionWidget } from '../../../src/adaptive-flow-renderer/widgets'; import { AdaptiveKinds } from '../../../src/adaptive-flow-renderer/constants/AdaptiveKinds'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/PromptWidget.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/PromptWidget.test.tsx index 5d3c89a208..a8b03a7500 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/PromptWidget.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/PromptWidget.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { PromptWidget } from '../../../src/adaptive-flow-renderer/widgets'; import { AdaptiveKinds } from '../../../src/adaptive-flow-renderer/constants/AdaptiveKinds'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/SwitchConditionWidget.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/SwitchConditionWidget.test.tsx index 89c65e65a5..18a4aabde1 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/SwitchConditionWidget.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/SwitchConditionWidget.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { SwitchConditionWidget } from '../../../src/adaptive-flow-renderer/widgets'; import { AdaptiveKinds } from '../../../src/adaptive-flow-renderer/constants/AdaptiveKinds'; diff --git a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/icon.test.tsx b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/icon.test.tsx index 4bd4ead327..75269856fc 100644 --- a/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/icon.test.tsx +++ b/Composer/packages/adaptive-flow/__tests__/adaptive-flow-renderer/widgets/icon.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { Icon } from '../../../src/adaptive-flow-renderer/widgets/ActionHeader/icon'; diff --git a/Composer/packages/adaptive-flow/jest.config.js b/Composer/packages/adaptive-flow/jest.config.js index 0ce2e4e9f0..b842fc2841 100644 --- a/Composer/packages/adaptive-flow/jest.config.js +++ b/Composer/packages/adaptive-flow/jest.config.js @@ -1,3 +1,3 @@ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('adaptive-form', 'react'); diff --git a/Composer/packages/adaptive-flow/package.json b/Composer/packages/adaptive-flow/package.json index adde0e7f0e..6eed65671c 100644 --- a/Composer/packages/adaptive-flow/package.json +++ b/Composer/packages/adaptive-flow/package.json @@ -45,7 +45,7 @@ "react": "16.13.1" }, "devDependencies": { - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/lodash": "^4.14.146", "@types/react": "16.9.23", "format-message": "^6.2.3", diff --git a/Composer/packages/adaptive-flow/src/adaptive-flow-editor/AdaptiveFlowEditor.tsx b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/AdaptiveFlowEditor.tsx index e4b7af0d51..50dad3bc4c 100644 --- a/Composer/packages/adaptive-flow/src/adaptive-flow-editor/AdaptiveFlowEditor.tsx +++ b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/AdaptiveFlowEditor.tsx @@ -59,8 +59,9 @@ export interface VisualDesignerProps { onFocus?: (event: React.FocusEvent) => void; onBlur?: (event: React.FocusEvent) => void; schema?: JSONSchema7; + data?: any; } -const VisualDesigner: React.FC = ({ onFocus, onBlur, schema }): JSX.Element => { +const VisualDesigner: React.FC = ({ onFocus, onBlur, schema, data: inputData }): JSX.Element => { const { shellApi, ...shellData } = useShellApi(); const { schema: schemaFromPlugins, widgets: widgetsFromPlugins } = useFlowUIOptions(); const { @@ -69,7 +70,6 @@ const VisualDesigner: React.FC = ({ onFocus, onBlur, schema focusedActions, focusedTab, clipboardActions, - data: inputData, hosted, schemas, flowZoomRate, diff --git a/Composer/packages/extension-client/src/hooks/useDialogEditApi.ts b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useDialogEditApi.ts similarity index 95% rename from Composer/packages/extension-client/src/hooks/useDialogEditApi.ts rename to Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useDialogEditApi.ts index 689df57ff5..62986695ac 100644 --- a/Composer/packages/extension-client/src/hooks/useDialogEditApi.ts +++ b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useDialogEditApi.ts @@ -1,11 +1,9 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { BaseSchema, ShellApi } from '@bfc/types'; +import { BaseSchema, ShellApi } from '@botframework-composer/types'; import { DialogUtils } from '@bfc/shared'; -import { useActionApi } from './useActionApi'; - export interface DialogApiContext { copyAction: (actionId: string) => BaseSchema; deleteAction: (actionId: BaseSchema) => BaseSchema; @@ -16,7 +14,7 @@ export interface DialogApiContext { const { disableNodes, enableNodes, appendNodesAfter, queryNodes, insertNodes, deleteNode, deleteNodes } = DialogUtils; export function useDialogEditApi(shellApi: ShellApi) { - const { constructActions, copyActions, deleteAction, deleteActions } = useActionApi(shellApi); + const { constructActions, copyActions, deleteAction, deleteActions } = shellApi; async function insertActions( dialogId: string, diff --git a/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useEditorEventApi.ts b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useEditorEventApi.ts index 3477d7573f..a1bbe28bd8 100644 --- a/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useEditorEventApi.ts +++ b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useEditorEventApi.ts @@ -3,7 +3,7 @@ import { DialogUtils, SDKKinds, ShellApi, registerEditorAPI } from '@bfc/shared'; import get from 'lodash/get'; -import { useDialogEditApi, useDialogApi, useActionApi } from '@bfc/extension-client'; +import { useDialogApi } from '@bfc/extension-client'; // TODO: leak of visual-sdk domain (designerCache) import { designerCache } from '../../adaptive-flow-renderer/utils/visual/DesignerCache'; @@ -18,10 +18,13 @@ import { NodeRendererContextValue } from '../contexts/NodeRendererContext'; import { SelectionContextData } from '../contexts/SelectionContext'; import { calculateRangeSelection } from '../utils/calculateRangeSelection'; +import { useDialogEditApi } from './useDialogEditApi'; + export const useEditorEventApi = ( state: { path: string; data: any; nodeContext: NodeRendererContextValue; selectionContext: SelectionContextData }, shellApi: ShellApi ) => { + const { actionsContainLuIntent } = shellApi; const { insertAction, insertActions, @@ -35,7 +38,6 @@ export const useEditorEventApi = ( updateRecognizer, } = useDialogEditApi(shellApi); const { createDialog, readDialog, updateDialog } = useDialogApi(shellApi); - const { actionsContainLuIntent } = useActionApi(shellApi); const { path, data, nodeContext, selectionContext } = state; const { focusedId, focusedEvent, clipboardActions, dialogFactory } = nodeContext; const { selectedIds, setSelectedIds, selectableElements } = selectionContext; diff --git a/Composer/packages/adaptive-form/jest.config.js b/Composer/packages/adaptive-form/jest.config.js index b5a508c259..a205ac1acd 100644 --- a/Composer/packages/adaptive-form/jest.config.js +++ b/Composer/packages/adaptive-form/jest.config.js @@ -2,7 +2,7 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('adaptive-form', 'react', { coveragePathIgnorePatterns: ['defaultRoleSchema.ts', 'defaultUiSchema.ts'], diff --git a/Composer/packages/adaptive-form/package.json b/Composer/packages/adaptive-form/package.json index 2a91119915..1dcbf60460 100644 --- a/Composer/packages/adaptive-form/package.json +++ b/Composer/packages/adaptive-form/package.json @@ -33,7 +33,7 @@ "@bfc/code-editor": "*", "@bfc/extension-client": "*", "@bfc/intellisense": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/lodash": "^4.14.149", "@types/react": "16.9.23", "format-message": "^6.2.3", diff --git a/Composer/packages/adaptive-form/src/components/__tests__/ErrorMessage.test.tsx b/Composer/packages/adaptive-form/src/components/__tests__/ErrorMessage.test.tsx index 678436d1f0..77262d4655 100644 --- a/Composer/packages/adaptive-form/src/components/__tests__/ErrorMessage.test.tsx +++ b/Composer/packages/adaptive-form/src/components/__tests__/ErrorMessage.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, waitFor } from '@bfc/test-utils'; +import { render, waitFor } from '@botframework-composer/test-utils'; import { ErrorMessage } from '../ErrorMessage'; diff --git a/Composer/packages/adaptive-form/src/components/__tests__/FieldLabel.test.tsx b/Composer/packages/adaptive-form/src/components/__tests__/FieldLabel.test.tsx index 5d029b76f6..6b100d1e34 100644 --- a/Composer/packages/adaptive-form/src/components/__tests__/FieldLabel.test.tsx +++ b/Composer/packages/adaptive-form/src/components/__tests__/FieldLabel.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { FieldLabel } from '../FieldLabel'; diff --git a/Composer/packages/adaptive-form/src/components/__tests__/FormRow.test.tsx b/Composer/packages/adaptive-form/src/components/__tests__/FormRow.test.tsx index c494ac8f94..676d17c175 100644 --- a/Composer/packages/adaptive-form/src/components/__tests__/FormRow.test.tsx +++ b/Composer/packages/adaptive-form/src/components/__tests__/FormRow.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { FormRow, FormRowProps, getRowProps } from '../FormRow'; diff --git a/Composer/packages/adaptive-form/src/components/__tests__/LoadingTimeout.test.tsx b/Composer/packages/adaptive-form/src/components/__tests__/LoadingTimeout.test.tsx index 3ee810fbf4..83ed0f608a 100644 --- a/Composer/packages/adaptive-form/src/components/__tests__/LoadingTimeout.test.tsx +++ b/Composer/packages/adaptive-form/src/components/__tests__/LoadingTimeout.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, act } from '@bfc/test-utils'; +import { render, act } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { LoadingTimeout } from '../LoadingTimeout'; diff --git a/Composer/packages/adaptive-form/src/components/__tests__/SchemaField.test.tsx b/Composer/packages/adaptive-form/src/components/__tests__/SchemaField.test.tsx index 76bd26f4f1..6ec0d591f2 100644 --- a/Composer/packages/adaptive-form/src/components/__tests__/SchemaField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/__tests__/SchemaField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, waitFor, fireEvent } from '@bfc/test-utils'; +import { render, waitFor, fireEvent } from '@botframework-composer/test-utils'; import { FieldProps, useFormConfig } from '@bfc/extension-client'; import assign from 'lodash/assign'; diff --git a/Composer/packages/adaptive-form/src/components/fields/ExpressionField/__tests__/ExpressionField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/ExpressionField/__tests__/ExpressionField.test.tsx index 837860747d..03ebe6efcd 100644 --- a/Composer/packages/adaptive-form/src/components/fields/ExpressionField/__tests__/ExpressionField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/ExpressionField/__tests__/ExpressionField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { ExpressionField } from '../ExpressionField'; diff --git a/Composer/packages/adaptive-form/src/components/fields/OneOfField/__tests__/OneOfField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/OneOfField/__tests__/OneOfField.test.tsx index e1811559c4..9ca3a80365 100644 --- a/Composer/packages/adaptive-form/src/components/fields/OneOfField/__tests__/OneOfField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/OneOfField/__tests__/OneOfField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent, screen } from '@bfc/test-utils'; +import { render, fireEvent, screen } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { OneOfField } from '../OneOfField'; diff --git a/Composer/packages/adaptive-form/src/components/fields/OpenObjectField/__tests__/ObjectItem.test.tsx b/Composer/packages/adaptive-form/src/components/fields/OpenObjectField/__tests__/ObjectItem.test.tsx index 1443c42dd3..4c30bed0a5 100644 --- a/Composer/packages/adaptive-form/src/components/fields/OpenObjectField/__tests__/ObjectItem.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/OpenObjectField/__tests__/ObjectItem.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent, getByText, waitFor } from '@bfc/test-utils'; +import { render, fireEvent, getByText, waitFor } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { ObjectItem } from '../ObjectItem'; diff --git a/Composer/packages/adaptive-form/src/components/fields/OpenObjectField/__tests__/OpenObjectField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/OpenObjectField/__tests__/OpenObjectField.test.tsx index 2df2741b7b..0e7d2a785c 100644 --- a/Composer/packages/adaptive-form/src/components/fields/OpenObjectField/__tests__/OpenObjectField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/OpenObjectField/__tests__/OpenObjectField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent, within, getByText } from '@bfc/test-utils'; +import { render, fireEvent, within, getByText } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { OpenObjectField } from '../OpenObjectField'; diff --git a/Composer/packages/adaptive-form/src/components/fields/RegexIntentField.tsx b/Composer/packages/adaptive-form/src/components/fields/RegexIntentField.tsx index f0a0b395b5..60396d7bf4 100644 --- a/Composer/packages/adaptive-form/src/components/fields/RegexIntentField.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/RegexIntentField.tsx @@ -4,13 +4,15 @@ /** @jsx jsx */ import { jsx } from '@emotion/core'; import React, { useState, useEffect } from 'react'; -import { FieldProps, useShellApi } from '@bfc/extension-client'; -import { DialogInfo, RegexRecognizer } from '@bfc/shared'; +import { FieldProps, useShellApi, MicrosoftIDialog } from '@bfc/extension-client'; +import { RegexRecognizer } from '@bfc/shared'; + +import { useFormData } from '../../hooks'; import { StringField } from './StringField'; -function getRegexIntentPattern(currentDialog: DialogInfo, intent: string): string { - const recognizer = currentDialog.content.recognizer as RegexRecognizer; +function getRegexIntentPattern(formData: MicrosoftIDialog, intent: string): string { + const recognizer = formData.recognizer as RegexRecognizer; let pattern = ''; if (!recognizer) { @@ -26,14 +28,15 @@ function getRegexIntentPattern(currentDialog: DialogInfo, intent: string): strin const RegexIntentField: React.FC = ({ value: intentName, ...rest }) => { const { currentDialog, shellApi } = useShellApi(); - const [localValue, setLocalValue] = useState(getRegexIntentPattern(currentDialog, intentName)); + const formData = useFormData(); + const [localValue, setLocalValue] = useState(getRegexIntentPattern(formData, intentName)); // if the intent name changes or intent names in the regex patterns // we need to reset the local value useEffect(() => { - const pattern = getRegexIntentPattern(currentDialog, intentName); + const pattern = getRegexIntentPattern(formData, intentName); setLocalValue(pattern); - }, [intentName, currentDialog.content.recognizer?.intents.map((i) => i.intent)]); + }, [intentName, (formData.recognizer as RegexRecognizer)?.intents.map((i) => i.intent)]); const handleIntentChange = (pattern?: string) => { setLocalValue(pattern ?? ''); diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/ArrayField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/ArrayField.test.tsx index b4355da8a5..18ce6771ff 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/ArrayField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/ArrayField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { ArrayField } from '../ArrayField'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/ArrayFieldItem.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/ArrayFieldItem.tsx index 3ffcb51ac6..5d3ee11add 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/ArrayFieldItem.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/ArrayFieldItem.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent, screen } from '@bfc/test-utils'; +import { render, fireEvent, screen } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { ArrayFieldItem } from '../ArrayFieldItem'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/BooleanField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/BooleanField.test.tsx index ea58cc8318..fe9b22ec32 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/BooleanField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/BooleanField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { BooleanField } from '../BooleanField'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/FieldSets.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/FieldSets.test.tsx index ec11b16f44..bc81567a1a 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/FieldSets.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/FieldSets.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent, act } from '@bfc/test-utils'; +import { render, fireEvent, act } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { Fieldsets } from '../FieldSets'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/IntentField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/IntentField.test.tsx index 4f1571e169..1636dd6eb1 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/IntentField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/IntentField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { useRecognizerConfig } from '@bfc/extension-client'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/JsonField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/JsonField.test.tsx index f04e0aade0..734fdabb9b 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/JsonField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/JsonField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { JsonField } from '../JsonField'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/NumberField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/NumberField.test.tsx index eef7217830..5a229da4c0 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/NumberField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/NumberField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { NumberField } from '../NumberField'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/ObjectArrayField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/ObjectArrayField.test.tsx index 804ead2226..af54442bcd 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/ObjectArrayField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/ObjectArrayField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { useShellApi } from '@bfc/extension-client'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/ObjectField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/ObjectField.test.tsx index e45d78ba2d..30e9dae405 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/ObjectField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/ObjectField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { ObjectField } from '../ObjectField'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/RecognizerField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/RecognizerField.test.tsx index f27b62a2dd..18b9bc371c 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/RecognizerField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/RecognizerField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent, screen } from '@bfc/test-utils'; +import { render, fireEvent, screen } from '@botframework-composer/test-utils'; import { useRecognizerConfig, useShellApi } from '@bfc/extension-client'; import assign from 'lodash/assign'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/RegexIntentField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/RegexIntentField.test.tsx index 496ade1c06..7a8751b850 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/RegexIntentField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/RegexIntentField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { useShellApi } from '@bfc/extension-client'; @@ -21,10 +21,11 @@ function renderSubject(overrides = {}, shellOverrides = {}) { { currentDialog: { content: { recognizer: undefined }, - shellApi: { - updateRegExIntent: jest.fn(), - }, }, + shellApi: { + updateRegExIntent: jest.fn(), + }, + focusedSteps: [], }, shellOverrides ) diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/SelectField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/SelectField.test.tsx index e966b21d3c..5692c77e69 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/SelectField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/SelectField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent, screen } from '@bfc/test-utils'; +import { render, fireEvent, screen } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { SelectField } from '../SelectField'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/StringField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/StringField.test.tsx index 2b68aee7c1..abaa31ae2e 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/StringField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/StringField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import { StringField, borderStyles } from '../StringField'; diff --git a/Composer/packages/adaptive-form/src/components/fields/__tests__/UnsupportedField.test.tsx b/Composer/packages/adaptive-form/src/components/fields/__tests__/UnsupportedField.test.tsx index d32534b2dd..e20bfaf489 100644 --- a/Composer/packages/adaptive-form/src/components/fields/__tests__/UnsupportedField.test.tsx +++ b/Composer/packages/adaptive-form/src/components/fields/__tests__/UnsupportedField.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import assign from 'lodash/assign'; import { UnsupportedField } from '../UnsupportedField'; diff --git a/Composer/packages/adaptive-form/src/hooks/index.ts b/Composer/packages/adaptive-form/src/hooks/index.ts new file mode 100644 index 0000000000..d5e0d3cf0f --- /dev/null +++ b/Composer/packages/adaptive-form/src/hooks/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +export * from './useFormData'; diff --git a/Composer/packages/adaptive-form/src/hooks/useFormData.ts b/Composer/packages/adaptive-form/src/hooks/useFormData.ts new file mode 100644 index 0000000000..e61d8ae610 --- /dev/null +++ b/Composer/packages/adaptive-form/src/hooks/useFormData.ts @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { useMemo } from 'react'; +import get from 'lodash/get'; +import { useShellApi, MicrosoftIDialog } from '@bfc/extension-client'; + +/** + * Returns data for current form context + */ +export function useFormData() { + const { ...shellData } = useShellApi(); + const { currentDialog, focusedSteps } = shellData; + + return useMemo(() => { + if (currentDialog?.content) { + return focusedSteps[0] ? get(currentDialog.content, focusedSteps[0]) : currentDialog.content; + } else { + return {}; + } + }, [currentDialog, focusedSteps[0]]) as MicrosoftIDialog; +} diff --git a/Composer/packages/adaptive-form/src/index.ts b/Composer/packages/adaptive-form/src/index.ts index 45459b07f2..5ff633c394 100644 --- a/Composer/packages/adaptive-form/src/index.ts +++ b/Composer/packages/adaptive-form/src/index.ts @@ -4,6 +4,7 @@ import { AdaptiveForm } from './components'; export * from './AdaptiveFormContext'; export * from './components'; +export * from './hooks'; export * from './utils'; export default AdaptiveForm; diff --git a/Composer/packages/adaptive-form/src/utils/__tests__/arrayUtils.test.ts b/Composer/packages/adaptive-form/src/utils/__tests__/arrayUtils.test.ts index 5711894da8..832b609806 100644 --- a/Composer/packages/adaptive-form/src/utils/__tests__/arrayUtils.test.ts +++ b/Composer/packages/adaptive-form/src/utils/__tests__/arrayUtils.test.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { renderHook, act } from '@bfc/test-utils/lib/hooks'; +import { renderHook, act } from '@botframework-composer/test-utils/lib/hooks'; import { ArrayItem, getArrayItemProps, useArrayItems } from '../arrayUtils'; diff --git a/Composer/packages/adaptive-form/src/utils/__tests__/objectUtils.test.ts b/Composer/packages/adaptive-form/src/utils/__tests__/objectUtils.test.ts index 8bf8147b22..e7fa107d94 100644 --- a/Composer/packages/adaptive-form/src/utils/__tests__/objectUtils.test.ts +++ b/Composer/packages/adaptive-form/src/utils/__tests__/objectUtils.test.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { renderHook, act } from '@bfc/test-utils/lib/hooks'; +import { renderHook, act } from '@botframework-composer/test-utils/lib/hooks'; import { getPropertyItemProps, useObjectItems } from '../objectUtils'; diff --git a/Composer/packages/client/__tests__/components/CreationFlow/CreateOptions/index.test.tsx b/Composer/packages/client/__tests__/components/CreationFlow/CreateOptions/index.test.tsx index 445e84c1dc..865df497fd 100644 --- a/Composer/packages/client/__tests__/components/CreationFlow/CreateOptions/index.test.tsx +++ b/Composer/packages/client/__tests__/components/CreationFlow/CreateOptions/index.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { fireEvent } from '@bfc/test-utils'; +import { fireEvent } from '@botframework-composer/test-utils'; import { renderWithRecoil } from '../../../testUtils'; import { CreateOptions } from '../../../../src/components/CreationFlow/CreateOptions'; diff --git a/Composer/packages/client/__tests__/components/CreationFlow/DefineConversation/index.test.tsx b/Composer/packages/client/__tests__/components/CreationFlow/DefineConversation/index.test.tsx index edebf38a00..3ce9487e14 100644 --- a/Composer/packages/client/__tests__/components/CreationFlow/DefineConversation/index.test.tsx +++ b/Composer/packages/client/__tests__/components/CreationFlow/DefineConversation/index.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { fireEvent, act, waitFor } from '@bfc/test-utils'; +import { fireEvent, act, waitFor } from '@botframework-composer/test-utils'; import { renderWithRecoil } from '../../../testUtils'; import { StorageFolder } from '../../../../src/recoilModel/types'; diff --git a/Composer/packages/client/__tests__/components/CreationFlow/LocationBrowser/FileSelector.test.tsx b/Composer/packages/client/__tests__/components/CreationFlow/LocationBrowser/FileSelector.test.tsx index 88c0a3f6f5..62395354c1 100644 --- a/Composer/packages/client/__tests__/components/CreationFlow/LocationBrowser/FileSelector.test.tsx +++ b/Composer/packages/client/__tests__/components/CreationFlow/LocationBrowser/FileSelector.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { render, fireEvent, act } from '@bfc/test-utils'; +import { render, fireEvent, act } from '@botframework-composer/test-utils'; import { StorageFolder } from '../../../../src/recoilModel/types'; import { FileSelector } from '../../../../src/components/CreationFlow/FileSelector'; diff --git a/Composer/packages/client/__tests__/components/CreationFlow/LocationBrowser/LocationSelectContent.test.tsx b/Composer/packages/client/__tests__/components/CreationFlow/LocationBrowser/LocationSelectContent.test.tsx index 8f144f50b5..2dee41bf63 100644 --- a/Composer/packages/client/__tests__/components/CreationFlow/LocationBrowser/LocationSelectContent.test.tsx +++ b/Composer/packages/client/__tests__/components/CreationFlow/LocationBrowser/LocationSelectContent.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { fireEvent } from '@bfc/test-utils'; +import { fireEvent } from '@botframework-composer/test-utils'; import { MutableSnapshot } from 'recoil'; import { StorageFolder } from '../../../../src/recoilModel/types'; diff --git a/Composer/packages/client/__tests__/components/CreationFlow/index.test.tsx b/Composer/packages/client/__tests__/components/CreationFlow/index.test.tsx index a9987ec5e4..2a1206494e 100644 --- a/Composer/packages/client/__tests__/components/CreationFlow/index.test.tsx +++ b/Composer/packages/client/__tests__/components/CreationFlow/index.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { render, fireEvent, act } from '@bfc/test-utils'; +import { render, fireEvent, act } from '@botframework-composer/test-utils'; import { createHistory, createMemorySource, LocationProvider } from '@reach/router'; import { RecoilRoot } from 'recoil'; diff --git a/Composer/packages/client/__tests__/components/DialogWrapper/index.test.tsx b/Composer/packages/client/__tests__/components/DialogWrapper/index.test.tsx index 84f807daec..0adbc9e2d3 100644 --- a/Composer/packages/client/__tests__/components/DialogWrapper/index.test.tsx +++ b/Composer/packages/client/__tests__/components/DialogWrapper/index.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { DialogWrapper, DialogTypes } from '@bfc/ui-shared'; describe('', () => { diff --git a/Composer/packages/client/__tests__/components/MultiLanguage/MultiLanguage.test.tsx b/Composer/packages/client/__tests__/components/MultiLanguage/MultiLanguage.test.tsx index a89f4e6d3b..f14eef616d 100644 --- a/Composer/packages/client/__tests__/components/MultiLanguage/MultiLanguage.test.tsx +++ b/Composer/packages/client/__tests__/components/MultiLanguage/MultiLanguage.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import { AddLanguageModal, DeleteLanguageModal } from '../../../src/components/MultiLanguage'; diff --git a/Composer/packages/client/__tests__/components/TestController/emulatorOpenButton.test.tsx b/Composer/packages/client/__tests__/components/TestController/emulatorOpenButton.test.tsx index 5cd7cd2294..9526e17d51 100644 --- a/Composer/packages/client/__tests__/components/TestController/emulatorOpenButton.test.tsx +++ b/Composer/packages/client/__tests__/components/TestController/emulatorOpenButton.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import { EmulatorOpenButton } from '../../../src/components/TestController/emulatorOpenButton'; import { BotStatus } from '../../../src/constants'; diff --git a/Composer/packages/client/__tests__/components/TestController/errorCallout.test.tsx b/Composer/packages/client/__tests__/components/TestController/errorCallout.test.tsx index a52ad3179d..a2a7411c37 100644 --- a/Composer/packages/client/__tests__/components/TestController/errorCallout.test.tsx +++ b/Composer/packages/client/__tests__/components/TestController/errorCallout.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { render, fireEvent, getByText } from '@bfc/test-utils'; +import { render, fireEvent, getByText } from '@botframework-composer/test-utils'; import { ErrorCallout } from '../../../src/components/TestController/errorCallout'; diff --git a/Composer/packages/client/__tests__/components/TestController/errorInfo.test.tsx b/Composer/packages/client/__tests__/components/TestController/errorInfo.test.tsx index 18893b081f..e6b70e9b33 100644 --- a/Composer/packages/client/__tests__/components/TestController/errorInfo.test.tsx +++ b/Composer/packages/client/__tests__/components/TestController/errorInfo.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { render, fireEvent } from '@bfc/test-utils'; +import { render, fireEvent } from '@botframework-composer/test-utils'; import { ErrorInfo } from '../../../src/components/TestController/errorInfo'; diff --git a/Composer/packages/client/__tests__/components/TestController/loading.test.tsx b/Composer/packages/client/__tests__/components/TestController/loading.test.tsx index d51b5f40fc..005befb54c 100644 --- a/Composer/packages/client/__tests__/components/TestController/loading.test.tsx +++ b/Composer/packages/client/__tests__/components/TestController/loading.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { Loading } from '../../../src/components/TestController/loading'; import { BotStatus } from '../../../src/constants'; diff --git a/Composer/packages/client/__tests__/components/TestController/publish-luis-modal.test.tsx b/Composer/packages/client/__tests__/components/TestController/publish-luis-modal.test.tsx index ee850212a2..dc4b18d626 100644 --- a/Composer/packages/client/__tests__/components/TestController/publish-luis-modal.test.tsx +++ b/Composer/packages/client/__tests__/components/TestController/publish-luis-modal.test.tsx @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import * as React from 'react'; -import { fireEvent } from '@bfc/test-utils'; +import { fireEvent } from '@botframework-composer/test-utils'; import { PublishDialog } from '../../../src/components/TestController/publishDialog'; import { botDisplayNameState, settingsState, dispatcherState, currentProjectIdState } from '../../../src/recoilModel'; diff --git a/Composer/packages/client/__tests__/components/conversation.test.jsx b/Composer/packages/client/__tests__/components/conversation.test.jsx index 723f32b6ad..22fee58d48 100644 --- a/Composer/packages/client/__tests__/components/conversation.test.jsx +++ b/Composer/packages/client/__tests__/components/conversation.test.jsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import '../../src/components/Conversation'; diff --git a/Composer/packages/client/__tests__/components/createDialogModal.test.tsx b/Composer/packages/client/__tests__/components/createDialogModal.test.tsx index be19a52005..1c5d5110c8 100644 --- a/Composer/packages/client/__tests__/components/createDialogModal.test.tsx +++ b/Composer/packages/client/__tests__/components/createDialogModal.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { fireEvent, act, waitFor } from '@bfc/test-utils'; +import { fireEvent, act, waitFor } from '@botframework-composer/test-utils'; import { CreateDialogModal } from '../../src/pages/design/createDialogModal'; import { renderWithRecoil } from '../testUtils'; diff --git a/Composer/packages/client/__tests__/components/createQnAModal.test.tsx b/Composer/packages/client/__tests__/components/createQnAModal.test.tsx index 702515fc5b..c48efaa4fe 100644 --- a/Composer/packages/client/__tests__/components/createQnAModal.test.tsx +++ b/Composer/packages/client/__tests__/components/createQnAModal.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { fireEvent } from '@bfc/test-utils'; +import { fireEvent } from '@botframework-composer/test-utils'; import { renderWithRecoil } from '../testUtils/renderWithRecoil'; import CreateQnAFromUrlModal from '../../src/components/QnA/CreateQnAFromUrlModal'; diff --git a/Composer/packages/client/__tests__/components/design.test.tsx b/Composer/packages/client/__tests__/components/design.test.tsx index 3231e33d7a..dd71a51c56 100644 --- a/Composer/packages/client/__tests__/components/design.test.tsx +++ b/Composer/packages/client/__tests__/components/design.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import * as React from 'react'; -import { fireEvent } from '@bfc/test-utils'; +import { fireEvent } from '@botframework-composer/test-utils'; import { DialogInfo } from '@bfc/shared'; import { renderWithRecoil } from '../testUtils'; @@ -28,7 +28,7 @@ describe('', () => { const { findByText } = renderWithRecoil( ({ + create: jest.fn().mockReturnThis(), + get: jest.fn(), +})); + function renderWithRouter(ui, { route = '/dialogs/home', history = createHistory(createMemorySource(route)) } = {}) { return { ...render({ui}), diff --git a/Composer/packages/client/__tests__/shell/lgApi.test.tsx b/Composer/packages/client/__tests__/shell/lgApi.test.tsx index b35ed50a06..13a28adb8f 100644 --- a/Composer/packages/client/__tests__/shell/lgApi.test.tsx +++ b/Composer/packages/client/__tests__/shell/lgApi.test.tsx @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { renderHook } from '@bfc/test-utils/lib/hooks'; +import { renderHook } from '@botframework-composer/test-utils/lib/hooks'; import * as React from 'react'; import { RecoilRoot } from 'recoil'; diff --git a/Composer/packages/client/__tests__/shell/luApi.test.tsx b/Composer/packages/client/__tests__/shell/luApi.test.tsx index 215c2cd7d1..4c910d47eb 100644 --- a/Composer/packages/client/__tests__/shell/luApi.test.tsx +++ b/Composer/packages/client/__tests__/shell/luApi.test.tsx @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { renderHook } from '@bfc/test-utils/lib/hooks'; +import { renderHook } from '@botframework-composer/test-utils/lib/hooks'; import * as React from 'react'; import { RecoilRoot } from 'recoil'; diff --git a/Composer/packages/client/__tests__/shell/triggerApi.test.tsx b/Composer/packages/client/__tests__/shell/triggerApi.test.tsx index 50931022b8..92aef42c06 100644 --- a/Composer/packages/client/__tests__/shell/triggerApi.test.tsx +++ b/Composer/packages/client/__tests__/shell/triggerApi.test.tsx @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { renderHook } from '@bfc/test-utils/lib/hooks'; +import { renderHook } from '@botframework-composer/test-utils/lib/hooks'; import * as React from 'react'; import { RecoilRoot } from 'recoil'; diff --git a/Composer/packages/client/__tests__/testUtils/react-recoil-hooks-testing-library.test.tsx b/Composer/packages/client/__tests__/testUtils/react-recoil-hooks-testing-library.test.tsx index 36fcc9a943..8e77c1e292 100644 --- a/Composer/packages/client/__tests__/testUtils/react-recoil-hooks-testing-library.test.tsx +++ b/Composer/packages/client/__tests__/testUtils/react-recoil-hooks-testing-library.test.tsx @@ -3,7 +3,7 @@ import React, { useContext } from 'react'; import { atom, useRecoilState, useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { renderRecoilHook } from './react-recoil-hooks-testing-library'; diff --git a/Composer/packages/client/__tests__/testUtils/react-recoil-hooks-testing-library.tsx b/Composer/packages/client/__tests__/testUtils/react-recoil-hooks-testing-library.tsx index 2c5faa5a86..58206190f0 100644 --- a/Composer/packages/client/__tests__/testUtils/react-recoil-hooks-testing-library.tsx +++ b/Composer/packages/client/__tests__/testUtils/react-recoil-hooks-testing-library.tsx @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { renderHook, RenderHookResult } from '@bfc/test-utils/lib/hooks'; +import { renderHook, RenderHookResult } from '@botframework-composer/test-utils/lib/hooks'; import React, { useEffect, useRef } from 'react'; import { RecoilRoot, RecoilState, useSetRecoilState } from 'recoil'; import reduce from 'lodash/reduce'; diff --git a/Composer/packages/client/__tests__/testUtils/renderWithRecoil.tsx b/Composer/packages/client/__tests__/testUtils/renderWithRecoil.tsx index 794aabc9b3..9010ca7e86 100644 --- a/Composer/packages/client/__tests__/testUtils/renderWithRecoil.tsx +++ b/Composer/packages/client/__tests__/testUtils/renderWithRecoil.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { RecoilRoot, MutableSnapshot } from 'recoil'; import noop from 'lodash/noop'; diff --git a/Composer/packages/client/__tests__/testUtils/renderWithRecoilAndContext.tsx b/Composer/packages/client/__tests__/testUtils/renderWithRecoilAndContext.tsx index 90044021de..e41ce3bc7c 100644 --- a/Composer/packages/client/__tests__/testUtils/renderWithRecoilAndContext.tsx +++ b/Composer/packages/client/__tests__/testUtils/renderWithRecoilAndContext.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { RecoilRoot, MutableSnapshot } from 'recoil'; import noop from 'lodash/noop'; diff --git a/Composer/packages/client/jest.config.js b/Composer/packages/client/jest.config.js index 608e8d2da2..62e7372e5d 100644 --- a/Composer/packages/client/jest.config.js +++ b/Composer/packages/client/jest.config.js @@ -1,5 +1,5 @@ const path = require('path'); -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('client', 'react', { setupFilesAfterEnv: [path.resolve(__dirname, 'setupTests.ts')], diff --git a/Composer/packages/client/package.json b/Composer/packages/client/package.json index 5bbfbb3ac3..00f12fa533 100644 --- a/Composer/packages/client/package.json +++ b/Composer/packages/client/package.json @@ -36,6 +36,7 @@ "@bfc/ui-plugin-select-dialog": "*", "@bfc/ui-plugin-select-skill-dialog": "*", "@bfc/ui-plugin-va-creation": "*", + "@botframework-composer/types": "*", "@emotion/core": "^10.0.27", "@reach/router": "^1.2.1", "@uifabric/fluent-theme": "^7.1.107", @@ -75,7 +76,7 @@ "@babel/cli": "7.2.3", "@babel/core": "7.3.4", "@babel/runtime": "7.3.4", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@emotion/babel-preset-css-prop": "^10.0.14", "@svgr/webpack": "4.1.0", "@types/jwt-decode": "^2.2.1", diff --git a/Composer/packages/client/src/components/PluginHost/PluginHost.tsx b/Composer/packages/client/src/components/PluginHost/PluginHost.tsx index 4b61efc9f7..0df82eabd5 100644 --- a/Composer/packages/client/src/components/PluginHost/PluginHost.tsx +++ b/Composer/packages/client/src/components/PluginHost/PluginHost.tsx @@ -4,7 +4,7 @@ /** @jsx jsx */ import { jsx, SerializedStyles } from '@emotion/core'; import React, { useState, useEffect, useRef } from 'react'; -import { Shell } from '@bfc/types'; +import { Shell } from '@botframework-composer/types'; import { PluginType } from '@bfc/extension-client'; import { PluginAPI } from '../../plugins/api'; diff --git a/Composer/packages/client/src/components/ProjectTree/TriggerCreationModal.tsx b/Composer/packages/client/src/components/ProjectTree/TriggerCreationModal.tsx index 8608db69c6..ff4707b4be 100644 --- a/Composer/packages/client/src/components/ProjectTree/TriggerCreationModal.tsx +++ b/Composer/packages/client/src/components/ProjectTree/TriggerCreationModal.tsx @@ -15,7 +15,7 @@ import { Dropdown } from 'office-ui-fabric-react/lib/Dropdown'; import { TextField } from 'office-ui-fabric-react/lib/TextField'; import { luIndexer, combineMessage } from '@bfc/indexers'; import { PlaceHolderSectionName } from '@bfc/indexers/lib/utils/luUtil'; -import { SDKKinds } from '@bfc/shared'; +import { SDKKinds, RegexRecognizer } from '@bfc/shared'; import { LuEditor, inlineModePlaceholder } from '@bfc/code-editor'; import { IComboBoxOption } from 'office-ui-fabric-react/lib/ComboBox'; import { useRecoilValue } from 'recoil'; @@ -214,7 +214,7 @@ export const TriggerCreationModal: React.FC = (props) const dialogFile = dialogs.find((dialog) => dialog.id === dialogId); const isRegEx = isRegExRecognizerType(dialogFile); const isLUISnQnA = isLUISnQnARecognizerType(dialogFile); - const regexIntents = dialogFile?.content?.recognizer?.intents ?? []; + const regexIntents = (dialogFile?.content?.recognizer as RegexRecognizer)?.intents ?? []; const initialFormData: TriggerFormData = { errors: initialFormDataErrors, $kind: intentTypeKey, @@ -268,7 +268,7 @@ export const TriggerCreationModal: React.FC = (props) e.preventDefault(); //If still have some errors here, it is a bug. - const errors = validateForm(selectedType, formData, isRegEx, regexIntents); + const errors = validateForm(selectedType, formData, isRegEx, regexIntents as any); if (shouldDisable(errors)) { setFormData({ ...formData, errors }); return; @@ -334,7 +334,7 @@ export const TriggerCreationModal: React.FC = (props) } setFormData({ ...formData, triggerPhrases: body, errors: { ...formData.errors, ...errors } }); }; - const errors = validateForm(selectedType, formData, isRegEx, regexIntents); + const errors = validateForm(selectedType, formData, isRegEx, regexIntents as any); const disable = shouldDisable(errors); return ( diff --git a/Composer/packages/client/src/pages/design/DesignPage.tsx b/Composer/packages/client/src/pages/design/DesignPage.tsx index 7823a001bc..e2bd82afd3 100644 --- a/Composer/packages/client/src/pages/design/DesignPage.tsx +++ b/Composer/packages/client/src/pages/design/DesignPage.tsx @@ -11,7 +11,7 @@ import get from 'lodash/get'; import { DialogInfo, PromptTab, getEditorAPI, registerEditorAPI } from '@bfc/shared'; import { ActionButton } from 'office-ui-fabric-react/lib/Button'; import { JsonEditor } from '@bfc/code-editor'; -import { EditorExtension, useTriggerApi, PluginConfig } from '@bfc/extension-client'; +import { EditorExtension, PluginConfig } from '@bfc/extension-client'; import { useRecoilValue } from 'recoil'; import { LeftRightSplit } from '../../components/Split/LeftRightSplit'; @@ -54,6 +54,7 @@ import { CreateQnAModal } from '../../components/QnA'; import { triggerNotSupported } from '../../utils/dialogValidator'; import { undoFunctionState, undoVersionState } from '../../recoilModel/undo/history'; import { decodeDesignerPathToArrayPath } from '../../utils/convertUtils/designerPathEncoder'; +import { useTriggerApi } from '../../shell/triggerApi'; import { WarningMessage } from './WarningMessage'; import { @@ -160,7 +161,7 @@ const DesignPage: React.FC { const currentDialog = dialogs.find(({ id }) => id === dialogId); - const dialogContent = currentDialog?.content ? Object.assign({}, currentDialog.content) : { emptyDialog: true }; - if (!dialogContent.emptyDialog && !dialogContent.id) { + const dialogContent = currentDialog?.content ? Object.assign({}, currentDialog.content) : null; + if (dialogContent !== null && !dialogContent.id) { dialogContent.id = dialogId; updateDialog({ id: dialogId, content: dialogContent, projectId }); } diff --git a/Composer/packages/client/src/pages/design/PropertyEditor.tsx b/Composer/packages/client/src/pages/design/PropertyEditor.tsx index 03e887bafc..73c40582d1 100644 --- a/Composer/packages/client/src/pages/design/PropertyEditor.tsx +++ b/Composer/packages/client/src/pages/design/PropertyEditor.tsx @@ -9,6 +9,7 @@ import { FormErrors, JSONSchema7, useFormConfig, useShellApi } from '@bfc/extens import formatMessage from 'format-message'; import isEqual from 'lodash/isEqual'; import debounce from 'lodash/debounce'; +import get from 'lodash/get'; import { MicrosoftAdaptiveDialog } from '@bfc/shared'; import { formEditor } from './styles'; @@ -25,10 +26,18 @@ function resolveBaseSchema(schema: JSONSchema7, $kind: string): JSONSchema7 | un const PropertyEditor: React.FC = () => { const { shellApi, ...shellData } = useShellApi(); - const { currentDialog, data: formData = {}, focusPath, focusedSteps, focusedTab, schemas } = shellData; + const { currentDialog, focusPath, focusedSteps, focusedTab, schemas } = shellData; const { onFocusSteps } = shellApi; - const [localData, setLocalData] = useState(formData as MicrosoftAdaptiveDialog); + const dialogData = useMemo(() => { + if (currentDialog?.content) { + return focusedSteps[0] ? get(currentDialog.content, focusedSteps[0]) : currentDialog.content; + } else { + return {}; + } + }, [currentDialog, focusedSteps[0]]); + + const [localData, setLocalData] = useState(dialogData as MicrosoftAdaptiveDialog); const syncData = useRef( // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -40,12 +49,12 @@ const PropertyEditor: React.FC = () => { ).current; useEffect(() => { - syncData(formData, localData); + syncData(dialogData, localData); return () => { syncData.cancel(); }; - }, [formData]); + }, [dialogData]); const formUIOptions = useFormConfig(); @@ -92,7 +101,7 @@ const PropertyEditor: React.FC = () => { useEffect(() => { const id = setTimeout(() => { - if (!isEqual(formData, localData)) { + if (!isEqual(dialogData, localData)) { shellApi.saveData(localData, focusedSteps[0]); } else { shellApi.commitChanges(); diff --git a/Composer/packages/client/src/pages/design/VisualEditor.tsx b/Composer/packages/client/src/pages/design/VisualEditor.tsx index 0d2e012ec0..708cf47a29 100644 --- a/Composer/packages/client/src/pages/design/VisualEditor.tsx +++ b/Composer/packages/client/src/pages/design/VisualEditor.tsx @@ -61,7 +61,7 @@ interface VisualEditorProps { const VisualEditor: React.FC = (props) => { const { ...shellData } = useShellApi(); - const { projectId } = shellData; + const { projectId, currentDialog } = shellData; const { openNewTriggerModal, onFocus, onBlur } = props; const [triggerButtonVisible, setTriggerButtonVisibility] = useState(false); const { onboardingAddCoachMarkRef } = useRecoilValue(dispatcherState); @@ -86,7 +86,12 @@ const VisualEditor: React.FC = (props) => { css={visualEditor(triggerButtonVisible || !selected)} data-testid="VisualEditor" > - + {!selected && onRenderBlankVisual(triggerButtonVisible, openNewTriggerModal)} diff --git a/Composer/packages/client/src/pages/design/exportSkillModal/content/SelectDialogs.tsx b/Composer/packages/client/src/pages/design/exportSkillModal/content/SelectDialogs.tsx index 9f83cdce31..e6373e4e26 100644 --- a/Composer/packages/client/src/pages/design/exportSkillModal/content/SelectDialogs.tsx +++ b/Composer/packages/client/src/pages/design/exportSkillModal/content/SelectDialogs.tsx @@ -58,8 +58,8 @@ const DescriptionColumn: React.FC = (props) => { ).current; useEffect(() => { - if (value !== content.$designer?.description) { - sync(updateDialog, value, content); + if (value !== content?.$designer?.description) { + sync(updateDialog, value ?? '', content); } }, [value, updateDialog]); diff --git a/Composer/packages/client/src/pages/design/exportSkillModal/generateSkillManifest.ts b/Composer/packages/client/src/pages/design/exportSkillModal/generateSkillManifest.ts index 767006135c..cd893c8e27 100644 --- a/Composer/packages/client/src/pages/design/exportSkillModal/generateSkillManifest.ts +++ b/Composer/packages/client/src/pages/design/exportSkillModal/generateSkillManifest.ts @@ -37,7 +37,7 @@ export const generateSkillManifest = ( const { content } = rootDialog; const triggers = selectedTriggers.reduce((acc: ITrigger[], { id: path }) => { - const trigger = get(content, path); + const trigger = get(content, path) as ITrigger; return trigger ? [...acc, trigger] : acc; }, []); @@ -128,10 +128,10 @@ export const generateDispatchModels = ( const luLanguages = intents.length ? rootLuFiles.reduce((acc, { empty, id }) => { const [name, locale] = id.split('.'); - const { content = {} } = dialogs.find(({ id }) => id === name) || {}; + const { content } = dialogs.find(({ id }) => id === name) || ({ content: {} } as DialogInfo); const { recognizer = '' } = content; - if (!recognizer.includes('.lu') || empty) { + if ((typeof recognizer === 'string' && !recognizer.includes('.lu')) || empty) { return acc; } @@ -152,10 +152,10 @@ export const generateDispatchModels = ( const languages = rootQnAFiles.reduce((acc, { empty, id }) => { const [name, locale] = id.split('.'); - const { content = {} } = dialogs.find(({ id }) => id === name) || {}; + const { content } = dialogs.find(({ id }) => id === name) || ({ content: {} } as DialogInfo); const { recognizer = '' } = content; - if (!recognizer.includes('.qna') || empty) { + if ((typeof recognizer === 'string' && !recognizer.includes('.qna')) || empty) { return acc; } diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/application.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/application.test.tsx index e41bf2110f..0609f4fd61 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/application.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/application.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useRecoilState, useRecoilValue } from 'recoil'; -import { act, RenderHookResult, HookResult } from '@bfc/test-utils/lib/hooks'; +import { act, RenderHookResult, HookResult } from '@botframework-composer/test-utils/lib/hooks'; // eslint-disable-next-line lodash/import-scope import debounce from 'lodash/debounce'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/botProjectFile.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/botProjectFile.test.tsx index df4050b152..678d906e3d 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/botProjectFile.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/botProjectFile.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { selector, useRecoilValue, selectorFamily, useRecoilState } from 'recoil'; -import { act, RenderHookResult, HookResult } from '@bfc/test-utils/lib/hooks'; +import { act, RenderHookResult, HookResult } from '@botframework-composer/test-utils/lib/hooks'; import noop from 'lodash/noop'; import { botProjectFileDispatcher } from '../botProjectFile'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/dialog.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/dialog.test.tsx index 7a4984ea88..ba7ea87a79 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/dialog.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/dialog.test.tsx @@ -3,7 +3,7 @@ import { useRecoilValue } from 'recoil'; import test from '@bfc/indexers'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { dialogsDispatcher } from '../dialogs'; import { renderRecoilHook } from '../../../../__tests__/testUtils'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/dialogSchema.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/dialogSchema.test.tsx index 6a5070e9dd..ae3c6139fb 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/dialogSchema.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/dialogSchema.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { dialogSchemaDispatcher } from '../dialogSchema'; import { renderRecoilHook } from '../../../../__tests__/testUtils'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/editor.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/editor.test.tsx index 29e2e22403..c18a592d26 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/editor.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/editor.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useRecoilState, useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { editorDispatcher } from '../editor'; import { renderRecoilHook } from '../../../../__tests__/testUtils'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/export.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/export.test.tsx index 0811086a2e..62a3a2b590 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/export.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/export.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import httpClient from '../../../utils/httpUtil'; import { exportDispatcher } from '../export'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/lg.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/lg.test.tsx index 34b42bf1d0..913b182e2e 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/lg.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/lg.test.tsx @@ -4,7 +4,7 @@ import { useRecoilState } from 'recoil'; import { LgFile, LgTemplate } from '@bfc/shared'; import { useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { lgDispatcher } from '../lg'; import { renderRecoilHook } from '../../../../__tests__/testUtils'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/lu.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/lu.test.tsx index 3b869891ee..6e6cd0df73 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/lu.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/lu.test.tsx @@ -4,7 +4,7 @@ import { useRecoilState } from 'recoil'; import { LuIntentSection, LuFile } from '@bfc/shared'; import { useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { luUtil } from '@bfc/indexers'; import { renderRecoilHook } from '../../../../__tests__/testUtils'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/multilang.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/multilang.test.tsx index 2383f43e87..4d0cd03677 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/multilang.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/multilang.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { renderRecoilHook } from '../../../../__tests__/testUtils'; import { diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/navigation.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/navigation.test.tsx index 44385b6fc4..7ef6a2d6c4 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/navigation.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/navigation.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { SDKKinds } from '@bfc/shared'; import { navigationDispatcher } from '../navigation'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/project.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/project.test.tsx index da7ac2075f..b29387b55a 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/project.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/project.test.tsx @@ -3,7 +3,7 @@ import { selector, useRecoilValue } from 'recoil'; import { v4 as uuid } from 'uuid'; -import { act, RenderHookResult, HookResult } from '@bfc/test-utils/lib/hooks'; +import { act, RenderHookResult, HookResult } from '@botframework-composer/test-utils/lib/hooks'; import { useRecoilState } from 'recoil'; import cloneDeep from 'lodash/cloneDeep'; import endsWith from 'lodash/endsWith'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/qna.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/qna.test.tsx index 306d4f235a..3800f10c2e 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/qna.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/qna.test.tsx @@ -5,7 +5,7 @@ import { useRecoilState } from 'recoil'; import { QnAFile } from '@bfc/shared'; import { qnaUtil } from '@bfc/indexers'; import { useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { qnaDispatcher } from '../qna'; import { renderRecoilHook } from '../../../../__tests__/testUtils'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/setting.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/setting.test.tsx index 035f0f0be2..8c6f4b3a4d 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/setting.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/setting.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { renderRecoilHook } from '../../../../__tests__/testUtils'; import { settingsState, currentProjectIdState, skillsState } from '../../atoms'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/skill.test.ts b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/skill.test.ts index 61ebcd3c70..ffeced8fc7 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/skill.test.ts +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/skill.test.ts @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { Skill } from '@bfc/shared'; import { skillDispatcher } from '../skill'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/storage.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/storage.test.tsx index 696a1b53ab..29b27e6163 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/storage.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/storage.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useRecoilValue } from 'recoil'; -import { act, RenderHookResult, HookResult } from '@bfc/test-utils/lib/hooks'; +import { act, RenderHookResult, HookResult } from '@botframework-composer/test-utils/lib/hooks'; import httpClient from '../../../utils/httpUtil'; import { storageDispatcher } from '../storage'; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/user.test.ts b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/user.test.ts index 8db361f49a..343cffd0f6 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/user.test.ts +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/user.test.ts @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useRecoilValue } from 'recoil'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import jwtDecode from 'jwt-decode'; import { userDispatcher } from '../user'; diff --git a/Composer/packages/client/src/recoilModel/persistence/FilePersistence.ts b/Composer/packages/client/src/recoilModel/persistence/FilePersistence.ts index d8d6b65a94..378842a540 100644 --- a/Composer/packages/client/src/recoilModel/persistence/FilePersistence.ts +++ b/Composer/packages/client/src/recoilModel/persistence/FilePersistence.ts @@ -1,17 +1,20 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. + +import differenceWith from 'lodash/differenceWith'; +import isEqual from 'lodash/isEqual'; import { - BotAssets, - BotProjectFile, DialogInfo, DialogSchemaFile, DialogSetting, - FormDialogSchema, SkillManifest, + BotAssets, + BotProjectFile, + LuFile, + LgFile, + QnAFile, + FormDialogSchema, } from '@bfc/shared'; -import { LgFile, LuFile, QnAFile } from '@bfc/types'; -import differenceWith from 'lodash/differenceWith'; -import isEqual from 'lodash/isEqual'; import keys from 'lodash/keys'; import * as client from './http'; diff --git a/Composer/packages/client/src/recoilModel/persistence/__test__/FilePersistence.test.ts b/Composer/packages/client/src/recoilModel/persistence/__test__/FilePersistence.test.ts index 64b27a9cfb..854b2a7591 100644 --- a/Composer/packages/client/src/recoilModel/persistence/__test__/FilePersistence.test.ts +++ b/Composer/packages/client/src/recoilModel/persistence/__test__/FilePersistence.test.ts @@ -26,7 +26,7 @@ describe('test persistence layer', () => { it('test notify update', async () => { const previous = { projectId: 'test', - dialogs: [{ id: 'a', content: { a: 'old' } }] as DialogInfo[], + dialogs: ([{ id: 'a', content: { a: 'old' } }] as unknown) as DialogInfo[], dialogSchemas: [{ id: 'a', content: { a: 'old schema' } }] as DialogSchemaFile[], lgFiles: [{ id: 'a.en-us', content: '' }] as LgFile[], luFiles: [{ id: 'a.en-us', content: '' }] as LuFile[], @@ -34,7 +34,7 @@ describe('test persistence layer', () => { const current = { projectId: 'test', - dialogs: [{ id: 'a', content: { a: 'new' } }] as DialogInfo[], + dialogs: ([{ id: 'a', content: { a: 'new' } }] as unknown) as DialogInfo[], dialogSchemas: [{ id: 'a', content: { a: 'new schema' } }] as DialogSchemaFile[], lgFiles: [{ id: 'a.en-us', content: 'a.lg' }] as LgFile[], luFiles: [{ id: 'a.en-us', content: 'a.lu' }] as LuFile[], @@ -51,7 +51,7 @@ describe('test persistence layer', () => { it('test notify create', async () => { const previous = { projectId: 'test', - dialogs: [{ id: 'a', content: { a: 'a' } }] as DialogInfo[], + dialogs: ([{ id: 'a', content: { a: 'a' } }] as unknown) as DialogInfo[], dialogSchemas: [{ id: 'a', content: { a: 'a' } }] as DialogSchemaFile[], lgFiles: [{ id: 'a.en-us', content: 'a' }] as LgFile[], luFiles: [{ id: 'a.en-us', content: 'a' }] as LuFile[], @@ -59,10 +59,10 @@ describe('test persistence layer', () => { const current = { projectId: 'test', - dialogs: [ + dialogs: ([ { id: 'a', content: { a: 'a' } }, { id: 'b', content: { b: 'b' } }, - ] as DialogInfo[], + ] as unknown) as DialogInfo[], dialogSchemas: [ { id: 'a', content: { a: 'a' } }, { id: 'b', content: { b: 'b' } }, @@ -88,10 +88,10 @@ describe('test persistence layer', () => { it('test notify remove', async () => { const previous = { projectId: 'test', - dialogs: [ + dialogs: ([ { id: 'a', content: { a: 'a' } }, { id: 'b', content: { b: 'b.pre' } }, - ] as DialogInfo[], + ] as unknown) as DialogInfo[], dialogSchemas: [ { id: 'a', content: { a: 'a' } }, { id: 'b', content: { b: 'b.pre' } }, @@ -108,7 +108,7 @@ describe('test persistence layer', () => { const current = { projectId: 'test', - dialogs: [{ id: 'a', content: { a: 'a' } }] as DialogInfo[], + dialogs: ([{ id: 'a', content: { a: 'a' } }] as unknown) as DialogInfo[], dialogSchemas: [{ id: 'a', content: { a: 'a' } }] as DialogSchemaFile[], lgFiles: [{ id: 'a.en-us', content: 'a' }] as LgFile[], luFiles: [{ id: 'a.en-us', content: 'a' }] as LuFile[], diff --git a/Composer/packages/client/src/shell/actionApi.ts b/Composer/packages/client/src/shell/actionApi.ts new file mode 100644 index 0000000000..308d03c236 --- /dev/null +++ b/Composer/packages/client/src/shell/actionApi.ts @@ -0,0 +1,153 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { + deepCopyActions, + deleteAction as destructAction, + deleteActions as destructActions, + FieldProcessorAsync, + walkAdaptiveActionList, + LgType, + LgMetaData, + LgTemplateRef, + LuType, + LuMetaData, +} from '@bfc/shared'; +import { LuIntentSection, MicrosoftIDialog } from '@botframework-composer/types'; + +import { useLgApi } from './lgApi'; +import { useLuApi } from './luApi'; + +export const useActionApi = (projectId: string) => { + const { getLgTemplates, removeLgTemplates, addLgTemplate } = useLgApi(projectId); + const { addLuIntent, getLuIntent, removeLuIntent } = useLuApi(projectId); + + const luFieldName = '_lu'; + + function actionsContainLuIntent(actions: MicrosoftIDialog[]): boolean { + let containLuIntents = false; + walkAdaptiveActionList(actions, (action) => { + if (action[luFieldName]) { + containLuIntents = true; + } + }); + return containLuIntents; + } + + const createLgTemplate = async ( + lgFileId: string, + lgText: string, + hostActionId: string, + hostActionData: MicrosoftIDialog, + hostFieldName: string + ): Promise => { + if (!lgText) return ''; + const newLgType = new LgType(hostActionData.$kind, hostFieldName).toString(); + const newLgTemplateName = new LgMetaData(newLgType, hostActionId).toString(); + const newLgTemplateRefStr = new LgTemplateRef(newLgTemplateName).toString(); + await addLgTemplate(lgFileId, newLgTemplateName, lgText); + return newLgTemplateRefStr; + }; + + const readLgTemplate = (lgText: string) => { + if (!lgText) return ''; + + const inputLgRef = LgTemplateRef.parse(lgText); + if (!inputLgRef) return lgText; + + const lgTemplates = getLgTemplates(inputLgRef.name); + if (!Array.isArray(lgTemplates) || !lgTemplates.length) return lgText; + + const targetTemplate = lgTemplates.find((x) => x.name === inputLgRef.name); + return targetTemplate ? targetTemplate.body : lgText; + }; + + const createLuIntent = async ( + luFildId: string, + intent: LuIntentSection | undefined, + hostResourceId: string, + hostResourceData: MicrosoftIDialog + ) => { + if (!intent) return; + + const newLuIntentType = new LuType(hostResourceData.$kind).toString(); + const newLuIntentName = new LuMetaData(newLuIntentType, hostResourceId).toString(); + const newLuIntent: LuIntentSection = { ...intent, Name: newLuIntentName }; + await addLuIntent(luFildId, newLuIntentName, newLuIntent); + return newLuIntentName; + }; + + const readLuIntent = (luFileId: string, hostResourceId: string, hostResourceData: MicrosoftIDialog) => { + const relatedLuIntentType = new LuType(hostResourceData.$kind).toString(); + const relatedLuIntentName = new LuMetaData(relatedLuIntentType, hostResourceId).toString(); + return getLuIntent(luFileId, relatedLuIntentName); + }; + + async function constructActions(dialogId: string, actions: MicrosoftIDialog[]) { + // '- hi' -> 'SendActivity_1234' + const referenceLgText: FieldProcessorAsync = async (fromId, fromAction, toId, toAction, lgFieldName) => + createLgTemplate(dialogId, fromAction[lgFieldName] as string, toId, toAction, lgFieldName); + + // LuIntentSection -> 'TextInput_Response_1234' + const referenceLuIntent: FieldProcessorAsync = async (fromId, fromAction, toId, toAction) => { + fromAction[luFieldName] && + (await createLuIntent(dialogId, fromAction[luFieldName] as LuIntentSection, toId, toAction)); + // during construction, remove the virtual LU field after intents persisted in file + delete toAction[luFieldName]; + }; + + return deepCopyActions(actions, referenceLgText, referenceLuIntent); + } + + async function copyActions(dialogId: string, actions: MicrosoftIDialog[]) { + // 'SendActivity_1234' -> '- hi' + const dereferenceLg: FieldProcessorAsync = async (fromId, fromAction, toId, toAction, lgFieldName) => + readLgTemplate(fromAction[lgFieldName] as string); + + // 'TextInput_Response_1234' -> LuIntentSection | undefined + const dereferenceLu: FieldProcessorAsync = async (fromId, fromAction, toId, toAction) => { + const luValue = readLuIntent(dialogId, fromId, fromAction); + // during copy, carry the LU data in virtual field + toAction[luFieldName] = luValue; + return luValue; + }; + + return deepCopyActions(actions, dereferenceLg, dereferenceLu); + } + + async function constructAction(dialogId: string, action: MicrosoftIDialog) { + const [newAction] = await constructActions(dialogId, [action]); + return newAction; + } + + async function copyAction(dialogId: string, action: MicrosoftIDialog) { + const [copiedAction] = await copyActions(dialogId, [action]); + return copiedAction; + } + + async function deleteAction(dialogId: string, action: MicrosoftIDialog) { + return destructAction( + action, + (templates: string[]) => removeLgTemplates(dialogId, templates), + (luIntents: string[]) => Promise.all(luIntents.map((intent) => removeLuIntent(dialogId, intent))) + ); + } + + async function deleteActions(dialogId: string, actions: MicrosoftIDialog[]) { + return destructActions( + actions, + (templates: string[]) => removeLgTemplates(dialogId, templates), + (luIntents: string[]) => Promise.all(luIntents.map((intent) => removeLuIntent(dialogId, intent))) + ); + } + + return { + constructAction, + constructActions, + copyAction, + copyActions, + deleteAction, + deleteActions, + actionsContainLuIntent, + }; +}; diff --git a/Composer/packages/client/src/shell/lgApi.ts b/Composer/packages/client/src/shell/lgApi.ts index 007c81970e..5013c87caf 100644 --- a/Composer/packages/client/src/shell/lgApi.ts +++ b/Composer/packages/client/src/shell/lgApi.ts @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useEffect, useState } from 'react'; -import { LgFile } from '@bfc/shared'; +import { LgFile, LgContextApi, LgTemplateRef } from '@bfc/shared'; import { useRecoilValue } from 'recoil'; import debounce from 'lodash/debounce'; import formatMessage from 'format-message'; @@ -20,7 +20,7 @@ function createLgApi( state: { focusPath: string; projectId: string }, actions: Dispatcher, lgFileResolver: (id: string) => LgFile | undefined -) { +): LgContextApi { const getLgTemplates = (id) => { if (id === undefined) throw new Error('must have a file id'); const focusedDialogId = state.focusPath.split('#').shift() || id; @@ -75,14 +75,21 @@ function createLgApi( }); }; - const removeLgTemplates = async (id, templateNames) => { + const removeLgTemplates = async (id: string, templateNames: string[]) => { const file = lgFileResolver(id); if (!file) throw new Error(fileNotFound(id)); if (!templateNames) throw new Error(TEMPLATE_ERROR); + const normalizedLgTemplates = templateNames + .map((x) => { + const lgTemplateRef = LgTemplateRef.parse(x); + return lgTemplateRef ? lgTemplateRef.name : x; + }) + .filter((x) => !!x); + return await actions.removeLgTemplates({ id: file.id, - templateNames, + templateNames: normalizedLgTemplates, projectId: state.projectId, }); }; diff --git a/Composer/packages/client/src/shell/luApi.ts b/Composer/packages/client/src/shell/luApi.ts index cbc43eae28..e94a6178c4 100644 --- a/Composer/packages/client/src/shell/luApi.ts +++ b/Composer/packages/client/src/shell/luApi.ts @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useEffect, useState } from 'react'; -import { LuFile, LuIntentSection, LuContextApi } from '@bfc/types'; +import { LuFile, LuIntentSection, LuContextApi } from '@botframework-composer/types'; import { useRecoilValue } from 'recoil'; import formatMessage from 'format-message'; import debounce from 'lodash/debounce'; diff --git a/Composer/packages/client/src/shell/triggerApi.ts b/Composer/packages/client/src/shell/triggerApi.ts index 4f0b20246b..f56b9f62d1 100644 --- a/Composer/packages/client/src/shell/triggerApi.ts +++ b/Composer/packages/client/src/shell/triggerApi.ts @@ -2,9 +2,18 @@ // Licensed under the MIT License. import { useEffect, useState } from 'react'; -import { LuFile, LgFile, DialogInfo, LgTemplateSamples } from '@bfc/shared'; +import { + LgTemplate, + LuFile, + LgFile, + DialogInfo, + ITriggerCondition, + SDKKinds, + BaseSchema, + MicrosoftIDialog, +} from '@botframework-composer/types'; import { useRecoilValue } from 'recoil'; -import { LgTemplate } from '@bfc/shared'; +import { LgTemplateSamples } from '@bfc/shared'; import get from 'lodash/get'; import { useResolvers } from '../hooks/useResolver'; @@ -13,13 +22,17 @@ import { schemasState, lgFilesState, dialogsState, localeState } from '../recoil import { Dispatcher } from '../recoilModel/dispatchers'; import { dispatcherState } from './../recoilModel/DispatcherWrapper'; +import { useActionApi } from './actionApi'; +import { useLuApi } from './luApi'; function createTriggerApi( state: { projectId; schemas; dialogs; locale; lgFiles }, dispatchers: Dispatcher, //TODO luFileResolver: (id: string) => LuFile | undefined, lgFileResolver: (id: string) => LgFile | undefined, - dialogResolver: (id: string) => DialogInfo | undefined + dialogResolver: (id: string) => DialogInfo | undefined, + deleteActions: (dialogId: string, actions: MicrosoftIDialog[]) => Promise, + removeLuIntent: (id: string, intentName: string) => void ) { const getDesignerIdFromDialogPath = (dialog, path) => { const value = get(dialog, path, ''); @@ -93,8 +106,26 @@ function createTriggerApi( selectTo(projectId, `triggers[${index}]`); } }; + + const deleteTrigger = (dialogId: string, trigger: ITriggerCondition) => { + if (!trigger) return; + + // Clean the lu resource on intent trigger + if (get(trigger, '$kind') === SDKKinds.OnIntent) { + const triggerIntent = get(trigger, 'intent', '') as string; + removeLuIntent(dialogId, triggerIntent); + } + + // Clean action resources + const actions = get(trigger, 'actions') as BaseSchema[]; + if (!actions || !Array.isArray(actions)) return; + + deleteActions(dialogId, actions); + }; + return { createTrigger: createTriggerHandler, + deleteTrigger, }; } @@ -103,6 +134,8 @@ export function useTriggerApi(projectId: string) { const lgFiles = useRecoilValue(lgFilesState(projectId)); const dialogs = useRecoilValue(dialogsState(projectId)); const locale = useRecoilValue(localeState(projectId)); + const { deleteActions } = useActionApi(projectId); + const { removeLuIntent } = useLuApi(projectId); const dispatchers = useRecoilValue(dispatcherState); const { luFileResolver, lgFileResolver, dialogResolver } = useResolvers(projectId); @@ -112,7 +145,9 @@ export function useTriggerApi(projectId: string) { dispatchers, luFileResolver, lgFileResolver, - dialogResolver + dialogResolver, + deleteActions, + removeLuIntent ) ); @@ -122,7 +157,9 @@ export function useTriggerApi(projectId: string) { dispatchers, luFileResolver, lgFileResolver, - dialogResolver + dialogResolver, + deleteActions, + removeLuIntent ); setApi(newApi); return () => { diff --git a/Composer/packages/client/src/shell/useShell.ts b/Composer/packages/client/src/shell/useShell.ts index 40931185e5..772bbfe669 100644 --- a/Composer/packages/client/src/shell/useShell.ts +++ b/Composer/packages/client/src/shell/useShell.ts @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useMemo, useRef } from 'react'; -import { ShellApi, ShellData, Shell, DialogSchemaFile, DialogInfo } from '@bfc/types'; +import { ShellApi, ShellData, Shell, DialogSchemaFile, DialogInfo } from '@botframework-composer/types'; import { useRecoilValue } from 'recoil'; import formatMessage from 'format-message'; @@ -34,11 +34,31 @@ import { useLgApi } from './lgApi'; import { useLuApi } from './luApi'; import { useQnaApi } from './qnaApi'; import { useTriggerApi } from './triggerApi'; +import { useActionApi } from './actionApi'; const FORM_EDITOR = 'PropertyEditor'; type EventSource = 'FlowEditor' | 'PropertyEditor' | 'DesignPage' | 'VaCreation'; +const stubDialog = (): DialogInfo => ({ + content: { + $kind: '', + }, + diagnostics: [], + displayName: '', + id: '', + isRoot: true, + lgFile: '', + lgTemplates: [], + luFile: '', + qnaFile: '', + referredLuIntents: [], + referredDialogs: [], + triggers: [], + intentTriggers: [], + skills: [], +}); + export function useShell(source: EventSource, projectId: string): Shell { const dialogMapRef = useRef({}); @@ -83,6 +103,7 @@ export function useShell(source: EventSource, projectId: string): Shell { const luApi = useLuApi(projectId); const qnaApi = useQnaApi(projectId); const triggerApi = useTriggerApi(projectId); + const actionApi = useActionApi(projectId); const { dialogId, selected, focused, promptTab } = designPageLocation; const dialogsMap = useMemo(() => { @@ -170,10 +191,6 @@ export function useShell(source: EventSource, projectId: string): Shell { updateDialog(payload); commitChanges(); }, - ...lgApi, - ...luApi, - ...qnaApi, - ...triggerApi, updateRegExIntent: updateRegExIntentHandler, renameRegExIntent: renameRegExIntentHandler, updateIntentTrigger: updateIntentTriggerHandler, @@ -212,9 +229,17 @@ export function useShell(source: EventSource, projectId: string): Shell { }, updateSkillSetting: (...params) => updateSkill(projectId, ...params), updateFlowZoomRate, + ...lgApi, + ...luApi, + ...qnaApi, + ...triggerApi, + ...actionApi, }; - const currentDialog = useMemo(() => dialogs.find((d) => d.id === dialogId), [dialogs, dialogId]) as DialogInfo; + const currentDialog = useMemo(() => dialogs.find((d) => d.id === dialogId) ?? stubDialog(), [ + dialogs, + dialogId, + ]) as DialogInfo; const editorData = useMemo(() => { return source === 'PropertyEditor' ? getDialogData(dialogsMap, dialogId, focused || selected || '') @@ -222,7 +247,6 @@ export function useShell(source: EventSource, projectId: string): Shell { }, [source, dialogsMap, dialogId, focused, selected]); const data: ShellData = { - data: editorData, locale, botName, projectId, diff --git a/Composer/packages/client/src/utils/dialogUtil.ts b/Composer/packages/client/src/utils/dialogUtil.ts index 235868bd23..1db948b322 100644 --- a/Composer/packages/client/src/utils/dialogUtil.ts +++ b/Composer/packages/client/src/utils/dialogUtil.ts @@ -95,9 +95,8 @@ function createTrigger(dialog: DialogInfo, data: TriggerFormData, factory: Dialo export function updateIntentTrigger(dialog: DialogInfo, intentName: string, newIntentName: string): DialogInfo { const dialogCopy = cloneDeep(dialog); - const trigger = (dialogCopy.content?.triggers ?? []).find( - (t) => t.$kind === SDKKinds.OnIntent && t.intent === intentName - ); + const triggers = dialogCopy.content?.triggers as ITriggerCondition[]; + const trigger = (triggers ?? []).find((t) => t.$kind === SDKKinds.OnIntent && t.intent === intentName); if (trigger) { trigger.intent = newIntentName; diff --git a/Composer/packages/electron-server/jest.config.js b/Composer/packages/electron-server/jest.config.js index 537ea3eede..216428d9b5 100644 --- a/Composer/packages/electron-server/jest.config.js +++ b/Composer/packages/electron-server/jest.config.js @@ -1,3 +1,3 @@ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('electron-server', 'node'); diff --git a/Composer/packages/extension-client/jest.config.js b/Composer/packages/extension-client/jest.config.js index cace2769b9..62a5bb67ba 100644 --- a/Composer/packages/extension-client/jest.config.js +++ b/Composer/packages/extension-client/jest.config.js @@ -2,6 +2,6 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('extension', 'react'); diff --git a/Composer/packages/extension-client/package.json b/Composer/packages/extension-client/package.json index b430f710ee..8297063b21 100644 --- a/Composer/packages/extension-client/package.json +++ b/Composer/packages/extension-client/package.json @@ -1,7 +1,7 @@ { "name": "@bfc/extension-client", "version": "1.0.0", - "description": "Composer extension library to be consumed by the client bundle of a Composer extension.", + "description": "Extension library to be consumed by the client bundle of a Botframework Composer extension.", "main": "lib/index.js", "license": "MIT", "private": true, @@ -15,8 +15,7 @@ "react-dom": "16.13.1" }, "devDependencies": { - "@bfc/types": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/react": "16.9.23", "react": "16.13.1", "react-dom": "16.13.1", @@ -24,7 +23,7 @@ "typescript": "3.9.2" }, "dependencies": { - "@bfc/shared": "*", + "@botframework-composer/types": "*", "debug": "^4.1.1", "lodash": "^4.17.19" } diff --git a/Composer/packages/extension-client/src/EditorExtensionContext.ts b/Composer/packages/extension-client/src/EditorExtensionContext.ts index b68428ffc9..6c00d2a49b 100644 --- a/Composer/packages/extension-client/src/EditorExtensionContext.ts +++ b/Composer/packages/extension-client/src/EditorExtensionContext.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import React from 'react'; -import { ShellApi, ShellData } from '@bfc/types'; +import { ShellApi, ShellData } from '@botframework-composer/types'; import { PluginConfig } from './types'; diff --git a/Composer/packages/extension-client/src/components/EditorExtension.tsx b/Composer/packages/extension-client/src/components/EditorExtension.tsx index 0d268f1cce..d4096a25b9 100644 --- a/Composer/packages/extension-client/src/components/EditorExtension.tsx +++ b/Composer/packages/extension-client/src/components/EditorExtension.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React, { useMemo } from 'react'; -import { Shell } from '@bfc/types'; +import { Shell } from '@botframework-composer/types'; import { EditorExtensionContext } from '../EditorExtensionContext'; import { PluginConfig } from '../types'; diff --git a/Composer/packages/extension-client/src/hooks/__tests__/useFlowConfig.test.tsx b/Composer/packages/extension-client/src/hooks/__tests__/useFlowConfig.test.tsx index bae08b5459..892b833e03 100644 --- a/Composer/packages/extension-client/src/hooks/__tests__/useFlowConfig.test.tsx +++ b/Composer/packages/extension-client/src/hooks/__tests__/useFlowConfig.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { renderHook } from '@bfc/test-utils/lib/hooks'; +import { renderHook } from '@botframework-composer/test-utils/lib/hooks'; import { useFlowConfig } from '../useFlowConfig'; import { EditorExtensionContext } from '../../EditorExtensionContext'; diff --git a/Composer/packages/extension-client/src/hooks/__tests__/useFormConfig.test.tsx b/Composer/packages/extension-client/src/hooks/__tests__/useFormConfig.test.tsx index b5ae3e59c2..bda3782947 100644 --- a/Composer/packages/extension-client/src/hooks/__tests__/useFormConfig.test.tsx +++ b/Composer/packages/extension-client/src/hooks/__tests__/useFormConfig.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { renderHook } from '@bfc/test-utils/lib/hooks'; +import { renderHook } from '@botframework-composer/test-utils/lib/hooks'; import { useFormConfig } from '../useFormConfig'; import { EditorExtensionContext } from '../../EditorExtensionContext'; diff --git a/Composer/packages/extension-client/src/hooks/__tests__/useMenuConfig.test.tsx b/Composer/packages/extension-client/src/hooks/__tests__/useMenuConfig.test.tsx index 96fb9b543d..bf78dbc363 100644 --- a/Composer/packages/extension-client/src/hooks/__tests__/useMenuConfig.test.tsx +++ b/Composer/packages/extension-client/src/hooks/__tests__/useMenuConfig.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { renderHook } from '@bfc/test-utils/lib/hooks'; +import { renderHook } from '@botframework-composer/test-utils/lib/hooks'; import { useMenuConfig } from '../useMenuConfig'; import { EditorExtensionContext } from '../../EditorExtensionContext'; diff --git a/Composer/packages/extension-client/src/hooks/__tests__/useRecognizerConfig.test.tsx b/Composer/packages/extension-client/src/hooks/__tests__/useRecognizerConfig.test.tsx index f13b03d3b9..c36a29e6e4 100644 --- a/Composer/packages/extension-client/src/hooks/__tests__/useRecognizerConfig.test.tsx +++ b/Composer/packages/extension-client/src/hooks/__tests__/useRecognizerConfig.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { renderHook } from '@bfc/test-utils/lib/hooks'; +import { renderHook } from '@botframework-composer/test-utils/lib/hooks'; import { useRecognizerConfig } from '../useRecognizerConfig'; import { EditorExtensionContext } from '../../EditorExtensionContext'; diff --git a/Composer/packages/extension-client/src/hooks/index.ts b/Composer/packages/extension-client/src/hooks/index.ts index 0b5a724b56..423f77167f 100644 --- a/Composer/packages/extension-client/src/hooks/index.ts +++ b/Composer/packages/extension-client/src/hooks/index.ts @@ -1,14 +1,9 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -export * from './useActionApi'; export * from './useDialogApi'; -export * from './useDialogEditApi'; export * from './useFlowConfig'; export * from './useFormConfig'; -export * from './useLgApi'; -export * from './useLuApi'; export * from './useMenuConfig'; export * from './useRecognizerConfig'; export * from './useProjectApi'; export * from './useShellApi'; -export * from './useTriggerApi'; diff --git a/Composer/packages/extension-client/src/hooks/useActionApi.ts b/Composer/packages/extension-client/src/hooks/useActionApi.ts deleted file mode 100644 index 947dc542ab..0000000000 --- a/Composer/packages/extension-client/src/hooks/useActionApi.ts +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { - deepCopyActions, - deleteAction as destructAction, - deleteActions as destructActions, - FieldProcessorAsync, - walkAdaptiveActionList, -} from '@bfc/shared'; -import { BaseSchema, ShellApi } from '@bfc/types'; - -import { useLgApi } from './useLgApi'; -import { useLuApi } from './useLuApi'; - -export const useActionApi = (shellApi: ShellApi) => { - const { createLgTemplate, readLgTemplate, deleteLgTemplates } = useLgApi(shellApi); - const { createLuIntent, readLuIntent, deleteLuIntents } = useLuApi(shellApi); - - const luFieldName = '_lu'; - - function actionsContainLuIntent(actions: BaseSchema[]): boolean { - let containLuIntents = false; - walkAdaptiveActionList(actions, (action) => { - if (action[luFieldName]) { - containLuIntents = true; - } - }); - return containLuIntents; - } - - async function constructActions(dialogId: string, actions: BaseSchema[]) { - // '- hi' -> 'SendActivity_1234' - const referenceLgText: FieldProcessorAsync = async (fromId, fromAction, toId, toAction, lgFieldName) => - createLgTemplate(dialogId, fromAction[lgFieldName], toId, toAction, lgFieldName); - - // LuIntentSection -> 'TextInput_Response_1234' - const referenceLuIntent: FieldProcessorAsync = async (fromId, fromAction, toId, toAction) => { - fromAction[luFieldName] && (await createLuIntent(dialogId, fromAction[luFieldName], toId, toAction)); - // during construction, remove the virtual LU field after intents persisted in file - delete toAction[luFieldName]; - }; - - return deepCopyActions(actions, referenceLgText, referenceLuIntent); - } - - async function copyActions(dialogId: string, actions: BaseSchema[]) { - // 'SendActivity_1234' -> '- hi' - const dereferenceLg: FieldProcessorAsync = async (fromId, fromAction, toId, toAction, lgFieldName) => - readLgTemplate(dialogId, fromAction[lgFieldName]); - - // 'TextInput_Response_1234' -> LuIntentSection | undefined - const dereferenceLu: FieldProcessorAsync = async (fromId, fromAction, toId, toAction) => { - const luValue = readLuIntent(dialogId, fromId, fromAction); - // during copy, carry the LU data in virtual field - toAction[luFieldName] = luValue; - return luValue; - }; - - return deepCopyActions(actions, dereferenceLg, dereferenceLu); - } - - async function constructAction(dialogId: string, action: BaseSchema) { - return await constructActions(dialogId, [action]); - } - - async function copyAction(dialogId: string, action: BaseSchema) { - return await copyActions(dialogId, [action]); - } - - async function deleteAction(dialogId: string, action: BaseSchema) { - return destructAction( - action, - (templates: string[]) => deleteLgTemplates(dialogId, templates), - (luIntents: string[]) => deleteLuIntents(dialogId, luIntents) - ); - } - - async function deleteActions(dialogId: string, actions: BaseSchema[]) { - return destructActions( - actions, - (templates: string[]) => deleteLgTemplates(dialogId, templates), - (luIntents: string[]) => deleteLuIntents(dialogId, luIntents) - ); - } - - return { - constructAction, - constructActions, - copyAction, - copyActions, - deleteAction, - deleteActions, - actionsContainLuIntent, - }; -}; diff --git a/Composer/packages/extension-client/src/hooks/useDialogApi.ts b/Composer/packages/extension-client/src/hooks/useDialogApi.ts index 70f7748ec3..9c8a92d88c 100644 --- a/Composer/packages/extension-client/src/hooks/useDialogApi.ts +++ b/Composer/packages/extension-client/src/hooks/useDialogApi.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { ShellApi } from '@bfc/types'; +import { ShellApi } from '@botframework-composer/types'; export const useDialogApi = (shellApi: ShellApi) => { const { getDialog, saveDialog, createDialog } = shellApi; diff --git a/Composer/packages/extension-client/src/hooks/useLgApi.ts b/Composer/packages/extension-client/src/hooks/useLgApi.ts deleted file mode 100644 index 909aa1e77d..0000000000 --- a/Composer/packages/extension-client/src/hooks/useLgApi.ts +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { LgType, LgTemplateRef, LgMetaData } from '@bfc/shared'; -import { BaseSchema, ShellApi } from '@bfc/types'; - -/** - * LG CRUD lib - */ -export const useLgApi = (shellApi: ShellApi) => { - const { removeLgTemplates, getLgTemplates, addLgTemplate } = shellApi; - - const deleteLgTemplates = (lgFileId: string, lgTemplates: string[]) => { - const normalizedLgTemplates = lgTemplates - .map((x) => { - const lgTemplateRef = LgTemplateRef.parse(x); - return lgTemplateRef ? lgTemplateRef.name : ''; - }) - .filter((x) => !!x); - return removeLgTemplates(lgFileId, normalizedLgTemplates); - }; - - const readLgTemplate = (lgFileId: string, lgText: string) => { - if (!lgText) return ''; - - const inputLgRef = LgTemplateRef.parse(lgText); - if (!inputLgRef) return lgText; - - const lgTemplates = getLgTemplates(inputLgRef.name); - if (!Array.isArray(lgTemplates) || !lgTemplates.length) return lgText; - - const targetTemplate = lgTemplates.find((x) => x.name === inputLgRef.name); - return targetTemplate ? targetTemplate.body : lgText; - }; - - const createLgTemplate = async ( - lgFileId: string, - lgText: string, - hostActionId: string, - hostActionData: BaseSchema, - hostFieldName: string - ): Promise => { - if (!lgText) return ''; - const newLgType = new LgType(hostActionData.$kind, hostFieldName).toString(); - const newLgTemplateName = new LgMetaData(newLgType, hostActionId).toString(); - const newLgTemplateRefStr = new LgTemplateRef(newLgTemplateName).toString(); - await addLgTemplate(lgFileId, newLgTemplateName, lgText); - return newLgTemplateRefStr; - }; - - return { - createLgTemplate, - readLgTemplate, - deleteLgTemplate: (lgFileId: string, lgTemplate: string) => deleteLgTemplates(lgFileId, [lgTemplate]), - deleteLgTemplates, - }; -}; diff --git a/Composer/packages/extension-client/src/hooks/useLuApi.ts b/Composer/packages/extension-client/src/hooks/useLuApi.ts deleted file mode 100644 index 1e12cb416a..0000000000 --- a/Composer/packages/extension-client/src/hooks/useLuApi.ts +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { LuMetaData, LuType } from '@bfc/shared'; -import { LuIntentSection, BaseSchema, ShellApi } from '@bfc/types'; - -/** - * LU CRUD API - */ -export const useLuApi = (shellApi: ShellApi) => { - const { addLuIntent, removeLuIntent, getLuIntent } = shellApi; - - const createLuIntent = async ( - luFildId: string, - intent: LuIntentSection | undefined, - hostResourceId: string, - hostResourceData: BaseSchema - ) => { - if (!intent) return; - - const newLuIntentType = new LuType(hostResourceData.$kind).toString(); - const newLuIntentName = new LuMetaData(newLuIntentType, hostResourceId).toString(); - const newLuIntent: LuIntentSection = { ...intent, Name: newLuIntentName }; - await addLuIntent(luFildId, newLuIntentName, newLuIntent); - return newLuIntentName; - }; - - const readLuIntent = (luFileId: string, hostResourceId: string, hostResourceData: BaseSchema) => { - const relatedLuIntentType = new LuType(hostResourceData.$kind).toString(); - const relatedLuIntentName = new LuMetaData(relatedLuIntentType, hostResourceId).toString(); - return getLuIntent(luFileId, relatedLuIntentName); - }; - - const deleteLuIntents = (luFileId: string, luIntents: string[]) => { - return Promise.all(luIntents.map((intent) => removeLuIntent(luFileId, intent))); - }; - - return { - createLuIntent, - readLuIntent, - deleteLuIntent: (luFileId: string, luIntent: string) => deleteLuIntents(luFileId, [luIntent]), - deleteLuIntents, - }; -}; diff --git a/Composer/packages/extension-client/src/hooks/useProjectApi.ts b/Composer/packages/extension-client/src/hooks/useProjectApi.ts index b6ee4116eb..049ecf4d57 100644 --- a/Composer/packages/extension-client/src/hooks/useProjectApi.ts +++ b/Composer/packages/extension-client/src/hooks/useProjectApi.ts @@ -3,7 +3,7 @@ import { useMemo } from 'react'; import pick from 'lodash/pick'; -import { ProjectContext, ProjectContextApi } from '@bfc/types'; +import { ProjectContext, ProjectContextApi } from '@botframework-composer/types'; import { validateHookContext } from '../utils/validateHookContext'; diff --git a/Composer/packages/extension-client/src/hooks/useRecognizerConfig.ts b/Composer/packages/extension-client/src/hooks/useRecognizerConfig.ts index 9df4b5d6b4..1c3815beb5 100644 --- a/Composer/packages/extension-client/src/hooks/useRecognizerConfig.ts +++ b/Composer/packages/extension-client/src/hooks/useRecognizerConfig.ts @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { useContext, useMemo } from 'react'; -import { MicrosoftIRecognizer, SDKKinds } from '@bfc/types'; +import { MicrosoftIRecognizer, SDKKinds } from '@botframework-composer/types'; import get from 'lodash/get'; import { EditorExtensionContext } from '../EditorExtensionContext'; @@ -76,7 +76,7 @@ export function useRecognizerConfig(): RecognizerSchemaConfig { const defaultRecognizer = getDefaultRecognizer(recognizers); const fallbackRecognizer = getFallbackRecognizer(recognizers); - const currentRecognizerValue = shellData.currentDialog?.content?.recognizer; + const currentRecognizerValue = shellData.currentDialog?.content?.recognizer as MicrosoftIRecognizer; const currentRecognizer = findRecognizerByValue(recognizers, currentRecognizerValue) ?? fallbackRecognizer; return { diff --git a/Composer/packages/extension-client/src/hooks/useShellApi.ts b/Composer/packages/extension-client/src/hooks/useShellApi.ts index e6acf863c2..edf675c6ee 100644 --- a/Composer/packages/extension-client/src/hooks/useShellApi.ts +++ b/Composer/packages/extension-client/src/hooks/useShellApi.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import { useContext } from 'react'; -import { ShellApi, ShellData } from '@bfc/types'; +import { ShellApi, ShellData } from '@botframework-composer/types'; import { EditorExtensionContext } from '../EditorExtensionContext'; import { PluginConfig } from '../types'; diff --git a/Composer/packages/extension-client/src/hooks/useTriggerApi.ts b/Composer/packages/extension-client/src/hooks/useTriggerApi.ts deleted file mode 100644 index e4d5dbd135..0000000000 --- a/Composer/packages/extension-client/src/hooks/useTriggerApi.ts +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { ShellApi, SDKKinds, ITriggerCondition, BaseSchema } from '@bfc/types'; -import get from 'lodash/get'; - -import { useActionApi } from './useActionApi'; -import { useLuApi } from './useLuApi'; - -export const useTriggerApi = (shellApi: ShellApi) => { - const { deleteActions } = useActionApi(shellApi); - const { deleteLuIntent } = useLuApi(shellApi); - - const deleteTrigger = (dialogId: string, trigger: ITriggerCondition) => { - if (!trigger) return; - - // Clean the lu resource on intent trigger - if (get(trigger, '$kind') === SDKKinds.OnIntent) { - const triggerIntent = get(trigger, 'intent', ''); - deleteLuIntent(dialogId, triggerIntent); - } - - // Clean action resources - const actions = get(trigger, 'actions') as BaseSchema[]; - if (!actions || !Array.isArray(actions)) return; - - deleteActions(dialogId, actions); - }; - - return { - deleteTrigger, - }; -}; diff --git a/Composer/packages/extension-client/src/index.ts b/Composer/packages/extension-client/src/index.ts index 6bebb5884d..4118d0c005 100644 --- a/Composer/packages/extension-client/src/index.ts +++ b/Composer/packages/extension-client/src/index.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -export * from '@bfc/types'; +export * from '@botframework-composer/types'; export * from './auth'; export * from './common'; diff --git a/Composer/packages/extension-client/src/store.ts b/Composer/packages/extension-client/src/store.ts index 245164f7a7..e8dc39a07f 100644 --- a/Composer/packages/extension-client/src/store.ts +++ b/Composer/packages/extension-client/src/store.ts @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { Dispatch } from 'react'; -import { Shell } from '@bfc/types'; +import { Shell } from '@botframework-composer/types'; export type State = Shell; diff --git a/Composer/packages/extension-client/src/types/extension.ts b/Composer/packages/extension-client/src/types/extension.ts index 803f1b7dc7..f7d7705cf5 100644 --- a/Composer/packages/extension-client/src/types/extension.ts +++ b/Composer/packages/extension-client/src/types/extension.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { SDKKinds } from '@bfc/types'; +import { SDKKinds } from '@botframework-composer/types'; import { UIOptions } from './formSchema'; import { FlowEditorWidgetMap, FlowWidget } from './flowSchema'; diff --git a/Composer/packages/extension-client/src/types/flowSchema.ts b/Composer/packages/extension-client/src/types/flowSchema.ts index 317543fb62..172bb57965 100644 --- a/Composer/packages/extension-client/src/types/flowSchema.ts +++ b/Composer/packages/extension-client/src/types/flowSchema.ts @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { FC, ComponentClass } from 'react'; -import { BaseSchema, SDKKinds } from '@bfc/types'; +import { BaseSchema, SDKKinds } from '@botframework-composer/types'; export type FlowEditorWidgetMap = { [widgetName: string]: WidgetComponent }; export enum FlowSchemaBuiltinKeys { diff --git a/Composer/packages/extension-client/src/types/form.ts b/Composer/packages/extension-client/src/types/form.ts index 4c0cae7fb9..1c4adf0fdf 100644 --- a/Composer/packages/extension-client/src/types/form.ts +++ b/Composer/packages/extension-client/src/types/form.ts @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { JSONSchema7, SchemaDefinitions } from '@bfc/types'; +import { JSONSchema7, SchemaDefinitions } from '@botframework-composer/types'; import React from 'react'; import { UIOptions } from './formSchema'; diff --git a/Composer/packages/extension-client/src/types/formSchema.ts b/Composer/packages/extension-client/src/types/formSchema.ts index ca73eee9fd..e4e3ad6e09 100644 --- a/Composer/packages/extension-client/src/types/formSchema.ts +++ b/Composer/packages/extension-client/src/types/formSchema.ts @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { MicrosoftIRecognizer, SDKKinds, SDKRoles, ShellApi, ShellData } from '@bfc/types'; +import { MicrosoftIRecognizer, SDKKinds, SDKRoles, ShellApi, ShellData } from '@botframework-composer/types'; import { FieldWidget } from './form'; diff --git a/Composer/packages/extension-client/src/types/menuSchema.ts b/Composer/packages/extension-client/src/types/menuSchema.ts index 380ed3aa1a..ba284764b0 100644 --- a/Composer/packages/extension-client/src/types/menuSchema.ts +++ b/Composer/packages/extension-client/src/types/menuSchema.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { SDKKinds } from '@bfc/types'; +import { SDKKinds } from '@botframework-composer/types'; export interface MenuOptions { label?: string; diff --git a/Composer/packages/extension-client/src/types/recognizerSchema.ts b/Composer/packages/extension-client/src/types/recognizerSchema.ts index 03071dbf44..976a98df6d 100644 --- a/Composer/packages/extension-client/src/types/recognizerSchema.ts +++ b/Composer/packages/extension-client/src/types/recognizerSchema.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { SDKKinds } from '@bfc/types'; +import { SDKKinds } from '@botframework-composer/types'; import { RecognizerSchema } from './formSchema'; diff --git a/Composer/packages/extension-client/src/types/window.d.ts b/Composer/packages/extension-client/src/types/window.d.ts index ac40226c4e..255114bbb6 100644 --- a/Composer/packages/extension-client/src/types/window.d.ts +++ b/Composer/packages/extension-client/src/types/window.d.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { Shell } from '@bfc/types'; +import { Shell } from '@botframework-composer/types'; import * as ExtensionClient from '../index'; diff --git a/Composer/packages/extension-client/src/utils/__tests__/mergePluginConfigs.test.ts b/Composer/packages/extension-client/src/utils/__tests__/mergePluginConfigs.test.ts index 2576aefbbd..66efdc2109 100644 --- a/Composer/packages/extension-client/src/utils/__tests__/mergePluginConfigs.test.ts +++ b/Composer/packages/extension-client/src/utils/__tests__/mergePluginConfigs.test.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { SDKKinds } from '@bfc/types'; +import { SDKKinds } from '@botframework-composer/types'; import { PluginConfig } from '../../types'; import { mergePluginConfigs } from '../mergePluginConfigs'; diff --git a/Composer/packages/extension/jest.config.js b/Composer/packages/extension/jest.config.js index 81af8fc3ab..b2605de44a 100644 --- a/Composer/packages/extension/jest.config.js +++ b/Composer/packages/extension/jest.config.js @@ -1,6 +1,6 @@ const path = require('path'); -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('extension', 'node', { setupFiles: [path.resolve(__dirname, 'src/__tests__/setupEnv.ts')], diff --git a/Composer/packages/extension/package.json b/Composer/packages/extension/package.json index d28a486bb7..fd9df55fb3 100644 --- a/Composer/packages/extension/package.json +++ b/Composer/packages/extension/package.json @@ -13,8 +13,7 @@ "test": "jest" }, "devDependencies": { - "@bfc/types": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/express": "^4.17.6", "@types/fs-extra": "^9.0.1", "@types/passport": "^1.0.3", @@ -25,6 +24,7 @@ "typescript": "^3.8.3" }, "dependencies": { + "@botframework-composer/types": "*", "debug": "^4.1.1", "fs-extra": "^9.0.1", "globby": "^11.0.0", diff --git a/Composer/packages/extension/src/extensionContext.ts b/Composer/packages/extension/src/extensionContext.ts index e862ee3353..6cab68154b 100644 --- a/Composer/packages/extension/src/extensionContext.ts +++ b/Composer/packages/extension/src/extensionContext.ts @@ -9,7 +9,7 @@ import { Express } from 'express'; import { pathToRegexp } from 'path-to-regexp'; import glob from 'globby'; import formatMessage from 'format-message'; -import { UserIdentity, ExtensionCollection, RuntimeTemplate } from '@bfc/types'; +import { UserIdentity, ExtensionCollection, RuntimeTemplate } from '@botframework-composer/types'; import logger from './logger'; import { ExtensionRegistration } from './extensionRegistration'; diff --git a/Composer/packages/extension/src/extensionRegistration.ts b/Composer/packages/extension/src/extensionRegistration.ts index 23f3408d5c..1ce6e33cf4 100644 --- a/Composer/packages/extension/src/extensionRegistration.ts +++ b/Composer/packages/extension/src/extensionRegistration.ts @@ -3,7 +3,7 @@ import { RequestHandler } from 'express-serve-static-core'; import { Debugger } from 'debug'; -import { PublishPlugin, RuntimeTemplate, BotTemplate } from '@bfc/types'; +import { PublishPlugin, RuntimeTemplate, BotTemplate } from '@botframework-composer/types'; import logger from './logger'; import { ExtensionContext } from './extensionContext'; diff --git a/Composer/packages/extension/src/index.ts b/Composer/packages/extension/src/index.ts index 6ff5004de3..45a1dea81f 100644 --- a/Composer/packages/extension/src/index.ts +++ b/Composer/packages/extension/src/index.ts @@ -3,7 +3,7 @@ export { JSONSchema7 } from 'json-schema'; -export * from '@bfc/types'; +export * from '@botframework-composer/types'; export * from './manager'; export * from './storage'; diff --git a/Composer/packages/extension/src/manager/manager.ts b/Composer/packages/extension/src/manager/manager.ts index f081ee330d..6735a6370c 100644 --- a/Composer/packages/extension/src/manager/manager.ts +++ b/Composer/packages/extension/src/manager/manager.ts @@ -5,7 +5,7 @@ import path from 'path'; import glob from 'globby'; import { readJson, ensureDir, remove, pathExists } from 'fs-extra'; -import { ExtensionBundle, PackageJSON, ExtensionMetadata } from '@bfc/types'; +import { ExtensionBundle, PackageJSON, ExtensionMetadata } from '@botframework-composer/types'; import { ExtensionContext } from '../extensionContext'; import logger from '../logger'; diff --git a/Composer/packages/extension/src/storage/extensionManifestStore.ts b/Composer/packages/extension/src/storage/extensionManifestStore.ts index 99b633e62a..cb529c053e 100644 --- a/Composer/packages/extension/src/storage/extensionManifestStore.ts +++ b/Composer/packages/extension/src/storage/extensionManifestStore.ts @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { existsSync, writeJsonSync, readJsonSync } from 'fs-extra'; -import { ExtensionMap, ExtensionMetadata } from '@bfc/types'; +import { ExtensionMap, ExtensionMetadata } from '@botframework-composer/types'; import logger from '../logger'; diff --git a/Composer/packages/extension/src/utils/npm.ts b/Composer/packages/extension/src/utils/npm.ts index 0029c10f1a..3dd005ec2f 100644 --- a/Composer/packages/extension/src/utils/npm.ts +++ b/Composer/packages/extension/src/utils/npm.ts @@ -6,7 +6,7 @@ import { promisify } from 'util'; import { mkdir, remove } from 'fs-extra'; import fetch from 'node-fetch'; import tar from 'tar'; -import { ExtensionSearchResult } from '@bfc/types'; +import { ExtensionSearchResult } from '@botframework-composer/types'; import logger from '../logger'; diff --git a/Composer/packages/intellisense/jest.config.js b/Composer/packages/intellisense/jest.config.js index 04c0cd2ef6..2637e1035b 100644 --- a/Composer/packages/intellisense/jest.config.js +++ b/Composer/packages/intellisense/jest.config.js @@ -2,7 +2,7 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('intellisense', 'react', { coveragePathIgnorePatterns: [], diff --git a/Composer/packages/intellisense/package.json b/Composer/packages/intellisense/package.json index 0dcb7ef5b1..d816d5f45d 100644 --- a/Composer/packages/intellisense/package.json +++ b/Composer/packages/intellisense/package.json @@ -22,6 +22,6 @@ "@types/vscode": "^1.46.0", "@types/ws": "^7.2.6", "@types/node": "^12.0.0", - "@bfc/test-utils": "*" + "@botframework-composer/test-utils": "*" } } diff --git a/Composer/packages/intellisense/src/components/__tests__/IntellisenseTextField.test.tsx b/Composer/packages/intellisense/src/components/__tests__/IntellisenseTextField.test.tsx index 3b5e83e212..27ae510dfd 100644 --- a/Composer/packages/intellisense/src/components/__tests__/IntellisenseTextField.test.tsx +++ b/Composer/packages/intellisense/src/components/__tests__/IntellisenseTextField.test.tsx @@ -2,12 +2,12 @@ // Licensed under the MIT License. import React from 'react'; -import { render } from '@bfc/test-utils'; +import { render } from '@botframework-composer/test-utils'; import { TextField } from 'office-ui-fabric-react/lib/TextField'; +import { CompletionItem } from 'vscode-languageserver-types'; import { IntellisenseTextField } from '../IntellisenseTextField'; import * as dependency from '../../hooks/useLanguageServer'; -import { CompletionItem } from 'vscode-languageserver-types'; const useLanguageServerMock = ( url: string, diff --git a/Composer/packages/lib/code-editor/jest.config.js b/Composer/packages/lib/code-editor/jest.config.js index 1978d3e8af..89df0f460d 100644 --- a/Composer/packages/lib/code-editor/jest.config.js +++ b/Composer/packages/lib/code-editor/jest.config.js @@ -1,4 +1,4 @@ // eslint-disable-next-line -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('code-editor', 'react'); diff --git a/Composer/packages/lib/code-editor/package.json b/Composer/packages/lib/code-editor/package.json index 9a149f06b9..e39f72840e 100644 --- a/Composer/packages/lib/code-editor/package.json +++ b/Composer/packages/lib/code-editor/package.json @@ -28,7 +28,7 @@ "react-dom": "16.13.1" }, "devDependencies": { - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/express": "^4.17.1", "@types/lodash": "^4.14.146", "@types/node": "^12.12.8", @@ -66,4 +66,4 @@ "reconnecting-websocket": "^3.2.2", "vscode-ws-jsonrpc": "^0.1.1" } -} \ No newline at end of file +} diff --git a/Composer/packages/lib/indexers/jest.config.js b/Composer/packages/lib/indexers/jest.config.js index af75370a1b..e513637343 100644 --- a/Composer/packages/lib/indexers/jest.config.js +++ b/Composer/packages/lib/indexers/jest.config.js @@ -1,3 +1,3 @@ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('indexers', 'node'); diff --git a/Composer/packages/lib/indexers/package.json b/Composer/packages/lib/indexers/package.json index 2802f9f4c1..1cabcd5d49 100644 --- a/Composer/packages/lib/indexers/package.json +++ b/Composer/packages/lib/indexers/package.json @@ -21,7 +21,7 @@ }, "devDependencies": { "@bfc/shared": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/lodash": "^4.14.146", "rimraf": "^2.6.3" }, diff --git a/Composer/packages/lib/shared/jest.config.js b/Composer/packages/lib/shared/jest.config.js index 4489001df4..70bb000184 100644 --- a/Composer/packages/lib/shared/jest.config.js +++ b/Composer/packages/lib/shared/jest.config.js @@ -1,3 +1,3 @@ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('shared', 'react'); diff --git a/Composer/packages/lib/shared/package.json b/Composer/packages/lib/shared/package.json index 5991653147..2feaab041a 100644 --- a/Composer/packages/lib/shared/package.json +++ b/Composer/packages/lib/shared/package.json @@ -24,8 +24,7 @@ "react-dom": "16.13.1" }, "devDependencies": { - "@bfc/types": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/nanoid": "^2.1.0", "@types/react": "16.9.23", "@types/react-dom": "16.9.5", @@ -37,6 +36,7 @@ "rimraf": "^2.6.3" }, "dependencies": { + "@botframework-composer/types": "*", "format-message": "6.2.3", "json-schema": "^0.2.5", "nanoid": "^3.1.3", diff --git a/Composer/packages/lib/shared/src/copyUtils/CopyConstructorMap.ts b/Composer/packages/lib/shared/src/copyUtils/CopyConstructorMap.ts index 15d031460b..e4e9918ea2 100644 --- a/Composer/packages/lib/shared/src/copyUtils/CopyConstructorMap.ts +++ b/Composer/packages/lib/shared/src/copyUtils/CopyConstructorMap.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { SDKKinds } from '@bfc/types'; +import { SDKKinds } from '@botframework-composer/types'; import { copySendActivity } from './copySendActivity'; import { copyInputDialog } from './copyInputDialog'; diff --git a/Composer/packages/lib/shared/src/copyUtils/ExternalApi.ts b/Composer/packages/lib/shared/src/copyUtils/ExternalApi.ts index 9dac4ce882..ce78825b83 100644 --- a/Composer/packages/lib/shared/src/copyUtils/ExternalApi.ts +++ b/Composer/packages/lib/shared/src/copyUtils/ExternalApi.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { DesignerData, BaseSchema } from '@bfc/types'; +import { DesignerData, BaseSchema } from '@botframework-composer/types'; export type FieldProcessor = ( fromActionId: string, diff --git a/Composer/packages/lib/shared/src/copyUtils/copyAdaptiveAction.ts b/Composer/packages/lib/shared/src/copyUtils/copyAdaptiveAction.ts index 7090a36f27..f9fb196485 100644 --- a/Composer/packages/lib/shared/src/copyUtils/copyAdaptiveAction.ts +++ b/Composer/packages/lib/shared/src/copyUtils/copyAdaptiveAction.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { MicrosoftIDialog } from '@bfc/types'; +import { MicrosoftIDialog } from '@botframework-composer/types'; import { ExternalApi } from './ExternalApi'; import CopyConstructorMap from './CopyConstructorMap'; @@ -11,7 +11,7 @@ export async function copyAdaptiveAction(data: MicrosoftIDialog, externalApi: Ex return data; } - if (!data || !data.$kind) return {}; + if (!data || !data.$kind) return {} as MicrosoftIDialog; const copier = CopyConstructorMap[data.$kind] || CopyConstructorMap.default; diff --git a/Composer/packages/lib/shared/src/copyUtils/copyAdaptiveActionList.ts b/Composer/packages/lib/shared/src/copyUtils/copyAdaptiveActionList.ts index 544b0f7521..992768de2c 100644 --- a/Composer/packages/lib/shared/src/copyUtils/copyAdaptiveActionList.ts +++ b/Composer/packages/lib/shared/src/copyUtils/copyAdaptiveActionList.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { MicrosoftIDialog } from '@bfc/types'; +import { MicrosoftIDialog } from '@botframework-composer/types'; import { copyAdaptiveAction } from './copyAdaptiveAction'; import { ExternalApi } from './ExternalApi'; diff --git a/Composer/packages/lib/shared/src/copyUtils/copyEditActions.ts b/Composer/packages/lib/shared/src/copyUtils/copyEditActions.ts index 19e4ff9dd1..80e8a8eb91 100644 --- a/Composer/packages/lib/shared/src/copyUtils/copyEditActions.ts +++ b/Composer/packages/lib/shared/src/copyUtils/copyEditActions.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { EditActions } from '@bfc/types'; +import { EditActions } from '@botframework-composer/types'; import { ExternalApi } from './ExternalApi'; import { shallowCopyAdaptiveAction } from './shallowCopyAdaptiveAction'; diff --git a/Composer/packages/lib/shared/src/copyUtils/copyForeach.ts b/Composer/packages/lib/shared/src/copyUtils/copyForeach.ts index ee3179314c..9f9155b833 100644 --- a/Composer/packages/lib/shared/src/copyUtils/copyForeach.ts +++ b/Composer/packages/lib/shared/src/copyUtils/copyForeach.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { Foreach, ForeachPage } from '@bfc/types'; +import { Foreach, ForeachPage } from '@botframework-composer/types'; import { ExternalApi } from './ExternalApi'; import { shallowCopyAdaptiveAction } from './shallowCopyAdaptiveAction'; diff --git a/Composer/packages/lib/shared/src/copyUtils/copyIfCondition.ts b/Composer/packages/lib/shared/src/copyUtils/copyIfCondition.ts index c3ad369ac1..de7c9c967d 100644 --- a/Composer/packages/lib/shared/src/copyUtils/copyIfCondition.ts +++ b/Composer/packages/lib/shared/src/copyUtils/copyIfCondition.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { IfCondition } from '@bfc/types'; +import { IfCondition } from '@botframework-composer/types'; import { ExternalApi } from './ExternalApi'; import { copyAdaptiveActionList } from './copyAdaptiveActionList'; diff --git a/Composer/packages/lib/shared/src/copyUtils/copyInputDialog.ts b/Composer/packages/lib/shared/src/copyUtils/copyInputDialog.ts index 789d72f10e..6503dee928 100644 --- a/Composer/packages/lib/shared/src/copyUtils/copyInputDialog.ts +++ b/Composer/packages/lib/shared/src/copyUtils/copyInputDialog.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { InputDialog } from '@bfc/types'; +import { InputDialog } from '@botframework-composer/types'; import { ExternalApi } from './ExternalApi'; import { shallowCopyAdaptiveAction } from './shallowCopyAdaptiveAction'; diff --git a/Composer/packages/lib/shared/src/copyUtils/copySendActivity.ts b/Composer/packages/lib/shared/src/copyUtils/copySendActivity.ts index 4629efcd19..0d6ed0e57c 100644 --- a/Composer/packages/lib/shared/src/copyUtils/copySendActivity.ts +++ b/Composer/packages/lib/shared/src/copyUtils/copySendActivity.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { SendActivity } from '@bfc/types'; +import { SendActivity } from '@botframework-composer/types'; import { ExternalApi } from './ExternalApi'; import { shallowCopyAdaptiveAction } from './shallowCopyAdaptiveAction'; diff --git a/Composer/packages/lib/shared/src/copyUtils/copySwitchCondition.ts b/Composer/packages/lib/shared/src/copyUtils/copySwitchCondition.ts index d74c5ac386..a5af21ac19 100644 --- a/Composer/packages/lib/shared/src/copyUtils/copySwitchCondition.ts +++ b/Composer/packages/lib/shared/src/copyUtils/copySwitchCondition.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { SwitchCondition, CaseCondition } from '@bfc/types'; +import { SwitchCondition, CaseCondition } from '@botframework-composer/types'; import { ExternalApi } from './ExternalApi'; import { copyAdaptiveActionList } from './copyAdaptiveActionList'; diff --git a/Composer/packages/lib/shared/src/copyUtils/shallowCopyAdaptiveAction.ts b/Composer/packages/lib/shared/src/copyUtils/shallowCopyAdaptiveAction.ts index 90cab1838b..f1f356f004 100644 --- a/Composer/packages/lib/shared/src/copyUtils/shallowCopyAdaptiveAction.ts +++ b/Composer/packages/lib/shared/src/copyUtils/shallowCopyAdaptiveAction.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { BaseSchema } from '@bfc/types'; +import { BaseSchema } from '@botframework-composer/types'; import { ExternalApi } from './ExternalApi'; diff --git a/Composer/packages/lib/shared/src/deleteUtils/index.ts b/Composer/packages/lib/shared/src/deleteUtils/index.ts index 27eca298c5..d517ace9a2 100644 --- a/Composer/packages/lib/shared/src/deleteUtils/index.ts +++ b/Composer/packages/lib/shared/src/deleteUtils/index.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License -import { MicrosoftIDialog, SDKKinds } from '@bfc/types'; +import { MicrosoftIDialog, SDKKinds } from '@botframework-composer/types'; import { LuMetaData, LuType } from '../luNameBuilder'; import { walkAdaptiveAction } from '../walkerUtils/walkAdaptiveAction'; diff --git a/Composer/packages/lib/shared/src/diagnostic.ts b/Composer/packages/lib/shared/src/diagnostic.ts index 8542400a87..c0e380d518 100644 --- a/Composer/packages/lib/shared/src/diagnostic.ts +++ b/Composer/packages/lib/shared/src/diagnostic.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { IRange, IPosition, IDiagnostic, DiagnosticSeverity } from '@bfc/types'; +import { IRange, IPosition, IDiagnostic, DiagnosticSeverity } from '@botframework-composer/types'; export class Range implements IRange { start: Position; diff --git a/Composer/packages/lib/shared/src/dialogFactory.ts b/Composer/packages/lib/shared/src/dialogFactory.ts index 9d237d5c04..d240a2c85c 100644 --- a/Composer/packages/lib/shared/src/dialogFactory.ts +++ b/Composer/packages/lib/shared/src/dialogFactory.ts @@ -4,7 +4,7 @@ import { JSONSchema7 } from 'json-schema'; import merge from 'lodash/merge'; import formatMessage from 'format-message'; -import { DesignerData, MicrosoftIDialog, LuIntentSection, SDKKinds } from '@bfc/types'; +import { DesignerData, MicrosoftIDialog, LuIntentSection, SDKKinds } from '@botframework-composer/types'; import { copyAdaptiveAction } from './copyUtils'; import { deleteAdaptiveAction, deleteAdaptiveActionList } from './deleteUtils'; @@ -326,7 +326,7 @@ export const getDesignerId = (data?: DesignerData) => { }; export const deepCopyAction = async ( - data, + data: MicrosoftIDialog, copyLgTemplate: FieldProcessorAsync, copyLuIntent: FieldProcessorAsync ) => { @@ -338,14 +338,14 @@ export const deepCopyAction = async ( }; export const deepCopyActions = async ( - actions: any[], + actions: MicrosoftIDialog[], copyLgTemplate: FieldProcessorAsync, copyLuIntent: FieldProcessorAsync ) => { // NOTES: underlying lg api for writing new lg template to file is not concurrency-safe, // so we have to call them sequentially // TODO: copy them parralleled via Promise.all() after optimizing lg api. - const copiedActions: any[] = []; + const copiedActions: MicrosoftIDialog[] = []; for (const action of actions) { // Deep copy nodes with external resources const copy = await deepCopyAction(action, copyLgTemplate, copyLuIntent); diff --git a/Composer/packages/lib/shared/src/index.ts b/Composer/packages/lib/shared/src/index.ts index f21fcd1e18..2d5f44518f 100644 --- a/Composer/packages/lib/shared/src/index.ts +++ b/Composer/packages/lib/shared/src/index.ts @@ -7,7 +7,7 @@ import * as dialogUtils from './dialogUtils'; formatMessage.setup({ missingTranslation: 'ignore' }); -export * from '@bfc/types'; +export * from '@botframework-composer/types'; export * from './constant'; export * from './copyUtils'; diff --git a/Composer/packages/lib/shared/src/labelMap.ts b/Composer/packages/lib/shared/src/labelMap.ts index a021349a79..ae573453b7 100644 --- a/Composer/packages/lib/shared/src/labelMap.ts +++ b/Composer/packages/lib/shared/src/labelMap.ts @@ -2,7 +2,7 @@ // Licensed under the MIT License. import formatMessage from 'format-message'; -import { SDKKinds } from '@bfc/types'; +import { SDKKinds } from '@botframework-composer/types'; interface LabelOverride { title?: string | false; diff --git a/Composer/packages/lib/shared/src/lgUtils/stringBuilders/buildLgType.ts b/Composer/packages/lib/shared/src/lgUtils/stringBuilders/buildLgType.ts index fe5f29392b..eb44c336e4 100644 --- a/Composer/packages/lib/shared/src/lgUtils/stringBuilders/buildLgType.ts +++ b/Composer/packages/lib/shared/src/lgUtils/stringBuilders/buildLgType.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License -import { SDKKinds } from '@bfc/types'; +import { SDKKinds } from '@botframework-composer/types'; import LgType from '../models/LgType'; diff --git a/Composer/packages/lib/shared/src/schemaUtils/dereference.ts b/Composer/packages/lib/shared/src/schemaUtils/dereference.ts index 813351fd4c..3ca87b9361 100644 --- a/Composer/packages/lib/shared/src/schemaUtils/dereference.ts +++ b/Composer/packages/lib/shared/src/schemaUtils/dereference.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { SchemaDefinitions, DefinitionCache, JSONSchema7 } from '@bfc/types'; +import { SchemaDefinitions, DefinitionCache, JSONSchema7 } from '@botframework-composer/types'; import { getRef } from './getRef'; import { CIRCULAR_REFS, isCircular } from './circular'; diff --git a/Composer/packages/lib/shared/src/schemaUtils/getRef.ts b/Composer/packages/lib/shared/src/schemaUtils/getRef.ts index 7dbc39f75a..fd41330dee 100644 --- a/Composer/packages/lib/shared/src/schemaUtils/getRef.ts +++ b/Composer/packages/lib/shared/src/schemaUtils/getRef.ts @@ -3,7 +3,7 @@ import get from 'lodash/get'; import formatMessage from 'format-message'; -import { SchemaDefinitions, DefinitionCache, JSONSchema7 } from '@bfc/types'; +import { SchemaDefinitions, DefinitionCache, JSONSchema7 } from '@botframework-composer/types'; import { isCircular } from './circular'; import { dereference } from './dereference'; diff --git a/Composer/packages/lib/shared/src/skillsUtils/index.ts b/Composer/packages/lib/shared/src/skillsUtils/index.ts index c905f7a8c0..958a3ae7a4 100644 --- a/Composer/packages/lib/shared/src/skillsUtils/index.ts +++ b/Composer/packages/lib/shared/src/skillsUtils/index.ts @@ -3,7 +3,7 @@ import get from 'lodash/get'; import keyBy from 'lodash/keyBy'; -import { DialogSetting, Skill } from '@bfc/types'; +import { DialogSetting, Skill } from '@botframework-composer/types'; export function fetchFromSettings(path: string, settings: DialogSetting): string { if (path) { diff --git a/Composer/packages/lib/shared/src/viewUtils.ts b/Composer/packages/lib/shared/src/viewUtils.ts index e0a2e539b9..abb556db04 100644 --- a/Composer/packages/lib/shared/src/viewUtils.ts +++ b/Composer/packages/lib/shared/src/viewUtils.ts @@ -3,7 +3,7 @@ import get from 'lodash/get'; import formatMessage from 'format-message'; -import { SDKKinds } from '@bfc/types'; +import { SDKKinds } from '@botframework-composer/types'; import { conceptLabels as conceptLabelsFn } from './labelMap'; import { PromptTab, PromptTabTitles } from './promptTabs'; diff --git a/Composer/packages/lib/shared/src/walkerUtils/AdaptiveActionVisitor.ts b/Composer/packages/lib/shared/src/walkerUtils/AdaptiveActionVisitor.ts index 03ef28290f..e2a9ccb8e1 100644 --- a/Composer/packages/lib/shared/src/walkerUtils/AdaptiveActionVisitor.ts +++ b/Composer/packages/lib/shared/src/walkerUtils/AdaptiveActionVisitor.ts @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License -import { MicrosoftIDialog } from '@bfc/types'; +import { MicrosoftIDialog } from '@botframework-composer/types'; -export type AdaptiveActionVisitor = (action: MicrosoftIDialog) => void; +export type AdaptiveActionVisitor = (action: MicrosoftIDialog | string) => void; diff --git a/Composer/packages/lib/shared/src/walkerUtils/walkAdaptiveAction.ts b/Composer/packages/lib/shared/src/walkerUtils/walkAdaptiveAction.ts index b2149bf185..011b4e61e5 100644 --- a/Composer/packages/lib/shared/src/walkerUtils/walkAdaptiveAction.ts +++ b/Composer/packages/lib/shared/src/walkerUtils/walkAdaptiveAction.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License -import { MicrosoftIDialog, SDKKinds } from '@bfc/types'; +import { SDKKinds } from '@botframework-composer/types'; import { walkIfCondition } from './walkIfCondition'; import { walkSwitchCondition } from './walkSwitchCondition'; @@ -16,7 +16,7 @@ const WalkerMap: { [$kind: string]: (input, visitor: AdaptiveActionVisitor) => v [SDKKinds.EditActions]: walkActionWithChildren, }; -export const walkAdaptiveAction = (input, visit: (action: MicrosoftIDialog) => void): void => { +export const walkAdaptiveAction = (input, visit: AdaptiveActionVisitor): void => { if (typeof input === 'string') { visit(input); return; diff --git a/Composer/packages/lib/shared/src/walkerUtils/walkAdaptiveActionList.ts b/Composer/packages/lib/shared/src/walkerUtils/walkAdaptiveActionList.ts index 6dcd10b3a7..da6b27ae2b 100644 --- a/Composer/packages/lib/shared/src/walkerUtils/walkAdaptiveActionList.ts +++ b/Composer/packages/lib/shared/src/walkerUtils/walkAdaptiveActionList.ts @@ -1,10 +1,12 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License -import { MicrosoftIDialog } from '@bfc/types'; +import { MicrosoftIDialog } from '@botframework-composer/types'; import { walkAdaptiveAction } from './walkAdaptiveAction'; -export const walkAdaptiveActionList = (inputs: MicrosoftIDialog[], visit: (action: MicrosoftIDialog) => void): void => { +import { AdaptiveActionVisitor } from './AdaptiveActionVisitor'; + +export const walkAdaptiveActionList = (inputs: MicrosoftIDialog[], visit: AdaptiveActionVisitor): void => { if (Array.isArray(inputs)) { inputs.forEach((action) => walkAdaptiveAction(action, visit)); } diff --git a/Composer/packages/lib/shared/src/walkerUtils/walkLgResources.ts b/Composer/packages/lib/shared/src/walkerUtils/walkLgResources.ts index bca680d5b1..9ecb937ab8 100644 --- a/Composer/packages/lib/shared/src/walkerUtils/walkLgResources.ts +++ b/Composer/packages/lib/shared/src/walkerUtils/walkLgResources.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import get from 'lodash/get'; -import { SDKKinds } from '@bfc/types'; +import { SDKKinds } from '@botframework-composer/types'; import { walkAdaptiveAction } from './walkAdaptiveAction'; import { walkAdaptiveActionList } from './walkAdaptiveActionList'; diff --git a/Composer/packages/lib/ui-shared/jest.config.js b/Composer/packages/lib/ui-shared/jest.config.js index 596d2b39d9..0b0fe1ed02 100644 --- a/Composer/packages/lib/ui-shared/jest.config.js +++ b/Composer/packages/lib/ui-shared/jest.config.js @@ -2,6 +2,6 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('ui-shared', 'react'); diff --git a/Composer/packages/lib/ui-shared/package.json b/Composer/packages/lib/ui-shared/package.json index 5ad003d57b..06ba473d61 100644 --- a/Composer/packages/lib/ui-shared/package.json +++ b/Composer/packages/lib/ui-shared/package.json @@ -30,7 +30,7 @@ "devDependencies": { "@bfc/adaptive-form": "*", "@bfc/extension-client": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/react": "16.9.23", "@types/react-dom": "16.9.5", "react": "16.13.1", diff --git a/Composer/packages/server/jest.config.js b/Composer/packages/server/jest.config.js index 96ddb74adc..316a1ce372 100644 --- a/Composer/packages/server/jest.config.js +++ b/Composer/packages/server/jest.config.js @@ -1,6 +1,6 @@ const path = require('path'); -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('server', 'node', { setupFiles: [path.resolve(__dirname, 'src/__tests__/setupEnv.ts')], diff --git a/Composer/packages/server/package.json b/Composer/packages/server/package.json index 511ffddcf3..7027248de7 100644 --- a/Composer/packages/server/package.json +++ b/Composer/packages/server/package.json @@ -31,7 +31,7 @@ "delay": 2 }, "devDependencies": { - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/archiver": "^3.1.0", "@types/body-parser": "^1.17.0", "@types/compression": "^1.0.1", diff --git a/Composer/packages/test-utils/package.json b/Composer/packages/test-utils/package.json index 22aa83c536..5e38d2be3e 100644 --- a/Composer/packages/test-utils/package.json +++ b/Composer/packages/test-utils/package.json @@ -1,13 +1,14 @@ { - "name": "@bfc/test-utils", - "version": "0.0.0", - "private": true, - "description": "", + "name": "@botframework-composer/test-utils", + "version": "0.0.1", + "description": "Shared testing utilities for Botframework Composer.", "main": "lib/index.js", - "author": "", + "author": "andy.brown@microsoft.com", "license": "MIT", + "files": ["lib"], "scripts": { - "build": "rimraf lib && tsc" + "build": "rimraf lib && tsc", + "prepublishOnly": "npm run build" }, "dependencies": { "@babel/core": "^7.9.6", @@ -25,6 +26,8 @@ "react-test-renderer": "^16.13.1" }, "devDependencies": { - "@types/jest": "^25.2.3" + "@types/jest": "^25.2.3", + "rimraf": "^3.0.2", + "typescript": "^3.8.3" } } diff --git a/Composer/packages/tools/language-servers/intellisense/jest.config.js b/Composer/packages/tools/language-servers/intellisense/jest.config.js index 30a82bb9f1..9471d42186 100644 --- a/Composer/packages/tools/language-servers/intellisense/jest.config.js +++ b/Composer/packages/tools/language-servers/intellisense/jest.config.js @@ -2,7 +2,7 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('lsp-intellisense', 'node', { testPathIgnorePatterns: ['/helpers/'], diff --git a/Composer/packages/tools/language-servers/language-generation/jest.config.js b/Composer/packages/tools/language-servers/language-generation/jest.config.js index 1ae2e4a894..9c5f0f7bca 100644 --- a/Composer/packages/tools/language-servers/language-generation/jest.config.js +++ b/Composer/packages/tools/language-servers/language-generation/jest.config.js @@ -1,4 +1,4 @@ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('lsp-lg', 'node', { testPathIgnorePatterns: ['/helpers/'], diff --git a/Composer/packages/tools/language-servers/language-generation/package.json b/Composer/packages/tools/language-servers/language-generation/package.json index cb0876ffa9..b2b847753b 100644 --- a/Composer/packages/tools/language-servers/language-generation/package.json +++ b/Composer/packages/tools/language-servers/language-generation/package.json @@ -21,7 +21,7 @@ "@bfc/built-in-functions": "*" }, "devDependencies": { - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/node": "^12.0.4", "cross-env": "^6.0.3", "express": "^4.17.1", diff --git a/Composer/packages/tools/language-servers/language-understanding/jest.config.js b/Composer/packages/tools/language-servers/language-understanding/jest.config.js index 132a51c949..13c93d04ef 100644 --- a/Composer/packages/tools/language-servers/language-understanding/jest.config.js +++ b/Composer/packages/tools/language-servers/language-understanding/jest.config.js @@ -2,7 +2,7 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('lsp-lu', 'node', { testPathIgnorePatterns: ['/helpers/'], diff --git a/Composer/packages/tools/language-servers/language-understanding/package.json b/Composer/packages/tools/language-servers/language-understanding/package.json index f9796f427a..0cd4ac9f1e 100644 --- a/Composer/packages/tools/language-servers/language-understanding/package.json +++ b/Composer/packages/tools/language-servers/language-understanding/package.json @@ -33,7 +33,7 @@ "ws": "^5.0.0" }, "devDependencies": { - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/node": "^12.0.4", "clean-webpack-plugin": "^3.0.0", "css-loader": "^3.2.0", diff --git a/Composer/packages/types/package.json b/Composer/packages/types/package.json index 15b001fae6..1e20041ea8 100644 --- a/Composer/packages/types/package.json +++ b/Composer/packages/types/package.json @@ -1,11 +1,16 @@ { - "name": "@bfc/types", + "name": "@botframework-composer/types", "version": "0.0.1", - "description": "Shared types for Composer.", + "description": "Shared types for Botframework Composer..", "main": "lib/index.js", + "files": [ + "lib" + ], "scripts": { "build": "yarn clean && tsc", - "clean": "rimraf lib" + "clean": "rimraf lib", + "lint": "eslint --quiet src", + "prepublishOnly": "npm run lint && npm run build" }, "author": "andy.brown@microsoft.com", "license": "MIT", @@ -14,6 +19,7 @@ }, "devDependencies": { "@types/express": "^4.16.1", + "eslint": "7.0.0", "rimraf": "^3.0.2", "typescript": "^3.8.3" } diff --git a/Composer/packages/types/src/indexers.ts b/Composer/packages/types/src/indexers.ts index b7db9085ab..c0293bce42 100644 --- a/Composer/packages/types/src/indexers.ts +++ b/Composer/packages/types/src/indexers.ts @@ -3,6 +3,7 @@ import { IDiagnostic, IRange } from './diagnostic'; import { IIntentTrigger } from './dialogUtils'; +import { MicrosoftIDialog } from './sdk'; import { DialogSetting } from './index'; @@ -47,7 +48,7 @@ export type DialogSchemaFile = { }; export type DialogInfo = { - content: any; + content: MicrosoftIDialog; diagnostics: IDiagnostic[]; displayName: string; id: string; diff --git a/Composer/packages/types/src/sdk.ts b/Composer/packages/types/src/sdk.ts index 2b1a3f4322..c8ce96a220 100644 --- a/Composer/packages/types/src/sdk.ts +++ b/Composer/packages/types/src/sdk.ts @@ -18,6 +18,8 @@ export type BaseSchema = { $designer?: DesignerData; /** If 'disabled' equals to or be evaluated as 'true', runtime will skip this action. */ disabled?: boolean | string; + + [key: string]: unknown; }; /* Union of components which implement the IActivityTemplate interface */ @@ -293,14 +295,4 @@ export type MicrosoftAdaptiveDialog = BaseSchema & { }; /* Union of components which implement the IDialog interface */ -export type MicrosoftIDialog = - | ChoiceInput - | ConfirmInput - | MicrosoftIRecognizer - | ITriggerCondition - | SwitchCondition - | TextInput - | SendActivity - | IfCondition - | Foreach - | ForeachPage; +export type MicrosoftIDialog = BaseSchema; diff --git a/Composer/packages/types/src/shell.ts b/Composer/packages/types/src/shell.ts index 5dfd06792e..eab3dd3157 100644 --- a/Composer/packages/types/src/shell.ts +++ b/Composer/packages/types/src/shell.ts @@ -5,6 +5,7 @@ import type { DialogInfo, LuFile, LgFile, QnAFile, LuIntentSection, LgTemplate, DialogSchemaFile } from './indexers'; import type { ILUFeaturesConfig, SkillSetting, UserSettings } from './settings'; import type { JSONSchema7 } from './schema'; +import { MicrosoftIDialog } from './sdk'; /** Recursively marks all properties as optional. */ type AllPartial = { @@ -108,6 +109,16 @@ export type ProjectContext = { schemas: BotSchemas; }; +export type ActionContextApi = { + constructAction: (dialogId: string, action: MicrosoftIDialog) => Promise; + constructActions: (dialogId: string, actions: MicrosoftIDialog[]) => Promise; + copyAction: (dialogId: string, action: MicrosoftIDialog) => Promise; + copyActions: (dialogId: string, actions: MicrosoftIDialog[]) => Promise; + deleteAction: (dialogId: string, action: MicrosoftIDialog) => Promise; + deleteActions: (dialogId: string, actions: MicrosoftIDialog[]) => Promise; + actionsContainLuIntent: (action: MicrosoftIDialog[]) => boolean; +}; + export type DialogEditingContextApi = { saveData: (newData: T, updatePath?: string) => void; onFocusSteps: (stepIds: string[], focusedTab?: string) => void; @@ -120,10 +131,6 @@ export type DialogEditingContextApi = { export type DialogEditingContext = { currentDialog: DialogInfo; - data: { - $kind: string; - [key: string]: any; - }; designerId: string; dialogId: string; clipboardActions: any[]; @@ -140,7 +147,8 @@ export type ShellApi = ApplicationContextApi & ProjectContextApi & DialogEditingContextApi & LgContextApi & - LuContextApi; + LuContextApi & + ActionContextApi; export type Shell = { api: ShellApi; diff --git a/Composer/packages/types/yarn.lock b/Composer/packages/types/yarn.lock deleted file mode 100644 index 98b4db2c41..0000000000 --- a/Composer/packages/types/yarn.lock +++ /dev/null @@ -1,18 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -express-serve-static-core@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/express-serve-static-core/-/express-serve-static-core-0.1.1.tgz#222358112a79bc9fbe00838232e8cd2e3132ef37" - integrity sha1-IiNYESp5vJ++AIOCMujNLjEy7zc= - -json-schema@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.5.tgz#97997f50972dd0500214e208c407efa4b5d7063b" - integrity sha512-gWJOWYFrhQ8j7pVm0EM8Slr+EPVq1Phf6lvzvD/WCeqkrx/f2xBI0xOsRRS9xCn3I4vKtP519dvs3TP09r24wQ== - -typescript@^3.8.3: - version "3.9.7" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" - integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== diff --git a/Composer/packages/ui-plugins/composer/jest.config.js b/Composer/packages/ui-plugins/composer/jest.config.js index 134105673c..ca312c9f82 100644 --- a/Composer/packages/ui-plugins/composer/jest.config.js +++ b/Composer/packages/ui-plugins/composer/jest.config.js @@ -2,6 +2,6 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('ui-plugin/composer', 'react'); diff --git a/Composer/packages/ui-plugins/composer/package.json b/Composer/packages/ui-plugins/composer/package.json index c59aa6fc15..1a98f8650a 100644 --- a/Composer/packages/ui-plugins/composer/package.json +++ b/Composer/packages/ui-plugins/composer/package.json @@ -31,7 +31,7 @@ "@bfc/adaptive-form": "*", "@bfc/extension-client": "*", "@bfc/intellisense": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@emotion/core": "^10.0.27", "@types/react": "16.9.23", "@types/react-dom": "16.9.5", @@ -42,4 +42,4 @@ "dependencies": { "lodash": "^4.17.19" } -} \ No newline at end of file +} diff --git a/Composer/packages/ui-plugins/example/jest.config.js b/Composer/packages/ui-plugins/example/jest.config.js index 70dd32fa6d..65a84c977f 100644 --- a/Composer/packages/ui-plugins/example/jest.config.js +++ b/Composer/packages/ui-plugins/example/jest.config.js @@ -2,6 +2,6 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('', 'react'); diff --git a/Composer/packages/ui-plugins/example/package.json b/Composer/packages/ui-plugins/example/package.json index 3322fbc7c6..3e01800fd1 100644 --- a/Composer/packages/ui-plugins/example/package.json +++ b/Composer/packages/ui-plugins/example/package.json @@ -29,7 +29,7 @@ "devDependencies": { "@bfc/adaptive-form": "*", "@bfc/extension-client": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@emotion/core": "^10.0.27", "@types/react": "16.9.23", "@types/react-dom": "16.9.5", diff --git a/Composer/packages/ui-plugins/lg/jest.config.js b/Composer/packages/ui-plugins/lg/jest.config.js index d37b063382..e10d2fc4ef 100644 --- a/Composer/packages/ui-plugins/lg/jest.config.js +++ b/Composer/packages/ui-plugins/lg/jest.config.js @@ -2,6 +2,6 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('ui-plugin/json', 'react'); diff --git a/Composer/packages/ui-plugins/lg/package.json b/Composer/packages/ui-plugins/lg/package.json index 805b95db1e..06f2298a77 100644 --- a/Composer/packages/ui-plugins/lg/package.json +++ b/Composer/packages/ui-plugins/lg/package.json @@ -29,7 +29,7 @@ "devDependencies": { "@bfc/adaptive-form": "*", "@bfc/extension-client": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/react": "16.9.23", "@types/react-dom": "16.9.5", "react": "16.13.1", diff --git a/Composer/packages/ui-plugins/lg/src/LgField.tsx b/Composer/packages/ui-plugins/lg/src/LgField.tsx index f242f36a5a..3c16dc0b21 100644 --- a/Composer/packages/ui-plugins/lg/src/LgField.tsx +++ b/Composer/packages/ui-plugins/lg/src/LgField.tsx @@ -6,7 +6,7 @@ import { jsx } from '@emotion/core'; import React, { useCallback } from 'react'; import { LgEditor } from '@bfc/code-editor'; import { FieldProps, useShellApi } from '@bfc/extension-client'; -import { FieldLabel } from '@bfc/adaptive-form'; +import { FieldLabel, useFormData } from '@bfc/adaptive-form'; import { LgMetaData, LgTemplateRef, LgType, CodeEditorSettings } from '@bfc/shared'; import { filterTemplateDiagnostics } from '@bfc/indexers'; @@ -34,10 +34,11 @@ const getInitialTemplate = (fieldName: string, formData?: string): string => { const LgField: React.FC> = (props) => { const { label, id, description, value, name, uiOptions, required } = props; - const { designerId, currentDialog, lgFiles, shellApi, projectId, locale, userSettings, data } = useShellApi(); + const { designerId, currentDialog, lgFiles, shellApi, projectId, locale, userSettings } = useShellApi(); + const formData = useFormData(); let lgType = name; - const $kind = data?.$kind; + const $kind = formData?.$kind; if ($kind) { lgType = new LgType($kind, name).toString(); } diff --git a/Composer/packages/ui-plugins/lg/src/LgWidget/LgWidget.tsx b/Composer/packages/ui-plugins/lg/src/LgWidget/LgWidget.tsx index d8aad8a4f1..1103bb46d9 100644 --- a/Composer/packages/ui-plugins/lg/src/LgWidget/LgWidget.tsx +++ b/Composer/packages/ui-plugins/lg/src/LgWidget/LgWidget.tsx @@ -16,7 +16,7 @@ export interface LgWidgetProps extends WidgetContainerProps { } export const LgWidget: React.FC = ({ data, field, defaultContent = '' }) => { - const activityTemplate = get(data, field, ''); + const activityTemplate = get(data, field, '') as string; const templateText = useLgTemplate(activityTemplate); const displayedText = templateText ? normalizeLgText(templateText) : defaultContent; diff --git a/Composer/packages/ui-plugins/luis/jest.config.js b/Composer/packages/ui-plugins/luis/jest.config.js index 86ddeadc7b..9fbcb499fc 100644 --- a/Composer/packages/ui-plugins/luis/jest.config.js +++ b/Composer/packages/ui-plugins/luis/jest.config.js @@ -2,6 +2,6 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('ui-plugin/luis', 'react'); diff --git a/Composer/packages/ui-plugins/luis/package.json b/Composer/packages/ui-plugins/luis/package.json index 6eeb2588bf..2cc20b429e 100644 --- a/Composer/packages/ui-plugins/luis/package.json +++ b/Composer/packages/ui-plugins/luis/package.json @@ -30,7 +30,7 @@ "devDependencies": { "@bfc/adaptive-form": "*", "@bfc/extension-client": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/react": "16.9.23", "@types/react-dom": "16.9.5", "react": "16.13.1", diff --git a/Composer/packages/ui-plugins/prompts/jest.config.js b/Composer/packages/ui-plugins/prompts/jest.config.js index 6af3f02c3c..249c9ffd85 100644 --- a/Composer/packages/ui-plugins/prompts/jest.config.js +++ b/Composer/packages/ui-plugins/prompts/jest.config.js @@ -2,6 +2,6 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('ui-plugin/prompts', 'react'); diff --git a/Composer/packages/ui-plugins/prompts/package.json b/Composer/packages/ui-plugins/prompts/package.json index e4bc17d4ae..a112a433e4 100644 --- a/Composer/packages/ui-plugins/prompts/package.json +++ b/Composer/packages/ui-plugins/prompts/package.json @@ -34,7 +34,7 @@ "devDependencies": { "@bfc/extension-client": "*", "@bfc/adaptive-form": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/react": "16.9.23", "@types/react-dom": "16.9.5", "format-message": "^6.2.3", diff --git a/Composer/packages/ui-plugins/schema-editor/jest.config.js b/Composer/packages/ui-plugins/schema-editor/jest.config.js index eb982db7d8..c8d7ebdb5d 100644 --- a/Composer/packages/ui-plugins/schema-editor/jest.config.js +++ b/Composer/packages/ui-plugins/schema-editor/jest.config.js @@ -2,6 +2,6 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('ui-plugin/dialog-schema-editor', 'react'); diff --git a/Composer/packages/ui-plugins/schema-editor/package.json b/Composer/packages/ui-plugins/schema-editor/package.json index caee894f71..ca16e254ef 100644 --- a/Composer/packages/ui-plugins/schema-editor/package.json +++ b/Composer/packages/ui-plugins/schema-editor/package.json @@ -30,7 +30,7 @@ "devDependencies": { "@bfc/extension-client": "*", "@bfc/adaptive-form": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/react": "16.9.23", "@types/react-dom": "16.9.5", "format-message": "^6.2.3", diff --git a/Composer/packages/ui-plugins/schema-editor/src/__tests__/SchemaEditorField.test.tsx b/Composer/packages/ui-plugins/schema-editor/src/__tests__/SchemaEditorField.test.tsx index 0886da3045..cba3ae8d5e 100644 --- a/Composer/packages/ui-plugins/schema-editor/src/__tests__/SchemaEditorField.test.tsx +++ b/Composer/packages/ui-plugins/schema-editor/src/__tests__/SchemaEditorField.test.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { EditorExtension } from '@bfc/extension-client'; -import { render, fireEvent, findAllByRole } from '@bfc/test-utils'; +import { render, fireEvent, findAllByRole } from '@botframework-composer/test-utils'; import { SchemaEditorField } from '../Fields/SchemaEditorField'; diff --git a/Composer/packages/ui-plugins/select-dialog/jest.config.js b/Composer/packages/ui-plugins/select-dialog/jest.config.js index e90b7b2ef1..72282d61e2 100644 --- a/Composer/packages/ui-plugins/select-dialog/jest.config.js +++ b/Composer/packages/ui-plugins/select-dialog/jest.config.js @@ -2,6 +2,6 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('ui-plugin/select-dialog', 'react'); diff --git a/Composer/packages/ui-plugins/select-dialog/package.json b/Composer/packages/ui-plugins/select-dialog/package.json index b507dac159..0c82c144ca 100644 --- a/Composer/packages/ui-plugins/select-dialog/package.json +++ b/Composer/packages/ui-plugins/select-dialog/package.json @@ -34,7 +34,7 @@ "devDependencies": { "@bfc/extension-client": "*", "@bfc/adaptive-form": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/react": "16.9.23", "@types/react-dom": "16.9.5", "format-message": "^6.2.3", diff --git a/Composer/packages/ui-plugins/select-dialog/src/__tests__/selectDialog.test.tsx b/Composer/packages/ui-plugins/select-dialog/src/__tests__/selectDialog.test.tsx index 5924da6434..c40d66b874 100644 --- a/Composer/packages/ui-plugins/select-dialog/src/__tests__/selectDialog.test.tsx +++ b/Composer/packages/ui-plugins/select-dialog/src/__tests__/selectDialog.test.tsx @@ -4,7 +4,7 @@ // @ts-nocheck import React from 'react'; -import { fireEvent, getAllByRole, render } from '@bfc/test-utils'; +import { fireEvent, getAllByRole, render } from '@botframework-composer/test-utils'; import { EditorExtension } from '@bfc/extension-client'; import { SelectDialog } from '../SelectDialog'; diff --git a/Composer/packages/ui-plugins/select-skill-dialog/jest.config.js b/Composer/packages/ui-plugins/select-skill-dialog/jest.config.js index e1eea01308..4b224aef46 100644 --- a/Composer/packages/ui-plugins/select-skill-dialog/jest.config.js +++ b/Composer/packages/ui-plugins/select-skill-dialog/jest.config.js @@ -2,7 +2,7 @@ // Licensed under the MIT License. /* eslint-disable @typescript-eslint/no-var-requires */ -const { createConfig } = require('@bfc/test-utils'); +const { createConfig } = require('@botframework-composer/test-utils'); module.exports = createConfig('ui-plugin/select-skill-dialog', 'react', { testPathIgnorePatterns: ['__tests__/constants.ts', 'lib'], diff --git a/Composer/packages/ui-plugins/select-skill-dialog/package.json b/Composer/packages/ui-plugins/select-skill-dialog/package.json index c05e3d53fe..c44e7bdb09 100644 --- a/Composer/packages/ui-plugins/select-skill-dialog/package.json +++ b/Composer/packages/ui-plugins/select-skill-dialog/package.json @@ -34,7 +34,7 @@ "devDependencies": { "@bfc/adaptive-form": "*", "@bfc/extension-client": "*", - "@bfc/test-utils": "*", + "@botframework-composer/test-utils": "*", "@types/react": "16.9.23", "@types/react-dom": "16.9.5", "format-message": "^6.2.3", diff --git a/Composer/packages/ui-plugins/select-skill-dialog/src/__tests__/SelectSkillDialog.test.tsx b/Composer/packages/ui-plugins/select-skill-dialog/src/__tests__/SelectSkillDialog.test.tsx index 1d6cc2c7ce..345331298d 100644 --- a/Composer/packages/ui-plugins/select-skill-dialog/src/__tests__/SelectSkillDialog.test.tsx +++ b/Composer/packages/ui-plugins/select-skill-dialog/src/__tests__/SelectSkillDialog.test.tsx @@ -2,7 +2,7 @@ // Licensed under the MIT License. import React from 'react'; -import { act, fireEvent, getAllByRole, render } from '@bfc/test-utils'; +import { act, fireEvent, getAllByRole, render } from '@botframework-composer/test-utils'; import { EditorExtension } from '@bfc/extension-client'; import { SelectSkillDialogField, settingReferences } from '../SelectSkillDialogField'; diff --git a/Composer/packages/ui-plugins/select-skill-dialog/src/__tests__/SkillEndpointField.test.tsx b/Composer/packages/ui-plugins/select-skill-dialog/src/__tests__/SkillEndpointField.test.tsx index e0b2378b65..56ca59c14b 100644 --- a/Composer/packages/ui-plugins/select-skill-dialog/src/__tests__/SkillEndpointField.test.tsx +++ b/Composer/packages/ui-plugins/select-skill-dialog/src/__tests__/SkillEndpointField.test.tsx @@ -3,10 +3,10 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import React from 'react'; -import { fireEvent, getAllByRole, render } from '@bfc/test-utils'; +import { fireEvent, getAllByRole, render } from '@botframework-composer/test-utils'; import { EditorExtension } from '@bfc/extension-client'; import { convertSkillsToDictionary, Skill } from '@bfc/shared'; -import { act } from '@bfc/test-utils/lib/hooks'; +import { act } from '@botframework-composer/test-utils/lib/hooks'; import { SkillEndpointField } from '../SkillEndpointField'; diff --git a/Composer/plugins/azurePublish/package.json b/Composer/plugins/azurePublish/package.json index d229dff6a4..ac443ae1c7 100644 --- a/Composer/plugins/azurePublish/package.json +++ b/Composer/plugins/azurePublish/package.json @@ -21,6 +21,7 @@ "@bfc/extension": "../../packages/extension", "@bfc/indexers": "../../packages/lib/indexers", "@bfc/shared": "../../packages/lib/shared", + "@botframework-composer/types": "0.0.1", "@microsoft/bf-lu": "^4.11.0-dev.20201005.7e5e1b8", "@microsoft/bf-luis-cli": "^4.10.0-dev.20200721.8bb21ac", "@types/archiver": "3.1.0", diff --git a/Composer/plugins/azurePublish/src/index.ts b/Composer/plugins/azurePublish/src/index.ts index 759d0370dd..59c8eec129 100644 --- a/Composer/plugins/azurePublish/src/index.ts +++ b/Composer/plugins/azurePublish/src/index.ts @@ -6,7 +6,7 @@ import path from 'path'; import { v4 as uuid } from 'uuid'; import md5 from 'md5'; import { copy, rmdir, emptyDir, readJson, pathExists, writeJson, mkdirSync, writeFileSync } from 'fs-extra'; -import { IBotProject } from '@bfc/shared'; +import { IBotProject } from '@botframework-composer/types'; import { JSONSchema7 } from '@bfc/extension'; import { Debugger } from 'debug'; diff --git a/Composer/plugins/azurePublish/src/luisAndQnA.ts b/Composer/plugins/azurePublish/src/luisAndQnA.ts index 5cb1241eb1..aa1a9cd56c 100644 --- a/Composer/plugins/azurePublish/src/luisAndQnA.ts +++ b/Composer/plugins/azurePublish/src/luisAndQnA.ts @@ -6,7 +6,7 @@ import { promisify } from 'util'; import * as fs from 'fs-extra'; import * as rp from 'request-promise'; -import { ILuisConfig, FileInfo, IQnAConfig } from '@bfc/shared'; +import { ILuisConfig, FileInfo, IQnAConfig } from '@botframework-composer/types'; import { ICrossTrainConfig, createCrossTrainConfig } from './utils/crossTrainUtil'; import { BotProjectDeployLoggerType } from './botProjectLoggerType'; diff --git a/Composer/plugins/azurePublish/src/utils/crossTrainUtil.ts b/Composer/plugins/azurePublish/src/utils/crossTrainUtil.ts index d28475423e..5dad90688c 100644 --- a/Composer/plugins/azurePublish/src/utils/crossTrainUtil.ts +++ b/Composer/plugins/azurePublish/src/utils/crossTrainUtil.ts @@ -7,7 +7,8 @@ * for more usage detail, please check client/__tests__/utils/luUtil.test.ts */ import keys from 'lodash/keys'; -import { LuFile, DialogInfo, IIntentTrigger, FieldNames, SDKKinds, FileInfo } from '@bfc/shared'; +import { FieldNames } from '@bfc/shared'; +import { LuFile, DialogInfo, IIntentTrigger, SDKKinds, FileInfo } from '@botframework-composer/types'; import { luIndexer } from '@bfc/indexers'; import { getBaseName, getExtension } from './fileUtil'; diff --git a/Composer/plugins/azurePublish/yarn.lock b/Composer/plugins/azurePublish/yarn.lock index f2b9004d08..7af61237e8 100644 --- a/Composer/plugins/azurePublish/yarn.lock +++ b/Composer/plugins/azurePublish/yarn.lock @@ -159,6 +159,7 @@ "@bfc/extension@../../packages/extension": version "1.0.0" dependencies: + "@botframework-composer/types" "*" debug "^4.1.1" fs-extra "^9.0.1" globby "^11.0.0" @@ -178,11 +179,19 @@ "@bfc/shared@../../packages/lib/shared": version "0.0.0" dependencies: + "@botframework-composer/types" "*" format-message "6.2.3" json-schema "^0.2.5" nanoid "^3.1.3" nanoid-dictionary "^3.0.0" +"@botframework-composer/types@*", "@botframework-composer/types@0.0.1": + version "0.0.1" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@botframework-composer/types/-/@botframework-composer/types-0.0.1.tgz#117b86bf8e3bf43567471d436eb1c2f0ffcd6bb8" + integrity sha1-EXuGv4479DVnRx1DbrHC8P/Na7g= + dependencies: + json-schema "^0.2.5" + "@microsoft/bf-cli-command@4.10.0-dev.20200721.8bb21ac": version "4.10.0-dev.20200721.8bb21ac" resolved "https://botbuilder.myget.org/F/botframework-cli/npm/@microsoft/bf-cli-command/-/@microsoft/bf-cli-command-4.10.0-dev.20200721.8bb21ac.tgz#9c81b37bc10072ca6beec7d7f68aa309f8a552ec" @@ -802,11 +811,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -873,9 +877,6 @@ buffer@^5.1.0, buffer@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" cardinal@^2.1.1: version "2.1.1" @@ -1559,11 +1560,6 @@ hyperlinker@^1.0.0: resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - ignore@^5.1.1, ignore@^5.1.4: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" diff --git a/Composer/plugins/vacore/package.json b/Composer/plugins/vacore/package.json index 9a60769422..bbbbd6c218 100644 --- a/Composer/plugins/vacore/package.json +++ b/Composer/plugins/vacore/package.json @@ -12,6 +12,7 @@ "dependencies": { "adm-zip": "^0.4.14", "archiver": "^3.1.1", + "format-message": "^6.2.3", "globby": "^11.0.0", "path": "^0.12.7", "portfinder": "^1.0.26", diff --git a/Composer/plugins/vacore/yarn.lock b/Composer/plugins/vacore/yarn.lock index d191cd90f0..08c94925e1 100644 --- a/Composer/plugins/vacore/yarn.lock +++ b/Composer/plugins/vacore/yarn.lock @@ -74,11 +74,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - bl@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" @@ -112,9 +107,6 @@ buffer@^5.1.0, buffer@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" compress-commons@^2.1.1: version "2.1.1" @@ -198,6 +190,34 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +format-message-formats@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/format-message-formats/-/format-message-formats-6.2.0.tgz#231c2a3d2806e3200331c7aa06430cb403f58792" + integrity sha512-QP0dl1O9P3fDCG5klj101nfizgiWiv0T+DMNBqwi25FvB1LIenQQW4PpULk5zO5PiOSvmMu5pW4HS542kJRAww== + +format-message-interpret@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/format-message-interpret/-/format-message-interpret-6.2.3.tgz#ee72fe924102c7d3f0c2d12797f53d8d93795810" + integrity sha512-OoOdB5yHLzW89RwDQW4fj+8p2Eay9Dtmx4B7Tz8C/QQl/j+aVjy65A5xasQhQD+4JumYU/OxMBdjYzBSR8+ivA== + dependencies: + format-message-formats "^6.2.0" + lookup-closest-locale "^6.2.0" + +format-message-parse@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/format-message-parse/-/format-message-parse-6.2.3.tgz#1393d9e2bc598603a36be992379781a78d1b6c08" + integrity sha512-ZSL3nZ0zaDktDAGwkoGJ439rS9ZfTcMOrWAVav9BOAoKs0qE2Ozal2H6vVJOuIdDhwaJuFqvJ7fdRSE+qR5oNg== + +format-message@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/format-message/-/format-message-6.2.3.tgz#5cb50a664180299c562f5a75083c8476b4157cb4" + integrity sha512-vtPM3hSLXtmPxRLWo4/FX2ylBMOTpV5wGNIq3OYv3ZyK7F+AWkftrAVsJ36gvY8Gw4Yp33xP2Ak+22Pm7sOV/A== + dependencies: + format-message-formats "^6.2.0" + format-message-interpret "^6.2.3" + format-message-parse "^6.2.3" + lookup-closest-locale "^6.2.0" + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -244,11 +264,6 @@ graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - ignore@^5.1.4: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" @@ -331,6 +346,11 @@ lodash@^4.17.14: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lookup-closest-locale@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz#57f665e604fd26f77142d48152015402b607bcf3" + integrity sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ== + merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"