Support merging .uischema files (#852)

* Topo sort in progress.

* Update sort.

* Working sort

* Breadth first sort.

* Move to building component tree.

* Normalize slash in tests.

* Update documentation

* Add --nugetRoot switch.

* Add $package to app.schema.

* Intermediate progress to switch machines.

* Update to move machines.

* Update to offical URLS.
Upgrade json-ptr to 1.3
Full uischema test examples.

* Oracles and working tests.

* All csproj tests working

* All tests work.

* Fix packages.config.

* Add copying C# asset files into output

* Renable test

* Order uischema keys and update oracles.

* Move write outside of loop.

* Add missing .uischema files.

* Use / in paths

* Update documentation.

* Update docs.

Co-authored-by: Tom Laird-McConnell <tomlm@microsoft.com>
This commit is contained in:
Chris McConnell 2020-07-14 18:41:41 -07:00 коммит произвёл GitHub
Родитель 59f950dfde
Коммит 547c305cf8
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
90 изменённых файлов: 3861 добавлений и 998 удалений

74
.vscode/launch.json поставляемый
Просмотреть файл

@ -34,7 +34,7 @@
"999999",
"--colors",
"-g",
"dialog:merge.*"
".*"
],
"internalConsoleOptions": "openOnSessionStart",
"outputCapture": "std",
@ -195,8 +195,7 @@
"dialog:merge",
"schemas/*.schema",
"-o",
"schemas/app.schema",
"-d"
"schemas/app.schema"
],
"internalConsoleOptions": "openOnSessionStart",
"cwd": "${workspaceFolder}/packages/dialog/test/commands/dialog"
@ -242,6 +241,75 @@
"internalConsoleOptions": "openOnSessionStart",
"cwd": "${env:TEMP}/sandwich.out"
},
{
"type": "node",
"request": "launch",
"name": "LUIS Build Simple",
"preLaunchTask": "${defaultBuildTask}",
"program": "${workspaceFolder}/packages/luis/bin/run",
"outputCapture": "std",
"outFiles": [
"./packages/luis/lib/**",
"./packages/lu/lib/**"
],
"args": [
"luis:build",
"--luConfig",
"luconfig.json",
"--authoringKey",
"${env:LUIS_AUTHORING_KEY}"
],
"internalConsoleOptions": "openOnSessionStart",
"cwd": "${env:TEMP}/simple.out"
},
{
"type": "node",
"request": "launch",
"name": "LUIS Convert Sandwich",
"preLaunchTask": "${defaultBuildTask}",
"program": "${workspaceFolder}/packages/luis/bin/run",
"outputCapture": "std",
"outFiles": [
"./packages/luis/lib/**",
"./packages/lu/lib/**"
],
"args": [
"luis:convert",
"--in",
"en-us/sandwich.en-us.lu",
"--name",
"sandwich",
"-o",
"converted.json",
"--force"
],
"internalConsoleOptions": "openOnSessionStart",
"cwd": "${env:TEMP}/sandwich.out"
},
{
"type": "node",
"request": "launch",
"name": "LUIS Convert Simple",
"preLaunchTask": "${defaultBuildTask}",
"program": "${workspaceFolder}/packages/luis/bin/run",
"outputCapture": "std",
"outFiles": [
"./packages/luis/lib/**",
"./packages/lu/lib/**"
],
"args": [
"luis:convert",
"--in",
"en-us/simple.en-us.lu",
"--name",
"simple",
"-o",
"converted.json",
"--force"
],
"internalConsoleOptions": "openOnSessionStart",
"cwd": "${env:TEMP}/simple.out"
},
{
"type": "node",
"request": "launch",

Просмотреть файл

@ -51,7 +51,7 @@ dependencies:
https-proxy-agent: 2.2.4
intercept-stdout: 0.1.2
is-ci: 2.0.0
json-ptr: 1.2.0
json-ptr: 1.3.1
json-schema-merge-allof: 0.7.0
latest-version: 4.0.0
lodash: 4.17.15
@ -59,10 +59,8 @@ dependencies:
mime-types: 2.1.26
minimist: 1.2.0
nock: 11.9.1
npm-package-walker: 4.0.5
nyc: 14.1.1
os: 0.1.1
package-json: 6.5.0
pascal-case: 2.0.1
path: 0.12.7
please-upgrade-node: 3.2.0
@ -3639,10 +3637,10 @@ packages:
dev: false
resolution:
integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
/json-ptr/1.2.0:
/json-ptr/1.3.1:
dev: false
resolution:
integrity: sha512-wkqozzmmyu+vtazHF11uvIDbLsgkE4juY41QoXgKYSy166KQalyc72PqveII21f8UWKtYN7btUXg16vya+9xnw==
integrity: sha512-RoTHczqQoT2UsJINUvyMEHAHxGDq6c4/xXHwA29iArQMGIv6pFqLsOJMeagtnY78vsp5k/+9JcvmKKLsbuDRBQ==
/json-schema-compare/0.2.2:
dependencies:
lodash: 4.17.15
@ -6644,7 +6642,7 @@ packages:
get-json: 1.0.1
get-uri: 3.0.2
globby: 11.0.0
json-ptr: 1.2.0
json-ptr: 1.3.1
json-schema-merge-allof: 0.7.0
json-schema-ref-parser: 8.0.0
mocha: 6.2.2
@ -6664,7 +6662,7 @@ packages:
dev: false
name: '@rush-temp/bf-dialog'
resolution:
integrity: sha512-8wXsJY2yxUDDROsf37LzAqPu7JdAPSnukcYxnKm+gK96P8wbu02tFnnqNyfclJpwFyBGLog8R931BWp6O5SaXg==
integrity: sha512-GZ5UbbR1y0ayFNaRVmDaxEzeS4xmOT2ri2SbFM+nyg8BRmOD1fnKzf2GO9bT6/b4VcwbaYop08ANlHtLI80k2w==
tarball: 'file:projects/bf-dialog.tgz'
version: 0.0.0
'file:projects/bf-dispatcher.tgz':
@ -6958,7 +6956,7 @@ specifiers:
https-proxy-agent: ^2.2.1
intercept-stdout: ^0.1.2
is-ci: 2.0.0
json-ptr: ~1.2.0
json-ptr: ~1.3.0
json-schema-merge-allof: ~0.7.0
latest-version: ^4.0.0
lodash: ^4.17.15
@ -6966,10 +6964,8 @@ specifiers:
mime-types: ^2.1.18
minimist: ^1.2.0
nock: ^11.7.0
npm-package-walker: ~4.0.5
nyc: ^14.1.1
os: ~0.1.1
package-json: ~6.5.0
pascal-case: ^2.0.1
path: ^0.12.7
please-upgrade-node: ^3.0.1

Просмотреть файл

@ -13,9 +13,12 @@ This package is intended for Microsoft use only and should be consumed through @
# Commands
<!-- commands -->
* [`bf dialog`](#bf-dialog)
* [`bf dialog:merge PATTERNS`](#bf-dialogmerge-patterns)
* [`bf dialog:verify PATTERNS`](#bf-dialogverify-patterns)
- [@microsoft/bf-dialog](#microsoftbf-dialog)
- [Relevant docs](#relevant-docs)
- [Commands](#commands)
- [`bf dialog`](#bf-dialog)
- [`bf dialog:merge PATTERNS`](#bf-dialogmerge-patterns)
- [`bf dialog:verify PATTERNS`](#bf-dialogverify-patterns)
## `bf dialog`
@ -33,23 +36,24 @@ _See code: [src/commands/dialog/index.ts](https://github.com/microsoft/botframew
## `bf dialog:merge PATTERNS`
Merge component .schema files into an app.schema.
Merge <kind>.schema and <kind>[.<locale>].uischema definitions from a project and its dependencies into a single .schema for describing .dialog files and a per locale .uischema for describing how Composer shows them. For C#, ensures all nuget declarative resources are included in the same location.
```
USAGE
$ bf dialog:merge PATTERNS
ARGUMENTS
PATTERNS Any number of glob regex patterns to match .schema, .csproj, or package.json files.
PATTERNS Any number of glob regex patterns to match .csproj, .nuspec or package.json files.
OPTIONS
-h, --help show CLI help
-o, --output=output [default: app.schema] Output path and filename for merged schema.
-v, --verbose Show verbose logging of files as they are processed.
-h, --help show CLI help
-o, --output=output Output path and filename for merged .schema and .uischema. Defaults to first project name.
-v, --verbose Show verbose logging of files as they are processed.
--extension=extension [default: .dialog,.lg,.lu,.schema,.qna,.uischema] Extension to include as a resource for C#.
EXAMPLES
$ bf dialog:merge *.csproj
$ bf dialog:merge libraries/**/*.schema **/*.csproj -o app.schema
$ bf dialog:merge myProject.csproj plugins/*.nuspec
$ bf dialog:merge package.json -o app.schema
```
_See code: [src/commands/dialog/merge.ts](https://github.com/microsoft/botframework-cli/tree/master/packages/dialog/src/commands/dialog/merge.ts)_

Просмотреть файл

@ -2,18 +2,30 @@
## Merge
This will merge together [Microsoft Bot Builder](https://github.com/Microsoft/BotBuilder) .schema JSON schema files into a single JSON schema file. You can point to the files either directly with a glob pattern or indirectly through a glob pattern that matches a package.json, packages.config or \*.csproj file. The .schema files should have a unique filename that is used to refer to that type using `$kind`. The .schema files should include a `$schema: "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema"` which defines the schema they are validated against. You can access common definitions by using `$ref: "schema:#/definitions/stringExpression"` in a property definition. At the top-level in a component schema you can use `$role:"implements(<kind>)` to project the type definition into interface types defined using `$role:"interface"` while merging. To extend an existing .schema file use `$role: "extends(<kind>)"`. To refer to a type in a property, use `"$kind":"<kind>"` and the corresponding kind will be wired into your schema. The merger combines all of the component .schema files into a single .schema file that has resolved all external `$ref`, merged `allOf` and connected together schemas through `$role` and `$kind`.
This will merge together [Microsoft Bot Builder](https://github.com/Microsoft/BotBuilder) .schema JSON schema files into a single JSON schema file and .uischema files into a per-locale .uischema file. You can point to the files either directly with a glob pattern or indirectly through a glob pattern that matches a package.json or /*.csproj file. The .schema files should have a unique filename that is used to refer to that type using `$kind`. The .schema files should include a `$schema: "https://schemas.botframework.com/schemas/component/v1.0/component.schema"` which defines the schema they are validated against.
You can also mark properties with a `$role: "expression"` to indicate to tooling that an expression is allowed for that property.
You can also mark properties with a `$role: "expression"` to indicate to tooling that an expression is allowed for that property. A simple way to do this is to make use of common expression definitions like `$ref: "schema:#/definitions/<type>Expression"` in a property definition.
For example look at these files:
At the top-level in a component schema you can use `$role:"implements(<kind>)` to project the type definition into interface types defined using `$role:"interface"` while merging.
- [IRecognizer.schema](test/schemas/IRecognizer.schema) defines the place holder for `IRecognizer` including a default option which is a bare string.
- [Recognizer.schema](test/schemas/Recognizer.schema) includes `$role:"implements(IRecognizer)"` which extends the `IRecognizer` definition when merged.
- [root.schema](test/schemas/root.schema) is a schema file that includes `$kind:"IRecognizer"` in order to make use of the `IRecognizer` place holder. The `$role: []` ensures that this is available as a top-level object.
- [app.schema](test/schemas/app.schema) was created by this tool shows how all of these definitions are merged together. In particular if you look at `IRecognizer` you will see the definition that includes a string, or the complete definition of `Recognizer`.
To extend an existing .schema file use `$role: "extends(<kind>)"`. This will add onto the existing definitions in `<kind>`.
[root.dialog](test/examples/root.dialog) Shows how you could use the resulting schema to enter in JSON schema and get intellisense.
To refer to a type in a property, use `$kind:"<kind>"` and the corresponding kind will be wired into your schema. The merger combines all of the component .schema files into a single .schema file that has resolved all external `$ref`, merged `allOf` and connected together schemas through `$role` and `$kind`.
For `<kind>[.<locale>].uischema` files, use `$schema: "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema"` to define their contents. The `<kind>` must be found in the .schema file and the optional `<locale>` is a string like en-us. All of the individual .uischema files will be combined into a composite one per-locale. If definitions conflict, the definition found first in the topological sort of bread-first, parent before child will be used.
For C#, nuget does not deal well with content files so all declarative .dialog, .lu, .lg, and .qna files will be copied into `generated/<package>` so you can easily include all of them in your project output.
For examples look at these files:
- [IRecognizer.schema](../test/schemas/IRecognizer.schema) defines the place holder for `IRecognizer` including a default option which is a bare string.
- [Recognizer.schema](../test/schemas/Recognizer.schema) includes `$role:"implements(IRecognizer)"` which extends the `IRecognizer` definition when merged.
- [root.schema](../test/schemas/root.schema) is a schema file that includes `$kind:"IRecognizer"` in order to make use of the `IRecognizer` place holder. The `$role: []` ensures that this is available as a top-level object.
- [app.schema](../test/schemas/app.schema) was created by this tool shows how all of these definitions are merged together. In particular if you look at `IRecognizer` you will see the definition that includes a string, or the complete definition of `Recognizer`.
- [nuget3.en-us.uischema](../test/commands/dialog/projects/project3/nuget3.en-us.uischema) shows an example component .uischema file.
- [project3.en-us.uischema](../test/commands/dialog/oracles/project3.en-us.uischema) shows a merged .uischema file.
[root.dialog](../test/examples/root.dialog) Shows how you could use the resulting schema to enter in JSON schema and get intellisense.
## Verify

Просмотреть файл

@ -55,7 +55,7 @@
"seedrandom": "~3.0.5",
"tslib": "^1.10.0",
"xml2js": "^0.4.19",
"json-ptr": "~1.2.0",
"json-ptr": "~1.3.0",
"json-schema-merge-allof": "~0.7.0",
"@snyk/nuget-semver": "~1.3.0"
},

Просмотреть файл

@ -3,33 +3,35 @@
* Licensed under the MIT License.
*/
import { Command, flags } from '@microsoft/bf-cli-command'
import {Command, flags} from '@microsoft/bf-cli-command'
import SchemaMerger from '../../library/schemaMerger'
export default class DialogMerge extends Command {
static description = 'Merge component .schema files into an app.schema.'
static description = 'Merge <kind>.schema and <kind>[.<locale>].uischema definitions from a project and its dependencies into a single .schema for describing .dialog files and a per locale .uischema for describing how Composer shows them. For C#, ensures all nuget declarative resources are included in the same location.'
static args = [
{ name: 'patterns', required: true, description: 'Any number of glob regex patterns to match .schema, .csproj, or package.json files.'},
{name: 'patterns', required: true, description: 'Any number of glob regex patterns to match .csproj, .nuspec or package.json files.'},
]
static strict = false
static flags: flags.Input<any> = {
debug: flags.boolean({ char: 'd', description: 'Generate debug files.', hidden: true, default: false}),
help: flags.help({ char: 'h' }),
output: flags.string({ char: 'o', description: 'Output path and filename for merged schema.', default: 'app.schema', required: false }),
verbose: flags.boolean({ char: 'v', description: 'Show verbose logging of files as they are processed.', default: false }),
debug: flags.boolean({char: 'd', description: 'Generate debug files.', hidden: true, default: false}),
extension: flags.string({description: 'Extension to include as a resource for C#.', required: false, multiple: true, default: ['.dialog', '.lg', '.lu', '.schema', '.qna', '.uischema']}),
help: flags.help({char: 'h'}),
nugetRoot: flags.string({description: 'Nuget root directory for debugging.', hidden: true}),
output: flags.string({char: 'o', description: 'Output path and filename for merged .schema and .uischema. Defaults to first project name.', required: false}),
verbose: flags.boolean({char: 'v', description: 'Show verbose logging of files as they are processed.', default: false}),
}
static examples = [
'$ bf dialog:merge *.csproj',
'$ bf dialog:merge libraries/**/*.schema **/*.csproj -o app.schema'
'$ bf dialog:merge myProject.csproj plugins/*.nuspec',
'$ bf dialog:merge package.json -o app.schema'
]
async run() {
const { argv, flags } = this.parse(DialogMerge)
let merger = new SchemaMerger(argv, flags.output, flags.verbose, this.log, this.warn, this.error, flags.debug)
await merger.mergeSchemas()
const {argv, flags} = this.parse(DialogMerge)
let merger = new SchemaMerger(argv, flags.output, flags.verbose, this.log, this.warn, this.error, flags.extension, flags.debug, flags.nugetRoot)
await merger.merge()
}
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,23 @@
@echo off
setlocal
call rush build
set ds=..\..\..\bin\run
echo *** loose schema
call node %ds% dialog:merge schemas/*.schema -o oracles/app.schema --verbose
echo.
echo *** project3.csproj
call node %ds% dialog:merge projects/project3/project3.csproj -o oracles/project3 --nugetRoot nuget --verbose
echo.
echo *** project5.csproj
call node %ds% dialog:merge projects/project5/project5.csproj -o oracles/project5 --nugetRoot nuget --verbose
echo.
echo *** root-package
call node %ds% dialog:merge npm/node_modules/root-package/package.json -o oracles/root-package --verbose
rem remove copied assets
rd /s /q oracles\generated

Просмотреть файл

@ -5,7 +5,7 @@
// tslint:disable:no-console
// tslint:disable:no-object-literal-type-assertion
import { assert } from 'chai'
import {assert} from 'chai'
import * as fs from 'fs-extra'
import 'mocha'
import * as os from 'os'
@ -30,11 +30,52 @@ async function merge(patterns: string[], output?: string, verbose?: boolean): Pr
console.log(msg)
lines.push(msg)
}
let merger = new SchemaMerger(patterns, output || ppath.join(tempDir, 'generated.schema'), verbose || false, logger, logger, logger, false, ppath.join(srcDir, 'nuget'))
let merged = await merger.mergeSchemas()
let merger = new SchemaMerger(patterns,
output ? ppath.join(tempDir, output) : '',
verbose || false,
logger, logger, logger,
undefined, false,
ppath.join(srcDir, 'nuget'))
let merged = await merger.merge()
return [merged, lines]
}
async function compareToOracle(name: string): Promise<object> {
let generatedPath = ppath.join(tempDir, name)
let generated = await fs.readJSON(generatedPath)
let oraclePath = ppath.join('oracles', name)
let oracle = await fs.readJSON(oraclePath)
let oracles = JSON.stringify(oracle)
let generateds = JSON.stringify(generated)
if (oracles !== generateds) {
console.log(`Oracle : ${oracles.length}`)
console.log(`Generated: ${generateds.length}`)
let max = oracles.length
if (max > generateds.length) {
max = generateds.length
}
let idx: number
for (idx = 0; idx < max; ++idx) {
if (oracles[idx] !== generateds[idx]) {
break;
}
}
let start = idx - 40
if (start < 0) {
start = 0
}
let end = idx + 40
if (end > max) {
end = max
}
console.log(`Oracle : ${oracles.substring(start, end)}`)
console.log(`Generated: ${generateds.substring(start, end)}`)
assert(false,
`${ppath.resolve(generatedPath)} does not match oracle ${ppath.resolve(oraclePath)}`)
}
return generated
}
describe('dialog:merge', async () => {
before(async () => {
// If you want to regenerate the oracle *.schema files, run schemas/makeschemas.cmd
@ -43,49 +84,19 @@ describe('dialog:merge', async () => {
process.chdir(srcDir)
})
xit('app.schema', async () => {
it('app.schema', async () => {
console.log('Start app.schema')
let [merged, lines] = await merge(['schemas/*.schema'])
assert(merged, 'Could not merge schemas')
assert(countMatches(/error|warning/i, lines) === 1, 'Error merging schemas')
let oracle = await fs.readJSON('schemas/app.schema')
let generatedPath = ppath.join(tempDir, 'generated.schema')
let generated = await fs.readJSON(generatedPath)
let oracles = JSON.stringify(oracle)
let generateds = JSON.stringify(generated)
if (oracles !== generateds) {
console.log(`Oracle : ${oracles.length}`)
console.log(`Generated: ${generateds.length}`)
let max = oracles.length
if (max > generateds.length) {
max = generateds.length
}
let idx: number
for (idx = 0; idx < max; ++idx) {
if (oracles[idx] !== generateds[idx]) {
break;
}
}
let start = idx - 40
if (start < 0) {
start = 0
}
let end = idx + 40
if (end > max) {
end = max
}
console.log(`Oracle : ${oracles.substring(start, end)}`)
console.log(`Generated: ${generateds.substring(start, end)}`)
assert(false,
`Schema ${ppath.resolve(generatedPath)} does not match ${ppath.resolve('schemas/app.schema')}`)
}
let [merged, lines] = await merge(['schemas/*.schema'], 'app.schema')
assert(merged, 'Could not merge')
assert(countMatches(/error|warning/i, lines) === 0, 'Error merging schemas')
await compareToOracle('app.schema')
})
it('bad json', async () => {
console.log('\nStart bad json')
let [merged, lines] = await merge(['schemas/*.schema', 'schemas/badSchemas/badJson.schema'])
assert(!merged, 'Merging should have failed')
assert(countMatches(/error|warning/i, lines) === 2, 'Extra errors or warnings')
assert(countMatches(/error|warning/i, lines) === 1, 'Wrong number of errors or warnings')
assert(countMatches('Unexpected token', lines) === 1, 'Did not detect bad JSON')
})
@ -93,7 +104,7 @@ describe('dialog:merge', async () => {
console.log('\nStart schema mismatch')
let [merged, lines] = await merge(['schemas/*.schema', 'schemas/badSchemas/schemaMismatch.schema'])
assert(merged, 'Merging failed')
assert(countMatches(/error|warning/i, lines) === 2, 'Extra errors or warnings')
assert(countMatches(/error|warning/i, lines) === 1, 'Wrong number of errors or warnings')
assert(countMatches('does not match', lines) === 1, 'Did not detect schema mismatch')
})
@ -101,7 +112,7 @@ describe('dialog:merge', async () => {
console.log('\nStart no allof')
let [merged, lines] = await merge(['schemas/*.schema', 'schemas/badSchemas/allof.schema'])
assert(!merged, 'Merging should have failed')
assert(countMatches(/error|warning/i, lines) === 2, 'Extra errors or warnings')
assert(countMatches(/error|warning/i, lines) === 1, 'Wrong number of errors or warnings')
assert(countMatches('allOf', lines) === 1, 'Did not detect allOf in schema')
})
@ -109,7 +120,7 @@ describe('dialog:merge', async () => {
console.log('\nStart missing extends')
let [merged, lines] = await merge(['schemas/*.schema', 'schemas/badSchemas/missingExtends.schema'])
assert(!merged, 'Merging should have failed')
assert(countMatches(/error|warning/i, lines) === 2, 'Extra errors or warnings')
assert(countMatches(/error|warning/i, lines) === 1, 'Wrong number of errors or warnings')
assert(countMatches('it is not included', lines) === 1, 'Did not detect missing extends in schema')
})
@ -117,7 +128,7 @@ describe('dialog:merge', async () => {
console.log('\nStart missing schema reference')
let [merged, lines] = await merge(['schemas/*.schema', 'schemas/badSchemas/missingSchemaRef.schema'])
assert(!merged, 'Merging should have failed')
assert(countMatches(/error|warning/i, lines) === 2, 'Extra errors or warnings')
assert(countMatches(/error|warning/i, lines) === 1, 'Wrong number of errors or warnings')
assert(countMatches('does not exist', lines) === 1, 'Did not detect missing schema ref')
})
@ -125,7 +136,7 @@ describe('dialog:merge', async () => {
console.log('\nStart bad role')
let [merged, lines] = await merge(['schemas/*.schema', 'schemas/badSchemas/badRole.schema'])
assert(!merged, 'Merging should have failed')
assert(countMatches(/error|warning/i, lines) === 3, 'Extra errors or warnings')
assert(countMatches(/error|warning/i, lines) === 2, 'Wrong number of errors or warnings')
assert(countMatches('is not valid for component', lines) === 1, 'Did not detect bad component $role')
assert(countMatches('is not valid in properties/foo', lines) === 1, 'Did not detect bad property $role')
})
@ -134,27 +145,43 @@ describe('dialog:merge', async () => {
console.log('\nStart duplicate $kind')
let [merged, lines] = await merge(['schemas/*.schema', 'schemas/badSchemas/prompt.schema'])
assert(!merged, 'Merging should have failed')
assert(countMatches(/error|warning/i, lines) === 2, 'Extra errors or warnings')
assert(countMatches('Redefines prompt', lines) === 1, 'Did not detect duplicate $kind')
assert(countMatches(/error|warning/i, lines) === 1, 'Wrong number of errors or warnings')
assert(countMatches('prompt.schema', lines) === 3, 'Did not detect duplicate $kind')
})
it('missing implementation', async () => {
console.log('\nStart missing implementation')
let [merged, lines] = await merge(['schemas/*.schema', 'schemas/badSchemas/missingImplementation.schema'])
assert(!merged, 'Merging should have failed')
assert(countMatches(/error|warning/i, lines) === 2, 'Extra errors or warnings')
assert(countMatches(/error|warning/i, lines) === 1, 'Wrong number of errors or warnings')
assert(countMatches('no implementations', lines) === 1, 'Did not detect missing implementations')
})
it('csproj', async () => {
console.log('\nStart csproj')
let [merged, lines] = await merge(['projects/project1/project1.csproj'], undefined, true)
let [merged, lines] = await merge(['projects/project3/project3.csproj'], 'project3.schema', true)
let errors = countMatches(/error|warning/i, lines)
if (errors === 0) {
assert(merged, 'Could not merge schemas')
} else {
assert(!merged, 'Should not have merged schemas')
}
assert(errors === 0, 'Should not have got errors')
assert(merged, 'Could not merge')
assert(countMatches(/Following.*project3/, lines) === 1, 'Did not follow project1')
assert(countMatches(/Following nuget.*nuget3.*1.0.0/, lines) === 1, 'Did not follow nuget3')
assert(countMatches(/Parsing.*nuget3.schema/, lines) === 1, 'Missing nuget3.schema')
assert(countMatches(/Copying/i, lines) === 7, 'Wrong number of copies')
assert(countMatches(/Copying.*nuget3.lg/i, lines) === 1, 'Did not copy .lg')
assert(countMatches(/Copying.*nuget3.lu/i, lines) === 1, 'Did not copy .lu')
assert(countMatches(/Copying.*nuget3.qna/i, lines) === 1, 'Did not copy .qna')
assert(countMatches(/Copying.*nuget3.*uischema/i, lines) === 2, 'Did not copy .uischema')
assert(countMatches(/Copying.*nuget3.schema/i, lines) === 1, 'Did not copy .schema')
assert(await fs.pathExists(ppath.join(tempDir, 'generated', 'nuget3', 'assets', 'nuget3.qna')), 'Did not copy directory')
await compareToOracle('project3.schema')
await compareToOracle('project3.en-us.uischema')
})
it('csproj-errors', async () => {
console.log('\nStart csproj-errors')
let [merged, lines] = await merge(['projects/project1/project1.csproj'], undefined, true)
assert(!merged, 'Merging should faile')
assert(countMatches(/error|warning/i, lines) === 6, 'Wrong number of errors or warnings')
assert(countMatches(/Following.*project1/, lines) === 1, 'Did not follow project1')
assert(countMatches(/Following nuget.*nuget1.*10.0.1/, lines) === 1, 'Did not follow nuget1')
assert(countMatches(/Following.*project2/, lines) === 1, 'Did not follow project2')
@ -164,17 +191,64 @@ describe('dialog:merge', async () => {
assert(countMatches(/Parsing.*nuget2.schema/, lines) === 1, 'Missing nuget2.schema')
assert(countMatches(/Parsing.*nuget3.schema/, lines) === 1, 'Missing nuget3.schema')
assert(countMatches(/Parsing.*project2.schema/, lines) === 1, 'Missing project2.schema')
assert(countMatches(/multiple.dialog/, lines) === 3, 'Missing multiple definitions')
})
it('csproj-uierrors', async () => {
console.log('\nStart csproj-uierrors')
let [merged, lines] = await merge(['projects/project4/project4.csproj'], 'project4.schema', true)
assert(!merged, 'Merging should fail')
assert(countMatches(/error|warning/i, lines) === 7, 'Wrong number of errors or warnings')
assert(countMatches(/nokind does not exist/i, lines) === 1, 'Missing nokind')
assert(countMatches(/nonExistentProperty/i, lines) === 4, 'Wrong number of non-existent properties')
assert(countMatches(/order.nonExistentOrder/i, lines) === 2, 'Wrong number of non-existent orders')
})
it('csproj-config', async () => {
console.log('\nStart csproj-config')
let [merged, lines] = await merge(['projects/project5/project5.csproj'], 'project5.schema', true)
assert(merged, 'Merging should succeed')
assert(countMatches(/error|warning/i, lines) === 0, 'Wrong number of errors or warnings')
assert(countMatches(/packages.config/i, lines) === 1, 'Missing packages.config')
await compareToOracle('project5.schema')
await compareToOracle('project5.en-us.uischema')
})
it('package.json', async () => {
console.log('\nStart package.json')
let [merged, lines] = await merge(['npm/node_modules/root-package/package.json'], undefined, true)
assert(merged, 'Could not merge schemas')
assert(countMatches(/error|warning/i, lines) === 0, 'Extra errors or warnings')
let [merged, lines] = await merge(['npm/node_modules/root-package/package.json'], 'root-package.schema', true)
assert(merged, 'Could not merge')
assert(countMatches(/error|warning/i, lines) === 0, 'Wrong number of errors or warnings')
assert(countMatches('root-package.schema', lines) === 1, 'Missing root-package.schema')
assert(countMatches('dependent-package.schema', lines) === 1, 'Missing dependent-package.schema')
assert(countMatches('parent-package.schema', lines) === 1, 'Missing parent-package.schema')
assert(countMatches('no-package.schema', lines) === 0, 'Extra no-package.schema')
await compareToOracle('root-package.schema')
await compareToOracle('root-package.uischema')
})
it('nuspec', async () => {
// This is more complicated because it is also testing the output name inference
// which ends up in the directory where the command is run from
console.log('\nStart nuspec')
let path = ppath.join(tempDir, 'nuget1/')
await fs.ensureDir(path)
await fs.copy('nuget/nuget1/10.0.1/', path)
await fs.copyFile('schemas/packageBase.json', ppath.join(path, 'packageBase.json'))
await fs.copyFile(ppath.join(path, 'nuget1-10.schema.local'), ppath.join(path, 'nuget1-10.schema'))
let cwd = process.cwd()
try {
process.chdir(path)
let [merged, lines] = await merge(['nuget1.nuspec'], undefined, true)
assert(merged, 'Could not merge')
assert(fs.existsSync('nuget1.schema')
&& fs.existsSync('nuget1.en-us.uischema'),
'Did not infer output')
assert(countMatches(/error|warning/i, lines) === 0, 'Wrong number of errors or warnings')
assert(countMatches('nuget1.nuspec', lines) === 1, 'Missing nuget1.nuspec')
} finally {
process.chdir(cwd)
}
})
})

1
packages/dialog/test/commands/dialog/npm/node_modules/parent-package/package.json сгенерированный поставляемый
Просмотреть файл

@ -1,3 +1,4 @@
{
"name": "parent-package",
"version": "1.0.0"
}

6
packages/dialog/test/commands/dialog/npm/node_modules/parent-package/parent-package.schema сгенерированный поставляемый
Просмотреть файл

@ -1,6 +1,4 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$role": [],
"title": "Some node",
"description": "Definition."
"title": "parent-package Schema",
"$ref": "../../../schemas/packageBase.json"
}

7
packages/dialog/test/commands/dialog/npm/node_modules/parent-package/parent-package.uischema сгенерированный поставляемый Normal file
Просмотреть файл

@ -0,0 +1,7 @@
{
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "parent-package",
"subtitle": "From parent-package"
}
}

6
packages/dialog/test/commands/dialog/npm/node_modules/root-package/dependent-package.uischema сгенерированный поставляемый Normal file
Просмотреть файл

@ -0,0 +1,6 @@
{
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "root-package"
}
}

Просмотреть файл

@ -1,6 +1,4 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$role": [],
"title": "Some node",
"description": "Definition."
"title": "dependent-package Schema",
"$ref": "../../../../../schemas/packageBase.json"
}

Просмотреть файл

@ -0,0 +1,6 @@
{
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "dependent-package"
}
}

Просмотреть файл

@ -1,3 +1,4 @@
{
"name": "dependent-package",
"version": "1.0.0"
}

Просмотреть файл

@ -1,6 +1,4 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$role": [],
"title": "Some node",
"description": "Definition."
"title": "no-package Schema",
"$ref": "../../../../../../schemas/packageBase.json"
}

2
packages/dialog/test/commands/dialog/npm/node_modules/root-package/package.json сгенерированный поставляемый
Просмотреть файл

@ -1,4 +1,6 @@
{
"name": "root-package",
"version": "1.9.2",
"dependencies": {
"dependent-package": "^1.0.0",
"parent-package": "1.0.0"

6
packages/dialog/test/commands/dialog/npm/node_modules/root-package/root-package.schema сгенерированный поставляемый
Просмотреть файл

@ -1,6 +0,0 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$role": [],
"title": "Some node",
"description": "Definition."
}

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -0,0 +1,7 @@
{
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "nuget1-10",
"subtitle": "From nuget1-10"
}
}

Просмотреть файл

@ -1,6 +1,4 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$role": [],
"title": "Some node",
"description": "Definition."
"title": "nuget1-10 Schema",
"$ref": "../../../schemas/packageBase.json"
}

Просмотреть файл

@ -0,0 +1,4 @@
{
"title": "nuget1-10 Schema",
"$ref": "./packageBase.json"
}

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -0,0 +1,7 @@
{
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "nuget1-11",
"subtitle": "From nuget1-11"
}
}

Просмотреть файл

@ -1,6 +1,4 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$role": [],
"title": "Some node",
"description": "Definition."
"title": "nuget1-11 Schema",
"$ref": "../../../schemas/packageBase.json"
}

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": [],
"title": "Some node",
"description": "Definition."

Просмотреть файл

@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>nuget2</id>
<version>10.0.1</version>
<version>1.0.1</version>
<title>nuget2</title>
<dependencies>
</dependencies>

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -0,0 +1,77 @@
{
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "Nuget3 en-us",
"label": "Nuget3 en-us",
"order": [
"Object"
],
"properties": {
"Object": {
"description": "This is Object",
"label": "Nuget3 en-us",
"order": [
"subObject"
],
"properties": {
"subObject": {
"label": "Nuget3 en-us",
"description": "This is subObject"
}
}
},
"SimpleArray": {
"description": "This is SimpleArray",
"label": "Nuget3 en-us"
},
"Array": {
"description": "This is Array",
"label": "Nuget3 en-us",
"order": [
"subArray"
],
"properties": {
"subArray": {
"description": "This is subArray",
"label": "Nuget3 en-us"
}
}
},
"AnyOf": {
"description": "This is AnyOf",
"label": "Nuget3 en-us",
"order": [
"anyOf1"
],
"properties": {
"anyOf1": {
"description": "This is anyOf1",
"label": "Nuget3 en-us",
"order": [
"subAnyOf1"
],
"properties": {
"subAnyOf1": {
"description": "This is subAnyOf1",
"label": "Nuget3 en-us"
}
}
},
"anyOf2": {
"description": "This is anyOf2",
"label": "Nuget3 en-us",
"order": [
"subAnyOf2"
],
"properties": {
"subAnyOf2": {
"description": "This is subAnyOf2",
"label": "Nuget3 en-us"
}
}
}
}
}
}
}
}

Просмотреть файл

@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>nuget3</id>
<version>10.0.1</version>
<version>1.0.0</version>
<title>nuget2</title>
<dependencies>
</dependencies>

Просмотреть файл

@ -1,6 +1,4 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$role": [],
"title": "Some node",
"description": "Definition."
"title": "Nuget3 schema",
"$ref": "../../../schemas/packageBase.json"
}

Просмотреть файл

@ -0,0 +1,77 @@
{
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "Nuget3",
"label": "Nuget3",
"order": [
"Object"
],
"properties": {
"Object": {
"description": "This is Object",
"label": "Nuget3",
"order": [
"subObject"
],
"properties": {
"subObject": {
"label": "Nuget3",
"description": "This is subObject"
}
}
},
"SimpleArray": {
"description": "This is SimpleArray",
"label": "Nuget3"
},
"Array": {
"description": "This is Array",
"label": "Nuget3",
"order": [
"subArray"
],
"properties": {
"subArray": {
"description": "This is subArray",
"label": "Nuget3"
}
}
},
"AnyOf": {
"description": "This is AnyOf",
"label": "Nuget3",
"order": [
"anyOf1"
],
"properties": {
"anyOf1": {
"description": "This is anyOf1",
"label": "Nuget3",
"order": [
"subAnyOf1"
],
"properties": {
"subAnyOf1": {
"description": "This is subAnyOf1",
"label": "Nuget3"
}
}
},
"anyOf2": {
"description": "This is anyOf2",
"label": "Nuget3",
"order": [
"subAnyOf2"
],
"properties": {
"subAnyOf2": {
"description": "This is subAnyOf2",
"label": "Nuget3"
}
}
}
}
}
}
}
}

Просмотреть файл

@ -0,0 +1,494 @@
{
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"type": "object",
"title": "Component kinds",
"description": "These are all of the kinds that can be created by the loader.",
"oneOf": [
{
"$ref": "#/definitions/Recognizer"
},
{
"$ref": "#/definitions/RecognizerTypeMismatch"
},
{
"$ref": "#/definitions/prompt"
},
{
"$ref": "#/definitions/root"
}
],
"definitions": {
"INothing": {
"title": "Microsoft Nothing",
"description": "Definition of a union type with no implementations.",
"$role": "interface"
},
"IRecognizer": {
"$role": "interface",
"$comment": "Has multiple implementations",
"title": "Recognizer",
"description": "Recognizer interface.",
"oneOf": [
{
"type": "string",
"title": "Reference to IRecognizer",
"description": "Reference to IRecognizer .dialog file."
},
{
"$ref": "#/definitions/Recognizer"
},
{
"$ref": "#/definitions/RecognizerTypeMismatch"
}
]
},
"Recognizer": {
"$role": "implements(IRecognizer)",
"required": [
"req",
"$kind"
],
"definitions": {
"insideDef": {
"$role": "expression",
"title": "Inside",
"description": "Something inside."
}
},
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"req": {
"$role": "expression",
"title": "Required",
"description": "Something required."
},
"opt": {
"type": "string",
"title": "Optional",
"description": "Something optional."
},
"complex": {
"title": "Complex",
"description": "Complex object.",
"properties": {
"inside": {
"$ref": "#/definitions/Recognizer/definitions/insideDef"
}
}
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "Recognizer"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"RecognizerTypeMismatch": {
"$role": "implements(IRecognizer)",
"type": "object",
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "RecognizerTypeMismatch"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"arrayExpression": {
"$role": "expression",
"title": "Array or expression",
"description": "Array or expression to evaluate.",
"oneOf": [
{
"type": "array",
"title": "Array",
"description": "Array constant."
},
{
"$ref": "#/definitions/equalsExpression"
}
]
},
"basePrompt": {
"$comment": "This is a base schema that cannot be instantiated.",
"type": "object",
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"prompt": {
"type": "string",
"title": "Base prompt",
"description": "Base prompt."
},
"alternatePrompt": {
"title": "Alternate",
"description": "Alternate prompt of anything."
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "basePrompt"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"booleanExpression": {
"$role": "expression",
"title": "Boolean or expression",
"description": "Boolean constant or expression to evaluate.",
"oneOf": [
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean constant.",
"default": false,
"examples": [
false
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=user.isVip"
]
}
]
},
"component": {
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"condition": {
"$role": "expression",
"title": "Boolean condition",
"description": "Boolean constant or expression to evaluate.",
"oneOf": [
{
"$ref": "#/definitions/expression"
},
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean value.",
"default": true,
"examples": [
false
]
}
]
},
"equalsExpression": {
"$role": "expression",
"type": "string",
"title": "Expression",
"description": "Expression starting with =.",
"pattern": "^=.*\\S.*",
"examples": [
"=user.name"
]
},
"expression": {
"$role": "expression",
"type": "string",
"title": "Expression",
"description": "Expression to evaluate.",
"pattern": "^.*\\S.*",
"examples": [
"user.age > 13"
]
},
"integerExpression": {
"$role": "expression",
"title": "Integer or expression",
"description": "Integer constant or expression to evaluate.",
"oneOf": [
{
"type": "integer",
"title": "Integer",
"description": "Integer constant.",
"default": 0,
"examples": [
15
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=user.age"
]
}
]
},
"numberExpression": {
"$role": "expression",
"title": "Number or expression",
"description": "Number constant or expression to evaluate.",
"oneOf": [
{
"type": "number",
"title": "Number",
"description": "Number constant.",
"default": 0,
"examples": [
15.5
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=dialog.quantity"
]
}
]
},
"objectExpression": {
"$role": "expression",
"title": "Object or expression",
"description": "Object or expression to evaluate.",
"oneOf": [
{
"type": "object",
"title": "Object",
"description": "Object constant."
},
{
"$ref": "#/definitions/equalsExpression"
}
]
},
"prompt": {
"$role": "extends(basePrompt)",
"required": [
"prompt",
"$kind"
],
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"prompt": {
"type": "string",
"title": "Base prompt",
"description": "Base prompt."
},
"alternatePrompt": {
"title": "Alternate",
"description": "Alternate prompt of anything."
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "prompt"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"role": {
"title": "$role",
"description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].",
"type": "string",
"pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$"
},
"root": {
"$role": [],
"required": [
"recognizers",
"$kind"
],
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"recognizers": {
"type": "array",
"title": "Recognizers",
"description": "Some recognizers.",
"items": {
"$kind": "IRecognizer",
"$ref": "#/definitions/IRecognizer"
}
},
"prompt": {
"$kind": "prompt",
"title": "A prompt",
"description": "A prompt.",
"$ref": "#/definitions/prompt"
},
"condition": {
"title": "Condition",
"description": "A condition to test",
"$ref": "#/definitions/booleanExpression"
},
"property": {
"type": "string",
"title": "Something",
"description": "About something."
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "root"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"stringExpression": {
"$role": "expression",
"title": "String or expression",
"description": "Interpolated string or expression to evaluate.",
"oneOf": [
{
"type": "string",
"title": "String",
"description": "Interpolated string",
"pattern": "^(?!(=)).*",
"examples": [
"Hello ${user.name}"
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=concat('x','y','z')"
]
}
]
},
"valueExpression": {
"$role": "expression",
"title": "Any or expression",
"description": "Any constant or expression to evaluate.",
"oneOf": [
{
"type": "object",
"title": "Object",
"description": "Object constant."
},
{
"type": "array",
"title": "Array",
"description": "Array constant."
},
{
"type": "string",
"title": "String",
"description": "Interpolated string.",
"pattern": "^(?!(=)).*",
"examples": [
"Hello ${user.name}"
]
},
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean constant",
"examples": [
false
]
},
{
"type": "number",
"title": "Number",
"description": "Number constant.",
"examples": [
15.5
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=..."
]
}
]
}
}
}

Просмотреть файл

@ -0,0 +1,79 @@
{
"nuget3": {
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "Nuget3 en-us",
"label": "Project3",
"order": [
"*"
],
"properties": {
"AnyOf": {
"description": "This is AnyOf",
"label": "Project3",
"order": [
"*"
],
"properties": {
"anyOf1": {
"description": "This is anyOf1",
"label": "Project3",
"order": [
"*"
],
"properties": {
"subAnyOf1": {
"description": "This is subAnyOf1",
"label": "Project3"
}
}
},
"anyOf2": {
"description": "This is anyOf2",
"label": "Project3",
"order": [
"*"
],
"properties": {
"subAnyOf2": {
"description": "This is subAnyOf2",
"label": "Project3"
}
}
}
}
},
"Array": {
"description": "This is Array",
"label": "Project3",
"order": [
"*"
],
"properties": {
"subArray": {
"description": "This is subArray",
"label": "Project3"
}
}
},
"Object": {
"description": "This is Object",
"label": "Project3",
"order": [
"*"
],
"properties": {
"subObject": {
"description": "This is subObject",
"label": "Project3"
}
}
},
"SimpleArray": {
"description": "This is SimpleArray",
"label": "Project3"
}
}
}
}
}

Просмотреть файл

@ -0,0 +1,362 @@
{
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"type": "object",
"title": "Component kinds",
"description": "These are all of the kinds that can be created by the loader.",
"oneOf": [
{
"$ref": "#/definitions/nuget3"
}
],
"definitions": {
"arrayExpression": {
"$role": "expression",
"title": "Array or expression",
"description": "Array or expression to evaluate.",
"oneOf": [
{
"type": "array",
"title": "Array",
"description": "Array constant."
},
{
"$ref": "#/definitions/equalsExpression"
}
]
},
"booleanExpression": {
"$role": "expression",
"title": "Boolean or expression",
"description": "Boolean constant or expression to evaluate.",
"oneOf": [
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean constant.",
"default": false,
"examples": [
false
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=user.isVip"
]
}
]
},
"component": {
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"condition": {
"$role": "expression",
"title": "Boolean condition",
"description": "Boolean constant or expression to evaluate.",
"oneOf": [
{
"$ref": "#/definitions/expression"
},
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean value.",
"default": true,
"examples": [
false
]
}
]
},
"equalsExpression": {
"$role": "expression",
"type": "string",
"title": "Expression",
"description": "Expression starting with =.",
"pattern": "^=.*\\S.*",
"examples": [
"=user.name"
]
},
"expression": {
"$role": "expression",
"type": "string",
"title": "Expression",
"description": "Expression to evaluate.",
"pattern": "^.*\\S.*",
"examples": [
"user.age > 13"
]
},
"integerExpression": {
"$role": "expression",
"title": "Integer or expression",
"description": "Integer constant or expression to evaluate.",
"oneOf": [
{
"type": "integer",
"title": "Integer",
"description": "Integer constant.",
"default": 0,
"examples": [
15
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=user.age"
]
}
]
},
"nuget3": {
"$role": [],
"title": "Nuget3 schema",
"description": "Example schema for packages.",
"$package": {
"name": "nuget3",
"version": "1.0.0"
},
"type": "object",
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"Object": {
"type": "object",
"title": " object",
"description": "This is an object.",
"properties": {
"subObject": {
"type": "string",
"title": "SubObject",
"description": "SubObject property of Object."
}
}
},
"SimpleArray": {
"type": "array",
"title": " Empty Array",
"description": "This is simple items array.",
"items": true
},
"Array": {
"type": "array",
"title": " Array",
"description": "This is a complex item array.",
"items": {
"type": "object",
"title": "Array item",
"description": "This is an array item.",
"properties": {
"subArray": {
"type": "integer",
"title": "Integer item",
"description": "Integer item"
}
}
}
},
"AnyOf": {
"title": " AnyOf",
"description": "This is an anyOf.",
"anyOf": [
{
"type": "object",
"title": "AnyOf1",
"description": "This is anyOf1 object.",
"properties": {
"anyOf1": {
"type": "object",
"title": "AnyOf1 object",
"description": "This is anyOf1.",
"properties": {
"subAnyOf1": {
"type": "string",
"title": "SubAnyOf1",
"description": "SubAnyOf1 string"
}
}
}
}
},
{
"type": "object",
"title": "AnyOf2",
"description": "This is anyOf2 object.",
"properties": {
"anyOf2": {
"type": "object",
"title": "AnyOf2 object",
"description": "This is anyOf2.",
"properties": {
"subAnyOf2": {
"type": "string",
"title": "SubAnyOf2",
"description": "SubAnyOf2 string"
}
}
}
}
}
]
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "nuget3"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"numberExpression": {
"$role": "expression",
"title": "Number or expression",
"description": "Number constant or expression to evaluate.",
"oneOf": [
{
"type": "number",
"title": "Number",
"description": "Number constant.",
"default": 0,
"examples": [
15.5
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=dialog.quantity"
]
}
]
},
"objectExpression": {
"$role": "expression",
"title": "Object or expression",
"description": "Object or expression to evaluate.",
"oneOf": [
{
"type": "object",
"title": "Object",
"description": "Object constant."
},
{
"$ref": "#/definitions/equalsExpression"
}
]
},
"role": {
"title": "$role",
"description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].",
"type": "string",
"pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$"
},
"stringExpression": {
"$role": "expression",
"title": "String or expression",
"description": "Interpolated string or expression to evaluate.",
"oneOf": [
{
"type": "string",
"title": "String",
"description": "Interpolated string",
"pattern": "^(?!(=)).*",
"examples": [
"Hello ${user.name}"
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=concat('x','y','z')"
]
}
]
},
"valueExpression": {
"$role": "expression",
"title": "Any or expression",
"description": "Any constant or expression to evaluate.",
"oneOf": [
{
"type": "object",
"title": "Object",
"description": "Object constant."
},
{
"type": "array",
"title": "Array",
"description": "Array constant."
},
{
"type": "string",
"title": "String",
"description": "Interpolated string.",
"pattern": "^(?!(=)).*",
"examples": [
"Hello ${user.name}"
]
},
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean constant",
"examples": [
false
]
},
{
"type": "number",
"title": "Number",
"description": "Number constant.",
"examples": [
15.5
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=..."
]
}
]
}
}
}

Просмотреть файл

@ -0,0 +1,79 @@
{
"nuget3": {
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "Nuget3",
"label": "Nuget3",
"order": [
"Object"
],
"properties": {
"AnyOf": {
"description": "This is AnyOf",
"label": "Nuget3",
"order": [
"anyOf1"
],
"properties": {
"anyOf1": {
"description": "This is anyOf1",
"label": "Nuget3",
"order": [
"subAnyOf1"
],
"properties": {
"subAnyOf1": {
"description": "This is subAnyOf1",
"label": "Nuget3"
}
}
},
"anyOf2": {
"description": "This is anyOf2",
"label": "Nuget3",
"order": [
"subAnyOf2"
],
"properties": {
"subAnyOf2": {
"description": "This is subAnyOf2",
"label": "Nuget3"
}
}
}
}
},
"Array": {
"description": "This is Array",
"label": "Nuget3",
"order": [
"subArray"
],
"properties": {
"subArray": {
"description": "This is subArray",
"label": "Nuget3"
}
}
},
"Object": {
"description": "This is Object",
"label": "Nuget3",
"order": [
"subObject"
],
"properties": {
"subObject": {
"description": "This is subObject",
"label": "Nuget3"
}
}
},
"SimpleArray": {
"description": "This is SimpleArray",
"label": "Nuget3"
}
}
}
}
}

Просмотреть файл

@ -0,0 +1,79 @@
{
"nuget3": {
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "Nuget3 en-us",
"label": "Nuget3 en-us",
"order": [
"Object"
],
"properties": {
"AnyOf": {
"description": "This is AnyOf",
"label": "Nuget3 en-us",
"order": [
"anyOf1"
],
"properties": {
"anyOf1": {
"description": "This is anyOf1",
"label": "Nuget3 en-us",
"order": [
"subAnyOf1"
],
"properties": {
"subAnyOf1": {
"description": "This is subAnyOf1",
"label": "Nuget3 en-us"
}
}
},
"anyOf2": {
"description": "This is anyOf2",
"label": "Nuget3 en-us",
"order": [
"subAnyOf2"
],
"properties": {
"subAnyOf2": {
"description": "This is subAnyOf2",
"label": "Nuget3 en-us"
}
}
}
}
},
"Array": {
"description": "This is Array",
"label": "Nuget3 en-us",
"order": [
"subArray"
],
"properties": {
"subArray": {
"description": "This is subArray",
"label": "Nuget3 en-us"
}
}
},
"Object": {
"description": "This is Object",
"label": "Nuget3 en-us",
"order": [
"subObject"
],
"properties": {
"subObject": {
"description": "This is subObject",
"label": "Nuget3 en-us"
}
}
},
"SimpleArray": {
"description": "This is SimpleArray",
"label": "Nuget3 en-us"
}
}
}
}
}

Просмотреть файл

@ -0,0 +1,362 @@
{
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"type": "object",
"title": "Component kinds",
"description": "These are all of the kinds that can be created by the loader.",
"oneOf": [
{
"$ref": "#/definitions/nuget3"
}
],
"definitions": {
"arrayExpression": {
"$role": "expression",
"title": "Array or expression",
"description": "Array or expression to evaluate.",
"oneOf": [
{
"type": "array",
"title": "Array",
"description": "Array constant."
},
{
"$ref": "#/definitions/equalsExpression"
}
]
},
"booleanExpression": {
"$role": "expression",
"title": "Boolean or expression",
"description": "Boolean constant or expression to evaluate.",
"oneOf": [
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean constant.",
"default": false,
"examples": [
false
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=user.isVip"
]
}
]
},
"component": {
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"condition": {
"$role": "expression",
"title": "Boolean condition",
"description": "Boolean constant or expression to evaluate.",
"oneOf": [
{
"$ref": "#/definitions/expression"
},
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean value.",
"default": true,
"examples": [
false
]
}
]
},
"equalsExpression": {
"$role": "expression",
"type": "string",
"title": "Expression",
"description": "Expression starting with =.",
"pattern": "^=.*\\S.*",
"examples": [
"=user.name"
]
},
"expression": {
"$role": "expression",
"type": "string",
"title": "Expression",
"description": "Expression to evaluate.",
"pattern": "^.*\\S.*",
"examples": [
"user.age > 13"
]
},
"integerExpression": {
"$role": "expression",
"title": "Integer or expression",
"description": "Integer constant or expression to evaluate.",
"oneOf": [
{
"type": "integer",
"title": "Integer",
"description": "Integer constant.",
"default": 0,
"examples": [
15
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=user.age"
]
}
]
},
"nuget3": {
"$role": [],
"title": "Nuget3 schema",
"description": "Example schema for packages.",
"$package": {
"name": "nuget3",
"version": "1.0.0"
},
"type": "object",
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"Object": {
"type": "object",
"title": " object",
"description": "This is an object.",
"properties": {
"subObject": {
"type": "string",
"title": "SubObject",
"description": "SubObject property of Object."
}
}
},
"SimpleArray": {
"type": "array",
"title": " Empty Array",
"description": "This is simple items array.",
"items": true
},
"Array": {
"type": "array",
"title": " Array",
"description": "This is a complex item array.",
"items": {
"type": "object",
"title": "Array item",
"description": "This is an array item.",
"properties": {
"subArray": {
"type": "integer",
"title": "Integer item",
"description": "Integer item"
}
}
}
},
"AnyOf": {
"title": " AnyOf",
"description": "This is an anyOf.",
"anyOf": [
{
"type": "object",
"title": "AnyOf1",
"description": "This is anyOf1 object.",
"properties": {
"anyOf1": {
"type": "object",
"title": "AnyOf1 object",
"description": "This is anyOf1.",
"properties": {
"subAnyOf1": {
"type": "string",
"title": "SubAnyOf1",
"description": "SubAnyOf1 string"
}
}
}
}
},
{
"type": "object",
"title": "AnyOf2",
"description": "This is anyOf2 object.",
"properties": {
"anyOf2": {
"type": "object",
"title": "AnyOf2 object",
"description": "This is anyOf2.",
"properties": {
"subAnyOf2": {
"type": "string",
"title": "SubAnyOf2",
"description": "SubAnyOf2 string"
}
}
}
}
}
]
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "nuget3"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"numberExpression": {
"$role": "expression",
"title": "Number or expression",
"description": "Number constant or expression to evaluate.",
"oneOf": [
{
"type": "number",
"title": "Number",
"description": "Number constant.",
"default": 0,
"examples": [
15.5
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=dialog.quantity"
]
}
]
},
"objectExpression": {
"$role": "expression",
"title": "Object or expression",
"description": "Object or expression to evaluate.",
"oneOf": [
{
"type": "object",
"title": "Object",
"description": "Object constant."
},
{
"$ref": "#/definitions/equalsExpression"
}
]
},
"role": {
"title": "$role",
"description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].",
"type": "string",
"pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$"
},
"stringExpression": {
"$role": "expression",
"title": "String or expression",
"description": "Interpolated string or expression to evaluate.",
"oneOf": [
{
"type": "string",
"title": "String",
"description": "Interpolated string",
"pattern": "^(?!(=)).*",
"examples": [
"Hello ${user.name}"
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=concat('x','y','z')"
]
}
]
},
"valueExpression": {
"$role": "expression",
"title": "Any or expression",
"description": "Any constant or expression to evaluate.",
"oneOf": [
{
"type": "object",
"title": "Object",
"description": "Object constant."
},
{
"type": "array",
"title": "Array",
"description": "Array constant."
},
{
"type": "string",
"title": "String",
"description": "Interpolated string.",
"pattern": "^(?!(=)).*",
"examples": [
"Hello ${user.name}"
]
},
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean constant",
"examples": [
false
]
},
{
"type": "number",
"title": "Number",
"description": "Number constant.",
"examples": [
15.5
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=..."
]
}
]
}
}
}

Просмотреть файл

@ -0,0 +1,79 @@
{
"nuget3": {
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "Nuget3",
"label": "Nuget3",
"order": [
"Object"
],
"properties": {
"AnyOf": {
"description": "This is AnyOf",
"label": "Nuget3",
"order": [
"anyOf1"
],
"properties": {
"anyOf1": {
"description": "This is anyOf1",
"label": "Nuget3",
"order": [
"subAnyOf1"
],
"properties": {
"subAnyOf1": {
"description": "This is subAnyOf1",
"label": "Nuget3"
}
}
},
"anyOf2": {
"description": "This is anyOf2",
"label": "Nuget3",
"order": [
"subAnyOf2"
],
"properties": {
"subAnyOf2": {
"description": "This is subAnyOf2",
"label": "Nuget3"
}
}
}
}
},
"Array": {
"description": "This is Array",
"label": "Nuget3",
"order": [
"subArray"
],
"properties": {
"subArray": {
"description": "This is subArray",
"label": "Nuget3"
}
}
},
"Object": {
"description": "This is Object",
"label": "Nuget3",
"order": [
"subObject"
],
"properties": {
"subObject": {
"description": "This is subObject",
"label": "Nuget3"
}
}
},
"SimpleArray": {
"description": "This is SimpleArray",
"label": "Nuget3"
}
}
}
}
}

Просмотреть файл

@ -0,0 +1,478 @@
{
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"type": "object",
"title": "Component kinds",
"description": "These are all of the kinds that can be created by the loader.",
"oneOf": [
{
"$ref": "#/definitions/dependent-package"
},
{
"$ref": "#/definitions/parent-package"
}
],
"definitions": {
"arrayExpression": {
"$role": "expression",
"title": "Array or expression",
"description": "Array or expression to evaluate.",
"oneOf": [
{
"type": "array",
"title": "Array",
"description": "Array constant."
},
{
"$ref": "#/definitions/equalsExpression"
}
]
},
"booleanExpression": {
"$role": "expression",
"title": "Boolean or expression",
"description": "Boolean constant or expression to evaluate.",
"oneOf": [
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean constant.",
"default": false,
"examples": [
false
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=user.isVip"
]
}
]
},
"component": {
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"condition": {
"$role": "expression",
"title": "Boolean condition",
"description": "Boolean constant or expression to evaluate.",
"oneOf": [
{
"$ref": "#/definitions/expression"
},
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean value.",
"default": true,
"examples": [
false
]
}
]
},
"dependent-package": {
"$role": [],
"title": "dependent-package Schema",
"description": "Example schema for packages.",
"$package": {
"name": "dependent-package",
"version": "1.0.0"
},
"type": "object",
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"Object": {
"type": "object",
"title": " object",
"description": "This is an object.",
"properties": {
"subObject": {
"type": "string",
"title": "SubObject",
"description": "SubObject property of Object."
}
}
},
"SimpleArray": {
"type": "array",
"title": " Empty Array",
"description": "This is simple items array.",
"items": true
},
"Array": {
"type": "array",
"title": " Array",
"description": "This is a complex item array.",
"items": {
"type": "object",
"title": "Array item",
"description": "This is an array item.",
"properties": {
"subArray": {
"type": "integer",
"title": "Integer item",
"description": "Integer item"
}
}
}
},
"AnyOf": {
"title": " AnyOf",
"description": "This is an anyOf.",
"anyOf": [
{
"type": "object",
"title": "AnyOf1",
"description": "This is anyOf1 object.",
"properties": {
"anyOf1": {
"type": "object",
"title": "AnyOf1 object",
"description": "This is anyOf1.",
"properties": {
"subAnyOf1": {
"type": "string",
"title": "SubAnyOf1",
"description": "SubAnyOf1 string"
}
}
}
}
},
{
"type": "object",
"title": "AnyOf2",
"description": "This is anyOf2 object.",
"properties": {
"anyOf2": {
"type": "object",
"title": "AnyOf2 object",
"description": "This is anyOf2.",
"properties": {
"subAnyOf2": {
"type": "string",
"title": "SubAnyOf2",
"description": "SubAnyOf2 string"
}
}
}
}
}
]
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "dependent-package"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"equalsExpression": {
"$role": "expression",
"type": "string",
"title": "Expression",
"description": "Expression starting with =.",
"pattern": "^=.*\\S.*",
"examples": [
"=user.name"
]
},
"expression": {
"$role": "expression",
"type": "string",
"title": "Expression",
"description": "Expression to evaluate.",
"pattern": "^.*\\S.*",
"examples": [
"user.age > 13"
]
},
"integerExpression": {
"$role": "expression",
"title": "Integer or expression",
"description": "Integer constant or expression to evaluate.",
"oneOf": [
{
"type": "integer",
"title": "Integer",
"description": "Integer constant.",
"default": 0,
"examples": [
15
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=user.age"
]
}
]
},
"numberExpression": {
"$role": "expression",
"title": "Number or expression",
"description": "Number constant or expression to evaluate.",
"oneOf": [
{
"type": "number",
"title": "Number",
"description": "Number constant.",
"default": 0,
"examples": [
15.5
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=dialog.quantity"
]
}
]
},
"objectExpression": {
"$role": "expression",
"title": "Object or expression",
"description": "Object or expression to evaluate.",
"oneOf": [
{
"type": "object",
"title": "Object",
"description": "Object constant."
},
{
"$ref": "#/definitions/equalsExpression"
}
]
},
"parent-package": {
"$role": [],
"title": "parent-package Schema",
"description": "Example schema for packages.",
"$package": {
"name": "parent-package",
"version": "1.0.0"
},
"type": "object",
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"Object": {
"type": "object",
"title": " object",
"description": "This is an object.",
"properties": {
"subObject": {
"type": "string",
"title": "SubObject",
"description": "SubObject property of Object."
}
}
},
"SimpleArray": {
"type": "array",
"title": " Empty Array",
"description": "This is simple items array.",
"items": true
},
"Array": {
"type": "array",
"title": " Array",
"description": "This is a complex item array.",
"items": {
"type": "object",
"title": "Array item",
"description": "This is an array item.",
"properties": {
"subArray": {
"type": "integer",
"title": "Integer item",
"description": "Integer item"
}
}
}
},
"AnyOf": {
"title": " AnyOf",
"description": "This is an anyOf.",
"anyOf": [
{
"type": "object",
"title": "AnyOf1",
"description": "This is anyOf1 object.",
"properties": {
"anyOf1": {
"type": "object",
"title": "AnyOf1 object",
"description": "This is anyOf1.",
"properties": {
"subAnyOf1": {
"type": "string",
"title": "SubAnyOf1",
"description": "SubAnyOf1 string"
}
}
}
}
},
{
"type": "object",
"title": "AnyOf2",
"description": "This is anyOf2 object.",
"properties": {
"anyOf2": {
"type": "object",
"title": "AnyOf2 object",
"description": "This is anyOf2.",
"properties": {
"subAnyOf2": {
"type": "string",
"title": "SubAnyOf2",
"description": "SubAnyOf2 string"
}
}
}
}
}
]
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "parent-package"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"role": {
"title": "$role",
"description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].",
"type": "string",
"pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$"
},
"stringExpression": {
"$role": "expression",
"title": "String or expression",
"description": "Interpolated string or expression to evaluate.",
"oneOf": [
{
"type": "string",
"title": "String",
"description": "Interpolated string",
"pattern": "^(?!(=)).*",
"examples": [
"Hello ${user.name}"
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=concat('x','y','z')"
]
}
]
},
"valueExpression": {
"$role": "expression",
"title": "Any or expression",
"description": "Any constant or expression to evaluate.",
"oneOf": [
{
"type": "object",
"title": "Object",
"description": "Object constant."
},
{
"type": "array",
"title": "Array",
"description": "Array constant."
},
{
"type": "string",
"title": "String",
"description": "Interpolated string.",
"pattern": "^(?!(=)).*",
"examples": [
"Hello ${user.name}"
]
},
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean constant",
"examples": [
false
]
},
{
"type": "number",
"title": "Number",
"description": "Number constant.",
"examples": [
15.5
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=..."
]
}
]
}
}
}

Просмотреть файл

@ -0,0 +1,15 @@
{
"dependent-package": {
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "root-package"
}
},
"parent-package": {
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "parent-package",
"subtitle": "From parent-package"
}
}
}

Просмотреть файл

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="nuget1" version="10.0.0" targetFramework="net461" />
</packages>

Просмотреть файл

@ -0,0 +1,4 @@
{
"title": "project1 nuget1-10 Schema",
"$ref": "../../schemas/packageBase.json"
}

Просмотреть файл

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Microsoft")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("© Microsoft Corporation. All rights reserved.")]
[assembly: System.Reflection.AssemblyDescriptionAttribute(@"LUISGen is a tool for generating a strongly typed C# class or typescript interface to make consuming LUIS output easier in the Microsoft Bot Builder SDK. This enables build-time error checking and intellisense against the intents and entities of your LUIS application model.")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("2.0.1.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.1-local")]
[assembly: System.Reflection.AssemblyProductAttribute("Microsoft Bot Framework")]
[assembly: System.Reflection.AssemblyTitleAttribute("project1")]
[assembly: System.Reflection.AssemblyVersionAttribute("2.0.1.0")]
// Generated by the MSBuild WriteCodeFragment class.

Просмотреть файл

@ -0,0 +1 @@
2cf015fff2a95d5ae09a72891bef91ecc659ee75

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Microsoft")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("© Microsoft Corporation. All rights reserved.")]
[assembly: System.Reflection.AssemblyDescriptionAttribute(@"LUISGen is a tool for generating a strongly typed C# class or typescript interface to make consuming LUIS output easier in the Microsoft Bot Builder SDK. This enables build-time error checking and intellisense against the intents and entities of your LUIS application model.")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("2.0.1.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.1-local")]
[assembly: System.Reflection.AssemblyProductAttribute("Microsoft Bot Framework")]
[assembly: System.Reflection.AssemblyTitleAttribute("project2")]
[assembly: System.Reflection.AssemblyVersionAttribute("2.0.1.0")]
// Generated by the MSBuild WriteCodeFragment class.

Просмотреть файл

@ -0,0 +1 @@
08c3aad43b5f570d5237f1018fdc9819ce52239e

Просмотреть файл

@ -1,6 +1,56 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": [],
"title": "Some node",
"description": "Definition."
"description": "Definition.",
"properties": {
"project2Object": {
"type": "object",
"properties": {
"subproject2Object": {
"type": "string"
}
}
},
"project2EmptyArray": {
"type": "array",
"items": true
},
"project2Array": {
"type": "array",
"items": {
"type": "object",
"properties": {
"subproject2Array": {
"type": "integer"
}
}
}
},
"project2AnyOf": {
"anyOf": [
{
"type": "object",
"properties": {
"anyOf1": {
"type": "object",
"properties": {
"subproject2AnyOf1": {
"type": "string"
}
}
},
"anyOf2": {
"type": "object",
"properties": {
"subproject2AnyOf2": {
"type": "string"
}
}
}
}
}
]
}
}
}

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -0,0 +1,66 @@
{
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"label": "Project3",
"order": [
"*"
],
"properties": {
"Object": {
"label": "Project3",
"order": [
"*"
],
"properties": {
"subObject": {
"label": "Project3"
}
}
},
"SimpleArray": {
"label": "Project3"
},
"Array": {
"label": "Project3",
"order": [
"*"
],
"properties": {
"subArray": {
"label": "Project3"
}
}
},
"AnyOf": {
"label": "Project3",
"order": [
"*"
],
"properties": {
"anyOf1": {
"label": "Project3",
"order":[
"*"
],
"properties": {
"subAnyOf1": {
"label": "Project3"
}
}
},
"anyOf2": {
"label": "Project3",
"order": [
"*"
],
"properties": {
"subAnyOf2": {
"label": "Project3"
}
}
}
}
}
}
}
}

Просмотреть файл

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Microsoft")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("© Microsoft Corporation. All rights reserved.")]
[assembly: System.Reflection.AssemblyDescriptionAttribute(@"LUISGen is a tool for generating a strongly typed C# class or typescript interface to make consuming LUIS output easier in the Microsoft Bot Builder SDK. This enables build-time error checking and intellisense against the intents and entities of your LUIS application model.")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("2.0.1.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.1-local")]
[assembly: System.Reflection.AssemblyProductAttribute("Microsoft Bot Framework")]
[assembly: System.Reflection.AssemblyTitleAttribute("project3")]
[assembly: System.Reflection.AssemblyVersionAttribute("2.0.1.0")]
// Generated by the MSBuild WriteCodeFragment class.

Просмотреть файл

@ -0,0 +1 @@
00eefe08fe012b8c4431923cf49a80c395458d86

Просмотреть файл

@ -0,0 +1,44 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version Condition=" '$(PackageVersion)' == '' ">2.0.1-local</Version>
<Version Condition=" '$(PackageVersion)' != '' ">$(PackageVersion)</Version>
<PackageVersion Condition=" '$(PackageVersion)' == '' ">2.0.1-local</PackageVersion>
<PackageVersion Condition=" '$(PackageVersion)' != '' ">$(PackageVersion)</PackageVersion>
</PropertyGroup>
<PropertyGroup>
<VersionPrefix>2.0.1</VersionPrefix>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<Authors>microsoft,BotFramework,nugetbotbuilder</Authors>
<Company>Microsoft</Company>
<Description>LUISGen is a tool for generating a strongly typed C# class or typescript interface to make consuming LUIS output easier in the Microsoft Bot Builder SDK. This enables build-time error checking and intellisense against the intents and entities of your LUIS application model.</Description>
<Product>Microsoft Bot Framework</Product>
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>
<PackageProjectUrl>https://github.com/Microsoft/botbuilder-tools/tree/master/packages/LUISGen</PackageProjectUrl>
<PackageIconUrl>http://docs.botframework.com/images/bot_icon.png</PackageIconUrl>
<PackageLicenseUrl>https://github.com/Microsoft/BotBuilder/blob/master/LICENSE</PackageLicenseUrl>
<RepositoryUrl>https://github.com/Microsoft/botbuilder-tools</RepositoryUrl>
<LicenseUrl>https://github.com/Microsoft/BotBuilder-tools/blob/master/LICENSE</LicenseUrl>
<RepositoryType />
<PackageTags>bots;ai;botframework;botbuilder;luis</PackageTags>
<NeutralLanguage />
<PackAsTool>true</PackAsTool>
<ToolCommandName>luisgen</ToolCommandName>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<SignAssembly>true</SignAssembly>
<DelaySign>true</DelaySign>
<AssemblyOriginatorKeyFile>..\..\..\build\35MSSharedLib1024.snk</AssemblyOriginatorKeyFile>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="nuget3" Version="1.0.0" />
</ItemGroup>
</Project>

Просмотреть файл

@ -0,0 +1,9 @@
{
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"description": "Does not exist",
"properties": {
"prop": {}
}
}
}

Просмотреть файл

@ -0,0 +1,62 @@
{
"$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
"form": {
"label": "Project4",
"order": [
"nonExistentOrder"
],
"properties": {
"nonExistentProperty": {},
"Object": {
"label": "Project4",
"order": [
"nonExistentOrder"
],
"properties": {
"subObject": {
"label": "Project4"
},
"NonExistentProperty": {
"properties": {
"MoreNonExistent": {}
}
}
}
},
"SimpleArray": {
"label": "Project4"
},
"Array": {
"label": "Project4",
"properties": {
"subArray": {
"label": "Project4"
},
"nonExistentProperty": {}
}
},
"AnyOf": {
"label": "Project4",
"properties": {
"anyOf1": {
"label": "Project4",
"properties": {
"subAnyOf1": {
"label": "Project4"
},
"nonExistentProperty": {}
}
},
"anyOf2": {
"label": "Project4",
"properties": {
"subAnyOf2": {
"label": "Project4"
}
}
}
}
}
}
}
}

Просмотреть файл

@ -0,0 +1,44 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version Condition=" '$(PackageVersion)' == '' ">2.0.1-local</Version>
<Version Condition=" '$(PackageVersion)' != '' ">$(PackageVersion)</Version>
<PackageVersion Condition=" '$(PackageVersion)' == '' ">2.0.1-local</PackageVersion>
<PackageVersion Condition=" '$(PackageVersion)' != '' ">$(PackageVersion)</PackageVersion>
</PropertyGroup>
<PropertyGroup>
<VersionPrefix>2.0.1</VersionPrefix>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<Authors>microsoft,BotFramework,nugetbotbuilder</Authors>
<Company>Microsoft</Company>
<Description>LUISGen is a tool for generating a strongly typed C# class or typescript interface to make consuming LUIS output easier in the Microsoft Bot Builder SDK. This enables build-time error checking and intellisense against the intents and entities of your LUIS application model.</Description>
<Product>Microsoft Bot Framework</Product>
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>
<PackageProjectUrl>https://github.com/Microsoft/botbuilder-tools/tree/master/packages/LUISGen</PackageProjectUrl>
<PackageIconUrl>http://docs.botframework.com/images/bot_icon.png</PackageIconUrl>
<PackageLicenseUrl>https://github.com/Microsoft/BotBuilder/blob/master/LICENSE</PackageLicenseUrl>
<RepositoryUrl>https://github.com/Microsoft/botbuilder-tools</RepositoryUrl>
<LicenseUrl>https://github.com/Microsoft/BotBuilder-tools/blob/master/LICENSE</LicenseUrl>
<RepositoryType />
<PackageTags>bots;ai;botframework;botbuilder;luis</PackageTags>
<NeutralLanguage />
<PackAsTool>true</PackAsTool>
<ToolCommandName>luisgen</ToolCommandName>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<SignAssembly>true</SignAssembly>
<DelaySign>true</DelaySign>
<AssemblyOriginatorKeyFile>..\..\..\build\35MSSharedLib1024.snk</AssemblyOriginatorKeyFile>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="nuget3" Version="1.0.0" />
</ItemGroup>
</Project>

Просмотреть файл

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="nuget3" version="1.0.0" targetFramework="net461" />
</packages>

Просмотреть файл

@ -0,0 +1,40 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version Condition=" '$(PackageVersion)' == '' ">2.0.1-local</Version>
<Version Condition=" '$(PackageVersion)' != '' ">$(PackageVersion)</Version>
<PackageVersion Condition=" '$(PackageVersion)' == '' ">2.0.1-local</PackageVersion>
<PackageVersion Condition=" '$(PackageVersion)' != '' ">$(PackageVersion)</PackageVersion>
</PropertyGroup>
<PropertyGroup>
<VersionPrefix>2.0.1</VersionPrefix>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<Authors>microsoft,BotFramework,nugetbotbuilder</Authors>
<Company>Microsoft</Company>
<Description>LUISGen is a tool for generating a strongly typed C# class or typescript interface to make consuming LUIS output easier in the Microsoft Bot Builder SDK. This enables build-time error checking and intellisense against the intents and entities of your LUIS application model.</Description>
<Product>Microsoft Bot Framework</Product>
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>
<PackageProjectUrl>https://github.com/Microsoft/botbuilder-tools/tree/master/packages/LUISGen</PackageProjectUrl>
<PackageIconUrl>http://docs.botframework.com/images/bot_icon.png</PackageIconUrl>
<PackageLicenseUrl>https://github.com/Microsoft/BotBuilder/blob/master/LICENSE</PackageLicenseUrl>
<RepositoryUrl>https://github.com/Microsoft/botbuilder-tools</RepositoryUrl>
<LicenseUrl>https://github.com/Microsoft/BotBuilder-tools/blob/master/LICENSE</LicenseUrl>
<RepositoryType />
<PackageTags>bots;ai;botframework;botbuilder;luis</PackageTags>
<NeutralLanguage />
<PackAsTool>true</PackAsTool>
<ToolCommandName>luisgen</ToolCommandName>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<SignAssembly>true</SignAssembly>
<DelaySign>true</DelaySign>
<AssemblyOriginatorKeyFile>..\..\..\build\35MSSharedLib1024.snk</AssemblyOriginatorKeyFile>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
</PropertyGroup>
</Project>

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"title": "Microsoft Nothing",
"description": "Definition of a union type with no implementations.",
"$role":"interface"

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": "interface",
"$comment": "Has multiple implementations",
"title": "Recognizer",

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": "implements(IRecognizer)",
"properties": {
"req": {

Просмотреть файл

@ -1,4 +1,4 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": "implements(IRecognizer)"
}

Просмотреть файл

@ -1,492 +0,0 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"type": "object",
"title": "Component kinds",
"description": "These are all of the kinds that can be created by the loader.",
"oneOf": [
{
"$ref": "#/definitions/Recognizer"
},
{
"$ref": "#/definitions/RecognizerTypeMismatch"
},
{
"$ref": "#/definitions/prompt"
},
{
"$ref": "#/definitions/root"
}
],
"definitions": {
"INothing": {
"title": "Microsoft Nothing",
"description": "Definition of a union type with no implementations.",
"$role": "interface"
},
"IRecognizer": {
"$role": "interface",
"$comment": "Has multiple implementations",
"title": "Recognizer",
"description": "Recognizer interface.",
"oneOf": [
{
"type": "string",
"title": "Reference to IRecognizer",
"description": "Reference to IRecognizer .dialog file."
},
{
"$ref": "#/definitions/Recognizer"
},
{
"$ref": "#/definitions/RecognizerTypeMismatch"
}
]
},
"Recognizer": {
"$role": "implements(IRecognizer)",
"required": [
"req",
"$kind"
],
"definitions": {
"insideDef": {
"$role": "expression",
"title": "Inside",
"description": "Something inside."
}
},
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"req": {
"$role": "expression",
"title": "Required",
"description": "Something required."
},
"opt": {
"type": "string",
"title": "Optional",
"description": "Something optional."
},
"complex": {
"title": "Complex",
"description": "Complex object.",
"properties": {
"inside": {
"$ref": "#/definitions/Recognizer/definitions/insideDef"
}
}
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "Recognizer"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"RecognizerTypeMismatch": {
"$role": "implements(IRecognizer)",
"type": "object",
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "RecognizerTypeMismatch"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"arrayExpression": {
"$role": "expression",
"title": "Array or expression",
"description": "Array or expression to evaluate.",
"oneOf": [
{
"type": "array",
"title": "Array",
"description": "Array constant."
},
{
"$ref": "#/definitions/equalsExpression"
}
]
},
"basePrompt": {
"$comment": "This is a base schema that cannot be instantiated.",
"type": "object",
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"prompt": {
"type": "string",
"title": "Base prompt",
"description": "Base prompt."
},
"alternatePrompt": {
"title": "Alternate",
"description": "Alternate prompt of anything."
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "basePrompt"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"booleanExpression": {
"$role": "expression",
"title": "Boolean or expression",
"description": "Boolean constant or expression to evaluate.",
"oneOf": [
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean constant.",
"default": false,
"examples": [
false
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=user.isVip"
]
}
]
},
"component": {
"required": [
"$kind"
],
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"condition": {
"$role": "expression",
"title": "Boolean condition",
"description": "Boolean constant or expression to evaluate.",
"oneOf": [
{
"$ref": "#/definitions/expression"
},
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean value.",
"default": true,
"examples": [
false
]
}
]
},
"equalsExpression": {
"type": "string",
"title": "Expression",
"description": "Expression starting with =.",
"pattern": "^=.*\\S.*",
"examples": [
"=user.name"
]
},
"expression": {
"type": "string",
"title": "Expression",
"description": "Expression to evaluate.",
"pattern": "^.*\\S.*",
"examples": [
"user.age > 13"
]
},
"integerExpression": {
"$role": "expression",
"title": "Integer or expression",
"description": "Integer constant or expression to evaluate.",
"oneOf": [
{
"type": "integer",
"title": "Integer",
"description": "Integer constant.",
"default": 0,
"examples": [
15
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=user.age"
]
}
]
},
"numberExpression": {
"$role": "expression",
"title": "Number or expression",
"description": "Number constant or expression to evaluate.",
"oneOf": [
{
"type": "number",
"title": "Number",
"description": "Number constant.",
"default": 0,
"examples": [
15.5
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=dialog.quantity"
]
}
]
},
"objectExpression": {
"$role": "expression",
"title": "Object or expression",
"description": "Object or expression to evaluate.",
"oneOf": [
{
"type": "object",
"title": "Object",
"description": "Object constant."
},
{
"$ref": "#/definitions/equalsExpression"
}
]
},
"prompt": {
"$role": "extends(basePrompt)",
"required": [
"prompt",
"$kind"
],
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"prompt": {
"type": "string",
"title": "Base prompt",
"description": "Base prompt."
},
"alternatePrompt": {
"title": "Alternate",
"description": "Alternate prompt of anything."
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "prompt"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"role": {
"title": "$role",
"description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].",
"type": "string",
"pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$"
},
"root": {
"$role": [],
"required": [
"recognizers",
"$kind"
],
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^\\$": {
"title": "Tooling property",
"description": "Open ended property for tooling."
}
},
"properties": {
"recognizers": {
"type": "array",
"title": "Recognizers",
"description": "Some recognizers.",
"items": {
"$kind": "IRecognizer",
"$ref": "#/definitions/IRecognizer"
}
},
"prompt": {
"$kind": "prompt",
"title": "A prompt",
"description": "A prompt.",
"$ref": "#/definitions/prompt"
},
"condition": {
"title": "Condition",
"description": "A condition to test",
"$ref": "#/definitions/booleanExpression"
},
"property": {
"type": "string",
"title": "Something",
"description": "About something."
},
"$kind": {
"title": "Kind of dialog object",
"description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)",
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9.]*$",
"const": "root"
},
"$designer": {
"title": "Designer information",
"type": "object",
"description": "Extra information for the Bot Framework Composer."
}
}
},
"stringExpression": {
"$role": "expression",
"title": "String or expression",
"description": "Interpolated string or expression to evaluate.",
"oneOf": [
{
"type": "string",
"title": "String",
"description": "Interpolated string",
"pattern": "^(?!(=)).*",
"examples": [
"Hello ${user.name}"
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=concat('x','y','z')"
]
}
]
},
"valueExpression": {
"$role": "expression",
"title": "Any or expression",
"description": "Any constant or expression to evaluate.",
"oneOf": [
{
"type": "object",
"title": "Object",
"description": "Object constant."
},
{
"type": "array",
"title": "Array",
"description": "Array constant."
},
{
"type": "string",
"title": "String",
"description": "Interpolated string.",
"pattern": "^(?!(=)).*",
"examples": [
"Hello ${user.name}"
]
},
{
"type": "boolean",
"title": "Boolean",
"description": "Boolean constant",
"examples": [
false
]
},
{
"type": "number",
"title": "Number",
"description": "Number constant.",
"examples": [
15.5
]
},
{
"$ref": "#/definitions/equalsExpression",
"examples": [
"=..."
]
}
]
}
}
}

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"allOf": [
{"type": "string"},
{"type": "number"}

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"properties": {
"foo":
}

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": "expression",
"type": "object",
"properties": {

Просмотреть файл

@ -1,4 +1,4 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": "extends(missingSchema)"
}

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": [],
"properties": {
"foo": {

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"properties": {
"foo": {
"$ref": "schema:#/definitions/foo"

Просмотреть файл

@ -1,3 +1,3 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema"
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema"
}

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$comment": "This is a base schema that cannot be instantiated.",
"properties": {
"prompt": {

Просмотреть файл

@ -1,7 +0,0 @@
@echo off
setlocal
call rush build
set ds=..\..\..\..\bin\run
call node %ds% dialog:merge *.schema -o app.schema

Просмотреть файл

@ -0,0 +1,87 @@
{
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": [],
"title": "Example schema for packages",
"description": "Example schema for packages.",
"properties": {
"Object": {
"type": "object",
"title": " object",
"description": "This is an object.",
"properties": {
"subObject": {
"type": "string",
"title": "SubObject",
"description": "SubObject property of Object."
}
}
},
"SimpleArray": {
"type": "array",
"title": " Empty Array",
"description": "This is simple items array.",
"items": true
},
"Array": {
"type": "array",
"title": " Array",
"description": "This is a complex item array.",
"items": {
"type": "object",
"title": "Array item",
"description": "This is an array item.",
"properties": {
"subArray": {
"type": "integer",
"title": "Integer item",
"description": "Integer item"
}
}
}
},
"AnyOf": {
"title": " AnyOf",
"description": "This is an anyOf.",
"anyOf": [
{
"type": "object",
"title": "AnyOf1",
"description": "This is anyOf1 object.",
"properties": {
"anyOf1": {
"type": "object",
"title": "AnyOf1 object",
"description": "This is anyOf1.",
"properties": {
"subAnyOf1": {
"type": "string",
"title": "SubAnyOf1",
"description": "SubAnyOf1 string"
}
}
}
}
},
{
"type": "object",
"title": "AnyOf2",
"description": "This is anyOf2 object.",
"properties": {
"anyOf2": {
"type": "object",
"title": "AnyOf2 object",
"description": "This is anyOf2.",
"properties": {
"subAnyOf2": {
"type": "string",
"title": "SubAnyOf2",
"description": "SubAnyOf2 string"
}
}
}
}
}
]
}
}
}

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": "extends(basePrompt)",
"required": [
"prompt"

Просмотреть файл

@ -1,5 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema",
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": [],
"properties": {
"recognizers": {