diff --git a/lerna.json b/lerna.json index d175add360..a5963105c4 100644 --- a/lerna.json +++ b/lerna.json @@ -10,8 +10,8 @@ "libraries/botbuilder-dialogs", "libraries/botbuilder-dialogs-adaptive", "libraries/botbuilder-dialogs-declarative", - "libraries/botbuilder-lg", "libraries/botbuilder-testing", + "libraries/botbuilder-lg", "libraries/botframework-config", "libraries/botframework-connector", "libraries/botframework-expressions", diff --git a/libraries/botbuilder-azure/package-lock.json b/libraries/botbuilder-azure/package-lock.json deleted file mode 100644 index 290fe81487..0000000000 --- a/libraries/botbuilder-azure/package-lock.json +++ /dev/null @@ -1,196 +0,0 @@ -{ - "name": "botbuilder-azure", - "version": "4.1.6", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } -} diff --git a/libraries/botbuilder-dialogs-adaptive/package.json b/libraries/botbuilder-dialogs-adaptive/package.json index 67516468fc..2b65516edb 100644 --- a/libraries/botbuilder-dialogs-adaptive/package.json +++ b/libraries/botbuilder-dialogs-adaptive/package.json @@ -30,7 +30,7 @@ "@types/node": "^10.12.18", "botbuilder-core": "~4.1.6", "botbuilder-dialogs": "~4.1.6", - "botframework-expressions": "~4.5.0", + "botframework-expressions": "~4.1.6", "botframework-connector": "~4.1.6", "botframework-schema": "~4.1.6", "jsonpath": "^1.0.0" diff --git a/libraries/botbuilder-dialogs-adaptive/src/actions/logAction.ts b/libraries/botbuilder-dialogs-adaptive/src/actions/logAction.ts index 077500d1f6..b26bf6f836 100644 --- a/libraries/botbuilder-dialogs-adaptive/src/actions/logAction.ts +++ b/libraries/botbuilder-dialogs-adaptive/src/actions/logAction.ts @@ -62,7 +62,7 @@ export class LogAction extends DialogCommand { const data = Object.assign({ utterance: dc.context.activity.text || '' }, dc.state, options); - const msg = format(this.template, data); + const msg = format(this.template, dc); // Log to console and send trace if needed console.log(msg); diff --git a/libraries/botbuilder-dialogs-adaptive/src/activityProperty.ts b/libraries/botbuilder-dialogs-adaptive/src/activityProperty.ts index 33bb4d2b5b..204b7261e9 100644 --- a/libraries/botbuilder-dialogs-adaptive/src/activityProperty.ts +++ b/libraries/botbuilder-dialogs-adaptive/src/activityProperty.ts @@ -11,9 +11,9 @@ import * as stringTemplate from './stringTemplate'; export class ActivityProperty { private _value: Partial|string; - private _textTemplate: (data: object) => string; + private _textTemplate: (dc: DialogContext) => string; private _speak: string; - private _speakTemplate: (data: object) => string; + private _speakTemplate: (dc: DialogContext) => string; public get displayLabel(): string { if (typeof this._value === 'object') { @@ -65,19 +65,18 @@ export class ActivityProperty { public format(dc: DialogContext, extraData?: object, override?: Partial|string): Partial { // Format basic activity - const data = Object.assign({}, dc.state, extraData); let activity: Partial; if (override) { - activity = this.formatOverride(override, data); + activity = this.formatOverride(override, dc); } else if (typeof this._value === 'string') { activity = { type: ActivityTypes.Message, - text: this._textTemplate(data) + text: this._textTemplate(dc) } } else if (typeof this._value === 'object') { if (this._value.type === ActivityTypes.Message && this._textTemplate) { activity = Object.assign({}, this._value, { - text: this._textTemplate(data) + text: this._textTemplate(dc) }); } else { activity = this._value; @@ -89,9 +88,9 @@ export class ActivityProperty { // Apply speak and inputHints if (activity.type === ActivityTypes.Message) { if (activity.speak) { - activity.speak = stringTemplate.format(activity.speak, data); + activity.speak = stringTemplate.format(activity.speak, dc); } else if (this._speakTemplate) { - activity.speak = this._speakTemplate(data); + activity.speak = this._speakTemplate(dc); } if (this.inputHint && !activity.inputHint) { activity.inputHint = this.inputHint; @@ -101,15 +100,15 @@ export class ActivityProperty { return activity; } - private formatOverride(override: Partial|string, data: object): Partial { + private formatOverride(override: Partial|string, dc: DialogContext): Partial { if (typeof override === 'string') { return { type: ActivityTypes.Message, - text: stringTemplate.format(override, data) + text: stringTemplate.format(override, dc) }; } else if (override.type === ActivityTypes.Message && override.text) { return Object.assign({}, override, { - text: stringTemplate.format(override.text, data) + text: stringTemplate.format(override.text, dc) }); } else { return override; diff --git a/libraries/botbuilder-dialogs-adaptive/src/conditions/onIntent.ts b/libraries/botbuilder-dialogs-adaptive/src/conditions/onIntent.ts index 09cea36f10..c5066607cd 100644 --- a/libraries/botbuilder-dialogs-adaptive/src/conditions/onIntent.ts +++ b/libraries/botbuilder-dialogs-adaptive/src/conditions/onIntent.ts @@ -5,10 +5,9 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ -import { RecognizerResult } from 'botbuilder-core'; import { OnDialogEvent } from './onDialogEvent'; import { AdaptiveEventNames, SequenceContext } from '../sequenceContext'; -import { DialogEvent, Dialog, DialogContextState } from 'botbuilder-dialogs'; +import { DialogEvent, Dialog } from 'botbuilder-dialogs'; /** * This rule is triggered when a message is received and the recognized intents & entities match a @@ -36,7 +35,7 @@ export class OnIntent extends OnDialogEvent { // Ensure all intents, entities, and properties exist. const memory = sequence.state; for(let i = 0; i < this.matches.length; i++) { - const value = DialogContextState.queryMemory(memory, this.matches[i], 1); + const value = sequence.state.getValue(this.matches[i]); if (!Array.isArray(value) || value.length == 0 || value[0] == undefined) { return false; } diff --git a/libraries/botbuilder-dialogs-adaptive/src/expressionProperty.ts b/libraries/botbuilder-dialogs-adaptive/src/expressionProperty.ts index da84f32eba..de3375c081 100644 --- a/libraries/botbuilder-dialogs-adaptive/src/expressionProperty.ts +++ b/libraries/botbuilder-dialogs-adaptive/src/expressionProperty.ts @@ -6,10 +6,10 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ -import { DialogContextVisibleState, DialogStateManager } from "botbuilder-dialogs"; +import { DialogStateManager } from "botbuilder-dialogs"; import { ExpressionEngine, Expression } from 'botframework-expressions'; -export type ExpressionDelegate = (state: DialogContextVisibleState) => T; +export type ExpressionDelegate = (state: object) => T; export type ExpressionPropertyValue = string|Expression|ExpressionDelegate; export class ExpressionProperty { @@ -40,7 +40,7 @@ export class ExpressionProperty { this._expression = engine.parse(this._value); break; case 'function': - this._expression = Expression.Lambda(this._value); + //this._expression = Expression.Lambda(this._value); break; default: this._expression = this._value; diff --git a/libraries/botbuilder-dialogs-adaptive/src/stringTemplate.ts b/libraries/botbuilder-dialogs-adaptive/src/stringTemplate.ts index cb57d9cd72..450f0826f6 100644 --- a/libraries/botbuilder-dialogs-adaptive/src/stringTemplate.ts +++ b/libraries/botbuilder-dialogs-adaptive/src/stringTemplate.ts @@ -5,8 +5,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ -import * as jsonpath from 'jsonpath'; -import { DialogContextState } from 'botbuilder-dialogs'; +import { DialogContext } from 'botbuilder-dialogs'; /** * @private @@ -17,9 +16,9 @@ import { DialogContextState } from 'botbuilder-dialogs'; * any valid JSONPath expression. * @param template String template to compile. */ -export function compile(template: string): (data: object) => string { +export function compile(template: string): (dc: DialogContext) => string { // Break template into chunks. - const chunks: ((data: object) => string)[] = []; + const chunks: ((dc: DialogContext) => string)[] = []; let buffer = ''; let inSlot = false; for (let i = 0; i < template.length; i++) { @@ -57,9 +56,9 @@ export function compile(template: string): (data: object) => string { } // Return stitching function - return (data: object) => { + return (dc: DialogContext) => { let output = ''; - chunks.forEach((fn) => output += fn(data)); + chunks.forEach((fn) => output += fn(dc)); return output; }; } @@ -74,18 +73,17 @@ export function compile(template: string): (data: object) => string { * @param template String template to compile. * @param data The data used to fill the template slots. */ -export function format(template: string, data: object): string { - return compile(template)(data); +export function format(template: string, dc: DialogContext): string { + return compile(template)(dc); } -function textLiteral(buffer: string): (data: object) => string { - return (data) => buffer; +function textLiteral(buffer: string): (dc: DialogContext) => string { + return (dc) => buffer; } -function textSlot(path: string): (data: object) => string { - path = DialogContextState.resolvePath(path); - return (data) => { - const value = jsonpath.value(data, path); +function textSlot(path: string): (dc: DialogContext) => string { + return (dc) => { + const value = dc.state.getValue(path); switch (typeof value) { case 'object': return JSON.stringify(value); diff --git a/libraries/botbuilder-dialogs/src/componentDialog.ts b/libraries/botbuilder-dialogs/src/componentDialog.ts index e146348bbf..b58613869b 100644 --- a/libraries/botbuilder-dialogs/src/componentDialog.ts +++ b/libraries/botbuilder-dialogs/src/componentDialog.ts @@ -93,6 +93,7 @@ export class ComponentDialog extends DialogContainer { // Return result to calling dialog return await this.endComponent(outerDC, turnResult.result); } + // Just signal end of turn return Dialog.EndOfTurn; } diff --git a/libraries/botbuilder-dialogs/src/dialog.ts b/libraries/botbuilder-dialogs/src/dialog.ts index 230629a304..de3bd3442c 100644 --- a/libraries/botbuilder-dialogs/src/dialog.ts +++ b/libraries/botbuilder-dialogs/src/dialog.ts @@ -387,7 +387,7 @@ export abstract class Dialog extends Configurable { * @remarks * SHOULD be overridden to provide a more contextually relevant ID. The preferred pattern for * ID's is `(this.hashedLabel(''))`. - */ + */ protected onComputeId(): string { throw new Error(`Dialog.onComputeId(): not implemented.`) } @@ -405,16 +405,17 @@ export abstract class Dialog extends Configurable { */ protected hashedLabel(label: string): string { const l = label.length; - if (label.length > 15) { + if (label.length > 15) + { let hash = 0; for (let i = 0; i < l; i++) { const chr = label.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; + hash = ((hash << 5) - hash) + chr; hash |= 0; // Convert to 32 bit integer } label = `${label.substr(0, 5)}${hash.toString()}`; } return label; - } + } } diff --git a/libraries/botbuilder-dialogs/src/dialogContainer.ts b/libraries/botbuilder-dialogs/src/dialogContainer.ts index 4e7132f106..9b9ad923d1 100644 --- a/libraries/botbuilder-dialogs/src/dialogContainer.ts +++ b/libraries/botbuilder-dialogs/src/dialogContainer.ts @@ -13,7 +13,7 @@ export abstract class DialogContainer extends Dialog { /** * The containers dialog set. */ - protected readonly dialogs = new DialogSet(undefined); + public readonly dialogs = new DialogSet(undefined); /** * Creates an inner dialog context for the containers active child. diff --git a/libraries/botbuilder-dialogs/src/dialogContextState.ts b/libraries/botbuilder-dialogs/src/dialogContextState.ts deleted file mode 100644 index a0d82c5341..0000000000 --- a/libraries/botbuilder-dialogs/src/dialogContextState.ts +++ /dev/null @@ -1,190 +0,0 @@ -/** - * @module botbuilder-dialogs - */ -/** - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -import { DialogContext } from './dialogContext'; -import { StateMap } from './stateMap'; -import * as jsonpath from 'jsonpath'; - -/** - * Defines the shape of the state object returned by calling `DialogContext.state.toJSON()`. - */ -export interface DialogContextVisibleState { - /** - * All properties being persisted for the current user across all their conversations with the - * bot. - */ - user: any; - - /** - * All properties being persisted for the current conversation the user is having with the bot. - */ - conversation: any; - - /** - * All properties being persisted for the current dialog that's active. - */ - dialog: any; - - /** - * Transient properties that are only remembered for the current turn. - */ - turn: any; -} - -export class DialogContextState { - private readonly dc: DialogContext; - - /** - * Properties being persisted for the current user across all their conversations with the - * bot. - * - * @remarks - * These values are visible to all dialogs. - */ - public readonly user: StateMap; - - /** - * Properties being persisted for the current conversation the user is having with the bot. - * - * @remarks - * These values are visible to all dialogs but are intended to be transient and may - * automatically expire after some timeout period. - */ - public readonly conversation: StateMap; - - /** - * @private - */ - constructor(dc: DialogContext, userState: StateMap, conversationState: StateMap) { - this.dc = dc; - this.user = userState; - this.conversation = conversationState; - } - - /** - * Properties being persisted for the current dialog that's active. - * - * @remarks - * These variables are only visible to the current dialog instance but may be passed to a child - * dialog using an `inputBinding`. - */ - public get dialog(): StateMap { - let instance = this.dc.activeDialog; - if (!instance) { - if (this.dc.parent) { - instance = this.dc.parent.activeDialog - } else { - throw new Error(`DialogContext.state.dialog: no active or parent dialog instance.`); - } - } - return new StateMap(instance.state); - } - - /** - * Transient properties that are only remembered for the current turn. - */ - public get turn(): StateMap { - // Get transient state for the current turn - let turn: object = this.dc.context.turnState.get(TURN_STATE); - if (!turn) { - turn = {}; - this.dc.context.turnState.set(TURN_STATE, turn); - } - return new StateMap(turn); - } - - /** - * Returns a JSON object representing the in-memory properties that are visible to the current - * `DialogContext`. - * - * @remarks - * These values are passed by reference and may also be accessed individually using the - * [user](#user), [conversation](#conversation), and [dialog](#dialog) properties. - */ - public toJSON(): DialogContextVisibleState { - // Calculate dialog state - let instance = this.dc.activeDialog; - if (!instance && this.dc.parent) { - instance = this.dc.parent.activeDialog - } - return { - user: this.user.memory, - conversation: this.conversation.memory, - dialog: instance ? instance.state : undefined, - turn: this.turn.memory - }; - } - - /** - * Executes a JSONPath expression across the in-memory properties visible to the current - * `DialogContext`. - * - * @remarks - * The syntax for JSONPath can be found [here](https://github.com/dchester/jsonpath#jsonpath-syntax). - * An array of matching values will be returned. - * - * The shape of the object being searched over is an instance of a `DialogContextMemoryObject` - * that's returned by the [toJson()](#tojson) method. - * - * To search for the users name you would pass in an expression of `$.user.name` or simply `user.name`. - * @param pathExpression JSONPath expression to evaluate. The leading `$.` is optional. - * @param count (Optional) number of matches to return. The default value is to return all matches. - */ - public query(pathExpression: string, count?: number): any[] { - return DialogContextState.queryMemory(this.toJSON(), pathExpression, count); - } - - /** - * Returns the first in-memory property that matches a JSONPath expression. - * @param pathExpression JSONPath expression to evaluate. The leading `$.` is optional. - * @param defaultValue (Optional) value to return if the path can't be found. Defaults to `undefined`. - */ - public getValue(pathExpression: string, defaultValue?: T): T { - - let value: T; - if (pathExpression) { - value = jsonpath.value(this.toJSON(), DialogContextState.resolvePath(pathExpression)); - } - - return value !== undefined ? value : defaultValue; - } - - /** - * Assigns a value to an in-memory property using a given JSONPath expression. - * @param pathExpression JSONPath expression to evaluate. The leading `$.` is optional. - * @param value Value to assign. - */ - public setValue(pathExpression: string, value?: any): void { - jsonpath.value(this.toJSON(), DialogContextState.resolvePath(pathExpression), value); - } - - static queryMemory(memory: object, pathExpression: string, count?: number): any[] { - return jsonpath.query(memory, DialogContextState.resolvePath(pathExpression), count); - } - - static resolvePath(pathExpression: string): string { - - // Check for JSONPath selector - if (pathExpression.indexOf('$.') == 0) { - return pathExpression; - } else { - // Check for shortcuts - if (pathExpression[0] == '$') { - return '$.dialog.result.' + pathExpression.substr(1); - } else if (pathExpression[0] == '@') { - return '$.turn.recognized.entities.' + pathExpression.substr(1); - } else if (pathExpression[0] == '#') { - return '$.turn.recognized.intents.' + pathExpression.substr(1); - } - - // Add JSONPath selector prefix - return '$.' + pathExpression; - } - } -} - -const TURN_STATE = Symbol('turn_state'); \ No newline at end of file diff --git a/libraries/botbuilder-dialogs/src/dialogSet.ts b/libraries/botbuilder-dialogs/src/dialogSet.ts index 39b5d44593..65ecb69176 100644 --- a/libraries/botbuilder-dialogs/src/dialogSet.ts +++ b/libraries/botbuilder-dialogs/src/dialogSet.ts @@ -9,10 +9,6 @@ import { BotTelemetryClient, StatePropertyAccessor, TurnContext } from 'botbuild import { Dialog } from './dialog'; import { DialogContext, DialogState } from './dialogContext'; -export interface DialogDependencies { - getDependencies(): Dialog[]; -} - export interface DialogDependencies { /** * Returns a dialogs child dialog dependencies so they can be added to a containers dialog set. diff --git a/libraries/botbuilder-dialogs/src/index.ts b/libraries/botbuilder-dialogs/src/index.ts index cbb5243dec..ea1c3fd8bb 100644 --- a/libraries/botbuilder-dialogs/src/index.ts +++ b/libraries/botbuilder-dialogs/src/index.ts @@ -14,10 +14,8 @@ export * from './dialog'; export * from './dialogCommand'; export * from './dialogContainer'; export * from './dialogContext'; -export * from './dialogContextState'; -export * from './dialogManager'; export * from './dialogEvents'; +export * from './dialogManager'; export * from './dialogSet'; -export * from './stateMap'; export * from './waterfallDialog'; export * from './waterfallStepContext'; diff --git a/libraries/botbuilder-dialogs/src/memory/dialogStateManager.ts b/libraries/botbuilder-dialogs/src/memory/dialogStateManager.ts index 420382ca2a..fabf5db177 100644 --- a/libraries/botbuilder-dialogs/src/memory/dialogStateManager.ts +++ b/libraries/botbuilder-dialogs/src/memory/dialogStateManager.ts @@ -6,7 +6,7 @@ * Licensed under the MIT License. */ import { PathResolver, DollarPathResolver, HashPathResolver, AtAtPathResolver, AtPathResolver, PercentPathResolver } from './pathResolvers'; -import { MemoryScope, ScopePath, SettingsMemoryScope, DialogMemoryScope, ClassMemoryScope, ThisMemoryScope } from './scopes'; +import { MemoryScope, SettingsMemoryScope, DialogMemoryScope, ClassMemoryScope, ThisMemoryScope } from './scopes'; import { DialogContext } from '../dialogContext'; import { ConversationState, UserState } from 'botbuilder-core'; import { ConversationMemoryScope } from './scopes/conversationMemoryScope'; @@ -63,7 +63,7 @@ export class DialogStateManager { public set configuration(value: DialogStateManagerConfiguration) { if (this.dialogContext.parent) { - this.dialogContext.parent.state.configuration = value; + throw new Error(`DialogStateManager.configuration: configuration should only be assigned to root dialog context.`); } else { this._config = value; } diff --git a/libraries/botbuilder-dialogs/src/prompts/choicePrompt.ts b/libraries/botbuilder-dialogs/src/prompts/choicePrompt.ts index 00157ceacd..d1f1821d0c 100644 --- a/libraries/botbuilder-dialogs/src/prompts/choicePrompt.ts +++ b/libraries/botbuilder-dialogs/src/prompts/choicePrompt.ts @@ -83,17 +83,14 @@ export class ChoicePrompt extends Prompt { protected async onPrompt(context: TurnContext, state: any, options: PromptOptions, isRetry: boolean): Promise { // Determine locale - let locale: string = PromptCultureModels.mapToNearestLanguage(context.activity.locale || this.defaultLocale); - if (!locale || !this.choiceDefaults.hasOwnProperty(locale)) { - locale = 'en-us'; - } + const locale = this.determineCulture(context.activity); // Format prompt to send let prompt: Partial; const choices: any[] = (this.style === ListStyle.suggestedAction ? ChoiceFactory.toChoices(options.choices) : options.choices) || []; const channelId: string = context.activity.channelId; const choiceOptions: ChoiceFactoryOptions = this.choiceOptions || this.choiceDefaults[locale]; - const choiceStyle: ListStyle = options.style || this.style; + const choiceStyle: ListStyle = options.style === 0 ? 0 : options.style || this.style; if (isRetry && options.retryPrompt) { prompt = this.appendChoices(options.retryPrompt, channelId, choices, choiceStyle, choiceOptions); } else { @@ -111,7 +108,7 @@ export class ChoicePrompt extends Prompt { const utterance: string = activity.text; const choices: any[] = (this.style === ListStyle.suggestedAction ? ChoiceFactory.toChoices(options.choices) : options.choices)|| []; const opt: FindChoicesOptions = this.recognizerOptions || {}; - opt.locale = activity.locale || opt.locale || this.defaultLocale || 'en-us'; + opt.locale = this.determineCulture(activity, opt); const results: any[] = recognizeChoices(utterance, choices, opt); if (Array.isArray(results) && results.length > 0) { result.succeeded = true; @@ -120,4 +117,15 @@ export class ChoicePrompt extends Prompt { return result; } + + private determineCulture(activity: Activity, opt: FindChoicesOptions = null): string { + const optLocale = opt && opt.locale ? opt.locale : null; + let culture = PromptCultureModels.mapToNearestLanguage(activity.locale || optLocale || this.defaultLocale || PromptCultureModels.English.locale); + if (!culture || !this.choiceDefaults[culture]) + { + culture = PromptCultureModels.English.locale; + } + + return culture; + } } diff --git a/libraries/botbuilder-dialogs/src/prompts/oauthPrompt.ts b/libraries/botbuilder-dialogs/src/prompts/oauthPrompt.ts index 5bea388c69..9bcb87016a 100644 --- a/libraries/botbuilder-dialogs/src/prompts/oauthPrompt.ts +++ b/libraries/botbuilder-dialogs/src/prompts/oauthPrompt.ts @@ -5,7 +5,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ -import { Activity, ActivityTypes, Attachment, CardFactory, InputHints, MessageFactory, OAuthLoginTimeoutKey, TokenResponse, TurnContext, IUserTokenProvider } from 'botbuilder-core'; +import { Activity, ActivityTypes, Attachment, CardFactory, InputHints, MessageFactory, OAuthLoginTimeoutKey, TokenResponse, TurnContext, IUserTokenProvider, } from 'botbuilder-core'; import { Dialog, DialogTurnResult } from '../dialog'; import { DialogContext } from '../dialogContext'; import { PromptOptions, PromptRecognizerResult, PromptValidator } from './prompt'; diff --git a/libraries/botbuilder-dialogs/src/prompts/promptCultureModels.ts b/libraries/botbuilder-dialogs/src/prompts/promptCultureModels.ts index df1f29cc21..abe694d296 100644 --- a/libraries/botbuilder-dialogs/src/prompts/promptCultureModels.ts +++ b/libraries/botbuilder-dialogs/src/prompts/promptCultureModels.ts @@ -115,12 +115,35 @@ export class PromptCultureModels { noInLanguage: 'No', } + private static getSupportedCultureCodes(): string[] { + return this.getSupportedCultures().map((c): string => c.locale); + } + /** * Use Recognizers-Text to normalize various potential Locale strings to a standard. + * @remarks This is mostly a copy/paste from https://github.com/microsoft/Recognizers-Text/blob/master/JavaScript/packages/recognizers-text/src/culture.ts#L39 + * This doesn't directly use Recognizers-Text's MapToNearestLanguage because if they add language support before we do, it will break our prompts. * @param cultureCode Represents locale. Examples: "en-US, en-us, EN". * @returns Normalized locale. */ - public static mapToNearestLanguage = (cultureCode: string): string => Culture.mapToNearestLanguage(cultureCode); + public static mapToNearestLanguage(cultureCode: string): string { + if (cultureCode !== undefined) { + cultureCode = cultureCode.toLowerCase(); + let supportedCultureCodes = this.getSupportedCultureCodes(); + + if (supportedCultureCodes.indexOf(cultureCode) < 0) { + let culturePrefix = cultureCode.split('-')[0].trim(); + + supportedCultureCodes.forEach(function(supportedCultureCode): void { + if (supportedCultureCode.startsWith(culturePrefix)) { + cultureCode = supportedCultureCode; + } + }); + } + } + + return cultureCode; + } public static getSupportedCultures = (): PromptCultureModel[] => [ diff --git a/libraries/botbuilder-dialogs/src/stateMap.ts b/libraries/botbuilder-dialogs/src/stateMap.ts deleted file mode 100644 index 67fc4e92a1..0000000000 --- a/libraries/botbuilder-dialogs/src/stateMap.ts +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @module botbuilder-dialogs - */ -/** - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ - -export class StateMap { - public readonly memory: object; - - constructor(memory: object) { - this.memory = memory; - } - - public clear(): void { - for (const key in this.memory) { - if (this.memory.hasOwnProperty(key)) { - delete this.memory[key]; - } - } - } - - public delete(name: string): boolean { - if (this.memory.hasOwnProperty(name)) { - // Delete from memory - delete this.memory[name]; - return true; - } - - return false; - } - - public get(name: string): T|undefined { - return this.memory[name]; - } - - public has(name: string): boolean { - return this.memory.hasOwnProperty(name); - } - - public set(name: string, value: any): this { - // Save new value to memory - this.memory[name] = value; - - return this; - } -} diff --git a/libraries/botbuilder-dialogs/src/waterfallDialog.ts b/libraries/botbuilder-dialogs/src/waterfallDialog.ts index e1ba7c6c58..9e5f82ae0b 100644 --- a/libraries/botbuilder-dialogs/src/waterfallDialog.ts +++ b/libraries/botbuilder-dialogs/src/waterfallDialog.ts @@ -140,12 +140,10 @@ export class WaterfallDialog extends Dialog { instanceId: generate_guid() }; - this.telemetryClient.trackEvent({ - name: 'WaterfallStart', properties: { - 'DialogId': this.id, - 'InstanceId': state.values['instanceId'] - } - }); + this.telemetryClient.trackEvent({name: 'WaterfallStart', properties: { + 'DialogId': this.id, + 'InstanceId': state.values['instanceId'] + }}); // Run the first step return await this.runStep(dc, 0, DialogReason.beginCalled); @@ -190,13 +188,13 @@ export class WaterfallDialog extends Dialog { const state: WaterfallDialogState = step.activeDialog.state as WaterfallDialogState; - var properties = - { + var properties = + { 'DialogId': this.id, 'InstanceId': state.values['instanceId'], 'StepName': stepName, }; - this.telemetryClient.trackEvent({ name: 'WaterfallStep', properties: properties }); + this.telemetryClient.trackEvent({name: 'WaterfallStep', properties: properties}); return await this.steps[step.index](step); } @@ -217,7 +215,7 @@ export class WaterfallDialog extends Dialog { values: state.values, onNext: async (stepResult?: any): Promise> => { if (nextCalled) { - throw new Error(`WaterfallStepContext.next(): method already called for dialog and step '${this.id}[${index}]'.`); + throw new Error(`WaterfallStepContext.next(): method already called for dialog and step '${ this.id }[${ index }]'.`); } nextCalled = true; return await this.resumeDialog(dc, DialogReason.nextCalled, stepResult); @@ -244,22 +242,18 @@ export class WaterfallDialog extends Dialog { const state: WaterfallDialogState = instance.state as WaterfallDialogState; const instanceId = state.values['instanceId']; if (reason === DialogReason.endCalled) { - this.telemetryClient.trackEvent({ - name: 'WaterfallComplete', properties: { - 'DialogId': this.id, - 'InstanceId': instanceId, - } - }); + this.telemetryClient.trackEvent({name: 'WaterfallComplete', properties: { + 'DialogId': this.id, + 'InstanceId': instanceId, + }}); } else if (reason === DialogReason.cancelCalled) { var index = instance.state[state.stepIndex]; var stepName = this.waterfallStepName(index); - this.telemetryClient.trackEvent({ - name: 'WaterfallCancel', properties: { - 'DialogId': this.id, - 'StepName': stepName, - 'InstanceId': instanceId, - } - }); + this.telemetryClient.trackEvent({name: 'WaterfallCancel', properties: { + 'DialogId': this.id, + 'StepName': stepName, + 'InstanceId': instanceId, + }}); } } @@ -302,5 +296,5 @@ function generate_guid() { .substring(1); } return s4() + s4() + '-' + s4() + '-' + s4() + '-' + - s4() + '-' + s4() + s4() + s4(); + s4() + '-' + s4() + s4() + s4(); } \ No newline at end of file diff --git a/libraries/botbuilder-dialogs/tests/choicePrompt.test.js b/libraries/botbuilder-dialogs/tests/choicePrompt.test.js index a37ff25fd8..a561d54e9a 100644 --- a/libraries/botbuilder-dialogs/tests/choicePrompt.test.js +++ b/libraries/botbuilder-dialogs/tests/choicePrompt.test.js @@ -1,5 +1,6 @@ const { ActivityTypes, CardFactory, ConversationState, MemoryStorage, TestAdapter } = require('botbuilder-core'); const { ChoicePrompt, ChoiceFactory, DialogSet, ListStyle, DialogTurnStatus } = require('../'); +const { PromptCultureModels } = require('../'); const assert = require('assert'); const answerMessage = { text: `red`, type: 'message' }; @@ -136,6 +137,39 @@ describe('ChoicePrompt', function () { .assertReply('red'); }); + it('should appropriately apply ListStyle.none when set via PromptOptions', async function () { + const adapter = new TestAdapter(async (turnContext) => { + const dc = await dialogs.createContext(turnContext); + + const results = await dc.continueDialog(); + if (results.status === DialogTurnStatus.empty) { + await dc.prompt('prompt', { + prompt: 'Please choose a color.', + choices: stringChoices, + style: ListStyle.none + }); + } else if (results.status === DialogTurnStatus.complete) { + const selectedChoice = results.result; + await turnContext.sendActivity(selectedChoice.value); + } + await convoState.saveChanges(turnContext); + }); + // Create new ConversationState with MemoryStorage and register the state as middleware. + const convoState = new ConversationState(new MemoryStorage()); + + // Create a DialogState property, DialogSet and ChoicePrompt. + const dialogState = convoState.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + const choicePrompt = new ChoicePrompt('prompt'); + + dialogs.add(choicePrompt); + + await adapter.send('Hello') + .assertReply('Please choose a color.') + .send(answerMessage) + .assertReply('red'); + }); + it('should send custom retryPrompt.', async function () { const adapter = new TestAdapter(async (turnContext) => { const dc = await dialogs.createContext(turnContext); @@ -385,6 +419,50 @@ describe('ChoicePrompt', function () { })); }); + it('should default to english locale', async function () { + const locales = [ + null, + '', + 'not-supported' + ]; + await Promise.all(locales.map(async (testLocale) => { + const adapter = new TestAdapter(async (turnContext) => { + const dc = await dialogs.createContext(turnContext); + + const results = await dc.continueDialog(); + if (results.status === DialogTurnStatus.empty) { + await dc.prompt('prompt', { prompt: 'Please choose a color.', choices: stringChoices }); + } else if (results.status === DialogTurnStatus.complete) { + const selectedChoice = results.result; + await turnContext.sendActivity(selectedChoice.value); + } + await convoState.saveChanges(turnContext); + }); + const convoState = new ConversationState(new MemoryStorage()); + + const dialogState = convoState.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + const choicePrompt = new ChoicePrompt('prompt', async (prompt) => { + assert(prompt); + if (!prompt.recognized.succeeded) { + await prompt.context.sendActivity('bad input.'); + } + return prompt.recognized.succeeded; + }, null); + dialogs.add(choicePrompt); + + await adapter.send({ text: 'Hello', type: ActivityTypes.Message, locale: testLocale }) + .assertReply((activity) => { + const expectedChoices = ChoiceFactory.inline(stringChoices, null, null, { + inlineOr: PromptCultureModels.English.inlineOr, + inlineOrMore: PromptCultureModels.English.inlineOrMore, + inlineSeparator: PromptCultureModels.English.separator, + }).text; + assert.strictEqual(activity.text, `Please choose a color.${ expectedChoices }`); + }); + })); + }); + it('should accept and recognize custom locale dict', async function() { const adapter = new TestAdapter(async (turnContext) => { const dc = await dialogs.createContext(turnContext); diff --git a/libraries/botbuilder-dialogs/tests/confirmPrompt.test.js b/libraries/botbuilder-dialogs/tests/confirmPrompt.test.js index 7b54ed3952..a24efe0b3d 100644 --- a/libraries/botbuilder-dialogs/tests/confirmPrompt.test.js +++ b/libraries/botbuilder-dialogs/tests/confirmPrompt.test.js @@ -521,6 +521,41 @@ describe('ConfirmPrompt', function () { .assertReply(`The result found is 'true'.`); }); + it('should recogize valid number and default to en if locale is null.', async function () { + const adapter = new TestAdapter(async (turnContext) => { + + turnContext.activity.locale = null; + + const dc = await dialogs.createContext(turnContext); + + const results = await dc.continueDialog(); + if (results.status === DialogTurnStatus.empty) { + await dc.prompt('prompt', { + prompt: { text: 'Please confirm.', type: ActivityTypes.Message }, + retryPrompt: { text: 'Please confirm, say "yes" or "no" or something like that.', type: ActivityTypes.Message } + }); + } else if (results.status === DialogTurnStatus.complete) { + await turnContext.sendActivity(`The result found is '${ results.result }'.`); + } + await convoState.saveChanges(turnContext); + }); + + const convoState = new ConversationState(new MemoryStorage()); + + const dialogState = convoState.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + const prompt = new ConfirmPrompt('prompt'); + prompt.choiceOptions = { includeNumbers: true }; + dialogs.add(prompt); + + await adapter.send('Hello') + .assertReply('Please confirm. (1) Yes or (2) No') + .send('lala') + .assertReply('Please confirm, say "yes" or "no" or something like that. (1) Yes or (2) No') + .send('1') + .assertReply(`The result found is 'true'.`); + }); + it('should recogize valid number and default to en if locale invalid string.', async function () { const adapter = new TestAdapter(async (turnContext) => { diff --git a/libraries/botbuilder-dialogs/tests/memory_dialogStateManager.test.js b/libraries/botbuilder-dialogs/tests/memory_dialogStateManager.test.js index a1ce2193f0..acaadad8ef 100644 --- a/libraries/botbuilder-dialogs/tests/memory_dialogStateManager.test.js +++ b/libraries/botbuilder-dialogs/tests/memory_dialogStateManager.test.js @@ -174,7 +174,7 @@ describe('Memory - Dialog State Manager', function() { assert(userScopeFound, `no user scope added`); }); - it('Should configure its parent when a child DC is configured.', async function () { + it('Should raise an error when a child DC is configured.', async function () { // Create test dc const storage = new MemoryStorage(); const convoState = new ConversationState(storage); @@ -182,16 +182,13 @@ describe('Memory - Dialog State Manager', function() { const dc = await createTestDc(convoState); // Run test - let convoScopeFound = false; - let userScopeFound = false; - dc.child.state.configuration = DialogStateManager.createStandardConfiguration(convoState, userState); - const config = dc.state.configuration; - config.memoryScopes.forEach(scope => { - if (scope instanceof ConversationMemoryScope) { convoScopeFound = true } - if (scope instanceof UserMemoryScope) { userScopeFound = true } - }); - assert(convoScopeFound, `no conversation scope added`); - assert(userScopeFound, `no user scope added`); + let error = false; + try { + dc.child.state.configuration = DialogStateManager.createStandardConfiguration(convoState, userState); + } catch (err) { + error = true; + } + assert(error); }); it('Should read & write values to TURN memory scope.', async function () { diff --git a/libraries/botbuilder-lg/README.MD b/libraries/botbuilder-lg/README.MD index cd42d9e5e8..61dfc0829d 100644 --- a/libraries/botbuilder-lg/README.MD +++ b/libraries/botbuilder-lg/README.MD @@ -1,7 +1,5 @@ # Language Generation ***_[PREVIEW]_*** -> See [here](#Change-Log) for what's new in 4.6 PREVIEW release. - Learning from our customers experiences and bringing together capabilities first implemented by Cortana and Cognition teams, we are introducing Language Generation; which allows the developer to extract the embedded strings from their code and resource files and manage them through a Language Generation runtime and file format. Language Generation enable customers to define multiple variations on a phrase, execute simple expressions based on context, refer to conversational memory, and over time will enable us to bring additional capabilities all leading to a more natural conversational experience. At the core of language generation lies template expansion and entity substitution. You can provide one-of variation for expansion as well as conditionally expand a template. The output from language generation can be a simple text string or multi-line response or a complex object payload that a layer above language generation will use to construct a full blown [activity][1]. @@ -96,18 +94,6 @@ For NodeJS, add botbuilder-lg Load the template manager with your .lg file(s) -For C# - -```c# - // multi lg files - TemplateEngine lgEngine = new TemplateEngine().AddFiles(filePaths, importResolver?); - - // single lg file - TemplateEngine lgEngine = new TemplateEngine().AddFile(filePath, importResolver?); -``` - -For NodeJS - ```typescript // multi lg files let lgEngine = new TemplateEngine.addFiles(filePaths, importResolver?); @@ -118,30 +104,13 @@ For NodeJS When you need template expansion, call the templateEngine and pass in the relevant template name -For C# - -```c# - await turnContext.SendActivityAsync(lgEngine.EvaluateTemplate("", entitiesCollection)); -``` - -For NodeJS - ```typescript await turnContext.sendActivity(lgEngine.evaluateTemplate("", entitiesCollection)); ``` If your template needs specific entity values to be passed for resolution/ expansion, you can pass them in on the call to `evaluateTemplate` -For C# - -```c# - await turnContext.SendActivityAsync(lgEngine.EvaluateTemplate("WordGameReply", new { GameName = "MarcoPolo" } )); - -``` - -For NodeJS - -```node +```typescript await turnContext.sendActivity(lgEngine.evaluateTemplate("WordGameReply", { GameName = "MarcoPolo" } )); ``` @@ -152,37 +121,15 @@ Quite often your bot might target more than one spoken/ display language. To hel The current library does not include any capabilities for grammar check or correction. -## Packages - -Packages for C# are available under the [BotBuilder MyGet feed][12] - -## Change Log -### 4.6 PREVIEW -- \[**NEW**\] [VS code extension][22] for LG (syntax highlighting, auto-suggest (including expressions, pre-built functions, template names etc), validation) -- LG file format: - - Support for [Switch..Case..Default][20] - - Support for [import reference][21] to another .lg file. -- [API changes][2]: - - Dropped FromFile and FromText methods in favor of AddFile and AddFiles. - - Added ability to provide a delegate to externally resolve import references found in content. -- \[**NEW**\] Translate functionality in [MSLG CLI][23] - -### 4.5 PREVIEW -- Initial preview release [1]:https://github.com/Microsoft/BotBuilder/blob/master/specs/botframework-activity/botframework-activity.md -[2]:./docs/api-reference.md -[3]:./docs/lg-file-format.md +[2]:https://github.com/microsoft/BotBuilder-Samples/blob/master/experimental/language-generation/docs/api-reference.md +[3]:https://github.com/microsoft/BotBuilder-Samples/blob/master/experimental/language-generation/docs/lg-file-format.md [6]:https://github.com/Microsoft/botbuilder-tools/tree/master/packages/Chatdown [7]:https://github.com/Microsoft/botbuilder-tools/tree/master/packages/Chatdown#chat-file-format [8]:https://github.com/Microsoft/botbuilder-tools/blob/master/packages/Chatdown/Examples/CardExamples.chat [9]:https://github.com/Microsoft/botbuilder-tools/tree/master/packages/Chatdown#message-commands [10]:https://github.com/Microsoft/botbuilder-tools/tree/master/packages/Chatdown#message-cards [11]:https://github.com/Microsoft/botbuilder-tools/tree/master/packages/Chatdown#message-attachments -[12]:https://botbuilder.myget.org/feed/botbuilder-declarative/package/nuget/Microsoft.Bot.Builder.LanguageGeneration -[20]:./docs/lg-file-format.md#Switch..Case -[21]:./docs/lg-file-format.md#Importing-external-references -[22]:https://aka.ms/lg-vscode-extension -[23]:https://github.com/microsoft/botbuilder-tools/tree/V.Future/packages/MSLG [25]:https://github.com/microsoft/botbuilder-dotnet/blob/d953d1b7fe548cdb1800f1c2e85fe35c34edf75c/tests/Microsoft.Bot.Builder.LanguageGeneration.Renderer.Tests/LGGeneratorTests.cs#L78 diff --git a/libraries/botbuilder-lg/package.json b/libraries/botbuilder-lg/package.json index 3d2d459715..a523a06b08 100644 --- a/libraries/botbuilder-lg/package.json +++ b/libraries/botbuilder-lg/package.json @@ -1,13 +1,17 @@ { "name": "botbuilder-lg", - "description": "Typescript version of Microsoft.Expression from C# version (https://github.com/Microsoft/botbuilder-dotnet/tree/ComposableDialog/libraries/Microsoft.CommonExpressions) ", - "version": "4.5.0", + "author": "Microsoft Corp.", + "description": "Bot Builder Language Generation is a library to help build sophisticated bot responses with multiple phrases and context-based expressions.", + "version": "4.1.6", "license": "MIT", "keywords": [ "botbuilder", "botframework", - "expression" + "language generation" ], + "bugs": { + "url": "https://github.com/Microsoft/botbuilder-js/issues" + }, "repository": { "type": "git", "url": "https://github.com/Microsoft/botbuilder-js.git" @@ -16,7 +20,7 @@ "typings": "./lib/index.d.ts", "dependencies": { "antlr4ts": "0.5.0-alpha.1", - "botframework-expressions": "4.5.0", + "botframework-expressions": "4.1.6", "lodash": "^4.17.11", "uuid": "^3.3.3" }, @@ -24,13 +28,14 @@ "@types/mocha": "^5.2.5", "@types/node": "^10.12.18", "nyc": "^11.4.1", - "ts-node": "^4.1.0", - "typescript-tslint-plugin": "^0.3.1" + "ts-node": "^4.1.0" }, "scripts": { - "build": "tsc", "test": "tsc && nyc mocha tests/ --timeout 60000", - "clean": "erase /q /s .\\lib" + "build": "tsc", + "build-docs": "typedoc --theme markdown --entryPoint botbuilder-lg --excludePrivate --includeDeclarations --ignoreCompilerErrors --module amd --out ..\\..\\doc\\botbuilder-lg .\\lib\\index.d.ts --hideGenerator --name \"Bot Builder SDK - LG\" --readme none", + "clean": "erase /q /s .\\lib", + "set-version": "npm version --allow-same-version ${Version}" }, "files": [ "/lib", diff --git a/libraries/botbuilder-lg/src/analyzer.ts b/libraries/botbuilder-lg/src/analyzer.ts index 0d1d6255b0..85d2f97477 100644 --- a/libraries/botbuilder-lg/src/analyzer.ts +++ b/libraries/botbuilder-lg/src/analyzer.ts @@ -1,21 +1,22 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ // tslint:disable-next-line: no-submodule-imports -import { AbstractParseTreeVisitor, ParseTree, TerminalNode } from 'antlr4ts/tree'; -import { Constant, Expression, ExpressionEngine, Extensions, IExpressionParser } from 'botframework-expressions'; -import { flatten, keyBy } from 'lodash'; +import { AbstractParseTreeVisitor, TerminalNode } from 'antlr4ts/tree'; +import { Expression, ExpressionEngine, ExpressionParserInterface, Extensions } from 'botframework-expressions'; +import { keyBy } from 'lodash'; import { EvaluationTarget } from './evaluationTarget'; import { Evaluator } from './evaluator'; import * as lp from './generated/LGFileParser'; import { LGFileParserVisitor } from './generated/LGFileParserVisitor'; import { LGTemplate } from './lgTemplate'; +// tslint:disable-next-line: completed-docs export class AnalyzerResult { public Variables: string[]; public TemplateReferences: string[]; @@ -38,32 +39,32 @@ export class AnalyzerResult { * Analyzer engine. To analyse which variable may be used */ export class Analyzer extends AbstractParseTreeVisitor implements LGFileParserVisitor { - public readonly Templates: LGTemplate[]; - public readonly TemplateMap: {[name: string]: LGTemplate}; + public readonly templates: LGTemplate[]; + public readonly templateMap: {[name: string]: LGTemplate}; private readonly evalutationTargetStack: EvaluationTarget[] = []; - private readonly _expressionParser: IExpressionParser; - private readonly escapeSeperatorRegex : RegExp = new RegExp(/\|(?!\\)/g); + private readonly _expressionParser: ExpressionParserInterface; + private readonly escapeSeperatorRegex: RegExp = new RegExp(/\|(?!\\)/g); private readonly expressionRecognizeRegex: RegExp = new RegExp(/\}(?!\\).+?\{(?!\\)@?/g); - constructor(templates: LGTemplate[], expressionEngine: ExpressionEngine) { + public constructor(templates: LGTemplate[], expressionEngine: ExpressionEngine) { super(); - this.Templates = templates; - this.TemplateMap = keyBy(templates, (t: LGTemplate) => t.Name); + this.templates = templates; + this.templateMap = keyBy(templates, (t: LGTemplate): string => t.name); // create an evaluator to leverage it's customized function look up for checking - const evaluator: Evaluator = new Evaluator(this.Templates, expressionEngine); - this._expressionParser = evaluator.ExpressionEngine; + const evaluator: Evaluator = new Evaluator(this.templates, expressionEngine); + this._expressionParser = evaluator.expressionEngine; } - public AnalyzeTemplate(templateName: string): AnalyzerResult { - if (!(templateName in this.TemplateMap)) { - throw new Error(`No such template: ${templateName}`); + public analyzeTemplate(templateName: string): AnalyzerResult { + if (!(templateName in this.templateMap)) { + throw new Error(`No such template: ${ templateName }`); } - if (this.evalutationTargetStack.find((u: EvaluationTarget) => u.TemplateName === templateName) !== undefined) { - throw new Error(`Loop deteced: ${this.evalutationTargetStack.reverse() - .map((u: EvaluationTarget) => u.TemplateName) - .join(' => ')}`); + if (this.evalutationTargetStack.find((u: EvaluationTarget): boolean => u.templateName === templateName) !== undefined) { + throw new Error(`Loop deteced: ${ this.evalutationTargetStack.reverse() + .map((u: EvaluationTarget): string => u.templateName) + .join(' => ') }`); } // Using a stack to track the evalution trace @@ -73,7 +74,7 @@ export class Analyzer extends AbstractParseTreeVisitor implement // because given we don't track down for templates have parameters // the only scenario that we are still analyzing an parameterized template is // this template is root template to anaylze, in this we also don't have exclude parameters - const dependencies: AnalyzerResult = this.visit(this.TemplateMap[templateName].ParseTree); + const dependencies: AnalyzerResult = this.visit(this.templateMap[templateName].parseTree); this.evalutationTargetStack.pop(); return dependencies; @@ -81,7 +82,7 @@ export class Analyzer extends AbstractParseTreeVisitor implement public visitTemplateDefinition(ctx: lp.TemplateDefinitionContext): AnalyzerResult { const templateNameContext: lp.TemplateNameLineContext = ctx.templateNameLine(); - if (templateNameContext.templateName().text === this.currentTarget().TemplateName) { + if (templateNameContext.templateName().text === this.currentTarget().templateName) { if (ctx.templateBody() !== undefined) { return this.visit(ctx.templateBody()); } @@ -94,7 +95,7 @@ export class Analyzer extends AbstractParseTreeVisitor implement return this.visit(ctx.normalTemplateBody()); } - public visitNormalTemplateBody(ctx: lp.NormalTemplateBodyContext) : AnalyzerResult { + public visitNormalTemplateBody(ctx: lp.NormalTemplateBodyContext): AnalyzerResult { const result: AnalyzerResult = new AnalyzerResult(); for (const templateStr of ctx.templateString()) { result.union(this.visit(templateStr.normalTemplateString())); @@ -119,17 +120,17 @@ export class Analyzer extends AbstractParseTreeVisitor implement const originValue: string = line.substr(start + 1).trim(); const valueArray: string[] = Evaluator.wrappedRegExSplit(originValue, this.escapeSeperatorRegex); if (valueArray.length === 1) { - result.union(this.AnalyzeText(originValue)); + result.union(this.analyzeText(originValue)); } else { const valueList: any[] = []; for (const item of valueArray) { - result.union(this.AnalyzeText(item.trim())); + result.union(this.analyzeText(item.trim())); } result[property] = valueList; } } else if (this.isPureExpression(line)) { - result.union(this.AnalyzeExpression(line)); + result.union(this.analyzeExpression(line)); } } @@ -143,7 +144,7 @@ export class Analyzer extends AbstractParseTreeVisitor implement for (const ifRule of ifRules) { const expressions: TerminalNode[] = ifRule.ifCondition().EXPRESSION(); if (expressions !== undefined && expressions.length > 0) { - result.union(this.AnalyzeExpression(expressions[0].text)); + result.union(this.analyzeExpression(expressions[0].text)); } if (ifRule.normalTemplateBody() !== undefined) { result.union(this.visit(ifRule.normalTemplateBody())); @@ -159,7 +160,7 @@ export class Analyzer extends AbstractParseTreeVisitor implement for (const iterNode of switchCaseNodes) { const expressions: TerminalNode[] = iterNode.switchCaseStat().EXPRESSION(); if (expressions.length > 0) { - result.union(this.AnalyzeExpression(expressions[0].text)); + result.union(this.analyzeExpression(expressions[0].text)); } if (iterNode.normalTemplateBody() !== undefined) { result.union(this.visit(iterNode.normalTemplateBody())); @@ -176,15 +177,15 @@ export class Analyzer extends AbstractParseTreeVisitor implement switch (innerNode.symbol.type) { case lp.LGFileParser.DASH: break; case lp.LGFileParser.EXPRESSION: { - result.union(this.AnalyzeExpression(innerNode.text)); + result.union(this.analyzeExpression(innerNode.text)); break; } case lp.LGFileParser.TEMPLATE_REF: { - result.union(this.AnalyzeTemplateRef(innerNode.text)); + result.union(this.analyzeTemplateRef(innerNode.text)); break; } case lp.LGFileParser.MULTI_LINE_TEXT: { - result.union(this.AnalyzeMultiLineText(innerNode.text)); + result.union(this.analyzeMultiLineText(innerNode.text)); break; } default: { @@ -200,79 +201,79 @@ export class Analyzer extends AbstractParseTreeVisitor implement return new AnalyzerResult(); } - private AnalyzeExpressionDirectly(exp: Expression): AnalyzerResult { + private analyzeExpressionDirectly(exp: Expression): AnalyzerResult { const result: AnalyzerResult = new AnalyzerResult(); - if (exp.Type in this.TemplateMap) { - const templateName: string = exp.Type; + if (exp.type in this.templateMap) { + const templateName: string = exp.type; result.union(new AnalyzerResult([], [templateName])); - if (this.TemplateMap[templateName].Parameters === undefined || this.TemplateMap[templateName].Parameters.length === 0) { - result.union(this.AnalyzeTemplate(templateName)); + if (this.templateMap[templateName].parameters === undefined || this.templateMap[templateName].parameters.length === 0) { + result.union(this.analyzeTemplate(templateName)); } else { // if template has params, just get the templateref without variables. - result.union(new AnalyzerResult([], this.AnalyzeTemplate(templateName).TemplateReferences)); + result.union(new AnalyzerResult([], this.analyzeTemplate(templateName).TemplateReferences)); } } - if (exp.Children !== undefined) { - exp.Children.forEach((e: Expression) => result.union(this.AnalyzeExpressionDirectly(e))); + if (exp.children !== undefined) { + exp.children.forEach((e: Expression): AnalyzerResult => result.union(this.analyzeExpressionDirectly(e))); } return result; } - private AnalyzeText(exp: string): AnalyzerResult { + private analyzeText(exp: string): AnalyzerResult { if (exp === undefined || exp.length === 0) { return new AnalyzerResult(); } if (this.isPureExpression(exp)) { - return this.AnalyzeExpression(exp); + return this.analyzeExpression(exp); } else { // unescape \| - return this.AnalyzeTextContainsExpression(exp); + return this.analyzeTextContainsExpression(exp); } } - private AnalyzeTextContainsExpression(exp: string): AnalyzerResult { + private analyzeTextContainsExpression(exp: string): AnalyzerResult { const result: AnalyzerResult = new AnalyzerResult(); const reversedExps: RegExpMatchArray = exp.split('').reverse().join('').match(this.expressionRecognizeRegex); - const expressionsRaw: string[] = reversedExps.map((e: string) => e.split('').reverse().join('')).reverse(); - const expressions: string[] = expressionsRaw.filter((e: string) => e.length > 0); - expressions.forEach((item: string) => result.union(this.AnalyzeExpression(item))); + const expressionsRaw: string[] = reversedExps.map((e: string): string => e.split('').reverse().join('')).reverse(); + const expressions: string[] = expressionsRaw.filter((e: string): boolean => e.length > 0); + expressions.forEach((item: string): AnalyzerResult => result.union(this.analyzeExpression(item))); return result; } - private AnalyzeExpression(exp: string): AnalyzerResult { + private analyzeExpression(exp: string): AnalyzerResult { const result: AnalyzerResult = new AnalyzerResult(); exp = exp.replace(/(^@*)/g, '') - .replace(/(^{*)/g, '') - .replace(/(}*$)/g, ''); + .replace(/(^{*)/g, '') + .replace(/(}*$)/g, ''); const parsed: Expression = this._expressionParser.parse(exp); - const references: ReadonlyArray = Extensions.References(parsed); + const references: readonly string[] = Extensions.references(parsed); result.union(new AnalyzerResult(references.slice(), [])); - result.union(this.AnalyzeExpressionDirectly(parsed)); + result.union(this.analyzeExpressionDirectly(parsed)); return result; } - private AnalyzeTemplateRef(exp: string): AnalyzerResult { + private analyzeTemplateRef(exp: string): AnalyzerResult { exp = exp.replace(/(^\[*)/g, '') - .replace(/(\]*$)/g, ''); + .replace(/(\]*$)/g, ''); exp = exp.indexOf('(') < 0 ? exp.concat('()') : exp; - return this.AnalyzeExpression(exp); + return this.analyzeExpression(exp); } - private AnalyzeMultiLineText(exp: string): AnalyzerResult { + private analyzeMultiLineText(exp: string): AnalyzerResult { const result: AnalyzerResult = new AnalyzerResult(); exp = exp.substr(3, exp.length - 6); - const matches: string[] = exp.split('').reverse().join('').match(this.expressionRecognizeRegex).map((e: string) => e.split('').reverse().join('')).reverse(); + const matches: string[] = exp.split('').reverse().join('').match(this.expressionRecognizeRegex).map((e: string): string => e.split('').reverse().join('')).reverse(); for (const match of matches) { - result.union(this.AnalyzeExpression(match)); + result.union(this.analyzeExpression(match)); } return result; @@ -296,4 +297,4 @@ export class Analyzer extends AbstractParseTreeVisitor implement return reversedExps[0].split('').reverse().join('') === exp; } } -} +} \ No newline at end of file diff --git a/libraries/botbuilder-lg/src/customizedMemoryScope.ts b/libraries/botbuilder-lg/src/customizedMemoryScope.ts index 4c1da6f44b..dd94720fbd 100644 --- a/libraries/botbuilder-lg/src/customizedMemoryScope.ts +++ b/libraries/botbuilder-lg/src/customizedMemoryScope.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -9,14 +9,14 @@ import { Extensions } from 'botframework-expressions'; /** - * This customzied memory scope is designed for allow sub template evaluation can refer - * to the orignial evaluation scope passed in by wrap the orignal one in globalScope field + * This customized memory scope is designed for allow sub template evaluation can refer + * to the original evaluation scope passed in by wrap the original one in globalScope field * and inherit that for each sub evaluation. */ export class CustomizedMemoryScope extends Map { public globalScope: any; private readonly localScope: any; - constructor(localScope: any, globalScope: any) { + public constructor(localScope: any, globalScope: any) { super(); this.localScope = localScope; this.globalScope = globalScope; @@ -25,12 +25,12 @@ export class CustomizedMemoryScope extends Map { public get(key: any): any { let value: any; let error: string; - ({ value, error } = Extensions.AccessProperty(this.localScope, key)); + ({ value, error } = Extensions.accessProperty(this.localScope, key)); if (value !== undefined && error === undefined) { return value; } - ({ value, error } = Extensions.AccessProperty(this.globalScope, key)); + ({ value, error } = Extensions.accessProperty(this.globalScope, key)); if (value !== undefined && error === undefined) { return value; } diff --git a/libraries/botbuilder-lg/src/diagnostic.ts b/libraries/botbuilder-lg/src/diagnostic.ts index 13dc782d28..9b5f3ef8ca 100644 --- a/libraries/botbuilder-lg/src/diagnostic.ts +++ b/libraries/botbuilder-lg/src/diagnostic.ts @@ -1,17 +1,17 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ - import { Range } from './range'; +import { Range } from './range'; /** * DiagnosticSeverity enum */ - export enum DiagnosticSeverity { +export enum DiagnosticSeverity { Error, Warning, Information, @@ -21,29 +21,29 @@ /** * Diagnostic class */ - export class Diagnostic { - public Code: string; - public Range: Range; - public Severity: DiagnosticSeverity; - public Source: string; - public Message: string; +export class Diagnostic { + public code: string; + public range: Range; + public severity: DiagnosticSeverity; + public source: string; + public message: string; - constructor( + public constructor( range: Range, message: string, severity: DiagnosticSeverity = DiagnosticSeverity.Error) { - this.Message = message; - this.Range = range; - this.Severity = severity; + this.message = message; + this.range = range; + this.severity = severity; } public toString(): string { // ignore error range if source is "inline" - if (this.Source === 'inline') { - return `[${DiagnosticSeverity[this.Severity]}] ${this.Message.toString()}`; + if (this.source === 'inline') { + return `[${ DiagnosticSeverity[this.severity] }] ${ this.message.toString() }`; } else { - return `[${DiagnosticSeverity[this.Severity]}] ${this.Range.toString()}: ${this.Message.toString()}`; + return `[${ DiagnosticSeverity[this.severity] }] ${ this.range.toString() }: ${ this.message.toString() }`; } } } diff --git a/libraries/botbuilder-lg/src/errorListener.ts b/libraries/botbuilder-lg/src/errorListener.ts index 64fa4afaba..738ded9f86 100644 --- a/libraries/botbuilder-lg/src/errorListener.ts +++ b/libraries/botbuilder-lg/src/errorListener.ts @@ -1,11 +1,11 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ -import { ANTLRErrorListener, RecognitionException, Recognizer, Token } from 'antlr4ts'; +import { ANTLRErrorListener, RecognitionException, Recognizer } from 'antlr4ts'; import { Diagnostic } from './diagnostic'; import { LGException } from './lgException'; import { Position } from './position'; @@ -25,16 +25,17 @@ export class ErrorListener implements ANTLRErrorListener { charPositionInLine: number, msg: string, e: RecognitionException | undefined): void { - const startPosition: Position = new Position(line, charPositionInLine); - // tslint:disable-next-line: max-line-length - const stopPosition: Position = new Position(line, charPositionInLine + offendingSymbol.stopIndex - offendingSymbol.startIndex + 1); - const range: Range = new Range(startPosition, stopPosition); - msg = `syntax error message: ${msg}`; - if (this.source !== undefined && this.source !== '') { - msg = `source: ${this.source}, ${msg}`; - } - const diagnostic: Diagnostic = new Diagnostic(range, msg); + const startPosition: Position = new Position(line, charPositionInLine); + // tslint:disable-next-line: max-line-length + // tslint:disable-next-line: restrict-plus-operands + const stopPosition: Position = new Position(line, charPositionInLine + offendingSymbol.stopIndex - offendingSymbol.startIndex + 1); + const range: Range = new Range(startPosition, stopPosition); + msg = `syntax error message: ${ msg }`; + if (this.source !== undefined && this.source !== '') { + msg = `source: ${ this.source }, ${ msg }`; + } + const diagnostic: Diagnostic = new Diagnostic(range, msg); - throw new LGException(diagnostic.toString(), [diagnostic]); + throw new LGException(diagnostic.toString(), [diagnostic]); } } diff --git a/libraries/botbuilder-lg/src/evaluationTarget.ts b/libraries/botbuilder-lg/src/evaluationTarget.ts index 550c367d3a..8d4248a14a 100644 --- a/libraries/botbuilder-lg/src/evaluationTarget.ts +++ b/libraries/botbuilder-lg/src/evaluationTarget.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -11,20 +11,20 @@ */ export class EvaluationTarget { - public TemplateName: string; - public Scope: any; - public EvaluatedChildren : Map; + public templateName: string; + public scope: any; + public evaluatedChildren: Map; public constructor(templateName: string, scope: any) { - this.TemplateName = templateName; - this.Scope = scope; - this.EvaluatedChildren = new Map(); + this.templateName = templateName; + this.scope = scope; + this.evaluatedChildren = new Map(); } - public GetId(): string { - if (this.Scope !== undefined && this.Scope !== null) { - return this.TemplateName + JSON.stringify(this.Scope); + public getId(): string { + if (this.scope !== undefined && this.scope !== null) { + return this.templateName + JSON.stringify(this.scope); } - return this.TemplateName; + return this.templateName; } } diff --git a/libraries/botbuilder-lg/src/evaluator.ts b/libraries/botbuilder-lg/src/evaluator.ts index 37896a36e8..beaf54847e 100644 --- a/libraries/botbuilder-lg/src/evaluator.ts +++ b/libraries/botbuilder-lg/src/evaluator.ts @@ -1,6 +1,6 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -21,55 +21,55 @@ import { LGTemplate } from './lgTemplate'; */ // tslint:disable-next-line: max-classes-per-file export class Evaluator extends AbstractParseTreeVisitor implements LGFileParserVisitor { - public readonly Templates: LGTemplate[]; - public readonly ExpressionEngine: ExpressionEngine; - public readonly TemplateMap: { [name: string]: LGTemplate }; + public readonly templates: LGTemplate[]; + public readonly expressionEngine: ExpressionEngine; + public readonly templateMap: { [name: string]: LGTemplate }; private readonly evalutationTargetStack: EvaluationTarget[] = []; private readonly expressionRecognizeRegex: RegExp = new RegExp(/\}(?!\\).+?\{(?!\\)@?/g); - private readonly escapeSeperatorRegex : RegExp = new RegExp(/\|(?!\\)/g); + private readonly escapeSeperatorRegex: RegExp = new RegExp(/\|(?!\\)/g); - constructor(templates: LGTemplate[], expressionEngine: ExpressionEngine) { + public constructor(templates: LGTemplate[], expressionEngine: ExpressionEngine) { super(); - this.Templates = templates; - this.TemplateMap = keyBy(templates, (t: LGTemplate) => t.Name); + this.templates = templates; + this.templateMap = keyBy(templates, (t: LGTemplate): string => t.name); // generate a new customzied expression engine by injecting the template as functions - this.ExpressionEngine = new ExpressionEngine(this.customizedEvaluatorLookup(expressionEngine.EvaluatorLookup)); + this.expressionEngine = new ExpressionEngine(this.customizedEvaluatorLookup(expressionEngine.EvaluatorLookup)); } - public static wrappedRegExSplit(inputString: string, regex : RegExp): string[] { - return inputString.split('').reverse().join('').split(regex).map((e: string) => e.split('').reverse().join('')).reverse(); + public static wrappedRegExSplit(inputString: string, regex: RegExp): string[] { + return inputString.split('').reverse().join('').split(regex).map((e: string): string => e.split('').reverse().join('')).reverse(); } - public EvaluateTemplate(templateName: string, scope: any): any { - if (!(templateName in this.TemplateMap)) { - throw new Error(`No such template: ${templateName}`); + public evaluateTemplate(templateName: string, scope: any): any { + if (!(templateName in this.templateMap)) { + throw new Error(`No such template: ${ templateName }`); } - if (this.evalutationTargetStack.find((u: EvaluationTarget) => u.TemplateName === templateName) !== undefined) { - throw new Error(`Loop deteced: ${this.evalutationTargetStack.reverse() - .map((u: EvaluationTarget) => u.TemplateName) - .join(' => ')}`); + if (this.evalutationTargetStack.find((u: EvaluationTarget): boolean => u.templateName === templateName) !== undefined) { + throw new Error(`Loop deteced: ${ this.evalutationTargetStack.reverse() + .map((u: EvaluationTarget): string => u.templateName) + .join(' => ') }`); } const templateTarget: EvaluationTarget = new EvaluationTarget(templateName, scope); - const currentEvulateId: string = templateTarget.GetId(); + const currentEvulateId: string = templateTarget.getId(); let previousEvaluateTarget: EvaluationTarget; if (this.evalutationTargetStack.length !== 0) { previousEvaluateTarget = this.evalutationTargetStack[this.evalutationTargetStack.length - 1]; - if (previousEvaluateTarget.EvaluatedChildren.has(currentEvulateId)) { - return previousEvaluateTarget.EvaluatedChildren.get(currentEvulateId); + if (previousEvaluateTarget.evaluatedChildren.has(currentEvulateId)) { + return previousEvaluateTarget.evaluatedChildren.get(currentEvulateId); } } // Using a stack to track the evalution trace this.evalutationTargetStack.push(templateTarget); - const result: string = this.visit(this.TemplateMap[templateName].ParseTree); + const result: string = this.visit(this.templateMap[templateName].parseTree); if (previousEvaluateTarget !== undefined) { - previousEvaluateTarget.EvaluatedChildren.set(currentEvulateId, result); + previousEvaluateTarget.evaluatedChildren.set(currentEvulateId, result); } this.evalutationTargetStack.pop(); @@ -132,7 +132,7 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa public visitTemplateDefinition(ctx: lp.TemplateDefinitionContext): any { const templateNameContext: lp.TemplateNameLineContext = ctx.templateNameLine(); - if (templateNameContext.templateName().text === this.currentTarget().TemplateName) { + if (templateNameContext.templateName().text === this.currentTarget().templateName) { return this.visit(ctx.templateBody()); } @@ -165,7 +165,7 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa public visitNormalTemplateString(ctx: lp.NormalTemplateStringContext): string { const result: any[] = []; for (const node of ctx.children) { - const innerNode: TerminalNode = node; + const innerNode: TerminalNode = node as TerminalNode; switch (innerNode.symbol.type) { case lp.LGFileParser.DASH: break; case lp.LGFileParser.ESCAPE_CHARACTER: @@ -194,7 +194,7 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa return result[0]; } - return result.map((u: any) => { + return result.map((u: any): string => { if (typeof u === 'string') { return u; } else { @@ -203,13 +203,13 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa }).join(''); } - public ConstructScope(templateName: string, args: any[]): any { - if (this.TemplateMap[templateName] === undefined) { - throw new Error(`No such template ${templateName}`); + public constructScope(templateName: string, args: any[]): any { + if (this.templateMap[templateName] === undefined) { + throw new Error(`No such template ${ templateName }`); } - const parameters: string[] = this.TemplateMap[templateName].Parameters; - const currentScope: any = this.currentTarget().Scope; + const parameters: string[] = this.templateMap[templateName].parameters; + const currentScope: any = this.currentTarget().scope; if (args.length === 0) { // no args to construct, inherit from current scope @@ -221,7 +221,7 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa } const newScope: any = {}; - parameters.map((e: string, i: number) => newScope[e] = args[i]); + parameters.map((e: string, i: number): void => newScope[e] = args[i]); if (currentScope instanceof CustomizedMemoryScope) { return new CustomizedMemoryScope(newScope, currentScope.globalScope); @@ -236,7 +236,7 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa const switchNode: lp.SwitchCaseRuleContext = switchcaseNodes[0]; const switchExprs: TerminalNode[] = switchNode.switchCaseStat().EXPRESSION(); const switchExprResult: string = this.evalExpression(switchExprs[0].text).toString(); - let idx: number = 0; + let idx = 0; for (const caseNode of switchcaseNodes) { if (idx === 0) { idx++; @@ -264,7 +264,7 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa } public wrappedEvalTextContainsExpression(exp: string, regex: RegExp): string { - return (exp.split('').reverse().join('').replace(regex, (sub: string) => this.evalExpression(sub.split('').reverse().join('')).toString().split('').reverse().join(''))).split('').reverse().join(''); + return (exp.split('').reverse().join('').replace(regex, (sub: string): any => this.evalExpression(sub.split('').reverse().join('')).toString().split('').reverse().join(''))).split('').reverse().join(''); } protected defaultResult(): string { @@ -313,7 +313,7 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa .replace(/(^{*)/g, '') .replace(/(}*$)/g, ''); - const { value: result, error }: { value: any; error: string } = this.evalByExpressionEngine(exp, this.currentTarget().Scope); + const { value: result, error }: { value: any; error: string } = this.evalByExpressionEngine(exp, this.currentTarget().scope); if (error !== undefined || result === undefined || typeof result === 'boolean' && !Boolean(result) @@ -332,12 +332,12 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa .replace(/(^{*)/g, '') .replace(/(}*$)/g, ''); - const { value: result, error }: { value: any; error: string } = this.evalByExpressionEngine(exp, this.currentTarget().Scope); + const { value: result, error }: { value: any; error: string } = this.evalByExpressionEngine(exp, this.currentTarget().scope); if (error !== undefined) { - throw new Error(`Error occurs when evaluating expression ${exp}: ${error}`); + throw new Error(`Error occurs when evaluating expression ${ exp }: ${ error }`); } if (result === undefined) { - throw new Error(`Error occurs when evaluating expression '${exp}': ${exp} is evaluated to null`); + throw new Error(`Error occurs when evaluating expression '${ exp }': ${ exp } is evaluated to null`); } return result; @@ -348,9 +348,9 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa .replace(/(\]*$)/g, ''); if (exp.indexOf('(') < 0) { - if (exp in this.TemplateMap) { + if (exp in this.templateMap) { exp = exp.concat('(') - .concat(this.TemplateMap[exp].Parameters.join()) + .concat(this.templateMap[exp].parameters.join()) .concat(')'); } else { exp = exp.concat('()'); @@ -367,7 +367,7 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa return this.evalTextContainsExpression(exp); } - private evalTextContainsExpression(exp: string) : string { + private evalTextContainsExpression(exp: string): string { return this.wrappedEvalTextContainsExpression(exp, this.expressionRecognizeRegex); } @@ -402,86 +402,86 @@ export class Evaluator extends AbstractParseTreeVisitor implements LGFilePa } private evalByExpressionEngine(exp: string, scope: any): { value: any; error: string } { - const parse: Expression = this.ExpressionEngine.parse(exp); + const parse: Expression = this.expressionEngine.parse(exp); return parse.tryEvaluate(scope); } // Genearte a new lookup function based on one lookup function private readonly customizedEvaluatorLookup = (baseLookup: EvaluatorLookup): any => (name: string): any => { - const prebuiltPrefix: string = 'prebuilt.'; + const prebuiltPrefix = 'prebuilt.'; if (name.startsWith(prebuiltPrefix)) { return baseLookup(name.substring(prebuiltPrefix.length)); } - if (this.TemplateMap[name] !== undefined) { + if (this.templateMap[name] !== undefined) { // tslint:disable-next-line: max-line-length - return new ExpressionEvaluator(name, BuiltInFunctions.Apply(this.templateEvaluator(name)), ReturnType.Object, this.validTemplateReference); + return new ExpressionEvaluator(name, BuiltInFunctions.apply(this.templateEvaluator(name)), ReturnType.Object, this.validTemplateReference); } - const lgTemplate: string = 'lgTemplate'; + const lgTemplate = 'lgTemplate'; if (name === lgTemplate) { - return new ExpressionEvaluator(lgTemplate, BuiltInFunctions.Apply(this.lgTemplate()), ReturnType.Object, this.validateLgTemplate); + return new ExpressionEvaluator(lgTemplate, BuiltInFunctions.apply(this.lgTemplate()), ReturnType.Object, this.validateLgTemplate); } return baseLookup(name); } - private readonly lgTemplate = (): any => (args: ReadonlyArray): any => { + private readonly lgTemplate = (): any => (args: readonly any[]): any => { const templateName: string = args[0]; - const newScope: any = this.ConstructScope(templateName, args.slice(1)); + const newScope: any = this.constructScope(templateName, args.slice(1)); - return this.EvaluateTemplate(templateName, newScope); + return this.evaluateTemplate(templateName, newScope); } private readonly validateLgTemplate = (expression: Expression): void => { - if (expression.Children.length === 0) { + if (expression.children.length === 0) { throw new Error(`No template name is provided when calling lgTemplate, expected: lgTemplate(templateName, ...args)`); } - const children0: Expression = expression.Children[0]; + const children0: Expression = expression.children[0]; // Validate return type - if (children0.ReturnType !== ReturnType.Object && children0.ReturnType !== ReturnType.String) { - throw new Error(`${children0} can't be used as a template name, must be a string value`); + if (children0.returnType !== ReturnType.Object && children0.returnType !== ReturnType.String) { + throw new Error(`${ children0 } can't be used as a template name, must be a string value`); } // Validate more if the name is string constant - if (children0.Type === ExpressionType.Constant) { - const templateName: string = (children0 as Constant).Value; - if (this.TemplateMap[templateName] === undefined) { - throw new Error(`No such template '${templateName}' to call in ${expression}`); + if (children0.type === ExpressionType.Constant) { + const templateName: string = (children0 as Constant).value; + if (this.templateMap[templateName] === undefined) { + throw new Error(`No such template '${ templateName }' to call in ${ expression }`); } - const expectedArgsCount: number = this.TemplateMap[templateName].Parameters.length; - const actualArgsCount: number = expression.Children.length - 1; + const expectedArgsCount: number = this.templateMap[templateName].parameters.length; + const actualArgsCount: number = expression.children.length - 1; if (expectedArgsCount !== actualArgsCount) { - throw new Error(`Arguments mismatch for template ${templateName}, expect ${expectedArgsCount} actual ${actualArgsCount}`); + throw new Error(`Arguments mismatch for template ${ templateName }, expect ${ expectedArgsCount } actual ${ actualArgsCount }`); } } } - private readonly templateEvaluator = (templateName: string): any => (args: ReadonlyArray): any => { - const newScope: any = this.ConstructScope(templateName, Array.from(args)); + private readonly templateEvaluator = (templateName: string): any => (args: readonly any[]): any => { + const newScope: any = this.constructScope(templateName, Array.from(args)); - return this.EvaluateTemplate(templateName, newScope); + return this.evaluateTemplate(templateName, newScope); } private readonly validTemplateReference = (expression: Expression): void => { - const templateName: string = expression.Type; + const templateName: string = expression.type; - if (this.TemplateMap[templateName] === undefined) { - throw new Error(`no such template '${templateName}' to call in ${expression}`); + if (this.templateMap[templateName] === undefined) { + throw new Error(`no such template '${ templateName }' to call in ${ expression }`); } - const expectedArgsCount: number = this.TemplateMap[templateName].Parameters.length; - const actualArgsCount: number = expression.Children.length; + const expectedArgsCount: number = this.templateMap[templateName].parameters.length; + const actualArgsCount: number = expression.children.length; if (expectedArgsCount !== actualArgsCount) { - throw new Error(`arguments mismatch for template ${templateName}, expect ${expectedArgsCount} actual ${actualArgsCount}`); + throw new Error(`arguments mismatch for template ${ templateName }, expect ${ expectedArgsCount } actual ${ actualArgsCount }`); } } -} +} \ No newline at end of file diff --git a/libraries/botbuilder-lg/src/expander.ts b/libraries/botbuilder-lg/src/expander.ts index 5f4f0b9587..bece51c339 100644 --- a/libraries/botbuilder-lg/src/expander.ts +++ b/libraries/botbuilder-lg/src/expander.ts @@ -1,6 +1,6 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -18,54 +18,55 @@ import { LGFileParserVisitor } from './generated/LGFileParserVisitor'; import { LGTemplate } from './lgTemplate'; // tslint:disable-next-line: max-classes-per-file +// tslint:disable-next-line: completed-docs export class Expander extends AbstractParseTreeVisitor implements LGFileParserVisitor { - public readonly Templates: LGTemplate[]; - public readonly TemplateMap: {[name: string]: LGTemplate}; + public readonly templates: LGTemplate[]; + public readonly templateMap: {[name: string]: LGTemplate}; private readonly evalutationTargetStack: EvaluationTarget[] = []; private readonly expanderExpressionEngine: ExpressionEngine; private readonly evaluatorExpressionEngine: ExpressionEngine; private readonly expressionRecognizeRegex: RegExp = new RegExp(/\}(?!\\).+?\{(?!\\)@?/g); - private readonly escapeSeperatorRegex : RegExp = new RegExp(/\|(?!\\)/g); + private readonly escapeSeperatorRegex: RegExp = new RegExp(/\|(?!\\)/g); - constructor(templates: LGTemplate[], expressionEngine: ExpressionEngine) { + public constructor(templates: LGTemplate[], expressionEngine: ExpressionEngine) { super(); - this.Templates = templates; - this.TemplateMap = keyBy(templates, (t: LGTemplate) => t.Name); + this.templates = templates; + this.templateMap = keyBy(templates, (t: LGTemplate): string => t.name); // generate a new customzied expression engine by injecting the template as functions - this.expanderExpressionEngine = new ExpressionEngine(this.CustomizedEvaluatorLookup(expressionEngine.EvaluatorLookup, true)); - this.evaluatorExpressionEngine = new ExpressionEngine(this.CustomizedEvaluatorLookup(expressionEngine.EvaluatorLookup, false)); + this.expanderExpressionEngine = new ExpressionEngine(this.customizedEvaluatorLookup(expressionEngine.EvaluatorLookup, true)); + this.evaluatorExpressionEngine = new ExpressionEngine(this.customizedEvaluatorLookup(expressionEngine.EvaluatorLookup, false)); } - public ExpandTemplate(templateName: string, scope: any): string[] { - if (!(templateName in this.TemplateMap)) { - throw new Error(`No such template: ${templateName}`); + public expandTemplate(templateName: string, scope: any): string[] { + if (!(templateName in this.templateMap)) { + throw new Error(`No such template: ${ templateName }`); } - if (this.evalutationTargetStack.find((u: EvaluationTarget) => u.TemplateName === templateName) !== undefined) { - throw new Error(`Loop deteced: ${this.evalutationTargetStack.reverse() - .map((u: EvaluationTarget) => u.TemplateName) - .join(' => ')}`); + if (this.evalutationTargetStack.find((u: EvaluationTarget): boolean => u.templateName === templateName) !== undefined) { + throw new Error(`Loop deteced: ${ this.evalutationTargetStack.reverse() + .map((u: EvaluationTarget): string => u.templateName) + .join(' => ') }`); } const templateTarget: EvaluationTarget = new EvaluationTarget(templateName, scope); - const currentEvulateId: string = templateTarget.GetId(); + const currentEvulateId: string = templateTarget.getId(); let previousEvaluateTarget: EvaluationTarget; if (this.evalutationTargetStack.length !== 0) { previousEvaluateTarget = this.evalutationTargetStack[this.evalutationTargetStack.length - 1]; - if (previousEvaluateTarget.EvaluatedChildren.has(currentEvulateId)) { - return previousEvaluateTarget.EvaluatedChildren.get(currentEvulateId); + if (previousEvaluateTarget.evaluatedChildren.has(currentEvulateId)) { + return previousEvaluateTarget.evaluatedChildren.get(currentEvulateId); } } // Using a stack to track the evalution trace this.evalutationTargetStack.push(templateTarget); - const result: string[] = this.visit(this.TemplateMap[templateName].ParseTree); + const result: string[] = this.visit(this.templateMap[templateName].parseTree); if (previousEvaluateTarget !== undefined) { - previousEvaluateTarget.EvaluatedChildren.set(currentEvulateId, result); + previousEvaluateTarget.evaluatedChildren.set(currentEvulateId, result); } this.evalutationTargetStack.pop(); @@ -75,7 +76,7 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi public visitTemplateDefinition(ctx: lp.TemplateDefinitionContext): string[] { const templateNameContext: lp.TemplateNameLineContext = ctx.templateNameLine(); - if (templateNameContext.templateName().text === this.currentTarget().TemplateName) { + if (templateNameContext.templateName().text === this.currentTarget().templateName) { return this.visit(ctx.templateBody()); } @@ -86,7 +87,7 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi return this.visit(ctx.normalTemplateBody()); } - public visitNormalTemplateBody(ctx: lp.NormalTemplateBodyContext) : string[] { + public visitNormalTemplateBody(ctx: lp.NormalTemplateBodyContext): string[] { const normalTemplateStrs: lp.TemplateStringContext[] = ctx.templateString(); let result: string[] = []; for (const normalTemplateStr of normalTemplateStrs) { @@ -96,10 +97,10 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi return result; } - public visitIfElseBody(ctx: lp.IfElseBodyContext) : string[] { + public visitIfElseBody(ctx: lp.IfElseBodyContext): string[] { const ifRules: lp.IfConditionRuleContext[] = ctx.ifElseTemplateBody().ifConditionRule(); for (const ifRule of ifRules) { - if (this.EvalCondition(ifRule.ifCondition())) { + if (this.evalCondition(ifRule.ifCondition())) { return this.visit(ifRule.normalTemplateBody()); } } @@ -107,6 +108,7 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi return undefined; } + // tslint:disable-next-line: cyclomatic-complexity public visitStructuredBody(ctx: lp.StructuredBodyContext): string[] { const idToStringMap: Map = new Map(); const stb: lp.StructuredTemplateBodyContext = ctx.structuredTemplateBody(); @@ -129,7 +131,7 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi const valueArray: string[] = Evaluator.wrappedRegExSplit(originValue, this.escapeSeperatorRegex); if (valueArray.length === 1) { const id: string = uuid(); - expandedResult.forEach(x => x[property] = id); + expandedResult.forEach((x: any): any => x[property] = id); idToStringMap.set(id, originValue); } else { const valueList: any[] = []; @@ -139,7 +141,7 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi idToStringMap.set(id, item.trim()); } - expandedResult.forEach(x => x[property] = valueList); + expandedResult.forEach((x: any): any => x[property] = valueList); } } else if (this.isPureExpression(line)) { // [MyStruct @@ -149,11 +151,11 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi // When the same property exists in both the calling template as well as callee, //the content in caller will trump any content in the callee. - const propertyObjects: any[] = this.EvalExpression(line).map(x => JSON.parse(x)); + const propertyObjects: any[] = this.evalExpression(line).map((x: string): any => JSON.parse(x)); const tempResult: any[] = []; for (const res of expandedResult) { for (const propertyObject of propertyObjects) { - let tempRes = JSON.parse(JSON.stringify(res)); + const tempRes: any = JSON.parse(JSON.stringify(res)); // Full reference to another structured template is limited to the structured template with same type if (typeof propertyObject === 'object' && '$type' in propertyObject && propertyObject.$type.toString() === typeName) { @@ -172,11 +174,11 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi } } - const exps: string[] = expandedResult.map(x => JSON.stringify(x)); + const exps: string[] = expandedResult.map((x: string): string => JSON.stringify(x)); const templateRefValues: Map = new Map(); for (const idToString of idToStringMap) { if ((idToString[1].startsWith('@') || idToString[1].startsWith('{')) && idToString[1].endsWith('}')) { - templateRefValues.set(idToString[0], this.EvalExpression(idToString[1])); + templateRefValues.set(idToString[0], this.evalExpression(idToString[1])); } else { templateRefValues.set(idToString[0], this.evalText(idToString[1])); } @@ -197,13 +199,13 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi return finalResult; } - public visitSwitchCaseBody(ctx: lp.SwitchCaseBodyContext) : string[] { + public visitSwitchCaseBody(ctx: lp.SwitchCaseBodyContext): string[] { const switchcaseNodes: lp.SwitchCaseRuleContext[] = ctx.switchCaseTemplateBody().switchCaseRule(); const length: number = switchcaseNodes.length; const switchNode: lp.SwitchCaseRuleContext = switchcaseNodes[0]; const switchExprs: TerminalNode[] = switchNode.switchCaseStat().EXPRESSION(); - const switchExprResult: string[] = this.EvalExpression(switchExprs[0].text); - let idx: number = 0; + const switchExprResult: string[] = this.evalExpression(switchExprs[0].text); + let idx = 0; for (const caseNode of switchcaseNodes) { if (idx === 0) { idx++; @@ -220,7 +222,7 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi } const caseExprs: TerminalNode[] = caseNode.switchCaseStat().EXPRESSION(); - const caseExprResult: string[] = this.EvalExpression(caseExprs[0].text); + const caseExprResult: string[] = this.evalExpression(caseExprs[0].text); //condition: check whether two string array have same elements if (switchExprResult.sort().toString() === caseExprResult.sort().toString()) { return this.visit(caseNode.normalTemplateBody()); @@ -235,26 +237,26 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi public visitNormalTemplateString(ctx: lp.NormalTemplateStringContext): string[] { let result: string[] = ['']; for (const node of ctx.children) { - const innerNode: TerminalNode = node; + const innerNode: TerminalNode = node as TerminalNode; switch (innerNode.symbol.type) { case lp.LGFileParser.DASH: break; case lp.LGFileParser.ESCAPE_CHARACTER: - result = this.StringArrayConcat(result, [this.EvalEscapeCharacter(innerNode.text)]); + result = this.stringArrayConcat(result, [this.evalEscapeCharacter(innerNode.text)]); break; case lp.LGFileParser.EXPRESSION: { - result = this.StringArrayConcat(result, this.EvalExpression(innerNode.text)); + result = this.stringArrayConcat(result, this.evalExpression(innerNode.text)); break; } case lp.LGFileParser.TEMPLATE_REF: { - result = this.StringArrayConcat(result, this.EvalTemplateRef(innerNode.text)); + result = this.stringArrayConcat(result, this.evalTemplateRef(innerNode.text)); break; } case lp.LGFileParser.MULTI_LINE_TEXT: { - result = this.StringArrayConcat(result, this.EvalMultiLineText(innerNode.text)); + result = this.stringArrayConcat(result, this.evalMultiLineText(innerNode.text)); break; } default: { - result = this.StringArrayConcat(result, [innerNode.text]); + result = this.stringArrayConcat(result, [innerNode.text]); break; } } @@ -263,12 +265,12 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi return result; } - public ConstructScope(templateName: string, args: any[]) : any { - const parameters: string[] = this.TemplateMap[templateName].Parameters; + public constructScope(templateName: string, args: any[]): any { + const parameters: string[] = this.templateMap[templateName].parameters; if (args.length === 0) { // no args to construct, inherit from current scope - return this.currentTarget().Scope; + return this.currentTarget().scope; } if (parameters !== undefined && (args === undefined || parameters.length !== args.length)) { @@ -276,7 +278,7 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi } const newScope: any = {}; - parameters.map((e: string, i: number) => newScope[e] = args[i]); + parameters.map((e: string, i: number): any => newScope[e] = args[i]); return newScope; } @@ -289,7 +291,7 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi return this.evalutationTargetStack[this.evalutationTargetStack.length - 1]; } - private EvalEscapeCharacter(exp: string): string { + private evalEscapeCharacter(exp: string): string { const validCharactersDict: any = { '\\r': '\r', '\\n': '\n', @@ -304,26 +306,26 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi return validCharactersDict[exp]; } - private EvalCondition(condition: lp.IfConditionContext): boolean { + private evalCondition(condition: lp.IfConditionContext): boolean { const expressions: TerminalNode[] = condition.EXPRESSION(); if (expressions === undefined || expressions.length === 0) { return true; // no expression means it's else } - if (this.EvalExpressionInCondition(expressions[0].text)) { + if (this.evalExpressionInCondition(expressions[0].text)) { return true; } return false; } - private EvalExpressionInCondition(exp: string): boolean { + private evalExpressionInCondition(exp: string): boolean { try { exp = exp.replace(/(^@*)/g, '') .replace(/(^{*)/g, '') .replace(/(}*$)/g, ''); - const { value: result, error }: { value: any; error: string } = this.EvalByExpressionEngine(exp, this.currentTarget().Scope); + const { value: result, error }: { value: any; error: string } = this.evalByExpressionEngine(exp, this.currentTarget().scope); if (error !== undefined || result === undefined || typeof result === 'boolean' && !Boolean(result) @@ -337,17 +339,17 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi } } - private EvalExpression(exp: string): string[] { + private evalExpression(exp: string): string[] { exp = exp.replace(/(^@*)/g, '') .replace(/(^{*)/g, '') .replace(/(}*$)/g, ''); - const { value: result, error }: { value: any; error: string } = this.EvalByExpressionEngine(exp, this.currentTarget().Scope); + const { value: result, error }: { value: any; error: string } = this.evalByExpressionEngine(exp, this.currentTarget().scope); if (error !== undefined) { - throw new Error(`Error occurs when evaluating expression ${exp}: ${error}`); + throw new Error(`Error occurs when evaluating expression ${ exp }: ${ error }`); } if (result === undefined) { - throw new Error(`Error occurs when evaluating expression '${exp}': ${exp} is evaluated to null`); + throw new Error(`Error occurs when evaluating expression '${ exp }': ${ exp } is evaluated to null`); } if (result instanceof Array) { @@ -357,24 +359,24 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi } } - private EvalTemplateRef(exp: string) : string[] { + private evalTemplateRef(exp: string): string[] { exp = exp.replace(/(^\[*)/g, '') .replace(/(\]*$)/g, ''); if (exp.indexOf('(') < 0) { - if (exp in this.TemplateMap) { + if (exp in this.templateMap) { exp = exp.concat('(') - .concat(this.TemplateMap[exp].Parameters.join()) + .concat(this.templateMap[exp].parameters.join()) .concat(')'); } else { exp = exp.concat('()'); } } - return this.EvalExpression(exp); + return this.evalExpression(exp); } - private EvalMultiLineText(exp: string): string[] { + private evalMultiLineText(exp: string): string[] { exp = exp.substr(3, exp.length - 6); @@ -382,7 +384,7 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi const matches: string[] = exp.match(/@\{[^{}]+\}/g); if (matches !== null && matches !== undefined) { for (const match of matches) { - templateRefValues.set(match, this.EvalExpression(match)); + templateRefValues.set(match, this.evalExpression(match)); } } @@ -400,15 +402,15 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi return result; } - private EvalByExpressionEngine(exp: string, scope: any) : any { + private evalByExpressionEngine(exp: string, scope: any): any { const expanderExpression: Expression = this.expanderExpressionEngine.parse(exp); const evaluatorExpression: Expression = this.evaluatorExpressionEngine.parse(exp); - const parse: Expression = this.ReconstructExpression(expanderExpression, evaluatorExpression, false); + const parse: Expression = this.reconstructExpression(expanderExpression, evaluatorExpression, false); return parse.tryEvaluate(scope); } - private StringArrayConcat(array1: string[], array2: string[]): string[] { + private stringArrayConcat(array1: string[], array2: string[]): string[] { const result: string[] = []; for (const item1 of array1) { for (const item2 of array2) { @@ -420,56 +422,57 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi } // Genearte a new lookup function based on one lookup function - private readonly CustomizedEvaluatorLookup = (baseLookup: EvaluatorLookup, isExpander: boolean) : any => (name: string) : ExpressionEvaluator => { - const prebuiltPrefix: string = 'prebuilt.'; + private readonly customizedEvaluatorLookup = (baseLookup: EvaluatorLookup, isExpander: boolean): any => (name: string): ExpressionEvaluator => { + const prebuiltPrefix = 'prebuilt.'; if (name.startsWith(prebuiltPrefix)) { return baseLookup(name.substring(prebuiltPrefix.length)); } - if (this.TemplateMap[name] !== undefined) { + if (this.templateMap[name] !== undefined) { if (isExpander) { - return new ExpressionEvaluator(name, BuiltInFunctions.Apply(this.TemplateExpander(name)), ReturnType.String, this.ValidTemplateReference); + return new ExpressionEvaluator(name, BuiltInFunctions.apply(this.templateExpander(name)), ReturnType.String, this.validTemplateReference); } else { - return new ExpressionEvaluator(name, BuiltInFunctions.Apply(this.TemplateEvaluator(name)), ReturnType.String, this.ValidTemplateReference); + return new ExpressionEvaluator(name, BuiltInFunctions.apply(this.templateEvaluator(name)), ReturnType.String, this.validTemplateReference); } } return baseLookup(name); } - private readonly TemplateEvaluator = (templateName: string) : any => (args: ReadonlyArray): string => { - const newScope: any = this.ConstructScope(templateName, Array.from(args)); + private readonly templateEvaluator = (templateName: string): any => (args: readonly any[]): string => { + const newScope: any = this.constructScope(templateName, Array.from(args)); - const value: string[] = this.ExpandTemplate(templateName, newScope); + const value: string[] = this.expandTemplate(templateName, newScope); + // tslint:disable-next-line: insecure-random const randomNumber: number = Math.floor(Math.random() * value.length); return value[randomNumber]; } - private readonly TemplateExpander = (templateName: string): any => (args: ReadonlyArray): string[] => { - const newScope: any = this.ConstructScope(templateName, Array.from(args)); + private readonly templateExpander = (templateName: string): any => (args: readonly any[]): string[] => { + const newScope: any = this.constructScope(templateName, Array.from(args)); - return this.ExpandTemplate(templateName, newScope); + return this.expandTemplate(templateName, newScope); } - private readonly ValidTemplateReference = (expression: Expression): void => { - const templateName: string = expression.Type; + private readonly validTemplateReference = (expression: Expression): void => { + const templateName: string = expression.type; - if (this.TemplateMap[templateName] === undefined) { - throw new Error(`no such template '${templateName}' to call in ${expression}`); + if (this.templateMap[templateName] === undefined) { + throw new Error(`no such template '${ templateName }' to call in ${ expression }`); } - const expectedArgsCount: number = this.TemplateMap[templateName].Parameters.length; - const actualArgsCount: number = expression.Children.length; + const expectedArgsCount: number = this.templateMap[templateName].parameters.length; + const actualArgsCount: number = expression.children.length; if (expectedArgsCount !== actualArgsCount) { - throw new Error(`arguments mismatch for template ${templateName}, expect ${expectedArgsCount} actual ${actualArgsCount}`); + throw new Error(`arguments mismatch for template ${ templateName }, expect ${ expectedArgsCount } actual ${ actualArgsCount }`); } } - private ReconstructExpression(expanderExpression: Expression, evaluatorExpression: Expression, foundPrebuiltFunction: boolean): Expression { - if (this.TemplateMap[expanderExpression.Type] !== undefined) { + private reconstructExpression(expanderExpression: Expression, evaluatorExpression: Expression, foundPrebuiltFunction: boolean): Expression { + if (this.templateMap[expanderExpression.type] !== undefined) { if (foundPrebuiltFunction) { return evaluatorExpression; } @@ -477,20 +480,20 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi foundPrebuiltFunction = true; } - for (let i: number = 0; i < expanderExpression.Children.length; i++) { - expanderExpression.Children[i] = this.ReconstructExpression(expanderExpression.Children[i], evaluatorExpression.Children[i], foundPrebuiltFunction); + for (let i = 0; i < expanderExpression.children.length; i++) { + expanderExpression.children[i] = this.reconstructExpression(expanderExpression.children[i], evaluatorExpression.children[i], foundPrebuiltFunction); } return expanderExpression; } - private evalTextContainsExpression(exp: string) : string[] { + private evalTextContainsExpression(exp: string): string[] { const templateRefValues: Map = new Map(); let matches: any = exp.split('').reverse().join('').match(this.expressionRecognizeRegex); if (matches !== null && matches !== undefined) { - matches = matches.map((e: string) => e.split('').reverse().join('')).reverse(); + matches = matches.map((e: string): string => e.split('').reverse().join('')).reverse(); for (const match of matches) { - templateRefValues.set(match, this.EvalExpression(match)); + templateRefValues.set(match, this.evalExpression(match)); } } @@ -514,11 +517,11 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi } if (this.isPureExpression(exp)) { - return this.EvalExpression(exp); + return this.evalExpression(exp); } else { // unescape \| - return this.evalTextContainsExpression(exp).map((x: string) => x.replace(/\\\|/g, '|')); + return this.evalTextContainsExpression(exp).map((x: string): string => x.replace(/\\\|/g, '|')); } } @@ -536,4 +539,4 @@ export class Expander extends AbstractParseTreeVisitor implements LGFi return reversedExps[0].split('').reverse().join('') === exp; } } -} +} \ No newline at end of file diff --git a/libraries/botbuilder-lg/src/extractor.ts b/libraries/botbuilder-lg/src/extractor.ts index 5674884d32..fdb50711e2 100644 --- a/libraries/botbuilder-lg/src/extractor.ts +++ b/libraries/botbuilder-lg/src/extractor.ts @@ -1,6 +1,6 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -15,18 +15,18 @@ import { LGTemplate } from './lgTemplate'; // tslint:disable-next-line: completed-docs export class Extractor extends AbstractParseTreeVisitor> implements LGFileParserVisitor> { - public readonly Templates: LGTemplate[]; - public readonly TemplateMap: {[name: string]: LGTemplate}; - constructor(templates: LGTemplate[]) { + public readonly templates: LGTemplate[]; + public readonly templateMap: {[name: string]: LGTemplate}; + public constructor(templates: LGTemplate[]) { super(); - this.Templates = templates; - this.TemplateMap = keyBy(templates, (t: LGTemplate) => t.Name); + this.templates = templates; + this.templateMap = keyBy(templates, (t: LGTemplate): string => t.name); } - public Extract(): Map[] { + public extract(): Map[] { const result: Map[] = []; - this.Templates.forEach((template: LGTemplate) => { - result.push(this.visit(template.ParseTree)); + this.templates.forEach((template: LGTemplate): any => { + result.push(this.visit(template.parseTree)); }); return result; @@ -36,8 +36,8 @@ export class Extractor extends AbstractParseTreeVisitor> implem const result: Map = new Map(); const templateName: string = context.templateNameLine().templateName().text; const templateBodies: Map = this.visit(context.templateBody()); - let isNormalTemplate: boolean = true; - templateBodies.forEach((templateBody: Map) => isNormalTemplate = isNormalTemplate && (templateBody === undefined)); + let isNormalTemplate = true; + templateBodies.forEach((templateBody: Map): any => isNormalTemplate = isNormalTemplate && (templateBody === undefined)); if (isNormalTemplate) { const templates: string[] = []; @@ -73,14 +73,13 @@ export class Extractor extends AbstractParseTreeVisitor> implem const ifRules: lp.IfConditionRuleContext[] = context.ifElseTemplateBody().ifConditionRule(); for (const ifRule of ifRules) { const expressions: TerminalNode[] = ifRule.ifCondition().EXPRESSION(); - const conditionNode : lp.IfConditionContext = ifRule.ifCondition(); - const ifExpr : boolean = conditionNode.IF() !== undefined; - const elseIfExpr : boolean = conditionNode.ELSEIF() !== undefined; - const elseExpr : boolean = conditionNode.ELSE() !== undefined; - - const node : TerminalNode = ifExpr ? conditionNode.IF() : - elseIfExpr ? conditionNode.ELSEIF() : - conditionNode.ELSE(); + const conditionNode: lp.IfConditionContext = ifRule.ifCondition(); + const ifExpr: boolean = conditionNode.IF() !== undefined; + const elseIfExpr: boolean = conditionNode.ELSEIF() !== undefined; + + const node: TerminalNode = ifExpr ? conditionNode.IF() : + elseIfExpr ? conditionNode.ELSEIF() : + conditionNode.ELSE(); const conditionLabel: string = node.text.toLowerCase(); const childTemplateBodyResult: string[] = []; const templateBodies: Map = this.visit(ifRule.normalTemplateBody()); @@ -109,10 +108,10 @@ export class Extractor extends AbstractParseTreeVisitor> implem const switchCaseStat: lp.SwitchCaseStatContext = iterNode.switchCaseStat(); const switchExpr: boolean = switchCaseStat.SWITCH() !== undefined; const caseExpr: boolean = switchCaseStat.CASE() !== undefined; - const defaultExpr: boolean = switchCaseStat.DEFAULT() !== undefined; + const node: TerminalNode = switchExpr ? switchCaseStat.SWITCH() : - caseExpr ? switchCaseStat.CASE() : - switchCaseStat.DEFAULT(); + caseExpr ? switchCaseStat.CASE() : + switchCaseStat.DEFAULT(); if (switchExpr) { continue; } @@ -124,7 +123,7 @@ export class Extractor extends AbstractParseTreeVisitor> implem } if (caseExpr) { - result.set(conditionLabel.toUpperCase().concat(' ') + expressions[0].text, childTemplateBodyResult); + result.set(conditionLabel.toUpperCase().concat(' ') + expressions[0].text, childTemplateBodyResult); } else { // tslint:disable-next-line: no-backbone-get-set-outside-model result.set('DEFALUT:', childTemplateBodyResult); diff --git a/libraries/botbuilder-lg/src/generated/LGFileLexer.ts b/libraries/botbuilder-lg/src/generated/LGFileLexer.ts index 738943ab56..bcf607c3ad 100644 --- a/libraries/botbuilder-lg/src/generated/LGFileLexer.ts +++ b/libraries/botbuilder-lg/src/generated/LGFileLexer.ts @@ -1,600 +1,607 @@ -// Generated from ../LGFileLexer.g4 by ANTLR 4.6-SNAPSHOT - - -import { ATN } from "antlr4ts/atn/ATN"; -import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; -import { CharStream } from "antlr4ts/CharStream"; -import { Lexer } from "antlr4ts/Lexer"; -import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; -import { NotNull } from "antlr4ts/Decorators"; -import { Override } from "antlr4ts/Decorators"; -import { RuleContext } from "antlr4ts/RuleContext"; -import { Vocabulary } from "antlr4ts/Vocabulary"; -import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; - -import * as Utils from "antlr4ts/misc/Utils"; - - -export class LGFileLexer extends Lexer { - public static readonly COMMENTS = 1; - public static readonly WS = 2; - public static readonly NEWLINE = 3; - public static readonly HASH = 4; - public static readonly DASH = 5; - public static readonly LEFT_SQUARE_BRACKET = 6; - public static readonly RIGHT_SQUARE_BRACKET = 7; - public static readonly IMPORT_DESC = 8; - public static readonly IMPORT_PATH = 9; - public static readonly INVALID_TOKEN_DEFAULT_MODE = 10; - public static readonly WS_IN_NAME = 11; - public static readonly IDENTIFIER = 12; - public static readonly DOT = 13; - public static readonly OPEN_PARENTHESIS = 14; - public static readonly CLOSE_PARENTHESIS = 15; - public static readonly COMMA = 16; - public static readonly TEXT_IN_NAME = 17; - public static readonly WS_IN_BODY_IGNORED = 18; - public static readonly IF = 19; - public static readonly ELSEIF = 20; - public static readonly ELSE = 21; - public static readonly SWITCH = 22; - public static readonly CASE = 23; - public static readonly DEFAULT = 24; - public static readonly MULTI_LINE_TEXT = 25; - public static readonly ESCAPE_CHARACTER = 26; - public static readonly EXPRESSION = 27; - public static readonly TEMPLATE_REF = 28; - public static readonly TEXT_SEPARATOR = 29; - public static readonly TEXT = 30; - public static readonly WS_IN_STRUCTURED = 31; - public static readonly STRUCTURED_COMMENTS = 32; - public static readonly STRUCTURED_NEWLINE = 33; - public static readonly STRUCTURED_TEMPLATE_BODY_END = 34; - public static readonly STRUCTURED_CONTENT = 35; - public static readonly TEMPLATE_NAME_MODE = 1; - public static readonly TEMPLATE_BODY_MODE = 2; - public static readonly STRUCTURED_TEMPLATE_BODY_MODE = 3; - // tslint:disable:no-trailing-whitespace - public static readonly modeNames: string[] = [ - "DEFAULT_MODE", "TEMPLATE_NAME_MODE", "TEMPLATE_BODY_MODE", "STRUCTURED_TEMPLATE_BODY_MODE", - ]; - - public static readonly ruleNames: string[] = [ - "LETTER", "NUMBER", "WHITESPACE", "A", "C", "D", "E", "F", "H", "I", "L", - "S", "T", "U", "W", "STRING_LITERAL", "COMMENTS", "WS", "NEWLINE", "HASH", - "DASH", "LEFT_SQUARE_BRACKET", "RIGHT_SQUARE_BRACKET", "IMPORT_DESC", - "IMPORT_PATH", "INVALID_TOKEN_DEFAULT_MODE", "WS_IN_NAME", "NEWLINE_IN_NAME", - "IDENTIFIER", "DOT", "OPEN_PARENTHESIS", "CLOSE_PARENTHESIS", "COMMA", - "TEXT_IN_NAME", "WS_IN_BODY_IGNORED", "WS_IN_BODY", "NEWLINE_IN_BODY", - "IF", "ELSEIF", "ELSE", "SWITCH", "CASE", "DEFAULT", "MULTI_LINE_TEXT", - "ESCAPE_CHARACTER", "EXPRESSION", "TEMPLATE_REF", "TEXT_SEPARATOR", "TEXT", - "WS_IN_STRUCTURED", "STRUCTURED_COMMENTS", "STRUCTURED_NEWLINE", "STRUCTURED_TEMPLATE_BODY_END", - "STRUCTURED_CONTENT", - ]; - - private static readonly _LITERAL_NAMES: Array = [ - undefined, undefined, undefined, undefined, "'#'", undefined, "'['", "']'", - undefined, undefined, undefined, undefined, undefined, "'.'", "'('", "')'", - "','", - ]; - private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, "COMMENTS", "WS", "NEWLINE", "HASH", "DASH", "LEFT_SQUARE_BRACKET", - "RIGHT_SQUARE_BRACKET", "IMPORT_DESC", "IMPORT_PATH", "INVALID_TOKEN_DEFAULT_MODE", - "WS_IN_NAME", "IDENTIFIER", "DOT", "OPEN_PARENTHESIS", "CLOSE_PARENTHESIS", - "COMMA", "TEXT_IN_NAME", "WS_IN_BODY_IGNORED", "IF", "ELSEIF", "ELSE", - "SWITCH", "CASE", "DEFAULT", "MULTI_LINE_TEXT", "ESCAPE_CHARACTER", "EXPRESSION", - "TEMPLATE_REF", "TEXT_SEPARATOR", "TEXT", "WS_IN_STRUCTURED", "STRUCTURED_COMMENTS", - "STRUCTURED_NEWLINE", "STRUCTURED_TEMPLATE_BODY_END", "STRUCTURED_CONTENT", - ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(LGFileLexer._LITERAL_NAMES, LGFileLexer._SYMBOLIC_NAMES, []); - - // @Override - // @NotNull - public get vocabulary(): Vocabulary { - return LGFileLexer.VOCABULARY; - } - // tslint:enable:no-trailing-whitespace - - - ignoreWS = true; // usually we ignore whitespace, but inside template, whitespace is significant - expectKeywords = false; // whether we are expecting IF/ELSEIF/ELSE or Switch/Case/Default keywords - - - constructor(input: CharStream) { - super(input); - this._interp = new LexerATNSimulator(LGFileLexer._ATN, this); - } - - // @Override - public get grammarFileName(): string { return "LGFileLexer.g4"; } - - // @Override - public get ruleNames(): string[] { return LGFileLexer.ruleNames; } - - // @Override - public get serializedATN(): string { return LGFileLexer._serializedATN; } - - // @Override - public get modeNames(): string[] { return LGFileLexer.modeNames; } - - // @Override - public action(_localctx: RuleContext, ruleIndex: number, actionIndex: number): void { - switch (ruleIndex) { - case 20: - this.DASH_action(_localctx, actionIndex); - break; - - case 36: - this.NEWLINE_IN_BODY_action(_localctx, actionIndex); - break; - - case 37: - this.IF_action(_localctx, actionIndex); - break; - - case 38: - this.ELSEIF_action(_localctx, actionIndex); - break; - - case 39: - this.ELSE_action(_localctx, actionIndex); - break; - - case 40: - this.SWITCH_action(_localctx, actionIndex); - break; - - case 41: - this.CASE_action(_localctx, actionIndex); - break; - - case 42: - this.DEFAULT_action(_localctx, actionIndex); - break; - - case 43: - this.MULTI_LINE_TEXT_action(_localctx, actionIndex); - break; - - case 44: - this.ESCAPE_CHARACTER_action(_localctx, actionIndex); - break; - - case 45: - this.EXPRESSION_action(_localctx, actionIndex); - break; - - case 46: - this.TEMPLATE_REF_action(_localctx, actionIndex); - break; - - case 47: - this.TEXT_SEPARATOR_action(_localctx, actionIndex); - break; - - case 48: - this.TEXT_action(_localctx, actionIndex); - break; - } - } - private DASH_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 0: - this.expectKeywords = true; - break; - } - } - private NEWLINE_IN_BODY_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 1: - this.ignoreWS = true; - break; - } - } - private IF_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 2: - this.ignoreWS = true; - break; - } - } - private ELSEIF_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 3: - this.ignoreWS = true; - break; - } - } - private ELSE_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 4: - this.ignoreWS = true; - break; - } - } - private SWITCH_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 5: - this.ignoreWS = true; - break; - } - } - private CASE_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 6: - this.ignoreWS = true; - break; - } - } - private DEFAULT_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 7: - this.ignoreWS = true; - break; - } - } - private MULTI_LINE_TEXT_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 8: - this.ignoreWS = false; this.expectKeywords = false; - break; - } - } - private ESCAPE_CHARACTER_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 9: - this.ignoreWS = false; this.expectKeywords = false; - break; - } - } - private EXPRESSION_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 10: - this.ignoreWS = false; this.expectKeywords = false; - break; - } - } - private TEMPLATE_REF_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 11: - this.ignoreWS = false; this.expectKeywords = false; - break; - } - } - private TEXT_SEPARATOR_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 12: - this.ignoreWS = false; this.expectKeywords = false; - break; - } - } - private TEXT_action(_localctx: RuleContext, actionIndex: number): void { - switch (actionIndex) { - case 13: - this.ignoreWS = false; this.expectKeywords = false; - break; - } - } - // @Override - public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { - switch (ruleIndex) { - case 34: - return this.WS_IN_BODY_IGNORED_sempred(_localctx, predIndex); - - case 37: - return this.IF_sempred(_localctx, predIndex); - - case 38: - return this.ELSEIF_sempred(_localctx, predIndex); - - case 39: - return this.ELSE_sempred(_localctx, predIndex); - - case 40: - return this.SWITCH_sempred(_localctx, predIndex); - - case 41: - return this.CASE_sempred(_localctx, predIndex); - - case 42: - return this.DEFAULT_sempred(_localctx, predIndex); - } - return true; - } - private WS_IN_BODY_IGNORED_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 0: - return this.ignoreWS; - } - return true; - } - private IF_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 1: - return this.expectKeywords; - } - return true; - } - private ELSEIF_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 2: - return this.expectKeywords; - } - return true; - } - private ELSE_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 3: - return this.expectKeywords; - } - return true; - } - private SWITCH_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 4: - return this.expectKeywords; - } - return true; - } - private CASE_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 5: - return this.expectKeywords; - } - return true; - } - private DEFAULT_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 6: - return this.expectKeywords; - } - return true; - } - - public static readonly _serializedATN: string = - "\x03\uAF6F\u8320\u479D\uB75C\u4880\u1605\u191C\uAB37\x02%\u01E1\b\x01" + - "\b\x01\b\x01\b\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t" + - "\x05\x04\x06\t\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t" + - "\v\x04\f\t\f\x04\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11" + - "\t\x11\x04\x12\t\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16" + - "\t\x16\x04\x17\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B" + - "\t\x1B\x04\x1C\t\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t" + - " \x04!\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(" + - "\x04)\t)\x04*\t*\x04+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041" + - "\t1\x042\t2\x043\t3\x044\t4\x045\t5\x046\t6\x047\t7\x03\x02\x03\x02\x03" + - "\x03\x03\x03\x03\x04\x03\x04\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03" + - "\x07\x03\b\x03\b\x03\t\x03\t\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\r" + - "\x03\r\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x11\x03\x11" + - "\x07\x11\x93\n\x11\f\x11\x0E\x11\x96\v\x11\x03\x11\x03\x11\x03\x11\x07" + - "\x11\x9B\n\x11\f\x11\x0E\x11\x9E\v\x11\x03\x11\x05\x11\xA1\n\x11\x03\x12" + - "\x03\x12\x06\x12\xA5\n\x12\r\x12\x0E\x12\xA6\x03\x12\x05\x12\xAA\n\x12" + - "\x03\x12\x03\x12\x03\x13\x06\x13\xAF\n\x13\r\x13\x0E\x13\xB0\x03\x13\x03" + - "\x13\x03\x14\x05\x14\xB6\n\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15" + - "\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17" + - "\x03\x17\x03\x18\x03\x18\x03\x19\x03\x19\x07\x19\xCB\n\x19\f\x19\x0E\x19" + - "\xCE\v\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x07\x1A\xD4\n\x1A\f\x1A\x0E" + - "\x1A\xD7\v\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1C\x06\x1C\xDE\n\x1C" + - "\r\x1C\x0E\x1C\xDF\x03\x1C\x03\x1C\x03\x1D\x05\x1D\xE5\n\x1D\x03\x1D\x03" + - "\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x05\x1E\xEF\n\x1E" + - "\x03\x1E\x03\x1E\x03\x1E\x07\x1E\xF4\n\x1E\f\x1E\x0E\x1E\xF7\v\x1E\x03" + - "\x1F\x03\x1F\x03 \x03 \x03!\x03!\x03\"\x03\"\x03#\x06#\u0102\n#\r#\x0E" + - "#\u0103\x03$\x06$\u0107\n$\r$\x0E$\u0108\x03$\x03$\x03$\x03$\x03%\x06" + - "%\u0110\n%\r%\x0E%\u0111\x03%\x03%\x03&\x05&\u0117\n&\x03&\x03&\x03&\x03" + - "&\x03&\x03&\x03\'\x03\'\x03\'\x07\'\u0122\n\'\f\'\x0E\'\u0125\v\'\x03" + - "\'\x03\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x07(\u0130\n(\f(\x0E(\u0133" + - "\v(\x03(\x03(\x03(\x07(\u0138\n(\f(\x0E(\u013B\v(\x03(\x03(\x03(\x03(" + - "\x03)\x03)\x03)\x03)\x03)\x07)\u0146\n)\f)\x0E)\u0149\v)\x03)\x03)\x03" + - ")\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x07*\u0156\n*\f*\x0E*\u0159" + - "\v*\x03*\x03*\x03*\x03*\x03+\x03+\x03+\x03+\x03+\x07+\u0164\n+\f+\x0E" + - "+\u0167\v+\x03+\x03+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03" + - ",\x07,\u0175\n,\f,\x0E,\u0178\v,\x03,\x03,\x03,\x03,\x03-\x03-\x03-\x03" + - "-\x03-\x07-\u0183\n-\f-\x0E-\u0186\v-\x03-\x03-\x03-\x03-\x03-\x03-\x03" + - ".\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x05.\u0197\n.\x03/\x05/\u019A" + - "\n/\x03/\x03/\x03/\x07/\u019F\n/\f/\x0E/\u01A2\v/\x03/\x03/\x03/\x030" + - "\x030\x030\x070\u01AA\n0\f0\x0E0\u01AD\v0\x030\x030\x030\x031\x031\x03" + - "1\x032\x062\u01B6\n2\r2\x0E2\u01B7\x032\x032\x033\x063\u01BD\n3\r3\x0E" + - "3\u01BE\x034\x034\x074\u01C3\n4\f4\x0E4\u01C6\v4\x034\x054\u01C9\n4\x03" + - "4\x034\x034\x034\x035\x055\u01D0\n5\x035\x035\x036\x056\u01D5\n6\x036" + - "\x036\x056\u01D9\n6\x036\x036\x037\x067\u01DE\n7\r7\x0E7\u01DF\b\xCC\xD5" + - "\u0103\u0184\u01A0\u01B7\x02\x028\x06\x02\x02\b\x02\x02\n\x02\x02\f\x02" + - "\x02\x0E\x02\x02\x10\x02\x02\x12\x02\x02\x14\x02\x02\x16\x02\x02\x18\x02" + - "\x02\x1A\x02\x02\x1C\x02\x02\x1E\x02\x02 \x02\x02\"\x02\x02$\x02\x02&" + - "\x02\x03(\x02\x04*\x02\x05,\x02\x06.\x02\x070\x02\b2\x02\t4\x02\n6\x02" + - "\v8\x02\f:\x02\r<\x02\x02>\x02\x0E@\x02\x0FB\x02\x10D\x02\x11F\x02\x12" + - "H\x02\x13J\x02\x14L\x02\x02N\x02\x02P\x02\x15R\x02\x16T\x02\x17V\x02\x18" + - "X\x02\x19Z\x02\x1A\\\x02\x1B^\x02\x1C`\x02\x1Db\x02\x1Ed\x02\x1Ff\x02" + - " h\x02!j\x02\"l\x02#n\x02$p\x02%\x06\x02\x03\x04\x05\x19\x04\x02C\\c|" + - "\x06\x02\v\v\"\"\xA2\xA2\uFF01\uFF01\x04\x02CCcc\x04\x02EEee\x04\x02F" + - "Fff\x04\x02GGgg\x04\x02HHhh\x04\x02JJjj\x04\x02KKkk\x04\x02NNnn\x04\x02" + - "UUuu\x04\x02VVvv\x04\x02WWww\x04\x02YYyy\x05\x02\f\f\x0F\x0F))\x05\x02" + - "\f\f\x0F\x0F$$\x04\x02&&@@\x04\x02\f\f\x0F\x0F\x04\x02//aa\x07\x02__p" + - "pttvv\x7F\x7F\b\x02\f\f\x0F\x0F$$))}}\x7F\x7F\x06\x02\f\f\x0F\x0F]]__" + - "\t\x02\v\f\x0F\x0F*+]]__}}\x7F\x7F\u01F9\x02&\x03\x02\x02\x02\x02(\x03" + - "\x02\x02\x02\x02*\x03\x02\x02\x02\x02,\x03\x02\x02\x02\x02.\x03\x02\x02" + - "\x02\x020\x03\x02\x02\x02\x022\x03\x02\x02\x02\x024\x03\x02\x02\x02\x02" + - "6\x03\x02\x02\x02\x028\x03\x02\x02\x02\x03:\x03\x02\x02\x02\x03<\x03\x02" + - "\x02\x02\x03>\x03\x02\x02\x02\x03@\x03\x02\x02\x02\x03B\x03\x02\x02\x02" + - "\x03D\x03\x02\x02\x02\x03F\x03\x02\x02\x02\x03H\x03\x02\x02\x02\x04J\x03" + - "\x02\x02\x02\x04L\x03\x02\x02\x02\x04N\x03\x02\x02\x02\x04P\x03\x02\x02" + - "\x02\x04R\x03\x02\x02\x02\x04T\x03\x02\x02\x02\x04V\x03\x02\x02\x02\x04" + - "X\x03\x02\x02\x02\x04Z\x03\x02\x02\x02\x04\\\x03\x02\x02\x02\x04^\x03" + - "\x02\x02\x02\x04`\x03\x02\x02\x02\x04b\x03\x02\x02\x02\x04d\x03\x02\x02" + - "\x02\x04f\x03\x02\x02\x02\x05h\x03\x02\x02\x02\x05j\x03\x02\x02\x02\x05" + - "l\x03\x02\x02\x02\x05n\x03\x02\x02\x02\x05p\x03\x02\x02\x02\x06r\x03\x02" + - "\x02\x02\bt\x03\x02\x02\x02\nv\x03\x02\x02\x02\fx\x03\x02\x02\x02\x0E" + - "z\x03\x02\x02\x02\x10|\x03\x02\x02\x02\x12~\x03\x02\x02\x02\x14\x80\x03" + - "\x02\x02\x02\x16\x82\x03\x02\x02\x02\x18\x84\x03\x02\x02\x02\x1A\x86\x03" + - "\x02\x02\x02\x1C\x88\x03\x02\x02\x02\x1E\x8A\x03\x02\x02\x02 \x8C\x03" + - "\x02\x02\x02\"\x8E\x03\x02\x02\x02$\xA0\x03\x02\x02\x02&\xA2\x03\x02\x02" + - "\x02(\xAE\x03\x02\x02\x02*\xB5\x03\x02\x02\x02,\xB9\x03\x02\x02\x02.\xBD" + - "\x03\x02\x02\x020\xC2\x03\x02\x02\x022\xC6\x03\x02\x02\x024\xC8\x03\x02" + - "\x02\x026\xD1\x03\x02\x02\x028\xDA\x03\x02\x02\x02:\xDD\x03\x02\x02\x02" + - "<\xE4\x03\x02\x02\x02>\xEE\x03\x02\x02\x02@\xF8\x03\x02\x02\x02B\xFA\x03" + - "\x02\x02\x02D\xFC\x03\x02\x02\x02F\xFE\x03\x02\x02\x02H\u0101\x03\x02" + - "\x02\x02J\u0106\x03\x02\x02\x02L\u010F\x03\x02\x02\x02N\u0116\x03\x02" + - "\x02\x02P\u011E\x03\x02\x02\x02R\u012A\x03\x02\x02\x02T\u0140\x03\x02" + - "\x02\x02V\u014E\x03\x02\x02\x02X\u015E\x03\x02\x02\x02Z\u016C\x03\x02" + - "\x02\x02\\\u017D\x03\x02\x02\x02^\u0196\x03\x02\x02\x02`\u0199\x03\x02" + - "\x02\x02b\u01A6\x03\x02\x02\x02d\u01B1\x03\x02\x02\x02f\u01B5\x03\x02" + - "\x02\x02h\u01BC\x03\x02\x02\x02j\u01C0\x03\x02\x02\x02l\u01CF\x03\x02" + - "\x02\x02n\u01D4\x03\x02\x02\x02p\u01DD\x03\x02\x02\x02rs\t\x02\x02\x02" + - "s\x07\x03\x02\x02\x02tu\x042;\x02u\t\x03\x02\x02\x02vw\t\x03\x02\x02w" + - "\v\x03\x02\x02\x02xy\t\x04\x02\x02y\r\x03\x02\x02\x02z{\t\x05\x02\x02" + - "{\x0F\x03\x02\x02\x02|}\t\x06\x02\x02}\x11\x03\x02\x02\x02~\x7F\t\x07" + - "\x02\x02\x7F\x13\x03\x02\x02\x02\x80\x81\t\b\x02\x02\x81\x15\x03\x02\x02" + - "\x02\x82\x83\t\t\x02\x02\x83\x17\x03\x02\x02\x02\x84\x85\t\n\x02\x02\x85" + - "\x19\x03\x02\x02\x02\x86\x87\t\v\x02\x02\x87\x1B\x03\x02\x02\x02\x88\x89" + - "\t\f\x02\x02\x89\x1D\x03\x02\x02\x02\x8A\x8B\t\r\x02\x02\x8B\x1F\x03\x02" + - "\x02\x02\x8C\x8D\t\x0E\x02\x02\x8D!\x03\x02\x02\x02\x8E\x8F\t\x0F\x02" + - "\x02\x8F#\x03\x02\x02\x02\x90\x94\x07)\x02\x02\x91\x93\n\x10\x02\x02\x92" + - "\x91\x03\x02\x02\x02\x93\x96\x03\x02\x02\x02\x94\x92\x03\x02\x02\x02\x94" + - "\x95\x03\x02\x02\x02\x95\x97\x03\x02\x02\x02\x96\x94\x03\x02\x02\x02\x97" + - "\xA1\x07)\x02\x02\x98\x9C\x07$\x02\x02\x99\x9B\n\x11\x02\x02\x9A\x99\x03" + - "\x02\x02\x02\x9B\x9E\x03\x02\x02\x02\x9C\x9A\x03\x02\x02\x02\x9C\x9D\x03" + - "\x02\x02\x02\x9D\x9F\x03\x02\x02\x02\x9E\x9C\x03\x02\x02\x02\x9F\xA1\x07" + - "$\x02\x02\xA0\x90\x03\x02\x02\x02\xA0\x98\x03\x02\x02\x02\xA1%\x03\x02" + - "\x02\x02\xA2\xA4\t\x12\x02\x02\xA3\xA5\n\x13\x02\x02\xA4\xA3\x03\x02\x02" + - "\x02\xA5\xA6\x03\x02\x02\x02\xA6\xA4\x03\x02\x02\x02\xA6\xA7\x03\x02\x02" + - "\x02\xA7\xA9\x03\x02\x02\x02\xA8\xAA\x05*\x14\x02\xA9\xA8\x03\x02\x02" + - "\x02\xA9\xAA\x03\x02\x02\x02\xAA\xAB\x03\x02\x02\x02\xAB\xAC\b\x12\x02" + - "\x02\xAC\'\x03\x02\x02\x02\xAD\xAF\x05\n\x04\x02\xAE\xAD\x03\x02\x02\x02" + - "\xAF\xB0\x03\x02\x02\x02\xB0\xAE\x03\x02\x02\x02\xB0\xB1\x03\x02\x02\x02" + - "\xB1\xB2\x03\x02\x02\x02\xB2\xB3\b\x13\x02\x02\xB3)\x03\x02\x02\x02\xB4" + - "\xB6\x07\x0F\x02\x02\xB5\xB4\x03\x02\x02\x02\xB5\xB6\x03\x02\x02\x02\xB6" + - "\xB7\x03\x02\x02\x02\xB7\xB8\x07\f\x02\x02\xB8+\x03\x02\x02\x02\xB9\xBA" + - "\x07%\x02\x02\xBA\xBB\x03\x02\x02\x02\xBB\xBC\b\x15\x03\x02\xBC-\x03\x02" + - "\x02\x02\xBD\xBE\x07/\x02\x02\xBE\xBF\b\x16\x04\x02\xBF\xC0\x03\x02\x02" + - "\x02\xC0\xC1\b\x16\x05\x02\xC1/\x03\x02\x02\x02\xC2\xC3\x07]\x02\x02\xC3" + - "\xC4\x03\x02\x02\x02\xC4\xC5\b\x17\x06\x02\xC51\x03\x02\x02\x02\xC6\xC7" + - "\x07_\x02\x02\xC73\x03\x02\x02\x02\xC8\xCC\x07]\x02\x02\xC9\xCB\n\x13" + - "\x02\x02\xCA\xC9\x03\x02\x02\x02\xCB\xCE\x03\x02\x02\x02\xCC\xCD\x03\x02" + - "\x02\x02\xCC\xCA\x03\x02\x02\x02\xCD\xCF\x03\x02\x02\x02\xCE\xCC\x03\x02" + - "\x02\x02\xCF\xD0\x07_\x02\x02\xD05\x03\x02\x02\x02\xD1\xD5\x07*\x02\x02" + - "\xD2\xD4\n\x13\x02\x02\xD3\xD2\x03\x02\x02\x02\xD4\xD7\x03\x02\x02\x02" + - "\xD5\xD6\x03\x02\x02\x02\xD5\xD3\x03\x02\x02\x02\xD6\xD8\x03\x02\x02\x02" + - "\xD7\xD5\x03\x02\x02\x02\xD8\xD9\x07+\x02\x02\xD97\x03\x02\x02\x02\xDA" + - "\xDB\v\x02\x02\x02\xDB9\x03\x02\x02\x02\xDC\xDE\x05\n\x04\x02\xDD\xDC" + - "\x03\x02\x02\x02\xDE\xDF\x03\x02\x02\x02\xDF\xDD\x03\x02\x02\x02\xDF\xE0" + - "\x03\x02\x02\x02\xE0\xE1\x03\x02\x02\x02\xE1\xE2\b\x1C\x02\x02\xE2;\x03" + - "\x02\x02\x02\xE3\xE5\x07\x0F\x02\x02\xE4\xE3\x03\x02\x02\x02\xE4\xE5\x03" + - "\x02\x02\x02\xE5\xE6\x03\x02\x02\x02\xE6\xE7\x07\f\x02\x02\xE7\xE8\x03" + - "\x02\x02\x02\xE8\xE9\b\x1D\x07\x02\xE9\xEA\b\x1D\b\x02\xEA=\x03\x02\x02" + - "\x02\xEB\xEF\x05\x06\x02\x02\xEC\xEF\x05\b\x03\x02\xED\xEF\x07a\x02\x02" + - "\xEE\xEB\x03\x02\x02\x02\xEE\xEC\x03\x02\x02\x02\xEE\xED\x03\x02\x02\x02" + - "\xEF\xF5\x03\x02\x02\x02\xF0\xF4\x05\x06\x02\x02\xF1\xF4\x05\b\x03\x02" + - "\xF2\xF4\t\x14\x02\x02\xF3\xF0\x03\x02\x02\x02\xF3\xF1\x03\x02\x02\x02" + - "\xF3\xF2\x03\x02\x02\x02\xF4\xF7\x03\x02\x02\x02\xF5\xF3\x03\x02\x02\x02" + - "\xF5\xF6\x03\x02\x02\x02\xF6?\x03\x02\x02\x02\xF7\xF5\x03\x02\x02\x02" + - "\xF8\xF9\x070\x02\x02\xF9A\x03\x02\x02\x02\xFA\xFB\x07*\x02\x02\xFBC\x03" + - "\x02\x02\x02\xFC\xFD\x07+\x02\x02\xFDE\x03\x02\x02\x02\xFE\xFF\x07.\x02" + - "\x02\xFFG\x03\x02\x02\x02\u0100\u0102\n\x13\x02\x02\u0101\u0100\x03\x02" + - "\x02\x02\u0102\u0103\x03\x02\x02\x02\u0103\u0104\x03\x02\x02\x02\u0103" + - "\u0101\x03\x02\x02\x02\u0104I\x03\x02\x02\x02\u0105\u0107\x05\n\x04\x02" + - "\u0106\u0105\x03\x02\x02\x02\u0107\u0108\x03\x02\x02\x02\u0108\u0106\x03" + - "\x02\x02\x02\u0108\u0109\x03\x02\x02\x02\u0109\u010A\x03\x02\x02\x02\u010A" + - "\u010B\x06$\x02\x02\u010B\u010C\x03\x02\x02\x02\u010C\u010D\b$\x02\x02" + - "\u010DK\x03\x02\x02\x02\u010E\u0110\x05\n\x04\x02\u010F\u010E\x03\x02" + - "\x02\x02\u0110\u0111\x03\x02\x02\x02\u0111\u010F\x03\x02\x02\x02\u0111" + - "\u0112\x03\x02\x02\x02\u0112\u0113\x03\x02\x02\x02\u0113\u0114\b%\t\x02" + - "\u0114M\x03\x02\x02\x02\u0115\u0117\x07\x0F\x02\x02\u0116\u0115\x03\x02" + - "\x02\x02\u0116\u0117\x03\x02\x02\x02\u0117\u0118\x03\x02\x02\x02\u0118" + - "\u0119\x07\f\x02\x02\u0119\u011A\b&\n\x02\u011A\u011B\x03\x02\x02\x02" + - "\u011B\u011C\b&\x07\x02\u011C\u011D\b&\b\x02\u011DO\x03\x02\x02\x02\u011E" + - "\u011F\x05\x18\v\x02\u011F\u0123\x05\x14\t\x02\u0120\u0122\x05\n\x04\x02" + - "\u0121\u0120\x03\x02\x02\x02\u0122\u0125\x03\x02\x02\x02\u0123\u0121\x03" + - "\x02\x02\x02\u0123\u0124\x03\x02\x02\x02\u0124\u0126\x03\x02\x02\x02\u0125" + - "\u0123\x03\x02\x02\x02\u0126\u0127\x07<\x02\x02\u0127\u0128\x06\'\x03" + - "\x02\u0128\u0129\b\'\v\x02\u0129Q\x03\x02\x02\x02\u012A\u012B\x05\x12" + - "\b\x02\u012B\u012C\x05\x1A\f\x02\u012C\u012D\x05\x1C\r\x02\u012D\u0131" + - "\x05\x12\b\x02\u012E\u0130\x05\n\x04\x02\u012F\u012E\x03\x02\x02\x02\u0130" + - "\u0133\x03\x02\x02\x02\u0131\u012F\x03\x02\x02\x02\u0131\u0132\x03\x02" + - "\x02\x02\u0132\u0134\x03\x02\x02\x02\u0133\u0131\x03\x02\x02\x02\u0134" + - "\u0135\x05\x18\v\x02\u0135\u0139\x05\x14\t\x02\u0136\u0138\x05\n\x04\x02" + - "\u0137\u0136\x03\x02\x02\x02\u0138\u013B\x03\x02\x02\x02\u0139\u0137\x03" + - "\x02\x02\x02\u0139\u013A\x03\x02\x02\x02\u013A\u013C\x03\x02\x02\x02\u013B" + - "\u0139\x03\x02\x02\x02\u013C\u013D\x07<\x02\x02\u013D\u013E\x06(\x04\x02" + - "\u013E\u013F\b(\f\x02\u013FS\x03\x02\x02\x02\u0140\u0141\x05\x12\b\x02" + - "\u0141\u0142\x05\x1A\f\x02\u0142\u0143\x05\x1C\r\x02\u0143\u0147\x05\x12" + - "\b\x02\u0144\u0146\x05\n\x04\x02\u0145\u0144\x03\x02\x02\x02\u0146\u0149" + - "\x03\x02\x02\x02\u0147\u0145\x03\x02\x02\x02\u0147\u0148\x03\x02\x02\x02" + - "\u0148\u014A\x03\x02\x02\x02\u0149\u0147\x03\x02\x02\x02\u014A\u014B\x07" + - "<\x02\x02\u014B\u014C\x06)\x05\x02\u014C\u014D\b)\r\x02\u014DU\x03\x02" + - "\x02\x02\u014E\u014F\x05\x1C\r\x02\u014F\u0150\x05\"\x10\x02\u0150\u0151" + - "\x05\x18\v\x02\u0151\u0152\x05\x1E\x0E\x02\u0152\u0153\x05\x0E\x06\x02" + - "\u0153\u0157\x05\x16\n\x02\u0154\u0156\x05\n\x04\x02\u0155\u0154\x03\x02" + - "\x02\x02\u0156\u0159\x03\x02\x02\x02\u0157\u0155\x03\x02\x02\x02\u0157" + - "\u0158\x03\x02\x02\x02\u0158\u015A\x03\x02\x02\x02\u0159\u0157\x03\x02" + - "\x02\x02\u015A\u015B\x07<\x02\x02\u015B\u015C\x06*\x06\x02\u015C\u015D" + - "\b*\x0E\x02\u015DW\x03\x02\x02\x02\u015E\u015F\x05\x0E\x06\x02\u015F\u0160" + - "\x05\f\x05\x02\u0160\u0161\x05\x1C\r\x02\u0161\u0165\x05\x12\b\x02\u0162" + - "\u0164\x05\n\x04\x02\u0163\u0162\x03\x02\x02\x02\u0164\u0167\x03\x02\x02" + - "\x02\u0165\u0163\x03\x02\x02\x02\u0165\u0166\x03\x02\x02\x02\u0166\u0168" + - "\x03\x02\x02\x02\u0167\u0165\x03\x02\x02\x02\u0168\u0169\x07<\x02\x02" + - "\u0169\u016A\x06+\x07\x02\u016A\u016B\b+\x0F\x02\u016BY\x03\x02\x02\x02" + - "\u016C\u016D\x05\x10\x07\x02\u016D\u016E\x05\x12\b\x02\u016E\u016F\x05" + - "\x14\t\x02\u016F\u0170\x05\f\x05\x02\u0170\u0171\x05 \x0F\x02\u0171\u0172" + - "\x05\x1A\f\x02\u0172\u0176\x05\x1E\x0E\x02\u0173\u0175\x05\n\x04\x02\u0174" + - "\u0173\x03\x02\x02\x02\u0175\u0178\x03\x02\x02\x02\u0176\u0174\x03\x02" + - "\x02\x02\u0176\u0177\x03\x02\x02\x02\u0177\u0179\x03\x02\x02\x02\u0178" + - "\u0176\x03\x02\x02\x02\u0179\u017A\x07<\x02\x02\u017A\u017B\x06,\b\x02" + - "\u017B\u017C\b,\x10\x02\u017C[\x03\x02\x02\x02\u017D\u017E\x07b\x02\x02" + - "\u017E\u017F\x07b\x02\x02\u017F\u0180\x07b\x02\x02\u0180\u0184\x03\x02" + - "\x02\x02\u0181\u0183\v\x02\x02\x02\u0182\u0181\x03\x02\x02\x02\u0183\u0186" + - "\x03\x02\x02\x02\u0184\u0185\x03\x02\x02\x02\u0184\u0182\x03\x02\x02\x02" + - "\u0185\u0187\x03\x02\x02\x02\u0186\u0184\x03\x02\x02\x02\u0187\u0188\x07" + - "b\x02\x02\u0188\u0189\x07b\x02\x02\u0189\u018A\x07b\x02\x02\u018A\u018B" + - "\x03\x02\x02\x02\u018B\u018C\b-\x11\x02\u018C]\x03\x02\x02\x02\u018D\u018E" + - "\x07^\x02\x02\u018E\u0197\x07}\x02\x02\u018F\u0190\x07^\x02\x02\u0190" + - "\u0197\x07]\x02\x02\u0191\u0192\x07^\x02\x02\u0192\u0197\x07^\x02\x02" + - "\u0193\u0194\x07^\x02\x02\u0194\u0195\t\x15\x02\x02\u0195\u0197\b.\x12" + - "\x02\u0196\u018D\x03\x02\x02\x02\u0196\u018F\x03\x02\x02\x02\u0196\u0191" + - "\x03\x02\x02\x02\u0196\u0193\x03\x02\x02\x02\u0197_\x03\x02\x02\x02\u0198" + - "\u019A\x07B\x02\x02\u0199\u0198\x03\x02\x02\x02\u0199\u019A\x03\x02\x02" + - "\x02\u019A\u019B\x03\x02\x02\x02\u019B\u01A0\x07}\x02\x02\u019C\u019F" + - "\n\x16\x02\x02\u019D\u019F\x05$\x11\x02\u019E\u019C\x03\x02\x02\x02\u019E" + - "\u019D\x03\x02\x02\x02\u019F\u01A2\x03\x02\x02\x02\u01A0\u01A1\x03\x02" + - "\x02\x02\u01A0\u019E\x03\x02\x02\x02\u01A1\u01A3\x03\x02\x02\x02\u01A2" + - "\u01A0\x03\x02\x02\x02\u01A3\u01A4\x07\x7F\x02\x02\u01A4\u01A5\b/\x13" + - "\x02\u01A5a\x03\x02\x02\x02\u01A6\u01AB\x07]\x02\x02\u01A7\u01AA\n\x17" + - "\x02\x02\u01A8\u01AA\x05b0\x02\u01A9\u01A7\x03\x02\x02\x02\u01A9\u01A8" + - "\x03\x02\x02\x02\u01AA\u01AD\x03\x02\x02\x02\u01AB\u01A9\x03\x02\x02\x02" + - "\u01AB\u01AC\x03\x02\x02\x02\u01AC\u01AE\x03\x02\x02\x02\u01AD\u01AB\x03" + - "\x02\x02\x02\u01AE\u01AF\x07_\x02\x02\u01AF\u01B0\b0\x14\x02\u01B0c\x03" + - "\x02\x02\x02\u01B1\u01B2\t\x18\x02\x02\u01B2\u01B3\b1\x15\x02\u01B3e\x03" + - "\x02\x02\x02\u01B4\u01B6\n\x18\x02\x02\u01B5\u01B4\x03\x02\x02\x02\u01B6" + - "\u01B7\x03\x02\x02\x02\u01B7\u01B8\x03\x02\x02\x02\u01B7\u01B5\x03\x02" + - "\x02\x02\u01B8\u01B9\x03\x02\x02\x02\u01B9\u01BA\b2\x16\x02\u01BAg\x03" + - "\x02\x02\x02\u01BB\u01BD\x05\n\x04\x02\u01BC\u01BB\x03\x02\x02\x02\u01BD" + - "\u01BE\x03\x02\x02\x02\u01BE\u01BC\x03\x02\x02\x02\u01BE\u01BF\x03\x02" + - "\x02\x02\u01BFi\x03\x02\x02\x02\u01C0\u01C4\t\x12\x02\x02\u01C1\u01C3" + - "\n\x13\x02\x02\u01C2\u01C1\x03\x02\x02\x02\u01C3\u01C6\x03\x02\x02\x02" + - "\u01C4\u01C2\x03\x02\x02\x02\u01C4\u01C5\x03\x02\x02\x02\u01C5\u01C8\x03" + - "\x02\x02\x02\u01C6\u01C4\x03\x02\x02\x02\u01C7\u01C9\x07\x0F\x02\x02\u01C8" + - "\u01C7\x03\x02\x02\x02\u01C8\u01C9\x03\x02\x02\x02\u01C9\u01CA\x03\x02" + - "\x02\x02\u01CA\u01CB\x07\f\x02\x02\u01CB\u01CC\x03\x02\x02\x02\u01CC\u01CD" + - "\b4\x02\x02\u01CDk\x03\x02\x02\x02\u01CE\u01D0\x07\x0F\x02\x02\u01CF\u01CE" + - "\x03\x02\x02\x02\u01CF\u01D0\x03\x02\x02\x02\u01D0\u01D1\x03\x02\x02\x02" + - "\u01D1\u01D2\x07\f\x02\x02\u01D2m\x03\x02\x02\x02\u01D3\u01D5\x05h3\x02" + - "\u01D4\u01D3\x03\x02\x02\x02\u01D4\u01D5\x03\x02\x02\x02\u01D5\u01D6\x03" + - "\x02\x02\x02\u01D6\u01D8\x052\x18\x02\u01D7\u01D9\x05h3\x02\u01D8\u01D7" + - "\x03\x02\x02\x02\u01D8\u01D9\x03\x02\x02\x02\u01D9\u01DA\x03\x02\x02\x02" + - "\u01DA\u01DB\b6\b\x02\u01DBo\x03\x02\x02\x02\u01DC\u01DE\n\x13\x02\x02" + - "\u01DD\u01DC\x03\x02\x02\x02\u01DE\u01DF\x03\x02\x02\x02\u01DF\u01DD\x03" + - "\x02\x02\x02\u01DF\u01E0\x03\x02\x02\x02\u01E0q\x03\x02\x02\x02.\x02\x03" + - "\x04\x05\x94\x9C\xA0\xA6\xA9\xB0\xB5\xCC\xD5\xDF\xE4\xEE\xF3\xF5\u0103" + - "\u0108\u0111\u0116\u0123\u0131\u0139\u0147\u0157\u0165\u0176\u0184\u0196" + - "\u0199\u019E\u01A0\u01A9\u01AB\u01B7\u01BE\u01C4\u01C8\u01CF\u01D4\u01D8" + - "\u01DF\x17\b\x02\x02\x07\x03\x02\x03\x16\x02\x07\x04\x02\x07\x05\x02\t" + - "\x05\x02\x06\x02\x02\t\x04\x02\x03&\x03\x03\'\x04\x03(\x05\x03)\x06\x03" + - "*\x07\x03+\b\x03,\t\x03-\n\x03.\v\x03/\f\x030\r\x031\x0E\x032\x0F"; - public static __ATN: ATN; - public static get _ATN(): ATN { - if (!LGFileLexer.__ATN) { - LGFileLexer.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(LGFileLexer._serializedATN)); - } - - return LGFileLexer.__ATN; - } - -} - +/** + * @module botbuilder-lg + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// Generated from ../LGFileLexer.g4 by ANTLR 4.6-SNAPSHOT + + +import { ATN } from "antlr4ts/atn/ATN"; +import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; +import { CharStream } from "antlr4ts/CharStream"; +import { Lexer } from "antlr4ts/Lexer"; +import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; +import { NotNull } from "antlr4ts/Decorators"; +import { Override } from "antlr4ts/Decorators"; +import { RuleContext } from "antlr4ts/RuleContext"; +import { Vocabulary } from "antlr4ts/Vocabulary"; +import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; + +import * as Utils from "antlr4ts/misc/Utils"; + + +export class LGFileLexer extends Lexer { + public static readonly COMMENTS = 1; + public static readonly WS = 2; + public static readonly NEWLINE = 3; + public static readonly HASH = 4; + public static readonly DASH = 5; + public static readonly LEFT_SQUARE_BRACKET = 6; + public static readonly RIGHT_SQUARE_BRACKET = 7; + public static readonly IMPORT_DESC = 8; + public static readonly IMPORT_PATH = 9; + public static readonly INVALID_TOKEN_DEFAULT_MODE = 10; + public static readonly WS_IN_NAME = 11; + public static readonly IDENTIFIER = 12; + public static readonly DOT = 13; + public static readonly OPEN_PARENTHESIS = 14; + public static readonly CLOSE_PARENTHESIS = 15; + public static readonly COMMA = 16; + public static readonly TEXT_IN_NAME = 17; + public static readonly WS_IN_BODY_IGNORED = 18; + public static readonly IF = 19; + public static readonly ELSEIF = 20; + public static readonly ELSE = 21; + public static readonly SWITCH = 22; + public static readonly CASE = 23; + public static readonly DEFAULT = 24; + public static readonly MULTI_LINE_TEXT = 25; + public static readonly ESCAPE_CHARACTER = 26; + public static readonly EXPRESSION = 27; + public static readonly TEMPLATE_REF = 28; + public static readonly TEXT_SEPARATOR = 29; + public static readonly TEXT = 30; + public static readonly WS_IN_STRUCTURED = 31; + public static readonly STRUCTURED_COMMENTS = 32; + public static readonly STRUCTURED_NEWLINE = 33; + public static readonly STRUCTURED_TEMPLATE_BODY_END = 34; + public static readonly STRUCTURED_CONTENT = 35; + public static readonly TEMPLATE_NAME_MODE = 1; + public static readonly TEMPLATE_BODY_MODE = 2; + public static readonly STRUCTURED_TEMPLATE_BODY_MODE = 3; + // tslint:disable:no-trailing-whitespace + public static readonly modeNames: string[] = [ + "DEFAULT_MODE", "TEMPLATE_NAME_MODE", "TEMPLATE_BODY_MODE", "STRUCTURED_TEMPLATE_BODY_MODE", + ]; + + public static readonly ruleNames: string[] = [ + "LETTER", "NUMBER", "WHITESPACE", "A", "C", "D", "E", "F", "H", "I", "L", + "S", "T", "U", "W", "STRING_LITERAL", "COMMENTS", "WS", "NEWLINE", "HASH", + "DASH", "LEFT_SQUARE_BRACKET", "RIGHT_SQUARE_BRACKET", "IMPORT_DESC", + "IMPORT_PATH", "INVALID_TOKEN_DEFAULT_MODE", "WS_IN_NAME", "NEWLINE_IN_NAME", + "IDENTIFIER", "DOT", "OPEN_PARENTHESIS", "CLOSE_PARENTHESIS", "COMMA", + "TEXT_IN_NAME", "WS_IN_BODY_IGNORED", "WS_IN_BODY", "NEWLINE_IN_BODY", + "IF", "ELSEIF", "ELSE", "SWITCH", "CASE", "DEFAULT", "MULTI_LINE_TEXT", + "ESCAPE_CHARACTER", "EXPRESSION", "TEMPLATE_REF", "TEXT_SEPARATOR", "TEXT", + "WS_IN_STRUCTURED", "STRUCTURED_COMMENTS", "STRUCTURED_NEWLINE", "STRUCTURED_TEMPLATE_BODY_END", + "STRUCTURED_CONTENT", + ]; + + private static readonly _LITERAL_NAMES: Array = [ + undefined, undefined, undefined, undefined, "'#'", undefined, "'['", "']'", + undefined, undefined, undefined, undefined, undefined, "'.'", "'('", "')'", + "','", + ]; + private static readonly _SYMBOLIC_NAMES: Array = [ + undefined, "COMMENTS", "WS", "NEWLINE", "HASH", "DASH", "LEFT_SQUARE_BRACKET", + "RIGHT_SQUARE_BRACKET", "IMPORT_DESC", "IMPORT_PATH", "INVALID_TOKEN_DEFAULT_MODE", + "WS_IN_NAME", "IDENTIFIER", "DOT", "OPEN_PARENTHESIS", "CLOSE_PARENTHESIS", + "COMMA", "TEXT_IN_NAME", "WS_IN_BODY_IGNORED", "IF", "ELSEIF", "ELSE", + "SWITCH", "CASE", "DEFAULT", "MULTI_LINE_TEXT", "ESCAPE_CHARACTER", "EXPRESSION", + "TEMPLATE_REF", "TEXT_SEPARATOR", "TEXT", "WS_IN_STRUCTURED", "STRUCTURED_COMMENTS", + "STRUCTURED_NEWLINE", "STRUCTURED_TEMPLATE_BODY_END", "STRUCTURED_CONTENT", + ]; + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(LGFileLexer._LITERAL_NAMES, LGFileLexer._SYMBOLIC_NAMES, []); + + // @Override + // @NotNull + public get vocabulary(): Vocabulary { + return LGFileLexer.VOCABULARY; + } + // tslint:enable:no-trailing-whitespace + + + ignoreWS = true; // usually we ignore whitespace, but inside template, whitespace is significant + expectKeywords = false; // whether we are expecting IF/ELSEIF/ELSE or Switch/Case/Default keywords + + + constructor(input: CharStream) { + super(input); + this._interp = new LexerATNSimulator(LGFileLexer._ATN, this); + } + + // @Override + public get grammarFileName(): string { return "LGFileLexer.g4"; } + + // @Override + public get ruleNames(): string[] { return LGFileLexer.ruleNames; } + + // @Override + public get serializedATN(): string { return LGFileLexer._serializedATN; } + + // @Override + public get modeNames(): string[] { return LGFileLexer.modeNames; } + + // @Override + public action(_localctx: RuleContext, ruleIndex: number, actionIndex: number): void { + switch (ruleIndex) { + case 20: + this.DASH_action(_localctx, actionIndex); + break; + + case 36: + this.NEWLINE_IN_BODY_action(_localctx, actionIndex); + break; + + case 37: + this.IF_action(_localctx, actionIndex); + break; + + case 38: + this.ELSEIF_action(_localctx, actionIndex); + break; + + case 39: + this.ELSE_action(_localctx, actionIndex); + break; + + case 40: + this.SWITCH_action(_localctx, actionIndex); + break; + + case 41: + this.CASE_action(_localctx, actionIndex); + break; + + case 42: + this.DEFAULT_action(_localctx, actionIndex); + break; + + case 43: + this.MULTI_LINE_TEXT_action(_localctx, actionIndex); + break; + + case 44: + this.ESCAPE_CHARACTER_action(_localctx, actionIndex); + break; + + case 45: + this.EXPRESSION_action(_localctx, actionIndex); + break; + + case 46: + this.TEMPLATE_REF_action(_localctx, actionIndex); + break; + + case 47: + this.TEXT_SEPARATOR_action(_localctx, actionIndex); + break; + + case 48: + this.TEXT_action(_localctx, actionIndex); + break; + } + } + private DASH_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 0: + this.expectKeywords = true; + break; + } + } + private NEWLINE_IN_BODY_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 1: + this.ignoreWS = true; + break; + } + } + private IF_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 2: + this.ignoreWS = true; + break; + } + } + private ELSEIF_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 3: + this.ignoreWS = true; + break; + } + } + private ELSE_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 4: + this.ignoreWS = true; + break; + } + } + private SWITCH_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 5: + this.ignoreWS = true; + break; + } + } + private CASE_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 6: + this.ignoreWS = true; + break; + } + } + private DEFAULT_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 7: + this.ignoreWS = true; + break; + } + } + private MULTI_LINE_TEXT_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 8: + this.ignoreWS = false; this.expectKeywords = false; + break; + } + } + private ESCAPE_CHARACTER_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 9: + this.ignoreWS = false; this.expectKeywords = false; + break; + } + } + private EXPRESSION_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 10: + this.ignoreWS = false; this.expectKeywords = false; + break; + } + } + private TEMPLATE_REF_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 11: + this.ignoreWS = false; this.expectKeywords = false; + break; + } + } + private TEXT_SEPARATOR_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 12: + this.ignoreWS = false; this.expectKeywords = false; + break; + } + } + private TEXT_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 13: + this.ignoreWS = false; this.expectKeywords = false; + break; + } + } + // @Override + public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { + switch (ruleIndex) { + case 34: + return this.WS_IN_BODY_IGNORED_sempred(_localctx, predIndex); + + case 37: + return this.IF_sempred(_localctx, predIndex); + + case 38: + return this.ELSEIF_sempred(_localctx, predIndex); + + case 39: + return this.ELSE_sempred(_localctx, predIndex); + + case 40: + return this.SWITCH_sempred(_localctx, predIndex); + + case 41: + return this.CASE_sempred(_localctx, predIndex); + + case 42: + return this.DEFAULT_sempred(_localctx, predIndex); + } + return true; + } + private WS_IN_BODY_IGNORED_sempred(_localctx: RuleContext, predIndex: number): boolean { + switch (predIndex) { + case 0: + return this.ignoreWS; + } + return true; + } + private IF_sempred(_localctx: RuleContext, predIndex: number): boolean { + switch (predIndex) { + case 1: + return this.expectKeywords; + } + return true; + } + private ELSEIF_sempred(_localctx: RuleContext, predIndex: number): boolean { + switch (predIndex) { + case 2: + return this.expectKeywords; + } + return true; + } + private ELSE_sempred(_localctx: RuleContext, predIndex: number): boolean { + switch (predIndex) { + case 3: + return this.expectKeywords; + } + return true; + } + private SWITCH_sempred(_localctx: RuleContext, predIndex: number): boolean { + switch (predIndex) { + case 4: + return this.expectKeywords; + } + return true; + } + private CASE_sempred(_localctx: RuleContext, predIndex: number): boolean { + switch (predIndex) { + case 5: + return this.expectKeywords; + } + return true; + } + private DEFAULT_sempred(_localctx: RuleContext, predIndex: number): boolean { + switch (predIndex) { + case 6: + return this.expectKeywords; + } + return true; + } + + public static readonly _serializedATN: string = + "\x03\uAF6F\u8320\u479D\uB75C\u4880\u1605\u191C\uAB37\x02%\u01E1\b\x01" + + "\b\x01\b\x01\b\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t" + + "\x05\x04\x06\t\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t" + + "\v\x04\f\t\f\x04\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11" + + "\t\x11\x04\x12\t\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16" + + "\t\x16\x04\x17\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B" + + "\t\x1B\x04\x1C\t\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t" + + " \x04!\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(" + + "\x04)\t)\x04*\t*\x04+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041" + + "\t1\x042\t2\x043\t3\x044\t4\x045\t5\x046\t6\x047\t7\x03\x02\x03\x02\x03" + + "\x03\x03\x03\x03\x04\x03\x04\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03" + + "\x07\x03\b\x03\b\x03\t\x03\t\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\r" + + "\x03\r\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x11\x03\x11" + + "\x07\x11\x93\n\x11\f\x11\x0E\x11\x96\v\x11\x03\x11\x03\x11\x03\x11\x07" + + "\x11\x9B\n\x11\f\x11\x0E\x11\x9E\v\x11\x03\x11\x05\x11\xA1\n\x11\x03\x12" + + "\x03\x12\x06\x12\xA5\n\x12\r\x12\x0E\x12\xA6\x03\x12\x05\x12\xAA\n\x12" + + "\x03\x12\x03\x12\x03\x13\x06\x13\xAF\n\x13\r\x13\x0E\x13\xB0\x03\x13\x03" + + "\x13\x03\x14\x05\x14\xB6\n\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15" + + "\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17" + + "\x03\x17\x03\x18\x03\x18\x03\x19\x03\x19\x07\x19\xCB\n\x19\f\x19\x0E\x19" + + "\xCE\v\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x07\x1A\xD4\n\x1A\f\x1A\x0E" + + "\x1A\xD7\v\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1C\x06\x1C\xDE\n\x1C" + + "\r\x1C\x0E\x1C\xDF\x03\x1C\x03\x1C\x03\x1D\x05\x1D\xE5\n\x1D\x03\x1D\x03" + + "\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x05\x1E\xEF\n\x1E" + + "\x03\x1E\x03\x1E\x03\x1E\x07\x1E\xF4\n\x1E\f\x1E\x0E\x1E\xF7\v\x1E\x03" + + "\x1F\x03\x1F\x03 \x03 \x03!\x03!\x03\"\x03\"\x03#\x06#\u0102\n#\r#\x0E" + + "#\u0103\x03$\x06$\u0107\n$\r$\x0E$\u0108\x03$\x03$\x03$\x03$\x03%\x06" + + "%\u0110\n%\r%\x0E%\u0111\x03%\x03%\x03&\x05&\u0117\n&\x03&\x03&\x03&\x03" + + "&\x03&\x03&\x03\'\x03\'\x03\'\x07\'\u0122\n\'\f\'\x0E\'\u0125\v\'\x03" + + "\'\x03\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x07(\u0130\n(\f(\x0E(\u0133" + + "\v(\x03(\x03(\x03(\x07(\u0138\n(\f(\x0E(\u013B\v(\x03(\x03(\x03(\x03(" + + "\x03)\x03)\x03)\x03)\x03)\x07)\u0146\n)\f)\x0E)\u0149\v)\x03)\x03)\x03" + + ")\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x07*\u0156\n*\f*\x0E*\u0159" + + "\v*\x03*\x03*\x03*\x03*\x03+\x03+\x03+\x03+\x03+\x07+\u0164\n+\f+\x0E" + + "+\u0167\v+\x03+\x03+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03" + + ",\x07,\u0175\n,\f,\x0E,\u0178\v,\x03,\x03,\x03,\x03,\x03-\x03-\x03-\x03" + + "-\x03-\x07-\u0183\n-\f-\x0E-\u0186\v-\x03-\x03-\x03-\x03-\x03-\x03-\x03" + + ".\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x05.\u0197\n.\x03/\x05/\u019A" + + "\n/\x03/\x03/\x03/\x07/\u019F\n/\f/\x0E/\u01A2\v/\x03/\x03/\x03/\x030" + + "\x030\x030\x070\u01AA\n0\f0\x0E0\u01AD\v0\x030\x030\x030\x031\x031\x03" + + "1\x032\x062\u01B6\n2\r2\x0E2\u01B7\x032\x032\x033\x063\u01BD\n3\r3\x0E" + + "3\u01BE\x034\x034\x074\u01C3\n4\f4\x0E4\u01C6\v4\x034\x054\u01C9\n4\x03" + + "4\x034\x034\x034\x035\x055\u01D0\n5\x035\x035\x036\x056\u01D5\n6\x036" + + "\x036\x056\u01D9\n6\x036\x036\x037\x067\u01DE\n7\r7\x0E7\u01DF\b\xCC\xD5" + + "\u0103\u0184\u01A0\u01B7\x02\x028\x06\x02\x02\b\x02\x02\n\x02\x02\f\x02" + + "\x02\x0E\x02\x02\x10\x02\x02\x12\x02\x02\x14\x02\x02\x16\x02\x02\x18\x02" + + "\x02\x1A\x02\x02\x1C\x02\x02\x1E\x02\x02 \x02\x02\"\x02\x02$\x02\x02&" + + "\x02\x03(\x02\x04*\x02\x05,\x02\x06.\x02\x070\x02\b2\x02\t4\x02\n6\x02" + + "\v8\x02\f:\x02\r<\x02\x02>\x02\x0E@\x02\x0FB\x02\x10D\x02\x11F\x02\x12" + + "H\x02\x13J\x02\x14L\x02\x02N\x02\x02P\x02\x15R\x02\x16T\x02\x17V\x02\x18" + + "X\x02\x19Z\x02\x1A\\\x02\x1B^\x02\x1C`\x02\x1Db\x02\x1Ed\x02\x1Ff\x02" + + " h\x02!j\x02\"l\x02#n\x02$p\x02%\x06\x02\x03\x04\x05\x19\x04\x02C\\c|" + + "\x06\x02\v\v\"\"\xA2\xA2\uFF01\uFF01\x04\x02CCcc\x04\x02EEee\x04\x02F" + + "Fff\x04\x02GGgg\x04\x02HHhh\x04\x02JJjj\x04\x02KKkk\x04\x02NNnn\x04\x02" + + "UUuu\x04\x02VVvv\x04\x02WWww\x04\x02YYyy\x05\x02\f\f\x0F\x0F))\x05\x02" + + "\f\f\x0F\x0F$$\x04\x02&&@@\x04\x02\f\f\x0F\x0F\x04\x02//aa\x07\x02__p" + + "pttvv\x7F\x7F\b\x02\f\f\x0F\x0F$$))}}\x7F\x7F\x06\x02\f\f\x0F\x0F]]__" + + "\t\x02\v\f\x0F\x0F*+]]__}}\x7F\x7F\u01F9\x02&\x03\x02\x02\x02\x02(\x03" + + "\x02\x02\x02\x02*\x03\x02\x02\x02\x02,\x03\x02\x02\x02\x02.\x03\x02\x02" + + "\x02\x020\x03\x02\x02\x02\x022\x03\x02\x02\x02\x024\x03\x02\x02\x02\x02" + + "6\x03\x02\x02\x02\x028\x03\x02\x02\x02\x03:\x03\x02\x02\x02\x03<\x03\x02" + + "\x02\x02\x03>\x03\x02\x02\x02\x03@\x03\x02\x02\x02\x03B\x03\x02\x02\x02" + + "\x03D\x03\x02\x02\x02\x03F\x03\x02\x02\x02\x03H\x03\x02\x02\x02\x04J\x03" + + "\x02\x02\x02\x04L\x03\x02\x02\x02\x04N\x03\x02\x02\x02\x04P\x03\x02\x02" + + "\x02\x04R\x03\x02\x02\x02\x04T\x03\x02\x02\x02\x04V\x03\x02\x02\x02\x04" + + "X\x03\x02\x02\x02\x04Z\x03\x02\x02\x02\x04\\\x03\x02\x02\x02\x04^\x03" + + "\x02\x02\x02\x04`\x03\x02\x02\x02\x04b\x03\x02\x02\x02\x04d\x03\x02\x02" + + "\x02\x04f\x03\x02\x02\x02\x05h\x03\x02\x02\x02\x05j\x03\x02\x02\x02\x05" + + "l\x03\x02\x02\x02\x05n\x03\x02\x02\x02\x05p\x03\x02\x02\x02\x06r\x03\x02" + + "\x02\x02\bt\x03\x02\x02\x02\nv\x03\x02\x02\x02\fx\x03\x02\x02\x02\x0E" + + "z\x03\x02\x02\x02\x10|\x03\x02\x02\x02\x12~\x03\x02\x02\x02\x14\x80\x03" + + "\x02\x02\x02\x16\x82\x03\x02\x02\x02\x18\x84\x03\x02\x02\x02\x1A\x86\x03" + + "\x02\x02\x02\x1C\x88\x03\x02\x02\x02\x1E\x8A\x03\x02\x02\x02 \x8C\x03" + + "\x02\x02\x02\"\x8E\x03\x02\x02\x02$\xA0\x03\x02\x02\x02&\xA2\x03\x02\x02" + + "\x02(\xAE\x03\x02\x02\x02*\xB5\x03\x02\x02\x02,\xB9\x03\x02\x02\x02.\xBD" + + "\x03\x02\x02\x020\xC2\x03\x02\x02\x022\xC6\x03\x02\x02\x024\xC8\x03\x02" + + "\x02\x026\xD1\x03\x02\x02\x028\xDA\x03\x02\x02\x02:\xDD\x03\x02\x02\x02" + + "<\xE4\x03\x02\x02\x02>\xEE\x03\x02\x02\x02@\xF8\x03\x02\x02\x02B\xFA\x03" + + "\x02\x02\x02D\xFC\x03\x02\x02\x02F\xFE\x03\x02\x02\x02H\u0101\x03\x02" + + "\x02\x02J\u0106\x03\x02\x02\x02L\u010F\x03\x02\x02\x02N\u0116\x03\x02" + + "\x02\x02P\u011E\x03\x02\x02\x02R\u012A\x03\x02\x02\x02T\u0140\x03\x02" + + "\x02\x02V\u014E\x03\x02\x02\x02X\u015E\x03\x02\x02\x02Z\u016C\x03\x02" + + "\x02\x02\\\u017D\x03\x02\x02\x02^\u0196\x03\x02\x02\x02`\u0199\x03\x02" + + "\x02\x02b\u01A6\x03\x02\x02\x02d\u01B1\x03\x02\x02\x02f\u01B5\x03\x02" + + "\x02\x02h\u01BC\x03\x02\x02\x02j\u01C0\x03\x02\x02\x02l\u01CF\x03\x02" + + "\x02\x02n\u01D4\x03\x02\x02\x02p\u01DD\x03\x02\x02\x02rs\t\x02\x02\x02" + + "s\x07\x03\x02\x02\x02tu\x042;\x02u\t\x03\x02\x02\x02vw\t\x03\x02\x02w" + + "\v\x03\x02\x02\x02xy\t\x04\x02\x02y\r\x03\x02\x02\x02z{\t\x05\x02\x02" + + "{\x0F\x03\x02\x02\x02|}\t\x06\x02\x02}\x11\x03\x02\x02\x02~\x7F\t\x07" + + "\x02\x02\x7F\x13\x03\x02\x02\x02\x80\x81\t\b\x02\x02\x81\x15\x03\x02\x02" + + "\x02\x82\x83\t\t\x02\x02\x83\x17\x03\x02\x02\x02\x84\x85\t\n\x02\x02\x85" + + "\x19\x03\x02\x02\x02\x86\x87\t\v\x02\x02\x87\x1B\x03\x02\x02\x02\x88\x89" + + "\t\f\x02\x02\x89\x1D\x03\x02\x02\x02\x8A\x8B\t\r\x02\x02\x8B\x1F\x03\x02" + + "\x02\x02\x8C\x8D\t\x0E\x02\x02\x8D!\x03\x02\x02\x02\x8E\x8F\t\x0F\x02" + + "\x02\x8F#\x03\x02\x02\x02\x90\x94\x07)\x02\x02\x91\x93\n\x10\x02\x02\x92" + + "\x91\x03\x02\x02\x02\x93\x96\x03\x02\x02\x02\x94\x92\x03\x02\x02\x02\x94" + + "\x95\x03\x02\x02\x02\x95\x97\x03\x02\x02\x02\x96\x94\x03\x02\x02\x02\x97" + + "\xA1\x07)\x02\x02\x98\x9C\x07$\x02\x02\x99\x9B\n\x11\x02\x02\x9A\x99\x03" + + "\x02\x02\x02\x9B\x9E\x03\x02\x02\x02\x9C\x9A\x03\x02\x02\x02\x9C\x9D\x03" + + "\x02\x02\x02\x9D\x9F\x03\x02\x02\x02\x9E\x9C\x03\x02\x02\x02\x9F\xA1\x07" + + "$\x02\x02\xA0\x90\x03\x02\x02\x02\xA0\x98\x03\x02\x02\x02\xA1%\x03\x02" + + "\x02\x02\xA2\xA4\t\x12\x02\x02\xA3\xA5\n\x13\x02\x02\xA4\xA3\x03\x02\x02" + + "\x02\xA5\xA6\x03\x02\x02\x02\xA6\xA4\x03\x02\x02\x02\xA6\xA7\x03\x02\x02" + + "\x02\xA7\xA9\x03\x02\x02\x02\xA8\xAA\x05*\x14\x02\xA9\xA8\x03\x02\x02" + + "\x02\xA9\xAA\x03\x02\x02\x02\xAA\xAB\x03\x02\x02\x02\xAB\xAC\b\x12\x02" + + "\x02\xAC\'\x03\x02\x02\x02\xAD\xAF\x05\n\x04\x02\xAE\xAD\x03\x02\x02\x02" + + "\xAF\xB0\x03\x02\x02\x02\xB0\xAE\x03\x02\x02\x02\xB0\xB1\x03\x02\x02\x02" + + "\xB1\xB2\x03\x02\x02\x02\xB2\xB3\b\x13\x02\x02\xB3)\x03\x02\x02\x02\xB4" + + "\xB6\x07\x0F\x02\x02\xB5\xB4\x03\x02\x02\x02\xB5\xB6\x03\x02\x02\x02\xB6" + + "\xB7\x03\x02\x02\x02\xB7\xB8\x07\f\x02\x02\xB8+\x03\x02\x02\x02\xB9\xBA" + + "\x07%\x02\x02\xBA\xBB\x03\x02\x02\x02\xBB\xBC\b\x15\x03\x02\xBC-\x03\x02" + + "\x02\x02\xBD\xBE\x07/\x02\x02\xBE\xBF\b\x16\x04\x02\xBF\xC0\x03\x02\x02" + + "\x02\xC0\xC1\b\x16\x05\x02\xC1/\x03\x02\x02\x02\xC2\xC3\x07]\x02\x02\xC3" + + "\xC4\x03\x02\x02\x02\xC4\xC5\b\x17\x06\x02\xC51\x03\x02\x02\x02\xC6\xC7" + + "\x07_\x02\x02\xC73\x03\x02\x02\x02\xC8\xCC\x07]\x02\x02\xC9\xCB\n\x13" + + "\x02\x02\xCA\xC9\x03\x02\x02\x02\xCB\xCE\x03\x02\x02\x02\xCC\xCD\x03\x02" + + "\x02\x02\xCC\xCA\x03\x02\x02\x02\xCD\xCF\x03\x02\x02\x02\xCE\xCC\x03\x02" + + "\x02\x02\xCF\xD0\x07_\x02\x02\xD05\x03\x02\x02\x02\xD1\xD5\x07*\x02\x02" + + "\xD2\xD4\n\x13\x02\x02\xD3\xD2\x03\x02\x02\x02\xD4\xD7\x03\x02\x02\x02" + + "\xD5\xD6\x03\x02\x02\x02\xD5\xD3\x03\x02\x02\x02\xD6\xD8\x03\x02\x02\x02" + + "\xD7\xD5\x03\x02\x02\x02\xD8\xD9\x07+\x02\x02\xD97\x03\x02\x02\x02\xDA" + + "\xDB\v\x02\x02\x02\xDB9\x03\x02\x02\x02\xDC\xDE\x05\n\x04\x02\xDD\xDC" + + "\x03\x02\x02\x02\xDE\xDF\x03\x02\x02\x02\xDF\xDD\x03\x02\x02\x02\xDF\xE0" + + "\x03\x02\x02\x02\xE0\xE1\x03\x02\x02\x02\xE1\xE2\b\x1C\x02\x02\xE2;\x03" + + "\x02\x02\x02\xE3\xE5\x07\x0F\x02\x02\xE4\xE3\x03\x02\x02\x02\xE4\xE5\x03" + + "\x02\x02\x02\xE5\xE6\x03\x02\x02\x02\xE6\xE7\x07\f\x02\x02\xE7\xE8\x03" + + "\x02\x02\x02\xE8\xE9\b\x1D\x07\x02\xE9\xEA\b\x1D\b\x02\xEA=\x03\x02\x02" + + "\x02\xEB\xEF\x05\x06\x02\x02\xEC\xEF\x05\b\x03\x02\xED\xEF\x07a\x02\x02" + + "\xEE\xEB\x03\x02\x02\x02\xEE\xEC\x03\x02\x02\x02\xEE\xED\x03\x02\x02\x02" + + "\xEF\xF5\x03\x02\x02\x02\xF0\xF4\x05\x06\x02\x02\xF1\xF4\x05\b\x03\x02" + + "\xF2\xF4\t\x14\x02\x02\xF3\xF0\x03\x02\x02\x02\xF3\xF1\x03\x02\x02\x02" + + "\xF3\xF2\x03\x02\x02\x02\xF4\xF7\x03\x02\x02\x02\xF5\xF3\x03\x02\x02\x02" + + "\xF5\xF6\x03\x02\x02\x02\xF6?\x03\x02\x02\x02\xF7\xF5\x03\x02\x02\x02" + + "\xF8\xF9\x070\x02\x02\xF9A\x03\x02\x02\x02\xFA\xFB\x07*\x02\x02\xFBC\x03" + + "\x02\x02\x02\xFC\xFD\x07+\x02\x02\xFDE\x03\x02\x02\x02\xFE\xFF\x07.\x02" + + "\x02\xFFG\x03\x02\x02\x02\u0100\u0102\n\x13\x02\x02\u0101\u0100\x03\x02" + + "\x02\x02\u0102\u0103\x03\x02\x02\x02\u0103\u0104\x03\x02\x02\x02\u0103" + + "\u0101\x03\x02\x02\x02\u0104I\x03\x02\x02\x02\u0105\u0107\x05\n\x04\x02" + + "\u0106\u0105\x03\x02\x02\x02\u0107\u0108\x03\x02\x02\x02\u0108\u0106\x03" + + "\x02\x02\x02\u0108\u0109\x03\x02\x02\x02\u0109\u010A\x03\x02\x02\x02\u010A" + + "\u010B\x06$\x02\x02\u010B\u010C\x03\x02\x02\x02\u010C\u010D\b$\x02\x02" + + "\u010DK\x03\x02\x02\x02\u010E\u0110\x05\n\x04\x02\u010F\u010E\x03\x02" + + "\x02\x02\u0110\u0111\x03\x02\x02\x02\u0111\u010F\x03\x02\x02\x02\u0111" + + "\u0112\x03\x02\x02\x02\u0112\u0113\x03\x02\x02\x02\u0113\u0114\b%\t\x02" + + "\u0114M\x03\x02\x02\x02\u0115\u0117\x07\x0F\x02\x02\u0116\u0115\x03\x02" + + "\x02\x02\u0116\u0117\x03\x02\x02\x02\u0117\u0118\x03\x02\x02\x02\u0118" + + "\u0119\x07\f\x02\x02\u0119\u011A\b&\n\x02\u011A\u011B\x03\x02\x02\x02" + + "\u011B\u011C\b&\x07\x02\u011C\u011D\b&\b\x02\u011DO\x03\x02\x02\x02\u011E" + + "\u011F\x05\x18\v\x02\u011F\u0123\x05\x14\t\x02\u0120\u0122\x05\n\x04\x02" + + "\u0121\u0120\x03\x02\x02\x02\u0122\u0125\x03\x02\x02\x02\u0123\u0121\x03" + + "\x02\x02\x02\u0123\u0124\x03\x02\x02\x02\u0124\u0126\x03\x02\x02\x02\u0125" + + "\u0123\x03\x02\x02\x02\u0126\u0127\x07<\x02\x02\u0127\u0128\x06\'\x03" + + "\x02\u0128\u0129\b\'\v\x02\u0129Q\x03\x02\x02\x02\u012A\u012B\x05\x12" + + "\b\x02\u012B\u012C\x05\x1A\f\x02\u012C\u012D\x05\x1C\r\x02\u012D\u0131" + + "\x05\x12\b\x02\u012E\u0130\x05\n\x04\x02\u012F\u012E\x03\x02\x02\x02\u0130" + + "\u0133\x03\x02\x02\x02\u0131\u012F\x03\x02\x02\x02\u0131\u0132\x03\x02" + + "\x02\x02\u0132\u0134\x03\x02\x02\x02\u0133\u0131\x03\x02\x02\x02\u0134" + + "\u0135\x05\x18\v\x02\u0135\u0139\x05\x14\t\x02\u0136\u0138\x05\n\x04\x02" + + "\u0137\u0136\x03\x02\x02\x02\u0138\u013B\x03\x02\x02\x02\u0139\u0137\x03" + + "\x02\x02\x02\u0139\u013A\x03\x02\x02\x02\u013A\u013C\x03\x02\x02\x02\u013B" + + "\u0139\x03\x02\x02\x02\u013C\u013D\x07<\x02\x02\u013D\u013E\x06(\x04\x02" + + "\u013E\u013F\b(\f\x02\u013FS\x03\x02\x02\x02\u0140\u0141\x05\x12\b\x02" + + "\u0141\u0142\x05\x1A\f\x02\u0142\u0143\x05\x1C\r\x02\u0143\u0147\x05\x12" + + "\b\x02\u0144\u0146\x05\n\x04\x02\u0145\u0144\x03\x02\x02\x02\u0146\u0149" + + "\x03\x02\x02\x02\u0147\u0145\x03\x02\x02\x02\u0147\u0148\x03\x02\x02\x02" + + "\u0148\u014A\x03\x02\x02\x02\u0149\u0147\x03\x02\x02\x02\u014A\u014B\x07" + + "<\x02\x02\u014B\u014C\x06)\x05\x02\u014C\u014D\b)\r\x02\u014DU\x03\x02" + + "\x02\x02\u014E\u014F\x05\x1C\r\x02\u014F\u0150\x05\"\x10\x02\u0150\u0151" + + "\x05\x18\v\x02\u0151\u0152\x05\x1E\x0E\x02\u0152\u0153\x05\x0E\x06\x02" + + "\u0153\u0157\x05\x16\n\x02\u0154\u0156\x05\n\x04\x02\u0155\u0154\x03\x02" + + "\x02\x02\u0156\u0159\x03\x02\x02\x02\u0157\u0155\x03\x02\x02\x02\u0157" + + "\u0158\x03\x02\x02\x02\u0158\u015A\x03\x02\x02\x02\u0159\u0157\x03\x02" + + "\x02\x02\u015A\u015B\x07<\x02\x02\u015B\u015C\x06*\x06\x02\u015C\u015D" + + "\b*\x0E\x02\u015DW\x03\x02\x02\x02\u015E\u015F\x05\x0E\x06\x02\u015F\u0160" + + "\x05\f\x05\x02\u0160\u0161\x05\x1C\r\x02\u0161\u0165\x05\x12\b\x02\u0162" + + "\u0164\x05\n\x04\x02\u0163\u0162\x03\x02\x02\x02\u0164\u0167\x03\x02\x02" + + "\x02\u0165\u0163\x03\x02\x02\x02\u0165\u0166\x03\x02\x02\x02\u0166\u0168" + + "\x03\x02\x02\x02\u0167\u0165\x03\x02\x02\x02\u0168\u0169\x07<\x02\x02" + + "\u0169\u016A\x06+\x07\x02\u016A\u016B\b+\x0F\x02\u016BY\x03\x02\x02\x02" + + "\u016C\u016D\x05\x10\x07\x02\u016D\u016E\x05\x12\b\x02\u016E\u016F\x05" + + "\x14\t\x02\u016F\u0170\x05\f\x05\x02\u0170\u0171\x05 \x0F\x02\u0171\u0172" + + "\x05\x1A\f\x02\u0172\u0176\x05\x1E\x0E\x02\u0173\u0175\x05\n\x04\x02\u0174" + + "\u0173\x03\x02\x02\x02\u0175\u0178\x03\x02\x02\x02\u0176\u0174\x03\x02" + + "\x02\x02\u0176\u0177\x03\x02\x02\x02\u0177\u0179\x03\x02\x02\x02\u0178" + + "\u0176\x03\x02\x02\x02\u0179\u017A\x07<\x02\x02\u017A\u017B\x06,\b\x02" + + "\u017B\u017C\b,\x10\x02\u017C[\x03\x02\x02\x02\u017D\u017E\x07b\x02\x02" + + "\u017E\u017F\x07b\x02\x02\u017F\u0180\x07b\x02\x02\u0180\u0184\x03\x02" + + "\x02\x02\u0181\u0183\v\x02\x02\x02\u0182\u0181\x03\x02\x02\x02\u0183\u0186" + + "\x03\x02\x02\x02\u0184\u0185\x03\x02\x02\x02\u0184\u0182\x03\x02\x02\x02" + + "\u0185\u0187\x03\x02\x02\x02\u0186\u0184\x03\x02\x02\x02\u0187\u0188\x07" + + "b\x02\x02\u0188\u0189\x07b\x02\x02\u0189\u018A\x07b\x02\x02\u018A\u018B" + + "\x03\x02\x02\x02\u018B\u018C\b-\x11\x02\u018C]\x03\x02\x02\x02\u018D\u018E" + + "\x07^\x02\x02\u018E\u0197\x07}\x02\x02\u018F\u0190\x07^\x02\x02\u0190" + + "\u0197\x07]\x02\x02\u0191\u0192\x07^\x02\x02\u0192\u0197\x07^\x02\x02" + + "\u0193\u0194\x07^\x02\x02\u0194\u0195\t\x15\x02\x02\u0195\u0197\b.\x12" + + "\x02\u0196\u018D\x03\x02\x02\x02\u0196\u018F\x03\x02\x02\x02\u0196\u0191" + + "\x03\x02\x02\x02\u0196\u0193\x03\x02\x02\x02\u0197_\x03\x02\x02\x02\u0198" + + "\u019A\x07B\x02\x02\u0199\u0198\x03\x02\x02\x02\u0199\u019A\x03\x02\x02" + + "\x02\u019A\u019B\x03\x02\x02\x02\u019B\u01A0\x07}\x02\x02\u019C\u019F" + + "\n\x16\x02\x02\u019D\u019F\x05$\x11\x02\u019E\u019C\x03\x02\x02\x02\u019E" + + "\u019D\x03\x02\x02\x02\u019F\u01A2\x03\x02\x02\x02\u01A0\u01A1\x03\x02" + + "\x02\x02\u01A0\u019E\x03\x02\x02\x02\u01A1\u01A3\x03\x02\x02\x02\u01A2" + + "\u01A0\x03\x02\x02\x02\u01A3\u01A4\x07\x7F\x02\x02\u01A4\u01A5\b/\x13" + + "\x02\u01A5a\x03\x02\x02\x02\u01A6\u01AB\x07]\x02\x02\u01A7\u01AA\n\x17" + + "\x02\x02\u01A8\u01AA\x05b0\x02\u01A9\u01A7\x03\x02\x02\x02\u01A9\u01A8" + + "\x03\x02\x02\x02\u01AA\u01AD\x03\x02\x02\x02\u01AB\u01A9\x03\x02\x02\x02" + + "\u01AB\u01AC\x03\x02\x02\x02\u01AC\u01AE\x03\x02\x02\x02\u01AD\u01AB\x03" + + "\x02\x02\x02\u01AE\u01AF\x07_\x02\x02\u01AF\u01B0\b0\x14\x02\u01B0c\x03" + + "\x02\x02\x02\u01B1\u01B2\t\x18\x02\x02\u01B2\u01B3\b1\x15\x02\u01B3e\x03" + + "\x02\x02\x02\u01B4\u01B6\n\x18\x02\x02\u01B5\u01B4\x03\x02\x02\x02\u01B6" + + "\u01B7\x03\x02\x02\x02\u01B7\u01B8\x03\x02\x02\x02\u01B7\u01B5\x03\x02" + + "\x02\x02\u01B8\u01B9\x03\x02\x02\x02\u01B9\u01BA\b2\x16\x02\u01BAg\x03" + + "\x02\x02\x02\u01BB\u01BD\x05\n\x04\x02\u01BC\u01BB\x03\x02\x02\x02\u01BD" + + "\u01BE\x03\x02\x02\x02\u01BE\u01BC\x03\x02\x02\x02\u01BE\u01BF\x03\x02" + + "\x02\x02\u01BFi\x03\x02\x02\x02\u01C0\u01C4\t\x12\x02\x02\u01C1\u01C3" + + "\n\x13\x02\x02\u01C2\u01C1\x03\x02\x02\x02\u01C3\u01C6\x03\x02\x02\x02" + + "\u01C4\u01C2\x03\x02\x02\x02\u01C4\u01C5\x03\x02\x02\x02\u01C5\u01C8\x03" + + "\x02\x02\x02\u01C6\u01C4\x03\x02\x02\x02\u01C7\u01C9\x07\x0F\x02\x02\u01C8" + + "\u01C7\x03\x02\x02\x02\u01C8\u01C9\x03\x02\x02\x02\u01C9\u01CA\x03\x02" + + "\x02\x02\u01CA\u01CB\x07\f\x02\x02\u01CB\u01CC\x03\x02\x02\x02\u01CC\u01CD" + + "\b4\x02\x02\u01CDk\x03\x02\x02\x02\u01CE\u01D0\x07\x0F\x02\x02\u01CF\u01CE" + + "\x03\x02\x02\x02\u01CF\u01D0\x03\x02\x02\x02\u01D0\u01D1\x03\x02\x02\x02" + + "\u01D1\u01D2\x07\f\x02\x02\u01D2m\x03\x02\x02\x02\u01D3\u01D5\x05h3\x02" + + "\u01D4\u01D3\x03\x02\x02\x02\u01D4\u01D5\x03\x02\x02\x02\u01D5\u01D6\x03" + + "\x02\x02\x02\u01D6\u01D8\x052\x18\x02\u01D7\u01D9\x05h3\x02\u01D8\u01D7" + + "\x03\x02\x02\x02\u01D8\u01D9\x03\x02\x02\x02\u01D9\u01DA\x03\x02\x02\x02" + + "\u01DA\u01DB\b6\b\x02\u01DBo\x03\x02\x02\x02\u01DC\u01DE\n\x13\x02\x02" + + "\u01DD\u01DC\x03\x02\x02\x02\u01DE\u01DF\x03\x02\x02\x02\u01DF\u01DD\x03" + + "\x02\x02\x02\u01DF\u01E0\x03\x02\x02\x02\u01E0q\x03\x02\x02\x02.\x02\x03" + + "\x04\x05\x94\x9C\xA0\xA6\xA9\xB0\xB5\xCC\xD5\xDF\xE4\xEE\xF3\xF5\u0103" + + "\u0108\u0111\u0116\u0123\u0131\u0139\u0147\u0157\u0165\u0176\u0184\u0196" + + "\u0199\u019E\u01A0\u01A9\u01AB\u01B7\u01BE\u01C4\u01C8\u01CF\u01D4\u01D8" + + "\u01DF\x17\b\x02\x02\x07\x03\x02\x03\x16\x02\x07\x04\x02\x07\x05\x02\t" + + "\x05\x02\x06\x02\x02\t\x04\x02\x03&\x03\x03\'\x04\x03(\x05\x03)\x06\x03" + + "*\x07\x03+\b\x03,\t\x03-\n\x03.\v\x03/\f\x030\r\x031\x0E\x032\x0F"; + public static __ATN: ATN; + public static get _ATN(): ATN { + if (!LGFileLexer.__ATN) { + LGFileLexer.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(LGFileLexer._serializedATN)); + } + + return LGFileLexer.__ATN; + } + +} + diff --git a/libraries/botbuilder-lg/src/generated/LGFileParser.ts b/libraries/botbuilder-lg/src/generated/LGFileParser.ts index b466a86ec5..c243fa5425 100644 --- a/libraries/botbuilder-lg/src/generated/LGFileParser.ts +++ b/libraries/botbuilder-lg/src/generated/LGFileParser.ts @@ -1,2416 +1,2423 @@ -// Generated from ../LGFileParser.g4 by ANTLR 4.6-SNAPSHOT - - -import { ATN } from "antlr4ts/atn/ATN"; -import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; -import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; -import { NotNull } from "antlr4ts/Decorators"; -import { NoViableAltException } from "antlr4ts/NoViableAltException"; -import { Override } from "antlr4ts/Decorators"; -import { Parser } from "antlr4ts/Parser"; -import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; -import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; -import { RecognitionException } from "antlr4ts/RecognitionException"; -import { RuleContext } from "antlr4ts/RuleContext"; -//import { RuleVersion } from "antlr4ts/RuleVersion"; -import { TerminalNode } from "antlr4ts/tree/TerminalNode"; -import { Token } from "antlr4ts/Token"; -import { TokenStream } from "antlr4ts/TokenStream"; -import { Vocabulary } from "antlr4ts/Vocabulary"; -import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; - -import * as Utils from "antlr4ts/misc/Utils"; - -import { LGFileParserListener } from "./LGFileParserListener"; -import { LGFileParserVisitor } from "./LGFileParserVisitor"; - - -export class LGFileParser extends Parser { - public static readonly COMMENTS = 1; - public static readonly WS = 2; - public static readonly NEWLINE = 3; - public static readonly HASH = 4; - public static readonly DASH = 5; - public static readonly LEFT_SQUARE_BRACKET = 6; - public static readonly RIGHT_SQUARE_BRACKET = 7; - public static readonly IMPORT_DESC = 8; - public static readonly IMPORT_PATH = 9; - public static readonly INVALID_TOKEN_DEFAULT_MODE = 10; - public static readonly WS_IN_NAME = 11; - public static readonly IDENTIFIER = 12; - public static readonly DOT = 13; - public static readonly OPEN_PARENTHESIS = 14; - public static readonly CLOSE_PARENTHESIS = 15; - public static readonly COMMA = 16; - public static readonly TEXT_IN_NAME = 17; - public static readonly WS_IN_BODY_IGNORED = 18; - public static readonly IF = 19; - public static readonly ELSEIF = 20; - public static readonly ELSE = 21; - public static readonly SWITCH = 22; - public static readonly CASE = 23; - public static readonly DEFAULT = 24; - public static readonly MULTI_LINE_TEXT = 25; - public static readonly ESCAPE_CHARACTER = 26; - public static readonly EXPRESSION = 27; - public static readonly TEMPLATE_REF = 28; - public static readonly TEXT_SEPARATOR = 29; - public static readonly TEXT = 30; - public static readonly WS_IN_STRUCTURED = 31; - public static readonly STRUCTURED_COMMENTS = 32; - public static readonly STRUCTURED_NEWLINE = 33; - public static readonly STRUCTURED_TEMPLATE_BODY_END = 34; - public static readonly STRUCTURED_CONTENT = 35; - public static readonly RULE_file = 0; - public static readonly RULE_paragraph = 1; - public static readonly RULE_newline = 2; - public static readonly RULE_templateDefinition = 3; - public static readonly RULE_templateNameLine = 4; - public static readonly RULE_errorTemplateName = 5; - public static readonly RULE_templateName = 6; - public static readonly RULE_parameters = 7; - public static readonly RULE_templateBody = 8; - public static readonly RULE_structuredTemplateBody = 9; - public static readonly RULE_structuredBodyNameLine = 10; - public static readonly RULE_structuredBodyContentLine = 11; - public static readonly RULE_structuredBodyEndLine = 12; - public static readonly RULE_normalTemplateBody = 13; - public static readonly RULE_templateString = 14; - public static readonly RULE_normalTemplateString = 15; - public static readonly RULE_errorTemplateString = 16; - public static readonly RULE_ifElseTemplateBody = 17; - public static readonly RULE_ifConditionRule = 18; - public static readonly RULE_ifCondition = 19; - public static readonly RULE_switchCaseTemplateBody = 20; - public static readonly RULE_switchCaseRule = 21; - public static readonly RULE_switchCaseStat = 22; - public static readonly RULE_importDefinition = 23; - // tslint:disable:no-trailing-whitespace - public static readonly ruleNames: string[] = [ - "file", "paragraph", "newline", "templateDefinition", "templateNameLine", - "errorTemplateName", "templateName", "parameters", "templateBody", "structuredTemplateBody", - "structuredBodyNameLine", "structuredBodyContentLine", "structuredBodyEndLine", - "normalTemplateBody", "templateString", "normalTemplateString", "errorTemplateString", - "ifElseTemplateBody", "ifConditionRule", "ifCondition", "switchCaseTemplateBody", - "switchCaseRule", "switchCaseStat", "importDefinition", - ]; - - private static readonly _LITERAL_NAMES: Array = [ - undefined, undefined, undefined, undefined, "'#'", undefined, "'['", "']'", - undefined, undefined, undefined, undefined, undefined, "'.'", "'('", "')'", - "','", - ]; - private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, "COMMENTS", "WS", "NEWLINE", "HASH", "DASH", "LEFT_SQUARE_BRACKET", - "RIGHT_SQUARE_BRACKET", "IMPORT_DESC", "IMPORT_PATH", "INVALID_TOKEN_DEFAULT_MODE", - "WS_IN_NAME", "IDENTIFIER", "DOT", "OPEN_PARENTHESIS", "CLOSE_PARENTHESIS", - "COMMA", "TEXT_IN_NAME", "WS_IN_BODY_IGNORED", "IF", "ELSEIF", "ELSE", - "SWITCH", "CASE", "DEFAULT", "MULTI_LINE_TEXT", "ESCAPE_CHARACTER", "EXPRESSION", - "TEMPLATE_REF", "TEXT_SEPARATOR", "TEXT", "WS_IN_STRUCTURED", "STRUCTURED_COMMENTS", - "STRUCTURED_NEWLINE", "STRUCTURED_TEMPLATE_BODY_END", "STRUCTURED_CONTENT", - ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(LGFileParser._LITERAL_NAMES, LGFileParser._SYMBOLIC_NAMES, []); - - // @Override - // @NotNull - public get vocabulary(): Vocabulary { - return LGFileParser.VOCABULARY; - } - // tslint:enable:no-trailing-whitespace - - // @Override - public get grammarFileName(): string { return "LGFileParser.g4"; } - - // @Override - public get ruleNames(): string[] { return LGFileParser.ruleNames; } - - // @Override - public get serializedATN(): string { return LGFileParser._serializedATN; } - - constructor(input: TokenStream) { - super(input); - this._interp = new ParserATNSimulator(LGFileParser._ATN, this); - } - // @RuleVersion(0) - public file(): FileContext { - let _localctx: FileContext = new FileContext(this._ctx, this.state); - this.enterRule(_localctx, 0, LGFileParser.RULE_file); - try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 49; - this._errHandler.sync(this); - _alt = 1 + 1; - do { - switch (_alt) { - case 1 + 1: - { - { - this.state = 48; - this.paragraph(); - } - } - break; - default: - throw new NoViableAltException(this); - } - this.state = 51; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 0, this._ctx); - } while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER); - this.state = 53; - this.match(LGFileParser.EOF); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public paragraph(): ParagraphContext { - let _localctx: ParagraphContext = new ParagraphContext(this._ctx, this.state); - this.enterRule(_localctx, 2, LGFileParser.RULE_paragraph); - try { - this.state = 58; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case LGFileParser.EOF: - case LGFileParser.NEWLINE: - this.enterOuterAlt(_localctx, 1); - { - this.state = 55; - this.newline(); - } - break; - case LGFileParser.HASH: - this.enterOuterAlt(_localctx, 2); - { - this.state = 56; - this.templateDefinition(); - } - break; - case LGFileParser.IMPORT_DESC: - this.enterOuterAlt(_localctx, 3); - { - this.state = 57; - this.importDefinition(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public newline(): NewlineContext { - let _localctx: NewlineContext = new NewlineContext(this._ctx, this.state); - this.enterRule(_localctx, 4, LGFileParser.RULE_newline); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 60; - _la = this._input.LA(1); - if (!(_la === LGFileParser.EOF || _la === LGFileParser.NEWLINE)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public templateDefinition(): TemplateDefinitionContext { - let _localctx: TemplateDefinitionContext = new TemplateDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 6, LGFileParser.RULE_templateDefinition); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 62; - this.templateNameLine(); - this.state = 63; - this.newline(); - this.state = 65; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.DASH) | (1 << LGFileParser.LEFT_SQUARE_BRACKET) | (1 << LGFileParser.INVALID_TOKEN_DEFAULT_MODE))) !== 0)) { - { - this.state = 64; - this.templateBody(); - } - } - - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public templateNameLine(): TemplateNameLineContext { - let _localctx: TemplateNameLineContext = new TemplateNameLineContext(this._ctx, this.state); - this.enterRule(_localctx, 8, LGFileParser.RULE_templateNameLine); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 67; - this.match(LGFileParser.HASH); - this.state = 73; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 4, this._ctx) ) { - case 1: - { - { - this.state = 68; - this.templateName(); - this.state = 70; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === LGFileParser.OPEN_PARENTHESIS) { - { - this.state = 69; - this.parameters(); - } - } - - } - } - break; - - case 2: - { - this.state = 72; - this.errorTemplateName(); - } - break; - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public errorTemplateName(): ErrorTemplateNameContext { - let _localctx: ErrorTemplateNameContext = new ErrorTemplateNameContext(this._ctx, this.state); - this.enterRule(_localctx, 10, LGFileParser.RULE_errorTemplateName); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 78; - this._errHandler.sync(this); - _la = this._input.LA(1); - while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.IDENTIFIER) | (1 << LGFileParser.DOT) | (1 << LGFileParser.OPEN_PARENTHESIS) | (1 << LGFileParser.CLOSE_PARENTHESIS) | (1 << LGFileParser.COMMA) | (1 << LGFileParser.TEXT_IN_NAME))) !== 0)) { - { - { - this.state = 75; - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.IDENTIFIER) | (1 << LGFileParser.DOT) | (1 << LGFileParser.OPEN_PARENTHESIS) | (1 << LGFileParser.CLOSE_PARENTHESIS) | (1 << LGFileParser.COMMA) | (1 << LGFileParser.TEXT_IN_NAME))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - this.state = 80; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public templateName(): TemplateNameContext { - let _localctx: TemplateNameContext = new TemplateNameContext(this._ctx, this.state); - this.enterRule(_localctx, 12, LGFileParser.RULE_templateName); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 81; - this.match(LGFileParser.IDENTIFIER); - this.state = 86; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === LGFileParser.DOT) { - { - { - this.state = 82; - this.match(LGFileParser.DOT); - this.state = 83; - this.match(LGFileParser.IDENTIFIER); - } - } - this.state = 88; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public parameters(): ParametersContext { - let _localctx: ParametersContext = new ParametersContext(this._ctx, this.state); - this.enterRule(_localctx, 14, LGFileParser.RULE_parameters); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 89; - this.match(LGFileParser.OPEN_PARENTHESIS); - this.state = 98; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === LGFileParser.IDENTIFIER) { - { - this.state = 90; - this.match(LGFileParser.IDENTIFIER); - this.state = 95; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === LGFileParser.COMMA) { - { - { - this.state = 91; - this.match(LGFileParser.COMMA); - this.state = 92; - this.match(LGFileParser.IDENTIFIER); - } - } - this.state = 97; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } - } - - this.state = 100; - this.match(LGFileParser.CLOSE_PARENTHESIS); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public templateBody(): TemplateBodyContext { - let _localctx: TemplateBodyContext = new TemplateBodyContext(this._ctx, this.state); - this.enterRule(_localctx, 16, LGFileParser.RULE_templateBody); - try { - this.state = 106; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 9, this._ctx) ) { - case 1: - _localctx = new NormalBodyContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 102; - this.normalTemplateBody(); - } - break; - - case 2: - _localctx = new IfElseBodyContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 103; - this.ifElseTemplateBody(); - } - break; - - case 3: - _localctx = new SwitchCaseBodyContext(_localctx); - this.enterOuterAlt(_localctx, 3); - { - this.state = 104; - this.switchCaseTemplateBody(); - } - break; - - case 4: - _localctx = new StructuredBodyContext(_localctx); - this.enterOuterAlt(_localctx, 4); - { - this.state = 105; - this.structuredTemplateBody(); - } - break; - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public structuredTemplateBody(): StructuredTemplateBodyContext { - let _localctx: StructuredTemplateBodyContext = new StructuredTemplateBodyContext(this._ctx, this.state); - this.enterRule(_localctx, 18, LGFileParser.RULE_structuredTemplateBody); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 108; - this.structuredBodyNameLine(); - this.state = 110; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === LGFileParser.STRUCTURED_CONTENT) { - { - this.state = 109; - this.structuredBodyContentLine(); - } - } - - this.state = 112; - this.structuredBodyEndLine(); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public structuredBodyNameLine(): StructuredBodyNameLineContext { - let _localctx: StructuredBodyNameLineContext = new StructuredBodyNameLineContext(this._ctx, this.state); - this.enterRule(_localctx, 20, LGFileParser.RULE_structuredBodyNameLine); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 114; - this.match(LGFileParser.LEFT_SQUARE_BRACKET); - this.state = 115; - this.match(LGFileParser.STRUCTURED_CONTENT); - this.state = 116; - this.match(LGFileParser.STRUCTURED_NEWLINE); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public structuredBodyContentLine(): StructuredBodyContentLineContext { - let _localctx: StructuredBodyContentLineContext = new StructuredBodyContentLineContext(this._ctx, this.state); - this.enterRule(_localctx, 22, LGFileParser.RULE_structuredBodyContentLine); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 120; - this._errHandler.sync(this); - _la = this._input.LA(1); - do { - { - { - this.state = 118; - this.match(LGFileParser.STRUCTURED_CONTENT); - this.state = 119; - this.match(LGFileParser.STRUCTURED_NEWLINE); - } - } - this.state = 122; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while (_la === LGFileParser.STRUCTURED_CONTENT); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public structuredBodyEndLine(): StructuredBodyEndLineContext { - let _localctx: StructuredBodyEndLineContext = new StructuredBodyEndLineContext(this._ctx, this.state); - this.enterRule(_localctx, 24, LGFileParser.RULE_structuredBodyEndLine); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 124; - this.match(LGFileParser.STRUCTURED_TEMPLATE_BODY_END); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public normalTemplateBody(): NormalTemplateBodyContext { - let _localctx: NormalTemplateBodyContext = new NormalTemplateBodyContext(this._ctx, this.state); - this.enterRule(_localctx, 26, LGFileParser.RULE_normalTemplateBody); - try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 129; - this._errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - this.state = 126; - this.templateString(); - this.state = 127; - this.newline(); - } - } - break; - default: - throw new NoViableAltException(this); - } - this.state = 131; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 12, this._ctx); - } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public templateString(): TemplateStringContext { - let _localctx: TemplateStringContext = new TemplateStringContext(this._ctx, this.state); - this.enterRule(_localctx, 28, LGFileParser.RULE_templateString); - try { - this.state = 135; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case LGFileParser.DASH: - this.enterOuterAlt(_localctx, 1); - { - this.state = 133; - this.normalTemplateString(); - } - break; - case LGFileParser.INVALID_TOKEN_DEFAULT_MODE: - this.enterOuterAlt(_localctx, 2); - { - this.state = 134; - this.errorTemplateString(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public normalTemplateString(): NormalTemplateStringContext { - let _localctx: NormalTemplateStringContext = new NormalTemplateStringContext(this._ctx, this.state); - this.enterRule(_localctx, 30, LGFileParser.RULE_normalTemplateString); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 137; - this.match(LGFileParser.DASH); - this.state = 141; - this._errHandler.sync(this); - _la = this._input.LA(1); - while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.MULTI_LINE_TEXT) | (1 << LGFileParser.ESCAPE_CHARACTER) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEMPLATE_REF) | (1 << LGFileParser.TEXT_SEPARATOR) | (1 << LGFileParser.TEXT))) !== 0)) { - { - { - this.state = 138; - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.MULTI_LINE_TEXT) | (1 << LGFileParser.ESCAPE_CHARACTER) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEMPLATE_REF) | (1 << LGFileParser.TEXT_SEPARATOR) | (1 << LGFileParser.TEXT))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - this.state = 143; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public errorTemplateString(): ErrorTemplateStringContext { - let _localctx: ErrorTemplateStringContext = new ErrorTemplateStringContext(this._ctx, this.state); - this.enterRule(_localctx, 32, LGFileParser.RULE_errorTemplateString); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 145; - this._errHandler.sync(this); - _la = this._input.LA(1); - do { - { - { - this.state = 144; - this.match(LGFileParser.INVALID_TOKEN_DEFAULT_MODE); - } - } - this.state = 147; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while (_la === LGFileParser.INVALID_TOKEN_DEFAULT_MODE); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public ifElseTemplateBody(): IfElseTemplateBodyContext { - let _localctx: IfElseTemplateBodyContext = new IfElseTemplateBodyContext(this._ctx, this.state); - this.enterRule(_localctx, 34, LGFileParser.RULE_ifElseTemplateBody); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 150; - this._errHandler.sync(this); - _la = this._input.LA(1); - do { - { - { - this.state = 149; - this.ifConditionRule(); - } - } - this.state = 152; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while (_la === LGFileParser.DASH); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public ifConditionRule(): IfConditionRuleContext { - let _localctx: IfConditionRuleContext = new IfConditionRuleContext(this._ctx, this.state); - this.enterRule(_localctx, 36, LGFileParser.RULE_ifConditionRule); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 154; - this.ifCondition(); - this.state = 155; - this.newline(); - this.state = 157; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 17, this._ctx) ) { - case 1: - { - this.state = 156; - this.normalTemplateBody(); - } - break; - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public ifCondition(): IfConditionContext { - let _localctx: IfConditionContext = new IfConditionContext(this._ctx, this.state); - this.enterRule(_localctx, 38, LGFileParser.RULE_ifCondition); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 159; - this.match(LGFileParser.DASH); - this.state = 160; - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.IF) | (1 << LGFileParser.ELSEIF) | (1 << LGFileParser.ELSE))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 164; - this._errHandler.sync(this); - _la = this._input.LA(1); - while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEXT))) !== 0)) { - { - { - this.state = 161; - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEXT))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - this.state = 166; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public switchCaseTemplateBody(): SwitchCaseTemplateBodyContext { - let _localctx: SwitchCaseTemplateBodyContext = new SwitchCaseTemplateBodyContext(this._ctx, this.state); - this.enterRule(_localctx, 40, LGFileParser.RULE_switchCaseTemplateBody); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 168; - this._errHandler.sync(this); - _la = this._input.LA(1); - do { - { - { - this.state = 167; - this.switchCaseRule(); - } - } - this.state = 170; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while (_la === LGFileParser.DASH); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public switchCaseRule(): SwitchCaseRuleContext { - let _localctx: SwitchCaseRuleContext = new SwitchCaseRuleContext(this._ctx, this.state); - this.enterRule(_localctx, 42, LGFileParser.RULE_switchCaseRule); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 172; - this.switchCaseStat(); - this.state = 173; - this.newline(); - this.state = 175; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 20, this._ctx) ) { - case 1: - { - this.state = 174; - this.normalTemplateBody(); - } - break; - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public switchCaseStat(): SwitchCaseStatContext { - let _localctx: SwitchCaseStatContext = new SwitchCaseStatContext(this._ctx, this.state); - this.enterRule(_localctx, 44, LGFileParser.RULE_switchCaseStat); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 177; - this.match(LGFileParser.DASH); - this.state = 178; - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.SWITCH) | (1 << LGFileParser.CASE) | (1 << LGFileParser.DEFAULT))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 182; - this._errHandler.sync(this); - _la = this._input.LA(1); - while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEXT))) !== 0)) { - { - { - this.state = 179; - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEXT))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - this.state = 184; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public importDefinition(): ImportDefinitionContext { - let _localctx: ImportDefinitionContext = new ImportDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 46, LGFileParser.RULE_importDefinition); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 185; - this.match(LGFileParser.IMPORT_DESC); - this.state = 186; - this.match(LGFileParser.IMPORT_PATH); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - - public static readonly _serializedATN: string = - "\x03\uAF6F\u8320\u479D\uB75C\u4880\u1605\u191C\uAB37\x03%\xBF\x04\x02" + - "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + - "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + - "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + - "\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04" + - "\x18\t\x18\x04\x19\t\x19\x03\x02\x06\x024\n\x02\r\x02\x0E\x025\x03\x02" + - "\x03\x02\x03\x03\x03\x03\x03\x03\x05\x03=\n\x03\x03\x04\x03\x04\x03\x05" + - "\x03\x05\x03\x05\x05\x05D\n\x05\x03\x06\x03\x06\x03\x06\x05\x06I\n\x06" + - "\x03\x06\x05\x06L\n\x06\x03\x07\x07\x07O\n\x07\f\x07\x0E\x07R\v\x07\x03" + - "\b\x03\b\x03\b\x07\bW\n\b\f\b\x0E\bZ\v\b\x03\t\x03\t\x03\t\x03\t\x07\t" + - "`\n\t\f\t\x0E\tc\v\t\x05\te\n\t\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x05" + - "\nm\n\n\x03\v\x03\v\x05\vq\n\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03" + - "\r\x03\r\x06\r{\n\r\r\r\x0E\r|\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x0F" + - "\x06\x0F\x84\n\x0F\r\x0F\x0E\x0F\x85\x03\x10\x03\x10\x05\x10\x8A\n\x10" + - "\x03\x11\x03\x11\x07\x11\x8E\n\x11\f\x11\x0E\x11\x91\v\x11\x03\x12\x06" + - "\x12\x94\n\x12\r\x12\x0E\x12\x95\x03\x13\x06\x13\x99\n\x13\r\x13\x0E\x13" + - "\x9A\x03\x14\x03\x14\x03\x14\x05\x14\xA0\n\x14\x03\x15\x03\x15\x03\x15" + - "\x07\x15\xA5\n\x15\f\x15\x0E\x15\xA8\v\x15\x03\x16\x06\x16\xAB\n\x16\r" + - "\x16\x0E\x16\xAC\x03\x17\x03\x17\x03\x17\x05\x17\xB2\n\x17\x03\x18\x03" + - "\x18\x03\x18\x07\x18\xB7\n\x18\f\x18\x0E\x18\xBA\v\x18\x03\x19\x03\x19" + - "\x03\x19\x03\x19\x035\x02\x02\x1A\x02\x02\x04\x02\x06\x02\b\x02\n\x02" + - "\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02" + - "\x1E\x02 \x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x02\x02\b\x03\x03\x05" + - "\x05\x03\x02\x0E\x13\x04\x02\x04\x04\x1B \x03\x02\x15\x17\x05\x02\x04" + - "\x04\x1D\x1D \x03\x02\x18\x1A\xBF\x023\x03\x02\x02\x02\x04<\x03\x02\x02" + - "\x02\x06>\x03\x02\x02\x02\b@\x03\x02\x02\x02\nE\x03\x02\x02\x02\fP\x03" + - "\x02\x02\x02\x0ES\x03\x02\x02\x02\x10[\x03\x02\x02\x02\x12l\x03\x02\x02" + - "\x02\x14n\x03\x02\x02\x02\x16t\x03\x02\x02\x02\x18z\x03\x02\x02\x02\x1A" + - "~\x03\x02\x02\x02\x1C\x83\x03\x02\x02\x02\x1E\x89\x03\x02\x02\x02 \x8B" + - "\x03\x02\x02\x02\"\x93\x03\x02\x02\x02$\x98\x03\x02\x02\x02&\x9C\x03\x02" + - "\x02\x02(\xA1\x03\x02\x02\x02*\xAA\x03\x02\x02\x02,\xAE\x03\x02\x02\x02" + - ".\xB3\x03\x02\x02\x020\xBB\x03\x02\x02\x0224\x05\x04\x03\x0232\x03\x02" + - "\x02\x0245\x03\x02\x02\x0256\x03\x02\x02\x0253\x03\x02\x02\x0267\x03\x02" + - "\x02\x0278\x07\x02\x02\x038\x03\x03\x02\x02\x029=\x05\x06\x04\x02:=\x05" + - "\b\x05\x02;=\x050\x19\x02<9\x03\x02\x02\x02<:\x03\x02\x02\x02<;\x03\x02" + - "\x02\x02=\x05\x03\x02\x02\x02>?\t\x02\x02\x02?\x07\x03\x02\x02\x02@A\x05" + - "\n\x06\x02AC\x05\x06\x04\x02BD\x05\x12\n\x02CB\x03\x02\x02\x02CD\x03\x02" + - "\x02\x02D\t\x03\x02\x02\x02EK\x07\x06\x02\x02FH\x05\x0E\b\x02GI\x05\x10" + - "\t\x02HG\x03\x02\x02\x02HI\x03\x02\x02\x02IL\x03\x02\x02\x02JL\x05\f\x07" + - "\x02KF\x03\x02\x02\x02KJ\x03\x02\x02\x02L\v\x03\x02\x02\x02MO\t\x03\x02" + - "\x02NM\x03\x02\x02\x02OR\x03\x02\x02\x02PN\x03\x02\x02\x02PQ\x03\x02\x02" + - "\x02Q\r\x03\x02\x02\x02RP\x03\x02\x02\x02SX\x07\x0E\x02\x02TU\x07\x0F" + - "\x02\x02UW\x07\x0E\x02\x02VT\x03\x02\x02\x02WZ\x03\x02\x02\x02XV\x03\x02" + - "\x02\x02XY\x03\x02\x02\x02Y\x0F\x03\x02\x02\x02ZX\x03\x02\x02\x02[d\x07" + - "\x10\x02\x02\\a\x07\x0E\x02\x02]^\x07\x12\x02\x02^`\x07\x0E\x02\x02_]" + - "\x03\x02\x02\x02`c\x03\x02\x02\x02a_\x03\x02\x02\x02ab\x03\x02\x02\x02" + - "be\x03\x02\x02\x02ca\x03\x02\x02\x02d\\\x03\x02\x02\x02de\x03\x02\x02" + - "\x02ef\x03\x02\x02\x02fg\x07\x11\x02\x02g\x11\x03\x02\x02\x02hm\x05\x1C" + - "\x0F\x02im\x05$\x13\x02jm\x05*\x16\x02km\x05\x14\v\x02lh\x03\x02\x02\x02" + - "li\x03\x02\x02\x02lj\x03\x02\x02\x02lk\x03\x02\x02\x02m\x13\x03\x02\x02" + - "\x02np\x05\x16\f\x02oq\x05\x18\r\x02po\x03\x02\x02\x02pq\x03\x02\x02\x02" + - "qr\x03\x02\x02\x02rs\x05\x1A\x0E\x02s\x15\x03\x02\x02\x02tu\x07\b\x02" + - "\x02uv\x07%\x02\x02vw\x07#\x02\x02w\x17\x03\x02\x02\x02xy\x07%\x02\x02" + - "y{\x07#\x02\x02zx\x03\x02\x02\x02{|\x03\x02\x02\x02|z\x03\x02\x02\x02" + - "|}\x03\x02\x02\x02}\x19\x03\x02\x02\x02~\x7F\x07$\x02\x02\x7F\x1B\x03" + - "\x02\x02\x02\x80\x81\x05\x1E\x10\x02\x81\x82\x05\x06\x04\x02\x82\x84\x03" + - "\x02\x02\x02\x83\x80\x03\x02\x02\x02\x84\x85\x03\x02\x02\x02\x85\x83\x03" + - "\x02\x02\x02\x85\x86\x03\x02\x02\x02\x86\x1D\x03\x02\x02\x02\x87\x8A\x05" + - " \x11\x02\x88\x8A\x05\"\x12\x02\x89\x87\x03\x02\x02\x02\x89\x88\x03\x02" + - "\x02\x02\x8A\x1F\x03\x02\x02\x02\x8B\x8F\x07\x07\x02\x02\x8C\x8E\t\x04" + - "\x02\x02\x8D\x8C\x03\x02\x02\x02\x8E\x91\x03\x02\x02\x02\x8F\x8D\x03\x02" + - "\x02\x02\x8F\x90\x03\x02\x02\x02\x90!\x03\x02\x02\x02\x91\x8F\x03\x02" + - "\x02\x02\x92\x94\x07\f\x02\x02\x93\x92\x03\x02\x02\x02\x94\x95\x03\x02" + - "\x02\x02\x95\x93\x03\x02\x02\x02\x95\x96\x03\x02\x02\x02\x96#\x03\x02" + - "\x02\x02\x97\x99\x05&\x14\x02\x98\x97\x03\x02\x02\x02\x99\x9A\x03\x02" + - "\x02\x02\x9A\x98\x03\x02\x02\x02\x9A\x9B\x03\x02\x02\x02\x9B%\x03\x02" + - "\x02\x02\x9C\x9D\x05(\x15\x02\x9D\x9F\x05\x06\x04\x02\x9E\xA0\x05\x1C" + - "\x0F\x02\x9F\x9E\x03\x02\x02\x02\x9F\xA0\x03\x02\x02\x02\xA0\'\x03\x02" + - "\x02\x02\xA1\xA2\x07\x07\x02\x02\xA2\xA6\t\x05\x02\x02\xA3\xA5\t\x06\x02" + - "\x02\xA4\xA3\x03\x02\x02\x02\xA5\xA8\x03\x02\x02\x02\xA6\xA4\x03\x02\x02" + - "\x02\xA6\xA7\x03\x02\x02\x02\xA7)\x03\x02\x02\x02\xA8\xA6\x03\x02\x02" + - "\x02\xA9\xAB\x05,\x17\x02\xAA\xA9\x03\x02\x02\x02\xAB\xAC\x03\x02\x02" + - "\x02\xAC\xAA\x03\x02\x02\x02\xAC\xAD\x03\x02\x02\x02\xAD+\x03\x02\x02" + - "\x02\xAE\xAF\x05.\x18\x02\xAF\xB1\x05\x06\x04\x02\xB0\xB2\x05\x1C\x0F" + - "\x02\xB1\xB0\x03\x02\x02\x02\xB1\xB2\x03\x02\x02\x02\xB2-\x03\x02\x02" + - "\x02\xB3\xB4\x07\x07\x02\x02\xB4\xB8\t\x07\x02\x02\xB5\xB7\t\x06\x02\x02" + - "\xB6\xB5\x03\x02\x02\x02\xB7\xBA\x03\x02\x02\x02\xB8\xB6\x03\x02\x02\x02" + - "\xB8\xB9\x03\x02\x02\x02\xB9/\x03\x02\x02\x02\xBA\xB8\x03\x02\x02\x02" + - "\xBB\xBC\x07\n\x02\x02\xBC\xBD\x07\v\x02\x02\xBD1\x03\x02\x02\x02\x18" + - "5(visitor: LGFileParserVisitor): Result { - if (visitor.visitFile) { - return visitor.visitFile(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ParagraphContext extends ParserRuleContext { - public newline(): NewlineContext | undefined { - return this.tryGetRuleContext(0, NewlineContext); - } - public templateDefinition(): TemplateDefinitionContext | undefined { - return this.tryGetRuleContext(0, TemplateDefinitionContext); - } - public importDefinition(): ImportDefinitionContext | undefined { - return this.tryGetRuleContext(0, ImportDefinitionContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_paragraph; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterParagraph) { - listener.enterParagraph(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitParagraph) { - listener.exitParagraph(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitParagraph) { - return visitor.visitParagraph(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class NewlineContext extends ParserRuleContext { - public NEWLINE(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.NEWLINE, 0); } - public EOF(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.EOF, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_newline; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterNewline) { - listener.enterNewline(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitNewline) { - listener.exitNewline(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitNewline) { - return visitor.visitNewline(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class TemplateDefinitionContext extends ParserRuleContext { - public templateNameLine(): TemplateNameLineContext { - return this.getRuleContext(0, TemplateNameLineContext); - } - public newline(): NewlineContext { - return this.getRuleContext(0, NewlineContext); - } - public templateBody(): TemplateBodyContext | undefined { - return this.tryGetRuleContext(0, TemplateBodyContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_templateDefinition; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterTemplateDefinition) { - listener.enterTemplateDefinition(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitTemplateDefinition) { - listener.exitTemplateDefinition(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitTemplateDefinition) { - return visitor.visitTemplateDefinition(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class TemplateNameLineContext extends ParserRuleContext { - public HASH(): TerminalNode { return this.getToken(LGFileParser.HASH, 0); } - public errorTemplateName(): ErrorTemplateNameContext | undefined { - return this.tryGetRuleContext(0, ErrorTemplateNameContext); - } - public templateName(): TemplateNameContext | undefined { - return this.tryGetRuleContext(0, TemplateNameContext); - } - public parameters(): ParametersContext | undefined { - return this.tryGetRuleContext(0, ParametersContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_templateNameLine; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterTemplateNameLine) { - listener.enterTemplateNameLine(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitTemplateNameLine) { - listener.exitTemplateNameLine(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitTemplateNameLine) { - return visitor.visitTemplateNameLine(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ErrorTemplateNameContext extends ParserRuleContext { - public IDENTIFIER(): TerminalNode[]; - public IDENTIFIER(i: number): TerminalNode; - public IDENTIFIER(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.IDENTIFIER); - } else { - return this.getToken(LGFileParser.IDENTIFIER, i); - } - } - public TEXT_IN_NAME(): TerminalNode[]; - public TEXT_IN_NAME(i: number): TerminalNode; - public TEXT_IN_NAME(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.TEXT_IN_NAME); - } else { - return this.getToken(LGFileParser.TEXT_IN_NAME, i); - } - } - public OPEN_PARENTHESIS(): TerminalNode[]; - public OPEN_PARENTHESIS(i: number): TerminalNode; - public OPEN_PARENTHESIS(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.OPEN_PARENTHESIS); - } else { - return this.getToken(LGFileParser.OPEN_PARENTHESIS, i); - } - } - public COMMA(): TerminalNode[]; - public COMMA(i: number): TerminalNode; - public COMMA(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.COMMA); - } else { - return this.getToken(LGFileParser.COMMA, i); - } - } - public CLOSE_PARENTHESIS(): TerminalNode[]; - public CLOSE_PARENTHESIS(i: number): TerminalNode; - public CLOSE_PARENTHESIS(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.CLOSE_PARENTHESIS); - } else { - return this.getToken(LGFileParser.CLOSE_PARENTHESIS, i); - } - } - public DOT(): TerminalNode[]; - public DOT(i: number): TerminalNode; - public DOT(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.DOT); - } else { - return this.getToken(LGFileParser.DOT, i); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_errorTemplateName; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterErrorTemplateName) { - listener.enterErrorTemplateName(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitErrorTemplateName) { - listener.exitErrorTemplateName(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitErrorTemplateName) { - return visitor.visitErrorTemplateName(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class TemplateNameContext extends ParserRuleContext { - public IDENTIFIER(): TerminalNode[]; - public IDENTIFIER(i: number): TerminalNode; - public IDENTIFIER(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.IDENTIFIER); - } else { - return this.getToken(LGFileParser.IDENTIFIER, i); - } - } - public DOT(): TerminalNode[]; - public DOT(i: number): TerminalNode; - public DOT(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.DOT); - } else { - return this.getToken(LGFileParser.DOT, i); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_templateName; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterTemplateName) { - listener.enterTemplateName(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitTemplateName) { - listener.exitTemplateName(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitTemplateName) { - return visitor.visitTemplateName(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ParametersContext extends ParserRuleContext { - public OPEN_PARENTHESIS(): TerminalNode { return this.getToken(LGFileParser.OPEN_PARENTHESIS, 0); } - public CLOSE_PARENTHESIS(): TerminalNode { return this.getToken(LGFileParser.CLOSE_PARENTHESIS, 0); } - public IDENTIFIER(): TerminalNode[]; - public IDENTIFIER(i: number): TerminalNode; - public IDENTIFIER(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.IDENTIFIER); - } else { - return this.getToken(LGFileParser.IDENTIFIER, i); - } - } - public COMMA(): TerminalNode[]; - public COMMA(i: number): TerminalNode; - public COMMA(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.COMMA); - } else { - return this.getToken(LGFileParser.COMMA, i); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_parameters; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterParameters) { - listener.enterParameters(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitParameters) { - listener.exitParameters(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitParameters) { - return visitor.visitParameters(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class TemplateBodyContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_templateBody; } - public copyFrom(ctx: TemplateBodyContext): void { - super.copyFrom(ctx); - } -} -export class SwitchCaseBodyContext extends TemplateBodyContext { - public switchCaseTemplateBody(): SwitchCaseTemplateBodyContext { - return this.getRuleContext(0, SwitchCaseTemplateBodyContext); - } - constructor(ctx: TemplateBodyContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterSwitchCaseBody) { - listener.enterSwitchCaseBody(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitSwitchCaseBody) { - listener.exitSwitchCaseBody(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitSwitchCaseBody) { - return visitor.visitSwitchCaseBody(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class NormalBodyContext extends TemplateBodyContext { - public normalTemplateBody(): NormalTemplateBodyContext { - return this.getRuleContext(0, NormalTemplateBodyContext); - } - constructor(ctx: TemplateBodyContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterNormalBody) { - listener.enterNormalBody(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitNormalBody) { - listener.exitNormalBody(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitNormalBody) { - return visitor.visitNormalBody(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class StructuredBodyContext extends TemplateBodyContext { - public structuredTemplateBody(): StructuredTemplateBodyContext { - return this.getRuleContext(0, StructuredTemplateBodyContext); - } - constructor(ctx: TemplateBodyContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterStructuredBody) { - listener.enterStructuredBody(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitStructuredBody) { - listener.exitStructuredBody(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitStructuredBody) { - return visitor.visitStructuredBody(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class IfElseBodyContext extends TemplateBodyContext { - public ifElseTemplateBody(): IfElseTemplateBodyContext { - return this.getRuleContext(0, IfElseTemplateBodyContext); - } - constructor(ctx: TemplateBodyContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterIfElseBody) { - listener.enterIfElseBody(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitIfElseBody) { - listener.exitIfElseBody(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitIfElseBody) { - return visitor.visitIfElseBody(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class StructuredTemplateBodyContext extends ParserRuleContext { - public structuredBodyNameLine(): StructuredBodyNameLineContext { - return this.getRuleContext(0, StructuredBodyNameLineContext); - } - public structuredBodyEndLine(): StructuredBodyEndLineContext { - return this.getRuleContext(0, StructuredBodyEndLineContext); - } - public structuredBodyContentLine(): StructuredBodyContentLineContext | undefined { - return this.tryGetRuleContext(0, StructuredBodyContentLineContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_structuredTemplateBody; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterStructuredTemplateBody) { - listener.enterStructuredTemplateBody(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitStructuredTemplateBody) { - listener.exitStructuredTemplateBody(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitStructuredTemplateBody) { - return visitor.visitStructuredTemplateBody(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class StructuredBodyNameLineContext extends ParserRuleContext { - public LEFT_SQUARE_BRACKET(): TerminalNode { return this.getToken(LGFileParser.LEFT_SQUARE_BRACKET, 0); } - public STRUCTURED_CONTENT(): TerminalNode { return this.getToken(LGFileParser.STRUCTURED_CONTENT, 0); } - public STRUCTURED_NEWLINE(): TerminalNode { return this.getToken(LGFileParser.STRUCTURED_NEWLINE, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_structuredBodyNameLine; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterStructuredBodyNameLine) { - listener.enterStructuredBodyNameLine(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitStructuredBodyNameLine) { - listener.exitStructuredBodyNameLine(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitStructuredBodyNameLine) { - return visitor.visitStructuredBodyNameLine(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class StructuredBodyContentLineContext extends ParserRuleContext { - public STRUCTURED_CONTENT(): TerminalNode[]; - public STRUCTURED_CONTENT(i: number): TerminalNode; - public STRUCTURED_CONTENT(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.STRUCTURED_CONTENT); - } else { - return this.getToken(LGFileParser.STRUCTURED_CONTENT, i); - } - } - public STRUCTURED_NEWLINE(): TerminalNode[]; - public STRUCTURED_NEWLINE(i: number): TerminalNode; - public STRUCTURED_NEWLINE(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.STRUCTURED_NEWLINE); - } else { - return this.getToken(LGFileParser.STRUCTURED_NEWLINE, i); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_structuredBodyContentLine; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterStructuredBodyContentLine) { - listener.enterStructuredBodyContentLine(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitStructuredBodyContentLine) { - listener.exitStructuredBodyContentLine(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitStructuredBodyContentLine) { - return visitor.visitStructuredBodyContentLine(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class StructuredBodyEndLineContext extends ParserRuleContext { - public STRUCTURED_TEMPLATE_BODY_END(): TerminalNode { return this.getToken(LGFileParser.STRUCTURED_TEMPLATE_BODY_END, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_structuredBodyEndLine; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterStructuredBodyEndLine) { - listener.enterStructuredBodyEndLine(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitStructuredBodyEndLine) { - listener.exitStructuredBodyEndLine(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitStructuredBodyEndLine) { - return visitor.visitStructuredBodyEndLine(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class NormalTemplateBodyContext extends ParserRuleContext { - public templateString(): TemplateStringContext[]; - public templateString(i: number): TemplateStringContext; - public templateString(i?: number): TemplateStringContext | TemplateStringContext[] { - if (i === undefined) { - return this.getRuleContexts(TemplateStringContext); - } else { - return this.getRuleContext(i, TemplateStringContext); - } - } - public newline(): NewlineContext[]; - public newline(i: number): NewlineContext; - public newline(i?: number): NewlineContext | NewlineContext[] { - if (i === undefined) { - return this.getRuleContexts(NewlineContext); - } else { - return this.getRuleContext(i, NewlineContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_normalTemplateBody; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterNormalTemplateBody) { - listener.enterNormalTemplateBody(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitNormalTemplateBody) { - listener.exitNormalTemplateBody(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitNormalTemplateBody) { - return visitor.visitNormalTemplateBody(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class TemplateStringContext extends ParserRuleContext { - public normalTemplateString(): NormalTemplateStringContext | undefined { - return this.tryGetRuleContext(0, NormalTemplateStringContext); - } - public errorTemplateString(): ErrorTemplateStringContext | undefined { - return this.tryGetRuleContext(0, ErrorTemplateStringContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_templateString; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterTemplateString) { - listener.enterTemplateString(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitTemplateString) { - listener.exitTemplateString(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitTemplateString) { - return visitor.visitTemplateString(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class NormalTemplateStringContext extends ParserRuleContext { - public DASH(): TerminalNode { return this.getToken(LGFileParser.DASH, 0); } - public WS(): TerminalNode[]; - public WS(i: number): TerminalNode; - public WS(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.WS); - } else { - return this.getToken(LGFileParser.WS, i); - } - } - public TEXT(): TerminalNode[]; - public TEXT(i: number): TerminalNode; - public TEXT(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.TEXT); - } else { - return this.getToken(LGFileParser.TEXT, i); - } - } - public EXPRESSION(): TerminalNode[]; - public EXPRESSION(i: number): TerminalNode; - public EXPRESSION(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.EXPRESSION); - } else { - return this.getToken(LGFileParser.EXPRESSION, i); - } - } - public TEMPLATE_REF(): TerminalNode[]; - public TEMPLATE_REF(i: number): TerminalNode; - public TEMPLATE_REF(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.TEMPLATE_REF); - } else { - return this.getToken(LGFileParser.TEMPLATE_REF, i); - } - } - public TEXT_SEPARATOR(): TerminalNode[]; - public TEXT_SEPARATOR(i: number): TerminalNode; - public TEXT_SEPARATOR(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.TEXT_SEPARATOR); - } else { - return this.getToken(LGFileParser.TEXT_SEPARATOR, i); - } - } - public MULTI_LINE_TEXT(): TerminalNode[]; - public MULTI_LINE_TEXT(i: number): TerminalNode; - public MULTI_LINE_TEXT(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.MULTI_LINE_TEXT); - } else { - return this.getToken(LGFileParser.MULTI_LINE_TEXT, i); - } - } - public ESCAPE_CHARACTER(): TerminalNode[]; - public ESCAPE_CHARACTER(i: number): TerminalNode; - public ESCAPE_CHARACTER(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.ESCAPE_CHARACTER); - } else { - return this.getToken(LGFileParser.ESCAPE_CHARACTER, i); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_normalTemplateString; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterNormalTemplateString) { - listener.enterNormalTemplateString(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitNormalTemplateString) { - listener.exitNormalTemplateString(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitNormalTemplateString) { - return visitor.visitNormalTemplateString(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ErrorTemplateStringContext extends ParserRuleContext { - public INVALID_TOKEN_DEFAULT_MODE(): TerminalNode[]; - public INVALID_TOKEN_DEFAULT_MODE(i: number): TerminalNode; - public INVALID_TOKEN_DEFAULT_MODE(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.INVALID_TOKEN_DEFAULT_MODE); - } else { - return this.getToken(LGFileParser.INVALID_TOKEN_DEFAULT_MODE, i); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_errorTemplateString; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterErrorTemplateString) { - listener.enterErrorTemplateString(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitErrorTemplateString) { - listener.exitErrorTemplateString(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitErrorTemplateString) { - return visitor.visitErrorTemplateString(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class IfElseTemplateBodyContext extends ParserRuleContext { - public ifConditionRule(): IfConditionRuleContext[]; - public ifConditionRule(i: number): IfConditionRuleContext; - public ifConditionRule(i?: number): IfConditionRuleContext | IfConditionRuleContext[] { - if (i === undefined) { - return this.getRuleContexts(IfConditionRuleContext); - } else { - return this.getRuleContext(i, IfConditionRuleContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_ifElseTemplateBody; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterIfElseTemplateBody) { - listener.enterIfElseTemplateBody(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitIfElseTemplateBody) { - listener.exitIfElseTemplateBody(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitIfElseTemplateBody) { - return visitor.visitIfElseTemplateBody(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class IfConditionRuleContext extends ParserRuleContext { - public ifCondition(): IfConditionContext { - return this.getRuleContext(0, IfConditionContext); - } - public newline(): NewlineContext { - return this.getRuleContext(0, NewlineContext); - } - public normalTemplateBody(): NormalTemplateBodyContext | undefined { - return this.tryGetRuleContext(0, NormalTemplateBodyContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_ifConditionRule; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterIfConditionRule) { - listener.enterIfConditionRule(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitIfConditionRule) { - listener.exitIfConditionRule(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitIfConditionRule) { - return visitor.visitIfConditionRule(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class IfConditionContext extends ParserRuleContext { - public DASH(): TerminalNode { return this.getToken(LGFileParser.DASH, 0); } - public IF(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.IF, 0); } - public ELSE(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.ELSE, 0); } - public ELSEIF(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.ELSEIF, 0); } - public WS(): TerminalNode[]; - public WS(i: number): TerminalNode; - public WS(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.WS); - } else { - return this.getToken(LGFileParser.WS, i); - } - } - public TEXT(): TerminalNode[]; - public TEXT(i: number): TerminalNode; - public TEXT(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.TEXT); - } else { - return this.getToken(LGFileParser.TEXT, i); - } - } - public EXPRESSION(): TerminalNode[]; - public EXPRESSION(i: number): TerminalNode; - public EXPRESSION(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.EXPRESSION); - } else { - return this.getToken(LGFileParser.EXPRESSION, i); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_ifCondition; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterIfCondition) { - listener.enterIfCondition(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitIfCondition) { - listener.exitIfCondition(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitIfCondition) { - return visitor.visitIfCondition(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class SwitchCaseTemplateBodyContext extends ParserRuleContext { - public switchCaseRule(): SwitchCaseRuleContext[]; - public switchCaseRule(i: number): SwitchCaseRuleContext; - public switchCaseRule(i?: number): SwitchCaseRuleContext | SwitchCaseRuleContext[] { - if (i === undefined) { - return this.getRuleContexts(SwitchCaseRuleContext); - } else { - return this.getRuleContext(i, SwitchCaseRuleContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_switchCaseTemplateBody; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterSwitchCaseTemplateBody) { - listener.enterSwitchCaseTemplateBody(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitSwitchCaseTemplateBody) { - listener.exitSwitchCaseTemplateBody(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitSwitchCaseTemplateBody) { - return visitor.visitSwitchCaseTemplateBody(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class SwitchCaseRuleContext extends ParserRuleContext { - public switchCaseStat(): SwitchCaseStatContext { - return this.getRuleContext(0, SwitchCaseStatContext); - } - public newline(): NewlineContext { - return this.getRuleContext(0, NewlineContext); - } - public normalTemplateBody(): NormalTemplateBodyContext | undefined { - return this.tryGetRuleContext(0, NormalTemplateBodyContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_switchCaseRule; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterSwitchCaseRule) { - listener.enterSwitchCaseRule(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitSwitchCaseRule) { - listener.exitSwitchCaseRule(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitSwitchCaseRule) { - return visitor.visitSwitchCaseRule(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class SwitchCaseStatContext extends ParserRuleContext { - public DASH(): TerminalNode { return this.getToken(LGFileParser.DASH, 0); } - public SWITCH(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.SWITCH, 0); } - public CASE(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.CASE, 0); } - public DEFAULT(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.DEFAULT, 0); } - public WS(): TerminalNode[]; - public WS(i: number): TerminalNode; - public WS(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.WS); - } else { - return this.getToken(LGFileParser.WS, i); - } - } - public TEXT(): TerminalNode[]; - public TEXT(i: number): TerminalNode; - public TEXT(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.TEXT); - } else { - return this.getToken(LGFileParser.TEXT, i); - } - } - public EXPRESSION(): TerminalNode[]; - public EXPRESSION(i: number): TerminalNode; - public EXPRESSION(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(LGFileParser.EXPRESSION); - } else { - return this.getToken(LGFileParser.EXPRESSION, i); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_switchCaseStat; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterSwitchCaseStat) { - listener.enterSwitchCaseStat(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitSwitchCaseStat) { - listener.exitSwitchCaseStat(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitSwitchCaseStat) { - return visitor.visitSwitchCaseStat(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ImportDefinitionContext extends ParserRuleContext { - public IMPORT_DESC(): TerminalNode { return this.getToken(LGFileParser.IMPORT_DESC, 0); } - public IMPORT_PATH(): TerminalNode { return this.getToken(LGFileParser.IMPORT_PATH, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return LGFileParser.RULE_importDefinition; } - // @Override - public enterRule(listener: LGFileParserListener): void { - if (listener.enterImportDefinition) { - listener.enterImportDefinition(this); - } - } - // @Override - public exitRule(listener: LGFileParserListener): void { - if (listener.exitImportDefinition) { - listener.exitImportDefinition(this); - } - } - // @Override - public accept(visitor: LGFileParserVisitor): Result { - if (visitor.visitImportDefinition) { - return visitor.visitImportDefinition(this); - } else { - return visitor.visitChildren(this); - } - } -} - - +/** + * @module botbuilder-lg + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// Generated from ../LGFileParser.g4 by ANTLR 4.6-SNAPSHOT + + +import { ATN } from "antlr4ts/atn/ATN"; +import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; +import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; +import { NotNull } from "antlr4ts/Decorators"; +import { NoViableAltException } from "antlr4ts/NoViableAltException"; +import { Override } from "antlr4ts/Decorators"; +import { Parser } from "antlr4ts/Parser"; +import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; +import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; +import { RecognitionException } from "antlr4ts/RecognitionException"; +import { RuleContext } from "antlr4ts/RuleContext"; +//import { RuleVersion } from "antlr4ts/RuleVersion"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { Token } from "antlr4ts/Token"; +import { TokenStream } from "antlr4ts/TokenStream"; +import { Vocabulary } from "antlr4ts/Vocabulary"; +import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; + +import * as Utils from "antlr4ts/misc/Utils"; + +import { LGFileParserListener } from "./LGFileParserListener"; +import { LGFileParserVisitor } from "./LGFileParserVisitor"; + + +export class LGFileParser extends Parser { + public static readonly COMMENTS = 1; + public static readonly WS = 2; + public static readonly NEWLINE = 3; + public static readonly HASH = 4; + public static readonly DASH = 5; + public static readonly LEFT_SQUARE_BRACKET = 6; + public static readonly RIGHT_SQUARE_BRACKET = 7; + public static readonly IMPORT_DESC = 8; + public static readonly IMPORT_PATH = 9; + public static readonly INVALID_TOKEN_DEFAULT_MODE = 10; + public static readonly WS_IN_NAME = 11; + public static readonly IDENTIFIER = 12; + public static readonly DOT = 13; + public static readonly OPEN_PARENTHESIS = 14; + public static readonly CLOSE_PARENTHESIS = 15; + public static readonly COMMA = 16; + public static readonly TEXT_IN_NAME = 17; + public static readonly WS_IN_BODY_IGNORED = 18; + public static readonly IF = 19; + public static readonly ELSEIF = 20; + public static readonly ELSE = 21; + public static readonly SWITCH = 22; + public static readonly CASE = 23; + public static readonly DEFAULT = 24; + public static readonly MULTI_LINE_TEXT = 25; + public static readonly ESCAPE_CHARACTER = 26; + public static readonly EXPRESSION = 27; + public static readonly TEMPLATE_REF = 28; + public static readonly TEXT_SEPARATOR = 29; + public static readonly TEXT = 30; + public static readonly WS_IN_STRUCTURED = 31; + public static readonly STRUCTURED_COMMENTS = 32; + public static readonly STRUCTURED_NEWLINE = 33; + public static readonly STRUCTURED_TEMPLATE_BODY_END = 34; + public static readonly STRUCTURED_CONTENT = 35; + public static readonly RULE_file = 0; + public static readonly RULE_paragraph = 1; + public static readonly RULE_newline = 2; + public static readonly RULE_templateDefinition = 3; + public static readonly RULE_templateNameLine = 4; + public static readonly RULE_errorTemplateName = 5; + public static readonly RULE_templateName = 6; + public static readonly RULE_parameters = 7; + public static readonly RULE_templateBody = 8; + public static readonly RULE_structuredTemplateBody = 9; + public static readonly RULE_structuredBodyNameLine = 10; + public static readonly RULE_structuredBodyContentLine = 11; + public static readonly RULE_structuredBodyEndLine = 12; + public static readonly RULE_normalTemplateBody = 13; + public static readonly RULE_templateString = 14; + public static readonly RULE_normalTemplateString = 15; + public static readonly RULE_errorTemplateString = 16; + public static readonly RULE_ifElseTemplateBody = 17; + public static readonly RULE_ifConditionRule = 18; + public static readonly RULE_ifCondition = 19; + public static readonly RULE_switchCaseTemplateBody = 20; + public static readonly RULE_switchCaseRule = 21; + public static readonly RULE_switchCaseStat = 22; + public static readonly RULE_importDefinition = 23; + // tslint:disable:no-trailing-whitespace + public static readonly ruleNames: string[] = [ + "file", "paragraph", "newline", "templateDefinition", "templateNameLine", + "errorTemplateName", "templateName", "parameters", "templateBody", "structuredTemplateBody", + "structuredBodyNameLine", "structuredBodyContentLine", "structuredBodyEndLine", + "normalTemplateBody", "templateString", "normalTemplateString", "errorTemplateString", + "ifElseTemplateBody", "ifConditionRule", "ifCondition", "switchCaseTemplateBody", + "switchCaseRule", "switchCaseStat", "importDefinition", + ]; + + private static readonly _LITERAL_NAMES: Array = [ + undefined, undefined, undefined, undefined, "'#'", undefined, "'['", "']'", + undefined, undefined, undefined, undefined, undefined, "'.'", "'('", "')'", + "','", + ]; + private static readonly _SYMBOLIC_NAMES: Array = [ + undefined, "COMMENTS", "WS", "NEWLINE", "HASH", "DASH", "LEFT_SQUARE_BRACKET", + "RIGHT_SQUARE_BRACKET", "IMPORT_DESC", "IMPORT_PATH", "INVALID_TOKEN_DEFAULT_MODE", + "WS_IN_NAME", "IDENTIFIER", "DOT", "OPEN_PARENTHESIS", "CLOSE_PARENTHESIS", + "COMMA", "TEXT_IN_NAME", "WS_IN_BODY_IGNORED", "IF", "ELSEIF", "ELSE", + "SWITCH", "CASE", "DEFAULT", "MULTI_LINE_TEXT", "ESCAPE_CHARACTER", "EXPRESSION", + "TEMPLATE_REF", "TEXT_SEPARATOR", "TEXT", "WS_IN_STRUCTURED", "STRUCTURED_COMMENTS", + "STRUCTURED_NEWLINE", "STRUCTURED_TEMPLATE_BODY_END", "STRUCTURED_CONTENT", + ]; + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(LGFileParser._LITERAL_NAMES, LGFileParser._SYMBOLIC_NAMES, []); + + // @Override + // @NotNull + public get vocabulary(): Vocabulary { + return LGFileParser.VOCABULARY; + } + // tslint:enable:no-trailing-whitespace + + // @Override + public get grammarFileName(): string { return "LGFileParser.g4"; } + + // @Override + public get ruleNames(): string[] { return LGFileParser.ruleNames; } + + // @Override + public get serializedATN(): string { return LGFileParser._serializedATN; } + + constructor(input: TokenStream) { + super(input); + this._interp = new ParserATNSimulator(LGFileParser._ATN, this); + } + // @RuleVersion(0) + public file(): FileContext { + let _localctx: FileContext = new FileContext(this._ctx, this.state); + this.enterRule(_localctx, 0, LGFileParser.RULE_file); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 49; + this._errHandler.sync(this); + _alt = 1 + 1; + do { + switch (_alt) { + case 1 + 1: + { + { + this.state = 48; + this.paragraph(); + } + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 51; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 0, this._ctx); + } while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER); + this.state = 53; + this.match(LGFileParser.EOF); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public paragraph(): ParagraphContext { + let _localctx: ParagraphContext = new ParagraphContext(this._ctx, this.state); + this.enterRule(_localctx, 2, LGFileParser.RULE_paragraph); + try { + this.state = 58; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case LGFileParser.EOF: + case LGFileParser.NEWLINE: + this.enterOuterAlt(_localctx, 1); + { + this.state = 55; + this.newline(); + } + break; + case LGFileParser.HASH: + this.enterOuterAlt(_localctx, 2); + { + this.state = 56; + this.templateDefinition(); + } + break; + case LGFileParser.IMPORT_DESC: + this.enterOuterAlt(_localctx, 3); + { + this.state = 57; + this.importDefinition(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public newline(): NewlineContext { + let _localctx: NewlineContext = new NewlineContext(this._ctx, this.state); + this.enterRule(_localctx, 4, LGFileParser.RULE_newline); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 60; + _la = this._input.LA(1); + if (!(_la === LGFileParser.EOF || _la === LGFileParser.NEWLINE)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public templateDefinition(): TemplateDefinitionContext { + let _localctx: TemplateDefinitionContext = new TemplateDefinitionContext(this._ctx, this.state); + this.enterRule(_localctx, 6, LGFileParser.RULE_templateDefinition); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 62; + this.templateNameLine(); + this.state = 63; + this.newline(); + this.state = 65; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.DASH) | (1 << LGFileParser.LEFT_SQUARE_BRACKET) | (1 << LGFileParser.INVALID_TOKEN_DEFAULT_MODE))) !== 0)) { + { + this.state = 64; + this.templateBody(); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public templateNameLine(): TemplateNameLineContext { + let _localctx: TemplateNameLineContext = new TemplateNameLineContext(this._ctx, this.state); + this.enterRule(_localctx, 8, LGFileParser.RULE_templateNameLine); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 67; + this.match(LGFileParser.HASH); + this.state = 73; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 4, this._ctx) ) { + case 1: + { + { + this.state = 68; + this.templateName(); + this.state = 70; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === LGFileParser.OPEN_PARENTHESIS) { + { + this.state = 69; + this.parameters(); + } + } + + } + } + break; + + case 2: + { + this.state = 72; + this.errorTemplateName(); + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public errorTemplateName(): ErrorTemplateNameContext { + let _localctx: ErrorTemplateNameContext = new ErrorTemplateNameContext(this._ctx, this.state); + this.enterRule(_localctx, 10, LGFileParser.RULE_errorTemplateName); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 78; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.IDENTIFIER) | (1 << LGFileParser.DOT) | (1 << LGFileParser.OPEN_PARENTHESIS) | (1 << LGFileParser.CLOSE_PARENTHESIS) | (1 << LGFileParser.COMMA) | (1 << LGFileParser.TEXT_IN_NAME))) !== 0)) { + { + { + this.state = 75; + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.IDENTIFIER) | (1 << LGFileParser.DOT) | (1 << LGFileParser.OPEN_PARENTHESIS) | (1 << LGFileParser.CLOSE_PARENTHESIS) | (1 << LGFileParser.COMMA) | (1 << LGFileParser.TEXT_IN_NAME))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + this.state = 80; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public templateName(): TemplateNameContext { + let _localctx: TemplateNameContext = new TemplateNameContext(this._ctx, this.state); + this.enterRule(_localctx, 12, LGFileParser.RULE_templateName); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 81; + this.match(LGFileParser.IDENTIFIER); + this.state = 86; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === LGFileParser.DOT) { + { + { + this.state = 82; + this.match(LGFileParser.DOT); + this.state = 83; + this.match(LGFileParser.IDENTIFIER); + } + } + this.state = 88; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public parameters(): ParametersContext { + let _localctx: ParametersContext = new ParametersContext(this._ctx, this.state); + this.enterRule(_localctx, 14, LGFileParser.RULE_parameters); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 89; + this.match(LGFileParser.OPEN_PARENTHESIS); + this.state = 98; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === LGFileParser.IDENTIFIER) { + { + this.state = 90; + this.match(LGFileParser.IDENTIFIER); + this.state = 95; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === LGFileParser.COMMA) { + { + { + this.state = 91; + this.match(LGFileParser.COMMA); + this.state = 92; + this.match(LGFileParser.IDENTIFIER); + } + } + this.state = 97; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 100; + this.match(LGFileParser.CLOSE_PARENTHESIS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public templateBody(): TemplateBodyContext { + let _localctx: TemplateBodyContext = new TemplateBodyContext(this._ctx, this.state); + this.enterRule(_localctx, 16, LGFileParser.RULE_templateBody); + try { + this.state = 106; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 9, this._ctx) ) { + case 1: + _localctx = new NormalBodyContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 102; + this.normalTemplateBody(); + } + break; + + case 2: + _localctx = new IfElseBodyContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 103; + this.ifElseTemplateBody(); + } + break; + + case 3: + _localctx = new SwitchCaseBodyContext(_localctx); + this.enterOuterAlt(_localctx, 3); + { + this.state = 104; + this.switchCaseTemplateBody(); + } + break; + + case 4: + _localctx = new StructuredBodyContext(_localctx); + this.enterOuterAlt(_localctx, 4); + { + this.state = 105; + this.structuredTemplateBody(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public structuredTemplateBody(): StructuredTemplateBodyContext { + let _localctx: StructuredTemplateBodyContext = new StructuredTemplateBodyContext(this._ctx, this.state); + this.enterRule(_localctx, 18, LGFileParser.RULE_structuredTemplateBody); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 108; + this.structuredBodyNameLine(); + this.state = 110; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === LGFileParser.STRUCTURED_CONTENT) { + { + this.state = 109; + this.structuredBodyContentLine(); + } + } + + this.state = 112; + this.structuredBodyEndLine(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public structuredBodyNameLine(): StructuredBodyNameLineContext { + let _localctx: StructuredBodyNameLineContext = new StructuredBodyNameLineContext(this._ctx, this.state); + this.enterRule(_localctx, 20, LGFileParser.RULE_structuredBodyNameLine); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 114; + this.match(LGFileParser.LEFT_SQUARE_BRACKET); + this.state = 115; + this.match(LGFileParser.STRUCTURED_CONTENT); + this.state = 116; + this.match(LGFileParser.STRUCTURED_NEWLINE); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public structuredBodyContentLine(): StructuredBodyContentLineContext { + let _localctx: StructuredBodyContentLineContext = new StructuredBodyContentLineContext(this._ctx, this.state); + this.enterRule(_localctx, 22, LGFileParser.RULE_structuredBodyContentLine); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 120; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 118; + this.match(LGFileParser.STRUCTURED_CONTENT); + this.state = 119; + this.match(LGFileParser.STRUCTURED_NEWLINE); + } + } + this.state = 122; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la === LGFileParser.STRUCTURED_CONTENT); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public structuredBodyEndLine(): StructuredBodyEndLineContext { + let _localctx: StructuredBodyEndLineContext = new StructuredBodyEndLineContext(this._ctx, this.state); + this.enterRule(_localctx, 24, LGFileParser.RULE_structuredBodyEndLine); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 124; + this.match(LGFileParser.STRUCTURED_TEMPLATE_BODY_END); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public normalTemplateBody(): NormalTemplateBodyContext { + let _localctx: NormalTemplateBodyContext = new NormalTemplateBodyContext(this._ctx, this.state); + this.enterRule(_localctx, 26, LGFileParser.RULE_normalTemplateBody); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 129; + this._errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + this.state = 126; + this.templateString(); + this.state = 127; + this.newline(); + } + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 131; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 12, this._ctx); + } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public templateString(): TemplateStringContext { + let _localctx: TemplateStringContext = new TemplateStringContext(this._ctx, this.state); + this.enterRule(_localctx, 28, LGFileParser.RULE_templateString); + try { + this.state = 135; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case LGFileParser.DASH: + this.enterOuterAlt(_localctx, 1); + { + this.state = 133; + this.normalTemplateString(); + } + break; + case LGFileParser.INVALID_TOKEN_DEFAULT_MODE: + this.enterOuterAlt(_localctx, 2); + { + this.state = 134; + this.errorTemplateString(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public normalTemplateString(): NormalTemplateStringContext { + let _localctx: NormalTemplateStringContext = new NormalTemplateStringContext(this._ctx, this.state); + this.enterRule(_localctx, 30, LGFileParser.RULE_normalTemplateString); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 137; + this.match(LGFileParser.DASH); + this.state = 141; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.MULTI_LINE_TEXT) | (1 << LGFileParser.ESCAPE_CHARACTER) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEMPLATE_REF) | (1 << LGFileParser.TEXT_SEPARATOR) | (1 << LGFileParser.TEXT))) !== 0)) { + { + { + this.state = 138; + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.MULTI_LINE_TEXT) | (1 << LGFileParser.ESCAPE_CHARACTER) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEMPLATE_REF) | (1 << LGFileParser.TEXT_SEPARATOR) | (1 << LGFileParser.TEXT))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + this.state = 143; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public errorTemplateString(): ErrorTemplateStringContext { + let _localctx: ErrorTemplateStringContext = new ErrorTemplateStringContext(this._ctx, this.state); + this.enterRule(_localctx, 32, LGFileParser.RULE_errorTemplateString); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 145; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 144; + this.match(LGFileParser.INVALID_TOKEN_DEFAULT_MODE); + } + } + this.state = 147; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la === LGFileParser.INVALID_TOKEN_DEFAULT_MODE); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public ifElseTemplateBody(): IfElseTemplateBodyContext { + let _localctx: IfElseTemplateBodyContext = new IfElseTemplateBodyContext(this._ctx, this.state); + this.enterRule(_localctx, 34, LGFileParser.RULE_ifElseTemplateBody); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 150; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 149; + this.ifConditionRule(); + } + } + this.state = 152; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la === LGFileParser.DASH); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public ifConditionRule(): IfConditionRuleContext { + let _localctx: IfConditionRuleContext = new IfConditionRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 36, LGFileParser.RULE_ifConditionRule); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 154; + this.ifCondition(); + this.state = 155; + this.newline(); + this.state = 157; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 17, this._ctx) ) { + case 1: + { + this.state = 156; + this.normalTemplateBody(); + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public ifCondition(): IfConditionContext { + let _localctx: IfConditionContext = new IfConditionContext(this._ctx, this.state); + this.enterRule(_localctx, 38, LGFileParser.RULE_ifCondition); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 159; + this.match(LGFileParser.DASH); + this.state = 160; + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.IF) | (1 << LGFileParser.ELSEIF) | (1 << LGFileParser.ELSE))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 164; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEXT))) !== 0)) { + { + { + this.state = 161; + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEXT))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + this.state = 166; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public switchCaseTemplateBody(): SwitchCaseTemplateBodyContext { + let _localctx: SwitchCaseTemplateBodyContext = new SwitchCaseTemplateBodyContext(this._ctx, this.state); + this.enterRule(_localctx, 40, LGFileParser.RULE_switchCaseTemplateBody); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 168; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 167; + this.switchCaseRule(); + } + } + this.state = 170; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la === LGFileParser.DASH); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public switchCaseRule(): SwitchCaseRuleContext { + let _localctx: SwitchCaseRuleContext = new SwitchCaseRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 42, LGFileParser.RULE_switchCaseRule); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 172; + this.switchCaseStat(); + this.state = 173; + this.newline(); + this.state = 175; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 20, this._ctx) ) { + case 1: + { + this.state = 174; + this.normalTemplateBody(); + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public switchCaseStat(): SwitchCaseStatContext { + let _localctx: SwitchCaseStatContext = new SwitchCaseStatContext(this._ctx, this.state); + this.enterRule(_localctx, 44, LGFileParser.RULE_switchCaseStat); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 177; + this.match(LGFileParser.DASH); + this.state = 178; + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.SWITCH) | (1 << LGFileParser.CASE) | (1 << LGFileParser.DEFAULT))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 182; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEXT))) !== 0)) { + { + { + this.state = 179; + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << LGFileParser.WS) | (1 << LGFileParser.EXPRESSION) | (1 << LGFileParser.TEXT))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + this.state = 184; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public importDefinition(): ImportDefinitionContext { + let _localctx: ImportDefinitionContext = new ImportDefinitionContext(this._ctx, this.state); + this.enterRule(_localctx, 46, LGFileParser.RULE_importDefinition); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 185; + this.match(LGFileParser.IMPORT_DESC); + this.state = 186; + this.match(LGFileParser.IMPORT_PATH); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + + public static readonly _serializedATN: string = + "\x03\uAF6F\u8320\u479D\uB75C\u4880\u1605\u191C\uAB37\x03%\xBF\x04\x02" + + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + + "\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04" + + "\x18\t\x18\x04\x19\t\x19\x03\x02\x06\x024\n\x02\r\x02\x0E\x025\x03\x02" + + "\x03\x02\x03\x03\x03\x03\x03\x03\x05\x03=\n\x03\x03\x04\x03\x04\x03\x05" + + "\x03\x05\x03\x05\x05\x05D\n\x05\x03\x06\x03\x06\x03\x06\x05\x06I\n\x06" + + "\x03\x06\x05\x06L\n\x06\x03\x07\x07\x07O\n\x07\f\x07\x0E\x07R\v\x07\x03" + + "\b\x03\b\x03\b\x07\bW\n\b\f\b\x0E\bZ\v\b\x03\t\x03\t\x03\t\x03\t\x07\t" + + "`\n\t\f\t\x0E\tc\v\t\x05\te\n\t\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x05" + + "\nm\n\n\x03\v\x03\v\x05\vq\n\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03" + + "\r\x03\r\x06\r{\n\r\r\r\x0E\r|\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x0F" + + "\x06\x0F\x84\n\x0F\r\x0F\x0E\x0F\x85\x03\x10\x03\x10\x05\x10\x8A\n\x10" + + "\x03\x11\x03\x11\x07\x11\x8E\n\x11\f\x11\x0E\x11\x91\v\x11\x03\x12\x06" + + "\x12\x94\n\x12\r\x12\x0E\x12\x95\x03\x13\x06\x13\x99\n\x13\r\x13\x0E\x13" + + "\x9A\x03\x14\x03\x14\x03\x14\x05\x14\xA0\n\x14\x03\x15\x03\x15\x03\x15" + + "\x07\x15\xA5\n\x15\f\x15\x0E\x15\xA8\v\x15\x03\x16\x06\x16\xAB\n\x16\r" + + "\x16\x0E\x16\xAC\x03\x17\x03\x17\x03\x17\x05\x17\xB2\n\x17\x03\x18\x03" + + "\x18\x03\x18\x07\x18\xB7\n\x18\f\x18\x0E\x18\xBA\v\x18\x03\x19\x03\x19" + + "\x03\x19\x03\x19\x035\x02\x02\x1A\x02\x02\x04\x02\x06\x02\b\x02\n\x02" + + "\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02" + + "\x1E\x02 \x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x02\x02\b\x03\x03\x05" + + "\x05\x03\x02\x0E\x13\x04\x02\x04\x04\x1B \x03\x02\x15\x17\x05\x02\x04" + + "\x04\x1D\x1D \x03\x02\x18\x1A\xBF\x023\x03\x02\x02\x02\x04<\x03\x02\x02" + + "\x02\x06>\x03\x02\x02\x02\b@\x03\x02\x02\x02\nE\x03\x02\x02\x02\fP\x03" + + "\x02\x02\x02\x0ES\x03\x02\x02\x02\x10[\x03\x02\x02\x02\x12l\x03\x02\x02" + + "\x02\x14n\x03\x02\x02\x02\x16t\x03\x02\x02\x02\x18z\x03\x02\x02\x02\x1A" + + "~\x03\x02\x02\x02\x1C\x83\x03\x02\x02\x02\x1E\x89\x03\x02\x02\x02 \x8B" + + "\x03\x02\x02\x02\"\x93\x03\x02\x02\x02$\x98\x03\x02\x02\x02&\x9C\x03\x02" + + "\x02\x02(\xA1\x03\x02\x02\x02*\xAA\x03\x02\x02\x02,\xAE\x03\x02\x02\x02" + + ".\xB3\x03\x02\x02\x020\xBB\x03\x02\x02\x0224\x05\x04\x03\x0232\x03\x02" + + "\x02\x0245\x03\x02\x02\x0256\x03\x02\x02\x0253\x03\x02\x02\x0267\x03\x02" + + "\x02\x0278\x07\x02\x02\x038\x03\x03\x02\x02\x029=\x05\x06\x04\x02:=\x05" + + "\b\x05\x02;=\x050\x19\x02<9\x03\x02\x02\x02<:\x03\x02\x02\x02<;\x03\x02" + + "\x02\x02=\x05\x03\x02\x02\x02>?\t\x02\x02\x02?\x07\x03\x02\x02\x02@A\x05" + + "\n\x06\x02AC\x05\x06\x04\x02BD\x05\x12\n\x02CB\x03\x02\x02\x02CD\x03\x02" + + "\x02\x02D\t\x03\x02\x02\x02EK\x07\x06\x02\x02FH\x05\x0E\b\x02GI\x05\x10" + + "\t\x02HG\x03\x02\x02\x02HI\x03\x02\x02\x02IL\x03\x02\x02\x02JL\x05\f\x07" + + "\x02KF\x03\x02\x02\x02KJ\x03\x02\x02\x02L\v\x03\x02\x02\x02MO\t\x03\x02" + + "\x02NM\x03\x02\x02\x02OR\x03\x02\x02\x02PN\x03\x02\x02\x02PQ\x03\x02\x02" + + "\x02Q\r\x03\x02\x02\x02RP\x03\x02\x02\x02SX\x07\x0E\x02\x02TU\x07\x0F" + + "\x02\x02UW\x07\x0E\x02\x02VT\x03\x02\x02\x02WZ\x03\x02\x02\x02XV\x03\x02" + + "\x02\x02XY\x03\x02\x02\x02Y\x0F\x03\x02\x02\x02ZX\x03\x02\x02\x02[d\x07" + + "\x10\x02\x02\\a\x07\x0E\x02\x02]^\x07\x12\x02\x02^`\x07\x0E\x02\x02_]" + + "\x03\x02\x02\x02`c\x03\x02\x02\x02a_\x03\x02\x02\x02ab\x03\x02\x02\x02" + + "be\x03\x02\x02\x02ca\x03\x02\x02\x02d\\\x03\x02\x02\x02de\x03\x02\x02" + + "\x02ef\x03\x02\x02\x02fg\x07\x11\x02\x02g\x11\x03\x02\x02\x02hm\x05\x1C" + + "\x0F\x02im\x05$\x13\x02jm\x05*\x16\x02km\x05\x14\v\x02lh\x03\x02\x02\x02" + + "li\x03\x02\x02\x02lj\x03\x02\x02\x02lk\x03\x02\x02\x02m\x13\x03\x02\x02" + + "\x02np\x05\x16\f\x02oq\x05\x18\r\x02po\x03\x02\x02\x02pq\x03\x02\x02\x02" + + "qr\x03\x02\x02\x02rs\x05\x1A\x0E\x02s\x15\x03\x02\x02\x02tu\x07\b\x02" + + "\x02uv\x07%\x02\x02vw\x07#\x02\x02w\x17\x03\x02\x02\x02xy\x07%\x02\x02" + + "y{\x07#\x02\x02zx\x03\x02\x02\x02{|\x03\x02\x02\x02|z\x03\x02\x02\x02" + + "|}\x03\x02\x02\x02}\x19\x03\x02\x02\x02~\x7F\x07$\x02\x02\x7F\x1B\x03" + + "\x02\x02\x02\x80\x81\x05\x1E\x10\x02\x81\x82\x05\x06\x04\x02\x82\x84\x03" + + "\x02\x02\x02\x83\x80\x03\x02\x02\x02\x84\x85\x03\x02\x02\x02\x85\x83\x03" + + "\x02\x02\x02\x85\x86\x03\x02\x02\x02\x86\x1D\x03\x02\x02\x02\x87\x8A\x05" + + " \x11\x02\x88\x8A\x05\"\x12\x02\x89\x87\x03\x02\x02\x02\x89\x88\x03\x02" + + "\x02\x02\x8A\x1F\x03\x02\x02\x02\x8B\x8F\x07\x07\x02\x02\x8C\x8E\t\x04" + + "\x02\x02\x8D\x8C\x03\x02\x02\x02\x8E\x91\x03\x02\x02\x02\x8F\x8D\x03\x02" + + "\x02\x02\x8F\x90\x03\x02\x02\x02\x90!\x03\x02\x02\x02\x91\x8F\x03\x02" + + "\x02\x02\x92\x94\x07\f\x02\x02\x93\x92\x03\x02\x02\x02\x94\x95\x03\x02" + + "\x02\x02\x95\x93\x03\x02\x02\x02\x95\x96\x03\x02\x02\x02\x96#\x03\x02" + + "\x02\x02\x97\x99\x05&\x14\x02\x98\x97\x03\x02\x02\x02\x99\x9A\x03\x02" + + "\x02\x02\x9A\x98\x03\x02\x02\x02\x9A\x9B\x03\x02\x02\x02\x9B%\x03\x02" + + "\x02\x02\x9C\x9D\x05(\x15\x02\x9D\x9F\x05\x06\x04\x02\x9E\xA0\x05\x1C" + + "\x0F\x02\x9F\x9E\x03\x02\x02\x02\x9F\xA0\x03\x02\x02\x02\xA0\'\x03\x02" + + "\x02\x02\xA1\xA2\x07\x07\x02\x02\xA2\xA6\t\x05\x02\x02\xA3\xA5\t\x06\x02" + + "\x02\xA4\xA3\x03\x02\x02\x02\xA5\xA8\x03\x02\x02\x02\xA6\xA4\x03\x02\x02" + + "\x02\xA6\xA7\x03\x02\x02\x02\xA7)\x03\x02\x02\x02\xA8\xA6\x03\x02\x02" + + "\x02\xA9\xAB\x05,\x17\x02\xAA\xA9\x03\x02\x02\x02\xAB\xAC\x03\x02\x02" + + "\x02\xAC\xAA\x03\x02\x02\x02\xAC\xAD\x03\x02\x02\x02\xAD+\x03\x02\x02" + + "\x02\xAE\xAF\x05.\x18\x02\xAF\xB1\x05\x06\x04\x02\xB0\xB2\x05\x1C\x0F" + + "\x02\xB1\xB0\x03\x02\x02\x02\xB1\xB2\x03\x02\x02\x02\xB2-\x03\x02\x02" + + "\x02\xB3\xB4\x07\x07\x02\x02\xB4\xB8\t\x07\x02\x02\xB5\xB7\t\x06\x02\x02" + + "\xB6\xB5\x03\x02\x02\x02\xB7\xBA\x03\x02\x02\x02\xB8\xB6\x03\x02\x02\x02" + + "\xB8\xB9\x03\x02\x02\x02\xB9/\x03\x02\x02\x02\xBA\xB8\x03\x02\x02\x02" + + "\xBB\xBC\x07\n\x02\x02\xBC\xBD\x07\v\x02\x02\xBD1\x03\x02\x02\x02\x18" + + "5(visitor: LGFileParserVisitor): Result { + if (visitor.visitFile) { + return visitor.visitFile(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ParagraphContext extends ParserRuleContext { + public newline(): NewlineContext | undefined { + return this.tryGetRuleContext(0, NewlineContext); + } + public templateDefinition(): TemplateDefinitionContext | undefined { + return this.tryGetRuleContext(0, TemplateDefinitionContext); + } + public importDefinition(): ImportDefinitionContext | undefined { + return this.tryGetRuleContext(0, ImportDefinitionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_paragraph; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterParagraph) { + listener.enterParagraph(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitParagraph) { + listener.exitParagraph(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitParagraph) { + return visitor.visitParagraph(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NewlineContext extends ParserRuleContext { + public NEWLINE(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.NEWLINE, 0); } + public EOF(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.EOF, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_newline; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterNewline) { + listener.enterNewline(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitNewline) { + listener.exitNewline(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitNewline) { + return visitor.visitNewline(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TemplateDefinitionContext extends ParserRuleContext { + public templateNameLine(): TemplateNameLineContext { + return this.getRuleContext(0, TemplateNameLineContext); + } + public newline(): NewlineContext { + return this.getRuleContext(0, NewlineContext); + } + public templateBody(): TemplateBodyContext | undefined { + return this.tryGetRuleContext(0, TemplateBodyContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_templateDefinition; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterTemplateDefinition) { + listener.enterTemplateDefinition(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitTemplateDefinition) { + listener.exitTemplateDefinition(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitTemplateDefinition) { + return visitor.visitTemplateDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TemplateNameLineContext extends ParserRuleContext { + public HASH(): TerminalNode { return this.getToken(LGFileParser.HASH, 0); } + public errorTemplateName(): ErrorTemplateNameContext | undefined { + return this.tryGetRuleContext(0, ErrorTemplateNameContext); + } + public templateName(): TemplateNameContext | undefined { + return this.tryGetRuleContext(0, TemplateNameContext); + } + public parameters(): ParametersContext | undefined { + return this.tryGetRuleContext(0, ParametersContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_templateNameLine; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterTemplateNameLine) { + listener.enterTemplateNameLine(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitTemplateNameLine) { + listener.exitTemplateNameLine(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitTemplateNameLine) { + return visitor.visitTemplateNameLine(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ErrorTemplateNameContext extends ParserRuleContext { + public IDENTIFIER(): TerminalNode[]; + public IDENTIFIER(i: number): TerminalNode; + public IDENTIFIER(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.IDENTIFIER); + } else { + return this.getToken(LGFileParser.IDENTIFIER, i); + } + } + public TEXT_IN_NAME(): TerminalNode[]; + public TEXT_IN_NAME(i: number): TerminalNode; + public TEXT_IN_NAME(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.TEXT_IN_NAME); + } else { + return this.getToken(LGFileParser.TEXT_IN_NAME, i); + } + } + public OPEN_PARENTHESIS(): TerminalNode[]; + public OPEN_PARENTHESIS(i: number): TerminalNode; + public OPEN_PARENTHESIS(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.OPEN_PARENTHESIS); + } else { + return this.getToken(LGFileParser.OPEN_PARENTHESIS, i); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.COMMA); + } else { + return this.getToken(LGFileParser.COMMA, i); + } + } + public CLOSE_PARENTHESIS(): TerminalNode[]; + public CLOSE_PARENTHESIS(i: number): TerminalNode; + public CLOSE_PARENTHESIS(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.CLOSE_PARENTHESIS); + } else { + return this.getToken(LGFileParser.CLOSE_PARENTHESIS, i); + } + } + public DOT(): TerminalNode[]; + public DOT(i: number): TerminalNode; + public DOT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.DOT); + } else { + return this.getToken(LGFileParser.DOT, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_errorTemplateName; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterErrorTemplateName) { + listener.enterErrorTemplateName(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitErrorTemplateName) { + listener.exitErrorTemplateName(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitErrorTemplateName) { + return visitor.visitErrorTemplateName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TemplateNameContext extends ParserRuleContext { + public IDENTIFIER(): TerminalNode[]; + public IDENTIFIER(i: number): TerminalNode; + public IDENTIFIER(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.IDENTIFIER); + } else { + return this.getToken(LGFileParser.IDENTIFIER, i); + } + } + public DOT(): TerminalNode[]; + public DOT(i: number): TerminalNode; + public DOT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.DOT); + } else { + return this.getToken(LGFileParser.DOT, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_templateName; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterTemplateName) { + listener.enterTemplateName(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitTemplateName) { + listener.exitTemplateName(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitTemplateName) { + return visitor.visitTemplateName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ParametersContext extends ParserRuleContext { + public OPEN_PARENTHESIS(): TerminalNode { return this.getToken(LGFileParser.OPEN_PARENTHESIS, 0); } + public CLOSE_PARENTHESIS(): TerminalNode { return this.getToken(LGFileParser.CLOSE_PARENTHESIS, 0); } + public IDENTIFIER(): TerminalNode[]; + public IDENTIFIER(i: number): TerminalNode; + public IDENTIFIER(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.IDENTIFIER); + } else { + return this.getToken(LGFileParser.IDENTIFIER, i); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.COMMA); + } else { + return this.getToken(LGFileParser.COMMA, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_parameters; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterParameters) { + listener.enterParameters(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitParameters) { + listener.exitParameters(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitParameters) { + return visitor.visitParameters(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TemplateBodyContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_templateBody; } + public copyFrom(ctx: TemplateBodyContext): void { + super.copyFrom(ctx); + } +} +export class SwitchCaseBodyContext extends TemplateBodyContext { + public switchCaseTemplateBody(): SwitchCaseTemplateBodyContext { + return this.getRuleContext(0, SwitchCaseTemplateBodyContext); + } + constructor(ctx: TemplateBodyContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterSwitchCaseBody) { + listener.enterSwitchCaseBody(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitSwitchCaseBody) { + listener.exitSwitchCaseBody(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitSwitchCaseBody) { + return visitor.visitSwitchCaseBody(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NormalBodyContext extends TemplateBodyContext { + public normalTemplateBody(): NormalTemplateBodyContext { + return this.getRuleContext(0, NormalTemplateBodyContext); + } + constructor(ctx: TemplateBodyContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterNormalBody) { + listener.enterNormalBody(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitNormalBody) { + listener.exitNormalBody(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitNormalBody) { + return visitor.visitNormalBody(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class StructuredBodyContext extends TemplateBodyContext { + public structuredTemplateBody(): StructuredTemplateBodyContext { + return this.getRuleContext(0, StructuredTemplateBodyContext); + } + constructor(ctx: TemplateBodyContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterStructuredBody) { + listener.enterStructuredBody(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitStructuredBody) { + listener.exitStructuredBody(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitStructuredBody) { + return visitor.visitStructuredBody(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IfElseBodyContext extends TemplateBodyContext { + public ifElseTemplateBody(): IfElseTemplateBodyContext { + return this.getRuleContext(0, IfElseTemplateBodyContext); + } + constructor(ctx: TemplateBodyContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterIfElseBody) { + listener.enterIfElseBody(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitIfElseBody) { + listener.exitIfElseBody(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitIfElseBody) { + return visitor.visitIfElseBody(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StructuredTemplateBodyContext extends ParserRuleContext { + public structuredBodyNameLine(): StructuredBodyNameLineContext { + return this.getRuleContext(0, StructuredBodyNameLineContext); + } + public structuredBodyEndLine(): StructuredBodyEndLineContext { + return this.getRuleContext(0, StructuredBodyEndLineContext); + } + public structuredBodyContentLine(): StructuredBodyContentLineContext | undefined { + return this.tryGetRuleContext(0, StructuredBodyContentLineContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_structuredTemplateBody; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterStructuredTemplateBody) { + listener.enterStructuredTemplateBody(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitStructuredTemplateBody) { + listener.exitStructuredTemplateBody(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitStructuredTemplateBody) { + return visitor.visitStructuredTemplateBody(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StructuredBodyNameLineContext extends ParserRuleContext { + public LEFT_SQUARE_BRACKET(): TerminalNode { return this.getToken(LGFileParser.LEFT_SQUARE_BRACKET, 0); } + public STRUCTURED_CONTENT(): TerminalNode { return this.getToken(LGFileParser.STRUCTURED_CONTENT, 0); } + public STRUCTURED_NEWLINE(): TerminalNode { return this.getToken(LGFileParser.STRUCTURED_NEWLINE, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_structuredBodyNameLine; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterStructuredBodyNameLine) { + listener.enterStructuredBodyNameLine(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitStructuredBodyNameLine) { + listener.exitStructuredBodyNameLine(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitStructuredBodyNameLine) { + return visitor.visitStructuredBodyNameLine(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StructuredBodyContentLineContext extends ParserRuleContext { + public STRUCTURED_CONTENT(): TerminalNode[]; + public STRUCTURED_CONTENT(i: number): TerminalNode; + public STRUCTURED_CONTENT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.STRUCTURED_CONTENT); + } else { + return this.getToken(LGFileParser.STRUCTURED_CONTENT, i); + } + } + public STRUCTURED_NEWLINE(): TerminalNode[]; + public STRUCTURED_NEWLINE(i: number): TerminalNode; + public STRUCTURED_NEWLINE(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.STRUCTURED_NEWLINE); + } else { + return this.getToken(LGFileParser.STRUCTURED_NEWLINE, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_structuredBodyContentLine; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterStructuredBodyContentLine) { + listener.enterStructuredBodyContentLine(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitStructuredBodyContentLine) { + listener.exitStructuredBodyContentLine(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitStructuredBodyContentLine) { + return visitor.visitStructuredBodyContentLine(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StructuredBodyEndLineContext extends ParserRuleContext { + public STRUCTURED_TEMPLATE_BODY_END(): TerminalNode { return this.getToken(LGFileParser.STRUCTURED_TEMPLATE_BODY_END, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_structuredBodyEndLine; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterStructuredBodyEndLine) { + listener.enterStructuredBodyEndLine(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitStructuredBodyEndLine) { + listener.exitStructuredBodyEndLine(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitStructuredBodyEndLine) { + return visitor.visitStructuredBodyEndLine(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NormalTemplateBodyContext extends ParserRuleContext { + public templateString(): TemplateStringContext[]; + public templateString(i: number): TemplateStringContext; + public templateString(i?: number): TemplateStringContext | TemplateStringContext[] { + if (i === undefined) { + return this.getRuleContexts(TemplateStringContext); + } else { + return this.getRuleContext(i, TemplateStringContext); + } + } + public newline(): NewlineContext[]; + public newline(i: number): NewlineContext; + public newline(i?: number): NewlineContext | NewlineContext[] { + if (i === undefined) { + return this.getRuleContexts(NewlineContext); + } else { + return this.getRuleContext(i, NewlineContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_normalTemplateBody; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterNormalTemplateBody) { + listener.enterNormalTemplateBody(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitNormalTemplateBody) { + listener.exitNormalTemplateBody(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitNormalTemplateBody) { + return visitor.visitNormalTemplateBody(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TemplateStringContext extends ParserRuleContext { + public normalTemplateString(): NormalTemplateStringContext | undefined { + return this.tryGetRuleContext(0, NormalTemplateStringContext); + } + public errorTemplateString(): ErrorTemplateStringContext | undefined { + return this.tryGetRuleContext(0, ErrorTemplateStringContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_templateString; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterTemplateString) { + listener.enterTemplateString(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitTemplateString) { + listener.exitTemplateString(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitTemplateString) { + return visitor.visitTemplateString(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NormalTemplateStringContext extends ParserRuleContext { + public DASH(): TerminalNode { return this.getToken(LGFileParser.DASH, 0); } + public WS(): TerminalNode[]; + public WS(i: number): TerminalNode; + public WS(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.WS); + } else { + return this.getToken(LGFileParser.WS, i); + } + } + public TEXT(): TerminalNode[]; + public TEXT(i: number): TerminalNode; + public TEXT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.TEXT); + } else { + return this.getToken(LGFileParser.TEXT, i); + } + } + public EXPRESSION(): TerminalNode[]; + public EXPRESSION(i: number): TerminalNode; + public EXPRESSION(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.EXPRESSION); + } else { + return this.getToken(LGFileParser.EXPRESSION, i); + } + } + public TEMPLATE_REF(): TerminalNode[]; + public TEMPLATE_REF(i: number): TerminalNode; + public TEMPLATE_REF(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.TEMPLATE_REF); + } else { + return this.getToken(LGFileParser.TEMPLATE_REF, i); + } + } + public TEXT_SEPARATOR(): TerminalNode[]; + public TEXT_SEPARATOR(i: number): TerminalNode; + public TEXT_SEPARATOR(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.TEXT_SEPARATOR); + } else { + return this.getToken(LGFileParser.TEXT_SEPARATOR, i); + } + } + public MULTI_LINE_TEXT(): TerminalNode[]; + public MULTI_LINE_TEXT(i: number): TerminalNode; + public MULTI_LINE_TEXT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.MULTI_LINE_TEXT); + } else { + return this.getToken(LGFileParser.MULTI_LINE_TEXT, i); + } + } + public ESCAPE_CHARACTER(): TerminalNode[]; + public ESCAPE_CHARACTER(i: number): TerminalNode; + public ESCAPE_CHARACTER(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.ESCAPE_CHARACTER); + } else { + return this.getToken(LGFileParser.ESCAPE_CHARACTER, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_normalTemplateString; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterNormalTemplateString) { + listener.enterNormalTemplateString(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitNormalTemplateString) { + listener.exitNormalTemplateString(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitNormalTemplateString) { + return visitor.visitNormalTemplateString(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ErrorTemplateStringContext extends ParserRuleContext { + public INVALID_TOKEN_DEFAULT_MODE(): TerminalNode[]; + public INVALID_TOKEN_DEFAULT_MODE(i: number): TerminalNode; + public INVALID_TOKEN_DEFAULT_MODE(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.INVALID_TOKEN_DEFAULT_MODE); + } else { + return this.getToken(LGFileParser.INVALID_TOKEN_DEFAULT_MODE, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_errorTemplateString; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterErrorTemplateString) { + listener.enterErrorTemplateString(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitErrorTemplateString) { + listener.exitErrorTemplateString(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitErrorTemplateString) { + return visitor.visitErrorTemplateString(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IfElseTemplateBodyContext extends ParserRuleContext { + public ifConditionRule(): IfConditionRuleContext[]; + public ifConditionRule(i: number): IfConditionRuleContext; + public ifConditionRule(i?: number): IfConditionRuleContext | IfConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(IfConditionRuleContext); + } else { + return this.getRuleContext(i, IfConditionRuleContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_ifElseTemplateBody; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterIfElseTemplateBody) { + listener.enterIfElseTemplateBody(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitIfElseTemplateBody) { + listener.exitIfElseTemplateBody(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitIfElseTemplateBody) { + return visitor.visitIfElseTemplateBody(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IfConditionRuleContext extends ParserRuleContext { + public ifCondition(): IfConditionContext { + return this.getRuleContext(0, IfConditionContext); + } + public newline(): NewlineContext { + return this.getRuleContext(0, NewlineContext); + } + public normalTemplateBody(): NormalTemplateBodyContext | undefined { + return this.tryGetRuleContext(0, NormalTemplateBodyContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_ifConditionRule; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterIfConditionRule) { + listener.enterIfConditionRule(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitIfConditionRule) { + listener.exitIfConditionRule(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitIfConditionRule) { + return visitor.visitIfConditionRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IfConditionContext extends ParserRuleContext { + public DASH(): TerminalNode { return this.getToken(LGFileParser.DASH, 0); } + public IF(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.IF, 0); } + public ELSE(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.ELSE, 0); } + public ELSEIF(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.ELSEIF, 0); } + public WS(): TerminalNode[]; + public WS(i: number): TerminalNode; + public WS(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.WS); + } else { + return this.getToken(LGFileParser.WS, i); + } + } + public TEXT(): TerminalNode[]; + public TEXT(i: number): TerminalNode; + public TEXT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.TEXT); + } else { + return this.getToken(LGFileParser.TEXT, i); + } + } + public EXPRESSION(): TerminalNode[]; + public EXPRESSION(i: number): TerminalNode; + public EXPRESSION(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.EXPRESSION); + } else { + return this.getToken(LGFileParser.EXPRESSION, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_ifCondition; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterIfCondition) { + listener.enterIfCondition(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitIfCondition) { + listener.exitIfCondition(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitIfCondition) { + return visitor.visitIfCondition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SwitchCaseTemplateBodyContext extends ParserRuleContext { + public switchCaseRule(): SwitchCaseRuleContext[]; + public switchCaseRule(i: number): SwitchCaseRuleContext; + public switchCaseRule(i?: number): SwitchCaseRuleContext | SwitchCaseRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(SwitchCaseRuleContext); + } else { + return this.getRuleContext(i, SwitchCaseRuleContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_switchCaseTemplateBody; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterSwitchCaseTemplateBody) { + listener.enterSwitchCaseTemplateBody(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitSwitchCaseTemplateBody) { + listener.exitSwitchCaseTemplateBody(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitSwitchCaseTemplateBody) { + return visitor.visitSwitchCaseTemplateBody(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SwitchCaseRuleContext extends ParserRuleContext { + public switchCaseStat(): SwitchCaseStatContext { + return this.getRuleContext(0, SwitchCaseStatContext); + } + public newline(): NewlineContext { + return this.getRuleContext(0, NewlineContext); + } + public normalTemplateBody(): NormalTemplateBodyContext | undefined { + return this.tryGetRuleContext(0, NormalTemplateBodyContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_switchCaseRule; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterSwitchCaseRule) { + listener.enterSwitchCaseRule(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitSwitchCaseRule) { + listener.exitSwitchCaseRule(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitSwitchCaseRule) { + return visitor.visitSwitchCaseRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SwitchCaseStatContext extends ParserRuleContext { + public DASH(): TerminalNode { return this.getToken(LGFileParser.DASH, 0); } + public SWITCH(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.SWITCH, 0); } + public CASE(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.CASE, 0); } + public DEFAULT(): TerminalNode | undefined { return this.tryGetToken(LGFileParser.DEFAULT, 0); } + public WS(): TerminalNode[]; + public WS(i: number): TerminalNode; + public WS(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.WS); + } else { + return this.getToken(LGFileParser.WS, i); + } + } + public TEXT(): TerminalNode[]; + public TEXT(i: number): TerminalNode; + public TEXT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.TEXT); + } else { + return this.getToken(LGFileParser.TEXT, i); + } + } + public EXPRESSION(): TerminalNode[]; + public EXPRESSION(i: number): TerminalNode; + public EXPRESSION(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(LGFileParser.EXPRESSION); + } else { + return this.getToken(LGFileParser.EXPRESSION, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_switchCaseStat; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterSwitchCaseStat) { + listener.enterSwitchCaseStat(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitSwitchCaseStat) { + listener.exitSwitchCaseStat(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitSwitchCaseStat) { + return visitor.visitSwitchCaseStat(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ImportDefinitionContext extends ParserRuleContext { + public IMPORT_DESC(): TerminalNode { return this.getToken(LGFileParser.IMPORT_DESC, 0); } + public IMPORT_PATH(): TerminalNode { return this.getToken(LGFileParser.IMPORT_PATH, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return LGFileParser.RULE_importDefinition; } + // @Override + public enterRule(listener: LGFileParserListener): void { + if (listener.enterImportDefinition) { + listener.enterImportDefinition(this); + } + } + // @Override + public exitRule(listener: LGFileParserListener): void { + if (listener.exitImportDefinition) { + listener.exitImportDefinition(this); + } + } + // @Override + public accept(visitor: LGFileParserVisitor): Result { + if (visitor.visitImportDefinition) { + return visitor.visitImportDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + diff --git a/libraries/botbuilder-lg/src/generated/LGFileParserListener.ts b/libraries/botbuilder-lg/src/generated/LGFileParserListener.ts index 7c509193fe..afc3b07693 100644 --- a/libraries/botbuilder-lg/src/generated/LGFileParserListener.ts +++ b/libraries/botbuilder-lg/src/generated/LGFileParserListener.ts @@ -1,357 +1,364 @@ -// Generated from ../LGFileParser.g4 by ANTLR 4.6-SNAPSHOT - - -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; - -import { SwitchCaseBodyContext } from "./LGFileParser"; -import { NormalBodyContext } from "./LGFileParser"; -import { StructuredBodyContext } from "./LGFileParser"; -import { IfElseBodyContext } from "./LGFileParser"; -import { FileContext } from "./LGFileParser"; -import { ParagraphContext } from "./LGFileParser"; -import { NewlineContext } from "./LGFileParser"; -import { TemplateDefinitionContext } from "./LGFileParser"; -import { TemplateNameLineContext } from "./LGFileParser"; -import { ErrorTemplateNameContext } from "./LGFileParser"; -import { TemplateNameContext } from "./LGFileParser"; -import { ParametersContext } from "./LGFileParser"; -import { TemplateBodyContext } from "./LGFileParser"; -import { StructuredTemplateBodyContext } from "./LGFileParser"; -import { StructuredBodyNameLineContext } from "./LGFileParser"; -import { StructuredBodyContentLineContext } from "./LGFileParser"; -import { StructuredBodyEndLineContext } from "./LGFileParser"; -import { NormalTemplateBodyContext } from "./LGFileParser"; -import { TemplateStringContext } from "./LGFileParser"; -import { NormalTemplateStringContext } from "./LGFileParser"; -import { ErrorTemplateStringContext } from "./LGFileParser"; -import { IfElseTemplateBodyContext } from "./LGFileParser"; -import { IfConditionRuleContext } from "./LGFileParser"; -import { IfConditionContext } from "./LGFileParser"; -import { SwitchCaseTemplateBodyContext } from "./LGFileParser"; -import { SwitchCaseRuleContext } from "./LGFileParser"; -import { SwitchCaseStatContext } from "./LGFileParser"; -import { ImportDefinitionContext } from "./LGFileParser"; - - -/** - * This interface defines a complete listener for a parse tree produced by - * `LGFileParser`. - */ -export interface LGFileParserListener extends ParseTreeListener { - /** - * Enter a parse tree produced by the `switchCaseBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - */ - enterSwitchCaseBody?: (ctx: SwitchCaseBodyContext) => void; - /** - * Exit a parse tree produced by the `switchCaseBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - */ - exitSwitchCaseBody?: (ctx: SwitchCaseBodyContext) => void; - - /** - * Enter a parse tree produced by the `normalBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - */ - enterNormalBody?: (ctx: NormalBodyContext) => void; - /** - * Exit a parse tree produced by the `normalBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - */ - exitNormalBody?: (ctx: NormalBodyContext) => void; - - /** - * Enter a parse tree produced by the `structuredBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - */ - enterStructuredBody?: (ctx: StructuredBodyContext) => void; - /** - * Exit a parse tree produced by the `structuredBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - */ - exitStructuredBody?: (ctx: StructuredBodyContext) => void; - - /** - * Enter a parse tree produced by the `ifElseBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - */ - enterIfElseBody?: (ctx: IfElseBodyContext) => void; - /** - * Exit a parse tree produced by the `ifElseBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - */ - exitIfElseBody?: (ctx: IfElseBodyContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.file`. - * @param ctx the parse tree - */ - enterFile?: (ctx: FileContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.file`. - * @param ctx the parse tree - */ - exitFile?: (ctx: FileContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.paragraph`. - * @param ctx the parse tree - */ - enterParagraph?: (ctx: ParagraphContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.paragraph`. - * @param ctx the parse tree - */ - exitParagraph?: (ctx: ParagraphContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.newline`. - * @param ctx the parse tree - */ - enterNewline?: (ctx: NewlineContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.newline`. - * @param ctx the parse tree - */ - exitNewline?: (ctx: NewlineContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.templateDefinition`. - * @param ctx the parse tree - */ - enterTemplateDefinition?: (ctx: TemplateDefinitionContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.templateDefinition`. - * @param ctx the parse tree - */ - exitTemplateDefinition?: (ctx: TemplateDefinitionContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.templateNameLine`. - * @param ctx the parse tree - */ - enterTemplateNameLine?: (ctx: TemplateNameLineContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.templateNameLine`. - * @param ctx the parse tree - */ - exitTemplateNameLine?: (ctx: TemplateNameLineContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.errorTemplateName`. - * @param ctx the parse tree - */ - enterErrorTemplateName?: (ctx: ErrorTemplateNameContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.errorTemplateName`. - * @param ctx the parse tree - */ - exitErrorTemplateName?: (ctx: ErrorTemplateNameContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.templateName`. - * @param ctx the parse tree - */ - enterTemplateName?: (ctx: TemplateNameContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.templateName`. - * @param ctx the parse tree - */ - exitTemplateName?: (ctx: TemplateNameContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.parameters`. - * @param ctx the parse tree - */ - enterParameters?: (ctx: ParametersContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.parameters`. - * @param ctx the parse tree - */ - exitParameters?: (ctx: ParametersContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.templateBody`. - * @param ctx the parse tree - */ - enterTemplateBody?: (ctx: TemplateBodyContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.templateBody`. - * @param ctx the parse tree - */ - exitTemplateBody?: (ctx: TemplateBodyContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.structuredTemplateBody`. - * @param ctx the parse tree - */ - enterStructuredTemplateBody?: (ctx: StructuredTemplateBodyContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.structuredTemplateBody`. - * @param ctx the parse tree - */ - exitStructuredTemplateBody?: (ctx: StructuredTemplateBodyContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.structuredBodyNameLine`. - * @param ctx the parse tree - */ - enterStructuredBodyNameLine?: (ctx: StructuredBodyNameLineContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.structuredBodyNameLine`. - * @param ctx the parse tree - */ - exitStructuredBodyNameLine?: (ctx: StructuredBodyNameLineContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.structuredBodyContentLine`. - * @param ctx the parse tree - */ - enterStructuredBodyContentLine?: (ctx: StructuredBodyContentLineContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.structuredBodyContentLine`. - * @param ctx the parse tree - */ - exitStructuredBodyContentLine?: (ctx: StructuredBodyContentLineContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.structuredBodyEndLine`. - * @param ctx the parse tree - */ - enterStructuredBodyEndLine?: (ctx: StructuredBodyEndLineContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.structuredBodyEndLine`. - * @param ctx the parse tree - */ - exitStructuredBodyEndLine?: (ctx: StructuredBodyEndLineContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.normalTemplateBody`. - * @param ctx the parse tree - */ - enterNormalTemplateBody?: (ctx: NormalTemplateBodyContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.normalTemplateBody`. - * @param ctx the parse tree - */ - exitNormalTemplateBody?: (ctx: NormalTemplateBodyContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.templateString`. - * @param ctx the parse tree - */ - enterTemplateString?: (ctx: TemplateStringContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.templateString`. - * @param ctx the parse tree - */ - exitTemplateString?: (ctx: TemplateStringContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.normalTemplateString`. - * @param ctx the parse tree - */ - enterNormalTemplateString?: (ctx: NormalTemplateStringContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.normalTemplateString`. - * @param ctx the parse tree - */ - exitNormalTemplateString?: (ctx: NormalTemplateStringContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.errorTemplateString`. - * @param ctx the parse tree - */ - enterErrorTemplateString?: (ctx: ErrorTemplateStringContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.errorTemplateString`. - * @param ctx the parse tree - */ - exitErrorTemplateString?: (ctx: ErrorTemplateStringContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.ifElseTemplateBody`. - * @param ctx the parse tree - */ - enterIfElseTemplateBody?: (ctx: IfElseTemplateBodyContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.ifElseTemplateBody`. - * @param ctx the parse tree - */ - exitIfElseTemplateBody?: (ctx: IfElseTemplateBodyContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.ifConditionRule`. - * @param ctx the parse tree - */ - enterIfConditionRule?: (ctx: IfConditionRuleContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.ifConditionRule`. - * @param ctx the parse tree - */ - exitIfConditionRule?: (ctx: IfConditionRuleContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.ifCondition`. - * @param ctx the parse tree - */ - enterIfCondition?: (ctx: IfConditionContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.ifCondition`. - * @param ctx the parse tree - */ - exitIfCondition?: (ctx: IfConditionContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.switchCaseTemplateBody`. - * @param ctx the parse tree - */ - enterSwitchCaseTemplateBody?: (ctx: SwitchCaseTemplateBodyContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.switchCaseTemplateBody`. - * @param ctx the parse tree - */ - exitSwitchCaseTemplateBody?: (ctx: SwitchCaseTemplateBodyContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.switchCaseRule`. - * @param ctx the parse tree - */ - enterSwitchCaseRule?: (ctx: SwitchCaseRuleContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.switchCaseRule`. - * @param ctx the parse tree - */ - exitSwitchCaseRule?: (ctx: SwitchCaseRuleContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.switchCaseStat`. - * @param ctx the parse tree - */ - enterSwitchCaseStat?: (ctx: SwitchCaseStatContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.switchCaseStat`. - * @param ctx the parse tree - */ - exitSwitchCaseStat?: (ctx: SwitchCaseStatContext) => void; - - /** - * Enter a parse tree produced by `LGFileParser.importDefinition`. - * @param ctx the parse tree - */ - enterImportDefinition?: (ctx: ImportDefinitionContext) => void; - /** - * Exit a parse tree produced by `LGFileParser.importDefinition`. - * @param ctx the parse tree - */ - exitImportDefinition?: (ctx: ImportDefinitionContext) => void; -} - +/** + * @module botbuilder-lg + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// Generated from ../LGFileParser.g4 by ANTLR 4.6-SNAPSHOT + + +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; + +import { SwitchCaseBodyContext } from "./LGFileParser"; +import { NormalBodyContext } from "./LGFileParser"; +import { StructuredBodyContext } from "./LGFileParser"; +import { IfElseBodyContext } from "./LGFileParser"; +import { FileContext } from "./LGFileParser"; +import { ParagraphContext } from "./LGFileParser"; +import { NewlineContext } from "./LGFileParser"; +import { TemplateDefinitionContext } from "./LGFileParser"; +import { TemplateNameLineContext } from "./LGFileParser"; +import { ErrorTemplateNameContext } from "./LGFileParser"; +import { TemplateNameContext } from "./LGFileParser"; +import { ParametersContext } from "./LGFileParser"; +import { TemplateBodyContext } from "./LGFileParser"; +import { StructuredTemplateBodyContext } from "./LGFileParser"; +import { StructuredBodyNameLineContext } from "./LGFileParser"; +import { StructuredBodyContentLineContext } from "./LGFileParser"; +import { StructuredBodyEndLineContext } from "./LGFileParser"; +import { NormalTemplateBodyContext } from "./LGFileParser"; +import { TemplateStringContext } from "./LGFileParser"; +import { NormalTemplateStringContext } from "./LGFileParser"; +import { ErrorTemplateStringContext } from "./LGFileParser"; +import { IfElseTemplateBodyContext } from "./LGFileParser"; +import { IfConditionRuleContext } from "./LGFileParser"; +import { IfConditionContext } from "./LGFileParser"; +import { SwitchCaseTemplateBodyContext } from "./LGFileParser"; +import { SwitchCaseRuleContext } from "./LGFileParser"; +import { SwitchCaseStatContext } from "./LGFileParser"; +import { ImportDefinitionContext } from "./LGFileParser"; + + +/** + * This interface defines a complete listener for a parse tree produced by + * `LGFileParser`. + */ +export interface LGFileParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by the `switchCaseBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + */ + enterSwitchCaseBody?: (ctx: SwitchCaseBodyContext) => void; + /** + * Exit a parse tree produced by the `switchCaseBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + */ + exitSwitchCaseBody?: (ctx: SwitchCaseBodyContext) => void; + + /** + * Enter a parse tree produced by the `normalBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + */ + enterNormalBody?: (ctx: NormalBodyContext) => void; + /** + * Exit a parse tree produced by the `normalBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + */ + exitNormalBody?: (ctx: NormalBodyContext) => void; + + /** + * Enter a parse tree produced by the `structuredBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + */ + enterStructuredBody?: (ctx: StructuredBodyContext) => void; + /** + * Exit a parse tree produced by the `structuredBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + */ + exitStructuredBody?: (ctx: StructuredBodyContext) => void; + + /** + * Enter a parse tree produced by the `ifElseBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + */ + enterIfElseBody?: (ctx: IfElseBodyContext) => void; + /** + * Exit a parse tree produced by the `ifElseBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + */ + exitIfElseBody?: (ctx: IfElseBodyContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.file`. + * @param ctx the parse tree + */ + enterFile?: (ctx: FileContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.file`. + * @param ctx the parse tree + */ + exitFile?: (ctx: FileContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.paragraph`. + * @param ctx the parse tree + */ + enterParagraph?: (ctx: ParagraphContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.paragraph`. + * @param ctx the parse tree + */ + exitParagraph?: (ctx: ParagraphContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.newline`. + * @param ctx the parse tree + */ + enterNewline?: (ctx: NewlineContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.newline`. + * @param ctx the parse tree + */ + exitNewline?: (ctx: NewlineContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.templateDefinition`. + * @param ctx the parse tree + */ + enterTemplateDefinition?: (ctx: TemplateDefinitionContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.templateDefinition`. + * @param ctx the parse tree + */ + exitTemplateDefinition?: (ctx: TemplateDefinitionContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.templateNameLine`. + * @param ctx the parse tree + */ + enterTemplateNameLine?: (ctx: TemplateNameLineContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.templateNameLine`. + * @param ctx the parse tree + */ + exitTemplateNameLine?: (ctx: TemplateNameLineContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.errorTemplateName`. + * @param ctx the parse tree + */ + enterErrorTemplateName?: (ctx: ErrorTemplateNameContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.errorTemplateName`. + * @param ctx the parse tree + */ + exitErrorTemplateName?: (ctx: ErrorTemplateNameContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.templateName`. + * @param ctx the parse tree + */ + enterTemplateName?: (ctx: TemplateNameContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.templateName`. + * @param ctx the parse tree + */ + exitTemplateName?: (ctx: TemplateNameContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.parameters`. + * @param ctx the parse tree + */ + enterParameters?: (ctx: ParametersContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.parameters`. + * @param ctx the parse tree + */ + exitParameters?: (ctx: ParametersContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.templateBody`. + * @param ctx the parse tree + */ + enterTemplateBody?: (ctx: TemplateBodyContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.templateBody`. + * @param ctx the parse tree + */ + exitTemplateBody?: (ctx: TemplateBodyContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.structuredTemplateBody`. + * @param ctx the parse tree + */ + enterStructuredTemplateBody?: (ctx: StructuredTemplateBodyContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.structuredTemplateBody`. + * @param ctx the parse tree + */ + exitStructuredTemplateBody?: (ctx: StructuredTemplateBodyContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.structuredBodyNameLine`. + * @param ctx the parse tree + */ + enterStructuredBodyNameLine?: (ctx: StructuredBodyNameLineContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.structuredBodyNameLine`. + * @param ctx the parse tree + */ + exitStructuredBodyNameLine?: (ctx: StructuredBodyNameLineContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.structuredBodyContentLine`. + * @param ctx the parse tree + */ + enterStructuredBodyContentLine?: (ctx: StructuredBodyContentLineContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.structuredBodyContentLine`. + * @param ctx the parse tree + */ + exitStructuredBodyContentLine?: (ctx: StructuredBodyContentLineContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.structuredBodyEndLine`. + * @param ctx the parse tree + */ + enterStructuredBodyEndLine?: (ctx: StructuredBodyEndLineContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.structuredBodyEndLine`. + * @param ctx the parse tree + */ + exitStructuredBodyEndLine?: (ctx: StructuredBodyEndLineContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.normalTemplateBody`. + * @param ctx the parse tree + */ + enterNormalTemplateBody?: (ctx: NormalTemplateBodyContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.normalTemplateBody`. + * @param ctx the parse tree + */ + exitNormalTemplateBody?: (ctx: NormalTemplateBodyContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.templateString`. + * @param ctx the parse tree + */ + enterTemplateString?: (ctx: TemplateStringContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.templateString`. + * @param ctx the parse tree + */ + exitTemplateString?: (ctx: TemplateStringContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.normalTemplateString`. + * @param ctx the parse tree + */ + enterNormalTemplateString?: (ctx: NormalTemplateStringContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.normalTemplateString`. + * @param ctx the parse tree + */ + exitNormalTemplateString?: (ctx: NormalTemplateStringContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.errorTemplateString`. + * @param ctx the parse tree + */ + enterErrorTemplateString?: (ctx: ErrorTemplateStringContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.errorTemplateString`. + * @param ctx the parse tree + */ + exitErrorTemplateString?: (ctx: ErrorTemplateStringContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.ifElseTemplateBody`. + * @param ctx the parse tree + */ + enterIfElseTemplateBody?: (ctx: IfElseTemplateBodyContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.ifElseTemplateBody`. + * @param ctx the parse tree + */ + exitIfElseTemplateBody?: (ctx: IfElseTemplateBodyContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.ifConditionRule`. + * @param ctx the parse tree + */ + enterIfConditionRule?: (ctx: IfConditionRuleContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.ifConditionRule`. + * @param ctx the parse tree + */ + exitIfConditionRule?: (ctx: IfConditionRuleContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.ifCondition`. + * @param ctx the parse tree + */ + enterIfCondition?: (ctx: IfConditionContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.ifCondition`. + * @param ctx the parse tree + */ + exitIfCondition?: (ctx: IfConditionContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.switchCaseTemplateBody`. + * @param ctx the parse tree + */ + enterSwitchCaseTemplateBody?: (ctx: SwitchCaseTemplateBodyContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.switchCaseTemplateBody`. + * @param ctx the parse tree + */ + exitSwitchCaseTemplateBody?: (ctx: SwitchCaseTemplateBodyContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.switchCaseRule`. + * @param ctx the parse tree + */ + enterSwitchCaseRule?: (ctx: SwitchCaseRuleContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.switchCaseRule`. + * @param ctx the parse tree + */ + exitSwitchCaseRule?: (ctx: SwitchCaseRuleContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.switchCaseStat`. + * @param ctx the parse tree + */ + enterSwitchCaseStat?: (ctx: SwitchCaseStatContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.switchCaseStat`. + * @param ctx the parse tree + */ + exitSwitchCaseStat?: (ctx: SwitchCaseStatContext) => void; + + /** + * Enter a parse tree produced by `LGFileParser.importDefinition`. + * @param ctx the parse tree + */ + enterImportDefinition?: (ctx: ImportDefinitionContext) => void; + /** + * Exit a parse tree produced by `LGFileParser.importDefinition`. + * @param ctx the parse tree + */ + exitImportDefinition?: (ctx: ImportDefinitionContext) => void; +} + diff --git a/libraries/botbuilder-lg/src/generated/LGFileParserVisitor.ts b/libraries/botbuilder-lg/src/generated/LGFileParserVisitor.ts index bc0bad91e5..525af9b3d7 100644 --- a/libraries/botbuilder-lg/src/generated/LGFileParserVisitor.ts +++ b/libraries/botbuilder-lg/src/generated/LGFileParserVisitor.ts @@ -1,244 +1,251 @@ -// Generated from ../LGFileParser.g4 by ANTLR 4.6-SNAPSHOT - - -import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; - -import { SwitchCaseBodyContext } from "./LGFileParser"; -import { NormalBodyContext } from "./LGFileParser"; -import { StructuredBodyContext } from "./LGFileParser"; -import { IfElseBodyContext } from "./LGFileParser"; -import { FileContext } from "./LGFileParser"; -import { ParagraphContext } from "./LGFileParser"; -import { NewlineContext } from "./LGFileParser"; -import { TemplateDefinitionContext } from "./LGFileParser"; -import { TemplateNameLineContext } from "./LGFileParser"; -import { ErrorTemplateNameContext } from "./LGFileParser"; -import { TemplateNameContext } from "./LGFileParser"; -import { ParametersContext } from "./LGFileParser"; -import { TemplateBodyContext } from "./LGFileParser"; -import { StructuredTemplateBodyContext } from "./LGFileParser"; -import { StructuredBodyNameLineContext } from "./LGFileParser"; -import { StructuredBodyContentLineContext } from "./LGFileParser"; -import { StructuredBodyEndLineContext } from "./LGFileParser"; -import { NormalTemplateBodyContext } from "./LGFileParser"; -import { TemplateStringContext } from "./LGFileParser"; -import { NormalTemplateStringContext } from "./LGFileParser"; -import { ErrorTemplateStringContext } from "./LGFileParser"; -import { IfElseTemplateBodyContext } from "./LGFileParser"; -import { IfConditionRuleContext } from "./LGFileParser"; -import { IfConditionContext } from "./LGFileParser"; -import { SwitchCaseTemplateBodyContext } from "./LGFileParser"; -import { SwitchCaseRuleContext } from "./LGFileParser"; -import { SwitchCaseStatContext } from "./LGFileParser"; -import { ImportDefinitionContext } from "./LGFileParser"; - - -/** - * This interface defines a complete generic visitor for a parse tree produced - * by `LGFileParser`. - * - * @param The return type of the visit operation. Use `void` for - * operations with no return type. - */ -export interface LGFileParserVisitor extends ParseTreeVisitor { - /** - * Visit a parse tree produced by the `switchCaseBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSwitchCaseBody?: (ctx: SwitchCaseBodyContext) => Result; - - /** - * Visit a parse tree produced by the `normalBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNormalBody?: (ctx: NormalBodyContext) => Result; - - /** - * Visit a parse tree produced by the `structuredBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStructuredBody?: (ctx: StructuredBodyContext) => Result; - - /** - * Visit a parse tree produced by the `ifElseBody` - * labeled alternative in `LGFileParser.templateBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIfElseBody?: (ctx: IfElseBodyContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.file`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFile?: (ctx: FileContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.paragraph`. - * @param ctx the parse tree - * @return the visitor result - */ - visitParagraph?: (ctx: ParagraphContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.newline`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNewline?: (ctx: NewlineContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.templateDefinition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTemplateDefinition?: (ctx: TemplateDefinitionContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.templateNameLine`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTemplateNameLine?: (ctx: TemplateNameLineContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.errorTemplateName`. - * @param ctx the parse tree - * @return the visitor result - */ - visitErrorTemplateName?: (ctx: ErrorTemplateNameContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.templateName`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTemplateName?: (ctx: TemplateNameContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.parameters`. - * @param ctx the parse tree - * @return the visitor result - */ - visitParameters?: (ctx: ParametersContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.templateBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTemplateBody?: (ctx: TemplateBodyContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.structuredTemplateBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStructuredTemplateBody?: (ctx: StructuredTemplateBodyContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.structuredBodyNameLine`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStructuredBodyNameLine?: (ctx: StructuredBodyNameLineContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.structuredBodyContentLine`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStructuredBodyContentLine?: (ctx: StructuredBodyContentLineContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.structuredBodyEndLine`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStructuredBodyEndLine?: (ctx: StructuredBodyEndLineContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.normalTemplateBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNormalTemplateBody?: (ctx: NormalTemplateBodyContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.templateString`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTemplateString?: (ctx: TemplateStringContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.normalTemplateString`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNormalTemplateString?: (ctx: NormalTemplateStringContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.errorTemplateString`. - * @param ctx the parse tree - * @return the visitor result - */ - visitErrorTemplateString?: (ctx: ErrorTemplateStringContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.ifElseTemplateBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIfElseTemplateBody?: (ctx: IfElseTemplateBodyContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.ifConditionRule`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIfConditionRule?: (ctx: IfConditionRuleContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.ifCondition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIfCondition?: (ctx: IfConditionContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.switchCaseTemplateBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSwitchCaseTemplateBody?: (ctx: SwitchCaseTemplateBodyContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.switchCaseRule`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSwitchCaseRule?: (ctx: SwitchCaseRuleContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.switchCaseStat`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSwitchCaseStat?: (ctx: SwitchCaseStatContext) => Result; - - /** - * Visit a parse tree produced by `LGFileParser.importDefinition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitImportDefinition?: (ctx: ImportDefinitionContext) => Result; -} - +/** + * @module botbuilder-lg + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// Generated from ../LGFileParser.g4 by ANTLR 4.6-SNAPSHOT + + +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; + +import { SwitchCaseBodyContext } from "./LGFileParser"; +import { NormalBodyContext } from "./LGFileParser"; +import { StructuredBodyContext } from "./LGFileParser"; +import { IfElseBodyContext } from "./LGFileParser"; +import { FileContext } from "./LGFileParser"; +import { ParagraphContext } from "./LGFileParser"; +import { NewlineContext } from "./LGFileParser"; +import { TemplateDefinitionContext } from "./LGFileParser"; +import { TemplateNameLineContext } from "./LGFileParser"; +import { ErrorTemplateNameContext } from "./LGFileParser"; +import { TemplateNameContext } from "./LGFileParser"; +import { ParametersContext } from "./LGFileParser"; +import { TemplateBodyContext } from "./LGFileParser"; +import { StructuredTemplateBodyContext } from "./LGFileParser"; +import { StructuredBodyNameLineContext } from "./LGFileParser"; +import { StructuredBodyContentLineContext } from "./LGFileParser"; +import { StructuredBodyEndLineContext } from "./LGFileParser"; +import { NormalTemplateBodyContext } from "./LGFileParser"; +import { TemplateStringContext } from "./LGFileParser"; +import { NormalTemplateStringContext } from "./LGFileParser"; +import { ErrorTemplateStringContext } from "./LGFileParser"; +import { IfElseTemplateBodyContext } from "./LGFileParser"; +import { IfConditionRuleContext } from "./LGFileParser"; +import { IfConditionContext } from "./LGFileParser"; +import { SwitchCaseTemplateBodyContext } from "./LGFileParser"; +import { SwitchCaseRuleContext } from "./LGFileParser"; +import { SwitchCaseStatContext } from "./LGFileParser"; +import { ImportDefinitionContext } from "./LGFileParser"; + + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by `LGFileParser`. + * + * @param The return type of the visit operation. Use `void` for + * operations with no return type. + */ +export interface LGFileParserVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by the `switchCaseBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSwitchCaseBody?: (ctx: SwitchCaseBodyContext) => Result; + + /** + * Visit a parse tree produced by the `normalBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNormalBody?: (ctx: NormalBodyContext) => Result; + + /** + * Visit a parse tree produced by the `structuredBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStructuredBody?: (ctx: StructuredBodyContext) => Result; + + /** + * Visit a parse tree produced by the `ifElseBody` + * labeled alternative in `LGFileParser.templateBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIfElseBody?: (ctx: IfElseBodyContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.file`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFile?: (ctx: FileContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.paragraph`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParagraph?: (ctx: ParagraphContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.newline`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNewline?: (ctx: NewlineContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.templateDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTemplateDefinition?: (ctx: TemplateDefinitionContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.templateNameLine`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTemplateNameLine?: (ctx: TemplateNameLineContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.errorTemplateName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitErrorTemplateName?: (ctx: ErrorTemplateNameContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.templateName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTemplateName?: (ctx: TemplateNameContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.parameters`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParameters?: (ctx: ParametersContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.templateBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTemplateBody?: (ctx: TemplateBodyContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.structuredTemplateBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStructuredTemplateBody?: (ctx: StructuredTemplateBodyContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.structuredBodyNameLine`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStructuredBodyNameLine?: (ctx: StructuredBodyNameLineContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.structuredBodyContentLine`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStructuredBodyContentLine?: (ctx: StructuredBodyContentLineContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.structuredBodyEndLine`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStructuredBodyEndLine?: (ctx: StructuredBodyEndLineContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.normalTemplateBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNormalTemplateBody?: (ctx: NormalTemplateBodyContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.templateString`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTemplateString?: (ctx: TemplateStringContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.normalTemplateString`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNormalTemplateString?: (ctx: NormalTemplateStringContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.errorTemplateString`. + * @param ctx the parse tree + * @return the visitor result + */ + visitErrorTemplateString?: (ctx: ErrorTemplateStringContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.ifElseTemplateBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIfElseTemplateBody?: (ctx: IfElseTemplateBodyContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.ifConditionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIfConditionRule?: (ctx: IfConditionRuleContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.ifCondition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIfCondition?: (ctx: IfConditionContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.switchCaseTemplateBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSwitchCaseTemplateBody?: (ctx: SwitchCaseTemplateBodyContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.switchCaseRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSwitchCaseRule?: (ctx: SwitchCaseRuleContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.switchCaseStat`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSwitchCaseStat?: (ctx: SwitchCaseStatContext) => Result; + + /** + * Visit a parse tree produced by `LGFileParser.importDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitImportDefinition?: (ctx: ImportDefinitionContext) => Result; +} + diff --git a/libraries/botbuilder-lg/src/generated/index.ts b/libraries/botbuilder-lg/src/generated/index.ts index 619634449d..acc94c5078 100644 --- a/libraries/botbuilder-lg/src/generated/index.ts +++ b/libraries/botbuilder-lg/src/generated/index.ts @@ -1,6 +1,6 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/libraries/botbuilder-lg/src/importResolver.ts b/libraries/botbuilder-lg/src/importResolver.ts index 645d0355f1..81760c73cc 100644 --- a/libraries/botbuilder-lg/src/importResolver.ts +++ b/libraries/botbuilder-lg/src/importResolver.ts @@ -1,6 +1,6 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -18,21 +18,21 @@ export declare type ImportResolverDelegate = (source: string, resourceId: string * import resolver util */ export class ImportResolver { - public static fileResolver: ImportResolverDelegate = (filePath: string, id: string) => { + public static fileResolver: ImportResolverDelegate = (filePath: string, id: string): any => { // import paths are in resource files which can be executed on multiple OS environments - // Call GetOsPath() to map / & \ in importPath -> OSPath - let importPath: string = ImportResolver.normalizePath(id); - if (!path.isAbsolute(importPath)) { - // get full path for importPath relative to path which is doing the import. - importPath = path.normalize(path.join(path.dirname(filePath), importPath)); - } + // Call GetOsPath() to map / & \ in importPath -> OSPath + let importPath: string = ImportResolver.normalizePath(id); + if (!path.isAbsolute(importPath)) { + // get full path for importPath relative to path which is doing the import. + importPath = path.normalize(path.join(path.dirname(filePath), importPath)); + } - const content: string = fs.readFileSync(importPath, 'utf-8'); + const content: string = fs.readFileSync(importPath, 'utf-8'); - return { content, id: importPath }; + return { content, id: importPath }; } - /// + /// /// Normalize authored path to os path. /// /// @@ -44,11 +44,11 @@ export class ImportResolver { /// path expressed as OS path. public static normalizePath(ambiguousPath: string): string { if (process.platform === 'win32') { - // map linux/mac sep -> windows - return ambiguousPath.replace('/', '\\'); + // map linux/mac sep -> windows + return ambiguousPath.replace(/\//g, '\\'); } else { // map windows sep -> linux/mac - return ambiguousPath.replace('\\', '/'); + return ambiguousPath.replace(/\\/g, '/'); } } } diff --git a/libraries/botbuilder-lg/src/index.ts b/libraries/botbuilder-lg/src/index.ts index 73e0330f5b..11b5b6fe22 100644 --- a/libraries/botbuilder-lg/src/index.ts +++ b/libraries/botbuilder-lg/src/index.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/libraries/botbuilder-lg/src/lgException.ts b/libraries/botbuilder-lg/src/lgException.ts index 21a08a40db..19583bb78e 100644 --- a/libraries/botbuilder-lg/src/lgException.ts +++ b/libraries/botbuilder-lg/src/lgException.ts @@ -1,3 +1,10 @@ +/** + * @module botbuilder-lg + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ import { Diagnostic } from './diagnostic'; /** @@ -5,14 +12,14 @@ import { Diagnostic } from './diagnostic'; */ export class LGException extends Error { - private Diagnostics: Diagnostic[]; - constructor(m: string, diagnostics: Diagnostic[]) { + private diagnostics: Diagnostic[]; + public constructor(m: string, diagnostics: Diagnostic[]) { super(m); - this.Diagnostics = diagnostics; + this.diagnostics = diagnostics; Object.setPrototypeOf(this, LGException .prototype); } public getDiagnostic(): Diagnostic[] { - return this.Diagnostics; + return this.diagnostics; } } diff --git a/libraries/botbuilder-lg/src/lgImport.ts b/libraries/botbuilder-lg/src/lgImport.ts index 0c9b9bf6d2..cc439b46da 100644 --- a/libraries/botbuilder-lg/src/lgImport.ts +++ b/libraries/botbuilder-lg/src/lgImport.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,22 +13,22 @@ import { ImportDefinitionContext } from './generated/LGFileParser'; */ export class LGImport { - public Description: string; + public description: string; - public Id: string; + public id: string; - public Source: string; + public source: string; - public ParseTree: ImportDefinitionContext; + public parseTree: ImportDefinitionContext; - constructor(parseTree: ImportDefinitionContext, source: string = '') { - this.ParseTree = parseTree; - this.Source = source; - this.Description = this.ExtractDescription(parseTree); - this.Id = this.ExtractId(parseTree); + public constructor(parseTree: ImportDefinitionContext, source: string = '') { + this.parseTree = parseTree; + this.source = source; + this.description = this.extractDescription(parseTree); + this.id = this.extractId(parseTree); } - private readonly ExtractDescription = (parseTree: ImportDefinitionContext): string => parseTree.IMPORT_DESC().text.replace('[', '').replace(']', ''); + private readonly extractDescription = (parseTree: ImportDefinitionContext): string => parseTree.IMPORT_DESC().text.replace('[', '').replace(']', ''); - private readonly ExtractId = (parseTree: ImportDefinitionContext): string => parseTree.IMPORT_PATH().text.replace('(', '').replace(')', ''); + private readonly extractId = (parseTree: ImportDefinitionContext): string => parseTree.IMPORT_PATH().text.replace('(', '').replace(')', ''); } diff --git a/libraries/botbuilder-lg/src/lgParser.ts b/libraries/botbuilder-lg/src/lgParser.ts index 5446f6bbcc..b3f614868a 100644 --- a/libraries/botbuilder-lg/src/lgParser.ts +++ b/libraries/botbuilder-lg/src/lgParser.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -53,10 +53,10 @@ export class LGParser { } const templates: TemplateDefinitionContext[] = file.paragraph() - .map((x: ParagraphContext) => x.templateDefinition()) - .filter((x: TemplateDefinitionContext) => x !== undefined); + .map((x: ParagraphContext): TemplateDefinitionContext => x.templateDefinition()) + .filter((x: TemplateDefinitionContext): boolean => x !== undefined); - return templates.map((x: TemplateDefinitionContext) => new LGTemplate(x, lgfileContent, source)); + return templates.map((x: TemplateDefinitionContext): LGTemplate => new LGTemplate(x, lgfileContent, source)); } private static extractLGImports(file: FileContext, source: string = ''): LGImport[] { @@ -66,9 +66,9 @@ export class LGParser { } const imports: ImportDefinitionContext[] = file.paragraph() - .map((x: ParagraphContext) => x.importDefinition()) - .filter((x: ImportDefinitionContext) => x !== undefined); + .map((x: ParagraphContext): ImportDefinitionContext => x.importDefinition()) + .filter((x: ImportDefinitionContext): boolean => x !== undefined); - return imports.map((x: ImportDefinitionContext) => new LGImport(x, source)); + return imports.map((x: ImportDefinitionContext): LGImport => new LGImport(x, source)); } } diff --git a/libraries/botbuilder-lg/src/lgResource.ts b/libraries/botbuilder-lg/src/lgResource.ts index 5ecbc0d832..5c46255e65 100644 --- a/libraries/botbuilder-lg/src/lgResource.ts +++ b/libraries/botbuilder-lg/src/lgResource.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -16,30 +16,30 @@ import { LGTemplate } from './lgTemplate'; */ export class LGResource { - public Id: string; + public id: string; - public Templates: LGTemplate[]; + public templates: LGTemplate[]; - public Imports: LGImport[]; + public imports: LGImport[]; - public Content: string; + public content: string; - constructor(templates: LGTemplate[], imports: LGImport[], content: string, id: string = '') { - this.Templates = templates; - this.Imports = imports; - this.Id = id; - this.Content = content; - } + public constructor(templates: LGTemplate[], imports: LGImport[], content: string, id: string = '') { + this.templates = templates; + this.imports = imports; + this.id = id; + this.content = content; + } - public discoverLGResources(importResolver: ImportResolverDelegate) : LGResource[] { - const resourcesFound: LGResource[] = []; - importResolver = importResolver === undefined ? ImportResolver.fileResolver : importResolver; - this.resolveImportResources(this, importResolver, resourcesFound); + public discoverLGResources(importResolver: ImportResolverDelegate): LGResource[] { + const resourcesFound: LGResource[] = []; + importResolver = importResolver === undefined ? ImportResolver.fileResolver : importResolver; + this.resolveImportResources(this, importResolver, resourcesFound); - return resourcesFound; - } + return resourcesFound; + } - /** + /** * update an exist template. * @param templateName origin template name. the only id of a template. * @param newTemplateName new template Name. @@ -47,144 +47,144 @@ export class LGResource { * @param templateBody new template body. * @returns new LG resource. */ - public updateTemplate(templateName: string, newTemplateName: string, parameters: string[], templateBody: string): LGResource { - const template: LGTemplate = this.Templates.find((u: LGTemplate) => u.Name === templateName); - if (template === undefined) { - return this; - } + public updateTemplate(templateName: string, newTemplateName: string, parameters: string[], templateBody: string): LGResource { + const template: LGTemplate = this.templates.find((u: LGTemplate): boolean => u.name === templateName); + if (template === undefined) { + return this; + } - const templateNameLine: string = this.buildTemplateNameLine(newTemplateName, parameters); - const newTemplateBody: string = this.convertTemplateBody(templateBody); - const content: string = `${templateNameLine}\r\n${newTemplateBody}`; - const startLine: number = template.ParseTree.start.line - 1; - const stopLine: number = template.ParseTree.stop.line - 1; + const templateNameLine: string = this.buildTemplateNameLine(newTemplateName, parameters); + const newTemplateBody: string = this.convertTemplateBody(templateBody); + const content = `${ templateNameLine }\r\n${ newTemplateBody }`; + const startLine: number = template.parseTree.start.line - 1; + const stopLine: number = template.parseTree.stop.line - 1; - const newContent: string = this.replaceRangeContent(this.Content, startLine, stopLine, content); + const newContent: string = this.replaceRangeContent(this.content, startLine, stopLine, content); - return LGParser.parse(newContent, this.Id); - } + return LGParser.parse(newContent, this.id); + } - /** + /** * Add a new template and return LG resource. * @param templateName new template name. * @param parameters new params. * @param templateBody new template body. * @returns new lg resource. */ - public addTemplate(templateName: string, parameters: string[], templateBody: string): LGResource { - const template: LGTemplate = this.Templates.find((u: LGTemplate) => u.Name === templateName); - if (template !== undefined) { - throw new Error(`template ${templateName} already exists.`); - } + public addTemplate(templateName: string, parameters: string[], templateBody: string): LGResource { + const template: LGTemplate = this.templates.find((u: LGTemplate): boolean => u.name === templateName); + if (template !== undefined) { + throw new Error(`template ${ templateName } already exists.`); + } - const templateNameLine: string = this.buildTemplateNameLine(templateName, parameters); - const newTemplateBody: string = this.convertTemplateBody(templateBody); - const newContent: string = `${this.Content}\r\n${templateNameLine}\r\n${newTemplateBody}`; + const templateNameLine: string = this.buildTemplateNameLine(templateName, parameters); + const newTemplateBody: string = this.convertTemplateBody(templateBody); + const newContent = `${ this.content }\r\n${ templateNameLine }\r\n${ newTemplateBody }`; - return LGParser.parse(newContent, this.Id); - } + return LGParser.parse(newContent, this.id); + } - /** + /** * Delete an exist template. * @param templateName which template should delete. * @returns return the new lg resource. */ - public deleteTemplate(templateName: string): LGResource { - const template: LGTemplate = this.Templates.find((u: LGTemplate) => u.Name === templateName); - if (template === undefined) { - return this; - } - - const startLine: number = template.ParseTree.start.line - 1; - const stopLine: number = template.ParseTree.stop.line - 1; - - const newContent: string = this.replaceRangeContent(this.Content, startLine, stopLine, undefined); - - return LGParser.parse(newContent, this.Id); - } - - public toString() : string { - return this.Content; - } - - private replaceRangeContent(originString: string, startLine: number, stopLine: number, replaceString: string): string { - const originList: string[] = originString.split('\n'); - const destList: string[] = []; - - if (startLine < 0 || startLine > stopLine || stopLine >= originList.length) { - throw new Error(`index out of range.`); - } - - destList.push(...originList.slice(0, startLine)); - - if (replaceString !== undefined && replaceString.length > 0) { - destList.push(replaceString); - } - - destList.push(...originList.slice(stopLine + 1)); - - return this.buildNewLGContent(destList); - } - - private buildNewLGContent(destList: string[]): string { - let result: string = ''; - for (let i: number = 0; i < destList.length; i++) { - const currentItem: string = destList[i]; - result = result.concat(currentItem); - if (currentItem.endsWith('\r')) { - result = result.concat('\n'); - } else if (i < destList.length - 1) { - result = result.concat('\r\n'); - } - } - - return result; - } - - private convertTemplateBody(templateBody: string) : string { - if (templateBody === undefined || templateBody.length === 0) { - return ''; - } - - const replaceList: string[] = templateBody.split('\n'); - const wrappedReplaceList: string[] = replaceList.map((u: string) => this.wrapTemplateBodyString(u)); - - return wrappedReplaceList.join('\n'); - } - - private wrapTemplateBodyString(replaceItem: string): string { - // tslint:disable-next-line: newline-per-chained-call - const isStartWithHash: boolean = replaceItem.trimStart().startsWith('#'); - if (isStartWithHash) { - return `- ${replaceItem.trimStart()}`; - } else { - return replaceItem; - } - } - - private buildTemplateNameLine(templateName: string, parameters: string[]): string { - if (parameters === undefined || parameters === null) { - return `# ${templateName}`; - } else { - return `# ${templateName}(${parameters.join(', ')})`; - } - } - - private resolveImportResources(start: LGResource, importResolver: ImportResolverDelegate, resourcesFound: LGResource[]): void { - const resourceIds: string[] = start.Imports.map((lg: LGImport) => lg.Id); - resourcesFound.push(start); - - resourceIds.forEach((resourceId: string) => { - try { - const { content, id } = importResolver(start.Id, resourceId); - const childResource: LGResource = LGParser.parse(content, id); - - if (!(resourcesFound.some((x: LGResource) => x.Id === childResource.Id))) { - this.resolveImportResources(childResource, importResolver, resourcesFound); + public deleteTemplate(templateName: string): LGResource { + const template: LGTemplate = this.templates.find((u: LGTemplate): boolean => u.name === templateName); + if (template === undefined) { + return this; + } + + const startLine: number = template.parseTree.start.line - 1; + const stopLine: number = template.parseTree.stop.line - 1; + + const newContent: string = this.replaceRangeContent(this.content, startLine, stopLine, undefined); + + return LGParser.parse(newContent, this.id); + } + + public toString(): string { + return this.content; + } + + private replaceRangeContent(originString: string, startLine: number, stopLine: number, replaceString: string): string { + const originList: string[] = originString.split('\n'); + const destList: string[] = []; + + if (startLine < 0 || startLine > stopLine || stopLine >= originList.length) { + throw new Error(`index out of range.`); + } + + destList.push(...originList.slice(0, startLine)); + + if (replaceString !== undefined && replaceString.length > 0) { + destList.push(replaceString); + } + + destList.push(...originList.slice(stopLine + 1)); + + return this.buildNewLGContent(destList); + } + + private buildNewLGContent(destList: string[]): string { + let result = ''; + for (let i = 0; i < destList.length; i++) { + const currentItem: string = destList[i]; + result = result.concat(currentItem); + if (currentItem.endsWith('\r')) { + result = result.concat('\n'); + } else if (i < destList.length - 1) { + result = result.concat('\r\n'); + } + } + + return result; + } + + private convertTemplateBody(templateBody: string): string { + if (templateBody === undefined || templateBody.length === 0) { + return ''; + } + + const replaceList: string[] = templateBody.split('\n'); + const wrappedReplaceList: string[] = replaceList.map((u: string): string => this.wrapTemplateBodyString(u)); + + return wrappedReplaceList.join('\n'); + } + + private wrapTemplateBodyString(replaceItem: string): string { + // tslint:disable-next-line: newline-per-chained-call + const isStartWithHash: boolean = replaceItem.trimLeft().startsWith('#'); + if (isStartWithHash) { + return `- ${ replaceItem.trimLeft() }`; + } else { + return replaceItem; + } + } + + private buildTemplateNameLine(templateName: string, parameters: string[]): string { + if (parameters === undefined || parameters === null) { + return `# ${ templateName }`; + } else { + return `# ${ templateName }(${ parameters.join(', ') })`; + } + } + + private resolveImportResources(start: LGResource, importResolver: ImportResolverDelegate, resourcesFound: LGResource[]): void { + const resourceIds: string[] = start.imports.map((lg: LGImport): string => lg.id); + resourcesFound.push(start); + + resourceIds.forEach((resourceId: string): any => { + try { + const { content, id } = importResolver(start.id, resourceId); + const childResource: LGResource = LGParser.parse(content, id); + + if (!(resourcesFound.some((x: LGResource): boolean => x.id === childResource.id))) { + this.resolveImportResources(childResource, importResolver, resourcesFound); + } + } catch (e) { + throw new Error(`[Error]${ resourceId }:${ e.message }`); } - } catch (e) { - throw new Error(`[Error]${resourceId}:${e.message}`); - } - }); - } + }); + } } diff --git a/libraries/botbuilder-lg/src/lgTemplate.ts b/libraries/botbuilder-lg/src/lgTemplate.ts index 6b798a111d..0abcb8f0dd 100644 --- a/libraries/botbuilder-lg/src/lgTemplate.ts +++ b/libraries/botbuilder-lg/src/lgTemplate.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -17,34 +17,34 @@ export class LGTemplate { /** * Name of the template, what's followed by '#' in a LG file */ - public Name: string; + public name: string; /** * Parameter list of this template */ - public Parameters: string[]; + public parameters: string[]; /** * Source of this template, source file path if it's from a certain file */ - public Source: string; + public source: string; /** * Text format of Body of this template. All content except Name and Parameters. */ - public Body: string; + public body: string; /** * The parse tree of this template */ - public ParseTree: TemplateDefinitionContext; + public parseTree: TemplateDefinitionContext; - constructor(parseTree: TemplateDefinitionContext, lgfileContent: string, source: string = '') { - this.ParseTree = parseTree; - this.Source = source; + public constructor(parseTree: TemplateDefinitionContext, lgfileContent: string, source: string = '') { + this.parseTree = parseTree; + this.source = source; - this.Name = this.ExtractName(parseTree); - this.Parameters = this.ExtractParameters(parseTree); - this.Body = this.ExtractBody(parseTree, lgfileContent); + this.name = this.extractName(parseTree); + this.parameters = this.extractParameters(parseTree); + this.body = this.extractBody(parseTree, lgfileContent); } - private readonly ExtractName = (parseTree: TemplateDefinitionContext): string => { + private readonly extractName = (parseTree: TemplateDefinitionContext): string => { // tslint:disable-next-line: newline-per-chained-call const nameContext: TemplateNameContext = parseTree.templateNameLine().templateName(); if (nameContext === undefined || nameContext.text === undefined) { @@ -54,30 +54,30 @@ export class LGTemplate { return nameContext.text; } - private readonly ExtractParameters = (parseTree: TemplateDefinitionContext): string[] => { + private readonly extractParameters = (parseTree: TemplateDefinitionContext): string[] => { // tslint:disable-next-line: newline-per-chained-call const parameters: ParametersContext = parseTree.templateNameLine().parameters(); if (parameters !== undefined) { // tslint:disable-next-line: newline-per-chained-call - return parameters.IDENTIFIER().map((x: TerminalNode) => x.text); + return parameters.IDENTIFIER().map((x: TerminalNode): string => x.text); } return []; } - private readonly ExtractBody = (parseTree: TemplateDefinitionContext, lgfileContent: string): string => { - const templateBody: TemplateBodyContext = parseTree.templateBody(); - if (templateBody === undefined) { - return ''; - } + private readonly extractBody = (parseTree: TemplateDefinitionContext, lgfileContent: string): string => { + const templateBody: TemplateBodyContext = parseTree.templateBody(); + if (templateBody === undefined) { + return ''; + } - const startLine: number = templateBody.start.line - 1; - const stopLine: number = templateBody.stop.line - 1; + const startLine: number = templateBody.start.line - 1; + const stopLine: number = templateBody.stop.line - 1; - return this.getRangeContent(lgfileContent, startLine, stopLine); + return this.getRangeContent(lgfileContent, startLine, stopLine); } - private getRangeContent(originString: string, startLine: number, stopLine: number) : string { + private getRangeContent(originString: string, startLine: number, stopLine: number): string { const originList: string[] = originString.split('\n'); if (startLine < 0 || startLine > stopLine || stopLine >= originList.length) { throw new Error(`index out of range.`); diff --git a/libraries/botbuilder-lg/src/mslgTool.ts b/libraries/botbuilder-lg/src/mslgTool.ts index 05ac2b09f1..cef9dc8547 100644 --- a/libraries/botbuilder-lg/src/mslgTool.ts +++ b/libraries/botbuilder-lg/src/mslgTool.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module bbotbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -19,48 +19,48 @@ import { StaticChecker } from './staticChecker'; // tslint:disable-next-line: completed-docs export class MSLGTool { - public CollationMessages: string[] = []; - public CollatedTemplates: Map = new Map(); - public NameCollisions: string[] = []; + public collationMessages: string[] = []; + public collatedTemplates: Map = new Map(); + public nameCollisions: string[] = []; - private Templates: LGTemplate[]; + private templates: LGTemplate[]; private readonly expressionEngine: ExpressionEngine; - constructor(expressionEngine?: ExpressionEngine) { + public constructor(expressionEngine?: ExpressionEngine) { this.expressionEngine = expressionEngine !== undefined ? expressionEngine : new ExpressionEngine(); } - public ValidateFile(lgFileContent: string, id?: string): string[] { + public validateFile(lgFileContent: string, id?: string): string[] { const diagnostic: Diagnostic[] = new StaticChecker().checkText(lgFileContent, id, ImportResolver.fileResolver); if (diagnostic.length !== 0) { - return diagnostic.map((error: Diagnostic) => error.toString()); + return diagnostic.map((error: Diagnostic): string => error.toString()); } // extract templates - this.Templates = LGParser.parse(lgFileContent).Templates; - if (this.Templates !== undefined && this.Templates.length > 0) { - this.RunTemplateExtractor(this.Templates); + this.templates = LGParser.parse(lgFileContent).templates; + if (this.templates !== undefined && this.templates.length > 0) { + this.runTemplateExtractor(this.templates); } return []; } - public GetTemplateVariables(templateName: string): string[] { - const analyzer: Analyzer = new Analyzer(this.Templates, this.expressionEngine); + public getTemplateVariables(templateName: string): string[] { + const analyzer: Analyzer = new Analyzer(this.templates, this.expressionEngine); - return analyzer.AnalyzeTemplate(templateName).Variables; + return analyzer.analyzeTemplate(templateName).Variables; } - public ExpandTemplate(templateName: string, scope?: any): string[] { - const expander: Expander = new Expander(this.Templates, this.expressionEngine); + public expandTemplate(templateName: string, scope?: any): string[] { + const expander: Expander = new Expander(this.templates, this.expressionEngine); - return expander.ExpandTemplate(templateName, scope); + return expander.expandTemplate(templateName, scope); } - public CollateTemplates(): string { - let result: string = ''; - if (this.CollationMessages === undefined || this.CollationMessages.length === 0) { - for (const template of this.CollatedTemplates) { + public collateTemplates(): string { + let result = ''; + if (this.collationMessages === undefined || this.collationMessages.length === 0) { + for (const template of this.collatedTemplates) { result += '# ' + template[0] + '\n'; if (template[1] instanceof Array) { const templateStrs: string[] = template[1] as string[]; @@ -76,7 +76,7 @@ export class MSLGTool { for (const condition of (template[1] as Map)) { const conditionStr: string = condition[0]; result += '- ' + conditionStr + '\n'; - condition[1].forEach((templateStr: string) => { + condition[1].forEach((templateStr: string): any => { result += ' ' + templateStr.slice(0, 1) + ' ' + templateStr.slice(1) + '\n'; }); } @@ -91,35 +91,35 @@ export class MSLGTool { return result; } - private RunTemplateExtractor(lgtemplates: LGTemplate[]): void { + private runTemplateExtractor(lgtemplates: LGTemplate[]): void { const extractor: Extractor = new Extractor(lgtemplates); - const templates: Map[] = extractor.Extract(); + const templates: Map[] = extractor.extract(); for (const item of templates) { const template: any = item.entries().next().value; - if (this.CollatedTemplates.has(template[0])) { - this.NameCollisions.push(template[0]); - if (this.CollatedTemplates.get(template[0]) instanceof Map && template[1] instanceof Map) { + if (this.collatedTemplates.has(template[0])) { + this.nameCollisions.push(template[0]); + if (this.collatedTemplates.get(template[0]) instanceof Map && template[1] instanceof Map) { for (const condition of (template[1] as Map)) { - const mergedCondtions: Map = this.CollatedTemplates.get(template[0]) as Map; + const mergedCondtions: Map = this.collatedTemplates.get(template[0]) as Map; if (mergedCondtions.has(condition[0])) { // tslint:disable-next-line: max-line-length - this.CollatedTemplates.set(template[0], this.CollatedTemplates.get(template[0]).set(condition[0], Array.from(new Set(mergedCondtions.get(condition[0]).concat(condition[1]))))); + this.collatedTemplates.set(template[0], this.collatedTemplates.get(template[0]).set(condition[0], Array.from(new Set(mergedCondtions.get(condition[0]).concat(condition[1]))))); } else { // tslint:disable-next-line: max-line-length - this.CollatedTemplates.set(template[0], this.CollatedTemplates.get(template[0]).set(condition[0], condition[1])); + this.collatedTemplates.set(template[0], this.collatedTemplates.get(template[0]).set(condition[0], condition[1])); } } - } else if (this.CollatedTemplates.get(template[0]) instanceof Array && template[1] instanceof Array) { + } else if (this.collatedTemplates.get(template[0]) instanceof Array && template[1] instanceof Array) { // tslint:disable-next-line: max-line-length - this.CollatedTemplates.set(template[0], Array.from(new Set(this.CollatedTemplates.get(template[0]).concat(template[1])))); + this.collatedTemplates.set(template[0], Array.from(new Set(this.collatedTemplates.get(template[0]).concat(template[1])))); } else { const range: Range = new Range(new Position(0, 0), new Position(0, 0)); // tslint:disable-next-line: max-line-length - const mergeError: Diagnostic = new Diagnostic(range, `Template ${template[0]} occurred in both normal and condition templates`); - this.CollationMessages.push(mergeError.toString()); + const mergeError: Diagnostic = new Diagnostic(range, `Template ${ template[0] } occurred in both normal and condition templates`); + this.collationMessages.push(mergeError.toString()); } } else { - this.CollatedTemplates.set(template[0], template[1]); + this.collatedTemplates.set(template[0], template[1]); } } } diff --git a/libraries/botbuilder-lg/src/position.ts b/libraries/botbuilder-lg/src/position.ts index 6336282fbc..3b480999dd 100644 --- a/libraries/botbuilder-lg/src/position.ts +++ b/libraries/botbuilder-lg/src/position.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -10,14 +10,14 @@ * Position class */ export class Position { - public Line: number; - public Character: number; + public line: number; + public character: number; - constructor(line: number, character: number) { - this.Line = line; - this.Character = character; + public constructor(line: number, character: number) { + this.line = line; + this.character = character; } public test = (): string => 'Hello'; - public toString = (): string => `line ${this.Line}:${this.Character}`; + public toString = (): string => `line ${ this.line }:${ this.character }`; } diff --git a/libraries/botbuilder-lg/src/range.ts b/libraries/botbuilder-lg/src/range.ts index c9b6d713e8..bf79477c28 100644 --- a/libraries/botbuilder-lg/src/range.ts +++ b/libraries/botbuilder-lg/src/range.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -12,19 +12,19 @@ import { Position } from './position'; * Range class */ export class Range { - public Start: Position; - public End: Position; + public start: Position; + public end: Position; - constructor(start: Position, end: Position) { - this.Start = start; - this.End = end; + public constructor(start: Position, end: Position) { + this.start = start; + this.end = end; } public toString = (): string => { - let result: string = this.Start.toString(); - if (this.Start.Line <= this.End.Line && this.Start.Character < this.End.Character) { + let result: string = this.start.toString(); + if (this.start.line <= this.end.line && this.start.character < this.end.character) { result += ' - '; - result += this.End.toString(); + result += this.end.toString(); } return result; diff --git a/libraries/botbuilder-lg/src/staticChecker.ts b/libraries/botbuilder-lg/src/staticChecker.ts index 163a2b359f..6e1c5775b8 100644 --- a/libraries/botbuilder-lg/src/staticChecker.ts +++ b/libraries/botbuilder-lg/src/staticChecker.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -8,7 +8,7 @@ // tslint:disable-next-line: no-submodule-imports import { ParserRuleContext } from 'antlr4ts'; import { AbstractParseTreeVisitor, TerminalNode } from 'antlr4ts/tree'; -import { ExpressionEngine, IExpressionParser } from 'botframework-expressions'; +import { ExpressionEngine, ExpressionParserInterface } from 'botframework-expressions'; import * as fs from 'fs'; import { keyBy } from 'lodash'; import * as path from 'path'; @@ -30,18 +30,18 @@ import { Range } from './range'; export class StaticChecker { private readonly expressionEngine: ExpressionEngine; - constructor(expressionEngine?: ExpressionEngine) { + public constructor(expressionEngine?: ExpressionEngine) { this.expressionEngine = expressionEngine !== undefined ? expressionEngine : new ExpressionEngine(); } public checkFiles(filePaths: string[], importResolver?: ImportResolverDelegate): Diagnostic[] { let result: Diagnostic[] = []; let templates: LGTemplate[] = []; - let isParseSuccess: boolean = true; + let isParseSuccess = true; try { let totalLGResources: LGResource[] = []; - filePaths.forEach((filePath: string) => { + filePaths.forEach((filePath: string): void => { importResolver = importResolver !== undefined ? importResolver : ImportResolver.fileResolver; filePath = path.normalize(ImportResolver.normalizePath(filePath)); @@ -52,14 +52,14 @@ export class StaticChecker { // Remove duplicated lg files by id // tslint:disable-next-line: max-line-length - const deduplicatedLGResources: LGResource[] = totalLGResources.filter((resource: LGResource, index: number, self: LGResource[]) => - index === self.findIndex((t: LGResource) => ( - t.Id === resource.Id + const deduplicatedLGResources: LGResource[] = totalLGResources.filter((resource: LGResource, index: number, self: LGResource[]): boolean => + index === self.findIndex((t: LGResource): boolean => ( + t.id === resource.id )) ); - templates = deduplicatedLGResources.reduce((acc: LGTemplate[], x: LGResource) => - acc = acc.concat(x.Templates), [] + templates = deduplicatedLGResources.reduce((acc: LGTemplate[], x: LGResource): any => + acc = acc.concat(x.templates), [] ); } catch (e) { isParseSuccess = false; @@ -92,15 +92,15 @@ export class StaticChecker { let result: Diagnostic[] = []; let templates: LGTemplate[] = []; - let isParseSuccess: boolean = true; + let isParseSuccess = true; try { const rootResource: LGResource = LGParser.parse(content, id); const resources: LGResource[] = rootResource.discoverLGResources(importResolver); - templates = resources.reduce((acc: LGTemplate[], x: LGResource) => + templates = resources.reduce((acc: LGTemplate[], x: LGResource): any => // tslint:disable-next-line: align - acc = acc.concat(x.Templates), [] + acc = acc.concat(x.templates), [] ); } catch (e) { isParseSuccess = false; @@ -121,7 +121,7 @@ export class StaticChecker { public checkTemplates(templates: LGTemplate[]): Diagnostic[] { // tslint:disable-next-line: no-use-before-declare - return new StaticCheckerInner(templates, this.expressionEngine).Check(); + return new StaticCheckerInner(templates, this.expressionEngine).check(); } } @@ -131,43 +131,43 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen public TemplateMap: {[name: string]: LGTemplate}; private currentSource: string = ''; private readonly baseExpressionEngine: ExpressionEngine; - private _expressionParser: IExpressionParser; + private _expressionParser: ExpressionParserInterface; private readonly expressionRecognizeRegex: RegExp = new RegExp(/\}(?!\\).+?\{(?!\\)@?/g); - private readonly escapeSeperatorRegex : RegExp = new RegExp(/\|(?!\\)/g); - private readonly structuredNameRegex : RegExp = new RegExp(/^[a-z0-9_][a-z0-9_\-\.]*$/i); + private readonly escapeSeperatorRegex: RegExp = new RegExp(/\|(?!\\)/g); + private readonly structuredNameRegex: RegExp = new RegExp(/^[a-z0-9_][a-z0-9_\-\.]*$/i); - constructor(templates: LGTemplate[], expressionEngine: ExpressionEngine) { + public constructor(templates: LGTemplate[], expressionEngine: ExpressionEngine) { super(); this.Templates = templates; this.baseExpressionEngine = expressionEngine; } - private get ExpressionParser(): IExpressionParser { + private get expressionParser(): ExpressionParserInterface { if (this._expressionParser === undefined) { const evaluator: Evaluator = new Evaluator(this.Templates, this.baseExpressionEngine); - this._expressionParser = evaluator.ExpressionEngine; + this._expressionParser = evaluator.expressionEngine; } return this._expressionParser; } - public Check(): Diagnostic[] { + public check(): Diagnostic[] { let result: Diagnostic[] = []; // check dup, before we build up TemplateMap const grouped: {[name: string]: LGTemplate[]} = {}; - this.Templates.forEach((t: LGTemplate) => { - if (!(t.Name in grouped)) { - grouped[t.Name] = []; + this.Templates.forEach((t: LGTemplate): void => { + if (!(t.name in grouped)) { + grouped[t.name] = []; } - grouped[t.Name].push(t); + grouped[t.name].push(t); }); - for (const key in grouped) { + for (const key of Object.keys(grouped)) { const group: LGTemplate[] = grouped[key]; if (group.length > 1) { - const sources: string = group.map((x: LGTemplate) => x.Source).join(':'); - result.push(this.BuildLGDiagnostic({ message: `Dup definitions found for template ${key} in ${sources}` })); + const sources: string = group.map((x: LGTemplate): string => x.source).join(':'); + result.push(this.buildLGDiagnostic({ message: `Dup definitions found for template ${ key } in ${ sources }` })); } } @@ -177,18 +177,18 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen } // we can safely convert now, because we know there is no dup - this.TemplateMap = keyBy(this.Templates, (t: LGTemplate) => t.Name); + this.TemplateMap = keyBy(this.Templates, (t: LGTemplate): string => t.name); if (this.Templates.length <= 0) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `File must have at least one template definition`, severity: DiagnosticSeverity.Warning })); } - this.Templates.forEach((template: LGTemplate) => { - this.currentSource = template.Source; - result = result.concat(this.visit(template.ParseTree)); + this.Templates.forEach((template: LGTemplate): void => { + this.currentSource = template.source; + result = result.concat(this.visit(template.parseTree)); }); return result; @@ -199,15 +199,15 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen const templateNameLine: lp.TemplateNameLineContext = context.templateNameLine(); const errorTemplateName: lp.ErrorTemplateNameContext = templateNameLine.errorTemplateName(); if (errorTemplateName !== undefined) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `Not a valid template name line`, context: errorTemplateName })); } else { const templateName: string = context.templateNameLine().templateName().text; if (context.templateBody() === undefined) { - result.push(this.BuildLGDiagnostic({ - message: `There is no template body in template ${templateName}`, + result.push(this.buildLGDiagnostic({ + message: `There is no template body in template ${ templateName }`, context: context.templateNameLine(), severity: DiagnosticSeverity.Warning })); @@ -225,7 +225,7 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen const errorTemplateStr: lp.ErrorTemplateStringContext = templateStr.errorTemplateString(); if (errorTemplateStr !== undefined) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `Invalid template body line, did you miss '-' at line begin`, context: errorTemplateStr})); } else { @@ -242,8 +242,8 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen const typeName: string = context.structuredBodyNameLine().STRUCTURED_CONTENT().text.trim(); if (!this.structuredNameRegex.test(typeName)) { - result.push(this.BuildLGDiagnostic({ - message: `Structured type ${typeName} is invalid. Letter, number, '_', '-' and '.' is allowed.`, + result.push(this.buildLGDiagnostic({ + message: `Structured type ${ typeName } is invalid. Letter, number, '_', '-' and '.' is allowed.`, context: context.structuredBodyNameLine()})); } @@ -253,8 +253,8 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen bodys = content.STRUCTURED_CONTENT(); } - if (bodys === undefined || bodys.length === 0 || bodys.find((u: TerminalNode) => u !== undefined && u.text.trim().length !== 0) === undefined) { - result.push(this.BuildLGDiagnostic({ + if (bodys === undefined || bodys.length === 0 || bodys.find((u: TerminalNode): boolean => u !== undefined && u.text.trim().length !== 0) === undefined) { + result.push(this.buildLGDiagnostic({ message: `Structured content is empty`, context: content})); } else { @@ -264,21 +264,21 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen if (line !== '') { const start: number = line.indexOf('='); if (start < 0 && !this.isPureExpression(line)) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `Structured content does not support`, context: content})); } else if (start > 0) { const originValue: string = line.substr(start + 1).trim(); const valueArray: string[] = Evaluator.wrappedRegExSplit(originValue, this.escapeSeperatorRegex); if (valueArray.length === 1) { - result = result.concat(this.CheckText(originValue, context)); + result = result.concat(this.checkText(originValue, context)); } else { for (const item of valueArray) { - result = result.concat(this.CheckText(item.trim(), context)); + result = result.concat(this.checkText(item.trim(), context)); } } } else if (this.isPureExpression(line)) { - result = result.concat(this.CheckExpression(line, context)); + result = result.concat(this.checkExpression(line, context)); } } } @@ -291,19 +291,19 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen let result: Diagnostic[] = []; const ifRules: lp.IfConditionRuleContext[] = context.ifElseTemplateBody().ifConditionRule(); - let idx: number = 0; + let idx = 0; for (const ifRule of ifRules) { - const conditionNode : lp.IfConditionContext = ifRule.ifCondition(); - const ifExpr : boolean = conditionNode.IF() !== undefined; - const elseIfExpr : boolean = conditionNode.ELSEIF() !== undefined; - const elseExpr : boolean = conditionNode.ELSE() !== undefined; + const conditionNode: lp.IfConditionContext = ifRule.ifCondition(); + const ifExpr: boolean = conditionNode.IF() !== undefined; + const elseIfExpr: boolean = conditionNode.ELSEIF() !== undefined; + const elseExpr: boolean = conditionNode.ELSE() !== undefined; - const node : TerminalNode = ifExpr ? conditionNode.IF() : - elseIfExpr ? conditionNode.ELSEIF() : - conditionNode.ELSE(); + const node: TerminalNode = ifExpr ? conditionNode.IF() : + elseIfExpr ? conditionNode.ELSEIF() : + conditionNode.ELSE(); if (node.text.split(' ').length - 1 > 1) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ // tslint:disable-next-line: max-line-length message: `At most 1 whitespace is allowed between IF/ELSEIF/ELSE and :.`, context: conditionNode @@ -311,7 +311,7 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen } if (idx === 0 && !ifExpr) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `condition is not start with if`, severity: DiagnosticSeverity.Warning, context: conditionNode @@ -319,14 +319,14 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen } if (idx > 0 && ifExpr) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `condition can't have more than one if`, context: conditionNode })); } if (idx === ifRules.length - 1 && !elseExpr) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `condition is not end with else`, severity: DiagnosticSeverity.Warning, context: conditionNode @@ -334,7 +334,7 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen } if (idx > 0 && idx < ifRules.length - 1 && !elseIfExpr) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `only elseif is allowed in middle of condition`, context: conditionNode })); @@ -342,16 +342,16 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen if (!elseExpr) { if (ifRule.ifCondition().EXPRESSION().length !== 1) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `if and elseif should followed by one valid expression`, context: conditionNode })); } else { - result = result.concat(this.CheckExpression(ifRule.ifCondition().EXPRESSION(0).text, conditionNode)); + result = result.concat(this.checkExpression(ifRule.ifCondition().EXPRESSION(0).text, conditionNode)); } } else { if (ifRule.ifCondition().EXPRESSION().length !== 0) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `else should not followed by any expression`, context: conditionNode })); @@ -360,7 +360,7 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen if (ifRule.normalTemplateBody() !== undefined) { result = result.concat(this.visit(ifRule.normalTemplateBody())); } else { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `no normal template body in condition block`, context: conditionNode })); @@ -376,7 +376,7 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen public visitSwitchCaseBody(context: lp.SwitchCaseBodyContext): Diagnostic[] { let result: Diagnostic[] = []; const switchCaseNodes: lp.SwitchCaseRuleContext[] = context.switchCaseTemplateBody().switchCaseRule(); - let idx: number = 0; + let idx = 0; const length: number = switchCaseNodes.length; for (const iterNode of switchCaseNodes) { @@ -385,10 +385,10 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen const caseExpr: boolean = switchCaseStat.CASE() !== undefined; const defaultExpr: boolean = switchCaseStat.DEFAULT() !== undefined; const node: TerminalNode = switchExpr ? switchCaseStat.SWITCH() : - caseExpr ? switchCaseStat.CASE() : - switchCaseStat.DEFAULT(); + caseExpr ? switchCaseStat.CASE() : + switchCaseStat.DEFAULT(); if (node.text.split(' ').length - 1 > 1) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ // tslint:disable-next-line: max-line-length message: `At most 1 whitespace is allowed between SWITCH/CASE/DEFAULT and :.`, context: switchCaseStat @@ -396,21 +396,21 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen } if (idx === 0 && !switchExpr) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `control flow is not starting with switch`, context: switchCaseStat })); } if (idx > 0 && switchExpr) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `control flow cannot have more than one switch statement`, context: switchCaseStat })); } if (idx > 0 && idx < length - 1 && !caseExpr) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `only case statement is allowed in the middle of control flow`, context: switchCaseStat })); @@ -418,14 +418,14 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen if (idx === length - 1 && (caseExpr || defaultExpr)) { if (caseExpr) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `control flow is not ending with default statement`, severity: DiagnosticSeverity.Warning, context: switchCaseStat })); } else { if (length === 2) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `control flow should have at least one case statement`, severity: DiagnosticSeverity.Warning, context: switchCaseStat @@ -435,16 +435,16 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen } if (switchExpr || caseExpr) { if (switchCaseStat.EXPRESSION().length !== 1) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `switch and case should followed by one valid expression`, context: switchCaseStat })); } else { - result = result.concat(this.CheckExpression(switchCaseStat.EXPRESSION(0).text, switchCaseStat)); + result = result.concat(this.checkExpression(switchCaseStat.EXPRESSION(0).text, switchCaseStat)); } } else { if (switchCaseStat.EXPRESSION().length !== 0 || switchCaseStat.TEXT().length !== 0) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `default should not followed by any expression or any text`, context: switchCaseStat })); @@ -454,7 +454,7 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen if (iterNode.normalTemplateBody() !== undefined) { result = result.concat(this.visit(iterNode.normalTemplateBody())); } else { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: `no normal template body in case or default block`, context: switchCaseStat })); @@ -472,19 +472,19 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen const node: TerminalNode = child as TerminalNode; switch (node.symbol.type) { case lp.LGFileParser.TEMPLATE_REF: { - result = result.concat(this.CheckTemplateRef(node.text, context)); + result = result.concat(this.checkTemplateRef(node.text, context)); break; } case lp.LGFileParser.EXPRESSION: { - result = result.concat(this.CheckExpression(node.text, context)); + result = result.concat(this.checkExpression(node.text, context)); break; } case lp.LGFileParser.MULTI_LINE_TEXT: { - result = result.concat(this.CheckMultiLineText(node.text, context)); + result = result.concat(this.checkMultiLineText(node.text, context)); break; } case lp.LGFileParser.TEXT: { - result = result.concat(this.CheckErrorMultiLineText(node.text, context)); + result = result.concat(this.checkErrorMultiLineText(node.text, context)); break; } default: @@ -499,17 +499,17 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen return []; } - private CheckTemplateRef(exp: string, context: ParserRuleContext): Diagnostic[] { + private checkTemplateRef(exp: string, context: ParserRuleContext): Diagnostic[] { const result: Diagnostic[] = []; exp = exp.replace(/(^\[*)/g, '') - .replace(/(\]*$)/g, '') - .trim(); + .replace(/(\]*$)/g, '') + .trim(); let expression: string = exp; if (exp.indexOf('(') < 0) { if (exp in this.TemplateMap) { expression = exp.concat('(') - .concat(this.TemplateMap[exp].Parameters.join()) + .concat(this.TemplateMap[exp].parameters.join()) .concat(')'); } else { expression = exp.concat('()'); @@ -517,10 +517,10 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen } try { - this.ExpressionParser.parse(expression); + this.expressionParser.parse(expression); } catch (e) { - result.push(this.BuildLGDiagnostic({ - message: e.message.concat(` in template reference '${exp}'`), + result.push(this.buildLGDiagnostic({ + message: e.message.concat(` in template reference '${ exp }'`), context: context })); @@ -530,30 +530,30 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen return result; } - private CheckMultiLineText(exp: string, context: ParserRuleContext): Diagnostic[] { + private checkMultiLineText(exp: string, context: ParserRuleContext): Diagnostic[] { exp = exp.substr(3, exp.length - 6); - return this.CheckText(exp, context, true); + return this.checkText(exp, context, true); } - private CheckText(exp: string, context: ParserRuleContext, isMultiLineText : boolean = false): Diagnostic[] { + private checkText(exp: string, context: ParserRuleContext, isMultiLineText: boolean = false): Diagnostic[] { let result: Diagnostic[] = []; const reg: RegExp = isMultiLineText ? /@\{[^{}]+\}/g : /@?\{[^{}]+\}/g; const matches: string[] = exp.match(reg); if (matches !== null && matches !== undefined) { for (const match of matches) { - result = result.concat(this.CheckExpression(match, context)); + result = result.concat(this.checkExpression(match, context)); } } return result; } - private CheckErrorMultiLineText(exp: string, context: ParserRuleContext): Diagnostic[] { + private checkErrorMultiLineText(exp: string, context: ParserRuleContext): Diagnostic[] { const result: Diagnostic[] = []; if (exp.startsWith('```')) { - result.push(this.BuildLGDiagnostic({ + result.push(this.buildLGDiagnostic({ message: 'Multi line variation must be enclosed in ```', context: context })); @@ -562,18 +562,18 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen return result; } - private CheckExpression(exp: string, context: ParserRuleContext): Diagnostic[] { + private checkExpression(exp: string, context: ParserRuleContext): Diagnostic[] { const result: Diagnostic[] = []; exp = exp.replace(/(^@*)/g, '') - .replace(/(^{*)/g, '') - .replace(/(}*$)/g, '') - .trim(); + .replace(/(^{*)/g, '') + .replace(/(}*$)/g, '') + .trim(); try { - this.ExpressionParser.parse(exp); + this.expressionParser.parse(exp); } catch (e) { - result.push(this.BuildLGDiagnostic({ - message: e.message.concat(` in expression '${exp}'`), + result.push(this.buildLGDiagnostic({ + message: e.message.concat(` in expression '${ exp }'`), context: context })); @@ -583,7 +583,7 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen return result; } - private BuildLGDiagnostic(parameters: { message: string; severity?: DiagnosticSeverity; context?: ParserRuleContext }): Diagnostic { + private buildLGDiagnostic(parameters: { message: string; severity?: DiagnosticSeverity; context?: ParserRuleContext }): Diagnostic { let message: string = parameters.message; const severity: DiagnosticSeverity = parameters.severity === undefined ? DiagnosticSeverity.Error : parameters.severity; const context: ParserRuleContext = parameters.context; @@ -592,9 +592,9 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen // tslint:disable-next-line: max-line-length const stopPosition: Position = context === undefined ? new Position(0, 0) : new Position(context.stop.line, context.stop.charPositionInLine + context.stop.text.length); const range: Range = new Range(startPosition, stopPosition); - message = `error message: ${message}`; + message = `error message: ${ message }`; if (this.currentSource !== undefined && this.currentSource !== '') { - message = `source: ${this.currentSource}. ${message}`; + message = `source: ${ this.currentSource }. ${ message }`; } return new Diagnostic(range, message, severity); @@ -615,4 +615,4 @@ class StaticCheckerInner extends AbstractParseTreeVisitor implemen } } -} +} \ No newline at end of file diff --git a/libraries/botbuilder-lg/src/templateEngine.ts b/libraries/botbuilder-lg/src/templateEngine.ts index 583f05187a..fa9a78ee28 100644 --- a/libraries/botbuilder-lg/src/templateEngine.ts +++ b/libraries/botbuilder-lg/src/templateEngine.ts @@ -1,5 +1,5 @@ /** - * @module botbuilder-expression-lg + * @module botbuilder-lg */ /** * Copyright (c) Microsoft Corporation. All rights reserved. @@ -43,7 +43,7 @@ export class TemplateEngine { */ public addFiles = (filePaths: string[], importResolver?: ImportResolverDelegate): TemplateEngine => { let totalLGResources: LGResource[] = []; - filePaths.forEach((filePath: string) => { + filePaths.forEach((filePath: string): void => { filePath = path.normalize(ImportResolver.normalizePath(filePath)); const rootResource: LGResource = LGParser.parse(fs.readFileSync(filePath, 'utf-8'), filePath); const lgResources: LGResource[] = rootResource.discoverLGResources(importResolver); @@ -51,14 +51,14 @@ export class TemplateEngine { }); // Remove duplicated lg files by id - const deduplicatedLGResources: LGResource[] = totalLGResources.filter((resource: LGResource, index: number, self: LGResource[]) => - index === self.findIndex((t: LGResource) => ( - t.Id === resource.Id + const deduplicatedLGResources: LGResource[] = totalLGResources.filter((resource: LGResource, index: number, self: LGResource[]): boolean => + index === self.findIndex((t: LGResource): boolean => ( + t.id === resource.id )) ); - const lgTemplates: LGTemplate[] = deduplicatedLGResources.reduce((acc: LGTemplate[], x: LGResource) => - acc = acc.concat(x.Templates), [] + const lgTemplates: LGTemplate[] = deduplicatedLGResources.reduce((acc: LGTemplate[], x: LGResource): any => + acc = acc.concat(x.templates), [] ); this.templates = this.templates.concat(lgTemplates); @@ -87,8 +87,8 @@ export class TemplateEngine { this.checkImportResolver(id, importResolver); const rootResource: LGResource = LGParser.parse(content, id); const lgResources: LGResource[] = rootResource.discoverLGResources(importResolver); - const lgTemplates: LGTemplate[] = lgResources.reduce((acc: LGTemplate[], x: LGResource) => - acc = acc.concat(x.Templates), [] + const lgTemplates: LGTemplate[] = lgResources.reduce((acc: LGTemplate[], x: LGResource): any => + acc = acc.concat(x.templates), [] ); this.templates = this.templates.concat(lgTemplates); @@ -97,45 +97,45 @@ export class TemplateEngine { return this; } - public evaluateTemplate(templateName: string, scope?: any) : any { + public evaluateTemplate(templateName: string, scope?: any): any { const evalutor: Evaluator = new Evaluator(this.templates, this.expressionEngine); - return evalutor.EvaluateTemplate(templateName, scope); + return evalutor.evaluateTemplate(templateName, scope); } - public expandTemplate(templateName: string, scope?: any) : string[] { + public expandTemplate(templateName: string, scope?: any): string[] { const expander: Expander = new Expander(this.templates, this.expressionEngine); - return expander.ExpandTemplate(templateName, scope); + return expander.expandTemplate(templateName, scope); } public analyzeTemplate(templateName: string): AnalyzerResult { const analyzer: Analyzer = new Analyzer(this.templates, this.expressionEngine); - return analyzer.AnalyzeTemplate(templateName); + return analyzer.analyzeTemplate(templateName); } public evaluate(inlineStr: string, scope?: any): any { // wrap inline string with "# name and -" to align the evaluation process - const fakeTemplateId: string = '__temp__'; + const fakeTemplateId = '__temp__'; inlineStr = !inlineStr.trim().startsWith('```') && inlineStr.indexOf('\n') >= 0 - ? '```'.concat(inlineStr).concat('```') : inlineStr; - const wrappedStr: string = `# ${fakeTemplateId} \r\n - ${inlineStr}`; + ? '```'.concat(inlineStr).concat('```') : inlineStr; + const wrappedStr = `# ${ fakeTemplateId } \r\n - ${ inlineStr }`; const lgResource: LGResource = LGParser.parse(wrappedStr, 'inline'); - const mergedTemplates: LGTemplate[] = this.templates.concat(lgResource.Templates); + const mergedTemplates: LGTemplate[] = this.templates.concat(lgResource.templates); this.runStaticCheck(mergedTemplates); const evalutor: Evaluator = new Evaluator(mergedTemplates, this.expressionEngine); - return evalutor.EvaluateTemplate(fakeTemplateId, scope); + return evalutor.evaluateTemplate(fakeTemplateId, scope); } private readonly runStaticCheck = (templates: LGTemplate[]): void => { const templatesToCheck: LGTemplate[] = templates === undefined ? this.templates : templates; const diagnostics: Diagnostic[] = new StaticChecker(this.expressionEngine).checkTemplates(templatesToCheck); - const errors: Diagnostic[] = diagnostics.filter((u: Diagnostic) => u.Severity === DiagnosticSeverity.Error); + const errors: Diagnostic[] = diagnostics.filter((u: Diagnostic): boolean => u.severity === DiagnosticSeverity.Error); if (errors.length > 0) { - throw new Error(errors.map((error: Diagnostic) => error.toString()).join('\n')); + throw new Error(errors.map((error: Diagnostic): string => error.toString()).join('\n')); } } diff --git a/libraries/botbuilder-lg/tests/lg.test.js b/libraries/botbuilder-lg/tests/lg.test.js index e1b9a40ef7..daf3c3a6d3 100644 --- a/libraries/botbuilder-lg/tests/lg.test.js +++ b/libraries/botbuilder-lg/tests/lg.test.js @@ -472,45 +472,45 @@ describe('LG', function () { it('TestLGResource', function () { var lgResource = LGParser.parse(fs.readFileSync(GetExampleFilePath("2.lg"), 'utf-8')); - assert.strictEqual(lgResource.Templates.length, 1); - assert.strictEqual(lgResource.Imports.length, 0); - assert.strictEqual(lgResource.Templates[0].Name, 'wPhrase'); - assert.strictEqual(lgResource.Templates[0].Body.replace(/\r\n/g, '\n'), '- Hi\n- Hello\n- Hiya\n- Hi'); + assert.strictEqual(lgResource.templates.length, 1); + assert.strictEqual(lgResource.imports.length, 0); + assert.strictEqual(lgResource.templates[0].name, 'wPhrase'); + assert.strictEqual(lgResource.templates[0].body.replace(/\r\n/g, '\n'), '- Hi\n- Hello\n- Hiya\n- Hi'); lgResource = lgResource.addTemplate('newtemplate', ['age', 'name'], '- hi '); - assert.strictEqual(lgResource.Templates.length, 2); - assert.strictEqual(lgResource.Imports.length, 0); - assert.strictEqual(lgResource.Templates[1].Name, 'newtemplate'); - assert.strictEqual(lgResource.Templates[1].Parameters.length, 2); - assert.strictEqual(lgResource.Templates[1].Parameters[0], 'age'); - assert.strictEqual(lgResource.Templates[1].Parameters[1], 'name'); - assert.strictEqual(lgResource.Templates[1].Body, '- hi '); + assert.strictEqual(lgResource.templates.length, 2); + assert.strictEqual(lgResource.imports.length, 0); + assert.strictEqual(lgResource.templates[1].name, 'newtemplate'); + assert.strictEqual(lgResource.templates[1].parameters.length, 2); + assert.strictEqual(lgResource.templates[1].parameters[0], 'age'); + assert.strictEqual(lgResource.templates[1].parameters[1], 'name'); + assert.strictEqual(lgResource.templates[1].body, '- hi '); lgResource = lgResource.addTemplate('newtemplate2', undefined, '- hi2 '); - assert.strictEqual(lgResource.Templates.length, 3); - assert.strictEqual(lgResource.Templates[2].Name, 'newtemplate2'); - assert.strictEqual(lgResource.Templates[2].Body, '- hi2 '); + assert.strictEqual(lgResource.templates.length, 3); + assert.strictEqual(lgResource.templates[2].name, 'newtemplate2'); + assert.strictEqual(lgResource.templates[2].body, '- hi2 '); lgResource = lgResource.updateTemplate('newtemplate', 'newtemplateName', ['newage', 'newname'], '- new hi\r\n#hi'); - assert.strictEqual(lgResource.Templates.length, 3); - assert.strictEqual(lgResource.Imports.length, 0); - assert.strictEqual(lgResource.Templates[1].Name, 'newtemplateName'); - assert.strictEqual(lgResource.Templates[1].Parameters.length, 2); - assert.strictEqual(lgResource.Templates[1].Parameters[0], 'newage'); - assert.strictEqual(lgResource.Templates[1].Parameters[1], 'newname'); - assert.strictEqual(lgResource.Templates[1].Body, '- new hi\r\n- #hi'); + assert.strictEqual(lgResource.templates.length, 3); + assert.strictEqual(lgResource.imports.length, 0); + assert.strictEqual(lgResource.templates[1].name, 'newtemplateName'); + assert.strictEqual(lgResource.templates[1].parameters.length, 2); + assert.strictEqual(lgResource.templates[1].parameters[0], 'newage'); + assert.strictEqual(lgResource.templates[1].parameters[1], 'newname'); + assert.strictEqual(lgResource.templates[1].body, '- new hi\r\n- #hi'); lgResource = lgResource.updateTemplate('newtemplate2', 'newtemplateName2', ['newage2', 'newname2'], '- new hi\r\n#hi2'); - assert.strictEqual(lgResource.Templates.length, 3); - assert.strictEqual(lgResource.Imports.length, 0); - assert.strictEqual(lgResource.Templates[2].Name, 'newtemplateName2'); - assert.strictEqual(lgResource.Templates[2].Body, '- new hi\r\n- #hi2'); + assert.strictEqual(lgResource.templates.length, 3); + assert.strictEqual(lgResource.imports.length, 0); + assert.strictEqual(lgResource.templates[2].name, 'newtemplateName2'); + assert.strictEqual(lgResource.templates[2].body, '- new hi\r\n- #hi2'); lgResource = lgResource.deleteTemplate('newtemplateName'); - assert.strictEqual(lgResource.Templates.length, 2); + assert.strictEqual(lgResource.templates.length, 2); lgResource = lgResource.deleteTemplate('newtemplateName2'); - assert.strictEqual(lgResource.Templates.length, 1); + assert.strictEqual(lgResource.templates.length, 1); }); it('TestMemoryScope', function () { diff --git a/libraries/botbuilder-lg/tests/mslgtool.test.js b/libraries/botbuilder-lg/tests/mslgtool.test.js index 59125ce8b0..0b68018daf 100644 --- a/libraries/botbuilder-lg/tests/mslgtool.test.js +++ b/libraries/botbuilder-lg/tests/mslgtool.test.js @@ -5,7 +5,7 @@ const fs = require('fs'); function GetErrors(mslgtool, fileName){ const path = `${ __dirname }/testData/mslgTool/`+ fileName; const text = fs.readFileSync(path, 'utf-8'); - return mslgtool.ValidateFile(text, path); + return mslgtool.validateFile(text, path); } @@ -34,12 +34,12 @@ describe('MSLGTool', function () { assert.strictEqual(errors.length, 0); errors = GetErrors(mslgTool, 'CollateFile3.lg'); assert.strictEqual(errors.length, 0); - assert.strictEqual(mslgTool.CollationMessages.length, 0); - assert.strictEqual(mslgTool.NameCollisions.length, 3); - assert.strictEqual(mslgTool.CollatedTemplates.size, 5); - assert.strictEqual(mslgTool.CollatedTemplates.get('Greeting').length, 3); - assert.strictEqual(mslgTool.CollatedTemplates.get('TimeOfDayWithCondition').size, 3); - assert.strictEqual(mslgTool.CollatedTemplates.get('TimeOfDay').length, 3); + assert.strictEqual(mslgTool.collationMessages.length, 0); + assert.strictEqual(mslgTool.nameCollisions.length, 3); + assert.strictEqual(mslgTool.collatedTemplates.size, 5); + assert.strictEqual(mslgTool.collatedTemplates.get('Greeting').length, 3); + assert.strictEqual(mslgTool.collatedTemplates.get('TimeOfDayWithCondition').size, 3); + assert.strictEqual(mslgTool.collatedTemplates.get('TimeOfDay').length, 3); }); it('TestCollateTemplatesOfStructuredLG', function () { @@ -48,12 +48,12 @@ describe('MSLGTool', function () { assert.strictEqual(errors.length, 0); errors = GetErrors(mslgTool, 'CollateFile5.lg'); assert.strictEqual(errors.length, 0); - assert.strictEqual(mslgTool.CollationMessages.length, 0); - assert.strictEqual(mslgTool.NameCollisions.length, 1); - assert.strictEqual(mslgTool.CollatedTemplates.size, 1); - assert.strictEqual(mslgTool.CollatedTemplates.get('ST2')[0].replace(/\r\n/g, '\n'), '[MyStruct\n Speak = bar\n Text = zoo\n]'); - assert.strictEqual(mslgTool.CollatedTemplates.get('ST2')[1].replace(/\r\n/g, '\n'), '[MyStruct\n Speak = hello\n Text = world\n]'); - let result = mslgTool.CollateTemplates(); + assert.strictEqual(mslgTool.collationMessages.length, 0); + assert.strictEqual(mslgTool.nameCollisions.length, 1); + assert.strictEqual(mslgTool.collatedTemplates.size, 1); + assert.strictEqual(mslgTool.collatedTemplates.get('ST2')[0].replace(/\r\n/g, '\n'), '[MyStruct\n Speak = bar\n Text = zoo\n]'); + assert.strictEqual(mslgTool.collatedTemplates.get('ST2')[1].replace(/\r\n/g, '\n'), '[MyStruct\n Speak = hello\n Text = world\n]'); + let result = mslgTool.collateTemplates(); assert.strictEqual(result.replace(/\r\n/g, '\n'), '# ST2\n[MyStruct\n Speak = bar\n Text = zoo\n]\n\n'); }); @@ -61,7 +61,7 @@ describe('MSLGTool', function () { const mslgTool = new MSLGTool(); let errors = GetErrors(mslgTool, 'CollateFile1.lg'); assert.strictEqual(errors.length, 0); - let expandedTemplate = mslgTool.ExpandTemplate('FinalGreeting', undefined); + let expandedTemplate = mslgTool.expandTemplate('FinalGreeting', undefined); assert.strictEqual(expandedTemplate.length, 4); let expectedResults = ['Hi Morning', 'Hi Evening', 'Hello Morning', 'Hello Evening']; expectedResults.forEach(element => { @@ -73,13 +73,13 @@ describe('MSLGTool', function () { const mslgTool = new MSLGTool(); let errors = GetErrors(mslgTool, 'CollateFile3.lg'); assert.strictEqual(errors.length, 0); - let expandedTemplate = mslgTool.ExpandTemplate('TimeOfDayWithCondition', { time: 'evening' }); + let expandedTemplate = mslgTool.expandTemplate('TimeOfDayWithCondition', { time: 'evening' }); assert.strictEqual(expandedTemplate.length, 2); let expectedResults = ['Hi Evening', 'Hey Evening']; expectedResults.forEach(element => { assert.strictEqual(expandedTemplate.includes(element), true); }); - let expandedTemplate2 = mslgTool.ExpandTemplate('greetInAWeek', { day: 'Sunday' }); + let expandedTemplate2 = mslgTool.expandTemplate('greetInAWeek', { day: 'Sunday' }); assert.strictEqual(expandedTemplate.length, 2); let expected2Results = ['Nice Sunday!', 'Happy Sunday!']; expected2Results.forEach(element => { @@ -102,7 +102,7 @@ describe('MSLGTool', function () { date :"tomorrow" } ]; - let expandedTemplate = mslgTool.ExpandTemplate('ShowAlarmsWithLgTemplate', {alarms: alarms}); + let expandedTemplate = mslgTool.expandTemplate('ShowAlarmsWithLgTemplate', {alarms: alarms}); assert.strictEqual(expandedTemplate.length, 2); assert.strictEqual(expandedTemplate[0], "You have 2 alarms, they are 8 pm at tomorrow"); assert.strictEqual(expandedTemplate[1], "You have 2 alarms, they are 8 pm of tomorrow"); @@ -122,7 +122,7 @@ describe('MSLGTool', function () { date :"tomorrow" } ]; - let evaled = mslgTool.ExpandTemplate('ShowAlarmsWithForeach', {alarms: alarms}); + let evaled = mslgTool.expandTemplate('ShowAlarmsWithForeach', {alarms: alarms}); const evalOptions = [ "You have 2 alarms, 7 am at tomorrow and 8 pm at tomorrow", "You have 2 alarms, 7 am at tomorrow and 8 pm of tomorrow", @@ -133,15 +133,15 @@ describe('MSLGTool', function () { assert.strictEqual(evaled.length, 1); assert.strictEqual(evalOptions.includes(evaled[0]), true); - evaled = mslgTool.ExpandTemplate('T2'); + evaled = mslgTool.expandTemplate('T2'); assert.strictEqual(evaled.length, 1); assert.strictEqual(evaled[0] === "3" || evaled[0] === "5", true); - evaled = mslgTool.ExpandTemplate('T3'); + evaled = mslgTool.expandTemplate('T3'); assert.strictEqual(evaled.length, 1); assert.strictEqual(evaled[0] === "3" || evaled[0] === "5", true); - evaled = mslgTool.ExpandTemplate('T4'); + evaled = mslgTool.expandTemplate('T4'); assert.strictEqual(evaled.length, 1); assert.strictEqual(evaled[0] === "ey" || evaled[0] === "el", true); }) @@ -160,7 +160,7 @@ describe('MSLGTool', function () { date :"tomorrow" } ]; - let expandedTemplate = mslgTool.ExpandTemplate('ShowAlarmsWithMultiLine', {alarms: alarms}); + let expandedTemplate = mslgTool.expandTemplate('ShowAlarmsWithMultiLine', {alarms: alarms}); assert.strictEqual(expandedTemplate.length, 2); const eval1Options = ["\r\nYou have 2 alarms.\r\nThey are 8 pm at tomorrow\r\n", "\nYou have 2 alarms.\nThey are 8 pm at tomorrow\n"]; const eval2Options = ["\r\nYou have 2 alarms.\r\nThey are 8 pm of tomorrow\r\n", "\nYou have 2 alarms.\nThey are 8 pm of tomorrow\n"] @@ -172,7 +172,7 @@ describe('MSLGTool', function () { const mslgTool = new MSLGTool(); let errors = GetErrors(mslgTool, 'StructuredLG.lg'); assert.strictEqual(errors.length, 0); - let expandedTemplates = mslgTool.ExpandTemplate('AskForAge.prompt'); + let expandedTemplates = mslgTool.expandTemplate('AskForAge.prompt'); assert.strictEqual(expandedTemplates.length, 4); let evalOptions = [ '{"$type":"Activity","text":"how old are you?","speak":"how old are you?"}', @@ -183,7 +183,7 @@ describe('MSLGTool', function () { evalOptions.forEach(evalOption => assert(expandedTemplates.includes(evalOption))); - expandedTemplates = mslgTool.ExpandTemplate('ExpanderT1'); + expandedTemplates = mslgTool.expandTemplate('ExpanderT1'); assert.strictEqual(expandedTemplates.length, 4); evalOptions = [ '{"$type":"MyStruct","text":"Hi","speak":"how old are you?"}', diff --git a/libraries/botbuilder-lg/tests/templateEngineThrowException.test.js b/libraries/botbuilder-lg/tests/templateEngineThrowException.test.js index cac9948e1b..4078bcb0e5 100644 --- a/libraries/botbuilder-lg/tests/templateEngineThrowException.test.js +++ b/libraries/botbuilder-lg/tests/templateEngineThrowException.test.js @@ -52,7 +52,7 @@ describe('LGExceptionTest', function () { var engine = new TemplateEngine().addFile(GetExampleFilePath(testDateItem)); var report = new StaticChecker().checkTemplates(engine.templates); assert.strictEqual(report.length > 0, true); - report.forEach(e => assert.strictEqual(e.Severity === DiagnosticSeverity.Warning, true)); + report.forEach(e => assert.strictEqual(e.severity === DiagnosticSeverity.Warning, true)); } }); diff --git a/libraries/botbuilder-lg/tests/testData/examples/Analyzer.lg b/libraries/botbuilder-lg/tests/testData/examples/Analyzer.lg index 9da904374c..c0a76efdff 100644 --- a/libraries/botbuilder-lg/tests/testData/examples/Analyzer.lg +++ b/libraries/botbuilder-lg/tests/testData/examples/Analyzer.lg @@ -1,55 +1,55 @@ -# wPhrase -- Hi {userName} - -# pizzaOrderConfirmation -- Your pizza order of {base} with toppings {join(topping, ',', 'and')} is confirmed. - -# sandwichOrderConfirmation -- Your {bread} sandwich with {meat} is on its way. Thanks. - -# orderReadOut -- IF: {orderType == 'pizza'} -- [wPhrase] [pizzaOrderConfirmation] -- ELSEIF: {orderType == 'sandwich'} -- [sandwichOrderConfirmation] - -# template1 -- [template2] {age} [template4] [template6(age)] - -# template2 -- {join(foreach(alarms, x, template3(customer)), ',', 'and')} {tasks[0]} - -# template3(input) -- {input.property} - -# template4 -- ``` -@{city} @{template5()} -``` - -# template5 -- hi - -# template6(input) -- hi - -# LatteOrderConfirmation --Here is your {size} Latte. You need to pay {price} dollars! Thank you! - -# MochaOrderConfirmation --Here is your {size} Mocha. You need to pay {price} dollars! Thank you! - -# CuppuccinoOrderConfirmation --Here is your {size} Cuppuccino. You need to pay {price} dollars! Thank you! - -# coffee-to-go-order --SWITCH:{coffee} -- CASE: {'Latte'} - - [wPhrase] [LatteOrderConfirmation] -- CASE: {'Mocha'} - - [wPhrase] [MochaOrderConfirmation] -- CASE: {'CuppuccinoOrderConfirmation'} - - [wPhrase] [CuppuccinoOrderConfirmation] -- DEFAULT: - - [wPhrase], welcome next time! - +# wPhrase +- Hi {userName} + +# pizzaOrderConfirmation +- Your pizza order of {base} with toppings {join(topping, ',', 'and')} is confirmed. + +# sandwichOrderConfirmation +- Your {bread} sandwich with {meat} is on its way. Thanks. + +# orderReadOut +- IF: {orderType == 'pizza'} +- [wPhrase] [pizzaOrderConfirmation] +- ELSEIF: {orderType == 'sandwich'} +- [sandwichOrderConfirmation] + +# template1 +- [template2] {age} [template4] [template6(age)] + +# template2 +- {join(foreach(alarms, x, template3(customer)), ',', 'and')} {tasks[0]} + +# template3(input) +- {input.property} + +# template4 +- ``` +@{city} @{template5()} +``` + +# template5 +- hi + +# template6(input) +- hi + +# LatteOrderConfirmation +-Here is your {size} Latte. You need to pay {price} dollars! Thank you! + +# MochaOrderConfirmation +-Here is your {size} Mocha. You need to pay {price} dollars! Thank you! + +# CuppuccinoOrderConfirmation +-Here is your {size} Cuppuccino. You need to pay {price} dollars! Thank you! + +# coffee-to-go-order +-SWITCH:{coffee} +- CASE: {'Latte'} + - [wPhrase] [LatteOrderConfirmation] +- CASE: {'Mocha'} + - [wPhrase] [MochaOrderConfirmation] +- CASE: {'CuppuccinoOrderConfirmation'} + - [wPhrase] [CuppuccinoOrderConfirmation] +- DEFAULT: + - [wPhrase], welcome next time! + diff --git a/libraries/botbuilder/src/teamsActivityHandler.ts b/libraries/botbuilder/src/teamsActivityHandler.ts index a52a03af9d..0afe46232c 100644 --- a/libraries/botbuilder/src/teamsActivityHandler.ts +++ b/libraries/botbuilder/src/teamsActivityHandler.ts @@ -46,6 +46,7 @@ export class TeamsActivityHandler extends ActivityHandler { if (invokeResponse && !context.turnState.get(INVOKE_RESPONSE_KEY)) { await context.sendActivity({ value: invokeResponse, type: 'invokeResponse' }); } + await this.defaultNextEvent(context)(); break; default: await super.onTurnActivity(context); diff --git a/libraries/botbuilder/tests/teamsActivityHandler.test.js b/libraries/botbuilder/tests/teamsActivityHandler.test.js index 025bf214b3..6d2c0b18cf 100644 --- a/libraries/botbuilder/tests/teamsActivityHandler.test.js +++ b/libraries/botbuilder/tests/teamsActivityHandler.test.js @@ -518,6 +518,15 @@ describe('TeamsActivityHandler', () => { return activity; } + function createSignInVerifyState(channelData) { + const activity = { + type: ActivityTypes.Invoke, + name: 'signin/verifyState', + channelData + }; + return activity; + } + let onConversationUpdateCalled = false; let onDialogCalled = false; @@ -764,9 +773,9 @@ describe('TeamsActivityHandler', () => { it('onTeamsTeamRenamed routed activity', () => { const bot = new TeamsActivityHandler(); - + let onTeamsTeamRenamedEventCalled = false; - + const team = { id: 'team' }; const activity = createConvUpdateActivity({ team, eventType: 'teamRenamed' }); @@ -792,11 +801,11 @@ describe('TeamsActivityHandler', () => { onDialogCalled = true; await next(); }); - + const adapter = new TestAdapter(async context => { await bot.run(context); }); - + adapter.send(activity) .then(() => { assert(onTeamsTeamRenamedEventCalled, 'onTeamsTeamRenamedEvent handler not called'); @@ -804,5 +813,39 @@ describe('TeamsActivityHandler', () => { assert(onDialogCalled, 'onDialog handler not called'); }); }); + + it('signin/verifyState routed activity', async () => { + onDialogCalled = false; + handleTeamsSigninVerifyStateCalled = false; + + class InvokeHandler extends TeamsActivityHandler { + constructor() { + super(); + + this.onDialog(async (context, next) => { + assert(context, 'context not found'); + onDialogCalled = true; + await next(); + }); + } + + async handleTeamsSigninVerifyState(context) { + assert(context, 'context not found'); + handleTeamsSigninVerifyStateCalled = true; + } + } + + const bot = new InvokeHandler(); + const team = { id: 'team' }; + const activity = createSignInVerifyState({ team, channelId: 'msteams' }); + + const adapter = new TestAdapter(async context => { + await bot.run(context); + }); + + await adapter.send(activity); + assert(onDialogCalled, 'onDialog handler not called'); + assert(handleTeamsSigninVerifyStateCalled, 'handleTeamsSigninVerifyState handler not called'); + }); }); }); diff --git a/libraries/botframework-connector/package-lock.json b/libraries/botframework-connector/package-lock.json deleted file mode 100644 index a5c715cdc7..0000000000 --- a/libraries/botframework-connector/package-lock.json +++ /dev/null @@ -1,357 +0,0 @@ -{ - "name": "botframework-connector", - "version": "4.1.6", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@azure/ms-rest-js": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.2.6.tgz", - "integrity": "sha512-8cmDpxsQjVdveJwYKtNnkJorxEORLYJu9UHaUvLZA6yHExzDeISHAcSVWE0J05+VkJtqheVHF17M+2ro18Cdnw==", - "requires": { - "axios": "^0.18.0", - "form-data": "^2.3.2", - "tough-cookie": "^2.4.3", - "tslib": "^1.9.2", - "uuid": "^3.2.1", - "xml2js": "^0.4.19" - }, - "dependencies": { - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "axios": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", - "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - } - }, - "form-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.0.tgz", - "integrity": "sha512-WXieX3G/8side6VIqx44ablyULoGruSde5PNTxoUyo5CeyAMX6nVWUd0rgist/EuX655cjhUhTo1Fo3tRYqbcA==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { - "mime-db": "1.40.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "psl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz", - "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - } - } - }, - "@types/jsonwebtoken": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.8.tgz", - "integrity": "sha512-XENN3YzEB8D6TiUww0O8SRznzy1v+77lH7UmuN54xq/IHIsyWjWOzZuFFTtoiRuaE782uAoRwBe/wwow+vQXZw==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "12.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.3.tgz", - "integrity": "sha512-7TEYTQT1/6PP53NftXXabIZDaZfaoBdeBm8Md/i7zsWRoBe0YwOXguyK8vhHs8ehgB/w9U4K/6EWuTyp0W6nIA==" - } - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } - }, - "node-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", - "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" - } - } -} diff --git a/libraries/botframework-connector/src/index.ts b/libraries/botframework-connector/src/index.ts index f073174838..186ddb351a 100644 --- a/libraries/botframework-connector/src/index.ts +++ b/libraries/botframework-connector/src/index.ts @@ -1,10 +1,10 @@ +/** + * @module botbuilder + */ (new Function('require', 'if (!this.hasOwnProperty("FormData")) { this.FormData = require("form-data"); }; if (!this.hasOwnProperty("fetch")) { this.fetch = require("node-fetch"); }'))(require); import { TokenResponse } from './connectorApi/models/mappers'; -/** - * @module botbuilder - */ export * from './auth'; export { ConnectorClient } from './connectorApi/connectorClient'; export { TokenApiClient, TokenApiModels } from './tokenApi/tokenApiClient'; diff --git a/libraries/botframework-expressions/package.json b/libraries/botframework-expressions/package.json index e36cd7d2ae..7b4146eee5 100644 --- a/libraries/botframework-expressions/package.json +++ b/libraries/botframework-expressions/package.json @@ -1,13 +1,17 @@ { "name": "botframework-expressions", + "author": "Microsoft Corp.", "description": "Common Expression Language", - "version": "4.5.0", + "version": "4.1.6", "license": "MIT", "keywords": [ "botbuilder", "botframework", "expression" ], + "bugs": { + "url": "https://github.com/Microsoft/botbuilder-js/issues" + }, "repository": { "type": "git", "url": "https://github.com/Microsoft/botbuilder-js.git" @@ -15,32 +19,30 @@ "main": "./lib/index.js", "typings": "./lib/index.d.ts", "dependencies": { - "@types/lru-cache": "^5.1.0", "@microsoft/recognizers-text-data-types-timex-expression": "^1.1.4", + "@types/moment-timezone": "^0.5.12", + "@types/xmldom": "^0.1.29", "antlr4ts": "0.5.0-alpha.1", "jspath": "^0.4.0", "lodash": "^4.17.15", "lru-cache": "^5.1.1", "moment": "2.24.0", - "moment-timezone": "^0.5.25", - "xml2js": "^0.4.19", - "xmldom": "^0.1.27", - "xpath": "0.0.27" + "moment-timezone": "^0.5.25" }, "devDependencies": { "@types/jspath": "^0.4.0", "@types/lru-cache": "^5.1.0", "@types/mocha": "^5.2.5", "@types/node": "^10.12.18", - "@types/xml2js": "^0.4.4", "nyc": "^11.4.1", - "ts-node": "^4.1.0", - "typescript-tslint-plugin": "^0.3.1" + "ts-node": "^4.1.0" }, "scripts": { "build": "tsc", "test": "tsc && nyc mocha tests/ --timeout 60000", - "clean": "erase /q /s .\\lib" + "clean": "erase /q /s .\\lib", + "build-docs": "typedoc --theme markdown --entryPoint botframework-expressions --excludePrivate --includeDeclarations --ignoreCompilerErrors --module amd --out ..\\..\\doc\\botframework-expressions .\\lib\\index.d.ts --hideGenerator --name \"Bot Builder SDK - Expression\" --readme none", + "set-version": "npm version --allow-same-version ${Version}" }, "files": [ "/lib", diff --git a/libraries/botframework-expressions/src/builtInFunction.ts b/libraries/botframework-expressions/src/builtInFunction.ts index fbf9ea8fc6..ce7b0892b3 100644 --- a/libraries/botframework-expressions/src/builtInFunction.ts +++ b/libraries/botframework-expressions/src/builtInFunction.ts @@ -11,9 +11,6 @@ import * as jsPath from 'jspath'; import * as lodash from 'lodash'; import * as moment from 'moment'; import * as timezone from 'moment-timezone'; -import { Builder } from 'xml2js'; -import * as xmldom from 'xmldom'; -import * as xpathEval from 'xpath'; import { CommonRegex } from './commonRegex'; import { Constant } from './constant'; import { Expression, ReturnType } from './expression'; @@ -47,7 +44,7 @@ export type VerifyExpression = (value: any, expression: Expression, child: numbe export class BuiltInFunctions { public static readonly DefaultDateTimeFormat: string = 'YYYY-MM-DDTHH:mm:ss.sssZ'; public static readonly UnixMilliSecondToTicksConstant: number = 621355968000000000; //constant of converting unix timestamp to ticks - public static _functions: Map = BuiltInFunctions.BuildFunctionLookup(); + public static _functions: Map = BuiltInFunctions.buildFunctionLookup(); /** * Validate that expression has a certain number of children that are of any of the supported types. @@ -57,23 +54,23 @@ export class BuiltInFunctions { * @param types Allowed return types for children. * If a child has a return type of Object then validation will happen at runtime. */ - public static ValidateArityAndAnyType(expression: Expression, minArity: number, maxArity: number, ...types: ReturnType[]): void { - if (expression.Children.length < minArity) { - throw new Error(`${expression} should have at least ${minArity} children.`); + public static validateArityAndAnyType(expression: Expression, minArity: number, maxArity: number, ...types: ReturnType[]): void { + if (expression.children.length < minArity) { + throw new Error(`${ expression } should have at least ${ minArity } children.`); } - if (expression.Children.length > maxArity) { - throw new Error(`${expression} can't have more than ${maxArity} children.`); + if (expression.children.length > maxArity) { + throw new Error(`${ expression } can't have more than ${ maxArity } children.`); } if (types.length > 0) { - for (const child of expression.Children) { + for (const child of expression.children) { - if (child.ReturnType !== ReturnType.Object && !types.includes(child.ReturnType)) { + if (child.returnType !== ReturnType.Object && !types.includes(child.returnType)) { if (types.length === 1) { - throw new Error(`${child} is not a ${types[0]} expression in ${expression.toString()}.`); + throw new Error(`${ child } is not a ${ types[0] } expression in ${ expression.toString() }.`); } else { - const builder: string = `${child} in ${expression.toString()} is not any of [`; - let first: boolean = true; + const builder = `${ child } in ${ expression.toString() } is not any of [`; + let first = true; for (const type of types) { if (first) { first = false; @@ -96,33 +93,33 @@ export class BuiltInFunctions { * @param optional Optional types in order. * @param types Expected types in order. */ - public static ValidateOrder(expression: Expression, optional: ReturnType[], ...types: ReturnType[]): void { + public static validateOrder(expression: Expression, optional: ReturnType[], ...types: ReturnType[]): void { if (optional === undefined) { optional = []; } - if (expression.Children.length < types.length || expression.Children.length > types.length + optional.length) { + if (expression.children.length < types.length || expression.children.length > types.length + optional.length) { throw new Error(optional.length === 0 ? - `${expression} should have ${types.length} children.` - : `${expression} should have between ${types.length} and ${types.length + optional.length} children.`); + `${ expression } should have ${ types.length } children.` + : `${ expression } should have between ${ types.length } and ${ types.length + optional.length } children.`); } - for (let i: number = 0; i < types.length; i++) { - const child: Expression = expression.Children[i]; + for (let i = 0; i < types.length; i++) { + const child: Expression = expression.children[i]; const type: ReturnType = types[i]; - if (type !== ReturnType.Object && child.ReturnType !== ReturnType.Object && child.ReturnType !== type) { - throw new Error(`${child} in ${expression} is not a ${type}.`); + if (type !== ReturnType.Object && child.returnType !== ReturnType.Object && child.returnType !== type) { + throw new Error(`${ child } in ${ expression } is not a ${ type }.`); } } - for (let i: number = 0; i < optional.length; i++) { + for (let i = 0; i < optional.length; i++) { const ic: number = i + types.length; - if (ic >= expression.Children.length) { + if (ic >= expression.children.length) { break; } - const child: Expression = expression.Children[ic]; + const child: Expression = expression.children[ic]; const type: ReturnType = optional[i]; - if (type !== ReturnType.Object && child.ReturnType !== ReturnType.Object && child.ReturnType !== type) { - throw new Error(`${child} in ${expression} is not a ${type}.`); + if (type !== ReturnType.Object && child.returnType !== ReturnType.Object && child.returnType !== type) { + throw new Error(`${ child } in ${ expression } is not a ${ type }.`); } } } @@ -131,82 +128,82 @@ export class BuiltInFunctions { * Validate at least 1 argument of any type. * @param expression Expression to validate. */ - public static ValidateAtLeastOne(expression: Expression): void { + public static validateAtLeastOne(expression: Expression): void { - BuiltInFunctions.ValidateArityAndAnyType(expression, 1, Number.MAX_SAFE_INTEGER); + BuiltInFunctions.validateArityAndAnyType(expression, 1, Number.MAX_SAFE_INTEGER); } /** * Validate 1 or more numeric arguments. * @param expression Expression to validate. */ - public static ValidateNumber(expression: Expression): void { + public static validateNumber(expression: Expression): void { - BuiltInFunctions.ValidateArityAndAnyType(expression, 1, Number.MAX_SAFE_INTEGER, ReturnType.Number); + BuiltInFunctions.validateArityAndAnyType(expression, 1, Number.MAX_SAFE_INTEGER, ReturnType.Number); } /** * Validate 1 or more string arguments. * @param expression Expression to validate. */ - public static ValidateString(expression: Expression): void { - BuiltInFunctions.ValidateArityAndAnyType(expression, 1, Number.MAX_SAFE_INTEGER, ReturnType.String); + public static validateString(expression: Expression): void { + BuiltInFunctions.validateArityAndAnyType(expression, 1, Number.MAX_SAFE_INTEGER, ReturnType.String); } /** * Validate there are two children. * @param expression Expression to validate. */ - public static ValidateBinary(expression: Expression): void { - BuiltInFunctions.ValidateArityAndAnyType(expression, 2, 2); + public static validateBinary(expression: Expression): void { + BuiltInFunctions.validateArityAndAnyType(expression, 2, 2); } /** * Validate 2 numeric arguments. * @param expression Expression to validate. */ - public static ValidateBinaryNumber(expression: Expression): void { - BuiltInFunctions.ValidateArityAndAnyType(expression, 2, 2, ReturnType.Number); + public static validateBinaryNumber(expression: Expression): void { + BuiltInFunctions.validateArityAndAnyType(expression, 2, 2, ReturnType.Number); } /** * Validate 2 or more than 2 numeric arguments. * @param expression Expression to validate. */ - public static ValidateTwoOrMoreThanTwoNumbers(expression: Expression): void { - BuiltInFunctions.ValidateArityAndAnyType(expression, 2, Number.MAX_VALUE, ReturnType.Number); + public static validateTwoOrMoreThanTwoNumbers(expression: Expression): void { + BuiltInFunctions.validateArityAndAnyType(expression, 2, Number.MAX_VALUE, ReturnType.Number); } /** * Validate there are 2 numeric or string arguments. * @param expression Expression to validate. */ - public static ValidateBinaryNumberOrString(expression: Expression): void { - BuiltInFunctions.ValidateArityAndAnyType(expression, 2, 2, ReturnType.Number, ReturnType.String); + public static validateBinaryNumberOrString(expression: Expression): void { + BuiltInFunctions.validateArityAndAnyType(expression, 2, 2, ReturnType.Number, ReturnType.String); } /** * Validate there is a single argument. * @param expression Expression to validate. */ - public static ValidateUnary(expression: Expression): void { - BuiltInFunctions.ValidateArityAndAnyType(expression, 1, 1); + public static validateUnary(expression: Expression): void { + BuiltInFunctions.validateArityAndAnyType(expression, 1, 1); } /** * Validate there is a single string argument. * @param expression Expression to validate. */ - public static ValidateUnaryString(expression: Expression): void { - BuiltInFunctions.ValidateArityAndAnyType(expression, 1, 1, ReturnType.String); + public static validateUnaryString(expression: Expression): void { + BuiltInFunctions.validateArityAndAnyType(expression, 1, 1, ReturnType.String); } /** * Validate there is a single boolean argument. * @param expression Expression to validate. */ - public static ValidateUnaryBoolean(expression: Expression): void { - BuiltInFunctions.ValidateOrder(expression, undefined, ReturnType.Boolean); + public static validateUnaryBoolean(expression: Expression): void { + BuiltInFunctions.validateOrder(expression, undefined, ReturnType.Boolean); } /** @@ -215,10 +212,10 @@ export class BuiltInFunctions { * @param expression Expression that led to value. * @returns Error or undefined if invalid. */ - public static VerifyNumber(value: any, expression: Expression, _: number): string { + public static verifyNumber(value: any, expression: Expression, _: number): string { let error: string; if (typeof value !== 'number' || Number.isNaN(value)) { - error = `${expression} is not a number.`; + error = `${ expression } is not a number.`; } return error; @@ -230,14 +227,14 @@ export class BuiltInFunctions { * @param expression Expression that led to value. * @returns Error or undefined if invalid. */ - public static VerifyNumericList(value: any, expression: Expression, _: number): string { + public static verifyNumericList(value: any, expression: Expression, _: number): string { let error: string; if (!(value instanceof Array)) { - error = `${expression} is not a list.`; + error = `${ expression } is not a list.`; } else { for (const elt of value) { if (typeof elt !== 'number' || Number.isNaN(elt)) { - error = `${elt} is not a number in ${expression}.`; + error = `${ elt } is not a number in ${ expression }.`; break; } } @@ -252,10 +249,10 @@ export class BuiltInFunctions { * @param expression Expression that led to value. * @returns Error or undefined if invalid. */ - public static VerifyContainer(value: any, expression: Expression, _: number): string { + public static verifyContainer(value: any, expression: Expression, _: number): string { let error: string; if (!(typeof value === 'string') && !(value instanceof Array) && !(value instanceof Map)) { - error = `${expression} must be a string or list or map.`; + error = `${ expression } must be a string or list or map.`; } return error; @@ -267,10 +264,10 @@ export class BuiltInFunctions { * @param expression Expression that led to value. * @returns Error or undefined if invalid. */ - public static VerifyInteger(value: any, expression: Expression, _: number): string { + public static verifyInteger(value: any, expression: Expression, _: number): string { let error: string; if (!Number.isInteger(value)) { - error = `${expression} is not a integer.`; + error = `${ expression } is not a integer.`; } return error; @@ -282,10 +279,10 @@ export class BuiltInFunctions { * @param expression Expression that led to value. * @returns Error or undefined if invalid. */ - public static VerifyList(value: any, expression: Expression): string { + public static verifyList(value: any, expression: Expression): string { let error: string; if (!(value instanceof Array)) { - error = `${expression} is not a list or array.`; + error = `${ expression } is not a list or array.`; } return error; @@ -297,10 +294,19 @@ export class BuiltInFunctions { * @param expression Expression that led to value. * @returns Error or undefined if invalid. */ - public static VerifyString(value: any, expression: Expression, _: number): string { + public static verifyString(value: any, expression: Expression, _: number): string { let error: string; if (typeof value !== 'string') { - error = `${expression} is not a string.`; + error = `${ expression } is not a string.`; + } + + return error; + } + + public static verifyStringOrNull(value: any, expression: Expression, _: number): string { + let error: string; + if (typeof value !== 'string' && value !== undefined) { + error = `${ expression } is neither a string nor a null object.`; } return error; @@ -312,10 +318,10 @@ export class BuiltInFunctions { * @param expression Expression that led to value. * @returns Error or undefined if invalid. */ - public static VerifyNumberOrString(value: any, expression: Expression, _: number): string { + public static verifyNumberOrString(value: any, expression: Expression, _: number): string { let error: string; if (value === undefined || !(typeof value === 'number' && !Number.isNaN(value)) && typeof value !== 'string') { - error = `${expression} is not string or number.`; + error = `${ expression } is not string or number.`; } return error; @@ -327,10 +333,10 @@ export class BuiltInFunctions { * @param expression Expression that led to value. * @returns Error or undefined if invalid. */ - public static VerifyBoolean(value: any, expression: Expression, _: number): string { + public static verifyBoolean(value: any, expression: Expression, _: number): string { let error: string; if (typeof value !== 'boolean') { - error = `${expression} is not a boolean.`; + error = `${ expression } is not a boolean.`; } return error; @@ -341,15 +347,15 @@ export class BuiltInFunctions { * @param value timestamp string to check. * @returns Error or undefined if invalid. */ - public static VerifyTimestamp(value: any): string { + public static verifyTimestamp(value: any): string { let error: string; try { const parsedData: Date = new Date(value); if (Number.isNaN(parsedData.getTime())) { - error = `${value} is not a valid datetime string.`; + error = `${ value } is not a valid datetime string.`; } } catch (e) { - error = `${value} is not a valid datetime string.`; + error = `${ value } is not a valid datetime string.`; } return error; @@ -360,17 +366,17 @@ export class BuiltInFunctions { * @param value timestamp string to check. * @returns Error or undefined if invalid. */ - public static VerifyISOTimestamp(value: any): string { + public static verifyISOTimestamp(value: any): string { let error: string; try { const parsedData: Date = new Date(value); if (Number.isNaN(parsedData.getTime())) { - error = `${value} is not a valid datetime string.`; + error = `${ value } is not a valid datetime string.`; } else if (parsedData.toISOString() !== value) { - error = `${value} is not a ISO format datetime string.`; + error = `${ value } is not a ISO format datetime string.`; } } catch (e) { - error = `${value} is not a valid datetime string.`; + error = `${ value } is not a valid datetime string.`; } return error; @@ -383,13 +389,12 @@ export class BuiltInFunctions { * @param verify Optional function to verify each child's result. * @returns List of child values or error message. */ - public static EvaluateChildren(expression: Expression, state: any, verify?: VerifyExpression) - : { args: ReadonlyArray; error: string } { + public static evaluateChildren(expression: Expression, state: any, verify?: VerifyExpression): { args: any []; error: string } { const args: any[] = []; let value: any; let error: string; - let pos: number = 0; - for (const child of expression.Children) { + let pos = 0; + for (const child of expression.children) { ({ value, error } = child.tryEvaluate(state)); if (error !== undefined) { break; @@ -413,13 +418,12 @@ export class BuiltInFunctions { * @param verify Function to check each arg for validity. * @returns Delegate for evaluating an expression. */ - public static Apply(func: (arg0: ReadonlyArray) => any, verify?: VerifyExpression) - : EvaluateExpressionDelegate { + public static apply(func: (arg0: any []) => any, verify?: VerifyExpression): EvaluateExpressionDelegate { return (expression: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({ args, error } = BuiltInFunctions.EvaluateChildren(expression, state, verify)); + let args: any []; + ({ args, error } = BuiltInFunctions.evaluateChildren(expression, state, verify)); if (error === undefined) { try { value = func(args); @@ -438,13 +442,12 @@ export class BuiltInFunctions { * @param verify Function to check each arg for validity. * @returns Delegate for evaluating an expression. */ - public static ApplyWithError(func: (arg0: ReadonlyArray) => any, verify?: VerifyExpression) - : EvaluateExpressionDelegate { + public static applyWithError(func: (arg0: any []) => any, verify?: VerifyExpression): EvaluateExpressionDelegate { return (expression: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({ args, error } = BuiltInFunctions.EvaluateChildren(expression, state, verify)); + let args: any []; + ({ args, error } = BuiltInFunctions.evaluateChildren(expression, state, verify)); if (error === undefined) { try { ({ value, error } = func(args)); @@ -463,14 +466,13 @@ export class BuiltInFunctions { * @param verify Function to check each arg for validity. * @returns Delegate for evaluating an expression. */ - public static ApplySequence(func: (arg0: ReadonlyArray) => any, verify?: VerifyExpression) - : EvaluateExpressionDelegate { - return BuiltInFunctions.Apply( - (args: ReadonlyArray): any => { + public static applySequence(func: (arg0: any []) => any, verify?: VerifyExpression): EvaluateExpressionDelegate { + return BuiltInFunctions.apply( + (args: any []): any => { const binaryArgs: any[] = [undefined, undefined]; let soFar: any = args[0]; // tslint:disable-next-line: prefer-for-of - for (let i: number = 1; i < args.length; i++) { + for (let i = 1; i < args.length; i++) { binaryArgs[0] = soFar; binaryArgs[1] = args[i]; soFar = func(binaryArgs); @@ -487,9 +489,9 @@ export class BuiltInFunctions { * @param type Expression type. * @param func Function to apply. */ - public static Numeric(type: string, func: (arg0: ReadonlyArray) => any): ExpressionEvaluator { - return new ExpressionEvaluator(type, BuiltInFunctions.ApplySequence(func, BuiltInFunctions.VerifyNumber), - ReturnType.Number, BuiltInFunctions.ValidateNumber); + public static numeric(type: string, func: (arg0: any []) => any): ExpressionEvaluator { + return new ExpressionEvaluator(type, BuiltInFunctions.applySequence(func, BuiltInFunctions.verifyNumber), + ReturnType.Number, BuiltInFunctions.validateNumber); } /** @@ -497,9 +499,9 @@ export class BuiltInFunctions { * @param type Expression type. * @param func Function to apply. */ - public static MultivariateNumeric(type: string, func: (arg0: ReadonlyArray) => any, verify?: VerifyExpression): ExpressionEvaluator { - return new ExpressionEvaluator(type, BuiltInFunctions.ApplySequence(func, verify !== undefined ? verify : BuiltInFunctions.VerifyNumber), - ReturnType.Number, BuiltInFunctions.ValidateTwoOrMoreThanTwoNumbers); + public static multivariateNumeric(type: string, func: (arg0: any []) => any, verify?: VerifyExpression): ExpressionEvaluator { + return new ExpressionEvaluator(type, BuiltInFunctions.applySequence(func, verify !== undefined ? verify : BuiltInFunctions.verifyNumber), + ReturnType.Number, BuiltInFunctions.validateTwoOrMoreThanTwoNumbers); } /** * Comparison operators. @@ -510,20 +512,19 @@ export class BuiltInFunctions { * @returns Delegate for evaluating an expression. * @description A comparison operator returns false if the comparison is false, or there is an error. This prevents errors from short-circuiting boolean expressions. */ - public static Comparison(type: string, func: (arg0: ReadonlyArray) => boolean, validator: ValidateExpressionDelegate, verify?: VerifyExpression) - : ExpressionEvaluator { + public static comparison(type: string, func: (arg0: any []) => boolean, validator: ValidateExpressionDelegate, verify?: VerifyExpression): ExpressionEvaluator { return new ExpressionEvaluator( type, (expression: Expression, state: any): { value: any; error: string } => { - let result: boolean = false; + let result = false; let error: string; - let args: ReadonlyArray; - ({ args, error } = BuiltInFunctions.EvaluateChildren(expression, state, verify)); + let args: any []; + ({ args, error } = BuiltInFunctions.evaluateChildren(expression, state, verify)); if (error === undefined) { const isNumber: boolean = args !== undefined && args.length > 0 && typeof args[0] === 'number'; for (const arg of args) { if (arg !== undefined && (typeof arg === 'number') !== isNumber) { - error = `Arguments must either all be numbers or strings in ${expression}`; + error = `Arguments must either all be numbers or strings in ${ expression }`; break; } } @@ -551,9 +552,9 @@ export class BuiltInFunctions { * @param type Expression type. * @param func Function to apply. */ - public static StringTransform(type: string, func: (arg0: ReadonlyArray) => any): ExpressionEvaluator { - return new ExpressionEvaluator(type, BuiltInFunctions.Apply(func, BuiltInFunctions.VerifyString), - ReturnType.String, BuiltInFunctions.ValidateUnaryString); + public static stringTransform(type: string, func: (arg0: any []) => any): ExpressionEvaluator { + return new ExpressionEvaluator(type, BuiltInFunctions.apply(func, BuiltInFunctions.verifyStringOrNull), + ReturnType.String, BuiltInFunctions.validateUnaryString); } /** @@ -562,27 +563,27 @@ export class BuiltInFunctions { * @param func Transformer. * @returns Delegate for evaluating expression. */ - public static TimeTransform(type: string, func: (timestamp: moment.Moment, numOfTransformation: any) => any): ExpressionEvaluator { + public static timeTransform(type: string, func: (timestamp: moment.Moment, numOfTransformation: any) => any): ExpressionEvaluator { return new ExpressionEvaluator( type, (expression: Expression, state: any): { value: any; error: string } => { let result: any; let error: string; let value: any; - let args: ReadonlyArray; - ({ args, error } = BuiltInFunctions.EvaluateChildren(expression, state)); + let args: any []; + ({ args, error } = BuiltInFunctions.evaluateChildren(expression, state)); if (error === undefined) { if (typeof args[0] === 'string' && typeof args[1] === 'number') { - ({ value, error } = BuiltInFunctions.ParseTimestamp(args[0])); + ({ value, error } = BuiltInFunctions.parseTimestamp(args[0])); if (error === undefined) { if (args.length === 3 && typeof args[2] === 'string') { - result = func(value, args[1]).format(BuiltInFunctions.TimestampFormatter(args[2])); + result = func(value, args[1]).format(BuiltInFunctions.timestampFormatter(args[2])); } else { result = func(value, args[1]).toISOString(); } } } else { - error = `${expression} could not be evaluated`; + error = `${ expression } could not be evaluated`; } } @@ -590,12 +591,12 @@ export class BuiltInFunctions { }, ReturnType.String, // tslint:disable-next-line: no-void-expression - (expr: Expression): void => BuiltInFunctions.ValidateArityAndAnyType(expr, 2, 3, ReturnType.String, ReturnType.Number)); + (expr: Expression): void => BuiltInFunctions.validateArityAndAnyType(expr, 2, 3, ReturnType.String, ReturnType.Number)); } - public static ParseTimestamp(timeStamp: string, transform?: (arg0: moment.Moment) => any): { value: any; error: string } { + public static parseTimestamp(timeStamp: string, transform?: (arg0: moment.Moment) => any): { value: any; error: string } { let value: any; - const error: string = this.VerifyISOTimestamp(timeStamp); + const error: string = this.verifyISOTimestamp(timeStamp); if (error === undefined) { const parsed: moment.Moment = moment(timeStamp).utc(); value = transform !== undefined ? transform(parsed) : parsed; @@ -608,20 +609,20 @@ export class BuiltInFunctions { * Lookup a built-in function information by type. * @param type Type to look up. */ - public static Lookup(type: string): ExpressionEvaluator { + public static lookup(type: string): ExpressionEvaluator { const evaluator: ExpressionEvaluator = BuiltInFunctions._functions.get(type); if (evaluator === undefined) { - throw new Error(`${type} does not have an evaluator, it's not a built-in function or a customized function`); + throw new Error(`${ type } does not have an evaluator, it's not a built-in function or a customized function`); } return evaluator; } - public static TimestampFormatter(formatter: string): string { + public static timestampFormatter(formatter: string): string { return formatter.replace(/dd/g, 'DD').replace(/yyyy/g, 'YYYY').replace(/d/g, 'D').replace(/y/g, 'Y'); } - public static TimeUnitTransformer(duration: number, cSharpStr: string): { duration: number; tsStr: string } { + public static timeUnitTransformer(duration: number, cSharpStr: string): { duration: number; tsStr: string } { switch (cSharpStr) { case 'Day': return { duration, tsStr: 'days' }; case 'Week': return { duration: duration * 7, tsStr: 'days' }; @@ -634,8 +635,8 @@ export class BuiltInFunctions { } } - private static AddOrdinal(num: number): string { - let hasResult: boolean = false; + private static addOrdinal(num: number): string { + let hasResult = false; let ordinalResult: string = num.toString(); if (num > 0) { switch (num % 100) { @@ -670,69 +671,78 @@ export class BuiltInFunctions { return ordinalResult; } - private static newGuid(): string{ - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c: any) => { + private static newGuid(): string { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c: any): string => { const r: number = Math.random() * 16 | 0; + // tslint:disable-next-line: no-bitwise const v: number = c === 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); } - private static ValidateAccessor(expression: Expression): void { - const children: Expression[] = expression.Children; + private static parseStringOrNull(input: string | undefined): string { + if (typeof input === 'string') { + return input; + } else { + return ''; + } + } + + private static validateAccessor(expression: Expression): void { + const children: Expression[] = expression.children; if (children.length === 0 || !(children[0] instanceof Constant) - || (children[0]).ReturnType !== ReturnType.String) { - throw new Error(`${expression} must have a string as first argument.`); + || (children[0] as Constant).returnType !== ReturnType.String) { + throw new Error(`${ expression } must have a string as first argument.`); } if (children.length > 2) { - throw new Error(`${expression} has more than 2 children.`); + throw new Error(`${ expression } has more than 2 children.`); } - if (children.length === 2 && children[1].ReturnType !== ReturnType.Object) { - throw new Error(`${expression} must have an object as its second argument.`); + if (children.length === 2 && children[1].returnType !== ReturnType.Object) { + throw new Error(`${ expression } must have an object as its second argument.`); } } - private static Accessor(expression: Expression, state: any): { value: any; error: string } { + private static accessor(expression: Expression, state: any): { value: any; error: string } { let value: any; let error: string; let instance: any; - const children: Expression[] = expression.Children; + const children: Expression[] = expression.children; if (children.length === 2) { ({ value: instance, error } = children[1].tryEvaluate(state)); } else { instance = state; } - if (error === undefined && children[0] instanceof Constant && (children[0]).ReturnType === ReturnType.String) { - ({ value, error } = Extensions.AccessProperty(instance, (children[0]).Value.toString())); + if (error === undefined && children[0] instanceof Constant && (children[0] as Constant).returnType === ReturnType.String) { + ({ value, error } = Extensions.accessProperty(instance, (children[0] as Constant).value.toString())); } return { value, error }; } - private static GetProperty(expression: Expression, state: any): { value: any; error: string } { + private static getProperty(expression: Expression, state: any): { value: any; error: string } { let value: any; let error: string; let instance: any; let property: any; - const children: Expression[] = expression.Children; + const children: Expression[] = expression.children; ({ value: instance, error } = children[0].tryEvaluate(state)); if (error === undefined) { ({ value: property, error } = children[1].tryEvaluate(state)); if (error === undefined) { - ({ value, error } = Extensions.AccessProperty(instance, property.toString())); + ({ value, error } = Extensions.accessProperty(instance, property.toString())); } } return { value, error }; } - private static Coalesce(objetcList: object[]): any { + private static coalesce(objetcList: object[]): any { for (const obj of objetcList) { if (obj !== undefined) { return obj; @@ -742,38 +752,7 @@ export class BuiltInFunctions { return undefined; } - private static XPath(xmlStr: string, xpath: string): {value: any; error: string} { - let result: any; - let error: string; - let xmlDoc: any; - const parser: any = new xmldom.DOMParser(); - let xPathResult: any; - try { - xmlDoc = parser.parseFromString(xmlStr); - } catch (e) { - error = `${xmlStr} is not valid xml`; - } - - if (error === undefined) { - try { - xPathResult = xpathEval.select(xpath, xmlDoc); - } catch (e) { - error = `${xpath} is not an valid expression`; - } - } - - if (error === undefined) { - if (typeof xPathResult === 'string' || typeof xPathResult === 'number' || typeof xPathResult === 'boolean') { - result = xPathResult; - } else if (xPathResult.length > 0) { - result = xPathResult.toString().split(','); - } - } - - return {value: result, error}; - } - - private static JPath(jsonEntity: object | string, path: string): {value: any; error: string} { + private static jPath(jsonEntity: object | string, path: string): {value: any; error: string} { let result: any; let error: string; let evaled: any; @@ -782,7 +761,7 @@ export class BuiltInFunctions { try { json = JSON.parse(jsonEntity); } catch (e) { - error = `${jsonEntity} is not a valid json string`; + error = `${ jsonEntity } is not a valid json string`; } } else if (typeof jsonEntity === 'object') { json = jsonEntity; @@ -794,7 +773,7 @@ export class BuiltInFunctions { try { evaled = jsPath.apply(path, json); } catch (e) { - error = `${path} is not a valid path + ${e}`; + error = `${ path } is not a valid path + ${ e }`; } } @@ -803,11 +782,11 @@ export class BuiltInFunctions { return {value: result, error}; } - private static ExtractElement(expression: Expression, state: any): { value: any; error: string } { + private static extractElement(expression: Expression, state: any): { value: any; error: string } { let value: any; let error: string; - const instance: Expression = expression.Children[0]; - const index: Expression = expression.Children[1]; + const instance: Expression = expression.children[0]; + const index: Expression = expression.children[1]; let inst: any; ({ value: inst, error } = instance.tryEvaluate(state)); if (error === undefined) { @@ -815,11 +794,11 @@ export class BuiltInFunctions { ({ value: idxValue, error } = index.tryEvaluate(state)); if (error === undefined) { if (Number.isInteger(idxValue)) { - ({ value, error } = Extensions.AccessIndex(inst, Number(idxValue))); + ({ value, error } = Extensions.accessIndex(inst, Number(idxValue))); } else if (typeof idxValue === 'string') { - ({ value, error } = Extensions.AccessProperty(inst, idxValue.toString())); + ({ value, error } = Extensions.accessProperty(inst, idxValue.toString())); } else { - error = `Could not coerce ${index} to an int or string.`; + error = `Could not coerce ${ index } to an int or string.`; } return { value, error }; @@ -827,8 +806,8 @@ export class BuiltInFunctions { } } - private static CanBeModified(value: any, property: string, expected?: number): boolean { - let modifiable: boolean = false; + private static canBeModified(value: any, property: string, expected?: number): boolean { + let modifiable = false; if (expected !== undefined) { // Modifiable list modifiable = value instanceof Array; @@ -845,18 +824,18 @@ export class BuiltInFunctions { return modifiable; } - private static TrySetPathToValue(path: Expression, value: any, state: any, expected?: number): { instance: any; error: string } { + private static trySetPathToValue(path: Expression, value: any, state: any, expected?: number): { instance: any; error: string } { let result: any; let error: string; let instance: any; let index: any; - const children: Expression[] = path.Children; - if (path.Type === ExpressionType.Accessor || path.Type === ExpressionType.Element) { - ({ value: index, error } = children[path.Type === ExpressionType.Accessor ? 0 : 1].tryEvaluate(state)); + const children: Expression[] = path.children; + if (path.type === ExpressionType.Accessor || path.type === ExpressionType.Element) { + ({ value: index, error } = children[path.type === ExpressionType.Accessor ? 0 : 1].tryEvaluate(state)); if (error === undefined) { const iindex: number = index; if (children.length === 2) { - ({ instance, error } = this.TrySetPathToValue(children[path.Type === ExpressionType.Accessor ? 1 : 0], undefined, state, iindex)); + ({ instance, error } = this.trySetPathToValue(children[path.type === ExpressionType.Accessor ? 1 : 0], undefined, state, iindex)); } else { instance = state; } @@ -865,15 +844,15 @@ export class BuiltInFunctions { if (typeof index === 'string') { const propName: string = index; if (value !== undefined) { - result = Extensions.SetProperty(instance, propName, value); + result = Extensions.setProperty(instance, propName, value); } else { - ({ value: result, error } = Extensions.AccessProperty(instance, propName)); - if (error !== undefined || result === undefined || !this.CanBeModified(result, propName, expected)) { + ({ value: result, error } = Extensions.accessProperty(instance, propName)); + if (error !== undefined || result === undefined || !this.canBeModified(result, propName, expected)) { // Create new value for parents to use if (expected !== undefined) { - result = Extensions.SetProperty(instance, propName, [expected + 1]); + result = Extensions.setProperty(instance, propName, [expected + 1]); } else { - result = Extensions.SetProperty(instance, propName, new Map()); + result = Extensions.setProperty(instance, propName, new Map()); } } } @@ -892,29 +871,29 @@ export class BuiltInFunctions { result = value !== undefined ? value : expected !== undefined ? [expected + 1] : new Map(); list[iindex] = result; } else { - error = `${children[0]} is not a list.`; + error = `${ children[0] } is not a list.`; } } else { - error = `${children[0]} is not a valid path.`; + error = `${ children[0] } is not a valid path.`; } } } } else { - error = `${path} is not a path that can be set to a value.`; + error = `${ path } is not a path that can be set to a value.`; } return { instance: result, error }; } - private static SetPathToValue(expression: Expression, state: any): { value: any; error: string } { + private static setPathToValue(expression: Expression, state: any): { value: any; error: string } { let value: any; let error: string; - const path: Expression = expression.Children[0]; - const valueExpr: Expression = expression.Children[1]; + const path: Expression = expression.children[0]; + const valueExpr: Expression = expression.children[1]; ({ value, error } = valueExpr.tryEvaluate(state)); if (error === undefined) { let instance: any; - ({ instance, error } = BuiltInFunctions.TrySetPathToValue(path, value, state)); + ({ instance, error } = BuiltInFunctions.trySetPathToValue(path, value, state)); if (error !== undefined) { value = undefined; } @@ -923,18 +902,18 @@ export class BuiltInFunctions { return {value, error}; } - private static Foreach(expression: Expression, state: any): { value: any; error: string } { + private static foreach(expression: Expression, state: any): { value: any; error: string } { let result: any[]; let error: string; let collection: any; - ({ value: collection, error } = expression.Children[0].tryEvaluate(state)); + ({ value: collection, error } = expression.children[0].tryEvaluate(state)); if (error === undefined) { // 2nd parameter has been rewrite to $local.item - const iteratorName: string = (((expression.Children[1].Children[0])).Value); + const iteratorName: string = (expression.children[1].children[0] as Constant).value as string; if (!(collection instanceof Array)) { - error = `${expression.Children[0]} is not a collection to run foreach`; + error = `${ expression.children[0] } is not a collection to run foreach`; } else { result = []; for (const item of collection) { @@ -947,7 +926,7 @@ export class BuiltInFunctions { ['$local', local] ]); - const { value: r, error: e } = expression.Children[2].tryEvaluate(newScope); + const { value: r, error: e } = expression.children[2].tryEvaluate(newScope); if (e !== undefined) { return { value: undefined, error: e }; } @@ -959,17 +938,17 @@ export class BuiltInFunctions { return { value: result, error }; } - private static Where(expression: Expression, state: any): { value: any; error: string } { + private static where(expression: Expression, state: any): { value: any; error: string } { let result: any[]; let error: string; let collection: any; - ({ value: collection, error } = expression.Children[0].tryEvaluate(state)); + ({ value: collection, error } = expression.children[0].tryEvaluate(state)); if (error === undefined) { - const iteratorName: string = (((expression.Children[1].Children[0])).Value); + const iteratorName: string = (expression.children[1].children[0] as Constant).value as string; if (!(collection instanceof Array)) { - error = `${expression.Children[0]} is not a collection to run where`; + error = `${ expression.children[0] } is not a collection to run where`; } else { result = []; for (const item of collection) { @@ -982,7 +961,7 @@ export class BuiltInFunctions { ['$local', local] ]); - const { value: r, error: e } = expression.Children[2].tryEvaluate(newScope); + const { value: r, error: e } = expression.children[2].tryEvaluate(newScope); if (e !== undefined) { return { value: undefined, error: e }; } @@ -997,59 +976,59 @@ export class BuiltInFunctions { return { value: result, error }; } - private static ValidateWhere(expression: Expression): void { - BuiltInFunctions.ValidateForeach(expression); + private static validateWhere(expression: Expression): void { + BuiltInFunctions.validateForeach(expression); } - private static ValidateForeach(expression: Expression): void { - if (expression.Children.length !== 3) { - throw new Error(`foreach expect 3 parameters, found ${expression.Children.length}`); + private static validateForeach(expression: Expression): void { + if (expression.children.length !== 3) { + throw new Error(`foreach expect 3 parameters, found ${ expression.children.length }`); } - const second: Expression = expression.Children[1]; - if (!(second.Type === ExpressionType.Accessor && second.Children.length === 1)) { - throw new Error(`Second parameter of foreach is not an identifier : ${second}`); + const second: Expression = expression.children[1]; + if (!(second.type === ExpressionType.Accessor && second.children.length === 1)) { + throw new Error(`Second parameter of foreach is not an identifier : ${ second }`); } const iteratorName: string = second.toString(); // rewrite the 2nd, 3rd paramater - expression.Children[1] = BuiltInFunctions.RewriteAccessor(expression.Children[1], iteratorName); - expression.Children[2] = BuiltInFunctions.RewriteAccessor(expression.Children[2], iteratorName); + expression.children[1] = BuiltInFunctions.rewriteAccessor(expression.children[1], iteratorName); + expression.children[2] = BuiltInFunctions.rewriteAccessor(expression.children[2], iteratorName); } - private static ValidateIsMatch(expression: Expression): void { - BuiltInFunctions.ValidateArityAndAnyType(expression, 2, 2, ReturnType.String); + private static validateIsMatch(expression: Expression): void { + BuiltInFunctions.validateArityAndAnyType(expression, 2, 2, ReturnType.String); - const second: Expression = expression.Children[1]; - if (second.ReturnType === ReturnType.String && second.Type === ExpressionType.Constant) { + const second: Expression = expression.children[1]; + if (second.returnType === ReturnType.String && second.type === ExpressionType.Constant) { // tslint:disable-next-line: restrict-plus-operands - CommonRegex.CreateRegex((second).Value + ''); + CommonRegex.CreateRegex((second as Constant).value + ''); } } - private static RewriteAccessor(expression: Expression, localVarName: string): Expression { - if (expression.Type === ExpressionType.Accessor) { - if (expression.Children.length === 2) { - expression.Children[1] = BuiltInFunctions.RewriteAccessor(expression.Children[1], localVarName); + private static rewriteAccessor(expression: Expression, localVarName: string): Expression { + if (expression.type === ExpressionType.Accessor) { + if (expression.children.length === 2) { + expression.children[1] = BuiltInFunctions.rewriteAccessor(expression.children[1], localVarName); } else { const str: string = expression.toString(); - let prefix: string = '$global'; + let prefix = '$global'; if (str === localVarName || str.startsWith(localVarName.concat('.'))) { prefix = '$local'; } - expression.Children = [ - expression.Children[0], - Expression.MakeExpression(ExpressionType.Accessor, undefined, new Constant(prefix)) + expression.children = [ + expression.children[0], + Expression.makeExpression(ExpressionType.Accessor, undefined, new Constant(prefix)) ]; } return expression; } else { // rewite children if have any - for (let idx: number = 0; idx < expression.Children.length; idx++) { - expression.Children[idx] = BuiltInFunctions.RewriteAccessor(expression.Children[idx], localVarName); + for (let idx = 0; idx < expression.children.length; idx++) { + expression.children[idx] = BuiltInFunctions.rewriteAccessor(expression.children[idx], localVarName); } return expression; @@ -1057,7 +1036,7 @@ export class BuiltInFunctions { } - private static IsEmpty(instance: any): boolean { + private static isEmpty(instance: any): boolean { let result: boolean; if (instance === undefined) { result = true; @@ -1079,8 +1058,8 @@ export class BuiltInFunctions { * @param instance Computed value. * @returns True if boolean true or non-null. */ - private static IsLogicTrue(instance: any): boolean { - let result: boolean = true; + private static isLogicTrue(instance: any): boolean { + let result = true; if (typeof instance === 'boolean') { result = instance; @@ -1091,13 +1070,13 @@ export class BuiltInFunctions { return result; } - private static And(expression: Expression, state: any): { value: any; error: string } { - let result: boolean = false; + private static _and(expression: Expression, state: any): { value: any; error: string } { + let result = false; let error: string; - for (const child of expression.Children) { + for (const child of expression.children) { ({ value: result, error } = child.tryEvaluate(state)); if (error === undefined) { - if (this.IsLogicTrue(result)) { + if (this.isLogicTrue(result)) { result = true; } else { result = false; @@ -1113,13 +1092,13 @@ export class BuiltInFunctions { return { value: result, error }; } - private static Or(expression: Expression, state: any): { value: any; error: string } { - let result: boolean = false; + private static _or(expression: Expression, state: any): { value: any; error: string } { + let result = false; let error: string; - for (const child of expression.Children) { + for (const child of expression.children) { ({ value: result, error } = child.tryEvaluate(state)); if (error === undefined) { - if (this.IsLogicTrue(result)) { + if (this.isLogicTrue(result)) { result = true; break; } @@ -1131,12 +1110,12 @@ export class BuiltInFunctions { return { value: result, error }; } - private static Not(expression: Expression, state: any): { value: any; error: string } { - let result: boolean = false; + private static _not(expression: Expression, state: any): { value: any; error: string } { + let result = false; let error: string; - ({ value: result, error } = expression.Children[0].tryEvaluate(state)); + ({ value: result, error } = expression.children[0].tryEvaluate(state)); if (error === undefined) { - result = !this.IsLogicTrue(result); + result = !this.isLogicTrue(result); } else { error = undefined; result = true; @@ -1145,146 +1124,148 @@ export class BuiltInFunctions { return { value: result, error }; } - private static If(expression: Expression, state: any): { value: any; error: string } { + private static _if(expression: Expression, state: any): { value: any; error: string } { let result: any; let error: string; - ({ value: result, error } = expression.Children[0].tryEvaluate(state)); - if (error === undefined && this.IsLogicTrue(result)) { - ({ value: result, error } = expression.Children[1].tryEvaluate(state)); + ({ value: result, error } = expression.children[0].tryEvaluate(state)); + if (error === undefined && this.isLogicTrue(result)) { + ({ value: result, error } = expression.children[1].tryEvaluate(state)); } else { - ({ value: result, error } = expression.Children[2].tryEvaluate(state)); + ({ value: result, error } = expression.children[2].tryEvaluate(state)); } return { value: result, error }; } - private static Substring(expression: Expression, state: any): { value: any; error: string } { + private static substring(expression: Expression, state: any): { value: any; error: string } { let result: any; let error: any; let str: string; - ({ value: str, error } = expression.Children[0].tryEvaluate(state)); + ({ value: str, error } = expression.children[0].tryEvaluate(state)); if (error === undefined) { if (typeof str === 'string') { let start: number; - const startExpr: Expression = expression.Children[1]; + const startExpr: Expression = expression.children[1]; ({ value: start, error } = startExpr.tryEvaluate(state)); if (error === undefined && !Number.isInteger(start)) { - error = `${startExpr} is not an integer.`; + error = `${ startExpr } is not an integer.`; } else if (start < 0 || start >= str.length) { - error = `${startExpr}=${start} which is out of range for ${str}`; + error = `${ startExpr }=${ start } which is out of range for ${ str }`; } if (error === undefined) { let length: number; - if (expression.Children.length === 2) { + if (expression.children.length === 2) { // Without length, compute to end length = str.length - start; } else { - const lengthExpr: Expression = expression.Children[2]; + const lengthExpr: Expression = expression.children[2]; ({ value: length, error } = lengthExpr.tryEvaluate(state)); if (error === undefined && !Number.isInteger(length)) { - error = `${lengthExpr} is not an integer`; + error = `${ lengthExpr } is not an integer`; } else if (length < 0 || Number(start) + Number(length) > str.length) { - error = `${lengthExpr}=${length} which is out of range for ${str}`; + error = `${ lengthExpr }=${ length } which is out of range for ${ str }`; } } if (error === undefined) { result = str.substr(start, length); } } + } else if (str === undefined) { + result = ''; } else { - error = `${expression.Children[0]} is not a string.`; + error = `${ expression.children[0] } is neither a string nor a null object.`; } } return { value: result, error }; } - private static Skip(expression: Expression, state: any): { value: any; error: string } { + private static skip(expression: Expression, state: any): { value: any; error: string } { let result: any; let error: any; let arr: any; - ({ value: arr, error } = expression.Children[0].tryEvaluate(state)); + ({ value: arr, error } = expression.children[0].tryEvaluate(state)); if (error === undefined) { if (arr instanceof Array) { let start: number; - const startExpr: Expression = expression.Children[1]; + const startExpr: Expression = expression.children[1]; ({ value: start, error } = startExpr.tryEvaluate(state)); if (error === undefined && !Number.isInteger(start)) { - error = `${startExpr} is not an integer.`; + error = `${ startExpr } is not an integer.`; } else if (start < 0 || start >= arr.length) { - error = `${startExpr}=${start} which is out of range for ${arr}`; + error = `${ startExpr }=${ start } which is out of range for ${ arr }`; } if (error === undefined) { - result = arr.slice(start); + result = arr.slice(start); } } else { - error = `${expression.Children[0]} is not array.`; + error = `${ expression.children[0] } is not array.`; } } return { value: result, error }; } - private static Take(expression: Expression, state: any): { value: any; error: string } { + private static take(expression: Expression, state: any): { value: any; error: string } { let result: any; let error: any; let arr: any; - ({ value: arr, error } = expression.Children[0].tryEvaluate(state)); + ({ value: arr, error } = expression.children[0].tryEvaluate(state)); if (error === undefined) { if (arr instanceof Array || typeof arr === 'string') { let start: number; - const startExpr: Expression = expression.Children[1]; + const startExpr: Expression = expression.children[1]; ({ value: start, error } = startExpr.tryEvaluate(state)); if (error === undefined && !Number.isInteger(start)) { - error = `${startExpr} is not an integer.`; + error = `${ startExpr } is not an integer.`; } else if (start < 0 || start >= arr.length) { - error = `${startExpr}=${start} which is out of range for ${arr}`; + error = `${ startExpr }=${ start } which is out of range for ${ arr }`; } if (error === undefined) { result = arr.slice(0, start); } } else { - error = `${expression.Children[0]} is not array or string.`; + error = `${ expression.children[0] } is not array or string.`; } } return { value: result, error }; } - private static SubArray(expression: Expression, state: any): { value: any; error: string } { + private static subArray(expression: Expression, state: any): { value: any; error: string } { let result: any; let error: any; let arr: any; - ({ value: arr, error } = expression.Children[0].tryEvaluate(state)); + ({ value: arr, error } = expression.children[0].tryEvaluate(state)); if (error === undefined) { if (arr instanceof Array) { let start: number; - const startExpr: Expression = expression.Children[1]; + const startExpr: Expression = expression.children[1]; ({ value: start, error } = startExpr.tryEvaluate(state)); if (error === undefined && !Number.isInteger(start)) { - error = `${startExpr} is not an integer.`; + error = `${ startExpr } is not an integer.`; } else if (start < 0 || start >= arr.length) { - error = `${startExpr}=${start} which is out of range for ${arr}`; + error = `${ startExpr }=${ start } which is out of range for ${ arr }`; } if (error === undefined) { let end: number; - if (expression.Children.length === 2) { + if (expression.children.length === 2) { end = arr.length; } else { - const endExpr: Expression = expression.Children[2]; + const endExpr: Expression = expression.children[2]; ({ value: end, error } = endExpr.tryEvaluate(state)); if (error === undefined && !Number.isInteger(end)) { - error = `${endExpr} is not an integer`; + error = `${ endExpr } is not an integer`; } else if (end < 0 || end > arr.length) { - error = `${endExpr}=${end} which is out of range for ${arr}`; + error = `${ endExpr }=${ end } which is out of range for ${ arr }`; } } if (error === undefined) { @@ -1292,24 +1273,23 @@ export class BuiltInFunctions { } } } else { - error = `${expression.Children[0]} is not array.`; + error = `${ expression.children[0] } is not array.`; } } return { value: result, error }; } - private static SortBy(isDescending: boolean) - : EvaluateExpressionDelegate { + private static sortBy(isDescending: boolean): EvaluateExpressionDelegate { return (expression: Expression, state: any): { value: any; error: string } => { let result: any; let error: string; let oriArr: any; - ({ value: oriArr, error } = expression.Children[0].tryEvaluate(state)); + ({ value: oriArr, error } = expression.children[0].tryEvaluate(state)); if (error === undefined) { if (oriArr instanceof Array) { const arr: any = oriArr.slice(0); - if (expression.Children.length === 1) { + if (expression.children.length === 1) { if (isDescending) { result = arr.sort().reverse(); } else { @@ -1317,7 +1297,7 @@ export class BuiltInFunctions { } } else { let propertyName: string; - ({value: propertyName, error} = expression.Children[1].tryEvaluate(state)); + ({value: propertyName, error} = expression.children[1].tryEvaluate(state)); if (error === undefined) { propertyName = propertyName === undefined ? '' : propertyName; @@ -1329,7 +1309,7 @@ export class BuiltInFunctions { } } } else { - error = `${expression.Children[0]} is not array`; + error = `${ expression.children[0] } is not array`; } } @@ -1338,35 +1318,23 @@ export class BuiltInFunctions { }; } - private static ToBinary(stringToConvert: string): string { - let result: string = ''; + private static toBinary(stringToConvert: string): string { + let result = ''; for (const element of stringToConvert) { const binaryElement: string = element.charCodeAt(0).toString(2); + // tslint:disable-next-line: prefer-array-literal result += new Array(9 - binaryElement.length).join('0').concat(binaryElement); } return result; } - private static ToXml(contentToConvert: any): { value: any; error: string } { - let result: string; - let error: string; - try { - const jsonObj: any = typeof contentToConvert === 'string' ? JSON.parse(contentToConvert) : contentToConvert; - result = new Builder().buildObject(jsonObj); - } catch (e) { - error = 'Invalid json'; - } - - return { value: result, error }; - } - // DateTime Functions - private static AddToTime(timeStamp: string, interval: number, timeUnit: string, format?: string): {value: any; error: string} { + private static addToTime(timeStamp: string, interval: number, timeUnit: string, format?: string): {value: any; error: string} { let result: string; let error: string; let parsed: any; - ({value: parsed, error} = BuiltInFunctions.ParseTimestamp(timeStamp)); + ({value: parsed, error} = BuiltInFunctions.parseTimestamp(timeStamp)); if (error === undefined) { let addedTime: moment.Moment = parsed; let timeUnitMark: string; @@ -1407,87 +1375,87 @@ export class BuiltInFunctions { } default: { - error = `${timeUnit} is not valid time unit`; + error = `${ timeUnit } is not valid time unit`; break; } } if (error === undefined) { addedTime = parsed.add(interval, timeUnitMark); - ({value: result, error} = this.ReturnFormattedTimeStampStr(addedTime, format)); + ({value: result, error} = this.returnFormattedTimeStampStr(addedTime, format)); } - } + } return {value: result, error}; } - private static ReturnFormattedTimeStampStr(timedata: moment.Moment, format: string): {value: any; error: string } { + private static returnFormattedTimeStampStr(timedata: moment.Moment, format: string): {value: any; error: string } { let result: string; let error: string; try { result = timedata.format(format); } catch (e) { - error = `${format} is not a valid timestamp format`; + error = `${ format } is not a valid timestamp format`; } return {value: result, error}; } - private static ConvertFromUTC(timeStamp: string, destinationTimeZone: string, format?: string): {value: any; error: string} { + private static convertFromUTC(timeStamp: string, destinationTimeZone: string, format?: string): {value: any; error: string} { let result: string; let error: string; - error = this.VerifyISOTimestamp(timeStamp); - const timeZone: string = TimeZoneConverter.WindowsToIana(destinationTimeZone); - if (!TimeZoneConverter.VerifyTimeZoneStr(timeZone)) { - error = `${destinationTimeZone} is not a valid timezone`; + error = this.verifyISOTimestamp(timeStamp); + const timeZone: string = TimeZoneConverter.windowsToIana(destinationTimeZone); + if (!TimeZoneConverter.verifyTimeZoneStr(timeZone)) { + error = `${ destinationTimeZone } is not a valid timezone`; } if (error === undefined) { try { result = timezone.tz(timeStamp, timeZone).format(format); } catch (e) { - error = `${format} is not a valid timestamp format`; + error = `${ format } is not a valid timestamp format`; } } return {value: result, error}; } - private static VerifyTimeStamp(timeStamp: string): string { + private static verifyTimeStamp(timeStamp: string): string { let parsed: any; let error: string; parsed = moment(timeStamp); if (parsed.toString() === 'Invalid date') { - error = `${timeStamp} is a invalid datetime`; + error = `${ timeStamp } is a invalid datetime`; } return error; } - private static ConvertToUTC(timeStamp: string, sourceTimezone: string, format?: string): {value: any; error: string} { + private static convertToUTC(timeStamp: string, sourceTimezone: string, format?: string): {value: any; error: string} { let result: string; let error: string; let formattedSourceTime: string; - const timeZone: string = TimeZoneConverter.WindowsToIana(sourceTimezone); - if (!TimeZoneConverter.VerifyTimeZoneStr(timeZone)) { - error = `${sourceTimezone} is not a valid timezone`; + const timeZone: string = TimeZoneConverter.windowsToIana(sourceTimezone); + if (!TimeZoneConverter.verifyTimeZoneStr(timeZone)) { + error = `${ sourceTimezone } is not a valid timezone`; } if (error === undefined) { - error = this.VerifyTimeStamp(timeStamp); + error = this.verifyTimeStamp(timeStamp); if (error === undefined) { try { const sourceTime: moment.Moment = timezone.tz(timeStamp, timeZone); formattedSourceTime = sourceTime.format(); - } catch (e) { - error = `${timeStamp} with ${timeZone} is not a valid timestamp with specified timeZone:`; + } catch (e) { + error = `${ timeStamp } with ${ timeZone } is not a valid timestamp with specified timeZone:`; } if (error === undefined) { try { result = timezone.tz(formattedSourceTime, 'Etc/UTC').format(format); } catch (e) { - error = `${format} is not a valid timestamp format`; + error = `${ format } is not a valid timestamp format`; } } } @@ -1496,11 +1464,11 @@ export class BuiltInFunctions { return {value: result, error}; } - private static Ticks(timeStamp: string): {value: any; error: string} { + private static ticks(timeStamp: string): {value: any; error: string} { let parsed: any; let result: number; let error: string; - ({value: parsed, error} = BuiltInFunctions.ParseTimestamp(timeStamp)); + ({value: parsed, error} = BuiltInFunctions.parseTimestamp(timeStamp)); if (error === undefined) { const unixMilliSec: number = parseInt(parsed.format('x'), 10); result = this.UnixMilliSecondToTicksConstant + unixMilliSec * 10000; @@ -1509,63 +1477,63 @@ export class BuiltInFunctions { return {value: result, error}; } - private static StartOfDay(timeStamp: string, format?: string): {value: any; error: string} { + private static startOfDay(timeStamp: string, format?: string): {value: any; error: string} { let result: string; let error: string; let parsed: moment.Moment; - ({value: parsed, error} = BuiltInFunctions.ParseTimestamp(timeStamp)); + ({value: parsed, error} = BuiltInFunctions.parseTimestamp(timeStamp)); if (error === undefined) { const startOfDay: moment.Moment = parsed.hours(0).minutes(0).second(0).millisecond(0); - ({value: result, error} = BuiltInFunctions.ReturnFormattedTimeStampStr(startOfDay, format)); + ({value: result, error} = BuiltInFunctions.returnFormattedTimeStampStr(startOfDay, format)); } return {value: result, error}; } - private static StartOfHour(timeStamp: string, format?: string): {value: any; error: string} { + private static startOfHour(timeStamp: string, format?: string): {value: any; error: string} { let result: string; let error: string; let parsed: moment.Moment; - ({value: parsed, error} = BuiltInFunctions.ParseTimestamp(timeStamp)); + ({value: parsed, error} = BuiltInFunctions.parseTimestamp(timeStamp)); if (error === undefined) { const startofHour: moment.Moment = parsed.minutes(0).second(0).millisecond(0); - ({value: result, error} = BuiltInFunctions.ReturnFormattedTimeStampStr(startofHour, format)); + ({value: result, error} = BuiltInFunctions.returnFormattedTimeStampStr(startofHour, format)); } return {value: result, error}; } - private static StartOfMonth(timeStamp: string, format?: string): {value: any; error: string} { + private static startOfMonth(timeStamp: string, format?: string): {value: any; error: string} { let result: string; let error: string; let parsed: moment.Moment; - ({value: parsed, error} = BuiltInFunctions.ParseTimestamp(timeStamp)); + ({value: parsed, error} = BuiltInFunctions.parseTimestamp(timeStamp)); if (error === undefined) { const startofMonth: moment.Moment = parsed.date(1).hours(0).minutes(0).second(0).millisecond(0); - ({value: result, error} = BuiltInFunctions.ReturnFormattedTimeStampStr(startofMonth, format)); + ({value: result, error} = BuiltInFunctions.returnFormattedTimeStampStr(startofMonth, format)); } return {value: result, error}; } // Uri Parsing Function - private static ParseUri(uri: string): {value: any; error: string} { + private static parseUri(uri: string): {value: any; error: string} { let result: URL; let error: string; try { result = new URL(uri); } catch (e) { - error = `Invalid URI: ${uri}`; + error = `Invalid URI: ${ uri }`; } return {value: result, error}; } - private static UriHost(uri: string): {value: any; error: string} { + private static uriHost(uri: string): {value: any; error: string} { let result: string; let error: string; let parsed: URL; - ({value: parsed, error} = this.ParseUri(uri)); + ({value: parsed, error} = this.parseUri(uri)); if (error === undefined) { try { result = parsed.hostname; @@ -1577,11 +1545,11 @@ export class BuiltInFunctions { return {value: result, error}; } - private static UriPath(uri: string): {value: any; error: string} { + private static uriPath(uri: string): {value: any; error: string} { let result: string; let error: string; let parsed: URL; - ({value: parsed, error} = this.ParseUri(uri)); + ({value: parsed, error} = this.parseUri(uri)); if (error === undefined) { try { const uriObj: URL = new URL(uri); @@ -1594,11 +1562,11 @@ export class BuiltInFunctions { return {value: result, error}; } - private static UriPathAndQuery(uri: string): {value: any; error: string} { + private static uriPathAndQuery(uri: string): {value: any; error: string} { let result: string; let error: string; let parsed: URL; - ({value: parsed, error} = this.ParseUri(uri)); + ({value: parsed, error} = this.parseUri(uri)); if (error === undefined) { try { result = parsed.pathname + parsed.search; @@ -1610,11 +1578,11 @@ export class BuiltInFunctions { return {value: result, error}; } - private static UriPort(uri: string): {value: any; error: string} { + private static uriPort(uri: string): {value: any; error: string} { let result: string; let error: string; let parsed: URL; - ({value: parsed, error} = this.ParseUri(uri)); + ({value: parsed, error} = this.parseUri(uri)); if (error === undefined) { try { result = parsed.port; @@ -1626,11 +1594,11 @@ export class BuiltInFunctions { return {value: result, error}; } - private static UriQuery(uri: string): {value: any; error: string} { + private static uriQuery(uri: string): {value: any; error: string} { let result: string; let error: string; let parsed: URL; - ({value: parsed, error} = this.ParseUri(uri)); + ({value: parsed, error} = this.parseUri(uri)); if (error === undefined) { try { result = parsed.search; @@ -1642,11 +1610,11 @@ export class BuiltInFunctions { return {value: result, error}; } - private static UriScheme(uri: string): {value: any; error: string} { + private static uriScheme(uri: string): {value: any; error: string} { let result: string; let error: string; let parsed: URL; - ({value: parsed, error} = this.ParseUri(uri)); + ({value: parsed, error} = this.parseUri(uri)); if (error === undefined) { try { result = parsed.protocol.replace(':', ''); @@ -1658,20 +1626,20 @@ export class BuiltInFunctions { return {value: result, error}; } - private static Callstack(expression: Expression, state: any): { value: any; error: string } { + private static callstack(expression: Expression, state: any): { value: any; error: string } { let result: any = state; let error: string; // get collection - ({ value: result, error} = Extensions.AccessProperty(state, 'callstack')); + ({ value: result, error} = Extensions.accessProperty(state, 'callstack')); if (result !== undefined) { const items: any[] = result as any[]; let property: any; - ({value: property, error} = expression.Children[0].tryEvaluate(state)); + ({value: property, error} = expression.children[0].tryEvaluate(state)); if (property !== undefined && error === undefined) { for (const item of items) { // get property off of item - ({ value: result, error } = Extensions.AccessProperty(item, property.toString())); + ({ value: result, error } = Extensions.accessProperty(item, property.toString())); // if not null if (error === undefined && result !== undefined) { @@ -1686,32 +1654,32 @@ export class BuiltInFunctions { } // tslint:disable-next-line: max-func-body-length - private static BuildFunctionLookup(): Map { + private static buildFunctionLookup(): Map { // tslint:disable-next-line: no-unnecessary-local-variable const functions: ExpressionEvaluator[] = [ //Math - new ExpressionEvaluator(ExpressionType.Element, BuiltInFunctions.ExtractElement, ReturnType.Object, this.ValidateBinary), - BuiltInFunctions.MultivariateNumeric(ExpressionType.Add, (args: ReadonlyArray) => Number(args[0]) + Number(args[1])), - BuiltInFunctions.MultivariateNumeric(ExpressionType.Subtract, (args: ReadonlyArray) => Number(args[0]) - Number(args[1])), - BuiltInFunctions.MultivariateNumeric(ExpressionType.Multiply, (args: ReadonlyArray) => Number(args[0]) * Number(args[1])), - BuiltInFunctions.MultivariateNumeric( + new ExpressionEvaluator(ExpressionType.Element, BuiltInFunctions.extractElement, ReturnType.Object, this.validateBinary), + BuiltInFunctions.multivariateNumeric(ExpressionType.Add, (args: any []): number => Number(args[0]) + Number(args[1])), + BuiltInFunctions.multivariateNumeric(ExpressionType.Subtract, (args: any []): number => Number(args[0]) - Number(args[1])), + BuiltInFunctions.multivariateNumeric(ExpressionType.Multiply, (args: any []): number => Number(args[0]) * Number(args[1])), + BuiltInFunctions.multivariateNumeric( ExpressionType.Divide, - (args: ReadonlyArray) => Math.floor(Number(args[0]) / Number(args[1])), - (val: any, expression: Expression, pos: number) => { - let error: string = this.VerifyNumber(val, expression, pos); + (args: any []): number => Math.floor(Number(args[0]) / Number(args[1])), + (val: any, expression: Expression, pos: number): string => { + let error: string = this.verifyNumber(val, expression, pos); if (error === undefined && (pos > 0 && Number(val) === 0)) { - error = `Cannot divide by 0 from ${expression}`; + error = `Cannot divide by 0 from ${ expression }`; } return error; }), - BuiltInFunctions.Numeric(ExpressionType.Min, (args: ReadonlyArray) => Math.min(args[0], args[1])), - BuiltInFunctions.Numeric(ExpressionType.Max, (args: ReadonlyArray) => Math.max(args[0], args[1])), - BuiltInFunctions.MultivariateNumeric(ExpressionType.Power, (args: ReadonlyArray) => Math.pow(args[0], args[1])), + BuiltInFunctions.numeric(ExpressionType.Min, (args: any []): number => Math.min(args[0], args[1])), + BuiltInFunctions.numeric(ExpressionType.Max, (args: any []): number => Math.max(args[0], args[1])), + BuiltInFunctions.multivariateNumeric(ExpressionType.Power, (args: any []): number => Math.pow(args[0], args[1])), new ExpressionEvaluator( ExpressionType.Mod, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => { + BuiltInFunctions.applyWithError( + (args: any []): any => { let error: string; let value: any; if (Number(args[1]) === 0) { @@ -1722,27 +1690,27 @@ export class BuiltInFunctions { return { value, error }; }, - BuiltInFunctions.VerifyInteger), + BuiltInFunctions.verifyInteger), ReturnType.Number, - BuiltInFunctions.ValidateBinaryNumber), + BuiltInFunctions.validateBinaryNumber), new ExpressionEvaluator( ExpressionType.Average, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => args[0].reduce((x: number, y: number) => x + y) / args[0].length, - BuiltInFunctions.VerifyNumericList), + BuiltInFunctions.apply( + (args: any []): number => args[0].reduce((x: number, y: number): number => x + y) / args[0].length, + BuiltInFunctions.verifyNumericList), ReturnType.Number, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Sum, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => args[0].reduce((x: number, y: number) => x + y), - BuiltInFunctions.VerifyNumericList), + BuiltInFunctions.apply( + (args: any []): number => args[0].reduce((x: number, y: number): number => x + y), + BuiltInFunctions.verifyNumericList), ReturnType.Number, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Count, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => { + BuiltInFunctions.apply( + (args: any []): number => { let count: number; if (typeof args[0] === 'string' || args[0] instanceof Array) { count = args[0].length; @@ -1754,32 +1722,32 @@ export class BuiltInFunctions { return count; }, - BuiltInFunctions.VerifyContainer), + BuiltInFunctions.verifyContainer), ReturnType.Number, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Range, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => { + BuiltInFunctions.applyWithError( + (args: any []): any => { let error: string; if (args[1] <= 0) { error = 'Second paramter must be more than zero'; } // tslint:disable-next-line: prefer-array-literal - const result: number[] = [...Array(args[1]).keys()].map((u: number) => u + Number(args[0])); + const result: number[] = [...Array(args[1]).keys()].map((u: number): number => u + Number(args[0])); return { value: result, error }; }, - BuiltInFunctions.VerifyInteger + BuiltInFunctions.verifyInteger ), ReturnType.Object, - BuiltInFunctions.ValidateBinaryNumber + BuiltInFunctions.validateBinaryNumber ), new ExpressionEvaluator( ExpressionType.Union, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => { + BuiltInFunctions.apply( + (args: any []): any => { let result: any[] = []; for (const arg of args) { result = result.concat(arg); @@ -1787,92 +1755,92 @@ export class BuiltInFunctions { return Array.from(new Set(result)); }, - BuiltInFunctions.VerifyList), + BuiltInFunctions.verifyList), ReturnType.Object, - BuiltInFunctions.ValidateAtLeastOne + BuiltInFunctions.validateAtLeastOne ), new ExpressionEvaluator( ExpressionType.Intersection, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => { + BuiltInFunctions.apply( + (args: any []): any => { let result: any[] = args[0]; for (const arg of args) { - result = result.filter((e: any) => arg.indexOf(e) > -1); + result = result.filter((e: any): boolean => arg.indexOf(e) > -1); } return Array.from(new Set(result)); }, - BuiltInFunctions.VerifyList), + BuiltInFunctions.verifyList), ReturnType.Object, - BuiltInFunctions.ValidateAtLeastOne + BuiltInFunctions.validateAtLeastOne ), new ExpressionEvaluator( ExpressionType.Skip, - BuiltInFunctions.Skip, + BuiltInFunctions.skip, ReturnType.Object, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, [], ReturnType.Object, ReturnType.Number) + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, [], ReturnType.Object, ReturnType.Number) ), new ExpressionEvaluator( ExpressionType.Take, - BuiltInFunctions.Take, + BuiltInFunctions.take, ReturnType.Object, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, [], ReturnType.Object, ReturnType.Number) + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, [], ReturnType.Object, ReturnType.Number) ), new ExpressionEvaluator( ExpressionType.SubArray, - BuiltInFunctions.SubArray, + BuiltInFunctions.subArray, ReturnType.Object, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, [ReturnType.Number], ReturnType.Object, ReturnType.Number) + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, [ReturnType.Number], ReturnType.Object, ReturnType.Number) ), new ExpressionEvaluator( ExpressionType.SortBy, - BuiltInFunctions.SortBy(false), + BuiltInFunctions.sortBy(false), ReturnType.Object, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, [ReturnType.String], ReturnType.Object) + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, [ReturnType.String], ReturnType.Object) ), new ExpressionEvaluator( ExpressionType.SortByDescending, - BuiltInFunctions.SortBy(true), + BuiltInFunctions.sortBy(true), ReturnType.Object, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, [ReturnType.String], ReturnType.Object) + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, [ReturnType.String], ReturnType.Object) ), - BuiltInFunctions.Comparison( + BuiltInFunctions.comparison( ExpressionType.LessThan, - (args: ReadonlyArray) => args[0] < args[1], BuiltInFunctions.ValidateBinaryNumberOrString, BuiltInFunctions.VerifyNumberOrString), - BuiltInFunctions.Comparison( + (args: any []): boolean => args[0] < args[1], BuiltInFunctions.validateBinaryNumberOrString, BuiltInFunctions.verifyNumberOrString), + BuiltInFunctions.comparison( ExpressionType.LessThanOrEqual, - (args: ReadonlyArray) => args[0] <= args[1], BuiltInFunctions.ValidateBinaryNumberOrString, BuiltInFunctions.VerifyNumberOrString), - BuiltInFunctions.Comparison( + (args: any []): boolean => args[0] <= args[1], BuiltInFunctions.validateBinaryNumberOrString, BuiltInFunctions.verifyNumberOrString), + BuiltInFunctions.comparison( ExpressionType.Equal, - (args: ReadonlyArray) => args[0] === args[1], BuiltInFunctions.ValidateBinary), - BuiltInFunctions.Comparison( + (args: any []): boolean => args[0] === args[1], BuiltInFunctions.validateBinary), + BuiltInFunctions.comparison( ExpressionType.NotEqual, - (args: ReadonlyArray) => args[0] !== args[1], BuiltInFunctions.ValidateBinary), - BuiltInFunctions.Comparison( + (args: any []): boolean => args[0] !== args[1], BuiltInFunctions.validateBinary), + BuiltInFunctions.comparison( ExpressionType.GreaterThan, - (args: ReadonlyArray) => args[0] > args[1], BuiltInFunctions.ValidateBinaryNumberOrString, BuiltInFunctions.VerifyNumberOrString), - BuiltInFunctions.Comparison( + (args: any []): boolean => args[0] > args[1], BuiltInFunctions.validateBinaryNumberOrString, BuiltInFunctions.verifyNumberOrString), + BuiltInFunctions.comparison( ExpressionType.GreaterThanOrEqual, - (args: ReadonlyArray) => args[0] >= args[1], BuiltInFunctions.ValidateBinaryNumberOrString, BuiltInFunctions.VerifyNumberOrString), - BuiltInFunctions.Comparison( + (args: any []): boolean => args[0] >= args[1], BuiltInFunctions.validateBinaryNumberOrString, BuiltInFunctions.verifyNumberOrString), + BuiltInFunctions.comparison( ExpressionType.Exists, - (args: ReadonlyArray) => args[0] !== undefined, BuiltInFunctions.ValidateUnary, BuiltInFunctions.VerifyNumberOrString), + (args: any []): boolean => args[0] !== undefined, BuiltInFunctions.validateUnary, BuiltInFunctions.verifyNumberOrString), new ExpressionEvaluator( ExpressionType.Contains, (expression: Expression, state: any): { value: any; error: string } => { - let found: boolean = false; + let found = false; let error: any; - let args: ReadonlyArray; - ({ args, error } = BuiltInFunctions.EvaluateChildren(expression, state)); + let args: any []; + ({ args, error } = BuiltInFunctions.evaluateChildren(expression, state)); if (error === undefined) { if (typeof args[0] === 'string' && typeof args[1] === 'string' || args[0] instanceof Array) { found = args[0].includes(args[1]); } else if (args[0] instanceof Map) { - found = >args[0].get(args[1]) !== undefined; + found = (args[0] as Map).get(args[1]) !== undefined; } else if (typeof args[1] === 'string') { let value: any; - ({ value, error } = Extensions.AccessProperty(args[0], args[1])); + ({ value, error } = Extensions.accessProperty(args[0], args[1])); found = error === undefined && value !== undefined; } } @@ -1880,112 +1848,140 @@ export class BuiltInFunctions { return { value: found, error: undefined }; }, ReturnType.Boolean, - BuiltInFunctions.ValidateBinary), - BuiltInFunctions.Comparison( + BuiltInFunctions.validateBinary), + BuiltInFunctions.comparison( ExpressionType.Empty, - (args: ReadonlyArray) => this.IsEmpty(args[0]), - BuiltInFunctions.ValidateUnary, - BuiltInFunctions.VerifyNumberOrString), + (args: any []): boolean => this.isEmpty(args[0]), + BuiltInFunctions.validateUnary, + BuiltInFunctions.verifyNumberOrString), new ExpressionEvaluator( ExpressionType.And, - (expression: Expression, state: any): { value: any; error: string } => BuiltInFunctions.And(expression, state), + (expression: Expression, state: any): { value: any; error: string } => BuiltInFunctions._and(expression, state), ReturnType.Boolean, - BuiltInFunctions.ValidateAtLeastOne), + BuiltInFunctions.validateAtLeastOne), new ExpressionEvaluator( ExpressionType.Or, - (expression: Expression, state: any): { value: any; error: string } => BuiltInFunctions.Or(expression, state), + (expression: Expression, state: any): { value: any; error: string } => BuiltInFunctions._or(expression, state), ReturnType.Boolean, - BuiltInFunctions.ValidateAtLeastOne), + BuiltInFunctions.validateAtLeastOne), new ExpressionEvaluator( ExpressionType.Not, - (expression: Expression, state: any): { value: any; error: string } => BuiltInFunctions.Not(expression, state), + (expression: Expression, state: any): { value: any; error: string } => BuiltInFunctions._not(expression, state), ReturnType.Boolean, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Concat, - BuiltInFunctions.Apply((args: ReadonlyArray) => ''.concat(...args), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: any []): string => ''.concat(...args.map((arg): string => BuiltInFunctions.parseStringOrNull(arg))), BuiltInFunctions.verifyStringOrNull), ReturnType.String, - BuiltInFunctions.ValidateString), + BuiltInFunctions.validateString), new ExpressionEvaluator( ExpressionType.Length, - BuiltInFunctions.Apply((args: ReadonlyArray) => args[0].length, BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: any []): number => (BuiltInFunctions.parseStringOrNull(args[0])).length, BuiltInFunctions.verifyStringOrNull), ReturnType.Number, - BuiltInFunctions.ValidateUnaryString), + BuiltInFunctions.validateUnaryString), new ExpressionEvaluator( ExpressionType.Replace, - BuiltInFunctions.Apply((args: ReadonlyArray) => args[0].split(args[1]).join(args[2]), BuiltInFunctions.VerifyString), + BuiltInFunctions.applyWithError(( + args: any []): any => + { + let error = undefined;1; + let result = undefined; + if (BuiltInFunctions.parseStringOrNull(args[1]).length === 0) { + error = `${ args[1] } should be a string with length at least 1`; + } + + if (error === undefined) { + result = BuiltInFunctions.parseStringOrNull(args[0]).split(BuiltInFunctions.parseStringOrNull(args[1])).join(BuiltInFunctions.parseStringOrNull(args[2])); + } + + return {value: result, error}; + }, BuiltInFunctions.verifyStringOrNull), ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateArityAndAnyType(expression, 3, 3, ReturnType.String)), + (expression: Expression): void => BuiltInFunctions.validateArityAndAnyType(expression, 3, 3, ReturnType.String)), new ExpressionEvaluator( ExpressionType.ReplaceIgnoreCase, - BuiltInFunctions.Apply((args: ReadonlyArray) => args[0].replace(new RegExp(args[1], 'gi'), args[2]), BuiltInFunctions.VerifyString), + BuiltInFunctions.applyWithError(( + args: any []): any => + { + let error = undefined; + let result = undefined; + if (BuiltInFunctions.parseStringOrNull(args[1]).length === 0) { + error = `${ args[1] } should be a string with length at least 1`; + } + + if (error === undefined) { + result = BuiltInFunctions.parseStringOrNull(args[0]).replace(new RegExp(BuiltInFunctions.parseStringOrNull(args[1]), 'gi'), BuiltInFunctions.parseStringOrNull(args[2])); + } + + return {value: result, error}; + }, BuiltInFunctions.verifyStringOrNull), ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateArityAndAnyType(expression, 3, 3, ReturnType.String)), + (expression: Expression): void => BuiltInFunctions.validateArityAndAnyType(expression, 3, 3, ReturnType.String)), new ExpressionEvaluator( ExpressionType.Split, - BuiltInFunctions.Apply((args: ReadonlyArray) => args[0].split(args[1]), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: any []): string[] => BuiltInFunctions.parseStringOrNull(args[0]).split(BuiltInFunctions.parseStringOrNull(args[1])), BuiltInFunctions.verifyStringOrNull), ReturnType.Object, - (expression: Expression): void => BuiltInFunctions.ValidateArityAndAnyType(expression, 2, 2, ReturnType.String)), + (expression: Expression): void => BuiltInFunctions.validateArityAndAnyType(expression, 2, 2, ReturnType.String)), new ExpressionEvaluator( ExpressionType.Substring, - BuiltInFunctions.Substring, + BuiltInFunctions.substring, ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, [ReturnType.Number], ReturnType.String, ReturnType.Number)), - BuiltInFunctions.StringTransform(ExpressionType.ToLower, (args: ReadonlyArray) => String(args[0]).toLowerCase()), - BuiltInFunctions.StringTransform(ExpressionType.ToUpper, (args: ReadonlyArray) => String(args[0]).toUpperCase()), - BuiltInFunctions.StringTransform(ExpressionType.Trim, (args: ReadonlyArray) => String(args[0]).trim()), + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, [ReturnType.Number], ReturnType.String, ReturnType.Number)), + BuiltInFunctions.stringTransform(ExpressionType.ToLower, (args: any []): string => String(BuiltInFunctions.parseStringOrNull(args[0])).toLowerCase()), + BuiltInFunctions.stringTransform(ExpressionType.ToUpper, (args: any []): string => String(BuiltInFunctions.parseStringOrNull(args[0])).toUpperCase()), + BuiltInFunctions.stringTransform(ExpressionType.Trim, (args: any []): string => String(BuiltInFunctions.parseStringOrNull(args[0])).trim()), new ExpressionEvaluator( ExpressionType.StartsWith, - BuiltInFunctions.Apply((args: ReadonlyArray) => args[0].startsWith(args[1]), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: any []): boolean => BuiltInFunctions.parseStringOrNull(args[0]).startsWith(BuiltInFunctions.parseStringOrNull(args[1])), BuiltInFunctions.verifyStringOrNull), ReturnType.Boolean, - (expression: Expression): void => BuiltInFunctions.ValidateArityAndAnyType(expression, 2, 2, ReturnType.String) + (expression: Expression): void => BuiltInFunctions.validateArityAndAnyType(expression, 2, 2, ReturnType.String) ), new ExpressionEvaluator( ExpressionType.EndsWith, - BuiltInFunctions.Apply((args: ReadonlyArray) => args[0].endsWith(args[1]), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: any []): boolean => BuiltInFunctions.parseStringOrNull(args[0]).endsWith(BuiltInFunctions.parseStringOrNull(args[1])), BuiltInFunctions.verifyStringOrNull), ReturnType.Boolean, - (expression: Expression): void => BuiltInFunctions.ValidateArityAndAnyType(expression, 2, 2, ReturnType.String) + (expression: Expression): void => BuiltInFunctions.validateArityAndAnyType(expression, 2, 2, ReturnType.String) ), new ExpressionEvaluator( ExpressionType.CountWord, - BuiltInFunctions.Apply((args: ReadonlyArray) => args[0].trim().split(/\s+/).length, BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: any []): number => BuiltInFunctions.parseStringOrNull(args[0]).trim().split(/\s+/).length, BuiltInFunctions.verifyStringOrNull), ReturnType.Number, - BuiltInFunctions.ValidateUnaryString + BuiltInFunctions.validateUnaryString ), new ExpressionEvaluator( ExpressionType.AddOrdinal, - BuiltInFunctions.Apply((args: ReadonlyArray) => this.AddOrdinal(args[0]), BuiltInFunctions.VerifyInteger), + BuiltInFunctions.apply((args: any []): string => this.addOrdinal(args[0]), BuiltInFunctions.verifyInteger), ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateArityAndAnyType(expression, 1, 1, ReturnType.Number) + (expression: Expression): void => BuiltInFunctions.validateArityAndAnyType(expression, 1, 1, ReturnType.Number) ), new ExpressionEvaluator( ExpressionType.NewGuid, - BuiltInFunctions.Apply(() => BuiltInFunctions.newGuid()), + BuiltInFunctions.apply((): string => BuiltInFunctions.newGuid()), ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateArityAndAnyType(expression, 0, 0) + (expression: Expression): void => BuiltInFunctions.validateArityAndAnyType(expression, 0, 0) ), new ExpressionEvaluator( ExpressionType.IndexOf, - BuiltInFunctions.Apply((args: ReadonlyArray) => args[0].indexOf(args[1]), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: any []): number => BuiltInFunctions.parseStringOrNull(args[0]).indexOf(BuiltInFunctions.parseStringOrNull(args[1])), BuiltInFunctions.verifyStringOrNull), ReturnType.Number, - (expression: Expression): void => BuiltInFunctions.ValidateArityAndAnyType(expression, 2, 2, ReturnType.String) + (expression: Expression): void => BuiltInFunctions.validateArityAndAnyType(expression, 2, 2, ReturnType.String) ), new ExpressionEvaluator( ExpressionType.LastIndexOf, - BuiltInFunctions.Apply((args: ReadonlyArray) => args[0].lastIndexOf(args[1]), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: any []): number => BuiltInFunctions.parseStringOrNull(args[0]).lastIndexOf(BuiltInFunctions.parseStringOrNull(args[1])), BuiltInFunctions.verifyStringOrNull), ReturnType.Number, - (expression: Expression): void => BuiltInFunctions.ValidateArityAndAnyType(expression, 2, 2, ReturnType.String) + (expression: Expression): void => BuiltInFunctions.validateArityAndAnyType(expression, 2, 2, ReturnType.String) ), new ExpressionEvaluator( ExpressionType.Join, (expression: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({ args, error } = BuiltInFunctions.EvaluateChildren(expression, state)); + let args: any []; + ({ args, error } = BuiltInFunctions.evaluateChildren(expression, state)); if (error === undefined) { if (!(args[0] instanceof Array)) { - error = `${expression.Children[0]} evaluates to ${args[0]} which is not a list.`; + error = `${ expression.children[0] } evaluates to ${ args[0] } which is not a list.`; } else { if (args.length === 2) { value = args[0].join(args[1]); @@ -2003,134 +1999,134 @@ export class BuiltInFunctions { return { value, error }; }, ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, [ReturnType.String], ReturnType.Object, ReturnType.String)), + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, [ReturnType.String], ReturnType.Object, ReturnType.String)), // datetime - BuiltInFunctions.TimeTransform(ExpressionType.AddDays, (ts: moment.Moment, num: any) => ts.add(num, 'd')), - BuiltInFunctions.TimeTransform(ExpressionType.AddHours, (ts: moment.Moment, num: any) => ts.add(num, 'h')), - BuiltInFunctions.TimeTransform(ExpressionType.AddMinutes, (ts: moment.Moment, num: any) => ts.add(num, 'minutes')), - BuiltInFunctions.TimeTransform(ExpressionType.AddSeconds, (ts: moment.Moment, num: any) => ts.add(num, 'seconds')), + BuiltInFunctions.timeTransform(ExpressionType.AddDays, (ts: moment.Moment, num: any): any => ts.add(num, 'd')), + BuiltInFunctions.timeTransform(ExpressionType.AddHours, (ts: moment.Moment, num: any): any => ts.add(num, 'h')), + BuiltInFunctions.timeTransform(ExpressionType.AddMinutes, (ts: moment.Moment, num: any): any => ts.add(num, 'minutes')), + BuiltInFunctions.timeTransform(ExpressionType.AddSeconds, (ts: moment.Moment, num: any): any => ts.add(num, 'seconds')), new ExpressionEvaluator( ExpressionType.DayOfMonth, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => BuiltInFunctions.ParseTimestamp(args[0], (dt: moment.Moment) => dt.date()), - BuiltInFunctions.VerifyString), + BuiltInFunctions.applyWithError( + (args: any []): any => BuiltInFunctions.parseTimestamp(args[0], (dt: moment.Moment): number => dt.date()), + BuiltInFunctions.verifyString), ReturnType.Number, - BuiltInFunctions.ValidateUnaryString), + BuiltInFunctions.validateUnaryString), new ExpressionEvaluator( ExpressionType.DayOfWeek, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => BuiltInFunctions.ParseTimestamp(args[0], (dt: moment.Moment) => dt.days()), - BuiltInFunctions.VerifyString), + BuiltInFunctions.applyWithError( + (args: any []): any => BuiltInFunctions.parseTimestamp(args[0], (dt: moment.Moment): number => dt.days()), + BuiltInFunctions.verifyString), ReturnType.Number, - BuiltInFunctions.ValidateUnaryString), + BuiltInFunctions.validateUnaryString), new ExpressionEvaluator( ExpressionType.DayOfYear, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => BuiltInFunctions.ParseTimestamp(args[0], (dt: moment.Moment) => dt.dayOfYear()), - BuiltInFunctions.VerifyString), + BuiltInFunctions.applyWithError( + (args: any []): any => BuiltInFunctions.parseTimestamp(args[0], (dt: moment.Moment): number => dt.dayOfYear()), + BuiltInFunctions.verifyString), ReturnType.Number, - BuiltInFunctions.ValidateUnaryString), + BuiltInFunctions.validateUnaryString), new ExpressionEvaluator( ExpressionType.Month, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => BuiltInFunctions.ParseTimestamp(args[0], (dt: moment.Moment) => dt.month() + 1), - BuiltInFunctions.VerifyString), + BuiltInFunctions.applyWithError( + (args: any []): any => BuiltInFunctions.parseTimestamp(args[0], (dt: moment.Moment): number => dt.month() + 1), + BuiltInFunctions.verifyString), ReturnType.Number, - BuiltInFunctions.ValidateUnaryString), + BuiltInFunctions.validateUnaryString), new ExpressionEvaluator( ExpressionType.Date, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => BuiltInFunctions.ParseTimestamp(args[0], (dt: moment.Moment) => dt.format('M/DD/YYYY')), - BuiltInFunctions.VerifyString), + BuiltInFunctions.applyWithError( + (args: any []): any => BuiltInFunctions.parseTimestamp(args[0], (dt: moment.Moment): string => dt.format('M/DD/YYYY')), + BuiltInFunctions.verifyString), ReturnType.String, - BuiltInFunctions.ValidateUnaryString), + BuiltInFunctions.validateUnaryString), new ExpressionEvaluator( ExpressionType.Year, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => BuiltInFunctions.ParseTimestamp(args[0], (dt: moment.Moment) => dt.year()), - BuiltInFunctions.VerifyString), + BuiltInFunctions.applyWithError( + (args: any []): any => BuiltInFunctions.parseTimestamp(args[0], (dt: moment.Moment): number => dt.year()), + BuiltInFunctions.verifyString), ReturnType.Number, - BuiltInFunctions.ValidateUnaryString), + BuiltInFunctions.validateUnaryString), new ExpressionEvaluator( ExpressionType.UtcNow, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => args.length === 1 ? moment(new Date().toISOString()).utc().format(args[0]) : new Date().toISOString(), - BuiltInFunctions.VerifyString), + BuiltInFunctions.apply( + (args: any []): string => args.length === 1 ? moment(new Date().toISOString()).utc().format(args[0]) : new Date().toISOString(), + BuiltInFunctions.verifyString), ReturnType.String), new ExpressionEvaluator( ExpressionType.FormatDateTime, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => { + BuiltInFunctions.applyWithError( + (args: any []): any => { let error: string; let arg: any = args[0]; if (typeof arg === 'number') { arg = arg * 1000; } else { - error = BuiltInFunctions.VerifyTimestamp(arg.toString()); + error = BuiltInFunctions.verifyTimestamp(arg.toString()); } let value: any; if (error === undefined) { const dateString: string = new Date(arg).toISOString(); - value = args.length === 2 ? moment(dateString).format(BuiltInFunctions.TimestampFormatter(args[1])) : dateString; + value = args.length === 2 ? moment(dateString).format(BuiltInFunctions.timestampFormatter(args[1])) : dateString; } return { value, error }; }), ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, [ReturnType.String], ReturnType.Object)), + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, [ReturnType.String], ReturnType.Object)), new ExpressionEvaluator( ExpressionType.SubtractFromTime, (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: any; - let args: ReadonlyArray; - ({ args, error } = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({ args, error } = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { if (typeof args[0] === 'string' && Number.isInteger(args[1]) && typeof args[2] === 'string') { - const format: string = (args.length === 4 ? BuiltInFunctions.TimestampFormatter(args[3]) : BuiltInFunctions.DefaultDateTimeFormat); - const { duration, tsStr } = BuiltInFunctions.TimeUnitTransformer(args[1], args[2]); + const format: string = (args.length === 4 ? BuiltInFunctions.timestampFormatter(args[3]) : BuiltInFunctions.DefaultDateTimeFormat); + const { duration, tsStr } = BuiltInFunctions.timeUnitTransformer(args[1], args[2]); if (tsStr === undefined) { - error = `${args[2]} is not a valid time unit.`; + error = `${ args[2] } is not a valid time unit.`; } else { const dur: any = duration; - ({ value, error } = BuiltInFunctions.ParseTimestamp(args[0], (dt: moment.Moment) => args.length === 4 ? + ({ value, error } = BuiltInFunctions.parseTimestamp(args[0], (dt: moment.Moment): string => args.length === 4 ? dt.subtract(dur, tsStr).format(format) : dt.subtract(dur, tsStr).toISOString())); } } else { - error = `${expr} can't evaluate.`; + error = `${ expr } can't evaluate.`; } } return { value, error }; }, ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, [ReturnType.String], ReturnType.String, ReturnType.Number, ReturnType.String)), + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, [ReturnType.String], ReturnType.String, ReturnType.Number, ReturnType.String)), new ExpressionEvaluator( ExpressionType.DateReadBack, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => { + BuiltInFunctions.applyWithError( + (args: any []): any => { let value: any; let error: string; - ({ value, error } = BuiltInFunctions.ParseTimestamp(args[0])); + ({ value, error } = BuiltInFunctions.parseTimestamp(args[0])); if (error === undefined) { const timestamp1: Date = value.startOf('day').toDate(); - ({ value, error } = BuiltInFunctions.ParseTimestamp(args[1])); + ({ value, error } = BuiltInFunctions.parseTimestamp(args[1])); const timestamp2: string = value.startOf('day').local().format('YYYY-MM-DD'); const timex: TimexProperty = new TimexProperty(timestamp2); return { value: timex.toNaturalLanguage(timestamp1), error }; } }, - BuiltInFunctions.VerifyString), + BuiltInFunctions.verifyString), ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, undefined, ReturnType.String, ReturnType.String)), + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, undefined, ReturnType.String, ReturnType.String)), new ExpressionEvaluator( ExpressionType.GetTimeOfDay, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => { + BuiltInFunctions.applyWithError( + (args: any []): any => { let value: any; - const error: string = BuiltInFunctions.VerifyISOTimestamp(args[0]); + const error: string = BuiltInFunctions.verifyISOTimestamp(args[0]); if (error === undefined) { const thisTime: number = moment.parseZone(args[0]).hour() * 100 + moment.parseZone(args[0]).minute(); if (thisTime === 0) { @@ -2150,352 +2146,352 @@ export class BuiltInFunctions { return { value, error }; }, - this.VerifyString), + this.verifyString), ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, undefined, ReturnType.String)), + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, undefined, ReturnType.String)), new ExpressionEvaluator( ExpressionType.GetFutureTime, (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: any; - let args: ReadonlyArray; - ({ args, error } = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({ args, error } = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { if (Number.isInteger(args[0]) && typeof args[1] === 'string') { - const format: string = (args.length === 3 ? BuiltInFunctions.TimestampFormatter(args[2]) : BuiltInFunctions.DefaultDateTimeFormat); - const { duration, tsStr } = BuiltInFunctions.TimeUnitTransformer(args[0], args[1]); + const format: string = (args.length === 3 ? BuiltInFunctions.timestampFormatter(args[2]) : BuiltInFunctions.DefaultDateTimeFormat); + const { duration, tsStr } = BuiltInFunctions.timeUnitTransformer(args[0], args[1]); if (tsStr === undefined) { - error = `${args[2]} is not a valid time unit.`; + error = `${ args[2] } is not a valid time unit.`; } else { const dur: any = duration; - ({ value, error } = BuiltInFunctions.ParseTimestamp(new Date().toISOString(), (dt: moment.Moment) => dt.add(dur, tsStr).format(format))); + ({ value, error } = BuiltInFunctions.parseTimestamp(new Date().toISOString(), (dt: moment.Moment): string => dt.add(dur, tsStr).format(format))); } } else { - error = `${expr} can't evaluate.`; + error = `${ expr } can't evaluate.`; } } return { value, error }; }, ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, [ReturnType.String], ReturnType.Number, ReturnType.String) + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, [ReturnType.String], ReturnType.Number, ReturnType.String) ), new ExpressionEvaluator( ExpressionType.GetPastTime, (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: any; - let args: ReadonlyArray; - ({ args, error } = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({ args, error } = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { if (Number.isInteger(args[0]) && typeof args[1] === 'string') { - const format: string = (args.length === 3 ? BuiltInFunctions.TimestampFormatter(args[2]) : BuiltInFunctions.DefaultDateTimeFormat); - const { duration, tsStr } = BuiltInFunctions.TimeUnitTransformer(args[0], args[1]); + const format: string = (args.length === 3 ? BuiltInFunctions.timestampFormatter(args[2]) : BuiltInFunctions.DefaultDateTimeFormat); + const { duration, tsStr } = BuiltInFunctions.timeUnitTransformer(args[0], args[1]); if (tsStr === undefined) { - error = `${args[2]} is not a valid time unit.`; + error = `${ args[2] } is not a valid time unit.`; } else { const dur: any = duration; - ({ value, error } = BuiltInFunctions.ParseTimestamp(new Date().toISOString(), (dt: moment.Moment) => dt.subtract(dur, tsStr).format(format))); + ({ value, error } = BuiltInFunctions.parseTimestamp(new Date().toISOString(), (dt: moment.Moment): string => dt.subtract(dur, tsStr).format(format))); } } else { - error = `${expr} can't evaluate.`; + error = `${ expr } can't evaluate.`; } } return { value, error }; }, ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, [ReturnType.String], ReturnType.Number, ReturnType.String) + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, [ReturnType.String], ReturnType.Number, ReturnType.String) ), new ExpressionEvaluator( ExpressionType.ConvertFromUTC, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { - const format: string = (args.length === 3) ? BuiltInFunctions.TimestampFormatter(args[2]) : this.DefaultDateTimeFormat; + const format: string = (args.length === 3) ? BuiltInFunctions.timestampFormatter(args[2]) : this.DefaultDateTimeFormat; if (typeof(args[0]) === 'string' && typeof(args[1]) === 'string') { - ({value, error} = BuiltInFunctions.ConvertFromUTC(args[0], args[1], format)); + ({value, error} = BuiltInFunctions.convertFromUTC(args[0], args[1], format)); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.String, - (expr: Expression): void => BuiltInFunctions.ValidateOrder(expr, [ReturnType.String], ReturnType.String, ReturnType.String) - ), + (expr: Expression): void => BuiltInFunctions.validateOrder(expr, [ReturnType.String], ReturnType.String, ReturnType.String) + ), new ExpressionEvaluator( - ExpressionType.ConvertToUTC, - (expr: Expression, state: any) : { value: any; error: string } => { - let value: any; - let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); - if (error === undefined) { - const format: string = (args.length === 3) ? BuiltInFunctions.TimestampFormatter(args[2]) : this.DefaultDateTimeFormat; - if (typeof(args[0]) === 'string' && typeof(args[1]) === 'string') { - ({value, error} = BuiltInFunctions.ConvertToUTC(args[0], args[1], format)); - } else { - error = `${expr} cannot evaluate`; - } + ExpressionType.ConvertToUTC, + (expr: Expression, state: any): { value: any; error: string } => { + let value: any; + let error: string; + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); + if (error === undefined) { + const format: string = (args.length === 3) ? BuiltInFunctions.timestampFormatter(args[2]) : this.DefaultDateTimeFormat; + if (typeof(args[0]) === 'string' && typeof(args[1]) === 'string') { + ({value, error} = BuiltInFunctions.convertToUTC(args[0], args[1], format)); + } else { + error = `${ expr } cannot evaluate`; } + } - return {value, error}; - }, - ReturnType.String, - (expr: Expression): void => BuiltInFunctions.ValidateOrder(expr, [ReturnType.String], ReturnType.String, ReturnType.String) - ), + return {value, error}; + }, + ReturnType.String, + (expr: Expression): void => BuiltInFunctions.validateOrder(expr, [ReturnType.String], ReturnType.String, ReturnType.String) + ), new ExpressionEvaluator( ExpressionType.AddToTime, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { - const format: string = (args.length === 4) ? BuiltInFunctions.TimestampFormatter(args[3]) : this.DefaultDateTimeFormat; + const format: string = (args.length === 4) ? BuiltInFunctions.timestampFormatter(args[3]) : this.DefaultDateTimeFormat; if (typeof(args[0]) === 'string' && Number.isInteger(args[1]) && typeof(args[2]) === 'string') { - ({value, error} = BuiltInFunctions.AddToTime(args[0], args[1], args[2], format)); + ({value, error} = BuiltInFunctions.addToTime(args[0], args[1], args[2], format)); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.String, - (expr: Expression): void => BuiltInFunctions.ValidateOrder(expr, [ReturnType.String], ReturnType.String, ReturnType.Number, ReturnType.String) - ), + (expr: Expression): void => BuiltInFunctions.validateOrder(expr, [ReturnType.String], ReturnType.String, ReturnType.Number, ReturnType.String) + ), new ExpressionEvaluator( ExpressionType.StartOfDay, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { - const format: string = (args.length === 2) ? BuiltInFunctions.TimestampFormatter(args[1]) : this.DefaultDateTimeFormat; + const format: string = (args.length === 2) ? BuiltInFunctions.timestampFormatter(args[1]) : this.DefaultDateTimeFormat; if (typeof(args[0]) === 'string') { - ({value, error} = BuiltInFunctions.StartOfDay(args[0], format)); + ({value, error} = BuiltInFunctions.startOfDay(args[0], format)); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.String, - (expr: Expression): void => BuiltInFunctions.ValidateOrder(expr, [ReturnType.String], ReturnType.String) - ), + (expr: Expression): void => BuiltInFunctions.validateOrder(expr, [ReturnType.String], ReturnType.String) + ), new ExpressionEvaluator( ExpressionType.StartOfHour, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { - const format: string = (args.length === 2) ? BuiltInFunctions.TimestampFormatter(args[1]) : this.DefaultDateTimeFormat; + const format: string = (args.length === 2) ? BuiltInFunctions.timestampFormatter(args[1]) : this.DefaultDateTimeFormat; if (typeof(args[0]) === 'string') { - ({value, error} = BuiltInFunctions.StartOfHour(args[0], format)); + ({value, error} = BuiltInFunctions.startOfHour(args[0], format)); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.String, - (expr: Expression): void => BuiltInFunctions.ValidateOrder(expr, [ReturnType.String], ReturnType.String) - ), + (expr: Expression): void => BuiltInFunctions.validateOrder(expr, [ReturnType.String], ReturnType.String) + ), new ExpressionEvaluator( ExpressionType.StartOfMonth, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { - const format: string = (args.length === 2) ? BuiltInFunctions.TimestampFormatter(args[1]) : this.DefaultDateTimeFormat; + const format: string = (args.length === 2) ? BuiltInFunctions.timestampFormatter(args[1]) : this.DefaultDateTimeFormat; if (typeof(args[0]) === 'string') { - ({value, error} = BuiltInFunctions.StartOfMonth(args[0], format)); + ({value, error} = BuiltInFunctions.startOfMonth(args[0], format)); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.String, - (expr: Expression): void => BuiltInFunctions.ValidateOrder(expr, [ReturnType.String], ReturnType.String) - ), + (expr: Expression): void => BuiltInFunctions.validateOrder(expr, [ReturnType.String], ReturnType.String) + ), new ExpressionEvaluator( ExpressionType.Ticks, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { if (typeof(args[0]) === 'string') { - ({value, error} = BuiltInFunctions.Ticks(args[0])); + ({value, error} = BuiltInFunctions.ticks(args[0])); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.Number, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.UriHost, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { if (typeof(args[0]) === 'string') { - ({value, error} = BuiltInFunctions.UriHost(args[0])); + ({value, error} = BuiltInFunctions.uriHost(args[0])); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.UriPath, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { if (typeof(args[0]) === 'string') { - ({value, error} = BuiltInFunctions.UriPath(args[0])); + ({value, error} = BuiltInFunctions.uriPath(args[0])); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.UriPathAndQuery, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { if (typeof(args[0]) === 'string') { - ({value, error} = BuiltInFunctions.UriPathAndQuery(args[0])); + ({value, error} = BuiltInFunctions.uriPathAndQuery(args[0])); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.UriQuery, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { if (typeof(args[0]) === 'string') { - ({value, error} = BuiltInFunctions.UriQuery(args[0])); + ({value, error} = BuiltInFunctions.uriQuery(args[0])); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.UriPort, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { if (typeof(args[0]) === 'string') { - ({value, error} = BuiltInFunctions.UriPort(args[0])); + ({value, error} = BuiltInFunctions.uriPort(args[0])); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.Number, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.UriScheme, - (expr: Expression, state: any) : { value: any; error: string } => { + (expr: Expression, state: any): { value: any; error: string } => { let value: any; let error: string; - let args: ReadonlyArray; - ({args, error} = BuiltInFunctions.EvaluateChildren(expr, state)); + let args: any []; + ({args, error} = BuiltInFunctions.evaluateChildren(expr, state)); if (error === undefined) { if (typeof(args[0]) === 'string') { - ({value, error} = BuiltInFunctions.UriScheme(args[0])); + ({value, error} = BuiltInFunctions.uriScheme(args[0])); } else { - error = `${expr} cannot evaluate`; + error = `${ expr } cannot evaluate`; } } return {value, error}; }, ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Float, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => { + BuiltInFunctions.applyWithError( + (args: any []): any => { let error: string; const value: number = parseFloat(args[0]); if (value === undefined || Number.isNaN(value)) { - error = `parameter ${args[0]} is not a valid number string.`; + error = `parameter ${ args[0] } is not a valid number string.`; } return { value, error }; }), - ReturnType.Number, BuiltInFunctions.ValidateUnary), + ReturnType.Number, BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Int, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => { + BuiltInFunctions.applyWithError( + (args: any []): any => { let error: string; const value: number = parseInt(args[0], 10); if (value === undefined || Number.isNaN(value)) { - error = `parameter ${args[0]} is not a valid number string.`; + error = `parameter ${ args[0] } is not a valid number string.`; } return { value, error }; }), ReturnType.Number, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.String, - BuiltInFunctions.Apply((args: ReadonlyArray) => { + BuiltInFunctions.apply((args: any []): string => { return JSON.stringify(args[0]) .replace(/(^\'*)/g, '') .replace(/(\'*$)/g, '') @@ -2503,224 +2499,219 @@ export class BuiltInFunctions { .replace(/(\"*$)/g, ''); }), ReturnType.String, - BuiltInFunctions.ValidateUnary), - BuiltInFunctions.Comparison( + BuiltInFunctions.validateUnary), + BuiltInFunctions.comparison( ExpressionType.Bool, - (args: ReadonlyArray) => this.IsLogicTrue(args[0]), - BuiltInFunctions.ValidateUnary), - new ExpressionEvaluator(ExpressionType.Accessor, BuiltInFunctions.Accessor, ReturnType.Object, BuiltInFunctions.ValidateAccessor), + (args: any []): boolean => this.isLogicTrue(args[0]), + BuiltInFunctions.validateUnary), + new ExpressionEvaluator(ExpressionType.Accessor, BuiltInFunctions.accessor, ReturnType.Object, BuiltInFunctions.validateAccessor), new ExpressionEvaluator( ExpressionType.GetProperty, - BuiltInFunctions.GetProperty, + BuiltInFunctions.getProperty, ReturnType.Object, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, undefined, ReturnType.Object, ReturnType.String)), + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, undefined, ReturnType.Object, ReturnType.String)), new ExpressionEvaluator( ExpressionType.If, - (expression: Expression, state: any): { value: any; error: string } => BuiltInFunctions.If(expression, state), + (expression: Expression, state: any): { value: any; error: string } => BuiltInFunctions._if(expression, state), ReturnType.Object, - (expr: Expression): void => BuiltInFunctions.ValidateArityAndAnyType(expr, 3, 3)), + (expr: Expression): void => BuiltInFunctions.validateArityAndAnyType(expr, 3, 3)), new ExpressionEvaluator( ExpressionType.Rand, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => { + BuiltInFunctions.applyWithError( + (args: any []): any => { let error: string; if (args[0] > args[1]) { - error = `Min value ${args[0]} cannot be greater than max value ${args[1]}.`; + error = `Min value ${ args[0] } cannot be greater than max value ${ args[1] }.`; } + // tslint:disable-next-line: insecure-random const value: any = Math.floor(Math.random() * (Number(args[1]) - Number(args[0])) + Number(args[0])); return { value, error }; }, - BuiltInFunctions.VerifyInteger), + BuiltInFunctions.verifyInteger), ReturnType.Number, - BuiltInFunctions.ValidateBinaryNumber), - new ExpressionEvaluator(ExpressionType.CreateArray, BuiltInFunctions.Apply((args: ReadonlyArray) => Array.from(args)), ReturnType.Object), + BuiltInFunctions.validateBinaryNumber), + new ExpressionEvaluator(ExpressionType.CreateArray, BuiltInFunctions.apply((args: any []): any[] => Array.from(args)), ReturnType.Object), new ExpressionEvaluator( ExpressionType.Array, - BuiltInFunctions.Apply((args: ReadonlyArray) => [args[0]], BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: any []): any[] => [args[0]], BuiltInFunctions.verifyString), ReturnType.Object, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Binary, - BuiltInFunctions.Apply((args: ReadonlyArray) => this.ToBinary(args[0]), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: any []): string => this.toBinary(args[0]), BuiltInFunctions.verifyString), ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.DataUri, - BuiltInFunctions.Apply( - (args: Readonly) => 'data:text/plain;charset=utf-8;base64,'.concat(Buffer.from(args[0]).toString('base64')), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply( + (args: Readonly): string => 'data:text/plain;charset=utf-8;base64,'.concat(Buffer.from(args[0]).toString('base64')), BuiltInFunctions.verifyString), ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.DataUriToBinary, - BuiltInFunctions.Apply((args: Readonly) => this.ToBinary(args[0]), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: Readonly): string => this.toBinary(args[0]), BuiltInFunctions.verifyString), ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.DataUriToString, - BuiltInFunctions.Apply((args: Readonly) => Buffer.from(args[0].slice(args[0].indexOf(',') + 1), 'base64').toString(), BuiltInFunctions.VerifyString), + // tslint:disable-next-line: restrict-plus-operands + BuiltInFunctions.apply((args: Readonly): string => Buffer.from(args[0].slice(args[0].indexOf(',') + 1), 'base64').toString(), BuiltInFunctions.verifyString), ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.UriComponentToString, - BuiltInFunctions.Apply((args: Readonly) => decodeURIComponent(args[0]), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: Readonly): string => decodeURIComponent(args[0]), BuiltInFunctions.verifyString), ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Base64, - BuiltInFunctions.Apply((args: Readonly) => Buffer.from(args[0]).toString('base64'), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: Readonly): string => Buffer.from(args[0]).toString('base64'), BuiltInFunctions.verifyString), ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Base64ToBinary, - BuiltInFunctions.Apply((args: Readonly) => this.ToBinary(args[0]), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: Readonly): string => this.toBinary(args[0]), BuiltInFunctions.verifyString), ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Base64ToString, - BuiltInFunctions.Apply((args: Readonly) => Buffer.from(args[0], 'base64').toString(), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: Readonly): string => Buffer.from(args[0], 'base64').toString(), BuiltInFunctions.verifyString), ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.UriComponent, - BuiltInFunctions.Apply((args: Readonly) => encodeURIComponent(args[0]), BuiltInFunctions.VerifyString), - ReturnType.String, - BuiltInFunctions.ValidateUnary), - new ExpressionEvaluator( - ExpressionType.Xml, - BuiltInFunctions.ApplyWithError((args: Readonly) => this.ToXml(args[0]), BuiltInFunctions.VerifyString), + BuiltInFunctions.apply((args: Readonly): string => encodeURIComponent(args[0]), BuiltInFunctions.verifyString), ReturnType.String, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.First, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => { + BuiltInFunctions.apply( + (args: any []): any => { let first: any; if (typeof args[0] === 'string' && args[0].length > 0) { first = args[0][0]; } if (args[0] instanceof Array && args[0].length > 0) { - first = Extensions.AccessIndex(args[0], 0).value; + first = Extensions.accessIndex(args[0], 0).value; } return first; }), ReturnType.Object, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Last, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => { + BuiltInFunctions.apply( + (args: any []): any => { let last: any; if (typeof args[0] === 'string' && args[0].length > 0) { last = args[0][args[0].length - 1]; } if (args[0] instanceof Array && args[0].length > 0) { - last = Extensions.AccessIndex(args[0], args[0].length - 1).value; + last = Extensions.accessIndex(args[0], args[0].length - 1).value; } return last; }), ReturnType.Object, - BuiltInFunctions.ValidateUnary), + BuiltInFunctions.validateUnary), new ExpressionEvaluator( ExpressionType.Json, - BuiltInFunctions.Apply((args: ReadonlyArray) => JSON.parse(args[0])), + BuiltInFunctions.apply((args: any []): any => JSON.parse(args[0])), ReturnType.String, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, undefined, ReturnType.String)), + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, undefined, ReturnType.String)), new ExpressionEvaluator( ExpressionType.AddProperty, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => { + BuiltInFunctions.apply( + (args: any []): any => { const temp: any = args[0]; temp[String(args[1])] = args[2]; return temp; }), ReturnType.Object, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, undefined, ReturnType.Object, ReturnType.String, ReturnType.Object)), + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, undefined, ReturnType.Object, ReturnType.String, ReturnType.Object)), new ExpressionEvaluator( ExpressionType.SetProperty, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => { + BuiltInFunctions.apply( + (args: any []): any => { const temp: any = args[0]; temp[String(args[1])] = args[2]; return temp; }), ReturnType.Object, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, undefined, ReturnType.Object, ReturnType.String, ReturnType.Object)), + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, undefined, ReturnType.Object, ReturnType.String, ReturnType.Object)), new ExpressionEvaluator( ExpressionType.RemoveProperty, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => { + BuiltInFunctions.apply( + (args: any []): any => { const temp: any = args[0]; delete temp[String(args[1])]; return temp; }), ReturnType.Object, - (expression: Expression): void => BuiltInFunctions.ValidateOrder(expression, undefined, ReturnType.Object, ReturnType.String)), + (expression: Expression): void => BuiltInFunctions.validateOrder(expression, undefined, ReturnType.Object, ReturnType.String)), new ExpressionEvaluator( ExpressionType.SetPathToValue, - this.SetPathToValue, + this.setPathToValue, ReturnType.Object, - this.ValidateBinary), - new ExpressionEvaluator(ExpressionType.Select, BuiltInFunctions.Foreach, ReturnType.Object, BuiltInFunctions.ValidateForeach), - new ExpressionEvaluator(ExpressionType.Foreach, BuiltInFunctions.Foreach, ReturnType.Object, BuiltInFunctions.ValidateForeach), - new ExpressionEvaluator(ExpressionType.Where, BuiltInFunctions.Where, ReturnType.Object, BuiltInFunctions.ValidateWhere), + this.validateBinary), + new ExpressionEvaluator(ExpressionType.Select, BuiltInFunctions.foreach, ReturnType.Object, BuiltInFunctions.validateForeach), + new ExpressionEvaluator(ExpressionType.Foreach, BuiltInFunctions.foreach, ReturnType.Object, BuiltInFunctions.validateForeach), + new ExpressionEvaluator(ExpressionType.Where, BuiltInFunctions.where, ReturnType.Object, BuiltInFunctions.validateWhere), //URI Parsing Functions - new ExpressionEvaluator(ExpressionType.UriHost, BuiltInFunctions.ApplyWithError((args: Readonly) => this.UriHost(args[0]), BuiltInFunctions.VerifyString), - ReturnType.String, BuiltInFunctions.ValidateUnary), - new ExpressionEvaluator(ExpressionType.UriPath, BuiltInFunctions.ApplyWithError((args: Readonly) => this.UriPath(args[0]), BuiltInFunctions.VerifyString), - ReturnType.String, BuiltInFunctions.ValidateUnary), + new ExpressionEvaluator(ExpressionType.UriHost, BuiltInFunctions.applyWithError((args: Readonly): any => this.uriHost(args[0]), BuiltInFunctions.verifyString), + ReturnType.String, BuiltInFunctions.validateUnary), + new ExpressionEvaluator(ExpressionType.UriPath, BuiltInFunctions.applyWithError((args: Readonly): any => this.uriPath(args[0]), BuiltInFunctions.verifyString), + ReturnType.String, BuiltInFunctions.validateUnary), new ExpressionEvaluator(ExpressionType.UriPathAndQuery, - BuiltInFunctions.ApplyWithError((args: Readonly) => this.UriPathAndQuery(args[0]), BuiltInFunctions.VerifyString), - ReturnType.String, BuiltInFunctions.ValidateUnary), - new ExpressionEvaluator(ExpressionType.UriQuery, BuiltInFunctions.ApplyWithError((args: Readonly) => this.UriQuery(args[0]), BuiltInFunctions.VerifyString), - ReturnType.String, BuiltInFunctions.ValidateUnary), - new ExpressionEvaluator(ExpressionType.UriPort, BuiltInFunctions.ApplyWithError((args: Readonly) => this.UriPort(args[0]), BuiltInFunctions.VerifyString), - ReturnType.String, BuiltInFunctions.ValidateUnary), - new ExpressionEvaluator(ExpressionType.UriScheme, BuiltInFunctions.ApplyWithError((args: Readonly) => this.UriScheme(args[0]), BuiltInFunctions.VerifyString), - ReturnType.String, BuiltInFunctions.ValidateUnary), - - new ExpressionEvaluator(ExpressionType.Coalesce, BuiltInFunctions.Apply((args: ReadonlyArray[]) => this.Coalesce(args)), - ReturnType.Object, BuiltInFunctions.ValidateAtLeastOne), - new ExpressionEvaluator(ExpressionType.XPath, BuiltInFunctions.ApplyWithError((args: ReadonlyArray[]) => this.XPath(args[0].toString(), args[1].toString())), - ReturnType.Object, (expr: Expression): void => BuiltInFunctions.ValidateOrder(expr, undefined, ReturnType.String, ReturnType.String)), - new ExpressionEvaluator(ExpressionType.JPath, BuiltInFunctions.ApplyWithError((args: ReadonlyArray[]) => this.JPath(args[0], args[1].toString())), - ReturnType.Object, (expr: Expression): void => BuiltInFunctions.ValidateOrder(expr, undefined, ReturnType.Object, ReturnType.String)), + BuiltInFunctions.applyWithError((args: Readonly): any => this.uriPathAndQuery(args[0]), BuiltInFunctions.verifyString), + ReturnType.String, BuiltInFunctions.validateUnary), + new ExpressionEvaluator(ExpressionType.UriQuery, BuiltInFunctions.applyWithError((args: Readonly): any => this.uriQuery(args[0]), BuiltInFunctions.verifyString), + ReturnType.String, BuiltInFunctions.validateUnary), + new ExpressionEvaluator(ExpressionType.UriPort, BuiltInFunctions.applyWithError((args: Readonly): any => this.uriPort(args[0]), BuiltInFunctions.verifyString), + ReturnType.String, BuiltInFunctions.validateUnary), + new ExpressionEvaluator(ExpressionType.UriScheme, BuiltInFunctions.applyWithError((args: Readonly): any => this.uriScheme(args[0]), BuiltInFunctions.verifyString), + ReturnType.String, BuiltInFunctions.validateUnary), + + new ExpressionEvaluator(ExpressionType.Coalesce, BuiltInFunctions.apply((args: any [][]): any => this.coalesce(args as any[])), + ReturnType.Object, BuiltInFunctions.validateAtLeastOne), + new ExpressionEvaluator(ExpressionType.JPath, BuiltInFunctions.applyWithError((args: any [][]): any => this.jPath(args[0], args[1].toString())), + ReturnType.Object, (expr: Expression): void => BuiltInFunctions.validateOrder(expr, undefined, ReturnType.Object, ReturnType.String)), // Regex expression functions new ExpressionEvaluator( ExpressionType.IsMatch, - BuiltInFunctions.ApplyWithError( - (args: ReadonlyArray) => { - let value: boolean = false; - let error: string; - if (args[0] === undefined || args[0] === '') { - value = false; - error = 'regular expression is empty.'; - } else { - const regex: RegExp = CommonRegex.CreateRegex(args[1]); - value = regex.test(args[0]); - } - - return {value, error}; + BuiltInFunctions.applyWithError( + (args: any []): any => { + let value = false; + let error: string; + if (args[0] === undefined || args[0] === '') { + value = false; + error = 'regular expression is empty.'; + } else { + const regex: RegExp = CommonRegex.CreateRegex(args[1]); + value = regex.test(args[0]); + } + + return {value, error}; }), ReturnType.Boolean, - BuiltInFunctions.ValidateIsMatch), + BuiltInFunctions.validateIsMatch), // Shorthand functions - new ExpressionEvaluator(ExpressionType.Callstack, this.Callstack, ReturnType.Object, this.ValidateUnary), + new ExpressionEvaluator(ExpressionType.Callstack, this.callstack, ReturnType.Object, this.validateUnary), new ExpressionEvaluator( ExpressionType.SimpleEntity, - BuiltInFunctions.Apply( - (args: ReadonlyArray) => { + BuiltInFunctions.apply( + (args: any []): any => { let result: any = args[0]; while (Array.isArray(result) && result.length === 1) { result = result[0]; @@ -2729,12 +2720,12 @@ export class BuiltInFunctions { return result; }), ReturnType.Object, - this.ValidateUnary) + this.validateUnary) ]; const lookup: Map = new Map(); - functions.forEach((func: ExpressionEvaluator) => { - lookup.set(func.Type, func); + functions.forEach((func: ExpressionEvaluator): void => { + lookup.set(func.type, func); }); // Math aliases diff --git a/libraries/botframework-expressions/src/commonRegex.ts b/libraries/botframework-expressions/src/commonRegex.ts index c723e03512..fc7385e754 100644 --- a/libraries/botframework-expressions/src/commonRegex.ts +++ b/libraries/botframework-expressions/src/commonRegex.ts @@ -20,21 +20,21 @@ export class CommonRegex { if (pattern !== undefined && pattern !== '' && this.regexCache.has(pattern)) { result = this.regexCache.get(pattern); } else { - if (pattern === undefined || pattern === '' || !this.IsCommonRegex(pattern)) { + if (pattern === undefined || pattern === '' || !this.isCommonRegex(pattern)) { throw new Error(`A regular expression parsing error occurred.`); } - result = this.GetRegExpFromString(pattern); + result = this.getRegExpFromString(pattern); this.regexCache.set(pattern, result); } return result; } - private static GetRegExpFromString(pattern: string): RegExp { + private static getRegExpFromString(pattern: string): RegExp { const flags: string[] = ['(?i)', '(?m)', '(?s)']; - let flag: string = ''; - flags.forEach((e: string) => { + let flag = ''; + flags.forEach((e: string): void => { if (pattern.includes(e)) { flag += e.substr(2, 1); pattern = pattern.replace(e, ''); @@ -43,17 +43,17 @@ export class CommonRegex { let regexp: RegExp; if (flag !== '') { - regexp = new RegExp(`${pattern}`, flag); + regexp = new RegExp(`${ pattern }`, flag); } else { - regexp = new RegExp(`${pattern}`); + regexp = new RegExp(`${ pattern }`); } return regexp; } - private static IsCommonRegex(pattern: string): boolean { + private static isCommonRegex(pattern: string): boolean { try { - this.AntlrParse(pattern); + this.antlrParse(pattern); } catch (Exception) { return false; } @@ -61,30 +61,31 @@ export class CommonRegex { return true; } - private static AntlrParse(pattern: string): ParseTree { + private static antlrParse(pattern: string): ParseTree { const inputStream: ANTLRInputStream = new ANTLRInputStream(pattern); const lexer: CommonRegexLexer = new CommonRegexLexer(inputStream); const tokenStream: CommonTokenStream = new CommonTokenStream(lexer); const parser: CommonRegexParser = new CommonRegexParser(tokenStream); parser.removeErrorListeners(); + // tslint:disable-next-line: no-use-before-declare parser.addErrorListener(ErrorListener.Instance); parser.buildParseTree = true; return parser.parse(); } - } +} - // tslint:disable-next-line: completed-docs +// tslint:disable-next-line: completed-docs export class ErrorListener implements ANTLRErrorListener { - public static readonly Instance: ErrorListener = new ErrorListener(); + public static readonly Instance: ErrorListener = new ErrorListener(); - public syntaxError( + public syntaxError( _recognizer: Recognizer, _offendingSymbol: T, line: number, charPositionInLine: number, msg: string, _e: RecognitionException | undefined): void { - throw Error(`Regular expression is invalid.`); - } - } + throw Error(`Regular expression is invalid.`); + } +} diff --git a/libraries/botframework-expressions/src/constant.ts b/libraries/botframework-expressions/src/constant.ts index 05523b73c3..a6acbd86f3 100644 --- a/libraries/botframework-expressions/src/constant.ts +++ b/libraries/botframework-expressions/src/constant.ts @@ -18,15 +18,15 @@ export class Constant extends Expression { /** * Constant value. */ - public get Value(): any { + public get value(): any { return this._value; } - public set Value(theValue: any) { - this.Evaluator.ReturnType = + public set value(theValue: any) { + this.evaluator.returnType = typeof theValue === 'string' ? ReturnType.String : typeof theValue === 'boolean' ? ReturnType.Boolean - : typeof theValue === 'number' && !Number.isNaN(theValue) ? ReturnType.Number + : typeof theValue === 'number' && !Number.isNaN(theValue) ? ReturnType.Number : ReturnType.Object; this._value = theValue; @@ -35,22 +35,22 @@ export class Constant extends Expression { private _value: any; public constructor(value: any) { super(ExpressionType.Constant, new ExpressionEvaluator(ExpressionType.Constant, - (expression: Expression, state: any): { value: any; error: string } => { - return { value: (expression).Value, error: undefined }; + (expression: Expression): { value: any; error: string } => { + return { value: (expression as Constant).value, error: undefined }; } )); - this.Value = value; + this.value = value; } public toString(): string { - if (this.Value === undefined) { + if (this.value === undefined) { return 'null'; } - if (typeof this.Value === 'string') { - return `'${this.Value}'`; + if (typeof this.value === 'string') { + return `'${ this.value }'`; } - return this.Value === undefined ? undefined : this.Value.toString(); + return this.value === undefined ? undefined : this.value.toString(); } } diff --git a/libraries/botframework-expressions/src/expression.ts b/libraries/botframework-expressions/src/expression.ts index c6bacbaaf8..50dc3431c7 100644 --- a/libraries/botframework-expressions/src/expression.ts +++ b/libraries/botframework-expressions/src/expression.ts @@ -8,11 +8,11 @@ */ import { BuiltInFunctions } from './builtInFunction'; import { Constant } from './constant'; -import { EvaluateExpressionDelegate, ExpressionEvaluator } from './expressionEvaluator'; +import { ExpressionEvaluator } from './expressionEvaluator'; import { ExpressionType } from './expressionType'; /** - * Type expected from evalating an expression. + * Type expected from evaluating an expression. */ export enum ReturnType { /** @@ -46,23 +46,23 @@ export class Expression { /** * Expected result of evaluating expression. */ - public get ReturnType(): ReturnType { - return this.Evaluator.ReturnType; + public get returnType(): ReturnType { + return this.evaluator.returnType; } /** * Type of expression. */ - public get Type(): string { - return this.Evaluator.Type; + public get type(): string { + return this.evaluator.type; } /** * Children expressions. */ - public Children: Expression[]; + public children: Expression[]; - protected readonly Evaluator: ExpressionEvaluator; + protected readonly evaluator: ExpressionEvaluator; /** * xpression constructor. @@ -71,8 +71,8 @@ export class Expression { * @param children Child expressions. */ public constructor(type: string, evaluator: ExpressionEvaluator, ...children: Expression[]) { - this.Evaluator = evaluator === undefined ? BuiltInFunctions.Lookup(type) : evaluator; - this.Children = children; + this.evaluator = evaluator === undefined ? BuiltInFunctions.lookup(type) : evaluator; + this.children = children; } /** @@ -81,82 +81,25 @@ export class Expression { * @param evaluator Information about how to validate and evaluate expression. * @param children Child expressions. */ - public static MakeExpression(type: string, evaluator: ExpressionEvaluator, ...children: Expression[]): Expression { + public static makeExpression(type: string, evaluator: ExpressionEvaluator, ...children: Expression[]): Expression { const expr: Expression = new Expression(type, evaluator, ...children); expr.validate(); return expr; } - /** - * Construct an expression from a EvaluateExpressionDelegate - * @param func Function to create an expression from. - */ - public static LambaExpression(func: EvaluateExpressionDelegate): Expression { - return new Expression(ExpressionType.Lambda, new ExpressionEvaluator(ExpressionType.Lambda, func)); - } - - /** - * Construct an expression from a lamba expression over the state. - * Exceptions will be caught and surfaced as an error string. - * @param func ambda expression to evaluate. - * @returns New expression. - */ - public static Lambda(func: (arg0: any) => any): Expression { - return new Expression(ExpressionType.Lambda, new ExpressionEvaluator(ExpressionType.Lambda, - (_expression: Expression, state: any): { value: any; error: string } => { - let value: any; - let error: string; - try { - value = func(state); - } catch (funcError) { - error = funcError; - } - - return { value, error }; - } - )); - } - - /** - * Construct and validate an And expression. - * @param children Child clauses. - * @returns New expression. - */ - public static AndExpression(...children: Expression[]): Expression { - return Expression.MakeExpression(ExpressionType.And, undefined, ...children); - } - - /** - * Construct and validate an Or expression. - * @param children Child clauses. - * @returns New expression. - */ - public static OrExpression(...children: Expression[]): Expression { - return Expression.MakeExpression(ExpressionType.Or, undefined, ...children); - } - - /** - * Construct and validate an Not expression. - * @param children Child clauses. - * @returns New expression. - */ - public static NotExpression(child: Expression): Expression { - return Expression.MakeExpression(ExpressionType.Not, undefined, child); - } - /** * Validate immediate expression. */ // tslint:disable-next-line: no-void-expression - public validate = (): void => this.Evaluator.ValidateExpression(this); + public validate = (): void => this.evaluator.validateExpression(this); /** * Recursively validate the expression tree. */ public validateTree(): void { this.validate(); - for (const child of this.Children) { + for (const child of this.children) { child.validateTree(); } } @@ -167,48 +110,44 @@ export class Expression { * @param state */ public tryEvaluate(state: any): { value: any; error: string } { - return this.Evaluator.TryEvaluate(this, state); + return this.evaluator.tryEvaluate(this, state); } public toString(): string { - return this.ToString(this.Type); - } - - protected ToString(name: string): string { - let builder: string = ''; - let valid: boolean = false; + let builder = ''; + let valid = false; // Special support for memory paths - if (this.Type === ExpressionType.Accessor && this.Children.length >= 1) { - if (this.Children[0] instanceof Constant) { - const prop: any = ((this.Children[0])).Value; + if (this.type === ExpressionType.Accessor && this.children.length >= 1) { + if (this.children[0] instanceof Constant) { + const prop: any = (this.children[0] as Constant).value; if (typeof prop === 'string') { - if (this.Children.length === 1) { + if (this.children.length === 1) { valid = true; builder = builder.concat(prop); - } else if (this.Children.length === 2) { + } else if (this.children.length === 2) { valid = true; - builder = builder.concat(this.Children[1].toString(), '.', prop); + builder = builder.concat(this.children[1].toString(), '.', prop); } } } - } else if (this.Type === ExpressionType.Element && this.Children.length === 2) { + } else if (this.type === ExpressionType.Element && this.children.length === 2) { valid = true; - builder = builder.concat(this.Children[0].toString(), '[', this.Children[1].toString(), ']'); + builder = builder.concat(this.children[0].toString(), '[', this.children[1].toString(), ']'); } if (!valid) { - const infix: boolean = this.Type.length > 0 && !new RegExp(/[a-z]/i).test(this.Type[0]) && this.Children.length >= 2; + const infix: boolean = this.type.length > 0 && !new RegExp(/[a-z]/i).test(this.type[0]) && this.children.length >= 2; if (!infix) { - builder = builder.concat(this.Type); + builder = builder.concat(this.type); } builder = builder.concat('('); - let first: boolean = true; - for (const child of this.Children) { + let first = true; + for (const child of this.children) { if (first) { first = false; } else { if (infix) { - builder = builder.concat(' ', this.Type, ' '); + builder = builder.concat(' ', this.type, ' '); } else { builder = builder.concat(', '); } diff --git a/libraries/botframework-expressions/src/expressionEvaluator.ts b/libraries/botframework-expressions/src/expressionEvaluator.ts index f6fa14d2a0..a9467b16f9 100644 --- a/libraries/botframework-expressions/src/expressionEvaluator.ts +++ b/libraries/botframework-expressions/src/expressionEvaluator.ts @@ -33,11 +33,11 @@ export class ExpressionEvaluator { /** * Gets the expression type for evaluator. */ - public Type: string; + public type: string; /** * Type expected by evaluating the expression. */ - public ReturnType: ReturnType; + public returnType: ReturnType; private readonly _validator: ValidateExpressionDelegate; private readonly _evaluator: EvaluateExpressionDelegate; @@ -53,9 +53,9 @@ export class ExpressionEvaluator { evaluator: EvaluateExpressionDelegate, returnType: ReturnType = ReturnType.Object, validator?: ValidateExpressionDelegate) { - this.Type = type; + this.type = type; this._evaluator = evaluator; - this.ReturnType = returnType; + this.returnType = returnType; // tslint:disable-next-line: no-empty this._validator = validator === undefined ? ((expr: Expression): any => { }) : validator; } @@ -65,11 +65,11 @@ export class ExpressionEvaluator { * @param expression Expression to evaluate. * @param state Global state information. */ - public TryEvaluate = (expression: Expression, state: any): { value: any; error: string } => this._evaluator(expression, state); + public tryEvaluate = (expression: Expression, state: any): { value: any; error: string } => this._evaluator(expression, state); /** * Validate an expression. * @param expression Expression to validate. */ // tslint:disable-next-line: informative-docs - public ValidateExpression = (expression: Expression): void => this._validator(expression); + public validateExpression = (expression: Expression): void => this._validator(expression); } diff --git a/libraries/botframework-expressions/src/expressionParser.ts b/libraries/botframework-expressions/src/expressionParser.ts index 22dc584362..294c482201 100644 --- a/libraries/botframework-expressions/src/expressionParser.ts +++ b/libraries/botframework-expressions/src/expressionParser.ts @@ -11,7 +11,7 @@ import { Expression } from './expression'; /** * Interface to parse a string into an Expression */ -export interface IExpressionParser { +export interface ExpressionParserInterface { /** * Parse a string into an Expression * @param expression Expression to parse. diff --git a/libraries/botframework-expressions/src/expressionType.ts b/libraries/botframework-expressions/src/expressionType.ts index b3ebe2f7fd..32ea642084 100644 --- a/libraries/botframework-expressions/src/expressionType.ts +++ b/libraries/botframework-expressions/src/expressionType.ts @@ -102,8 +102,6 @@ export class ExpressionType { public static readonly Base64ToBinary: string = 'base64ToBinary'; public static readonly Base64ToString: string = 'base64ToString'; public static readonly UriComponent: string = 'uriComponent'; - public static readonly Xml: string = 'xml'; - // Memory public static readonly Accessor: string = 'Accessor'; public static readonly Element: string = 'Element'; @@ -126,7 +124,6 @@ export class ExpressionType { // Misc public static readonly Constant: string = 'Constant'; - public static readonly Lambda: string = 'Lambda'; public static readonly If: string = 'if'; public static readonly Rand: string = 'rand'; @@ -137,7 +134,6 @@ export class ExpressionType { public static readonly SetProperty: string = 'setProperty'; public static readonly GetProperty: string = 'getProperty'; public static readonly Coalesce: string = 'coalesce'; - public static readonly XPath: string = 'xPath'; public static readonly JPath: string = 'jPath'; public static readonly SetPathToValue: string = 'setPathToValue'; diff --git a/libraries/botframework-expressions/src/extensions.ts b/libraries/botframework-expressions/src/extensions.ts index afc2ec0937..33e705e2a0 100644 --- a/libraries/botframework-expressions/src/extensions.ts +++ b/libraries/botframework-expressions/src/extensions.ts @@ -22,15 +22,15 @@ export class Extensions { * @param expression Expression to get references from. * @returns Hash set of the static reference paths. */ - public static References(expression: Expression): ReadonlyArray { + public static references(expression: Expression): string[] { let references: Set = new Set(); - const path: string = this.ReferenceWalk(expression, references); + const path: string = this.referenceWalk(expression, references); if (path !== undefined) { references = references.add(path); } const filteredReferences: Set = new Set(); - references.forEach((x: string) => { + references.forEach((x: string): void => { if (!x.startsWith('$local.')) { if (x.startsWith('$global.')) { filteredReferences.add(x.substr(8)); @@ -50,47 +50,47 @@ export class Extensions { * @param extension If present, called to override lookup for things like template expansion. * @returns Accessor path of expression. */ - public static ReferenceWalk(expression: Expression, references: Set, - extension?: (arg0: Expression) => boolean): string { + public static referenceWalk(expression: Expression, references: Set, + extension?: (arg0: Expression) => boolean): string { let path: string; if (extension === undefined || !extension(expression)) { - const children: Expression[] = expression.Children; - if (expression.Type === ExpressionType.Accessor) { - const prop: string = (((children[0])).Value); + const children: Expression[] = expression.children; + if (expression.type === ExpressionType.Accessor) { + const prop: string = (children[0] as Constant).value as string; if (children.length === 1) { path = prop; } if (children.length === 2) { - path = Extensions.ReferenceWalk(children[1], references, extension); + path = Extensions.referenceWalk(children[1], references, extension); if (path !== undefined) { path = path.concat('.', prop); } - // if path is null we still keep it null, won't append prop - // because for example, first(items).x should not return x as refs + // if path is null we still keep it null, won't append prop + // because for example, first(items).x should not return x as refs } - } else if (expression.Type === ExpressionType.Element) { - path = Extensions.ReferenceWalk(children[0], references, extension); + } else if (expression.type === ExpressionType.Element) { + path = Extensions.referenceWalk(children[0], references, extension); if (path !== undefined) { if (children[1] instanceof Constant) { - const cnst: Constant = children[1]; - if (cnst.ReturnType === ReturnType.String) { - path += `.${cnst.Value}`; + const cnst: Constant = children[1] as Constant; + if (cnst.returnType === ReturnType.String) { + path += `.${ cnst.value }`; } else { - path += `[${cnst.Value}]`; + path += `[${ cnst.value }]`; } } else { references.add(path); } } - const idxPath: string = Extensions.ReferenceWalk(children[1], references, extension); + const idxPath: string = Extensions.referenceWalk(children[1], references, extension); if (idxPath !== undefined) { references.add(idxPath); } } else { - for (const child of expression.Children) { - const childPath: string = Extensions.ReferenceWalk(child, references, extension); + for (const child of expression.children) { + const childPath: string = Extensions.referenceWalk(child, references, extension); if (childPath !== undefined) { references.add(childPath); } @@ -107,7 +107,7 @@ export class Extensions { * @param property Property to lookup. * @returns Value and error information if any. */ - public static AccessProperty(instance: any, property: string): { value: any; error: string } { + public static accessProperty(instance: any, property: string): { value: any; error: string } { // NOTE: This returns null rather than an error if property is not present if (instance === null || instance === undefined) { return { value: undefined, error: undefined }; @@ -117,17 +117,17 @@ export class Extensions { // tslint:disable-next-line: prefer-const let error: string; // todo, Is there a better way to access value, or any case is not listed below? - if (instance instanceof Map && >instance !== undefined) { - const instanceMap: Map = >instance; + if (instance instanceof Map && instance as Map!== undefined) { + const instanceMap: Map = instance as Map; value = instanceMap.get(property); if (value === undefined) { - const prop: string = Array.from(instanceMap.keys()).find((k: string) => k.toLowerCase() === property.toLowerCase()); + const prop: string = Array.from(instanceMap.keys()).find((k: string): boolean => k.toLowerCase() === property.toLowerCase()); if (prop !== undefined) { value = instanceMap.get(prop); } } } else { - const prop: string = Object.keys(instance).find((k: string) => k.toLowerCase() === property.toLowerCase()); + const prop: string = Object.keys(instance).find((k: string): boolean => k.toLowerCase() === property.toLowerCase()); if (prop !== undefined) { value = instance[prop]; } @@ -143,7 +143,7 @@ export class Extensions { * @param value Value to set. * @returns set value. */ - public static SetProperty(instance: any, property: string, value: any): any { + public static setProperty(instance: any, property: string, value: any): any { const result: any = value; if (instance instanceof Map) { instance.set(property, value); @@ -160,7 +160,7 @@ export class Extensions { * @param property Property to lookup. * @returns Value and error information if any. */ - public static AccessIndex(instance: any, index: number): { value: any; error: string } { + public static accessIndex(instance: any, index: number): { value: any; error: string } { // NOTE: This returns null rather than an error if property is not present if (instance === null || instance === undefined) { return { value: undefined, error: undefined }; @@ -169,11 +169,11 @@ export class Extensions { let value: any; let error: string; - let count: number = -1; + let count = -1; if (instance instanceof Array) { count = (instance).length; } else if (instance instanceof Map) { - count = (>instance).size; + count = (instance as Map).size; } const indexer: string[] = Object.keys(instance); if (count !== -1 && indexer.length > 0) { @@ -181,10 +181,10 @@ export class Extensions { const idyn: any = instance; value = idyn[index]; } else { - error = `${index} is out of range for ${instance}`; + error = `${ index } is out of range for ${ instance }`; } } else { - error = `${instance} is not a collection.`; + error = `${ instance } is not a collection.`; } return { value, error }; diff --git a/libraries/botframework-expressions/src/generated/CommonRegexLexer.ts b/libraries/botframework-expressions/src/generated/CommonRegexLexer.ts index 966c089656..acff745684 100644 --- a/libraries/botframework-expressions/src/generated/CommonRegexLexer.ts +++ b/libraries/botframework-expressions/src/generated/CommonRegexLexer.ts @@ -1,3 +1,10 @@ +/** + * @module botframework-expressions + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ // Generated from ../CommonRegex.g4 by ANTLR 4.6-SNAPSHOT diff --git a/libraries/botframework-expressions/src/generated/CommonRegexListener.ts b/libraries/botframework-expressions/src/generated/CommonRegexListener.ts index f76100372c..090d6d7898 100644 --- a/libraries/botframework-expressions/src/generated/CommonRegexListener.ts +++ b/libraries/botframework-expressions/src/generated/CommonRegexListener.ts @@ -1,3 +1,10 @@ +/** + * @module botframework-expressions + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ // Generated from ../CommonRegex.g4 by ANTLR 4.6-SNAPSHOT diff --git a/libraries/botframework-expressions/src/generated/CommonRegexParser.ts b/libraries/botframework-expressions/src/generated/CommonRegexParser.ts index 86dd2f39b1..836e615b21 100644 --- a/libraries/botframework-expressions/src/generated/CommonRegexParser.ts +++ b/libraries/botframework-expressions/src/generated/CommonRegexParser.ts @@ -1,3 +1,10 @@ +/** + * @module botframework-expressions + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ // Generated from ../CommonRegex.g4 by ANTLR 4.6-SNAPSHOT diff --git a/libraries/botframework-expressions/src/generated/CommonRegexVisitor.ts b/libraries/botframework-expressions/src/generated/CommonRegexVisitor.ts index 5c0b4c5135..5837b3f142 100644 --- a/libraries/botframework-expressions/src/generated/CommonRegexVisitor.ts +++ b/libraries/botframework-expressions/src/generated/CommonRegexVisitor.ts @@ -1,3 +1,10 @@ +/** + * @module botframework-expressions + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ // Generated from ../CommonRegex.g4 by ANTLR 4.6-SNAPSHOT diff --git a/libraries/botframework-expressions/src/parser/expressionEngine.ts b/libraries/botframework-expressions/src/parser/expressionEngine.ts index b5bae86dca..1ab9a19497 100644 --- a/libraries/botframework-expressions/src/parser/expressionEngine.ts +++ b/libraries/botframework-expressions/src/parser/expressionEngine.ts @@ -13,7 +13,7 @@ import { BuiltInFunctions } from '../builtInFunction'; import { Constant } from '../constant'; import { Expression } from '../expression'; import { EvaluatorLookup } from '../expressionEvaluator'; -import { IExpressionParser } from '../expressionParser'; +import { ExpressionParserInterface } from '../expressionParser'; import { ExpressionType } from '../expressionType'; import { ExpressionLexer, ExpressionParser, ExpressionVisitor } from './generated'; import * as ep from './generated/ExpressionParser'; @@ -23,12 +23,12 @@ import { Util } from './util'; /** * Parser to turn strings into Expression */ -export class ExpressionEngine implements IExpressionParser { +export class ExpressionEngine implements ExpressionParserInterface { public readonly EvaluatorLookup: EvaluatorLookup; // tslint:disable-next-line: typedef private readonly ExpressionTransformer = class extends AbstractParseTreeVisitor implements ExpressionVisitor { - private readonly ShorthandPrefixMap : Map = new Map([ + private readonly ShorthandPrefixMap: Map = new Map([ ['#', 'turn.recognized.intents'], ['@', 'turn.recognized.entities'], ['@@', 'turn.recognized.entities'], @@ -44,7 +44,7 @@ export class ExpressionEngine implements IExpressionParser { this._lookup = lookup; } - public Transform = (context: ParseTree): Expression => this.visit(context); + public transform = (context: ParseTree): Expression => this.visit(context); public visitUnaryOpExp(context: ep.UnaryOpExpContext): Expression { const unaryOperationName: string = context.getChild(0).text; @@ -66,11 +66,11 @@ export class ExpressionEngine implements IExpressionParser { public visitShorthandAccessorExp(context: ep.ShorthandAccessorExpContext): Expression { if (context.primaryExpression() instanceof ep.ShorthandAtomContext) { - const shorthandAtom: ep.ShorthandAtomContext = (context.primaryExpression()); + const shorthandAtom: ep.ShorthandAtomContext = context.primaryExpression() as ep.ShorthandAtomContext; const shorthandMark: string = shorthandAtom.text; if (!this.ShorthandPrefixMap.has(shorthandMark)) { - throw new Error(`${shorthandMark} is not a shorthand`); + throw new Error(`${ shorthandMark } is not a shorthand`); } const property: Constant = new Constant(context.IDENTIFIER().text); @@ -79,7 +79,7 @@ export class ExpressionEngine implements IExpressionParser { return this.MakeExpression(ExpressionType.Callstack, property); } - const accessorExpression: Expression = this.Transform(ExpressionEngine.AntlrParse(this.ShorthandPrefixMap.get(shorthandMark))); + const accessorExpression: Expression = this.transform(ExpressionEngine.antlrParse(this.ShorthandPrefixMap.get(shorthandMark))); const expression: Expression = this.MakeExpression(ExpressionType.Accessor, property, accessorExpression); return shorthandMark === '@' ? this.MakeExpression(ExpressionType.SimpleEntity, expression) : expression; @@ -87,7 +87,7 @@ export class ExpressionEngine implements IExpressionParser { } public visitFuncInvokeExp(context: ep.FuncInvokeExpContext): Expression { - const parameters: Expression[] = this.ProcessArgsList(context.argsList()); + const parameters: Expression[] = this.processArgsList(context.argsList()); // Remove the check to check primaryExpression is just an IDENTIFIER to support "." in template name const functionName: string = context.primaryExpression().text; @@ -117,18 +117,18 @@ export class ExpressionEngine implements IExpressionParser { const property: Expression = this.visit(context.expression()); if (context.primaryExpression() instanceof ep.ShorthandAtomContext) { - const shorthandAtom: ep.ShorthandAtomContext = (context.primaryExpression()); + const shorthandAtom: ep.ShorthandAtomContext = context.primaryExpression() as ep.ShorthandAtomContext; const shorthandMark: string = shorthandAtom.text; if (!this.ShorthandPrefixMap.has(shorthandMark)) { - throw new Error(`${shorthandMark} is not a shorthand`); + throw new Error(`${ shorthandMark } is not a shorthand`); } if (shorthandMark === '^') { return this.MakeExpression(ExpressionType.Callstack, property); } - instance = this.Transform(ExpressionEngine.AntlrParse(this.ShorthandPrefixMap.get(shorthandMark))); + instance = this.transform(ExpressionEngine.antlrParse(this.ShorthandPrefixMap.get(shorthandMark))); const expression: Expression = this.MakeExpression(ExpressionType.Element, instance, property); return shorthandMark === '@' ? this.MakeExpression(ExpressionType.SimpleEntity, expression) : expression; @@ -142,7 +142,7 @@ export class ExpressionEngine implements IExpressionParser { public visitMemberAccessExp(context: ep.MemberAccessExpContext): Expression { const property: string = context.IDENTIFIER().text; if (context.primaryExpression() instanceof ep.ShorthandAtomContext) { - throw new Error(`${context.text} is not a valid shorthand. Maybe you mean '${context.primaryExpression().text}${property}'?`); + throw new Error(`${ context.text } is not a valid shorthand. Maybe you mean '${ context.primaryExpression().text }${ property }'?`); } const instance: Expression = this.visit(context.primaryExpression()); @@ -155,7 +155,7 @@ export class ExpressionEngine implements IExpressionParser { return new Constant(numberValue); } - throw Error(`${context.text} is not a number.`); + throw Error(`${ context.text } is not a number.`); } public visitParenthesisExp = (context: ep.ParenthesisExpContext): Expression => this.visit(context.expression()); @@ -163,18 +163,18 @@ export class ExpressionEngine implements IExpressionParser { public visitStringAtom(context: ep.StringAtomContext): Expression { const text: string = context.text; if (text.startsWith('\'')) { - return new Constant(Util.Unescape(Util.Trim(context.text, '\''))); + return new Constant(Util.unescape(Util.trim(context.text, '\''))); } else { // start with "" - return new Constant(Util.Unescape(Util.Trim(context.text, '"'))); + return new Constant(Util.unescape(Util.trim(context.text, '"'))); } } protected defaultResult = (): Expression => new Constant(''); private readonly MakeExpression = (type: string, ...children: Expression[]): Expression => - Expression.MakeExpression(type, this._lookup(type), ...children) + Expression.makeExpression(type, this._lookup(type), ...children) - private ProcessArgsList(context: ep.ArgsListContext): Expression[] { + private processArgsList(context: ep.ArgsListContext): Expression[] { const result: Expression[] = []; if (context !== undefined) { for (const expression of context.expression()) { @@ -187,10 +187,10 @@ export class ExpressionEngine implements IExpressionParser { }; public constructor(lookup?: EvaluatorLookup) { - this.EvaluatorLookup = lookup === undefined ? BuiltInFunctions.Lookup : lookup; + this.EvaluatorLookup = lookup === undefined ? BuiltInFunctions.lookup : lookup; } - protected static AntlrParse(expression: string): ParseTree { + protected static antlrParse(expression: string): ParseTree { const inputStream: ANTLRInputStream = new ANTLRInputStream(expression); const lexer: ExpressionLexer = new ExpressionLexer(inputStream); const tokenStream: CommonTokenStream = new CommonTokenStream(lexer); @@ -212,7 +212,7 @@ export class ExpressionEngine implements IExpressionParser { if (expression === undefined || expression === null || expression === '') { return new Constant(''); } else { - return new this.ExpressionTransformer(this.EvaluatorLookup).Transform(ExpressionEngine.AntlrParse(expression)); + return new this.ExpressionTransformer(this.EvaluatorLookup).transform(ExpressionEngine.antlrParse(expression)); } } } diff --git a/libraries/botframework-expressions/src/parser/generated/ExpressionLexer.ts b/libraries/botframework-expressions/src/parser/generated/ExpressionLexer.ts index dccc25d718..bdf1a2e1d8 100644 --- a/libraries/botframework-expressions/src/parser/generated/ExpressionLexer.ts +++ b/libraries/botframework-expressions/src/parser/generated/ExpressionLexer.ts @@ -1,3 +1,10 @@ +/** + * @module botframework-expressions + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ // Generated from ../Expression.g4 by ANTLR 4.6-SNAPSHOT diff --git a/libraries/botframework-expressions/src/parser/generated/ExpressionListener.ts b/libraries/botframework-expressions/src/parser/generated/ExpressionListener.ts index 1234f91a53..d291d35739 100644 --- a/libraries/botframework-expressions/src/parser/generated/ExpressionListener.ts +++ b/libraries/botframework-expressions/src/parser/generated/ExpressionListener.ts @@ -1,3 +1,10 @@ +/** + * @module botframework-expressions + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ // Generated from ../Expression.g4 by ANTLR 4.6-SNAPSHOT diff --git a/libraries/botframework-expressions/src/parser/generated/ExpressionParser.ts b/libraries/botframework-expressions/src/parser/generated/ExpressionParser.ts index 2b30b57130..f5f5673558 100644 --- a/libraries/botframework-expressions/src/parser/generated/ExpressionParser.ts +++ b/libraries/botframework-expressions/src/parser/generated/ExpressionParser.ts @@ -1,3 +1,10 @@ +/** + * @module botframework-expressions + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ // Generated from ../Expression.g4 by ANTLR 4.6-SNAPSHOT diff --git a/libraries/botframework-expressions/src/parser/generated/ExpressionVisitor.ts b/libraries/botframework-expressions/src/parser/generated/ExpressionVisitor.ts index ca349d0f4d..a2b7ca3578 100644 --- a/libraries/botframework-expressions/src/parser/generated/ExpressionVisitor.ts +++ b/libraries/botframework-expressions/src/parser/generated/ExpressionVisitor.ts @@ -1,3 +1,10 @@ +/** + * @module botframework-expressions + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ // Generated from ../Expression.g4 by ANTLR 4.6-SNAPSHOT diff --git a/libraries/botframework-expressions/src/parser/parseErrorListener.ts b/libraries/botframework-expressions/src/parser/parseErrorListener.ts index 5f9730d7e2..e3ba79efa5 100644 --- a/libraries/botframework-expressions/src/parser/parseErrorListener.ts +++ b/libraries/botframework-expressions/src/parser/parseErrorListener.ts @@ -12,12 +12,12 @@ export class ParseErrorListener implements ANTLRErrorListener { public static readonly Instance: ParseErrorListener = new ParseErrorListener(); public syntaxError( - _recognizer: Recognizer, - _offendingSymbol: T, - line: number, - charPositionInLine: number, - msg: string, - _e: RecognitionException | undefined): void { - throw Error(`syntax error at line ${line}:${charPositionInLine} ${msg}`); + _recognizer: Recognizer, + _offendingSymbol: T, + line: number, + charPositionInLine: number, + msg: string, + _e: RecognitionException | undefined): void { + throw Error(`syntax error at line ${ line }:${ charPositionInLine } ${ msg }`); } } diff --git a/libraries/botframework-expressions/src/parser/util.ts b/libraries/botframework-expressions/src/parser/util.ts index 7ffa6b70a2..21699d7f48 100644 --- a/libraries/botframework-expressions/src/parser/util.ts +++ b/libraries/botframework-expressions/src/parser/util.ts @@ -10,7 +10,7 @@ * util class */ export class Util { - public static Trim(str: string, char: string): string { + public static trim(str: string, char: string): string { if (char !== undefined) { return str.replace(new RegExp(''.concat('^\\', char, '+|\\', char, '+$'), 'g'), ''); } @@ -18,14 +18,14 @@ export class Util { return str.trim(); } - public static Unescape(str: string): string { + public static unescape(str: string): string { if (str !== undefined) { str = str.replace(/\\\\/g, '\\') - .replace(/\\n/g, '\n') - .replace(/\\r/g, '\r') - .replace(/\\t/g, '\t') - .replace(/\\"/g, '"') - .replace(/\\'/g, '\''); + .replace(/\\n/g, '\n') + .replace(/\\r/g, '\r') + .replace(/\\t/g, '\t') + .replace(/\\"/g, '"') + .replace(/\\'/g, '\''); } return str; diff --git a/libraries/botframework-expressions/src/timeZoneConverter.ts b/libraries/botframework-expressions/src/timeZoneConverter.ts index e385a4b463..24130ad43b 100644 --- a/libraries/botframework-expressions/src/timeZoneConverter.ts +++ b/libraries/botframework-expressions/src/timeZoneConverter.ts @@ -10,8 +10,8 @@ * Convert TimeZone between Windows and Iana. */ export class TimeZoneConverter { - private static readonly ianaToWindows: Map = new Map(); - private static readonly windowsToIana: Map = new Map(); + private static readonly ianaToWindowsMap: Map = new Map(); + private static readonly windowsToIanaMap: Map = new Map(); private static readonly validTimezonStr: string [] = []; private static readonly seperator: string = ' '; private static readonly mappingString: string = 'AUS Central Standard Time,001,Australia/Darwin\ @@ -524,31 +524,31 @@ export class TimeZoneConverter { Yakutsk Standard Time,001,Asia/Yakutsk\ Yakutsk Standard Time,RU,Asia/Yakutsk Asia/Khandyga'; - public static InnaToWindows(ianaTimeZoneId: string): string { - this.LoadData(); - if (this.ianaToWindows.has(ianaTimeZoneId)) { - return this.ianaToWindows.get(ianaTimeZoneId); + public static ianaToWindows(ianaTimeZoneId: string): string { + this.loadData(); + if (this.ianaToWindowsMap.has(ianaTimeZoneId)) { + return this.ianaToWindowsMap.get(ianaTimeZoneId); } return ianaTimeZoneId; } - public static WindowsToIana(windowsTimeZoneId: string): string { - this.LoadData(); - if (this.windowsToIana.has(`001|${windowsTimeZoneId}`)) { - return this.windowsToIana.get(`001|${windowsTimeZoneId}`); + public static windowsToIana(windowsTimeZoneId: string): string { + this.loadData(); + if (this.windowsToIanaMap.has(`001|${ windowsTimeZoneId }`)) { + return this.windowsToIanaMap.get(`001|${ windowsTimeZoneId }`); } return windowsTimeZoneId; } - public static VerifyTimeZoneStr(timezoneStr: string): boolean { - this.LoadData(); + public static verifyTimeZoneStr(timezoneStr: string): boolean { + this.loadData(); return this.validTimezonStr.includes(timezoneStr); } - private static LoadData(): void { + private static loadData(): void { const data: string = this.mappingString; const lines: string [] = data.split(this.seperator); for (const line of lines) { @@ -557,8 +557,8 @@ export class TimeZoneConverter { const territory: string = tokens[1]; const ianaIDs: string[] = tokens[2].split(' '); for (const ianaID of ianaIDs) { - if (!this.ianaToWindows.has(ianaID)) { - this.ianaToWindows.set(ianaID, windowsID); + if (!this.ianaToWindowsMap.has(ianaID)) { + this.ianaToWindowsMap.set(ianaID, windowsID); } if (!this.validTimezonStr.includes(ianaID)) { @@ -566,8 +566,8 @@ export class TimeZoneConverter { } } - if (!this.windowsToIana.has(`${territory}|${windowsID}`)) { - this.windowsToIana.set(`${territory}|${windowsID}`, ianaIDs[0]); + if (!this.windowsToIanaMap.has(`${ territory }|${ windowsID }`)) { + this.windowsToIanaMap.set(`${ territory }|${ windowsID }`, ianaIDs[0]); } if (!this.validTimezonStr.includes(windowsID)) { diff --git a/libraries/botframework-expressions/tests/badExpression.test.js b/libraries/botframework-expressions/tests/badExpression.test.js index d1fd141e85..ca8ade0117 100644 --- a/libraries/botframework-expressions/tests/badExpression.test.js +++ b/libraries/botframework-expressions/tests/badExpression.test.js @@ -1,446 +1,444 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ const { ExpressionEngine } = require('../'); const assert = require('assert'); const invalidExpressions = [ - "hello world", - "a+", - "a+b*", - "fun(a, b, c", - "func(A,b,b,)", - "a.#title", - "\"hello'", - "user.lists.{dialog.listName}", - "a===a" + 'hello world', + 'a+', + 'a+b*', + 'fun(a, b, c', + 'func(A,b,b,)', + 'a.#title', + '"hello\'', + 'user.lists.{dialog.listName}', + 'a===a' ]; const badExpressions = // General test - ["func()", // no such func - "length(func())", //no such function in children - "a.func()", // no such function - "(1.foreach)()",// error func - "('str'.foreach)()",// error func - "'hello'.length()",// not support currently + ['func()', // no such func + 'length(func())', //no such function in children + 'a.func()', // no such function + '(1.foreach)()',// error func + '(\'str\'.foreach)()',// error func + '\'hello\'.length()',// not support currently - // Operators test - "'1' + 2", // params should be number - "'1' * 2", // params should be number - "'1' - 2", // params should be number - "'1' / 2", // params should be number - "'1' % 2", // params should be number - "'1' ^ 2", // params should be number - "'string'&one", // $ can only accept string parameter - "1/0", // can not divide 0 + // Operators test + '\'1\' + 2', // params should be number + '\'1\' * 2', // params should be number + '\'1\' - 2', // params should be number + '\'1\' / 2', // params should be number + '\'1\' % 2', // params should be number + '\'1\' ^ 2', // params should be number + '\'string\'&one', // $ can only accept string parameter + '1/0', // can not divide 0 - // String functions test - "concat(one, hello)", // concat can only accept string parameter - "length(one, 1)", // length can only have one param - "length(concat(one, hello))", //children func error - "replace(hello)", // replace need three parameters - "replace(one, 'l', 'k')", // replace only accept string parameter - "replace('hi', 1, 'k')", // replace only accept string parameter - "replace('hi', 'l', 1)", // replace only accept string parameter - "replaceIgnoreCase(hello)", // replaceIgnoreCase need three parameters - "replaceIgnoreCase(one, 'l', 'k')", // replaceIgnoreCase only accept string parameter - "replaceIgnoreCase('hi', 1, 'k')", // replaceIgnoreCase only accept string parameter - "replaceIgnoreCase('hi', 'l', 1)", // replaceIgnoreCase only accept string parameter - "split(hello)", // split need two parameters - "split(one, 'l')", // split only accept string parameter - "split(hello, 1)", // split only accept string parameter - "substring(hello, 0.5)", // the second parameter of substring must be integer - "substring(one, 0)", // the first parameter of substring must be string - "substring(hello, 10)", // the start index is out of the range of the string length - "substring(hello, 0, hello)", // length is not integer - "substring(hello, 0, 'hello')", // length is not integer - "substring(hello, 0, 10)", // the length of substring is out of the range of the original string - "toLower(one)", // the parameter of toLower must be string - "toLower('hi', 1)", // should have 1 param - "toUpper(one)", // the parameter of toUpper must be string - "toUpper('hi', 1)", // should have 1 param - "trim(one)", // the parameter of trim must be string - "trim('hi', 1)", // should have 1 param - "endsWith(hello, one)",// should have string params - "endsWith(one, hello)",// should have string params - "endsWith(hello)",// should have two params - "startsWith(hello, one)",// should have string params - "startsWith(one, hello)",// should have string params - "startsWith(hello)",// should have two params - "countWord(hello, 1)",// should have one param - "countWord(one)",// should have string param - "countWord(one)",// should have string param - "addOrdinal(one + 0.5)",// should have Integer param - "addOrdinal(one, two)",// should have one param - "newGuid(one)",// should have no parameters - "indexOf(hello)",// should have two parameters - "indexOf(hello, world, one)", // should have two parameters - "indexOf(hello, one)", // both parameters should be string - "indexOf(one, hello)", // both parameters should be string - "lastIndexOf(hello)",// should have two parameters - "lastIndexOf(hello, world, one)", // should have two parameters - "lastIndexOf(hello, one)", // both parameters should be string - "lastIndexOf(one, hello)", // both parameters should be string + // String functions test + 'concat(one, hello)', // concat can only accept string parameter + 'length(one, 1)', // length can only have one param + 'length(concat(one, hello))', //children func error + 'replace(hello)', // replace need three parameters + 'replace(one, \'l\', \'k\')', // replace only accept string parameter + 'replace(\'hi\', 1, \'k\')', // replace only accept string parameter + 'replace(\'hi\', \'l\', 1)', // replace only accept string parameter + 'replace(\'hi\', nullObj, \'k\')', // replace oldValue must string length not less than 1 + 'replaceIgnoreCase(hello)', // replaceIgnoreCase need three parameters + 'replaceIgnoreCase(\'HI\', nullObj, \'k\')', // replaceIgnoreCase oldValue must string length not less than 1 + 'replaceIgnoreCase(one, \'l\', \'k\')', // replaceIgnoreCase only accept string parameter + 'replaceIgnoreCase(\'hi\', 1, \'k\')', // replaceIgnoreCase only accept string parameter + 'replaceIgnoreCase(\'hi\', \'l\', 1)', // replaceIgnoreCase only accept string parameter + 'split(hello)', // split need two parameters + 'split(one, \'l\')', // split only accept string parameter + 'split(hello, 1)', // split only accept string parameter + 'substring(hello, 0.5)', // the second parameter of substring must be integer + 'substring(one, 0)', // the first parameter of substring must be string + 'substring(hello, 10)', // the start index is out of the range of the string length + 'substring(hello, 0, hello)', // length is not integer + 'substring(hello, 0, \'hello\')', // length is not integer + 'substring(hello, 0, 10)', // the length of substring is out of the range of the original string + 'toLower(one)', // the parameter of toLower must be string + 'toLower(\'hi\', 1)', // should have 1 param + 'toUpper(one)', // the parameter of toUpper must be string + 'toUpper(\'hi\', 1)', // should have 1 param + 'trim(one)', // the parameter of trim must be string + 'trim(\'hi\', 1)', // should have 1 param + 'endsWith(hello, one)',// should have string params + 'endsWith(one, hello)',// should have string params + 'endsWith(hello)',// should have two params + 'startsWith(hello, one)',// should have string params + 'startsWith(one, hello)',// should have string params + 'startsWith(hello)',// should have two params + 'countWord(hello, 1)',// should have one param + 'countWord(one)',// should have string param + 'countWord(one)',// should have string param + 'addOrdinal(one + 0.5)',// should have Integer param + 'addOrdinal(one, two)',// should have one param + 'newGuid(one)',// should have no parameters + 'indexOf(hello)',// should have two parameters + 'indexOf(hello, world, one)', // should have two parameters + 'indexOf(hello, one)', // both parameters should be string + 'indexOf(one, hello)', // both parameters should be string + 'lastIndexOf(hello)',// should have two parameters + 'lastIndexOf(hello, world, one)', // should have two parameters + 'lastIndexOf(hello, one)', // both parameters should be string + 'lastIndexOf(one, hello)', // both parameters should be string - // Logical comparison functions test - "greater(one, hello)", // string and integer are not comparable - "greater(one)", // greater need two parameters - "greaterOrEquals(one, hello)", // string and integer are not comparable - "greaterOrEquals(one)", // function need two parameters - "less(false, true)", //string or number parameters are needed - "less(one, hello)", // string and integer are not comparable - "less(one)", // function need two parameters - "lessOrEquals(one, hello)", // string and integer are not comparable - "lessOrEquals(one)", // function need two parameters - "equals(one)", // equals must accept two parameters - "exists(1, 2)", // function need one parameter - //"if(!exists(one), one, hello)", // the second and third parameters of if must the same type - "not(false, one)", // function need one parameter + // Logical comparison functions test + 'greater(one, hello)', // string and integer are not comparable + 'greater(one)', // greater need two parameters + 'greaterOrEquals(one, hello)', // string and integer are not comparable + 'greaterOrEquals(one)', // function need two parameters + 'less(false, true)', //string or number parameters are needed + 'less(one, hello)', // string and integer are not comparable + 'less(one)', // function need two parameters + 'lessOrEquals(one, hello)', // string and integer are not comparable + 'lessOrEquals(one)', // function need two parameters + 'equals(one)', // equals must accept two parameters + 'exists(1, 2)', // function need one parameter + //"if(!exists(one), one, hello)", // the second and third parameters of if must the same type + 'not(false, one)', // function need one parameter - // Conversion functions test - "float(hello)", // param shoud be float format string - "float(hello, 1)", // shold have 1 param - "int(hello)", // param shoud be int format string - "int(1, 1)", // shold have 1 param - "string(hello, 1)", // shold have 1 param - "bool(false, 1)", // shold have 1 param - "array()", // should have 1 param - "array(hello, world)", // should have 1 param - "array(false)", // param should be string - "binary()", // should have 1 param - "binary(hello, world)", // should have 1 param - "binary(false)", // param should be string - "dataUri()", // should have 1 param - "dataUri(hello, world)", // should have 1 param - "dataUri(false)", // param should be string - "dataUriToBinary()", // should have 1 param - "dataUriToBinary(hello, world)", // should have 1 param - "dataUriToBinary(false)", // param should be string - "dataUriToString()", // should have 1 param - "dataUriToString(hello, world)", // should have 1 param - "dataUriToString(false)", // param should be string - "uriComponentToString()", // should have 1 param - "uriComponentToString(hello, world)", // should have 1 param - "uriComponentToString(false)", // param should be string - "base64()", // should have 1 param - "base64(hello, world)", // should have 1 param - "base64(false)", // param should be string - "base64ToBinary()", // should have 1 param - "base64ToBinary(hello, world)", // should have 1 param - "base64ToBinary(false)", // param should be string - "base64ToString()", // should have 1 param - "base64ToString(hello, world)", // should have 1 param - "base64ToString(false)", // param should be string - "uriComponent()", // should have 1 param - "uriComponent(hello, world)", // should have 1 param - "uriComponent(false)", // param should be string - "xml()", // should have 1 param - "xml(hello, world)", // should have 1 param - "xml(false)", // param should be string + // Conversion functions test + 'float(hello)', // param shoud be float format string + 'float(hello, 1)', // shold have 1 param + 'int(hello)', // param shoud be int format string + 'int(1, 1)', // shold have 1 param + 'string(hello, 1)', // shold have 1 param + 'bool(false, 1)', // shold have 1 param + 'array()', // should have 1 param + 'array(hello, world)', // should have 1 param + 'array(false)', // param should be string + 'binary()', // should have 1 param + 'binary(hello, world)', // should have 1 param + 'binary(false)', // param should be string + 'dataUri()', // should have 1 param + 'dataUri(hello, world)', // should have 1 param + 'dataUri(false)', // param should be string + 'dataUriToBinary()', // should have 1 param + 'dataUriToBinary(hello, world)', // should have 1 param + 'dataUriToBinary(false)', // param should be string + 'dataUriToString()', // should have 1 param + 'dataUriToString(hello, world)', // should have 1 param + 'dataUriToString(false)', // param should be string + 'uriComponentToString()', // should have 1 param + 'uriComponentToString(hello, world)', // should have 1 param + 'uriComponentToString(false)', // param should be string + 'base64()', // should have 1 param + 'base64(hello, world)', // should have 1 param + 'base64(false)', // param should be string + 'base64ToBinary()', // should have 1 param + 'base64ToBinary(hello, world)', // should have 1 param + 'base64ToBinary(false)', // param should be string + 'base64ToString()', // should have 1 param + 'base64ToString(hello, world)', // should have 1 param + 'base64ToString(false)', // param should be string + 'uriComponent()', // should have 1 param + 'uriComponent(hello, world)', // should have 1 param + 'uriComponent(false)', // param should be string - // Math functions test - "max(hello, one)", // param should be number - "max()", // function need 1 or more than 1 parameters - "min(hello, one)", // param should be number - "min()", // function need 1 or more than 1 parameters - "add(hello, 2)", // param should be number - "add()", // arg count doesn't match - "add(five, six)", // no such variables - "add(one)", // add function need two or more parameters - "sub(hello, 2)", // param should be number - "sub()", // arg count doesn't match - "sub(five, six)", // no such variables - "sub(one)", // sub function need two or more parameters - "mul(hello, one)", // param should be number - "mul(one)", // mul function need two or more parameters - "div(one, 0)", // one cannot be divided by zero - "div(one)", // div function need two or more parameters - "div(hello, one)", // string hello cannot be divided - "exp(2, hello)", // exp cannot accept parameter of string - "mod(1, 0)", // mod cannot accept zero as the second parameter - "mod(5.5, 2)", // param should be integer - "mod(5, 2.1)", // param should be integer - "mod(5, 2.1 ,3)", // need two params - "rand(5, 6.1)", // param should be integer - "rand(5)", // need two params - "rand(7, 6)", // minvalue cannot be greater than maxValue - "sum(items)", // should have number parameters - "range(one)", // should have two params - "range(one, two, three)", // should have two params - "range(one, hello)", // params should be integer - "range(hello, one)", // params should be integer - "range(one, 0)", // second param should be more than 0 + // Math functions test + 'max(hello, one)', // param should be number + 'max()', // function need 1 or more than 1 parameters + 'min(hello, one)', // param should be number + 'min()', // function need 1 or more than 1 parameters + 'add(hello, 2)', // param should be number + 'add()', // arg count doesn't match + 'add(five, six)', // no such variables + 'add(one)', // add function need two or more parameters + 'sub(hello, 2)', // param should be number + 'sub()', // arg count doesn't match + 'sub(five, six)', // no such variables + 'sub(one)', // sub function need two or more parameters + 'mul(hello, one)', // param should be number + 'mul(one)', // mul function need two or more parameters + 'div(one, 0)', // one cannot be divided by zero + 'div(one)', // div function need two or more parameters + 'div(hello, one)', // string hello cannot be divided + 'exp(2, hello)', // exp cannot accept parameter of string + 'mod(1, 0)', // mod cannot accept zero as the second parameter + 'mod(5.5, 2)', // param should be integer + 'mod(5, 2.1)', // param should be integer + 'mod(5, 2.1 ,3)', // need two params + 'rand(5, 6.1)', // param should be integer + 'rand(5)', // need two params + 'rand(7, 6)', // minvalue cannot be greater than maxValue + 'sum(items)', // should have number parameters + 'range(one)', // should have two params + 'range(one, two, three)', // should have two params + 'range(one, hello)', // params should be integer + 'range(hello, one)', // params should be integer + 'range(one, 0)', // second param should be more than 0 - // Date and time function test - "addDays('errortime', 1)",// error datetime format - "addDays(timestamp, 'hi')",// second param should be integer - "addDays(timestamp)",// should have 2 or 3 params - "addDays(timestamp, 1,'yyyy', 2)",// should have 2 or 3 params - "addDays(notISOTimestamp, 1)", // not ISO datetime format - "addHours('errortime', 1)",// error datetime format - "addHours(timestamp, 'hi')",// second param should be integer - "addHours(timestamp)",// should have 2 or 3 params - "addHours(timestamp, 1,'yyyy', 2)",// should have 2 or 3 params - "addHours(notISOTimestamp, 1)", // not ISO datetime format - "addMinutes('errortime', 1)",// error datetime format - "addMinutes(timestamp, 'hi')",// second param should be integer - "addMinutes(timestamp)",// should have 2 or 3 params - "addMinutes(timestamp, 1,'yyyy', 2)",// should have 2 or 3 params - "addMinutes(notISOTimestamp, 1)", // not ISO datetime format - "addSeconds('errortime', 1)",// error datetime format - "addSeconds(timestamp, 'hi')",// second param should be integer - "addSeconds(timestamp)",// should have 2 or 3 params - "addSeconds(timestamp, 1,'yyyy', 2)",// should have 2 or 3 params - "addSeconds(notISOTimestamp, 1)", // not ISO datetime format - "dayOfMonth('errortime')", // error datetime format - "dayOfMonth(timestamp, 1)", //should have 1 param - "dayOfMonth(notISOTimestamp)", // not ISO datetime format - "dayOfWeek('errortime')", // error datetime format - "dayOfWeek(timestamp, 1)", //should have 1 param - "dayOfWeek(notISOTimestamp)", // not ISO datetime format - "dayOfYear('errortime')", // error datetime format - "dayOfYear(timestamp, 1)", //should have 1 param - "dayOfYear(notISOTimestamp)", // not ISO datetime format - "month('errortime')", // error datetime format - "month(timestamp, 1)", //should have 1 param - "month(noISOTimestamp)", // not ISO datetime format - "date('errortime')", // error datetime format - "date(timestamp, 1)", //should have 1 param - "date(noISOTimestamp)", // not ISO datetime format - "year('errortime')", // error datetime format - "year(timestamp, 1)", // should have 1 param - "year(noISOTimestamp)", // not ISO datetime format - "formatDateTime('errortime')", // error datetime format - "formatDateTime(timestamp, 'yyyy', 1)", // should have 2 or 3 params - "formatDateTime(notValidTimestamp)", // not valid timestamp - "formatDateTime(notValidTimestamp2)", // not valid timestamp - "formatDateTime(notValidTimestamp3)", // not valid timestamp - "subtractFromTime('errortime', 1, 'yyyy')", // error datetime format - "subtractFromTime(timestamp, 1, 'W')", // error time unit - "subtractFromTime(timestamp, timestamp, 'W')", // error parameters format - "subtractFromTime(timestamp, '1', 'yyyy')", // second param should be integer - "subtractFromTime(timestamp, 'yyyy')", // should have 3 or 4 params - "subtractFromTime(noISOTimestamp, 1, 'Year')", - "dateReadBack('errortime', 'errortime')", // error datetime format - "dateReadBack(timestamp)", // shold have two params - "dateReadBack(timestamp, 'errortime')", // second param is invalid timestamp format - "dateReadBack(notISOTimestamp, addDays(timestamp, 1))", // not ISO datetime format - "getTimeOfDay('errortime')", // error datetime format - "getTimeOfDay(timestamp, timestamp)", // should have 1 param - "getTimeOfDay(notISOTimestamp)", // not ISO datetime format - "getPastTime(1, 'W')",// error time unit - "getPastTime(timestamp, 'W')",// error parameters format - "getPastTime('yyyy', '1')",// second param should be integer - "getPastTime('yyyy')",// should have 2 or 3 params - "getFutureTime(1, 'W')",// error time unit - "getFutureTime(timestamp, 'W')",// error parameters format - "getFutureTime('yyyy', '1')",// second param should be integer - "getFutureTime('yyyy')",// should have 2 or 3 params - "convertFromUTC(notValidTimestamp, 'Pacific Standard Time')", // invalid timestamp - "convertFromUTC('2018-02-02T02:00:00.000Z', 'Pacific Time')", // invalid timezone - "convertToUTC(notValidTimestamp, 'Pacific Standard Time')", // invalid timestamp - "convertToUTC('2018-02-02T02:00:00.000', 'Pacific Time')", // invalid timezone - //"startOfDay(timeStamp, 'A')", // invalid format, due to change of moment package, this will no longer throw exception - "startOfDay(notValidTimeStamp)", // invalid timestamp - //"startOfHour(timeStamp, 'A')", // invalid format, due to change of moment package, this will no longer throw exception - "startOfHour(notValidTimeStamp)", // invalid timestamp - //"startOfMonth(timeStamp, 'A')", // invalid format, due to change of moment package, this will no longer throw exception - "startOfMonth(notValidTimeStamp)", // invalid timestamp - "ticks(notValidTimeStamp)", // not valid timestamp - "ticks()", // should have one parameters + // Date and time function test + 'addDays(\'errortime\', 1)',// error datetime format + 'addDays(timestamp, \'hi\')',// second param should be integer + 'addDays(timestamp)',// should have 2 or 3 params + 'addDays(timestamp, 1,\'yyyy\', 2)',// should have 2 or 3 params + 'addDays(notISOTimestamp, 1)', // not ISO datetime format + 'addHours(\'errortime\', 1)',// error datetime format + 'addHours(timestamp, \'hi\')',// second param should be integer + 'addHours(timestamp)',// should have 2 or 3 params + 'addHours(timestamp, 1,\'yyyy\', 2)',// should have 2 or 3 params + 'addHours(notISOTimestamp, 1)', // not ISO datetime format + 'addMinutes(\'errortime\', 1)',// error datetime format + 'addMinutes(timestamp, \'hi\')',// second param should be integer + 'addMinutes(timestamp)',// should have 2 or 3 params + 'addMinutes(timestamp, 1,\'yyyy\', 2)',// should have 2 or 3 params + 'addMinutes(notISOTimestamp, 1)', // not ISO datetime format + 'addSeconds(\'errortime\', 1)',// error datetime format + 'addSeconds(timestamp, \'hi\')',// second param should be integer + 'addSeconds(timestamp)',// should have 2 or 3 params + 'addSeconds(timestamp, 1,\'yyyy\', 2)',// should have 2 or 3 params + 'addSeconds(notISOTimestamp, 1)', // not ISO datetime format + 'dayOfMonth(\'errortime\')', // error datetime format + 'dayOfMonth(timestamp, 1)', //should have 1 param + 'dayOfMonth(notISOTimestamp)', // not ISO datetime format + 'dayOfWeek(\'errortime\')', // error datetime format + 'dayOfWeek(timestamp, 1)', //should have 1 param + 'dayOfWeek(notISOTimestamp)', // not ISO datetime format + 'dayOfYear(\'errortime\')', // error datetime format + 'dayOfYear(timestamp, 1)', //should have 1 param + 'dayOfYear(notISOTimestamp)', // not ISO datetime format + 'month(\'errortime\')', // error datetime format + 'month(timestamp, 1)', //should have 1 param + 'month(noISOTimestamp)', // not ISO datetime format + 'date(\'errortime\')', // error datetime format + 'date(timestamp, 1)', //should have 1 param + 'date(noISOTimestamp)', // not ISO datetime format + 'year(\'errortime\')', // error datetime format + 'year(timestamp, 1)', // should have 1 param + 'year(noISOTimestamp)', // not ISO datetime format + 'formatDateTime(\'errortime\')', // error datetime format + 'formatDateTime(timestamp, \'yyyy\', 1)', // should have 2 or 3 params + 'formatDateTime(notValidTimestamp)', // not valid timestamp + 'formatDateTime(notValidTimestamp2)', // not valid timestamp + 'formatDateTime(notValidTimestamp3)', // not valid timestamp + 'subtractFromTime(\'errortime\', 1, \'yyyy\')', // error datetime format + 'subtractFromTime(timestamp, 1, \'W\')', // error time unit + 'subtractFromTime(timestamp, timestamp, \'W\')', // error parameters format + 'subtractFromTime(timestamp, \'1\', \'yyyy\')', // second param should be integer + 'subtractFromTime(timestamp, \'yyyy\')', // should have 3 or 4 params + 'subtractFromTime(noISOTimestamp, 1, \'Year\')', + 'dateReadBack(\'errortime\', \'errortime\')', // error datetime format + 'dateReadBack(timestamp)', // shold have two params + 'dateReadBack(timestamp, \'errortime\')', // second param is invalid timestamp format + 'dateReadBack(notISOTimestamp, addDays(timestamp, 1))', // not ISO datetime format + 'getTimeOfDay(\'errortime\')', // error datetime format + 'getTimeOfDay(timestamp, timestamp)', // should have 1 param + 'getTimeOfDay(notISOTimestamp)', // not ISO datetime format + 'getPastTime(1, \'W\')',// error time unit + 'getPastTime(timestamp, \'W\')',// error parameters format + 'getPastTime(\'yyyy\', \'1\')',// second param should be integer + 'getPastTime(\'yyyy\')',// should have 2 or 3 params + 'getFutureTime(1, \'W\')',// error time unit + 'getFutureTime(timestamp, \'W\')',// error parameters format + 'getFutureTime(\'yyyy\', \'1\')',// second param should be integer + 'getFutureTime(\'yyyy\')',// should have 2 or 3 params + 'convertFromUTC(notValidTimestamp, \'Pacific Standard Time\')', // invalid timestamp + 'convertFromUTC(\'2018-02-02T02:00:00.000Z\', \'Pacific Time\')', // invalid timezone + 'convertToUTC(notValidTimestamp, \'Pacific Standard Time\')', // invalid timestamp + 'convertToUTC(\'2018-02-02T02:00:00.000\', \'Pacific Time\')', // invalid timezone + //"startOfDay(timeStamp, 'A')", // invalid format, due to change of moment package, this will no longer throw exception + 'startOfDay(notValidTimeStamp)', // invalid timestamp + //"startOfHour(timeStamp, 'A')", // invalid format, due to change of moment package, this will no longer throw exception + 'startOfHour(notValidTimeStamp)', // invalid timestamp + //"startOfMonth(timeStamp, 'A')", // invalid format, due to change of moment package, this will no longer throw exception + 'startOfMonth(notValidTimeStamp)', // invalid timestamp + 'ticks(notValidTimeStamp)', // not valid timestamp + 'ticks()', // should have one parameters - // collection functions test - "sum(items, 'hello')",//should have 1 parameter - "sum('hello')",//first param should be list - "average(items, 'hello')",//should have 1 parameter - "average('hello')",//first param should be list - "average(hello)", // first param should be list - "contains('hello world', 'hello', 'new')",//should have 2 parameter - "count(items, 1)", //should have 1 parameter - "count(1)", //first param should be string, array or map - "empty(1,2)", //should have two params - "first(items,2)", //should have 1 param - "last(items,2)", //should have 1 param - "join(items, 'p1', 'p2','p3')",//builtin function should have 2-3 params, - "join(hello, 'hi')",// first param must list - "join(items, 1)",// second param must string - "join(items, '1', 2)",// second param must string - "foreach(hello, item, item)",// first arg is not list - "foreach(items, item)",//should have three parameters - "foreach(items, item, item2, item3)",//should have three parameters - "foreach(items, add(1), item)",// Second paramter of foreach is not an identifier - "foreach(items, 1, item)", // Second paramter error - "foreach(items, x, sum(x))", // third paramter error - "select(hello, item, item)", // first arg is not list - "select(items, item)", // should have three parameters - "select(items, item, item2, item3)", // should have three parameters - "select(items, add(1), item)", // second paramter of foreach is not an identifier - "select(items, 1, item)", // second paramter error - "select(items, x, sum(x))", // third paramter error - "where(hello, item, item)", // first arg is not list - "where(items, item)", //should have three parameters - "where(items, item, item2, item3)", //should have three parameters - "where(items, add(1), item)", // Second paramter of where is not an identifier - "where(items, 1, item)", // Second paramter error - "where(items, x, sum(x))", // third paramter error - "union(one, two)", // should have collection param - "intersection(one, two)", // should have collection param - "skip(hello)", // should have two parameters - "skip(hello, world, one)", // should have two parameters - "skip(hello, one)", // first param should be array - "skip(items, hello)", // second param should be integer - "skip(items, one + 0.5)", // second param should be integer - "take(hello)", // should have two parameters - "take(hello, world, one)", //should have two parameters - "take(one, two)", // first param should be array or string - "take(items, hello)", // second param should be integer - "take(hello, one + 0.5)", // second param should be integer - "subArray(hello)", // should have 2 or 3 params - "subArray(one, two, hello, world)", // should have 2 or 3 params - "subArray(hello, two)", // first param should be array - "subArray(items, hello)", // second param should be integer - "subArray(items, one, hello)", // third param should be integer - "sortBy(hello, 'x')", // first param should be list - "sortBy(createArray('H','e','l','l','o'), 1)", // second param should be string - "sortBy(createArray('H','e','l','l','o'), 'x', hi)", //second param should be string + // collection functions test + 'sum(items, \'hello\')',//should have 1 parameter + 'sum(\'hello\')',//first param should be list + 'average(items, \'hello\')',//should have 1 parameter + 'average(\'hello\')',//first param should be list + 'average(hello)', // first param should be list + 'contains(\'hello world\', \'hello\', \'new\')',//should have 2 parameter + 'count(items, 1)', //should have 1 parameter + 'count(1)', //first param should be string, array or map + 'empty(1,2)', //should have two params + 'first(items,2)', //should have 1 param + 'last(items,2)', //should have 1 param + 'join(items, \'p1\', \'p2\',\'p3\')',//builtin function should have 2-3 params, + 'join(hello, \'hi\')',// first param must list + 'join(items, 1)',// second param must string + 'join(items, \'1\', 2)',// second param must string + 'foreach(hello, item, item)',// first arg is not list + 'foreach(items, item)',//should have three parameters + 'foreach(items, item, item2, item3)',//should have three parameters + 'foreach(items, add(1), item)',// Second paramter of foreach is not an identifier + 'foreach(items, 1, item)', // Second paramter error + 'foreach(items, x, sum(x))', // third paramter error + 'select(hello, item, item)', // first arg is not list + 'select(items, item)', // should have three parameters + 'select(items, item, item2, item3)', // should have three parameters + 'select(items, add(1), item)', // second paramter of foreach is not an identifier + 'select(items, 1, item)', // second paramter error + 'select(items, x, sum(x))', // third paramter error + 'where(hello, item, item)', // first arg is not list + 'where(items, item)', //should have three parameters + 'where(items, item, item2, item3)', //should have three parameters + 'where(items, add(1), item)', // Second paramter of where is not an identifier + 'where(items, 1, item)', // Second paramter error + 'where(items, x, sum(x))', // third paramter error + 'union(one, two)', // should have collection param + 'intersection(one, two)', // should have collection param + 'skip(hello)', // should have two parameters + 'skip(hello, world, one)', // should have two parameters + 'skip(hello, one)', // first param should be array + 'skip(items, hello)', // second param should be integer + 'skip(items, one + 0.5)', // second param should be integer + 'take(hello)', // should have two parameters + 'take(hello, world, one)', //should have two parameters + 'take(one, two)', // first param should be array or string + 'take(items, hello)', // second param should be integer + 'take(hello, one + 0.5)', // second param should be integer + 'subArray(hello)', // should have 2 or 3 params + 'subArray(one, two, hello, world)', // should have 2 or 3 params + 'subArray(hello, two)', // first param should be array + 'subArray(items, hello)', // second param should be integer + 'subArray(items, one, hello)', // third param should be integer + 'sortBy(hello, \'x\')', // first param should be list + 'sortBy(createArray(\'H\',\'e\',\'l\',\'l\',\'o\'), 1)', // second param should be string + 'sortBy(createArray(\'H\',\'e\',\'l\',\'l\',\'o\'), \'x\', hi)', //second param should be string - //uri parsing functions - "uriHost(relativeUri)", - "uriPath(relativeUri)", - "uriPathAndQuery(relatibeUri)", - "uriPort(relatibeUri)", - "uriQuery(relatibeUri)", - "uriScheme(relatibeUri)", + //uri parsing functions + 'uriHost(relativeUri)', + 'uriPath(relativeUri)', + 'uriPathAndQuery(relatibeUri)', + 'uriPort(relatibeUri)', + 'uriQuery(relatibeUri)', + 'uriScheme(relatibeUri)', - // Object manipulation and construction functions test - "json(1,2)", //should have 1 parameter - "json(1)",//should be string parameter - "json('{\"key1\":value1\"}')", // invalid json format string - "addProperty(json('{\"key1\":\"value1\"}'), 'key2','value2','key3')", //should have 3 parameter - "addProperty(json('{\"key1\":\"value1\"}'), 1,'value2')", // second param should be string - "setProperty(json('{\"key1\":\"value1\"}'), 'key2','value2','key3')", //should have 3 parameter - "setProperty(json('{\"key1\":\"value1\"}'), 1,'value2')", // second param should be string - "removeProperty(json('{\"key1\":\"value1\",\"key2\":\"value2\"}'), 1))",// second param should be string - "removeProperty(json('{\"key1\":\"value1\",\"key2\":\"value2\"}'), '1', '2'))",// should have 2 parameter - "coalesce()", // should have at least 1 parameter - "xPath(invalidXml, ''sum(/produce/item/count)')", //not valid xml - "xPath(xmlStr)", // should have two params - "xPath(xmlStr, 'getTotal')", // invalid xpath query - "jPath(hello)",// should have two params - "jPath(hello, '.key')", //bad json - "jPath(json('{\"key1\":\"value1\",\"key2\":\"value2\"}'), 'getTotal')", //bad path + // Object manipulation and construction functions test + 'json(1,2)', //should have 1 parameter + 'json(1)',//should be string parameter + 'json(\'{"key1":value1"}\')', // invalid json format string + 'addProperty(json(\'{"key1":"value1"}\'), \'key2\',\'value2\',\'key3\')', //should have 3 parameter + 'addProperty(json(\'{"key1":"value1"}\'), 1,\'value2\')', // second param should be string + 'setProperty(json(\'{"key1":"value1"}\'), \'key2\',\'value2\',\'key3\')', //should have 3 parameter + 'setProperty(json(\'{"key1":"value1"}\'), 1,\'value2\')', // second param should be string + 'removeProperty(json(\'{"key1":"value1","key2":"value2"}\'), 1))',// second param should be string + 'removeProperty(json(\'{"key1":"value1","key2":"value2"}\'), \'1\', \'2\'))',// should have 2 parameter + 'coalesce()', // should have at least 1 parameter + 'jPath(hello)',// should have two params + 'jPath(hello, \'.key\')', //bad json + 'jPath(json(\'{"key1":"value1","key2":"value2"}\'), \'getTotal\')', //bad path - // Short Hand Expression - "%.xxx", // not supported shorthand pattern - "@[city]", // city is not provided. - "@[0]", // entities is not a collection. + // Short Hand Expression + '%.xxx', // not supported shorthand pattern + '@[city]', // city is not provided. + '@[0]', // entities is not a collection. - // Memory access test - "getProperty(bag, 1)",// second param should be string - "bag[1]",// first param should be string - "Accessor(1)",// first param should be string - "Accessor(bag, 1)", // second should be object - "one[0]", // one is not list - "items[3]", // index out of range - "items[one+0.5]", // index is not integer + // Memory access test + 'getProperty(bag, 1)',// second param should be string + 'bag[1]',// first param should be string + 'Accessor(1)',// first param should be string + 'Accessor(bag, 1)', // second should be object + 'one[0]', // one is not list + 'items[3]', // index out of range + 'items[one+0.5]', // index is not integer - // regex test - "isMatch('^[a-z]+$')",// should have 2 parameter - "isMatch('abC', one)",// second param should be string - "isMatch(1, '^[a-z]+$')", // first param should be string - "isMatch('abC', '^[a-z+$')",// bad regular expression + // regex test + 'isMatch(\'^[a-z]+$\')',// should have 2 parameter + 'isMatch(\'abC\', one)',// second param should be string + 'isMatch(1, \'^[a-z]+$\')', // first param should be string + 'isMatch(\'abC\', \'^[a-z+$\')',// bad regular expression - // SetPathToValue tests - "setPathToValue(@foo, 3)", // Cannot set simple entities - "setPathToValue(2+3, 4)", // Not a real path - "setPathToValue(a)" // Missing value -]; + // SetPathToValue tests + 'setPathToValue(@foo, 3)', // Cannot set simple entities + 'setPathToValue(2+3, 4)', // Not a real path + 'setPathToValue(a)' // Missing value + ]; const scope = { - one: 1.0, - two: 2.0, - hello: "hello", - world: "world", - istrue: true, - bag: + one: 1.0, + two: 2.0, + hello: 'hello', + world: 'world', + istrue: true, + bag: { - three: 3.0, - set: + three: 3.0, + set: { - four: 4.0, + four: 4.0, }, - list: ["red", "blue"], - index: 3, - name: "mybag" + list: ['red', 'blue'], + index: 3, + name: 'mybag' }, - items: ["zero", "one", "two"], - nestedItems: + items: ['zero', 'one', 'two'], + nestedItems: [ - { x: 1 }, - { x: 2 }, - { x: 3 }, + { x: 1 }, + { x: 2 }, + { x: 3 }, ], - timestamp: "2018-03-15T13:00:00.111Z", - noISOTimestamp: "2018-03-15T13:00:00Z", - notValidTimestamp: "2018timestmap", - notValidTimestamp2: "1521118800", - notValidTimestamp3: "20181115", - relativeUri: "../catalog/shownew.htm?date=today", - turn: + timestamp: '2018-03-15T13:00:00.111Z', + noISOTimestamp: '2018-03-15T13:00:00Z', + notValidTimestamp: '2018timestmap', + notValidTimestamp2: '1521118800', + notValidTimestamp3: '20181115', + relativeUri: '../catalog/shownew.htm?date=today', + turn: { - recognized: { - entities: + recognized: { + entities: { - city: "Seattle" + city: 'Seattle' }, - intents: + intents: { - BookFlight: "BookFlight" + BookFlight: 'BookFlight' + } } - } }, - dialog: + dialog: { - result: + result: { - title: "Dialog Title", - subTitle: "Dialog Sub Title" + title: 'Dialog Title', + subTitle: 'Dialog Sub Title' } }, }; describe('expression functional test', () => { - it('should get exception results for bad expressions', () => { - for (const expression of badExpressions) { - let isFail = false; - const input = expression; - try { - var { value: actual, error } = new ExpressionEngine().parse(input).tryEvaluate(scope); - if (error === undefined) { - isFail = true; - } else { - console.log(error); - } - } catch (e) { - console.log(e.message); - } + it('should get exception results for bad expressions', () => { + for (const expression of badExpressions) { + let isFail = false; + const input = expression; + try { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + var { value: actual, error } = new ExpressionEngine().parse(input).tryEvaluate(scope); + if (error === undefined) { + isFail = true; + } else { + console.log(error); + } + } catch (e) { + console.log(e.message); + } - if (isFail) { - assert.fail(`Test method ${input} did not throw expected exception`); - } - } - }); + if (isFail) { + assert.fail(`Test method ${ input } did not throw expected exception`); + } + } + }); - it('should get exception results for invalid expressions', () => { - for (const expression of invalidExpressions) { - const input = expression; - try { - new ExpressionEngine().parse(input); - assert.fail(`Test expression ${input} did not throw expected exception`); - } catch (e) { - console.log(e.message); - } - } - }) + it('should get exception results for invalid expressions', () => { + for (const expression of invalidExpressions) { + const input = expression; + try { + new ExpressionEngine().parse(input); + assert.fail(`Test expression ${ input } did not throw expected exception`); + } catch (e) { + console.log(e.message); + } + } + }); }); \ No newline at end of file diff --git a/libraries/botframework-expressions/tests/expression.test.js b/libraries/botframework-expressions/tests/expression.test.js index f1fbe9ad01..8fcc91e18b 100644 --- a/libraries/botframework-expressions/tests/expression.test.js +++ b/libraries/botframework-expressions/tests/expression.test.js @@ -1,594 +1,615 @@ +/* eslint-disable @typescript-eslint/no-use-before-define */ +/* eslint-disable @typescript-eslint/no-var-requires */ const { ExpressionEngine, Extensions } = require('../'); const assert = require('assert'); const moment = require('moment'); -const one = ["one"]; -const oneTwo = ["one", "two"]; -const nullObj = undefined; +const one = ['one']; +const oneTwo = ['one', 'two']; const dataSource = [ - // Operators tests - ["1 + 2", 3], - ["- 1 + 2", 1], - ["+ 1 + 2", 3], - ["1 - 2", -1], - ["1 - (-2)", 3], - ["1.0 + 2.0", 3.0], - ["1 * 2 + 3", 5], - ["1 + 2 * 3", 7], - ["4 / 2", 2], - ["1 + 3 / 2", 2], - ["(1 + 3) / 2", 2], - ["1 * (2 + 3)", 5], - ["(1 + 2) * 3", 9], - ["(one + two) * bag.three", 9.0, ["one", "two", "bag.three"]], - ["(one + two) * bag.set.four", 12.0, ["one", "two", "bag.set.four"]], - ["2^2", 4.0], - ["3^2^2", 81.0], - ["one > 0.5 && two < 2.5", true], - ["one > 0.5 || two < 1.5", true], - ["5 % 2", 1], - ["!(one == 1.0)", false], - ["!!(one == 1.0)", true], - ["!exists(xione) || !!exists(two)", true], - ["(1 + 2) == (4 - 1)", true], - ["!!exists(one) == !!exists(one)", true], - ["!(one == 1.0)", false, ["one"]], - ["!!(one == 1.0)", true, ["one"]], - ["!(one == 1.0) || !!(two == 2.0)", true, oneTwo], - ["!true", false], - ["!!true", true], - ["!(one == 1.0) || !!(two == 2.0)", true], - ["hello == 'hello'", true], - ["hello == 'world'", false], - ["(1 + 2) != (4 - 1)", false], - ["!!exists(one) != !!exists(one)", false], - ["hello != 'hello'", false], - ["hello != 'world'", true], - ["hello != \"hello\"", false], - ["hello != \"world\"", true], - ["(1 + 2) >= (4 - 1)", true], - ["(2 + 2) >= (4 - 1)", true], - ["float(5.5) >= float(4 - 1)", true], - ["(1 + 2) <= (4 - 1)", true], - ["(2 + 2) <= (4 - 1)", false], - ["float(5.5) <= float(4 - 1)", false], - ["'string'&'builder'", "stringbuilder"], - ["\"string\"&\"builder\"", "stringbuilder"], - ["one > 0.5 && two < 2.5", true, oneTwo], - ["notThere > 4", false], - ["float(5.5) && float(0.0)", true], - ["hello && \"hello\"", true], - ["items || ((2 + 2) <= (4 - 1))", true], // true || false - ["0 || false", true], // true || false - ["!(hello)", false], // false - ["!(10)", false], - ["!(0)", false], - ["one > 0.5 || two < 1.5", true, oneTwo], - ["one / 0 || two", true], - ["0/3", 0], + // Operators tests + ['1 + 2', 3], + ['- 1 + 2', 1], + ['+ 1 + 2', 3], + ['1 - 2', -1], + ['1 - (-2)', 3], + ['1.0 + 2.0', 3.0], + ['1 * 2 + 3', 5], + ['1 + 2 * 3', 7], + ['4 / 2', 2], + ['1 + 3 / 2', 2], + ['(1 + 3) / 2', 2], + ['1 * (2 + 3)', 5], + ['(1 + 2) * 3', 9], + ['(one + two) * bag.three', 9.0, ['one', 'two', 'bag.three']], + ['(one + two) * bag.set.four', 12.0, ['one', 'two', 'bag.set.four']], + ['2^2', 4.0], + ['3^2^2', 81.0], + ['one > 0.5 && two < 2.5', true], + ['one > 0.5 || two < 1.5', true], + ['5 % 2', 1], + ['!(one == 1.0)', false], + ['!!(one == 1.0)', true], + ['!exists(xione) || !!exists(two)', true], + ['(1 + 2) == (4 - 1)', true], + ['!!exists(one) == !!exists(one)', true], + ['!(one == 1.0)', false, ['one']], + ['!!(one == 1.0)', true, ['one']], + ['!(one == 1.0) || !!(two == 2.0)', true, oneTwo], + ['!true', false], + ['!!true', true], + ['!(one == 1.0) || !!(two == 2.0)', true], + ['hello == \'hello\'', true], + ['hello == \'world\'', false], + ['(1 + 2) != (4 - 1)', false], + ['!!exists(one) != !!exists(one)', false], + ['hello != \'hello\'', false], + ['hello != \'world\'', true], + ['hello != "hello"', false], + ['hello != "world"', true], + ['(1 + 2) >= (4 - 1)', true], + ['(2 + 2) >= (4 - 1)', true], + ['float(5.5) >= float(4 - 1)', true], + ['(1 + 2) <= (4 - 1)', true], + ['(2 + 2) <= (4 - 1)', false], + ['float(5.5) <= float(4 - 1)', false], + ['\'string\'&\'builder\'', 'stringbuilder'], + ['"string"&"builder"', 'stringbuilder'], + ['one > 0.5 && two < 2.5', true, oneTwo], + ['notThere > 4', false], + ['float(5.5) && float(0.0)', true], + ['hello && "hello"', true], + ['items || ((2 + 2) <= (4 - 1))', true], // true || false + ['0 || false', true], // true || false + ['!(hello)', false], // false + ['!(10)', false], + ['!(0)', false], + ['one > 0.5 || two < 1.5', true, oneTwo], + ['one / 0 || two', true], + ['0/3', 0], - // String functions tests - ["concat(hello,world)", "helloworld"], - ["concat('hello','world')", "helloworld"], - ["concat(\"hello\",\"world\")", "helloworld"], - ["length('hello')", 5], - ["length(\"hello\")", 5], - ["length(concat(hello,world))", 10], - ["count('hello')", 5], - ["count(\"hello\")", 5], - ["count(concat(hello,world))", 10], - ["replace('hello', 'l', 'k')", "hekko"], - ["replace('hello', 'L', 'k')", "hello"], - ["replace(\"hello'\", \"'\", '\"')", "hello\""], - ["replace('hello\"', '\"', \"'\")", "hello'"], - ["replace('hello\"', '\"', '\n')", "hello\n"], - ["replace('hello\n', '\n', '\\\\')", "hello\\"], - ["replace('hello\\\\', '\\\\', '\\\\\\\\')", "hello\\\\"], - ["replaceIgnoreCase('hello', 'L', 'k')", "hekko"], - ["split('hello','e')", ["h", "llo"]], - ["substring('hello', 0, 5)", "hello"], - ["substring('hello', 0, 3)", "hel"], - ["substring('hello', 3)", "lo"], - ["substring('hello', 0, bag.index)", "hel"], - ["toLower('UpCase')", "upcase"], - ["toUpper('lowercase')", "LOWERCASE"], - ["toLower(toUpper('lowercase'))", "lowercase"], - ["trim(' hello ')", "hello"], - ["trim(' hello')", "hello"], - ["trim('hello')", "hello"], - ["endsWith('hello','o')", true], - ["endsWith('hello','a')", false], - ["endsWith(hello,'o')", true], - ["endsWith(hello,'a')", false], - ["startsWith('hello','h')", true], - ["startsWith('hello','a')", false], - ["countWord(hello)", 1], - ["countWord(concat(hello, ' ', world))", 2], - ["addOrdinal(11)", "11th"], - ["addOrdinal(11 + 1)", "12th"], - ["addOrdinal(11 + 2)", "13th"], - ["addOrdinal(11 + 10)", "21st"], - ["addOrdinal(11 + 11)", "22nd"], - ["addOrdinal(11 + 12)", "23rd"], - ["addOrdinal(11 + 13)", "24th"], - ["addOrdinal(-1)", "-1"],//original string value - ["count(newGuid())", 36], - ["indexOf(newGuid(), '-')", 8], - ["indexOf(newGuid(), '-')", 8], - ["indexOf(hello, '-')", -1], - ["lastIndexOf(newGuid(), '-')", 23], - ["lastIndexOf(newGuid(), '-')", 23], - ["lastIndexOf(hello, '-')", -1], - ["sortBy(items)", ["one", "two", "zero"]], - ["sortBy(nestedItems, 'x')[0].x", 1], - ["sortByDescending(items)", ["zero", "two", "one"]], - ["sortByDescending(nestedItems, 'x')[0].x", 3], + // String functions tests + ['concat(hello,world)', 'helloworld'], + ['concat(hello,nullObj)', 'hello'], + ['concat(\'hello\',\'world\')', 'helloworld'], + ['concat("hello","world")', 'helloworld'], + ['length(\'hello\')', 5], + ['length(nullObj)', 0], + ['length("hello")', 5], + ['length(concat(hello,world))', 10], + ['count(\'hello\')', 5], + ['count("hello")', 5], + ['count(concat(hello,world))', 10], + ['replace(\'hello\', \'l\', \'k\')', 'hekko'], + ['replace(\'hello\', \'L\', \'k\')', 'hello'], + ['replace(nullObj, \'L\', \'k\')', ''], + ['replace(\'hello\', \'L\', nullObj)', 'hello'], + ['replace("hello\'", "\'", \'"\')', 'hello"'], + ['replace(\'hello"\', \'"\', "\'")', 'hello\''], + ['replace(\'hello"\', \'"\', \'\n\')', 'hello\n'], + ['replace(\'hello\n\', \'\n\', \'\\\\\')', 'hello\\'], + ['replace(\'hello\\\\\', \'\\\\\', \'\\\\\\\\\')', 'hello\\\\'], + ['replaceIgnoreCase(\'hello\', \'L\', \'k\')', 'hekko'], + ['replaceIgnoreCase(nullObj, \'L\', \'k\')', ''], + ['replaceIgnoreCase(\'hello\', \'L\', nullObj)', 'heo'], + ['split(\'hello\',\'e\')', ['h', 'llo']], + ['split(nullObj,\'e\')', ['']], + ['split(\'hello\',nullObj)', ['h', 'e', 'l', 'l', 'o']], + ['split(nullObj,nullObj)', []], + ['substring(\'hello\', 0, 5)', 'hello'], + ['substring(\'hello\', 0, 3)', 'hel'], + ['substring(\'hello\', 3)', 'lo'], + ['substring(nullObj, 3)', ''], + ['substring(nullObj, 0, 3)', ''], + ['substring(\'hello\', 0, bag.index)', 'hel'], + ['toLower(\'UpCase\')', 'upcase'], + ['toLower(nullObj)', ''], + ['toUpper(\'lowercase\')', 'LOWERCASE'], + ['toUpper(nullObj)', ''], + ['toLower(toUpper(\'lowercase\'))', 'lowercase'], + ['trim(\' hello \')', 'hello'], + ['trim(nullObj)', ''], + ['trim(\' hello\')', 'hello'], + ['trim(\'hello\')', 'hello'], + ['endsWith(\'hello\',\'o\')', true], + ['endsWith(\'hello\',\'a\')', false], + ['endsWith(nullObj,\'a\')', false], + ['endsWith(nullObj, nullObj)', true], + ['endsWith(\'hello\',nullObj)', true], + ['endsWith(hello,\'o\')', true], + ['endsWith(hello,\'a\')', false], + ['startsWith(\'hello\',\'h\')', true], + ['startsWith(\'hello\',\'a\')', false], + ['startsWith(nullObj,\'a\')', false], + ['startsWith(nullObj, nullObj)', true], + ['startsWith(\'hello\',nullObj)', true], + ['countWord(hello)', 1], + ['countWord(concat(hello, \' \', world))', 2], + ['addOrdinal(11)', '11th'], + ['addOrdinal(11 + 1)', '12th'], + ['addOrdinal(11 + 2)', '13th'], + ['addOrdinal(11 + 10)', '21st'], + ['addOrdinal(11 + 11)', '22nd'], + ['addOrdinal(11 + 12)', '23rd'], + ['addOrdinal(11 + 13)', '24th'], + ['addOrdinal(-1)', '-1'],//original string value + ['count(newGuid())', 36], + ['indexOf(newGuid(), \'-\')', 8], + ['indexOf(newGuid(), \'-\')', 8], + ['indexOf(hello, \'-\')', -1], + ['indexOf(nullObj, \'-\')', -1], + ['indexOf(hello, nullObj)', 0], + ['lastIndexOf(nullObj, \'-\')', -1], + ['lastIndexOf(hello, nullObj)', 5], + ['lastIndexOf(newGuid(), \'-\')', 23], + ['lastIndexOf(newGuid(), \'-\')', 23], + ['lastIndexOf(hello, \'-\')', -1], + ['sortBy(items)', ['one', 'two', 'zero']], + ['sortBy(nestedItems, \'x\')[0].x', 1], + ['sortByDescending(items)', ['zero', 'two', 'one']], + ['sortByDescending(nestedItems, \'x\')[0].x', 3], - // Logical comparison functions tests - ["and(1 == 1, 1 < 2, 1 > 2)", false], - ["and(!true, !!true)", false],//false && true - ["and(!!true, !!true)", true],//true && true - ["and(hello != 'world', bool('true'))", true],//true && true - ["and(hello == 'world', bool('true'))", false],//false && true - ["or(!exists(one), !!exists(one))", true],//false && true - ["or(!exists(one), !exists(one))", false],//false && false - ["greater(one, two)", false, oneTwo], - ["greater(one , 0.5) && less(two , 2.5)", true],// true && true - ["greater(one , 0.5) || less(two , 1.5)", true],//true || false - ["greater(5, 2)", true], - ["greater(2, 2)", false], - ["greater(one, two)", false], - ["greaterOrEquals((1 + 2) , (4 - 1))", true], - ["greaterOrEquals((2 + 2) , (4 - 1))", true], - ["greaterOrEquals(float(5.5) , float(4 - 1))", true], - ["greaterOrEquals(one, one)", true], - ["greaterOrEquals(one, two)", false], - ["greaterOrEquals(one, one)", true, one], - ["greaterOrEquals(one, two)", false, oneTwo], - ["less(5, 2)", false], - ["less(2, 2)", false], - ["less(one, two)", true], - ["less(one, two)", true, oneTwo], - ["lessOrEquals(one, one)", true, ["one"]], - ["lessOrEquals(one, two)", true, oneTwo], - ["lessOrEquals(one, one)", true], - ["lessOrEquals(one, two)", true], - ["lessOrEquals((1 + 2) , (4 - 1))", true], - ["lessOrEquals((2 + 2) , (4 - 1))", false], - ["lessOrEquals(float(5.5) , float(4 - 1))", false], - ["lessOrEquals(one, one)", true], - ["lessOrEquals(one, two)", true], - ["equals(hello, 'hello')", true], - ["equals(bag.index, 3)", true], - ["equals(bag.index, 2)", false], - ["equals(hello == 'world', bool('true'))", false], - ["equals(hello == 'world', bool(0))", false], - ["if(!exists(one), 'r1', 'r2')", "r2"], - ["if(!!exists(one), 'r1', 'r2')", "r1"], - ["if(0, 'r1', 'r2')", "r1"], - ["if(bool('true'), 'r1', 'r2')", "r1"], - ["if(istrue, 'r1', 'r2')", "r1"], // true - ["exists(one)", true], - ["exists(xxx)", false], - ["exists(one.xxx)", false], - ["not(one != null)", false], - ["not(not(one != null))", true], - ["not(false)", true], - ["not(one == 1.0)", false, ["one"]], - ["not(not(one == 1.0))", true, ["one"]], - ["not(false)", true], - ["and(one > 0.5, two < 2.5)", true, oneTwo], - ["and(float(5.5), float(0.0))", true], - ["and(hello, \"hello\")", true], - ["or(items, (2 + 2) <= (4 - 1))", true], // true || false - ["or(0, false)", true], // true || false - ["not(hello)", false], // false - ["not(10)", false], - ["not(0)", false], - ["if(hello, 'r1', 'r2')", "r1"], - ["if(null, 'r1', 'r2')", "r2"], - ["if(hello * 5, 'r1', 'r2')", "r2"], + // Logical comparison functions tests + ['and(1 == 1, 1 < 2, 1 > 2)', false], + ['and(!true, !!true)', false],//false && true + ['and(!!true, !!true)', true],//true && true + ['and(hello != \'world\', bool(\'true\'))', true],//true && true + ['and(hello == \'world\', bool(\'true\'))', false],//false && true + ['or(!exists(one), !!exists(one))', true],//false && true + ['or(!exists(one), !exists(one))', false],//false && false + ['greater(one, two)', false, oneTwo], + ['greater(one , 0.5) && less(two , 2.5)', true],// true && true + ['greater(one , 0.5) || less(two , 1.5)', true],//true || false + ['greater(5, 2)', true], + ['greater(2, 2)', false], + ['greater(one, two)', false], + ['greaterOrEquals((1 + 2) , (4 - 1))', true], + ['greaterOrEquals((2 + 2) , (4 - 1))', true], + ['greaterOrEquals(float(5.5) , float(4 - 1))', true], + ['greaterOrEquals(one, one)', true], + ['greaterOrEquals(one, two)', false], + ['greaterOrEquals(one, one)', true, one], + ['greaterOrEquals(one, two)', false, oneTwo], + ['less(5, 2)', false], + ['less(2, 2)', false], + ['less(one, two)', true], + ['less(one, two)', true, oneTwo], + ['lessOrEquals(one, one)', true, ['one']], + ['lessOrEquals(one, two)', true, oneTwo], + ['lessOrEquals(one, one)', true], + ['lessOrEquals(one, two)', true], + ['lessOrEquals((1 + 2) , (4 - 1))', true], + ['lessOrEquals((2 + 2) , (4 - 1))', false], + ['lessOrEquals(float(5.5) , float(4 - 1))', false], + ['lessOrEquals(one, one)', true], + ['lessOrEquals(one, two)', true], + ['equals(hello, \'hello\')', true], + ['equals(bag.index, 3)', true], + ['equals(bag.index, 2)', false], + ['equals(hello == \'world\', bool(\'true\'))', false], + ['equals(hello == \'world\', bool(0))', false], + ['if(!exists(one), \'r1\', \'r2\')', 'r2'], + ['if(!!exists(one), \'r1\', \'r2\')', 'r1'], + ['if(0, \'r1\', \'r2\')', 'r1'], + ['if(bool(\'true\'), \'r1\', \'r2\')', 'r1'], + ['if(istrue, \'r1\', \'r2\')', 'r1'], // true + ['exists(one)', true], + ['exists(xxx)', false], + ['exists(one.xxx)', false], + ['not(one != null)', false], + ['not(not(one != null))', true], + ['not(false)', true], + ['not(one == 1.0)', false, ['one']], + ['not(not(one == 1.0))', true, ['one']], + ['not(false)', true], + ['and(one > 0.5, two < 2.5)', true, oneTwo], + ['and(float(5.5), float(0.0))', true], + ['and(hello, "hello")', true], + ['or(items, (2 + 2) <= (4 - 1))', true], // true || false + ['or(0, false)', true], // true || false + ['not(hello)', false], // false + ['not(10)', false], + ['not(0)', false], + ['if(hello, \'r1\', \'r2\')', 'r1'], + ['if(null, \'r1\', \'r2\')', 'r2'], + ['if(hello * 5, \'r1\', \'r2\')', 'r2'], - // Conversion functions tests - ["float('10.333')", 10.333], - ["float('10')", 10.0], - ["int('10')", 10], - ["string('str')", "str"], - ["string(one)", "1"], //ts-->1, C#-->1.0 - ["string(bool(1))", "true"], - ["string(bag.set)", "{\"four\":4}"], // ts-->"{\"four\":4}", C# --> "{\"four\":4.0}" - ["bool(1)", true], - ["bool(0)", true], - ["bool(null)", false], - ["bool(hello * 5)", false], - ["bool('false')", true], // we make it true, because it is not empty - ["bool('hi')", true], - ["createArray('h', 'e', 'l', 'l', 'o')", ["h", "e", "l", "l", "o"]], - ["createArray(1, bool(0), string(bool(1)), float('10'))", [1, true, "true", 10.0]], - ["array(hello)", ['hello']], - ["binary(hello)", '0110100001100101011011000110110001101111'], - ["dataUri(hello)", 'data:text/plain;charset=utf-8;base64,aGVsbG8='], - ["dataUriToBinary(dataUri(hello))", '011001000110000101110100011000010011101001110100011001010111100001110100001011110111000001101100011000010110100101101110001110110110001101101000011000010111001001110011011001010111010000111101011101010111010001100110001011010011100000111011011000100110000101110011011001010011011000110100001011000110000101000111010101100111001101100010010001110011100000111101'], - ["dataUriToString(dataUri(hello))", 'hello'], - ["uriComponentToString('http%3A%2F%2Fcontoso.com')", 'http://contoso.com'], - ["base64(hello)", 'aGVsbG8='], - ["base64ToBinary(base64(hello))", '0110000101000111010101100111001101100010010001110011100000111101'], - ["base64ToString(base64(hello))", 'hello'], - ["uriComponent('http://contoso.com')", 'http%3A%2F%2Fcontoso.com'], - ["xml('{\"person\": {\"name\": \"Sophia Owen\", \"city\": \"Seattle\"}}')", '\n\n Sophia Owen\n Seattle\n'], + // Conversion functions tests + ['float(\'10.333\')', 10.333], + ['float(\'10\')', 10.0], + ['int(\'10\')', 10], + ['string(\'str\')', 'str'], + ['string(one)', '1'], //ts-->1, C#-->1.0 + ['string(bool(1))', 'true'], + ['string(bag.set)', '{"four":4}'], // ts-->"{\"four\":4}", C# --> "{\"four\":4.0}" + ['bool(1)', true], + ['bool(0)', true], + ['bool(null)', false], + ['bool(hello * 5)', false], + ['bool(\'false\')', true], // we make it true, because it is not empty + ['bool(\'hi\')', true], + ['createArray(\'h\', \'e\', \'l\', \'l\', \'o\')', ['h', 'e', 'l', 'l', 'o']], + ['createArray(1, bool(0), string(bool(1)), float(\'10\'))', [1, true, 'true', 10.0]], + ['array(hello)', ['hello']], + ['binary(hello)', '0110100001100101011011000110110001101111'], + ['dataUri(hello)', 'data:text/plain;charset=utf-8;base64,aGVsbG8='], + ['dataUriToBinary(dataUri(hello))', '011001000110000101110100011000010011101001110100011001010111100001110100001011110111000001101100011000010110100101101110001110110110001101101000011000010111001001110011011001010111010000111101011101010111010001100110001011010011100000111011011000100110000101110011011001010011011000110100001011000110000101000111010101100111001101100010010001110011100000111101'], + ['dataUriToString(dataUri(hello))', 'hello'], + ['uriComponentToString(\'http%3A%2F%2Fcontoso.com\')', 'http://contoso.com'], + ['base64(hello)', 'aGVsbG8='], + ['base64ToBinary(base64(hello))', '0110000101000111010101100111001101100010010001110011100000111101'], + ['base64ToString(base64(hello))', 'hello'], + ['uriComponent(\'http://contoso.com\')', 'http%3A%2F%2Fcontoso.com'], - // Math functions tests - ["add(1, 2, 3)", 6], - ["add(1, 2)", 3], - ["add(1.0, 2.0)", 3.0], - ["add(mul(1, 2), 3)", 5], - ["max(mul(1, 2), 5) ", 5], - ["max(5)", 5], - ["max(4, 5) ", 5], - ["min(mul(1, 2), 5) ", 2], - ["min(4, 5) ", 4], - ["min(4)", 4], - ["min(1.0, two) + max(one, 2.0)", 3.0, oneTwo], - ["sub(2, 1)", 1], - ["sub(2, 1, 1)", 0], - ["sub(2.0, 0.5)", 1.5], - ["mul(2, 5)", 10], - ["mul(2, 5, 2)", 20], - ["div(mul(2, 5), 2)", 5], - ["div(5, 2)", 2], - ["div(5, 2, 2)", 1], - ["exp(2,2)", 4.0], - ["mod(5,2)", 1], - ["rand(1, 2)", 1], - ["rand(2, 3)", 2], + // Math functions tests + ['add(1, 2, 3)', 6], + ['add(1, 2)', 3], + ['add(1.0, 2.0)', 3.0], + ['add(mul(1, 2), 3)', 5], + ['max(mul(1, 2), 5) ', 5], + ['max(5)', 5], + ['max(4, 5) ', 5], + ['min(mul(1, 2), 5) ', 2], + ['min(4, 5) ', 4], + ['min(4)', 4], + ['min(1.0, two) + max(one, 2.0)', 3.0, oneTwo], + ['sub(2, 1)', 1], + ['sub(2, 1, 1)', 0], + ['sub(2.0, 0.5)', 1.5], + ['mul(2, 5)', 10], + ['mul(2, 5, 2)', 20], + ['div(mul(2, 5), 2)', 5], + ['div(5, 2)', 2], + ['div(5, 2, 2)', 1], + ['exp(2,2)', 4.0], + ['mod(5,2)', 1], + ['rand(1, 2)', 1], + ['rand(2, 3)', 2], - // Date and time function tests - // All the timestamp strings passed in must be in ISO format of YYYY-MM-DDTHH:mm:ss.sssZ - // Otherwise exceptions will be thrown out - // All the output timestamp strings are in ISO format of YYYY-MM-DDTHH:mm:ss.sssZ - // Init dateTime: 2018-03-15T13:00:00:111Z - ["addDays(timestamp, 1)", "2018-03-16T13:00:00.111Z"], - ["addDays(timestamp, 1,'MM-dd-yy')", "03-16-18"], - ["addHours(timestamp, 1)", "2018-03-15T14:00:00.111Z"], - ["addHours(timestamp, 1,'MM-dd-yy hh-mm')", "03-15-18 02-00"], - ["addMinutes(timestamp, 1)", "2018-03-15T13:01:00.111Z"], - ["addMinutes(timestamp, 1, 'MM-dd-yy hh-mm')", "03-15-18 01-01"], - ["addSeconds(timestamp, 1)", "2018-03-15T13:00:01.111Z"], - ["addSeconds(timestamp, 1, 'MM-dd-yy hh-mm-ss')", "03-15-18 01-00-01"], - ["dayOfMonth(timestamp)", 15], - ["dayOfWeek(timestamp)", 4],//Thursday - ["dayOfYear(timestamp)", 74], - ["month(timestamp)", 3], - ["date(timestamp)", "3/15/2018"],//Default. TODO - ["year(timestamp)", 2018], - ["length(utcNow())", 24], - ["utcNow('MM-DD-YY')", moment(new Date().toISOString()).utc().format('MM-DD-YY')], - ["formatDateTime(notISOTimestamp)", "2018-03-15T13:00:00.000Z"], - ["formatDateTime(notISOTimestamp, 'MM-dd-yy')", "03-15-18"], - ["formatDateTime('2018-03-15')", "2018-03-15T00:00:00.000Z"], - ["formatDateTime(timestampObj)", "2018-03-15T13:00:00.000Z"], - ["formatDateTime(unixTimestamp)", "2018-03-15T13:00:00.000Z"], - ["subtractFromTime(timestamp, 1, 'Year')", "2017-03-15T13:00:00.111Z"], - ["subtractFromTime(timestamp, 1, 'Month')", "2018-02-15T13:00:00.111Z"], - ["subtractFromTime(timestamp, 1, 'Week')", "2018-03-08T13:00:00.111Z"], - ["subtractFromTime(timestamp, 1, 'Day')", "2018-03-14T13:00:00.111Z"], - ["subtractFromTime(timestamp, 1, 'Hour')", "2018-03-15T12:00:00.111Z"], - ["subtractFromTime(timestamp, 1, 'Minute')", "2018-03-15T12:59:00.111Z"], - ["subtractFromTime(timestamp, 1, 'Second')", "2018-03-15T12:59:59.111Z"], - ["dateReadBack(timestamp, addDays(timestamp, 1))", "tomorrow"], - ["dateReadBack(addDays(timestamp, 1),timestamp)", "yesterday"], - ["getTimeOfDay('2018-03-15T00:00:00.000Z')", "midnight"], - ["getTimeOfDay('2018-03-15T08:00:00.000Z')", "morning"], - ["getTimeOfDay('2018-03-15T12:00:00.000Z')", "noon"], - ["getTimeOfDay('2018-03-15T13:00:00.000Z')", "afternoon"], - ["getTimeOfDay('2018-03-15T18:00:00.000Z')", "evening"], - ["getTimeOfDay('2018-03-15T22:00:00.000Z')", "evening"], - ["getTimeOfDay('2018-03-15T23:00:00.000Z')", "night"], - ["getPastTime(1, 'Year', 'MM-dd-yy')", moment(new Date().toISOString()).utc().subtract(1, 'years').format('MM-DD-YY')], - ["getPastTime(1, 'Month', 'MM-dd-yy')", moment(new Date().toISOString()).utc().subtract(1, 'months').format('MM-DD-YY')], - ["getPastTime(1, 'Week', 'MM-dd-yy')", moment(new Date().toISOString()).utc().subtract(7, 'days').format('MM-DD-YY')], - ["getPastTime(1, 'Day', 'MM-dd-yy')", moment(new Date().toISOString()).utc().subtract(1, 'days').format('MM-DD-YY')], - ["getFutureTime(1, 'Year', 'MM-dd-yy')", moment(new Date().toISOString()).utc().add(1, 'years').format('MM-DD-YY')], - ["getFutureTime(1, 'Month', 'MM-dd-yy')", moment(new Date().toISOString()).utc().add(1, 'months').format('MM-DD-YY')], - ["getFutureTime(1, 'Week', 'MM-dd-yy')", moment(new Date().toISOString()).utc().add(7, 'days').format('MM-DD-YY')], - ["getFutureTime(1, 'Day', 'MM-dd-yy')", moment(new Date().toISOString()).utc().add(1, 'days').format('MM-DD-YY')], - ["addToTime('2018-01-01T08:00:00.000Z', 1, 'Day')", "2018-01-02T08:00:00.000+00:00"], - ["addToTime('2018-01-01T08:00:00.000Z', sub(3,1), 'Week')", "2018-01-15T08:00:00.000+00:00"], - ["addToTime('2018-01-01T08:00:00.000Z', 1, 'Month', 'MM-DD-YY')", "02-01-18"], - ["convertFromUTC('2018-02-02T02:00:00.000Z', 'Pacific Standard Time')", "2018-02-01T18:00:00.000-08:00"], - ["convertFromUTC('2018-02-02T02:00:00.000Z', 'Pacific Standard Time', 'MM-DD-YY')", "02-01-18"], - ["convertToUTC('2018-01-01T18:00:00.000', 'Pacific Standard Time')", "2018-01-02T02:00:00.000+00:00"], - ["convertToUTC('2018-01-01T18:00:00.000', 'Pacific Standard Time', 'MM-DD-YY')", "01-02-18"], - ["startOfDay('2018-03-15T13:30:30.000Z')", "2018-03-15T00:00:00.000+00:00"], - ["startOfHour('2018-03-15T13:30:30.000Z')", "2018-03-15T13:00:00.000+00:00"], - ["startOfMonth('2018-03-15T13:30:30.000Z')", "2018-03-01T00:00:00.000+00:00"], - ["ticks('2018-01-01T08:00:00.000Z')", 636503904000000000], + // Date and time function tests + // All the timestamp strings passed in must be in ISO format of YYYY-MM-DDTHH:mm:ss.sssZ + // Otherwise exceptions will be thrown out + // All the output timestamp strings are in ISO format of YYYY-MM-DDTHH:mm:ss.sssZ + // Init dateTime: 2018-03-15T13:00:00:111Z + ['addDays(timestamp, 1)', '2018-03-16T13:00:00.111Z'], + ['addDays(timestamp, 1,\'MM-dd-yy\')', '03-16-18'], + ['addHours(timestamp, 1)', '2018-03-15T14:00:00.111Z'], + ['addHours(timestamp, 1,\'MM-dd-yy hh-mm\')', '03-15-18 02-00'], + ['addMinutes(timestamp, 1)', '2018-03-15T13:01:00.111Z'], + ['addMinutes(timestamp, 1, \'MM-dd-yy hh-mm\')', '03-15-18 01-01'], + ['addSeconds(timestamp, 1)', '2018-03-15T13:00:01.111Z'], + ['addSeconds(timestamp, 1, \'MM-dd-yy hh-mm-ss\')', '03-15-18 01-00-01'], + ['dayOfMonth(timestamp)', 15], + ['dayOfWeek(timestamp)', 4],//Thursday + ['dayOfYear(timestamp)', 74], + ['month(timestamp)', 3], + ['date(timestamp)', '3/15/2018'],//Default. TODO + ['year(timestamp)', 2018], + ['length(utcNow())', 24], + ['utcNow(\'MM-DD-YY\')', moment(new Date().toISOString()).utc().format('MM-DD-YY')], + ['formatDateTime(notISOTimestamp)', '2018-03-15T13:00:00.000Z'], + ['formatDateTime(notISOTimestamp, \'MM-dd-yy\')', '03-15-18'], + ['formatDateTime(\'2018-03-15\')', '2018-03-15T00:00:00.000Z'], + ['formatDateTime(timestampObj)', '2018-03-15T13:00:00.000Z'], + ['formatDateTime(unixTimestamp)', '2018-03-15T13:00:00.000Z'], + ['subtractFromTime(timestamp, 1, \'Year\')', '2017-03-15T13:00:00.111Z'], + ['subtractFromTime(timestamp, 1, \'Month\')', '2018-02-15T13:00:00.111Z'], + ['subtractFromTime(timestamp, 1, \'Week\')', '2018-03-08T13:00:00.111Z'], + ['subtractFromTime(timestamp, 1, \'Day\')', '2018-03-14T13:00:00.111Z'], + ['subtractFromTime(timestamp, 1, \'Hour\')', '2018-03-15T12:00:00.111Z'], + ['subtractFromTime(timestamp, 1, \'Minute\')', '2018-03-15T12:59:00.111Z'], + ['subtractFromTime(timestamp, 1, \'Second\')', '2018-03-15T12:59:59.111Z'], + ['dateReadBack(timestamp, addDays(timestamp, 1))', 'tomorrow'], + ['dateReadBack(addDays(timestamp, 1),timestamp)', 'yesterday'], + ['getTimeOfDay(\'2018-03-15T00:00:00.000Z\')', 'midnight'], + ['getTimeOfDay(\'2018-03-15T08:00:00.000Z\')', 'morning'], + ['getTimeOfDay(\'2018-03-15T12:00:00.000Z\')', 'noon'], + ['getTimeOfDay(\'2018-03-15T13:00:00.000Z\')', 'afternoon'], + ['getTimeOfDay(\'2018-03-15T18:00:00.000Z\')', 'evening'], + ['getTimeOfDay(\'2018-03-15T22:00:00.000Z\')', 'evening'], + ['getTimeOfDay(\'2018-03-15T23:00:00.000Z\')', 'night'], + ['getPastTime(1, \'Year\', \'MM-dd-yy\')', moment(new Date().toISOString()).utc().subtract(1, 'years').format('MM-DD-YY')], + ['getPastTime(1, \'Month\', \'MM-dd-yy\')', moment(new Date().toISOString()).utc().subtract(1, 'months').format('MM-DD-YY')], + ['getPastTime(1, \'Week\', \'MM-dd-yy\')', moment(new Date().toISOString()).utc().subtract(7, 'days').format('MM-DD-YY')], + ['getPastTime(1, \'Day\', \'MM-dd-yy\')', moment(new Date().toISOString()).utc().subtract(1, 'days').format('MM-DD-YY')], + ['getFutureTime(1, \'Year\', \'MM-dd-yy\')', moment(new Date().toISOString()).utc().add(1, 'years').format('MM-DD-YY')], + ['getFutureTime(1, \'Month\', \'MM-dd-yy\')', moment(new Date().toISOString()).utc().add(1, 'months').format('MM-DD-YY')], + ['getFutureTime(1, \'Week\', \'MM-dd-yy\')', moment(new Date().toISOString()).utc().add(7, 'days').format('MM-DD-YY')], + ['getFutureTime(1, \'Day\', \'MM-dd-yy\')', moment(new Date().toISOString()).utc().add(1, 'days').format('MM-DD-YY')], + ['addToTime(\'2018-01-01T08:00:00.000Z\', 1, \'Day\')', '2018-01-02T08:00:00.000+00:00'], + ['addToTime(\'2018-01-01T08:00:00.000Z\', sub(3,1), \'Week\')', '2018-01-15T08:00:00.000+00:00'], + ['addToTime(\'2018-01-01T08:00:00.000Z\', 1, \'Month\', \'MM-DD-YY\')', '02-01-18'], + ['convertFromUTC(\'2018-02-02T02:00:00.000Z\', \'Pacific Standard Time\')', '2018-02-01T18:00:00.000-08:00'], + ['convertFromUTC(\'2018-02-02T02:00:00.000Z\', \'Pacific Standard Time\', \'MM-DD-YY\')', '02-01-18'], + ['convertToUTC(\'2018-01-01T18:00:00.000\', \'Pacific Standard Time\')', '2018-01-02T02:00:00.000+00:00'], + ['convertToUTC(\'2018-01-01T18:00:00.000\', \'Pacific Standard Time\', \'MM-DD-YY\')', '01-02-18'], + ['startOfDay(\'2018-03-15T13:30:30.000Z\')', '2018-03-15T00:00:00.000+00:00'], + ['startOfHour(\'2018-03-15T13:30:30.000Z\')', '2018-03-15T13:00:00.000+00:00'], + ['startOfMonth(\'2018-03-15T13:30:30.000Z\')', '2018-03-01T00:00:00.000+00:00'], + ['ticks(\'2018-01-01T08:00:00.000Z\')', 636503904000000000], - //URI parsing functions tests - ["uriHost('https://www.localhost.com:8080')", "www.localhost.com"], - ["uriPath('http://www.contoso.com/catalog/shownew.htm?date=today')", "/catalog/shownew.htm"], - ["uriPathAndQuery('http://www.contoso.com/catalog/shownew.htm?date=today')", "/catalog/shownew.htm?date=today"], - ["uriPort('http://www.localhost:8080')", 8080], - ["uriQuery('http://www.contoso.com/catalog/shownew.htm?date=today')", "?date=today"], - ["uriScheme('http://www.contoso.com/catalog/shownew.htm?date=today')", "http"], + //URI parsing functions tests + ['uriHost(\'https://www.localhost.com:8080\')', 'www.localhost.com'], + ['uriPath(\'http://www.contoso.com/catalog/shownew.htm?date=today\')', '/catalog/shownew.htm'], + ['uriPathAndQuery(\'http://www.contoso.com/catalog/shownew.htm?date=today\')', '/catalog/shownew.htm?date=today'], + ['uriPort(\'http://www.localhost:8080\')', 8080], + ['uriQuery(\'http://www.contoso.com/catalog/shownew.htm?date=today\')', '?date=today'], + ['uriScheme(\'http://www.contoso.com/catalog/shownew.htm?date=today\')', 'http'], - // Collection functions tests - ["sum(createArray(1, 2))", 3], - ["sum(createArray(one, two, 3))", 6.0], - ["average(createArray(1, 2))", 1.5], - ["average(createArray(one, two, 3))", 2.0], - ["contains('hello world', 'hello')", true], - ["contains('hello world', 'hellow')", false], - ["contains(items, 'zero')", true], - ["contains(items, 'hi')", false], - ["contains(bag, 'three')", true], - ["contains(bag, 'xxx')", false], - ["count(split(hello,'e'))", 2], - ["count(createArray('h', 'e', 'l', 'l', 'o'))", 5], - ["empty('')", true], - ["empty('a')", false], - ["empty(bag)", false], - ["empty(items)", false], - ["first(items)", "zero"], - ["first('hello')", "h"], - ["first(createArray(0, 1, 2))", 0], - ["first(1)", undefined], - ["first(nestedItems).x", 1, ["nestedItems"]], - ["join(items,',')", "zero,one,two"], - ["join(createArray('a', 'b', 'c'), '.')", "a.b.c"], - ["join(createArray('a', 'b', 'c'), ',', ' and ')", "a,b and c"], - ["join(foreach(items, item, item), ',')", "zero,one,two"], - ["join(foreach(nestedItems, i, i.x + first(nestedItems).x), ',')", "2,3,4", ["nestedItems"]], - ["join(foreach(items, item, concat(item, string(count(items)))), ',')", "zero3,one3,two3", ["items"]], - ["join(select(items, item, item), ',')", "zero,one,two"], - ["join(select(nestedItems, i, i.x + first(nestedItems).x), ',')", "2,3,4", ["nestedItems"]], - ["join(select(items, item, concat(item, string(count(items)))), ',')", "zero3,one3,two3", ["items"]], - ["join(where(items, item, item == 'two'), ',')", "two"], - ["join(foreach(where(nestedItems, item, item.x > 1), result, result.x), ',')", "2,3", ["nestedItems"]], - ["last(items)", "two"], - ["last('hello')", "o"], - ["last(createArray(0, 1, 2))", 2], - ["last(1)", undefined], - ["count(union(createArray('a', 'b')))", 2], - ["count(union(createArray('a', 'b'), createArray('b', 'c'), createArray('b', 'd')))", 4], - ["count(intersection(createArray('a', 'b')))", 2], - ["count(intersection(createArray('a', 'b'), createArray('b', 'c'), createArray('b', 'd')))", 1], - ["skip(createArray('a', 'b', 'c', 'd'), 2)", ['c', 'd']], - ["take(hello, two)", 'he'], - ["take(createArray('a', 'b', 'c', 'd'), one)", ['a']], - ["subArray(createArray('a', 'b', 'c', 'd'), 1, 3)", ['b', 'c']], - ["subArray(createArray('a', 'b', 'c', 'd'), 1)", ['b', 'c', 'd']], - ["range(1, 4)", [1, 2, 3, 4]], - ["range(-1, 3)", [-1, 0, 1]], + // Collection functions tests + ['sum(createArray(1, 2))', 3], + ['sum(createArray(one, two, 3))', 6.0], + ['average(createArray(1, 2))', 1.5], + ['average(createArray(one, two, 3))', 2.0], + ['contains(\'hello world\', \'hello\')', true], + ['contains(\'hello world\', \'hellow\')', false], + ['contains(items, \'zero\')', true], + ['contains(items, \'hi\')', false], + ['contains(bag, \'three\')', true], + ['contains(bag, \'xxx\')', false], + ['count(split(hello,\'e\'))', 2], + ['count(createArray(\'h\', \'e\', \'l\', \'l\', \'o\'))', 5], + ['empty(\'\')', true], + ['empty(\'a\')', false], + ['empty(bag)', false], + ['empty(items)', false], + ['first(items)', 'zero'], + ['first(\'hello\')', 'h'], + ['first(createArray(0, 1, 2))', 0], + ['first(1)', undefined], + ['first(nestedItems).x', 1, ['nestedItems']], + ['join(items,\',\')', 'zero,one,two'], + ['join(createArray(\'a\', \'b\', \'c\'), \'.\')', 'a.b.c'], + ['join(createArray(\'a\', \'b\', \'c\'), \',\', \' and \')', 'a,b and c'], + ['join(foreach(items, item, item), \',\')', 'zero,one,two'], + ['join(foreach(nestedItems, i, i.x + first(nestedItems).x), \',\')', '2,3,4', ['nestedItems']], + ['join(foreach(items, item, concat(item, string(count(items)))), \',\')', 'zero3,one3,two3', ['items']], + ['join(select(items, item, item), \',\')', 'zero,one,two'], + ['join(select(nestedItems, i, i.x + first(nestedItems).x), \',\')', '2,3,4', ['nestedItems']], + ['join(select(items, item, concat(item, string(count(items)))), \',\')', 'zero3,one3,two3', ['items']], + ['join(where(items, item, item == \'two\'), \',\')', 'two'], + ['join(foreach(where(nestedItems, item, item.x > 1), result, result.x), \',\')', '2,3', ['nestedItems']], + ['last(items)', 'two'], + ['last(\'hello\')', 'o'], + ['last(createArray(0, 1, 2))', 2], + ['last(1)', undefined], + ['count(union(createArray(\'a\', \'b\')))', 2], + ['count(union(createArray(\'a\', \'b\'), createArray(\'b\', \'c\'), createArray(\'b\', \'d\')))', 4], + ['count(intersection(createArray(\'a\', \'b\')))', 2], + ['count(intersection(createArray(\'a\', \'b\'), createArray(\'b\', \'c\'), createArray(\'b\', \'d\')))', 1], + ['skip(createArray(\'a\', \'b\', \'c\', \'d\'), 2)', ['c', 'd']], + ['take(hello, two)', 'he'], + ['take(createArray(\'a\', \'b\', \'c\', \'d\'), one)', ['a']], + ['subArray(createArray(\'a\', \'b\', \'c\', \'d\'), 1, 3)', ['b', 'c']], + ['subArray(createArray(\'a\', \'b\', \'c\', \'d\'), 1)', ['b', 'c', 'd']], + ['range(1, 4)', [1, 2, 3, 4]], + ['range(-1, 3)', [-1, 0, 1]], - // Object manipulation and construction functions tests - ["string(addProperty(json('{\"key1\":\"value1\"}'), 'key2','value2'))", "{\"key1\":\"value1\",\"key2\":\"value2\"}"], - ["string(setProperty(json('{\"key1\":\"value1\"}'), 'key1','value2'))", "{\"key1\":\"value2\"}"], - ["string(removeProperty(json('{\"key1\":\"value1\",\"key2\":\"value2\"}'), 'key2'))", "{\"key1\":\"value1\"}"], - ["coalesce(nullObj,'hello',nullObj)", "hello"], - ["xPath(xmlStr,'sum(/produce/item/count)')", 30], - ["xPath(xmlStr,'/produce/item/name')", ["Gala", "Honeycrisp"]], - ["jPath(jsonStr, pathStr )", ['Jazz', 'Accord']], - ["jPath(jsonStr, '.automobiles[0].maker' )", ['Nissan']], + // Object manipulation and construction functions tests + ['string(addProperty(json(\'{"key1":"value1"}\'), \'key2\',\'value2\'))', '{"key1":"value1","key2":"value2"}'], + ['string(setProperty(json(\'{"key1":"value1"}\'), \'key1\',\'value2\'))', '{"key1":"value2"}'], + ['string(removeProperty(json(\'{"key1":"value1","key2":"value2"}\'), \'key2\'))', '{"key1":"value1"}'], + ['coalesce(nullObj,\'hello\',nullObj)', 'hello'], + ['jPath(jsonStr, pathStr )', ['Jazz', 'Accord']], + ['jPath(jsonStr, \'.automobiles[0].maker\' )', ['Nissan']], - // Short hand expression tests - ["@city == 'Bellevue'", false, ["turn.recognized.entities.city"]], - ["@city", "Seattle", ["turn.recognized.entities.city"]], - ["@city == 'Seattle'", true, ["turn.recognized.entities.city"]], - ["@ordinal[1]", "2", ["turn.recognized.entities.ordinal"]], - ["@['city']", "Seattle", ["turn.recognized.entities.city"]], - ["@[concat('cit', 'y')]", "Seattle", ["turn.recognized.entities"]], - ["@[concat(cit, y)]", "Seattle", ["turn.recognized.entities","cit","y"]], - ["#BookFlight == 'BookFlight'", true, ["turn.recognized.intents.BookFlight"]], - ["#BookHotel[1].Where", "Kirkland", ["turn.recognized.intents.BookHotel[1].Where"]], - ["exists(#BookFlight)", true, ["turn.recognized.intents.BookFlight"]], - ["$title", "Dialog Title", ["dialog.title"]], - ["$subTitle", "Dialog Sub Title", ["dialog.subTitle"]], - ["~xxx", "instance", ["dialog.instance.xxx"]], - ["~['yyy'].instanceY", "instanceY", ["dialog.instance.yyy.instanceY"]], - ["%xxx", "options", ["dialog.options.xxx"]], - ["%['xxx']", "options", ["dialog.options.xxx"]], - ["%yyy[1]", "optionY2", ["dialog.options.yyy[1]"]], - ["^x", 3], - ["^y", 2], - ["^z", 1], - ["count(@@CompositeList1) == 1 && count(@@CompositeList1[0]) == 1", true, ["turn.recognized.entities.CompositeList1", "turn.recognized.entities.CompositeList1[0]"]], - ["count(@CompositeList2) == 2 && (@CompositeList2)[0] == 'firstItem'", true, ["turn.recognized.entities.CompositeList2"]], + // Short hand expression tests + ['@city == \'Bellevue\'', false, ['turn.recognized.entities.city']], + ['@city', 'Seattle', ['turn.recognized.entities.city']], + ['@city == \'Seattle\'', true, ['turn.recognized.entities.city']], + ['@ordinal[1]', '2', ['turn.recognized.entities.ordinal']], + ['@[\'city\']', 'Seattle', ['turn.recognized.entities.city']], + ['@[concat(\'cit\', \'y\')]', 'Seattle', ['turn.recognized.entities']], + ['@[concat(cit, y)]', 'Seattle', ['turn.recognized.entities','cit','y']], + ['#BookFlight == \'BookFlight\'', true, ['turn.recognized.intents.BookFlight']], + ['#BookHotel[1].Where', 'Kirkland', ['turn.recognized.intents.BookHotel[1].Where']], + ['exists(#BookFlight)', true, ['turn.recognized.intents.BookFlight']], + ['$title', 'Dialog Title', ['dialog.title']], + ['$subTitle', 'Dialog Sub Title', ['dialog.subTitle']], + ['~xxx', 'instance', ['dialog.instance.xxx']], + ['~[\'yyy\'].instanceY', 'instanceY', ['dialog.instance.yyy.instanceY']], + ['%xxx', 'options', ['dialog.options.xxx']], + ['%[\'xxx\']', 'options', ['dialog.options.xxx']], + ['%yyy[1]', 'optionY2', ['dialog.options.yyy[1]']], + ['^x', 3], + ['^y', 2], + ['^z', 1], + ['count(@@CompositeList1) == 1 && count(@@CompositeList1[0]) == 1', true, ['turn.recognized.entities.CompositeList1', 'turn.recognized.entities.CompositeList1[0]']], + ['count(@CompositeList2) == 2 && (@CompositeList2)[0] == \'firstItem\'', true, ['turn.recognized.entities.CompositeList2']], - // Memory access tests - ["getProperty(bag, concat('na','me'))", "mybag"], - ["getProperty(bag, 'Name')", "mybag"], - ["getProperty(bag.set, 'FOUR')", 4.0], - ["items[2]", "two", ["items[2]"]], - ["bag.list[bag.index - 2]", "blue", ["bag.list", "bag.index"]], - ["items[nestedItems[1].x]", "two", ["items", "nestedItems[1].x"]], - ["bag['name']", "mybag"], - ["bag[substring(concat('na','me','more'), 0, length('name'))]", "mybag"], - ["bag['NAME']", "mybag"], - ["bag.set[concat('Fo', 'UR')]", 4.0], - ["getProperty(undefined, 'p')", undefined], - ["(getProperty(undefined, 'p'))[1]", undefined], + // Memory access tests + ['getProperty(bag, concat(\'na\',\'me\'))', 'mybag'], + ['getProperty(bag, \'Name\')', 'mybag'], + ['getProperty(bag.set, \'FOUR\')', 4.0], + ['items[2]', 'two', ['items[2]']], + ['bag.list[bag.index - 2]', 'blue', ['bag.list', 'bag.index']], + ['items[nestedItems[1].x]', 'two', ['items', 'nestedItems[1].x']], + ['bag[\'name\']', 'mybag'], + ['bag[substring(concat(\'na\',\'me\',\'more\'), 0, length(\'name\'))]', 'mybag'], + ['bag[\'NAME\']', 'mybag'], + ['bag.set[concat(\'Fo\', \'UR\')]', 4.0], + ['getProperty(undefined, \'p\')', undefined], + ['(getProperty(undefined, \'p\'))[1]', undefined], - // Dialog tests - ["user.lists.todo[int(@ordinal[0]) - 1] != null", true], - ["user.lists.todo[int(@ordinal[0]) + 3] != null", false], - ["count(user.lists.todo) > int(@ordinal[0])", true], - ["count(user.lists.todo) >= int(@ordinal[0])", true], - ["user.lists.todo[int(@ordinal[0]) - 1]", "todo1"], - ["user.lists[user.listType][int(@ordinal[0]) - 1]", "todo1"], + // Dialog tests + ['user.lists.todo[int(@ordinal[0]) - 1] != null', true], + ['user.lists.todo[int(@ordinal[0]) + 3] != null', false], + ['count(user.lists.todo) > int(@ordinal[0])', true], + ['count(user.lists.todo) >= int(@ordinal[0])', true], + ['user.lists.todo[int(@ordinal[0]) - 1]', 'todo1'], + ['user.lists[user.listType][int(@ordinal[0]) - 1]', 'todo1'], - // regex test - ["isMatch('abc', '^[ab]+$')", false], // simple character classes ([abc]), "+" (one or more) - ["isMatch('abb', '^[ab]+$')", true], // simple character classes ([abc]) - ["isMatch('123', '^[^abc]+$')", true], // complemented character classes ([^abc]) - ["isMatch('12a', '^[^abc]+$')", false], // complemented character classes ([^abc]) - ["isMatch('123', '^[^a-z]+$')", true], // complemented character classes ([^a-z]) - ["isMatch('12a', '^[^a-z]+$')", false], // complemented character classes ([^a-z]) - ["isMatch('a1', '^[a-z]?[0-9]$')", true], // "?" (zero or one) - ["isMatch('1', '^[a-z]?[0-9]$')", true], // "?" (zero or one) - ["isMatch('1', '^[a-z]*[0-9]$')", true], // "*" (zero or more) - ["isMatch('abc1', '^[a-z]*[0-9]$')", true], // "*" (zero or more) - ["isMatch('ab', '^[a-z]{1}$')", false], // "{x}" (exactly x occurrences) - ["isMatch('ab', '^[a-z]{1,2}$')", true], // "{x,y}" (at least x, at most y, occurrences) - ["isMatch('abc', '^[a-z]{1,}$')", true], // "{x,}" (x occurrences or more) - ["isMatch('Name', '^(?i)name$')", true], // "(?i)x" (x ignore case) - ["isMatch('FORTUNE', '(?i)fortune|future')", true], // "x|y" (alternation) - ["isMatch('FUTURE', '(?i)fortune|future')", true], // "x|y" (alternation) - ["isMatch('A', '(?i)fortune|future')", false], // "x|y" (alternation) - ["isMatch('abacaxc', 'ab.+?c')", true], // "+?" (lazy versions) - ["isMatch('abacaxc', 'ab.*?c')", true], // "*?" (lazy versions) - ["isMatch('abacaxc', 'ab.??c')", true], // "??" (lazy versions) - ["isMatch('12abc34', '([0-9]+)([a-z]+)([0-9]+)')", true], // "(...)" (simple group) - ["isMatch('12abc', '([0-9]+)([a-z]+)([0-9]+)')", false], // "(...)" (simple group) - [`isMatch('a', '\\w{1}')`, true], // "\w" (match [a-zA-Z0-9_]) - [`isMatch('1', '\\d{1}')`, true], // "\d" (match [0-9]) + // regex test + ['isMatch(\'abc\', \'^[ab]+$\')', false], // simple character classes ([abc]), "+" (one or more) + ['isMatch(\'abb\', \'^[ab]+$\')', true], // simple character classes ([abc]) + ['isMatch(\'123\', \'^[^abc]+$\')', true], // complemented character classes ([^abc]) + ['isMatch(\'12a\', \'^[^abc]+$\')', false], // complemented character classes ([^abc]) + ['isMatch(\'123\', \'^[^a-z]+$\')', true], // complemented character classes ([^a-z]) + ['isMatch(\'12a\', \'^[^a-z]+$\')', false], // complemented character classes ([^a-z]) + ['isMatch(\'a1\', \'^[a-z]?[0-9]$\')', true], // "?" (zero or one) + ['isMatch(\'1\', \'^[a-z]?[0-9]$\')', true], // "?" (zero or one) + ['isMatch(\'1\', \'^[a-z]*[0-9]$\')', true], // "*" (zero or more) + ['isMatch(\'abc1\', \'^[a-z]*[0-9]$\')', true], // "*" (zero or more) + ['isMatch(\'ab\', \'^[a-z]{1}$\')', false], // "{x}" (exactly x occurrences) + ['isMatch(\'ab\', \'^[a-z]{1,2}$\')', true], // "{x,y}" (at least x, at most y, occurrences) + ['isMatch(\'abc\', \'^[a-z]{1,}$\')', true], // "{x,}" (x occurrences or more) + ['isMatch(\'Name\', \'^(?i)name$\')', true], // "(?i)x" (x ignore case) + ['isMatch(\'FORTUNE\', \'(?i)fortune|future\')', true], // "x|y" (alternation) + ['isMatch(\'FUTURE\', \'(?i)fortune|future\')', true], // "x|y" (alternation) + ['isMatch(\'A\', \'(?i)fortune|future\')', false], // "x|y" (alternation) + ['isMatch(\'abacaxc\', \'ab.+?c\')', true], // "+?" (lazy versions) + ['isMatch(\'abacaxc\', \'ab.*?c\')', true], // "*?" (lazy versions) + ['isMatch(\'abacaxc\', \'ab.??c\')', true], // "??" (lazy versions) + ['isMatch(\'12abc34\', \'([0-9]+)([a-z]+)([0-9]+)\')', true], // "(...)" (simple group) + ['isMatch(\'12abc\', \'([0-9]+)([a-z]+)([0-9]+)\')', false], // "(...)" (simple group) + [`isMatch('a', '\\w{1}')`, true], // "\w" (match [a-zA-Z0-9_]) + [`isMatch('1', '\\d{1}')`, true], // "\d" (match [0-9]) - // Empty expression - ['', ''], + // Empty expression + ['', ''], - // SetPathToValue tests - ["setPathToValue(@@blah.woof, 1+2) + @@blah.woof", 6], - ["setPathToValue(path.simple, 3) + path.simple", 6], - ["setPathToValue(path.simple, 5) + path.simple", 10], - ["setPathToValue(path.array[0], 7) + path.array[0]", 14], - ["setPathToValue(path.array[1], 9) + path.array[1]", 18], - ["setPathToValue(path.darray[2][0], 11) + path.darray[2][0]", 22], - ["setPathToValue(path.darray[2][3].foo, 13) + path.darray[2][3].foo", 26], - ["setPathToValue(path.overwrite, 3) + setPathToValue(path.overwrite[0], 4) + path.overwrite[0]", 11], - ["setPathToValue(path.overwrite[0], 3) + setPathToValue(path.overwrite, 4) + path.overwrite", 11], - ["setPathToValue(path.overwrite.prop, 3) + setPathToValue(path.overwrite, 4) + path.overwrite", 11], - ["setPathToValue(path.overwrite.prop, 3) + setPathToValue(path.overwrite[0], 4) + path.overwrite[0]", 11], + // SetPathToValue tests + ['setPathToValue(@@blah.woof, 1+2) + @@blah.woof', 6], + ['setPathToValue(path.simple, 3) + path.simple', 6], + ['setPathToValue(path.simple, 5) + path.simple', 10], + ['setPathToValue(path.array[0], 7) + path.array[0]', 14], + ['setPathToValue(path.array[1], 9) + path.array[1]', 18], + ['setPathToValue(path.darray[2][0], 11) + path.darray[2][0]', 22], + ['setPathToValue(path.darray[2][3].foo, 13) + path.darray[2][3].foo', 26], + ['setPathToValue(path.overwrite, 3) + setPathToValue(path.overwrite[0], 4) + path.overwrite[0]', 11], + ['setPathToValue(path.overwrite[0], 3) + setPathToValue(path.overwrite, 4) + path.overwrite', 11], + ['setPathToValue(path.overwrite.prop, 3) + setPathToValue(path.overwrite, 4) + path.overwrite', 11], + ['setPathToValue(path.overwrite.prop, 3) + setPathToValue(path.overwrite[0], 4) + path.overwrite[0]', 11], ]; const scope = { - one: 1.0, - two: 2.0, - hello: "hello", - world: "world", - cit: "cit", - y: "y", - istrue: true, - nullObj: undefined, - jsonStr: '{"automobiles" : [{ "maker" : "Nissan", "model" : "Teana", "year" : 2011 },{ "maker" : "Honda", "model" : "Jazz", "year" : 2010 },{ "maker" : "Honda", "model" : "Civic", "year" : 2007 },{ "maker" : "Toyota", "model" : "Yaris", "year" : 2008 },{"maker" : "Honda", "model" : "Accord", "year" : 2011 }],"motorcycles" : [{ "maker" : "Honda", "model" : "ST1300", "year" : 2012 }]}', - pathStr: `.automobiles{.maker === "Honda" && .year > 2009}.model`, - bag: + one: 1.0, + two: 2.0, + hello: 'hello', + world: 'world', + cit: 'cit', + y: 'y', + istrue: true, + nullObj: undefined, + jsonStr: '{"automobiles" : [{ "maker" : "Nissan", "model" : "Teana", "year" : 2011 },{ "maker" : "Honda", "model" : "Jazz", "year" : 2010 },{ "maker" : "Honda", "model" : "Civic", "year" : 2007 },{ "maker" : "Toyota", "model" : "Yaris", "year" : 2008 },{"maker" : "Honda", "model" : "Accord", "year" : 2011 }],"motorcycles" : [{ "maker" : "Honda", "model" : "ST1300", "year" : 2012 }]}', + pathStr: `.automobiles{.maker === "Honda" && .year > 2009}.model`, + bag: { - three: 3.0, - set: + three: 3.0, + set: { - four: 4.0, + four: 4.0, }, - list: ["red", "blue"], - index: 3, - name: "mybag" + list: ['red', 'blue'], + index: 3, + name: 'mybag' }, - items: ["zero", "one", "two"], - nestedItems: + items: ['zero', 'one', 'two'], + nestedItems: [ - { x: 1 }, - { x: 2 }, - { x: 3 }, + { x: 1 }, + { x: 2 }, + { x: 3 }, ], - timestamp: "2018-03-15T13:00:00.111Z", - notISOTimestamp: "2018-03-15T13:00:00Z", - timestampObj: new Date("2018-03-15T13:00:00.000Z"), - unixTimestamp: 1521118800, - xmlStr: " Gala apple 20 Honeycrisp apple 10 ", - user: + timestamp: '2018-03-15T13:00:00.111Z', + notISOTimestamp: '2018-03-15T13:00:00Z', + timestampObj: new Date('2018-03-15T13:00:00.000Z'), + unixTimestamp: 1521118800, + user: { - lists: + lists: { - todo: ["todo1", "todo2", "todo3"] + todo: ['todo1', 'todo2', 'todo3'] }, - listType: "todo" + listType: 'todo' }, - turn: + turn: { - recognized: + recognized: { - entities: + entities: { - city: "Seattle", - ordinal: ["1", "2", "3"], - CompositeList1: [["firstItem"]], - CompositeList2: [["firstItem", "secondItem"]] + city: 'Seattle', + ordinal: ['1', '2', '3'], + CompositeList1: [['firstItem']], + CompositeList2: [['firstItem', 'secondItem']] }, - intents: + intents: { - BookFlight: "BookFlight", - BookHotel :[ - { - Where: "Bellevue", - Time : "Tomorrow", - People : "2" - }, - { - Where: "Kirkland", - Time : "Today", - People : "4" - } - ] + BookFlight: 'BookFlight', + BookHotel :[ + { + Where: 'Bellevue', + Time : 'Tomorrow', + People : '2' + }, + { + Where: 'Kirkland', + Time : 'Today', + People : '4' + } + ] } } }, - dialog: + dialog: { - instance: { xxx: "instance", yyy : {instanceY :"instanceY"} }, - options: { xxx: "options", yyy : ["optionY1", "optionY2" ] }, - title: "Dialog Title", - subTitle: "Dialog Sub Title" + instance: { xxx: 'instance', yyy : {instanceY :'instanceY'} }, + options: { xxx: 'options', yyy : ['optionY1', 'optionY2' ] }, + title: 'Dialog Title', + subTitle: 'Dialog Sub Title' }, - callstack: + callstack: [ - { x: 3 }, - { x: 2, y: 2 }, - { x: 1, y: 1, z: 1 } + { x: 3 }, + { x: 2, y: 2 }, + { x: 1, y: 1, z: 1 } ] }; describe('expression functional test', () => { - it('should get right evaluate result', () => { - for (const data of dataSource) { - const input = data[0].toString(); - console.log(input) - var parsed = new ExpressionEngine().parse(input); - assert(parsed !== undefined); - var { value: actual, error } = parsed.tryEvaluate(scope); - assert(error === undefined, `input: ${input}, Has error: ${error}`); + it('should get right evaluate result', () => { + for (const data of dataSource) { + const input = data[0].toString(); + console.log(input); + var parsed = new ExpressionEngine().parse(input); + assert(parsed !== undefined); + var { value: actual, error } = parsed.tryEvaluate(scope); + assert(error === undefined, `input: ${ input }, Has error: ${ error }`); - const expected = data[1]; + const expected = data[1]; - //Assert Object Equals - if (actual instanceof Array && expected instanceof Array) { - const [isSuccess, errorMessage] = IsArraySame(actual, expected); - if (!isSuccess) { - assert.fail(errorMessage); - } - } else if (typeof expected === 'number') { - assert(parseFloat(actual) === expected, `actual is: ${actual} for case ${input}`) - } - else { - assert(actual === expected, `actual is: ${actual} for case ${input}`); - } + //Assert Object Equals + if (actual instanceof Array && expected instanceof Array) { + const [isSuccess, errorMessage] = isArraySame(actual, expected); + if (!isSuccess) { + assert.fail(errorMessage); + } + } else if (typeof expected === 'number') { + assert(parseFloat(actual) === expected, `actual is: ${ actual } for case ${ input }`); + } + else { + assert(actual === expected, `actual is: ${ actual } for case ${ input }`); + } - //Assert ExpectedRefs - if (data.length === 3) { - const actualRefs = Extensions.References(parsed); - const [isSuccess, errorMessage] = IsArraySame(actualRefs.sort(), data[2].sort()); - if (!isSuccess) { - assert.fail(errorMessage); + //Assert ExpectedRefs + if (data.length === 3) { + const actualRefs = Extensions.references(parsed); + const [isSuccess, errorMessage] = isArraySame(actualRefs.sort(), data[2].sort()); + if (!isSuccess) { + assert.fail(errorMessage); + } + } } - } - } - }); + }); }); -var IsArraySame = (actual, expected) => { //return [isSuccess, errorMessage] - if (actual.length !== expected.length) return [false, `expected length: ${expected.length}, actual length: ${actual.length}`]; +var isArraySame = (actual, expected) => { //return [isSuccess, errorMessage] + if (actual.length !== expected.length) return [false, `expected length: ${ expected.length }, actual length: ${ actual.length }`]; - for (let i = 0; i < actual.length; i++) { - if (actual[i] !== expected[i]) return [false, `actual is: ${actual[i]}, expected is: ${expected[i]}`]; - } + for (let i = 0; i < actual.length; i++) { + if (actual[i] !== expected[i]) return [false, `actual is: ${ actual[i] }, expected is: ${ expected[i] }`]; + } - return [true, '']; -} \ No newline at end of file + return [true, '']; +}; diff --git a/libraries/botframework-schema/package-lock.json b/libraries/botframework-schema/package-lock.json deleted file mode 100644 index 0412153baa..0000000000 --- a/libraries/botframework-schema/package-lock.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "botframework-schema", - "version": "4.1.6", - "lockfileVersion": 1 -} diff --git a/libraries/browser-functional-tests/.env b/libraries/browser-functional-tests/.env new file mode 100644 index 0000000000..35f7e817d9 --- /dev/null +++ b/libraries/browser-functional-tests/.env @@ -0,0 +1 @@ +TestURI= \ No newline at end of file diff --git a/libraries/browser-functional-tests/.gitignore b/libraries/browser-functional-tests/.gitignore new file mode 100644 index 0000000000..1e173a9b1e --- /dev/null +++ b/libraries/browser-functional-tests/.gitignore @@ -0,0 +1,2 @@ +*.xml +*.log \ No newline at end of file diff --git a/libraries/browser-functional-tests/browser-echo-bot/.gitignore b/libraries/browser-functional-tests/browser-echo-bot/.gitignore new file mode 100644 index 0000000000..9b1c8b133c --- /dev/null +++ b/libraries/browser-functional-tests/browser-echo-bot/.gitignore @@ -0,0 +1 @@ +/dist diff --git a/libraries/browser-functional-tests/browser-echo-bot/babel.config.js b/libraries/browser-functional-tests/browser-echo-bot/babel.config.js new file mode 100644 index 0000000000..27a0e4af86 --- /dev/null +++ b/libraries/browser-functional-tests/browser-echo-bot/babel.config.js @@ -0,0 +1,25 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ + +module.exports = { + 'presets': [ + [ + '@babel/preset-env', + { + 'targets': { + 'browsers': [ + 'last 2 versions' + ], + 'ie': '11' + } + } + ], + '@babel/preset-typescript' + ], + 'sourceMaps': 'inline', + 'plugins': [ + '@babel/proposal-class-properties' + ] +}; diff --git a/libraries/browser-functional-tests/browser-echo-bot/index.html b/libraries/browser-functional-tests/browser-echo-bot/index.html new file mode 100644 index 0000000000..16fc6f2b2b --- /dev/null +++ b/libraries/browser-functional-tests/browser-echo-bot/index.html @@ -0,0 +1,29 @@ + + + + + + + Example echo bot using BotBuilder v4 and botframework-webchat v4 + + + + +
+ + + diff --git a/libraries/browser-functional-tests/browser-echo-bot/package.json b/libraries/browser-functional-tests/browser-echo-bot/package.json new file mode 100644 index 0000000000..895ae3dedf --- /dev/null +++ b/libraries/browser-functional-tests/browser-echo-bot/package.json @@ -0,0 +1,46 @@ +{ + "name": "browser-echo", + "version": "1.1.0", + "description": "BotBuilder v4 echo bot using botframework-webchat", + "author": "Microsoft", + "license": "MIT", + "main": "app.js", + "scripts": { + "build": "webpack --mode=production", + "start": "webpack-dev-server", + "lint": "eslint .", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "dependencies": { + "@babel/runtime": "^7.1.5", + "botbuilder-core": "^4.5.1", + "botbuilder-dialogs": "~4.5.1", + "botframework-directlinejs": "~0.11.2", + "botframework-webchat": "4.5.0", + "core-js": "^3.0.1" + }, + "devDependencies": { + "@babel/cli": "^7.5.0", + "@babel/core": "^7.5.4", + "@babel/plugin-proposal-class-properties": "^7.5.0", + "@babel/preset-env": "^7.5.4", + "@babel/preset-typescript": "^7.3.3", + "@babel/runtime": "^7.5.4", + "babel-loader": "^8.0.6", + "clean-webpack-plugin": "^3.0.0", + "copy-webpack-plugin": "^5.0.3", + "core-js": "^3.1.4", + "css-loader": "^3.0.0", + "eslint": "^6.0.1", + "eslint-config-standard": "^13.0.1", + "eslint-plugin-import": "^2.18.0", + "eslint-plugin-node": "^9.1.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.0", + "regenerator-runtime": "^0.13.2", + "style-loader": "^0.23.1", + "webpack": "^4.35.3", + "webpack-cli": "^3.3.6", + "webpack-dev-server": "^3.7.2" + } +} diff --git a/libraries/browser-functional-tests/browser-echo-bot/src/app.ts b/libraries/browser-functional-tests/browser-echo-bot/src/app.ts new file mode 100644 index 0000000000..73cbf9f51f --- /dev/null +++ b/libraries/browser-functional-tests/browser-echo-bot/src/app.ts @@ -0,0 +1,71 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ + +import 'core-js/stable'; +import 'regenerator-runtime/runtime'; +import { + ActivityTypes, + ConversationState, + MemoryStorage +} from 'botbuilder-core'; +import './css/app.css'; +import { WebChatAdapter } from './webChatAdapter'; +import { renderWebChat } from 'botframework-webchat'; + +// Create the custom WebChatAdapter. +const webChatAdapter = new WebChatAdapter(); + +// Connect our BotFramework-WebChat instance with the DOM. + +renderWebChat({ + directLine: webChatAdapter.botConnection +}, document.getElementById('webchat') +); +// Instantiate MemoryStorage for use with the ConversationState class. +const memory = new MemoryStorage(); + +// Add the instantiated storage into ConversationState. +const conversationState = new ConversationState(memory); + +// Create a property to keep track of how many messages are received from the user. +const countProperty = conversationState.createProperty('turnCounter'); + +// Register the business logic of the bot through the WebChatAdapter's processActivity implementation. +webChatAdapter.processActivity(async turnContext => { + // See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types. + if (turnContext.activity.type === ActivityTypes.Message) { + // Read from state. + let count = await countProperty.get(turnContext); + count = count === undefined ? 1 : count; + await turnContext.sendActivity( + `${ count }: You said "${ turnContext.activity.text }"` + ); + // Increment and set turn counter. + await countProperty.set(turnContext, ++count); + } else { + await turnContext.sendActivity( + `[${ turnContext.activity.type } event detected]` + ); + } + await conversationState.saveChanges(turnContext); +}); + +// Create user and bot profiles. +export const USER_PROFILE = { id: 'Me!', name: 'Me!', role: 'user' }; +export const BOT_PROFILE = { id: 'bot', name: 'bot', role: 'bot' }; + +// Prevent Flash of Unstyled Content (FOUC): https://en.wikipedia.org/wiki/Flash_of_unstyled_content +document.addEventListener('DOMContentLoaded', () => { + window.requestAnimationFrame(() => { + document.body.style.visibility = 'visible'; + // After the content has finished loading, send the bot a "conversationUpdate" Activity with the user's information. + // When the bot receives a "conversationUpdate" Activity, the developer can opt to send a welcome message to the user. + webChatAdapter.botConnection.postActivity({ + recipient: BOT_PROFILE, + membersAdded: [USER_PROFILE], + type: ActivityTypes.ConversationUpdate + }); + }); +}); diff --git a/libraries/browser-functional-tests/browser-echo-bot/src/bots/dialogBot.js b/libraries/browser-functional-tests/browser-echo-bot/src/bots/dialogBot.js new file mode 100644 index 0000000000..e0b25bc36e --- /dev/null +++ b/libraries/browser-functional-tests/browser-echo-bot/src/bots/dialogBot.js @@ -0,0 +1,47 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ + +const { ActivityHandler } = require('botbuilder'); + +class DialogBot extends ActivityHandler { + /** + * + * @param {ConversationState} conversationState + * @param {UserState} userState + * @param {Dialog} dialog + */ + constructor(conversationState, userState, dialog) { + super(); + if (!conversationState) throw new Error('[DialogBot]: Missing parameter. conversationState is required'); + if (!userState) throw new Error('[DialogBot]: Missing parameter. userState is required'); + if (!dialog) throw new Error('[DialogBot]: Missing parameter. dialog is required'); + + this.conversationState = conversationState; + this.userState = userState; + this.dialog = dialog; + this.dialogState = this.conversationState.createProperty('DialogState'); + + this.onMessage(async (context, next) => { + console.log('Running dialog with Message Activity.'); + + // Run the Dialog with the new message Activity. + await this.dialog.run(context, this.dialogState); + + // By calling next() you ensure that the next BotHandler is run. + await next(); + }); + + this.onDialog(async (context, next) => { + // Save any state changes. The load happened during the execution of the Dialog. + await this.conversationState.saveChanges(context, false); + await this.userState.saveChanges(context, false); + + // By calling next() you ensure that the next BotHandler is run. + await next(); + }); + } +} + +module.exports.DialogBot = DialogBot; diff --git a/libraries/browser-functional-tests/browser-echo-bot/src/css/app.css b/libraries/browser-functional-tests/browser-echo-bot/src/css/app.css new file mode 100644 index 0000000000..e8a7a6c14e --- /dev/null +++ b/libraries/browser-functional-tests/browser-echo-bot/src/css/app.css @@ -0,0 +1,49 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ + +body { + font-family: "Segoe UI", sans-serif; + font-size: 15px; + box-sizing: content-box; +} + +section { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + margin: 10px; + padding: 10px; + border: 1px solid #d1d1d1; + display: flex; + overflow: hidden; +} + +section > div:first-child { + width: 100%; +} + +section > div:last-child { + min-width: 200px; +} + +input[type="text"] { + height: 39px; + width: calc(100% - 105px); + margin: 0; +} + +button.button-primary { + margin: 0; +} + +.border-left { + border-left: 1px solid #D1D1D1; +} + +#bot { + position: relative; +} diff --git a/libraries/browser-functional-tests/browser-echo-bot/src/dialogs/mainDialog.js b/libraries/browser-functional-tests/browser-echo-bot/src/dialogs/mainDialog.js new file mode 100644 index 0000000000..84774f7fb4 --- /dev/null +++ b/libraries/browser-functional-tests/browser-echo-bot/src/dialogs/mainDialog.js @@ -0,0 +1,157 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ + +const { MessageFactory, InputHints } = require('botbuilder'); +const { LuisRecognizer } = require('botbuilder-ai'); +const { ComponentDialog, DialogSet, DialogTurnStatus, TextPrompt, WaterfallDialog } = require('botbuilder-dialogs'); + +const MAIN_WATERFALL_DIALOG = 'mainWaterfallDialog'; + +class MainDialog extends ComponentDialog { + constructor(luisRecognizer) { + super('MainDialog'); + + if (!luisRecognizer) throw new Error('[MainDialog]: Missing parameter \'luisRecognizer\' is required'); + this.luisRecognizer = luisRecognizer; + + // Define the main dialog and its related components. + // This is a sample "book a flight" dialog. + this.addDialog(new TextPrompt('TextPrompt')) + .addDialog(new WaterfallDialog(MAIN_WATERFALL_DIALOG, [ + this.introStep.bind(this), + this.actStep.bind(this), + this.finalStep.bind(this) + ])); + + this.initialDialogId = MAIN_WATERFALL_DIALOG; + } + + /** + * The run method handles the incoming activity (in the form of a TurnContext) and passes it through the dialog system. + * If no dialog is active, it will start the default dialog. + * @param {*} turnContext + * @param {*} accessor + */ + async run(turnContext, accessor) { + const dialogSet = new DialogSet(accessor); + dialogSet.add(this); + + const dialogContext = await dialogSet.createContext(turnContext); + const results = await dialogContext.continueDialog(); + if (results.status === DialogTurnStatus.empty) { + await dialogContext.beginDialog(this.id); + } + } + + /** + * First step in the waterfall dialog. Prompts the user for a command. + * Currently, this expects a booking request, like "book me a flight from Paris to Berlin on march 22" + * Note that the sample LUIS model will only recognize Paris, Berlin, New York and London as airport cities. + */ + async introStep(stepContext) { + if (!this.luisRecognizer.isConfigured) { + const messageText = 'NOTE: LUIS is not configured. To enable all capabilities, add `LuisAppId`, `LuisAPIKey` and `LuisAPIHostName` to the .env file.'; + await stepContext.context.sendActivity(messageText, null, InputHints.IgnoringInput); + return await stepContext.next(); + } + + const messageText = stepContext.options.restartMsg ? stepContext.options.restartMsg : 'What can I help you with today?\nSay something like "Book a flight from Paris to Berlin on March 22, 2020"'; + const promptMessage = MessageFactory.text(messageText, messageText, InputHints.ExpectingInput); + return await stepContext.prompt('TextPrompt', { prompt: promptMessage }); + } + + /** + * Second step in the waterfall. This will use LUIS to attempt to extract the origin, destination and travel dates. + * Then, it hands off to the bookingDialog child dialog to collect any remaining details. + */ + async actStep(stepContext) { + const bookingDetails = {}; + + if (!this.luisRecognizer.isConfigured) { + // LUIS is not configured, we just run the BookingDialog path. + return await stepContext.beginDialog('bookingDialog', bookingDetails); + } + + // Call LUIS and gather any potential booking details. (Note the TurnContext has the response to the prompt) + const luisResult = await this.luisRecognizer.executeLuisQuery(stepContext.context); + switch (LuisRecognizer.topIntent(luisResult)) { + case 'BookFlight': + // Extract the values for the composite entities from the LUIS result. + const fromEntities = this.luisRecognizer.getFromEntities(luisResult); + const toEntities = this.luisRecognizer.getToEntities(luisResult); + + // Show a warning for Origin and Destination if we can't resolve them. + await this.showWarningForUnsupportedCities(stepContext.context, fromEntities, toEntities); + + // Initialize BookingDetails with any entities we may have found in the response. + bookingDetails.destination = toEntities.airport; + bookingDetails.origin = fromEntities.airport; + bookingDetails.travelDate = this.luisRecognizer.getTravelDate(luisResult); + console.log('LUIS extracted these booking details:', JSON.stringify(bookingDetails)); + + // Run the BookingDialog passing in whatever details we have from the LUIS call, it will fill out the remainder. + return await stepContext.beginDialog('bookingDialog', bookingDetails); + + case 'GetWeather': + // We haven't implemented the GetWeatherDialog so we just display a TODO message. + const getWeatherMessageText = 'TODO: get weather flow here'; + await stepContext.context.sendActivity(getWeatherMessageText, getWeatherMessageText, InputHints.IgnoringInput); + break; + + default: + // Catch all for unhandled intents + const didntUnderstandMessageText = `Sorry, I didn't get that. Please try asking in a different way (intent was ${ LuisRecognizer.topIntent(luisResult) })`; + await stepContext.context.sendActivity(didntUnderstandMessageText, didntUnderstandMessageText, InputHints.IgnoringInput); + } + + return await stepContext.next(); + } + + /** + * Shows a warning if the requested From or To cities are recognized as entities but they are not in the Airport entity list. + * In some cases LUIS will recognize the From and To composite entities as a valid cities but the From and To Airport values + * will be empty if those entity values can't be mapped to a canonical item in the Airport. + */ + async showWarningForUnsupportedCities(context, fromEntities, toEntities) { + const unsupportedCities = []; + if (fromEntities.from && !fromEntities.airport) { + unsupportedCities.push(fromEntities.from); + } + + if (toEntities.to && !toEntities.airport) { + unsupportedCities.push(toEntities.to); + } + + if (unsupportedCities.length) { + const messageText = `Sorry but the following airports are not supported: ${ unsupportedCities.join(', ') }`; + await context.sendActivity(messageText, messageText, InputHints.IgnoringInput); + } + } + + /** + * This is the final step in the main waterfall dialog. + * It wraps up the sample "book a flight" interaction with a simple confirmation. + */ + async finalStep(stepContext) { + // If the child dialog ("bookingDialog") was cancelled or the user failed to confirm, the Result here will be null. + if (stepContext.result) { + const result = stepContext.result; + // Now we have all the booking details. + + // This is where calls to the booking AOU service or database would go. + + // If the call to the booking service was successful tell the user. + const timeProperty = new TimexProperty(result.travelDate); + const travelDateMsg = timeProperty.toNaturalLanguage(new Date(Date.now())); + const msg = `I have you booked to ${ result.destination } from ${ result.origin } on ${ travelDateMsg }.`; + await stepContext.context.sendActivity(msg, msg, InputHints.IgnoringInput); + } + + // Restart the main dialog with a different message the second time around + return await stepContext.replaceDialog(this.initialDialogId, { restartMsg: 'What else can I do for you?' }); + } +} + +module.exports.MainDialog = MainDialog; diff --git a/libraries/browser-functional-tests/browser-echo-bot/src/webChatAdapter.ts b/libraries/browser-functional-tests/browser-echo-bot/src/webChatAdapter.ts new file mode 100644 index 0000000000..ab1f6954e9 --- /dev/null +++ b/libraries/browser-functional-tests/browser-echo-bot/src/webChatAdapter.ts @@ -0,0 +1,104 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ + +import { ConnectionStatus } from 'botframework-directlinejs'; +import { BotAdapter, TurnContext } from 'botbuilder-core'; +import { BOT_PROFILE, USER_PROFILE } from './app'; +import Observable from 'core-js/features/observable'; + +/** + * Custom BotAdapter used for deploying a bot in a browser. + */ +export class WebChatAdapter extends BotAdapter { + constructor() { + super(); + + this.botConnection = { + connectionStatus$: new Observable(observer => { + observer.next(ConnectionStatus.Uninitialized); + observer.next(ConnectionStatus.Connecting); + observer.next(ConnectionStatus.Online); + }), + activity$: new Observable(observer => { + this.activityObserver = observer; + }), + end() { + // The React component was called to unmount: + // https://github.com/Microsoft/BotFramework-WebChat/blob/57360e4df92e041d5b0fd4810c1abf96621b5283/src/Chat.tsx#L237-L247 + // Developers will need to decide what behavior the component should implement. + // For this sample, this.botConnection.componentWillUnmount() and this.botConnection.end() + // is never called. + console.log('this.botConnection.componentWillUnmount() called.'); + }, + getSessionId: () => new Observable(observer => observer.complete()), + postActivity: activity => { + const id = Date.now().toString(); + + return new Observable(observer => { + const serverActivity = { + ...activity, + id, + conversation: { id: 'bot' }, + channelId: 'WebChat', + recipient: BOT_PROFILE, + timestamp: new Date().toISOString() + }; + + this.onReceive(serverActivity).then(() => { + observer.next(id); + observer.complete(); + + this.activityObserver.next(serverActivity); + }); + }); + } + }; + } + + /** + * This WebChatAdapter implements the sendActivities method which is called by the TurnContext class. + * It's also possible to write a custom TurnContext with different methods of accessing an adapter. + * @param {TurnContext} context + * @param {Activity[]} activities + */ + sendActivities(context, activities) { + const sentActivities = activities.map(activity => Object.assign({}, activity, { + id: Date.now().toString(), + channelId: 'WebChat', + conversation: { id: 'bot' }, + from: BOT_PROFILE, + recipient: USER_PROFILE, + timestamp: new Date().toISOString() + })); + + sentActivities.forEach(activity => this.activityObserver.next(activity)); + + return Promise.resolve(sentActivities.map(activity => { + return { id: activity.id }; + })); + } + + /** + * Registers the business logic for the adapter, it takes a handler that takes a TurnContext object as a parameter. + * @param {function} logic The driver code of the developer's bot application. This code receives and responds to user messages. + */ + processActivity(logic) { + this.logic = logic; + return this; + } + + /** + * Runs the bot's middleware pipeline in addition to any business logic, if `this.logic` is found. + * @param {Activity} activity + */ + onReceive(activity) { + const context = new TurnContext(this, activity); + + // Runs the middleware pipeline followed by any registered business logic. + // If no business logic has been registered via processActivity, a default + // value is provided as to not break the bot. + return this.runMiddleware(context, this.logic || function() { }); + } +} diff --git a/libraries/browser-functional-tests/browser-echo-bot/webpack.config.js b/libraries/browser-functional-tests/browser-echo-bot/webpack.config.js new file mode 100644 index 0000000000..8f1ed76cc8 --- /dev/null +++ b/libraries/browser-functional-tests/browser-echo-bot/webpack.config.js @@ -0,0 +1,55 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ + +const { join, resolve } = require('path'); +const { CleanWebpackPlugin } = require('clean-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const { HotModuleReplacementPlugin, NamedModulesPlugin } = require('webpack'); + +module.exports = { + entry: './src/app.ts', + devtool: 'source-map', + devServer: { + contentBase: './dist', + hot: true + }, + mode: 'development', + module: { + rules: [ + { + test: /\.[jt]s$/, + include: [ + join(__dirname, 'src'), + join(__dirname, 'node_modules/botbuilder-core/lib'), + ], + use: ['babel-loader'] + }, + { + test: /\.css$/, + use: ['style-loader', 'css-loader'] + } + ] + }, + plugins: [ + new CleanWebpackPlugin(), + new NamedModulesPlugin(), + new HotModuleReplacementPlugin(), + new CopyWebpackPlugin([ + { from: resolve(__dirname, 'index.html'), to: '' } + ]) + ], + resolve: { + extensions: ['.css', '.js', '.ts'] + }, + output: { + filename: 'app.js', + path: resolve(__dirname, 'dist') + }, + node: { + fs: 'empty', + net: 'empty', + tls: 'empty' + } +}; diff --git a/libraries/browser-functional-tests/nightwatch.conf.js b/libraries/browser-functional-tests/nightwatch.conf.js new file mode 100644 index 0000000000..d8b00cf9b1 --- /dev/null +++ b/libraries/browser-functional-tests/nightwatch.conf.js @@ -0,0 +1,50 @@ +const chromedriver = require('chromedriver'); + +module.exports = { + src_folders: ['tests'], + page_objects_path: 'tests/tests_pages', + webdriver: { + start_process: true, + server_path: 'node_modules/.bin/chromedriver', + port: 9515 + }, + + test_workers: { + enabled: false, + workers: 'auto' + }, + test_settings: { + default: { + webdriver: { + start_process: true, + server_path: chromedriver.path, + port: 9515, + cli_args: ['--port=9515'] + }, + desiredCapabilities: { + browserName: 'chrome', + javascriptEnabled: true, + acceptSslCerts: true, + chromeOptions: { + args: ['headless', 'disable-gpu'] + } + } + }, + chrome: { + webdriver: { + start_process: true, + server_path: chromedriver.path, + port: 9515, + cli_args: ['--port=9515'] + }, + desiredCapabilities: { + browserName: 'chrome', + javascriptEnabled: true, + acceptSslCerts: true, + chromeOptions: { + args: ['headless', 'disable-gpu'] + } + } + } + } +}; diff --git a/libraries/browser-functional-tests/nightwatch.js b/libraries/browser-functional-tests/nightwatch.js new file mode 100644 index 0000000000..84ca200ca3 --- /dev/null +++ b/libraries/browser-functional-tests/nightwatch.js @@ -0,0 +1 @@ +require('nightwatch/bin/runner.js'); \ No newline at end of file diff --git a/libraries/browser-functional-tests/package.json b/libraries/browser-functional-tests/package.json new file mode 100644 index 0000000000..67d96fb4f2 --- /dev/null +++ b/libraries/browser-functional-tests/package.json @@ -0,0 +1,18 @@ +{ + "name": "browser-functional-tests", + "version": "1.0.0", + "description": "Test to check browser compatibility", + "main": "", + "devDependencies": { + "nightwatch": "^1.2.4", + "chromedriver": "^77.0.0", + "dotenv": "^8.0.0" + }, + "directories": { + "test": "tests" + }, + "scripts": {}, + "keywords": [], + "author": "", + "license": "MIT" +} diff --git a/libraries/browser-functional-tests/tests/message-handling-tests.js b/libraries/browser-functional-tests/tests/message-handling-tests.js new file mode 100644 index 0000000000..c081666505 --- /dev/null +++ b/libraries/browser-functional-tests/tests/message-handling-tests.js @@ -0,0 +1,63 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ + +var botPage; +module.exports = { + botPage: {}, + before: function(browser) { + botPage = browser.page.echoBotPage(); + }, + afer: function(browser) { + // End current page session + botPage.end(); + }, + 'Echo bot webchat is loaded': function(browser) { + // Navigate to the Echo Bot page + // This step is performed made in the first test since navigation can't be done in the 'before' hook + botPage.navigate(); + + // Check Webchat container is initialized and is present in the page + botPage + .assert.elementPresent('@webchatContainer'); + }, + 'Echo bot webchat sends messages': async function(browser) { + // Type 'Hello' in the webchat input box and send it to the bot + botPage + .setValue('@webchatMessageInput', 'Hello') + .click('@webchatMessageInputSubtmitButton', function(result) { + // Assertion to check the button was clickable and got triggered + this.assert.strictEqual(result.status, 0, 'Message input working'); + }) + .pause(250); + + await assertMessageIsPresentInPage(botPage, 'Hello', 'Webchat contains user message'); + }, + 'Echo bot webchat echoes messages': async function(browser) { + await assertMessageIsPresentInPage(botPage, '1: You said “Hello”', 'Webchat contains bot reply'); + } +}; + +async function assertMessageIsPresentInPage(pageInstance, textSearch, assertMessage) { + let messagesListPromises = []; + // Get messages list from webchat + await pageInstance.api.elements('@webchatMessagesList', function(messagesWebElements) { + for (let index = 0; (index < messagesWebElements.value.length); index++) { + const webElement = messagesWebElements.value[index]; + messagesListPromises.push(new Promise(function(resolve){ + pageInstance.api.elementIdText(webElement.ELEMENT, function(elementText) { + resolve(elementText.value == textSearch); + }); + })); + } + }).then(function(){ + Promise.all(messagesListPromises) + .then(function (results) { + let messageExists = results.some(function (value) { + return value; + }); + pageInstance.assert.strictEqual(messageExists, true, assertMessage); + }); + }); +} diff --git a/libraries/browser-functional-tests/tests/tests_pages/echoBotPage.js b/libraries/browser-functional-tests/tests/tests_pages/echoBotPage.js new file mode 100644 index 0000000000..c150e2fb15 --- /dev/null +++ b/libraries/browser-functional-tests/tests/tests_pages/echoBotPage.js @@ -0,0 +1,27 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ + +const path = require('path'); +const dotenv = require('dotenv'); +const ENV_FILE = path.join(__dirname, '.env'); +dotenv.config({ path: ENV_FILE }); + +module.exports = { + url: process.env.TestURI, + elements: { + webchatContainer: { + selector: 'div[id=webchat]>div' + }, + webchatMessagesList: { + selector: 'ul p' + }, + webchatMessageInput: { + selector: 'input[data-id=webchat-sendbox-input]' + }, + webchatMessageInputSubtmitButton: { + selector: 'div.main > div:nth-child(3) > button' + } + } +} \ No newline at end of file diff --git a/libraries/swagger/package-lock.json b/libraries/swagger/package-lock.json deleted file mode 100644 index dfb5103e93..0000000000 --- a/libraries/swagger/package-lock.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "generateclient-via-swagger", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@microsoft.azure/autorest.typescript": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@microsoft.azure/autorest.typescript/-/autorest.typescript-2.3.3.tgz", - "integrity": "sha512-+NuxOYSd6bcmdcVFmq6ux9fxuL5AehkQkU8oJuSXYxhIny2xberaaUledhFG71BHd9jKNNPcfJGQl1unLPKkZw==", - "requires": { - "dotnet-2.0.0": "^1.4.4" - } - }, - "autorest": { - "version": "2.0.4283", - "resolved": "https://registry.npmjs.org/autorest/-/autorest-2.0.4283.tgz", - "integrity": "sha512-3jU9yDR71d2thRnKdPH03DaWbla1Iqnrx2rqUUwbMrb4di36a8+nttCQaTWG7biWPJc6Ke6zSSTzFH0uhya+Nw==" - }, - "dotnet-2.0.0": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/dotnet-2.0.0/-/dotnet-2.0.0-1.4.4.tgz", - "integrity": "sha512-KDbUncVUhwkJH2wjL9gbUWQ5NcZIe+PFEI0CGTMtX5TImFG6Nlt9CABVGBBG+oWf13zLARaBVenkD20moz1NPw==" - } - } -} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 2e7f2184b8..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,12322 +0,0 @@ -{ - "name": "botbuilder-packages", - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@azure/cognitiveservices-luis-runtime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@azure/cognitiveservices-luis-runtime/-/cognitiveservices-luis-runtime-2.0.0.tgz", - "integrity": "sha512-NZuqxiwpn8iYM76/QDIBDGq1jJ+YHiwS0S/yprAMeaaQgu1S5VtVhWDbTrZl+AfaqCn6iDpRewI7EKRv1GJx0g==", - "requires": { - "@azure/ms-rest-js": "^1.6.0", - "tslib": "^1.9.3" - } - }, - "@azure/cosmos": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@azure/cosmos/-/cosmos-3.4.1.tgz", - "integrity": "sha512-nK8N6Y0dviRIIFX+mdfxW6IcTA02RH1RIhBk5XLZwDvIGUN3zAzlxaRxio31Pt0bAv1Plz5LcbZAh0mEhuLcsw==", - "requires": { - "@types/debug": "^4.1.4", - "debug": "^4.1.1", - "fast-json-stable-stringify": "^2.0.0", - "node-abort-controller": "^1.0.4", - "node-fetch": "^2.6.0", - "os-name": "^3.1.0", - "priorityqueuejs": "^1.0.0", - "semaphore": "^1.0.5", - "tslib": "^1.9.3", - "uuid": "^3.3.2" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@azure/ms-rest-js": { - "version": "1.8.13", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@azure/ms-rest-js/-/@azure/ms-rest-js-1.8.13.tgz", - "integrity": "sha1-7QzYZGlpc3jNOdedVYnod6O8h6Y=", - "requires": { - "@types/tunnel": "0.0.0", - "axios": "^0.19.0", - "form-data": "^2.3.2", - "tough-cookie": "^2.4.3", - "tslib": "^1.9.2", - "tunnel": "0.0.6", - "uuid": "^3.2.1", - "xml2js": "^0.4.19" - } - }, - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@babel/code-frame/-/@babel/code-frame-7.5.5.tgz", - "integrity": "sha1-vAeC9tafe31JUxIZaZuYj2aaj50=", - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@babel/highlight/-/@babel/highlight-7.5.0.tgz", - "integrity": "sha1-VtETEr2SSPphlZHQJHK+boyzJUA=", - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@evocateur/libnpmaccess": { - "version": "3.1.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@evocateur/libnpmaccess/-/@evocateur/libnpmaccess-3.1.2.tgz", - "integrity": "sha1-7Pf2zmsATp+UKwmNkiAL5KSxyEU=", - "requires": { - "@evocateur/npm-registry-fetch": "^4.0.0", - "aproba": "^2.0.0", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "npm-package-arg": "^6.1.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha1-UlILiuW1aSFbNU78DKo/4eRaitw=" - } - } - }, - "@evocateur/libnpmpublish": { - "version": "1.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@evocateur/libnpmpublish/-/@evocateur/libnpmpublish-1.2.2.tgz", - "integrity": "sha1-Vd8J0tyhNq+6nIjHWconIZjbnxo=", - "requires": { - "@evocateur/npm-registry-fetch": "^4.0.0", - "aproba": "^2.0.0", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "lodash.clonedeep": "^4.5.0", - "normalize-package-data": "^2.4.0", - "npm-package-arg": "^6.1.0", - "semver": "^5.5.1", - "ssri": "^6.0.1" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha1-UlILiuW1aSFbNU78DKo/4eRaitw=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" - } - } - }, - "@evocateur/npm-registry-fetch": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@evocateur/npm-registry-fetch/-/@evocateur/npm-registry-fetch-4.0.0.tgz", - "integrity": "sha1-jEw4dm2NMtMgD8sKg/BktXNl7WY=", - "requires": { - "JSONStream": "^1.3.4", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.4.1", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "npm-package-arg": "^6.1.0", - "safe-buffer": "^5.1.2" - } - }, - "@evocateur/pacote": { - "version": "9.6.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@evocateur/pacote/-/@evocateur/pacote-9.6.5.tgz", - "integrity": "sha1-M94yuiELbxfCDrq01JfvxnVfSuU=", - "requires": { - "@evocateur/npm-registry-fetch": "^4.0.0", - "bluebird": "^3.5.3", - "cacache": "^12.0.3", - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.1.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "minimatch": "^3.0.4", - "minipass": "^2.3.5", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.5.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.4.4", - "npm-pick-manifest": "^3.0.0", - "osenv": "^0.1.5", - "promise-inflight": "^1.0.1", - "promise-retry": "^1.1.1", - "protoduck": "^5.0.1", - "rimraf": "^2.6.3", - "safe-buffer": "^5.2.0", - "semver": "^5.7.0", - "ssri": "^6.0.1", - "tar": "^4.4.10", - "unique-filename": "^1.1.1", - "which": "^1.3.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" - } - } - }, - "@lerna/add": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/add/-/@lerna/add-3.18.0.tgz", - "integrity": "sha1-huOPFNegp8YTFdzLQCN3/rHJ24M=", - "requires": { - "@evocateur/pacote": "^9.6.3", - "@lerna/bootstrap": "3.18.0", - "@lerna/command": "3.18.0", - "@lerna/filter-options": "3.18.0", - "@lerna/npm-conf": "3.16.0", - "@lerna/validation-error": "3.13.0", - "dedent": "^0.7.0", - "npm-package-arg": "^6.1.0", - "p-map": "^2.1.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" - } - } - }, - "@lerna/bootstrap": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/bootstrap/-/@lerna/bootstrap-3.18.0.tgz", - "integrity": "sha1-cF2etRok1UlRh5agnyTSRSbtl1s=", - "requires": { - "@lerna/command": "3.18.0", - "@lerna/filter-options": "3.18.0", - "@lerna/has-npm-version": "3.16.5", - "@lerna/npm-install": "3.16.5", - "@lerna/package-graph": "3.18.0", - "@lerna/pulse-till-done": "3.13.0", - "@lerna/rimraf-dir": "3.16.5", - "@lerna/run-lifecycle": "3.16.2", - "@lerna/run-topologically": "3.18.0", - "@lerna/symlink-binary": "3.17.0", - "@lerna/symlink-dependencies": "3.17.0", - "@lerna/validation-error": "3.13.0", - "dedent": "^0.7.0", - "get-port": "^4.2.0", - "multimatch": "^3.0.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "p-finally": "^1.0.0", - "p-map": "^2.1.0", - "p-map-series": "^1.0.0", - "p-waterfall": "^1.0.0", - "read-package-tree": "^5.1.6", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" - } - } - }, - "@lerna/changed": { - "version": "3.18.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/changed/-/@lerna/changed-3.18.3.tgz", - "integrity": "sha1-UFKei9XX/i0KzgRqbidNPeZSpJM=", - "requires": { - "@lerna/collect-updates": "3.18.0", - "@lerna/command": "3.18.0", - "@lerna/listable": "3.18.0", - "@lerna/output": "3.13.0", - "@lerna/version": "3.18.3" - } - }, - "@lerna/check-working-tree": { - "version": "3.16.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/check-working-tree/-/@lerna/check-working-tree-3.16.5.tgz", - "integrity": "sha1-tPiuYbtFI1Yd+5+PjYdN1Gu0S6o=", - "requires": { - "@lerna/collect-uncommitted": "3.16.5", - "@lerna/describe-ref": "3.16.5", - "@lerna/validation-error": "3.13.0" - } - }, - "@lerna/child-process": { - "version": "3.16.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/child-process/-/@lerna/child-process-3.16.5.tgz", - "integrity": "sha1-OPo8GAZKpKwHVK2AEUd2p7NqabI=", - "requires": { - "chalk": "^2.3.1", - "execa": "^1.0.0", - "strong-log-transformer": "^2.0.0" - } - }, - "@lerna/clean": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/clean/-/@lerna/clean-3.18.0.tgz", - "integrity": "sha1-zGfXaX25aacOmJmS/fB3EmMI+y4=", - "requires": { - "@lerna/command": "3.18.0", - "@lerna/filter-options": "3.18.0", - "@lerna/prompt": "3.13.0", - "@lerna/pulse-till-done": "3.13.0", - "@lerna/rimraf-dir": "3.16.5", - "p-map": "^2.1.0", - "p-map-series": "^1.0.0", - "p-waterfall": "^1.0.0" - } - }, - "@lerna/cli": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/cli/-/@lerna/cli-3.18.0.tgz", - "integrity": "sha1-K2+GBb7imcatplvC5LPte/cVrzo=", - "requires": { - "@lerna/global-options": "3.13.0", - "dedent": "^0.7.0", - "npmlog": "^4.1.2", - "yargs": "^14.2.0" - } - }, - "@lerna/collect-uncommitted": { - "version": "3.16.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/collect-uncommitted/-/@lerna/collect-uncommitted-3.16.5.tgz", - "integrity": "sha1-pJTWGqwxzceuxLvlLJZVAnQTLmM=", - "requires": { - "@lerna/child-process": "3.16.5", - "chalk": "^2.3.1", - "figgy-pudding": "^3.5.1", - "npmlog": "^4.1.2" - } - }, - "@lerna/collect-updates": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/collect-updates/-/@lerna/collect-updates-3.18.0.tgz", - "integrity": "sha1-YIbGTfMkSZPMCn+PwN3WoBAwCKY=", - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/describe-ref": "3.16.5", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "slash": "^2.0.0" - } - }, - "@lerna/command": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/command/-/@lerna/command-3.18.0.tgz", - "integrity": "sha1-HkA5kySmnSaniWnVnPYOGbLxP8M=", - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/package-graph": "3.18.0", - "@lerna/project": "3.18.0", - "@lerna/validation-error": "3.13.0", - "@lerna/write-log-file": "3.13.0", - "dedent": "^0.7.0", - "execa": "^1.0.0", - "is-ci": "^2.0.0", - "lodash": "^4.17.14", - "npmlog": "^4.1.2" - } - }, - "@lerna/conventional-commits": { - "version": "3.16.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/conventional-commits/-/@lerna/conventional-commits-3.16.4.tgz", - "integrity": "sha1-v0ZPEbL2U02tIE2wBDDhZRs0agQ=", - "requires": { - "@lerna/validation-error": "3.13.0", - "conventional-changelog-angular": "^5.0.3", - "conventional-changelog-core": "^3.1.6", - "conventional-recommended-bump": "^5.0.0", - "fs-extra": "^8.1.0", - "get-stream": "^4.0.0", - "lodash.template": "^4.5.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "pify": "^4.0.1", - "semver": "^6.2.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" - } - } - }, - "@lerna/create": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/create/-/@lerna/create-3.18.0.tgz", - "integrity": "sha1-eLpK9eztZhlEoSudfahVPAlsOQ0=", - "requires": { - "@evocateur/pacote": "^9.6.3", - "@lerna/child-process": "3.16.5", - "@lerna/command": "3.18.0", - "@lerna/npm-conf": "3.16.0", - "@lerna/validation-error": "3.13.0", - "camelcase": "^5.0.0", - "dedent": "^0.7.0", - "fs-extra": "^8.1.0", - "globby": "^9.2.0", - "init-package-json": "^1.10.3", - "npm-package-arg": "^6.1.0", - "p-reduce": "^1.0.0", - "pify": "^4.0.1", - "semver": "^6.2.0", - "slash": "^2.0.0", - "validate-npm-package-license": "^3.0.3", - "validate-npm-package-name": "^3.0.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" - } - } - }, - "@lerna/create-symlink": { - "version": "3.16.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/create-symlink/-/@lerna/create-symlink-3.16.2.tgz", - "integrity": "sha1-QSy45Zpy9afZRj5ORyGtIHAUmWc=", - "requires": { - "@zkochan/cmd-shim": "^3.1.0", - "fs-extra": "^8.1.0", - "npmlog": "^4.1.2" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@lerna/describe-ref": { - "version": "3.16.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/describe-ref/-/@lerna/describe-ref-3.16.5.tgz", - "integrity": "sha1-ozjCWq7YN9PccLinLER8XGY0asA=", - "requires": { - "@lerna/child-process": "3.16.5", - "npmlog": "^4.1.2" - } - }, - "@lerna/diff": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/diff/-/@lerna/diff-3.18.0.tgz", - "integrity": "sha1-ljj/S0biqLDU6/VM8vJnrC+P2yk=", - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/command": "3.18.0", - "@lerna/validation-error": "3.13.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/exec": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/exec/-/@lerna/exec-3.18.0.tgz", - "integrity": "sha1-2ewLfKBrdSHwufFKFk4tTKXhs7k=", - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/command": "3.18.0", - "@lerna/filter-options": "3.18.0", - "@lerna/run-topologically": "3.18.0", - "@lerna/validation-error": "3.13.0", - "p-map": "^2.1.0" - } - }, - "@lerna/filter-options": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/filter-options/-/@lerna/filter-options-3.18.0.tgz", - "integrity": "sha1-QGZn3HWo/IE8Jqkb3nVLanPhqGg=", - "requires": { - "@lerna/collect-updates": "3.18.0", - "@lerna/filter-packages": "3.18.0", - "dedent": "^0.7.0", - "figgy-pudding": "^3.5.1", - "npmlog": "^4.1.2" - } - }, - "@lerna/filter-packages": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/filter-packages/-/@lerna/filter-packages-3.18.0.tgz", - "integrity": "sha1-ano3bShSCNsDqClYz7gXLhebTnA=", - "requires": { - "@lerna/validation-error": "3.13.0", - "multimatch": "^3.0.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/get-npm-exec-opts": { - "version": "3.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/get-npm-exec-opts/-/@lerna/get-npm-exec-opts-3.13.0.tgz", - "integrity": "sha1-0bVSywCIGZ/D5+Em+RTjmgjfnqU=", - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/get-packed": { - "version": "3.16.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/get-packed/-/@lerna/get-packed-3.16.0.tgz", - "integrity": "sha1-GzFrcG3O6Gx7qlXlCwh5WUR4Uv8=", - "requires": { - "fs-extra": "^8.1.0", - "ssri": "^6.0.1", - "tar": "^4.4.8" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@lerna/github-client": { - "version": "3.16.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/github-client/-/@lerna/github-client-3.16.5.tgz", - "integrity": "sha1-LrAjXDv3p+XZLXPgmzdhqyHzXC4=", - "requires": { - "@lerna/child-process": "3.16.5", - "@octokit/plugin-enterprise-rest": "^3.6.1", - "@octokit/rest": "^16.28.4", - "git-url-parse": "^11.1.2", - "npmlog": "^4.1.2" - } - }, - "@lerna/gitlab-client": { - "version": "3.15.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/gitlab-client/-/@lerna/gitlab-client-3.15.0.tgz", - "integrity": "sha1-kfTsjGl7WsV/fyW9UP5lnSSqlqY=", - "requires": { - "node-fetch": "^2.5.0", - "npmlog": "^4.1.2", - "whatwg-url": "^7.0.0" - } - }, - "@lerna/global-options": { - "version": "3.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/global-options/-/@lerna/global-options-3.13.0.tgz", - "integrity": "sha1-IXZiKQ2watnPLEnY4xAO4o6uuuE=" - }, - "@lerna/has-npm-version": { - "version": "3.16.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/has-npm-version/-/@lerna/has-npm-version-3.16.5.tgz", - "integrity": "sha1-q4OVbyEdiSPqav6bl5s4zHOxUyY=", - "requires": { - "@lerna/child-process": "3.16.5", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" - } - } - }, - "@lerna/import": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/import/-/@lerna/import-3.18.0.tgz", - "integrity": "sha1-xrEks0agl+bA8/HtSSGieNGLyAs=", - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/command": "3.18.0", - "@lerna/prompt": "3.13.0", - "@lerna/pulse-till-done": "3.13.0", - "@lerna/validation-error": "3.13.0", - "dedent": "^0.7.0", - "fs-extra": "^8.1.0", - "p-map-series": "^1.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@lerna/init": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/init/-/@lerna/init-3.18.0.tgz", - "integrity": "sha1-sjuRcMzh9GMBcN10To7nV4XqiY0=", - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/command": "3.18.0", - "fs-extra": "^8.1.0", - "p-map": "^2.1.0", - "write-json-file": "^3.2.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@lerna/link": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/link/-/@lerna/link-3.18.0.tgz", - "integrity": "sha1-vHLcYu9Nj7hCsyhoh5gPmLdkeB0=", - "requires": { - "@lerna/command": "3.18.0", - "@lerna/package-graph": "3.18.0", - "@lerna/symlink-dependencies": "3.17.0", - "p-map": "^2.1.0", - "slash": "^2.0.0" - } - }, - "@lerna/list": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/list/-/@lerna/list-3.18.0.tgz", - "integrity": "sha1-bl/lRc5Lp8HuttbPaSQNBsAr1JY=", - "requires": { - "@lerna/command": "3.18.0", - "@lerna/filter-options": "3.18.0", - "@lerna/listable": "3.18.0", - "@lerna/output": "3.13.0" - } - }, - "@lerna/listable": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/listable/-/@lerna/listable-3.18.0.tgz", - "integrity": "sha1-dSsBRAapoBJIZibSLpQO24IFlzo=", - "requires": { - "@lerna/query-graph": "3.18.0", - "chalk": "^2.3.1", - "columnify": "^1.5.4" - } - }, - "@lerna/log-packed": { - "version": "3.16.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/log-packed/-/@lerna/log-packed-3.16.0.tgz", - "integrity": "sha1-+DmRBB7neySVY04URwtCJZ/SvBY=", - "requires": { - "byte-size": "^5.0.1", - "columnify": "^1.5.4", - "has-unicode": "^2.0.1", - "npmlog": "^4.1.2" - } - }, - "@lerna/npm-conf": { - "version": "3.16.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/npm-conf/-/@lerna/npm-conf-3.16.0.tgz", - "integrity": "sha1-HBComuL2wu6WliVXc4aFMA03aCc=", - "requires": { - "config-chain": "^1.1.11", - "pify": "^4.0.1" - } - }, - "@lerna/npm-dist-tag": { - "version": "3.18.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/npm-dist-tag/-/@lerna/npm-dist-tag-3.18.1.tgz", - "integrity": "sha1-1N2C6pLkHpYLcRf4MQLrzXoj5RE=", - "requires": { - "@evocateur/npm-registry-fetch": "^4.0.0", - "@lerna/otplease": "3.16.0", - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/npm-install": { - "version": "3.16.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/npm-install/-/@lerna/npm-install-3.16.5.tgz", - "integrity": "sha1-1r/cFvgShdpmUVrkeSTW4njWN9M=", - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/get-npm-exec-opts": "3.13.0", - "fs-extra": "^8.1.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "signal-exit": "^3.0.2", - "write-pkg": "^3.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@lerna/npm-publish": { - "version": "3.16.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/npm-publish/-/@lerna/npm-publish-3.16.2.tgz", - "integrity": "sha1-qFC1RzlEbEqnZqDOq/qSg7sL5nY=", - "requires": { - "@evocateur/libnpmpublish": "^1.2.2", - "@lerna/otplease": "3.16.0", - "@lerna/run-lifecycle": "3.16.2", - "figgy-pudding": "^3.5.1", - "fs-extra": "^8.1.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "pify": "^4.0.1", - "read-package-json": "^2.0.13" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@lerna/npm-run-script": { - "version": "3.16.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/npm-run-script/-/@lerna/npm-run-script-3.16.5.tgz", - "integrity": "sha1-nC7IJFOibAtG7cC7fBWBbIIfXBU=", - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/get-npm-exec-opts": "3.13.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/otplease": { - "version": "3.16.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/otplease/-/@lerna/otplease-3.16.0.tgz", - "integrity": "sha1-3mauxPPoNaRl176oS1ikq2WQoPo=", - "requires": { - "@lerna/prompt": "3.13.0", - "figgy-pudding": "^3.5.1" - } - }, - "@lerna/output": { - "version": "3.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/output/-/@lerna/output-3.13.0.tgz", - "integrity": "sha1-Pe18yQiyephyIopjDZUK7a56SYk=", - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/pack-directory": { - "version": "3.16.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/pack-directory/-/@lerna/pack-directory-3.16.4.tgz", - "integrity": "sha1-Pq5fkb31rP4DhFEO1T+t3EwHRpM=", - "requires": { - "@lerna/get-packed": "3.16.0", - "@lerna/package": "3.16.0", - "@lerna/run-lifecycle": "3.16.2", - "figgy-pudding": "^3.5.1", - "npm-packlist": "^1.4.4", - "npmlog": "^4.1.2", - "tar": "^4.4.10", - "temp-write": "^3.4.0" - } - }, - "@lerna/package": { - "version": "3.16.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/package/-/@lerna/package-3.16.0.tgz", - "integrity": "sha1-fgpG5Gl+2LipwU1Zx/iQ4NOLoTw=", - "requires": { - "load-json-file": "^5.3.0", - "npm-package-arg": "^6.1.0", - "write-pkg": "^3.1.0" - } - }, - "@lerna/package-graph": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/package-graph/-/@lerna/package-graph-3.18.0.tgz", - "integrity": "sha1-60LRRASlWyayRyCBYV4msIF82Ro=", - "requires": { - "@lerna/prerelease-id-from-version": "3.16.0", - "@lerna/validation-error": "3.13.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" - } - } - }, - "@lerna/prerelease-id-from-version": { - "version": "3.16.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/prerelease-id-from-version/-/@lerna/prerelease-id-from-version-3.16.0.tgz", - "integrity": "sha1-skv6eJ9eG6q5FNewi6rpt719g6E=", - "requires": { - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" - } - } - }, - "@lerna/project": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/project/-/@lerna/project-3.18.0.tgz", - "integrity": "sha1-Vv7uAdrrQsA8vfDtiioQy84y9nA=", - "requires": { - "@lerna/package": "3.16.0", - "@lerna/validation-error": "3.13.0", - "cosmiconfig": "^5.1.0", - "dedent": "^0.7.0", - "dot-prop": "^4.2.0", - "glob-parent": "^5.0.0", - "globby": "^9.2.0", - "load-json-file": "^5.3.0", - "npmlog": "^4.1.2", - "p-map": "^2.1.0", - "resolve-from": "^4.0.0", - "write-json-file": "^3.2.0" - } - }, - "@lerna/prompt": { - "version": "3.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/prompt/-/@lerna/prompt-3.13.0.tgz", - "integrity": "sha1-U1cUYrs/U5nMHKbTNaQR/gk0JqU=", - "requires": { - "inquirer": "^6.2.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/publish": { - "version": "3.18.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/publish/-/@lerna/publish-3.18.3.tgz", - "integrity": "sha1-R4u5TucSpAtyNBPkN7y54wfTcJw=", - "requires": { - "@evocateur/libnpmaccess": "^3.1.2", - "@evocateur/npm-registry-fetch": "^4.0.0", - "@evocateur/pacote": "^9.6.3", - "@lerna/check-working-tree": "3.16.5", - "@lerna/child-process": "3.16.5", - "@lerna/collect-updates": "3.18.0", - "@lerna/command": "3.18.0", - "@lerna/describe-ref": "3.16.5", - "@lerna/log-packed": "3.16.0", - "@lerna/npm-conf": "3.16.0", - "@lerna/npm-dist-tag": "3.18.1", - "@lerna/npm-publish": "3.16.2", - "@lerna/otplease": "3.16.0", - "@lerna/output": "3.13.0", - "@lerna/pack-directory": "3.16.4", - "@lerna/prerelease-id-from-version": "3.16.0", - "@lerna/prompt": "3.13.0", - "@lerna/pulse-till-done": "3.13.0", - "@lerna/run-lifecycle": "3.16.2", - "@lerna/run-topologically": "3.18.0", - "@lerna/validation-error": "3.13.0", - "@lerna/version": "3.18.3", - "figgy-pudding": "^3.5.1", - "fs-extra": "^8.1.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "p-finally": "^1.0.0", - "p-map": "^2.1.0", - "p-pipe": "^1.2.0", - "semver": "^6.2.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" - } - } - }, - "@lerna/pulse-till-done": { - "version": "3.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/pulse-till-done/-/@lerna/pulse-till-done-3.13.0.tgz", - "integrity": "sha1-yOnOW6+vENkwpn1+0My12Vj+ARA=", - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/query-graph": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/query-graph/-/@lerna/query-graph-3.18.0.tgz", - "integrity": "sha1-Q4AaLxuAoOoL/Z1C1HBgUyajA10=", - "requires": { - "@lerna/package-graph": "3.18.0", - "figgy-pudding": "^3.5.1" - } - }, - "@lerna/resolve-symlink": { - "version": "3.16.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/resolve-symlink/-/@lerna/resolve-symlink-3.16.0.tgz", - "integrity": "sha1-N/xwlfq9vPMXwm63Tg0L3o79I4Y=", - "requires": { - "fs-extra": "^8.1.0", - "npmlog": "^4.1.2", - "read-cmd-shim": "^1.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@lerna/rimraf-dir": { - "version": "3.16.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/rimraf-dir/-/@lerna/rimraf-dir-3.16.5.tgz", - "integrity": "sha1-BDFqtf/SkJZXqvOI6lAsuMLyCgk=", - "requires": { - "@lerna/child-process": "3.16.5", - "npmlog": "^4.1.2", - "path-exists": "^3.0.0", - "rimraf": "^2.6.2" - } - }, - "@lerna/run": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/run/-/@lerna/run-3.18.0.tgz", - "integrity": "sha1-twaYgPYxPkxgJrVkt7duXQ8wpSE=", - "requires": { - "@lerna/command": "3.18.0", - "@lerna/filter-options": "3.18.0", - "@lerna/npm-run-script": "3.16.5", - "@lerna/output": "3.13.0", - "@lerna/run-topologically": "3.18.0", - "@lerna/timer": "3.13.0", - "@lerna/validation-error": "3.13.0", - "p-map": "^2.1.0" - } - }, - "@lerna/run-lifecycle": { - "version": "3.16.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/run-lifecycle/-/@lerna/run-lifecycle-3.16.2.tgz", - "integrity": "sha1-Z7KI+OqWTbnqT7H7x3FdW7sLzgA=", - "requires": { - "@lerna/npm-conf": "3.16.0", - "figgy-pudding": "^3.5.1", - "npm-lifecycle": "^3.1.2", - "npmlog": "^4.1.2" - } - }, - "@lerna/run-topologically": { - "version": "3.18.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/run-topologically/-/@lerna/run-topologically-3.18.0.tgz", - "integrity": "sha1-lQhgRVPPvroQbNhLcR+t4XlH+Uo=", - "requires": { - "@lerna/query-graph": "3.18.0", - "figgy-pudding": "^3.5.1", - "p-queue": "^4.0.0" - } - }, - "@lerna/symlink-binary": { - "version": "3.17.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/symlink-binary/-/@lerna/symlink-binary-3.17.0.tgz", - "integrity": "sha1-j4AxswmGOBSIPT8AmHf4Ljiu9Fo=", - "requires": { - "@lerna/create-symlink": "3.16.2", - "@lerna/package": "3.16.0", - "fs-extra": "^8.1.0", - "p-map": "^2.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@lerna/symlink-dependencies": { - "version": "3.17.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/symlink-dependencies/-/@lerna/symlink-dependencies-3.17.0.tgz", - "integrity": "sha1-SNY2DphYZaDlbNi1GzCKUmMIeEo=", - "requires": { - "@lerna/create-symlink": "3.16.2", - "@lerna/resolve-symlink": "3.16.0", - "@lerna/symlink-binary": "3.17.0", - "fs-extra": "^8.1.0", - "p-finally": "^1.0.0", - "p-map": "^2.1.0", - "p-map-series": "^1.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@lerna/timer": { - "version": "3.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/timer/-/@lerna/timer-3.13.0.tgz", - "integrity": "sha1-vNCQRVHbFuCDZNbBjl4hYPyHB4E=" - }, - "@lerna/validation-error": { - "version": "3.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/validation-error/-/@lerna/validation-error-3.13.0.tgz", - "integrity": "sha1-yGuPB8WrlTn3db2KVJdukm83WcM=", - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/version": { - "version": "3.18.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/version/-/@lerna/version-3.18.3.tgz", - "integrity": "sha1-ATRLOcB0n962wXhxRzO6y95NYC8=", - "requires": { - "@lerna/check-working-tree": "3.16.5", - "@lerna/child-process": "3.16.5", - "@lerna/collect-updates": "3.18.0", - "@lerna/command": "3.18.0", - "@lerna/conventional-commits": "3.16.4", - "@lerna/github-client": "3.16.5", - "@lerna/gitlab-client": "3.15.0", - "@lerna/output": "3.13.0", - "@lerna/prerelease-id-from-version": "3.16.0", - "@lerna/prompt": "3.13.0", - "@lerna/run-lifecycle": "3.16.2", - "@lerna/run-topologically": "3.18.0", - "@lerna/validation-error": "3.13.0", - "chalk": "^2.3.1", - "dedent": "^0.7.0", - "load-json-file": "^5.3.0", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "p-map": "^2.1.0", - "p-pipe": "^1.2.0", - "p-reduce": "^1.0.0", - "p-waterfall": "^1.0.0", - "semver": "^6.2.0", - "slash": "^2.0.0", - "temp-write": "^3.4.0", - "write-json-file": "^3.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" - } - } - }, - "@lerna/write-log-file": { - "version": "3.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@lerna/write-log-file/-/@lerna/write-log-file-3.13.0.tgz", - "integrity": "sha1-t42eTPwTSai+ZNkTJMTIGZ6CKiY=", - "requires": { - "npmlog": "^4.1.2", - "write-file-atomic": "^2.3.0" - } - }, - "@microsoft/recognizers-text": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text/-/recognizers-text-1.1.4.tgz", - "integrity": "sha512-hlSVXcaX5i8JcjuUJpVxmy2Z/GxvFXarF0KVySCFop57wNEnrLWMHe4I4DjP866G19VyIKRw+vPA32pkGhZgTg==" - }, - "@microsoft/recognizers-text-choice": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-choice/-/recognizers-text-choice-1.1.2.tgz", - "integrity": "sha512-4hFdqxusM0YrOXYM2RVYPl2rLjItSh6VkRiACjWB95GKC/DBGjJRYQpTxhzuZAsJSkDMinu/aLf8DvQtwUaLtA==", - "requires": { - "@microsoft/recognizers-text": "~1.1.2", - "grapheme-splitter": "^1.0.2" - } - }, - "@microsoft/recognizers-text-data-types-timex-expression": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-data-types-timex-expression/-/recognizers-text-data-types-timex-expression-1.1.4.tgz", - "integrity": "sha512-2vICaEJfV9EpaDKs5P1PLAEs+WpNqrtpkl7CLsmc5gKmxgpQtsojG4tk6km5JRKg1mYuLV5ZzJ/65oOEeyTMvQ==" - }, - "@microsoft/recognizers-text-date-time": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-date-time/-/recognizers-text-date-time-1.1.2.tgz", - "integrity": "sha512-tsdsl2Z3OMFhfWicFQSS4sbk/c0pVTIXhCglDXm/cfSNuQgNgy2NFFRquiQ6MkVwiIk2I7k76TnkoDZt7PD4Dg==", - "requires": { - "@microsoft/recognizers-text": "~1.1.2", - "@microsoft/recognizers-text-number": "~1.1.2", - "@microsoft/recognizers-text-number-with-unit": "~1.1.2", - "lodash.isequal": "^4.5.0", - "lodash.tonumber": "^4.0.3" - } - }, - "@microsoft/recognizers-text-number": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number/-/recognizers-text-number-1.1.2.tgz", - "integrity": "sha512-GESjSF42dllym83diyd6pmlzFwdzidewoq/qSQz89lSoTx9HdJQHjbXxwdBp7w4Ax/Jroo2lcAedM3B7alZhYQ==", - "requires": { - "@microsoft/recognizers-text": "~1.1.2", - "bignumber.js": "^7.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.sortby": "^4.7.0", - "lodash.trimend": "^4.5.1" - } - }, - "@microsoft/recognizers-text-number-with-unit": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number-with-unit/-/recognizers-text-number-with-unit-1.1.4.tgz", - "integrity": "sha512-zl+CfmfWK0x/x+iSgaBAevKTYO0F4+z7SYHAHztaaaGuX8FERw2jmUjSgVetm5KA3EveyCx0XYGU1mRNY8p7Eg==", - "requires": { - "@microsoft/recognizers-text": "~1.1.4", - "@microsoft/recognizers-text-number": "~1.1.4", - "lodash.escaperegexp": "^4.1.2", - "lodash.last": "^3.0.0", - "lodash.max": "^4.0.1" - }, - "dependencies": { - "@microsoft/recognizers-text-number": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number/-/recognizers-text-number-1.1.4.tgz", - "integrity": "sha512-6EmlR+HR+eJBIX7sQby1vs6LJB64wxLowHaGpIU9OCXFvZ5Nb0QT8qh10rC40v3Mtrz4DpScXfSXr9tWkIO5MQ==", - "requires": { - "@microsoft/recognizers-text": "~1.1.4", - "bignumber.js": "^7.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.sortby": "^4.7.0", - "lodash.trimend": "^4.5.1" - } - } - } - }, - "@microsoft/recognizers-text-sequence": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-sequence/-/recognizers-text-sequence-1.1.4.tgz", - "integrity": "sha512-rb5j8/aE7HSOdIxaVfCGFrj0wWPpSq0CuykFg/A/iJNPP+FnAU71bgP5HexrwQcpCsDinauisX7u0DKIChrHRA==", - "requires": { - "@microsoft/recognizers-text": "~1.1.4", - "grapheme-splitter": "^1.0.2" - } - }, - "@microsoft/recognizers-text-suite": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-suite/-/recognizers-text-suite-1.1.2.tgz", - "integrity": "sha512-w3WCsKa//64jE1fGPFlV02rRg9+b3oDp+K5/skPAn4KDr80LjXxD1ulIgiJ2Ll/2OoBl8ociCiCjYA7zS3LpdQ==", - "requires": { - "@microsoft/recognizers-text": "~1.1.2", - "@microsoft/recognizers-text-choice": "~1.1.2", - "@microsoft/recognizers-text-date-time": "~1.1.2", - "@microsoft/recognizers-text-number": "~1.1.2", - "@microsoft/recognizers-text-number-with-unit": "~1.1.2", - "@microsoft/recognizers-text-sequence": "~1.1.2" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@mrmlnc/readdir-enhanced/-/@mrmlnc/readdir-enhanced-2.2.1.tgz", - "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=", - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@nodelib/fs.stat/-/@nodelib/fs.stat-1.1.3.tgz", - "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=" - }, - "@octokit/endpoint": { - "version": "5.5.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@octokit/endpoint/-/@octokit/endpoint-5.5.1.tgz", - "integrity": "sha1-LuqB4RDKdU/y3hHHkVTMq0rhaz8=", - "requires": { - "@octokit/types": "^2.0.0", - "is-plain-object": "^3.0.0", - "universal-user-agent": "^4.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-plain-object/-/is-plain-object-3.0.0.tgz", - "integrity": "sha1-R7/F2htdUNZBEIBsGZNZSC51qSg=", - "requires": { - "isobject": "^4.0.0" - } - }, - "isobject": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha1-PxyRVec7GSAiqAgZus0DQ3EWl7A=" - } - } - }, - "@octokit/plugin-enterprise-rest": { - "version": "3.6.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@octokit/plugin-enterprise-rest/-/@octokit/plugin-enterprise-rest-3.6.2.tgz", - "integrity": "sha1-dN4lvvIeAYK0+gOoZ4zQCk5n5WE=" - }, - "@octokit/request": { - "version": "5.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@octokit/request/-/@octokit/request-5.3.1.tgz", - "integrity": "sha1-OhrOReb4ixvkdJxdqWOzo7Si8SA=", - "requires": { - "@octokit/endpoint": "^5.5.0", - "@octokit/request-error": "^1.0.1", - "@octokit/types": "^2.0.0", - "deprecation": "^2.0.0", - "is-plain-object": "^3.0.0", - "node-fetch": "^2.3.0", - "once": "^1.4.0", - "universal-user-agent": "^4.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-plain-object/-/is-plain-object-3.0.0.tgz", - "integrity": "sha1-R7/F2htdUNZBEIBsGZNZSC51qSg=", - "requires": { - "isobject": "^4.0.0" - } - }, - "isobject": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha1-PxyRVec7GSAiqAgZus0DQ3EWl7A=" - } - } - }, - "@octokit/request-error": { - "version": "1.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@octokit/request-error/-/@octokit/request-error-1.2.0.tgz", - "integrity": "sha1-pk0qnXoTVVVwzXlyLeSk12Nxuqo=", - "requires": { - "@octokit/types": "^2.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "16.34.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@octokit/rest/-/@octokit/rest-16.34.1.tgz", - "integrity": "sha1-4otaVzyi8VuwAvkLwBACCEXtnAE=", - "requires": { - "@octokit/request": "^5.2.0", - "@octokit/request-error": "^1.0.2", - "atob-lite": "^2.0.0", - "before-after-hook": "^2.0.0", - "btoa-lite": "^1.0.0", - "deprecation": "^2.0.0", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", - "lodash.uniq": "^4.5.0", - "octokit-pagination-methods": "^1.1.0", - "once": "^1.4.0", - "universal-user-agent": "^4.0.0" - } - }, - "@octokit/types": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@octokit/types/-/@octokit/types-2.0.1.tgz", - "integrity": "sha1-DK8DZOAQKWJlYhWTrJo39A73Xa0=", - "requires": { - "@types/node": ">= 8" - } - }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" - }, - "@sinonjs/commons": { - "version": "1.6.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@sinonjs/commons/-/@sinonjs/commons-1.6.0.tgz", - "integrity": "sha1-7HZwQyrpyOtxBADREsIBo2LYM5M=", - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/formatio": { - "version": "3.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@sinonjs/formatio/-/@sinonjs/formatio-3.2.2.tgz", - "integrity": "sha1-dxxg36dep/LWjjuUx+iIp4eBNyw=", - "requires": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" - } - }, - "@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@sinonjs/samsam/-/@sinonjs/samsam-3.3.3.tgz", - "integrity": "sha1-Rmgu/Zlnslm4ETa58SD9VFhf60o=", - "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } - }, - "@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@sinonjs/text-encoding/-/@sinonjs/text-encoding-0.7.1.tgz", - "integrity": "sha1-jaXGUwkVZT86Hzj9XxAdjD+AecU=" - }, - "@types/bunyan": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.6.tgz", - "integrity": "sha512-YiozPOOsS6bIuz31ilYqR5SlLif4TBWsousN2aCWLi5233nZSX19tFbcQUPdR7xJ8ypPyxkCGNxg0CIV5n9qxQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/chai": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.4.tgz", - "integrity": "sha512-7qvf9F9tMTzo0akeswHPGqgUx/gIaJqrOEET/FCD8CFRkSUHlygQiM5yB6OvjrtdxBVLSyw7COJubsFYs0683g==" - }, - "@types/debug": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", - "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==" - }, - "@types/documentdb": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/@types/documentdb/-/documentdb-1.10.5.tgz", - "integrity": "sha512-FHQV9Nc1ffrLkQxO0zFlDCRPyHZtuKmAAuJIi278COhtkKBuBRuKOzoO3JlT0yfUrivPjAzNae+gh9fS++r0Ag==", - "requires": { - "@types/node": "*" - } - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@types/eslint-visitor-keys/-/@types/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0=" - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@types/events/-/@types/events-3.0.0.tgz", - "integrity": "sha1-KGLz9Yqaf3w+eNefEw3U1xwlwqc=" - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@types/glob/-/@types/glob-7.1.1.tgz", - "integrity": "sha1-qlmhxuP7xCHgfM0xqUTDDrpSFXU=", - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@types/json-schema/-/@types/json-schema-7.0.3.tgz", - "integrity": "sha1-vf1p1h5GTcyBslFZwnDXWnPBpjY=" - }, - "@types/jsonpath": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.0.tgz", - "integrity": "sha512-v7qlPA0VpKUlEdhghbDqRoKMxFB3h3Ch688TApBJ6v+XLDdvWCGLJIYiPKGZnS6MAOie+IorCfNYVHOPIHSWwQ==" - }, - "@types/jsonwebtoken": { - "version": "8.3.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@types/jsonwebtoken/-/@types/jsonwebtoken-8.3.5.tgz", - "integrity": "sha1-/5vhFRqEQJXfH/X3I2USmMLAdlk=", - "requires": { - "@types/node": "*" - } - }, - "@types/jspath": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@types/jspath/-/jspath-0.4.0.tgz", - "integrity": "sha512-ns6qcoS1OZwRCRezNIS6gWzNormot82WcaQ/6njVey8P2cGDjOjbsbytX35hfGdHqfbEQe3GUoRcmqPltuNHKA==" - }, - "@types/lodash": { - "version": "4.14.144", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@types/lodash/-/@types/lodash-4.14.144.tgz", - "integrity": "sha1-EuV/yZBkvOReWrPIvEeD/rdeq44=" - }, - "@types/lru-cache": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz", - "integrity": "sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w==" - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@types/minimatch/-/@types/minimatch-3.0.3.tgz", - "integrity": "sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0=" - }, - "@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==" - }, - "@types/node": { - "version": "10.17.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@types/node/-/@types/node-10.17.4.tgz", - "integrity": "sha1-iZOk/jxAIv2ma/TqZg1hX8VlnG8=" - }, - "@types/node-fetch": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.3.tgz", - "integrity": "sha512-X3TNlzZ7SuSwZsMkb5fV7GrPbVKvHc2iwHmslb8bIxRKWg2iqkfm3F/Wd79RhDpOXR7wCtKAwc5Y2JE6n/ibyw==", - "requires": { - "@types/node": "*" - } - }, - "@types/restify": { - "version": "7.2.12", - "resolved": "https://registry.npmjs.org/@types/restify/-/restify-7.2.12.tgz", - "integrity": "sha512-1AcxgYz3WnAx/NvpxROSiNCJSGmbl2ho8CNyAg+fhuo+oopXKEitQwXTR7/ibhKAzrBaerxRF6nn2YXXaTkNrg==", - "requires": { - "@types/bunyan": "*", - "@types/node": "*", - "@types/spdy": "*" - } - }, - "@types/semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-YD+lyrPhrsJdSOaxmA9K1lzsCoN0J29IsQGMKd67SbkPDXxJPdwdqpok1sytD19NEozUaFpjIsKOWnJDOYO/GA==" - }, - "@types/spdy": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@types/spdy/-/spdy-3.4.4.tgz", - "integrity": "sha512-N9LBlbVRRYq6HgYpPkqQc3a9HJ/iEtVZToW6xlTtJiMhmRJ7jJdV7TaZQJw/Ve/1ePUsQiCTDc4JMuzzag94GA==", - "requires": { - "@types/node": "*" - } - }, - "@types/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=" - }, - "@types/strip-json-comments": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", - "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==" - }, - "@types/tunnel": { - "version": "0.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@types/tunnel/-/@types/tunnel-0.0.0.tgz", - "integrity": "sha1-wqQpQ+5jyQZSpVV7jE5Wzad/lE4=", - "requires": { - "@types/node": "*" - } - }, - "@types/uuid": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.6.tgz", - "integrity": "sha512-cCdlC/1kGEZdEglzOieLDYBxHsvEOIg7kp/2FYyVR9Pxakq+Qf/inL3RKQ+PA8gOlI/NnL+fXmQH12nwcGzsHw==", - "requires": { - "@types/node": "*" - } - }, - "@types/ws": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.3.tgz", - "integrity": "sha512-yBTM0P05Tx9iXGq00BbJPo37ox68R5vaGTXivs6RGh/BQ6QP5zqZDGWdAO6JbRE/iR1l80xeGAwCQS2nMV9S/w==", - "requires": { - "@types/node": "*" - } - }, - "@types/xml2js": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.5.tgz", - "integrity": "sha512-yohU3zMn0fkhlape1nxXG2bLEGZRc1FeqF80RoHaYXJN7uibaauXfhzhOJr1Xh36sn+/tx21QAOf07b/xYVk1w==", - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "1.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@typescript-eslint/eslint-plugin/-/@typescript-eslint/eslint-plugin-1.13.0.tgz", - "integrity": "sha1-Iv7ZsW3f60Av17zeVjB4IPbrxJ8=", - "requires": { - "@typescript-eslint/experimental-utils": "1.13.0", - "eslint-utils": "^1.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^2.0.1", - "tsutils": "^3.7.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "1.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@typescript-eslint/experimental-utils/-/@typescript-eslint/experimental-utils-1.13.0.tgz", - "integrity": "sha1-sIxg14DABn3i+0SwS0MvVAE4MB4=", - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "1.13.0", - "eslint-scope": "^4.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "1.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@typescript-eslint/parser/-/@typescript-eslint/parser-1.13.0.tgz", - "integrity": "sha1-Yax4EepSeRxH3J/U3UoYT66aw1U=", - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "1.13.0", - "@typescript-eslint/typescript-estree": "1.13.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "1.13.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@typescript-eslint/typescript-estree/-/@typescript-eslint/typescript-estree-1.13.0.tgz", - "integrity": "sha1-gUDxfQ9gwDYZeY8dYouENJE9wy4=", - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - } - }, - "@zkochan/cmd-shim": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@zkochan/cmd-shim/-/@zkochan/cmd-shim-3.1.0.tgz", - "integrity": "sha1-KrjtgfW7VFKoXyV1jrm4aBmC/S4=", - "requires": { - "is-windows": "^1.0.0", - "mkdirp-promise": "^5.0.1", - "mz": "^2.5.0" - } - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha1-MgjB8I06TZkmGrZPkjArwV4RHKA=", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=" - }, - "acorn": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha1-AIdQkRn/pPwKAEHR6TpBfmjLhW4=" - }, - "acorn-jsx": { - "version": "5.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/acorn-jsx/-/acorn-jsx-5.1.0.tgz", - "integrity": "sha1-KUrbcbVzmLBoABXwo4xWPuHbU4Q=" - }, - "adal-node": { - "version": "0.1.28", - "resolved": "https://registry.npmjs.org/adal-node/-/adal-node-0.1.28.tgz", - "integrity": "sha1-RoxLs+u9lrEnBmn0ucuk4AZepIU=", - "requires": { - "@types/node": "^8.0.47", - "async": ">=0.6.0", - "date-utils": "*", - "jws": "3.x.x", - "request": ">= 2.52.0", - "underscore": ">= 1.3.1", - "uuid": "^3.1.0", - "xmldom": ">= 0.1.x", - "xpath.js": "~1.1.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.58", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/@types/node/-/@types/node-8.10.58.tgz", - "integrity": "sha1-mMFM6VpjRwG9LVnVLfiCwGEN0Os=" - } - } - }, - "adm-zip": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", - "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==" - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4=", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "agentkeepalive": { - "version": "3.5.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/agentkeepalive/-/agentkeepalive-3.5.2.tgz", - "integrity": "sha1-oROSTdP6JKC8O3gQjEUMKr7gD2c=", - "requires": { - "humanize-ms": "^1.2.1" - } - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha1-086gTWsBeyiUrWkED+yLYj60vVI=", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha1-V9NbhoboUeLMBMQD8cACA5dqGBM=" - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s=" - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "requires": { - "color-convert": "^1.9.0" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.1", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.1.tgz", - "integrity": "sha512-LU5FLWq2fUwg2cTL/DeIL16ucUm5jv6SNVFoMjbYLviXAp6p5g1ZzkTAnWiOKX/muEEy0PY78perPj6WUBSQCw==" - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, - "app-root-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", - "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==" - }, - "applicationinsights": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-1.2.0.tgz", - "integrity": "sha512-zb2id/cGdapn7sSH9rotgzic7Cje9k9zb+e9RrrQxG2GuOPPN0kD03FqO8qIAd3HvdtefQY3tTZXbQKo0qtmKw==", - "requires": { - "cls-hooked": "^4.2.2", - "continuation-local-storage": "^3.2.1", - "diagnostic-channel": "0.2.0", - "diagnostic-channel-publishers": "0.3.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=" - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha1-SzXClE8GKov82mZBB2A1D+nd/CE=", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-differ": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/array-differ/-/array-differ-2.1.0.tgz", - "integrity": "sha1-S5wcPxS5BnVwgpJXaeirkE9IAbE=" - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=" - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "http://bbnpm.azurewebsites.net/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=" - }, - "async": { - "version": "2.6.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/async/-/async-2.6.0.tgz", - "integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=", - "requires": { - "lodash": "^4.14.0" - } - }, - "async-hook-jl": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", - "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", - "requires": { - "stack-chain": "^1.3.7" - } - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "async-listener": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", - "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", - "requires": { - "semver": "^5.3.0", - "shimmer": "^1.1.0" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "http://bbnpm.azurewebsites.net/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/atob/-/atob-2.1.2.tgz", - "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=" - }, - "atob-lite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", - "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "http://bbnpm.azurewebsites.net/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=" - }, - "axios": { - "version": "0.19.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/axios/-/axios-0.19.0.tgz", - "integrity": "sha1-jgm/89kSLhM/e4EByPvdAO09Krg=", - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - } - }, - "azure-storage": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/azure-storage/-/azure-storage-2.10.2.tgz", - "integrity": "sha512-pOyGPya9+NDpAfm5YcFfklo57HfjDbYLXxs4lomPwvRxmb0Di/A+a+RkUmEFzaQ8S13CqxK40bRRB0sjj2ZQxA==", - "requires": { - "browserify-mime": "~1.2.9", - "extend": "^3.0.2", - "json-edm-parser": "0.1.2", - "md5.js": "1.3.4", - "readable-stream": "~2.0.0", - "request": "^2.86.0", - "underscore": "~1.8.3", - "uuid": "^3.0.0", - "validator": "~9.4.1", - "xml2js": "0.2.8", - "xmlbuilder": "^9.0.7" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "sax": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - }, - "xml2js": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz", - "integrity": "sha1-m4FpCTFjH/CdGVdUn69U9PmAs8I=", - "requires": { - "sax": "0.5.x" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - } - } - }, - "backbone": { - "version": "1.4.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/backbone/-/backbone-1.4.0.tgz", - "integrity": "sha1-VNtN6d98OBHD8DLzR0mkzSfzvRI=", - "requires": { - "underscore": ">=1.8.3" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "http://bbnpm.azurewebsites.net/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/base/-/base-0.11.2.tgz", - "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "before-after-hook": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/before-after-hook/-/before-after-hook-2.1.0.tgz", - "integrity": "sha1-tsA0h/ROJCAN0wyl5qGXnF0vtjU=" - }, - "big-integer": { - "version": "1.6.47", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.47.tgz", - "integrity": "sha512-9t9f7X3as2XGX8b52GqG6ox0GvIdM86LyIXASJnDCFhYNgt+A+MByQZ3W2PyMRZjEvG5f8TEbSPfEotVuMJnQg==" - }, - "bignumber.js": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "binary-search-bounds": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.3.tgz", - "integrity": "sha1-X/hhbW3SylOIvIWy1iZuK52lAtw=" - }, - "bluebird": { - "version": "3.7.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha1-33DjArRx10c0iazyapPWO1P4dN4=" - }, - "botbuilder": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/botbuilder/-/botbuilder-4.6.0.tgz", - "integrity": "sha512-dXfyAjobTyJ5ViOurEt088uOw82cpuzQB+L1J041GbEBZ/DzjAAC/8TMGn++j4++kzE6WsFc+D0hZuBAF2YzgA==", - "requires": { - "@types/node": "^10.12.18", - "botbuilder-core": "^4.6.0", - "botframework-connector": "^4.6.0", - "filenamify": "^4.1.0", - "fs-extra": "^7.0.1" - } - }, - "botbuilder-ai": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/botbuilder-ai/-/botbuilder-ai-4.6.0.tgz", - "integrity": "sha512-Xj40ihYKAhbxzYMwdR+ei1YnTKREFlTGE4mkXIgb5ipdAnPA6cQZV2MV/AYY591/5LKrEzKRpgAXzy1IChwjPQ==", - "requires": { - "@azure/cognitiveservices-luis-runtime": "2.0.0", - "@azure/ms-rest-js": "1.8.13", - "@microsoft/recognizers-text-date-time": "1.1.2", - "@types/node": "^10.12.18", - "botbuilder-core": "^4.6.0", - "moment": "^2.20.1", - "node-fetch": "^2.3.0", - "url-parse": "^1.4.4" - } - }, - "botbuilder-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/botbuilder-core/-/botbuilder-core-4.6.0.tgz", - "integrity": "sha512-NrZENrtKDoe6SlFhc+tSdkSbC9qWhEFrk60VOUiT6Q4OMfz0eFZc3HwrcN2obcYc5eQteW+zCEvvi/r41DLP4g==", - "requires": { - "assert": "^1.4.1", - "botframework-schema": "^4.6.0" - } - }, - "botbuilder-dialogs": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/botbuilder-dialogs/-/botbuilder-dialogs-4.6.0.tgz", - "integrity": "sha512-mDpxbh6A9DcXHXHQNkVHqWmyARtdrI3CyIEwa244n2O/KH9LKMQ+71oSwl82Qm8lsQTTAZ93atFQcgtMDtuEmQ==", - "requires": { - "@microsoft/recognizers-text-choice": "1.1.4", - "@microsoft/recognizers-text-date-time": "1.1.4", - "@microsoft/recognizers-text-number": "1.1.4", - "@microsoft/recognizers-text-suite": "1.1.4", - "@types/node": "^10.12.18", - "botbuilder-core": "^4.6.0", - "cldr-data": "^35.1.0", - "globalize": "^1.4.2" - }, - "dependencies": { - "@microsoft/recognizers-text-choice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-choice/-/recognizers-text-choice-1.1.4.tgz", - "integrity": "sha512-4CddwFe4RVhZeJgW65ocBrEdeukBMghK8pgI0K0Qy2eA5ysPZQpeZ7BGSDz5QMQei5LPY+QaAQ3CHU+ORHoO7A==", - "requires": { - "@microsoft/recognizers-text": "~1.1.4", - "grapheme-splitter": "^1.0.2" - } - }, - "@microsoft/recognizers-text-date-time": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-date-time/-/recognizers-text-date-time-1.1.4.tgz", - "integrity": "sha512-leMnjN+KYNwNvRD5T4G0ORUzkjlek/BBZDvQIjAujtyrd/pkViUnuouWIPkFT/dbSOxXML8et54CSk2KfHiWIA==", - "requires": { - "@microsoft/recognizers-text": "~1.1.4", - "@microsoft/recognizers-text-number": "~1.1.4", - "@microsoft/recognizers-text-number-with-unit": "~1.1.4", - "lodash.isequal": "^4.5.0", - "lodash.tonumber": "^4.0.3" - } - }, - "@microsoft/recognizers-text-number": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number/-/recognizers-text-number-1.1.4.tgz", - "integrity": "sha512-6EmlR+HR+eJBIX7sQby1vs6LJB64wxLowHaGpIU9OCXFvZ5Nb0QT8qh10rC40v3Mtrz4DpScXfSXr9tWkIO5MQ==", - "requires": { - "@microsoft/recognizers-text": "~1.1.4", - "bignumber.js": "^7.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.sortby": "^4.7.0", - "lodash.trimend": "^4.5.1" - } - }, - "@microsoft/recognizers-text-suite": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-suite/-/recognizers-text-suite-1.1.4.tgz", - "integrity": "sha512-hNIaR4M2G0nNeI9WZxt9C0KYh/1vhjeKzX5Ds8XDdT0pxF7zwCSo19WNcPjrVK6aCOeZTw/ULofsAjdu9gSkcA==", - "requires": { - "@microsoft/recognizers-text": "~1.1.4", - "@microsoft/recognizers-text-choice": "~1.1.4", - "@microsoft/recognizers-text-date-time": "~1.1.4", - "@microsoft/recognizers-text-number": "~1.1.4", - "@microsoft/recognizers-text-number-with-unit": "~1.1.4", - "@microsoft/recognizers-text-sequence": "~1.1.4" - } - } - } - }, - "botframework-config": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/botframework-config/-/botframework-config-4.6.0.tgz", - "integrity": "sha512-sWm5Lx1Y0d6/0/YCYzCQ+Y4W0zPgDDbkOq+tURiKSGfOwLNa66DVVP7EwTmadgPox02UOYI7q1l7MqMa6mzHYg==", - "requires": { - "fs-extra": "^7.0.0", - "read-text-file": "^1.1.0", - "uuid": "^3.3.2" - } - }, - "botframework-connector": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/botframework-connector/-/botframework-connector-4.6.0.tgz", - "integrity": "sha512-sbqSWpZBC+0hA7+ExyaSJOy88XeuINTGWSOcAxx5JyJAXosBr0Bdd4y+I4evq5VhSj3GME2g/DYa8d73i/mFMQ==", - "requires": { - "@azure/ms-rest-js": "1.2.6", - "@types/jsonwebtoken": "7.2.8", - "@types/node": "^10.12.18", - "base64url": "^3.0.0", - "botframework-schema": "^4.6.0", - "form-data": "^2.3.3", - "jsonwebtoken": "8.0.1", - "node-fetch": "^2.2.1", - "rsa-pem-from-mod-exp": "^0.8.4" - }, - "dependencies": { - "@azure/ms-rest-js": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.2.6.tgz", - "integrity": "sha512-8cmDpxsQjVdveJwYKtNnkJorxEORLYJu9UHaUvLZA6yHExzDeISHAcSVWE0J05+VkJtqheVHF17M+2ro18Cdnw==", - "requires": { - "axios": "^0.18.0", - "form-data": "^2.3.2", - "tough-cookie": "^2.4.3", - "tslib": "^1.9.2", - "uuid": "^3.2.1", - "xml2js": "^0.4.19" - } - }, - "@types/jsonwebtoken": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.8.tgz", - "integrity": "sha512-XENN3YzEB8D6TiUww0O8SRznzy1v+77lH7UmuN54xq/IHIsyWjWOzZuFFTtoiRuaE782uAoRwBe/wwow+vQXZw==", - "requires": { - "@types/node": "*" - } - }, - "axios": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", - "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - } - } - } - }, - "botframework-schema": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/botframework-schema/-/botframework-schema-4.6.0.tgz", - "integrity": "sha512-3ndSI2S17Do6RRncYN3Z+N1bkui9HPHIw2lyIGjyX7grukmAcnex/xfpafK++UqmhvF65OdY/Xa4njn7E/tKEQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/braces/-/braces-2.3.2.tgz", - "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=" - }, - "browserify-mime": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/browserify-mime/-/browserify-mime-1.2.9.tgz", - "integrity": "sha1-rrGvKN5sDXpqLOQK22j/GEIq8x8=" - }, - "btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" - }, - "btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=" - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=" - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" - }, - "bunyan": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", - "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.10.6", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=" - }, - "byte-size": { - "version": "5.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/byte-size/-/byte-size-5.0.1.tgz", - "integrity": "sha1-S2UQOaXs2Wdn5xo9ftOA5IvtQZE=" - }, - "cacache": { - "version": "12.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha1-vpmruk4b9d9GHNWiwQcfxDJXM5A=", - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - } - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=" - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "http://bbnpm.azurewebsites.net/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=" - }, - "chatdown": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/chatdown/-/chatdown-1.2.3.tgz", - "integrity": "sha512-87ayTdkOyXYxDVZsikMVIMiEUas5kdT/2s0ideCwKjhk/2SvGG3QAVCoCmdfnNpDaWHAP4/5AR9Ql+571C9r4Q==", - "requires": { - "botframework-schema": "^4.0.0-preview1.2", - "chalk": "2.4.1", - "cli-table3": "^0.5.1", - "fs-extra": "^5.0.0", - "glob": "^7.1.3", - "intercept-stdout": "^0.1.2", - "latest-version": "^4.0.0", - "mime-types": "^2.1.18", - "minimist": "^1.2.0", - "please-upgrade-node": "^3.0.1", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "semver": "^5.5.1", - "window-size": "^1.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" - }, - "chownr": { - "version": "1.1.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha1-Qtg31SOWiNVfMDADpQgjD6ZycUI=" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=" - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cldr-data": { - "version": "35.1.0", - "resolved": "https://registry.npmjs.org/cldr-data/-/cldr-data-35.1.0.tgz", - "integrity": "sha512-HreWlQ/Yy4AZVGD9aB6cOvpwPYGW3Vss62Bhojcy7r/MgX13PZsr90ujwcAlLATA0o2446H04MD6OqZRfJ84aw==", - "requires": { - "cldr-data-downloader": "0.3.x", - "glob": "5.x.x" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "cldr-data-downloader": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/cldr-data-downloader/-/cldr-data-downloader-0.3.5.tgz", - "integrity": "sha512-uyIMa1K98DAp/PE7dYpq2COIrkWn681Atjng1GgEzeJzYb1jANtugtp9wre6+voE+qzVC8jtWv6E/xZ1GTJdlw==", - "requires": { - "adm-zip": "0.4.11", - "mkdirp": "0.5.0", - "nopt": "3.0.x", - "progress": "1.1.8", - "q": "1.0.1", - "request": "~2.87.0", - "request-progress": "0.3.1" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "requires": { - "minimist": "0.0.8" - } - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "q": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.0.1.tgz", - "integrity": "sha1-EYcq7t7okmgRCxCnGESP+xARKhQ=" - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" - } - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "requires": { - "punycode": "^1.4.1" - } - } - } - }, - "cldrjs": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.1.tgz", - "integrity": "sha512-xyiP8uAm8K1IhmpDndZLraloW1yqu0L+HYdQ7O1aGPxx9Cr+BMnPANlNhSt++UKfxytL2hd2NPXgTjiy7k43Ew==" - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "cls-hooked": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", - "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==", - "requires": { - "async-hook-jl": "^1.7.6", - "emitter-listener": "^1.0.1", - "semver": "^5.4.1" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "http://bbnpm.azurewebsites.net/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "codelyzer": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.5.0.tgz", - "integrity": "sha512-oO6vCkjqsVrEsmh58oNlnJkRXuA30hF8cdNAQV9DytEalDwyOFRvHMnlKFzmOStNerOmPGZU9GAHnBo4tGvtiQ==", - "requires": { - "app-root-path": "^2.1.0", - "css-selector-tokenizer": "^0.7.0", - "cssauron": "^1.4.0", - "semver-dsl": "^1.0.1", - "source-map": "^0.5.7", - "sprintf-js": "^1.1.1" - }, - "dependencies": { - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" - } - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "http://bbnpm.azurewebsites.net/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "optional": true - }, - "columnify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", - "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/commander/-/commander-2.20.3.tgz", - "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=" - }, - "compare-func": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", - "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^3.0.0" - }, - "dependencies": { - "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "requires": { - "is-obj": "^1.0.0" - } - } - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "http://bbnpm.azurewebsites.net/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha1-D96NCRIA616AjK8l/mGMAvSOTvo=", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "continuation-local-storage": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", - "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", - "requires": { - "async-listener": "^0.6.0", - "emitter-listener": "^1.1.1" - } - }, - "conventional-changelog-angular": { - "version": "5.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/conventional-changelog-angular/-/conventional-changelog-angular-5.0.5.tgz", - "integrity": "sha1-abVBvPPlOKhXix5fuqvpvY9XK1c=", - "requires": { - "compare-func": "^1.3.1", - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "3.2.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz", - "integrity": "sha1-sxQQhW9DHIRwhqfctNLKGEp9iPs=", - "requires": { - "conventional-changelog-writer": "^4.0.6", - "conventional-commits-parser": "^3.0.3", - "dateformat": "^3.0.0", - "get-pkg-repo": "^1.0.0", - "git-raw-commits": "2.0.0", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^2.0.3", - "lodash": "^4.2.1", - "normalize-package-data": "^2.3.5", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^3.0.0" - }, - "dependencies": { - "through2": { - "version": "3.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/through2/-/through2-3.0.1.tgz", - "integrity": "sha1-OSducTwzAu3544jdnIEt07glvVo=", - "requires": { - "readable-stream": "2 || 3" - } - } - } - }, - "conventional-changelog-preset-loader": { - "version": "2.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz", - "integrity": "sha1-Vx4rPXtT1lWHvqnu3243+qXbT8w=" - }, - "conventional-changelog-writer": { - "version": "4.0.9", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/conventional-changelog-writer/-/conventional-changelog-writer-4.0.9.tgz", - "integrity": "sha1-RKxMSBIbyQ5xyylH4eoabCIszX8=", - "requires": { - "compare-func": "^1.3.1", - "conventional-commits-filter": "^2.0.2", - "dateformat": "^3.0.0", - "handlebars": "^4.4.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.2.1", - "meow": "^4.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^3.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" - }, - "through2": { - "version": "3.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/through2/-/through2-3.0.1.tgz", - "integrity": "sha1-OSducTwzAu3544jdnIEt07glvVo=", - "requires": { - "readable-stream": "2 || 3" - } - } - } - }, - "conventional-commits-filter": { - "version": "2.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz", - "integrity": "sha1-8SL4n7zVu4Hiry/KwCVNBi0QOcE=", - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/conventional-commits-parser/-/conventional-commits-parser-3.0.5.tgz", - "integrity": "sha1-30cdbLP2/s/RNWrHLgtXfb2uCpw=", - "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^2.0.0", - "lodash": "^4.2.1", - "meow": "^4.0.0", - "split2": "^2.0.0", - "through2": "^3.0.0", - "trim-off-newlines": "^1.0.0" - }, - "dependencies": { - "through2": { - "version": "3.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/through2/-/through2-3.0.1.tgz", - "integrity": "sha1-OSducTwzAu3544jdnIEt07glvVo=", - "requires": { - "readable-stream": "2 || 3" - } - } - } - }, - "conventional-recommended-bump": { - "version": "5.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz", - "integrity": "sha1-WvY5A5R7bgied3Z2ActZLKuxBro=", - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.1.1", - "conventional-commits-filter": "^2.0.2", - "conventional-commits-parser": "^3.0.3", - "git-raw-commits": "2.0.0", - "git-semver-tags": "^2.0.3", - "meow": "^4.0.0", - "q": "^1.5.1" - }, - "dependencies": { - "concat-stream": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha1-QUz1r3kKSMYKub5FJ9VtXkETPLE=", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha1-pRwmdUZY4KPCHb9ZFjvUW6b0R/w=", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "http://bbnpm.azurewebsites.net/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "import-fresh": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } - } - }, - "coveralls": { - "version": "3.0.7", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/coveralls/-/coveralls-3.0.7.tgz", - "integrity": "sha1-HspI5Hl26Vc9ai8YuXwv6kAm80o=", - "requires": { - "growl": "~> 1.10.0", - "js-yaml": "^3.13.1", - "lcov-parse": "^0.0.10", - "log-driver": "^1.2.7", - "minimist": "^1.2.0", - "request": "^2.86.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "css-selector-tokenizer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", - "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", - "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" - } - }, - "cssauron": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", - "requires": { - "through": "X.X.X" - } - }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=" - }, - "csv": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/csv/-/csv-1.2.1.tgz", - "integrity": "sha1-UjHt/BxxUlEuxFeBB2p6l/9SXAw=", - "requires": { - "csv-generate": "^1.1.2", - "csv-parse": "^1.3.3", - "csv-stringify": "^1.1.2", - "stream-transform": "^0.2.2" - } - }, - "csv-generate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-1.1.2.tgz", - "integrity": "sha1-7GsA7a7W5ZrZwgWC9MNk4osUYkA=" - }, - "csv-parse": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-1.3.3.tgz", - "integrity": "sha1-0c/YdDwvhJoKuy/VRNtWaV0ZpJA=" - }, - "csv-stringify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-1.1.2.tgz", - "integrity": "sha1-d6QVJlgbzjOA8SsA18W7rHDIK1g=", - "requires": { - "lodash.get": "~4.4.2" - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "requires": { - "array-find-index": "^1.0.1" - } - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" - }, - "dargs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", - "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "http://bbnpm.azurewebsites.net/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-utils": { - "version": "1.2.21", - "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz", - "integrity": "sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q=" - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha1-puN0maTZqc+F71hyBE1ikByYia4=" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/debug/-/debug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", - "requires": { - "ms": "2.0.0" - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=" - }, - "decamelize": { - "version": "1.2.0", - "resolved": "http://bbnpm.azurewebsites.net/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - } - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", - "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "http://bbnpm.azurewebsites.net/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "http://bbnpm.azurewebsites.net/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha1-Y2jL20Cr8zc7UlrIfkomDDpwCRk=" - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=" - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" - }, - "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diagnostic-channel": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-0.2.0.tgz", - "integrity": "sha1-zJmvlhLCP7H/8TYSxy8sv6qNWhc=", - "requires": { - "semver": "^5.3.0" - } - }, - "diagnostic-channel-publishers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.3.0.tgz", - "integrity": "sha512-tylBZM/ZJ+ismlyop3g9ejI/0+bR/3BTo06fcE4wxq6cJZOe6XMABgRUZ+QUs+0WSnuglxmJ8Wwamnl01tV+Gw==" - }, - "diff": { - "version": "3.5.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/diff/-/diff-3.5.0.tgz", - "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=" - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=", - "requires": { - "path-type": "^3.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=", - "requires": { - "esutils": "^2.0.2" - } - }, - "documentdb": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/documentdb/-/documentdb-1.14.5.tgz", - "integrity": "sha512-0nDoQQiq5jzGIxOQF2y2bUOrFYehvk9pIrXy0dscXc3JsepNYhNVmjIsug5sgYPbt+XUYtMXpsfjzGCnYgNXgw==", - "requires": { - "big-integer": "^1.6.25", - "binary-search-bounds": "2.0.3", - "int64-buffer": "^0.1.9", - "priorityqueuejs": "1.0.0", - "semaphore": "1.0.5", - "tunnel": "0.0.5", - "underscore": "1.8.3" - }, - "dependencies": { - "semaphore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.0.5.tgz", - "integrity": "sha1-tJJXbmavGT25XWXiXsU/Xxl5jWA=" - }, - "tunnel": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.5.tgz", - "integrity": "sha512-gj5sdqherx4VZKMcBA4vewER7zdK25Td+z1npBqpbDys4eJrLx+SlYjJvq1bDXs2irkuJM5pf8ktaEQVipkrbA==" - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - } - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" - }, - "dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "requires": { - "nan": "^2.14.0" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha1-rg8PothQRe8UqBfao86azQSJ5b8=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "emitter-listener": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", - "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", - "requires": { - "shimmer": "^1.2.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", - "requires": { - "once": "^1.4.0" - } - }, - "env-paths": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/env-paths/-/env-paths-1.0.0.tgz", - "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=" - }, - "err-code": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", - "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.16.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/es-abstract/-/es-abstract-1.16.0.tgz", - "integrity": "sha1-06JtycMoOsl1DcpWlYbpdtncwG0=", - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.0", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", - "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha1-7fckeAM0VujdqO8J4ArZZQcH83c=", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo=" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-regexp-component": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-regexp-component/-/escape-regexp-component-1.0.2.tgz", - "integrity": "sha1-nGO20LJf8qiMOtvRjFthrMO5+qI=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "http://bbnpm.azurewebsites.net/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", - "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } - } - }, - "eslint": { - "version": "5.16.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha1-oeOsGq5KP72Clvz496tzFMu2q+o=", - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/debug/-/debug-4.1.1.tgz", - "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" - } - } - }, - "eslint-plugin-only-warn": { - "version": "1.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.0.1.tgz", - "integrity": "sha1-oB5hXDbzC6+Qn/VqsGBf/k6hijc=" - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8=", - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha1-4qgs6oT/JGrW+1f5veW0ZiFFnsI=" - }, - "espree": { - "version": "5.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/espree/-/espree-5.0.1.tgz", - "integrity": "sha1-XWUm+k/H8HiKXPdbFfMDI+L4H3o=", - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=" - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha1-QGxRZYsfWZGl+bYrHcJbAOPlxwg=", - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=" - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha1-LT1I+cNGaY/Og6hdfWZOmFNd9uc=" - }, - "ewma": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ewma/-/ewma-2.0.1.tgz", - "integrity": "sha512-MYYK17A76cuuyvkR7MnqLW4iFYPEi5Isl2qb8rXiWpLiwFS9dxW/rncuNnjjgSENuVqZQkIuR4+DChVL4g1lnw==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/execa/-/execa-1.0.0.tgz", - "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/debug/-/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/extend/-/extend-3.0.2.tgz", - "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "http://bbnpm.azurewebsites.net/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-decode-uri-component": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=", - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "http://bbnpm.azurewebsites.net/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "http://bbnpm.azurewebsites.net/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=" - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=", - "requires": { - "flat-cache": "^2.0.1" - } - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" - }, - "filenamify": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.1.0.tgz", - "integrity": "sha512-KQV/uJDI9VQgN7sHH1Zbk6+42cD6mnQ2HONzkXUfPJ+K2FC8GZ1dpewbbHw0Sz8Tf5k3EVdHVayM4DoAwWlmtg==", - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-my-way": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-1.18.1.tgz", - "integrity": "sha512-5M9oQuUPNDxr7w7g65Rv2acToLUIjVUbnMsltXNQaSYWOwjf+2MBp7sMuY+pfO+OPCo2qwcxsr29VQQ09ouVMg==", - "requires": { - "fast-decode-uri-component": "^1.0.0", - "safe-regex": "^1.1.0", - "semver-store": "^0.3.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/flat/-/flat-4.1.0.tgz", - "integrity": "sha1-CQvsiwXjnLowl0fx1YjwTbr5jbI=", - "requires": { - "is-buffer": "~2.0.3" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=", - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha1-aeV8qo8OrLwoHS4stFjUb9tEngg=" - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=", - "requires": { - "debug": "=3.1.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "http://bbnpm.azurewebsites.net/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha1-8svsV7XlniNxbhKP5E1OXdI4lfQ=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha1-zP+FcIQef+QmVpPaiJNsVa7X98c=", - "requires": { - "minipass": "^2.6.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "http://bbnpm.azurewebsites.net/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz", - "integrity": "sha1-czfwWPu7vvqMn1YaKMqwhJICyYg=", - "requires": { - "graceful-fs": "~3.0.2", - "inherits": "~2.0.0", - "mkdirp": "0.5", - "rimraf": "2" - }, - "dependencies": { - "graceful-fs": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz", - "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==", - "requires": { - "natives": "^1.1.3" - } - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "genfun": { - "version": "5.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/genfun/-/genfun-5.0.0.tgz", - "integrity": "sha1-ndlxCgaQClxKW/V6yl2k5S/nZTc=" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=" - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" - }, - "get-pkg-repo": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", - "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", - "requires": { - "hosted-git-info": "^2.1.4", - "meow": "^3.3.0", - "normalize-package-data": "^2.3.0", - "parse-github-repo-url": "^1.3.0", - "through2": "^2.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "requires": { - "repeating": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "requires": { - "get-stdin": "^4.0.1" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - } - } - }, - "get-port": { - "version": "4.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/get-port/-/get-port-4.2.0.tgz", - "integrity": "sha1-43Nosehjt2KcQ8WjI2Jflc8ksRk=" - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "http://bbnpm.azurewebsites.net/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "git-raw-commits": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/git-raw-commits/-/git-raw-commits-2.0.0.tgz", - "integrity": "sha1-2Srd90RAwUvMXIPszj+3+KeRGLU=", - "requires": { - "dargs": "^4.0.1", - "lodash.template": "^4.0.2", - "meow": "^4.0.0", - "split2": "^2.0.0", - "through2": "^2.0.0" - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "git-semver-tags": { - "version": "2.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/git-semver-tags/-/git-semver-tags-2.0.3.tgz", - "integrity": "sha1-SJiKcYrPWTgA+ZYiqVKnfEBb+jQ=", - "requires": { - "meow": "^4.0.0", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" - } - } - }, - "git-up": { - "version": "4.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/git-up/-/git-up-4.0.1.tgz", - "integrity": "sha1-yy7whmU2QOch0gQv4xBIV9iQB8A=", - "requires": { - "is-ssh": "^1.3.0", - "parse-url": "^5.0.0" - } - }, - "git-url-parse": { - "version": "11.1.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/git-url-parse/-/git-url-parse-11.1.2.tgz", - "integrity": "sha1-r/Gol8NsyTaZJwWHvqPby7uV3mc=", - "requires": { - "git-up": "^4.0.0" - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "requires": { - "ini": "^1.3.2" - } - }, - "glob": { - "version": "7.1.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/glob/-/glob-7.1.5.tgz", - "integrity": "sha1-ZxTGm+4g88PmTE3ZBVU+UytAzcA=", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI=", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" - }, - "globalize": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.4.2.tgz", - "integrity": "sha512-IfKeYI5mAITBmT5EnH8kSQB5uGson4Fkj2XtTpyEbIS7IHNfLHoeTyLJ6tfjiKC6cJXng3IhVurDk5C7ORqFhQ==", - "requires": { - "cldrjs": "^0.5.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/globals/-/globals-11.12.0.tgz", - "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=" - }, - "globby": { - "version": "9.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/globby/-/globby-9.2.0.tgz", - "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=", - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - } - }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM=" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - }, - "growl": { - "version": "1.10.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/growl/-/growl-1.10.5.tgz", - "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=" - }, - "handle-thing": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=" - }, - "handlebars": { - "version": "4.5.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/handlebars/-/handlebars-4.5.1.tgz", - "integrity": "sha1-igHDgsGAJyJg0H8tGqOudFcVx7o=", - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "http://bbnpm.azurewebsites.net/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/has/-/has-1.0.3.tgz", - "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "http://bbnpm.azurewebsites.net/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/he/-/he-1.2.0.tgz", - "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=" - }, - "highlight.js": { - "version": "9.16.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/highlight.js/-/highlight.js-9.16.2.tgz", - "integrity": "sha1-aDaNA5/+HGIRvMB+SD2vld4+QD4=" - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha1-dZz88sTRVq3lmwst+r3cQqa5xww=" - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha1-ObDhat2bYFvwqe89nar0hDtMrNI=" - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha1-5IIb7vWyFCogJr1zkm/lN2McVAU=", - "requires": { - "agent-base": "4", - "debug": "3.1.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "http://bbnpm.azurewebsites.net/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha1-TuenN6vZJniik9mzShr00NCMeHs=", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=" - }, - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha1-AX4kRxhL/q3nwjjkrv3R6PlbHjc=", - "requires": { - "minimatch": "^3.0.4" - } - }, - "import-fresh": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/import-fresh/-/import-fresh-3.1.0.tgz", - "integrity": "sha1-bTP6Hc7235MPrgA0RvM0Fa+QURg=", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "http://bbnpm.azurewebsites.net/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ini/-/ini-1.3.5.tgz", - "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=" - }, - "init-package-json": { - "version": "1.10.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/init-package-json/-/init-package-json-1.10.3.tgz", - "integrity": "sha1-Rf/i9hCoyhNPK9HbVjeyNQcPbL4=", - "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "1 || 2", - "semver": "2.x || 3.x || 4 || 5", - "validate-npm-package-license": "^3.0.1", - "validate-npm-package-name": "^3.0.0" - } - }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha1-rVCUI3XQNtMn/1KMCL1fqwiZKMo=", - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "int64-buffer": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/int64-buffer/-/int64-buffer-0.1.10.tgz", - "integrity": "sha1-J3siiofZWtd30HwTgyAiQGpHNCM=" - }, - "intercept-stdout": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/intercept-stdout/-/intercept-stdout-0.1.2.tgz", - "integrity": "sha1-Emq/H65sUJpCipjGGmMVWQQq6f0=", - "requires": { - "lodash.toarray": "^3.0.0" - } - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY=" - }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha1-PlcvI8hBGlz9lVfISeNmXgspBiM=" - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU=" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw=", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "http://bbnpm.azurewebsites.net/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" - }, - "is-ssh": { - "version": "1.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-ssh/-/is-ssh-1.3.1.tgz", - "integrity": "sha1-80moyt0k5lKYA3pSLPdSDy6BoPM=", - "requires": { - "protocols": "^1.1.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "http://bbnpm.azurewebsites.net/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg=", - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-text-path": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha1-skhOK3IKYz/rLoW2fcGT/3LHVjY=", - "requires": { - "text-extensions": "^2.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "http://bbnpm.azurewebsites.net/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "http://bbnpm.azurewebsites.net/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "http://bbnpm.azurewebsites.net/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "jquery": { - "version": "3.4.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha1-cU8fjZ3eS9+lV2S6N+8hRjDYDvI=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "http://bbnpm.azurewebsites.net/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jschardet": { - "version": "1.6.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/jschardet/-/jschardet-1.6.0.tgz", - "integrity": "sha1-x9GnHtz/KDnbL57DD8XV69PBpng=" - }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "json-edm-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/json-edm-parser/-/json-edm-parser-0.1.2.tgz", - "integrity": "sha1-HmCw/vG8CvZ7wNFG393lSGzWFbQ=", - "requires": { - "jsonparse": "~1.2.0" - }, - "dependencies": { - "jsonparse": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.2.0.tgz", - "integrity": "sha1-XAxWhRBxYOcv50ib3eoLRMK8Z70=" - } - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "http://bbnpm.azurewebsites.net/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "http://bbnpm.azurewebsites.net/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "http://bbnpm.azurewebsites.net/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" - }, - "jsonpath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.0.2.tgz", - "integrity": "sha512-rmzlgFZiQPc6q4HDyK8s9Qb4oxBnI5sF61y/Co5PV0lc3q2bIuRsNdueVbhoSHdKM4fxeimphOAtfz47yjCfeA==", - "requires": { - "esprima": "1.2.2", - "static-eval": "2.0.2", - "underscore": "1.7.0" - }, - "dependencies": { - "esprima": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", - "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=" - }, - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" - } - } - }, - "jsonwebtoken": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.0.1.tgz", - "integrity": "sha1-UNrvjQqMfeLNBrwQE7dbBMzz8M8=", - "requires": { - "jws": "^3.1.4", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.0.0", - "xtend": "^4.0.1" - } - }, - "jspath": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/jspath/-/jspath-0.4.0.tgz", - "integrity": "sha512-2/R8wkot8NCXrppBT/onp+4mcAUAZqtPxsW6aSJU3hrFAVqKqtFYcat2XJZ7inN4RtATUxfv0UQSYOmvJKiIGA==" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "http://bbnpm.azurewebsites.net/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "just-extend": { - "version": "4.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/just-extend/-/just-extend-4.0.2.tgz", - "integrity": "sha1-8/R/ffyg+YnFVBCn68iFSwcQivw=" - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/jws/-/jws-3.2.2.tgz", - "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" - }, - "latest-version": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-4.0.0.tgz", - "integrity": "sha512-b4Myk7aQiQJvgssw2O8yITjELdqKRX4JQJUF1IUplgLaA8unv7s+UsAOwH6Q0/a09czSvlxEm306it2LBXrCzg==", - "requires": { - "package-json": "^5.0.0" - } - }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "http://bbnpm.azurewebsites.net/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=" - }, - "lerna": { - "version": "3.18.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/lerna/-/lerna-3.18.3.tgz", - "integrity": "sha1-yUVW52+Y35x65O07wBZhF8xCzRM=", - "requires": { - "@lerna/add": "3.18.0", - "@lerna/bootstrap": "3.18.0", - "@lerna/changed": "3.18.3", - "@lerna/clean": "3.18.0", - "@lerna/cli": "3.18.0", - "@lerna/create": "3.18.0", - "@lerna/diff": "3.18.0", - "@lerna/exec": "3.18.0", - "@lerna/import": "3.18.0", - "@lerna/init": "3.18.0", - "@lerna/link": "3.18.0", - "@lerna/list": "3.18.0", - "@lerna/publish": "3.18.3", - "@lerna/run": "3.18.0", - "@lerna/version": "3.18.3", - "import-local": "^2.0.0", - "npmlog": "^4.1.2" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "http://bbnpm.azurewebsites.net/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "5.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/load-json-file/-/load-json-file-5.3.0.tgz", - "integrity": "sha1-TTweAfocA+p4pgrHr5MsnOU0A/M=", - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^4.0.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0", - "type-fest": "^0.3.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=" - }, - "lodash-compat": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/lodash-compat/-/lodash-compat-3.10.2.tgz", - "integrity": "sha1-xpQBKKnTD46QLNLPmf0Muk7PwYM=" - }, - "lodash._arraycopy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=" - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=" - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "http://bbnpm.azurewebsites.net/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.last": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash.last/-/lodash.last-3.0.0.tgz", - "integrity": "sha1-JC9mMRLdTG5jcoxgo8kJ0b2tvUw=" - }, - "lodash.max": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.max/-/lodash.max-4.0.1.tgz", - "integrity": "sha1-hzVWbGGLNan3YFILSHrnllivE2o=" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-tools-daily/npm/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha1-+XYZXPPzR9DV9SSDVp/oAxzM6Ks=", - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha1-5IExDwSdPPbUfpEq0JMTsVTw+zM=", - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.toarray": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-3.0.2.tgz", - "integrity": "sha1-KyBPD6T1HChcbwDIHRzqWiMEEXk=", - "requires": { - "lodash._arraycopy": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash.tonumber": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz", - "integrity": "sha1-C5azGzVnJ5Prf1pj7nkfG56QJdk=" - }, - "lodash.trimend": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.trimend/-/lodash.trimend-4.5.1.tgz", - "integrity": "sha1-EoBENyhrmMrYmWt5QU4RMAEUCC8=" - }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha1-Y7lQIfBwL+36LJuwok53l9cYcdg=" - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=", - "requires": { - "chalk": "^2.0.1" - } - }, - "lolex": { - "version": "4.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/lolex/-/lolex-4.2.0.tgz", - "integrity": "sha1-3b1/YhPKHqWCaQGrEiK2XXFLPNc=" - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", - "requires": { - "yallist": "^3.0.2" - } - }, - "lunr": { - "version": "2.3.8", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/lunr/-/lunr-2.3.8.tgz", - "integrity": "sha1-qLicMfMLWgRLl9LSji2hkba6IHI=" - }, - "macos-release": { - "version": "2.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/macos-release/-/macos-release-2.3.0.tgz", - "integrity": "sha1-6xkwsDbAgArevM1fF7xMEt6Ltx8=" - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==" - }, - "make-fetch-happen": { - "version": "5.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/make-fetch-happen/-/make-fetch-happen-5.0.1.tgz", - "integrity": "sha1-+sZUAKtfepwAGGKj6bD0F/CEAXU=", - "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^12.0.0", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "marked": { - "version": "0.7.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/marked/-/marked-0.7.0.tgz", - "integrity": "sha1-tkIB8FHScbHtwQoE0a6bdLuOXA4=" - }, - "match-stream": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/match-stream/-/match-stream-0.0.2.tgz", - "integrity": "sha1-mesFAJOzTf+t5CG5rAtBCpz6F88=", - "requires": { - "buffers": "~0.1.1", - "readable-stream": "~1.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "meow": { - "version": "4.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/meow/-/meow-4.0.1.tgz", - "integrity": "sha1-1IWY9vSxRy81v2MXqVlFrONH+XU=", - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - } - }, - "merge2": { - "version": "1.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha1-WzZu6DsvFYLEj4fkfPGpNSEDyoE=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=", - "requires": { - "mime-db": "1.40.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "minimist-options": { - "version": "3.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha1-+6TIGRM54T7PTWG+sD8HAQPz2VQ=", - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - } - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY=", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha1-IpDeloGKNMKVUcio0wEha9Zahh0=", - "requires": { - "minipass": "^2.9.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://bbnpm.azurewebsites.net/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "requires": { - "mkdirp": "*" - } - }, - "mocha": { - "version": "6.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/mocha/-/mocha-6.2.2.tgz", - "integrity": "sha1-XYmH4olAyviVen12ZLkQ3Fsv6iA=", - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.0", - "yargs-parser": "13.1.1", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=" - }, - "debug": { - "version": "3.2.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/debug/-/debug-3.2.6.tgz", - "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "requires": { - "locate-path": "^3.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/glob/-/glob-7.1.3.tgz", - "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ms/-/ms-2.1.1.tgz", - "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha1-qgeniMwxUck5tRMfY1cPDdIAlTc=", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha1-ds/nQs8fQbubHCmtAwaMBbTA5Ao=", - "requires": { - "has-flag": "^3.0.0" - } - }, - "yargs": { - "version": "13.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha1-TGV6VeB+Xyz5R/ijZlZ8BKDe3IM=", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha1-0mBYUyqgbTZf4JH2ofwGsvfl7KA=", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "mocha-logger": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/mocha-logger/-/mocha-logger-1.0.6.tgz", - "integrity": "sha512-D7Z3r1RkyaJOnlgokODdzt9p4ut0m3DVzEKp3r3tgeXIpdxp54z049Vc0EEh5hkhudfRN0dfUD10Fcj2WuOO3w==", - "requires": { - "mocha": "^5.1.1" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "mock-require": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/mock-require/-/mock-require-3.0.3.tgz", - "integrity": "sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg==", - "requires": { - "get-caller-file": "^1.0.2", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - } - } - }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha1-s5OfpgVUZHTj4+PGPWS9Q7TuYCI=" - }, - "moment": { - "version": "2.24.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/moment/-/moment-2.24.0.tgz", - "integrity": "sha1-DQVdU/UFKqZTyfbraLtdEr9cK1s=" - }, - "moment-timezone": { - "version": "0.5.27", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.27.tgz", - "integrity": "sha512-EIKQs7h5sAsjhPCqN6ggx6cEbs94GK050254TIJySD1bzoM5JTYDwAU1IoVOeTOL6Gm27kYJ51/uuvq1kIlrbw==", - "requires": { - "moment": ">= 2.9.0" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "ms-rest": { - "version": "2.5.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ms-rest/-/ms-rest-2.5.3.tgz", - "integrity": "sha1-rjb8RsHGCpBRHS8pJG/g9bVSl7M=", - "requires": { - "duplexer": "^0.1.1", - "is-buffer": "^1.1.6", - "is-stream": "^1.1.0", - "moment": "^2.21.0", - "request": "^2.88.0", - "through": "^2.3.8", - "tunnel": "0.0.5", - "uuid": "^3.2.1" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "tunnel": { - "version": "0.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/tunnel/-/tunnel-0.0.5.tgz", - "integrity": "sha1-0VMiVHSe02Yg/NEBCGVJWh+p0K4=" - } - } - }, - "ms-rest-azure": { - "version": "2.6.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ms-rest-azure/-/ms-rest-azure-2.6.0.tgz", - "integrity": "sha1-IJjv7FKe7PoMbiFbaRQ6vKuhIUA=", - "requires": { - "adal-node": "^0.1.28", - "async": "2.6.0", - "moment": "^2.22.2", - "ms-rest": "^2.3.2", - "request": "^2.88.0", - "uuid": "^3.2.1" - } - }, - "multimatch": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/multimatch/-/multimatch-3.0.0.tgz", - "integrity": "sha1-DiU0zGvCONmrZ+G5zV/Nhabb9ws=", - "requires": { - "array-differ": "^2.0.3", - "array-union": "^1.0.2", - "arrify": "^1.0.1", - "minimatch": "^3.0.4" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "optional": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", - "optional": true, - "requires": { - "glob": "^6.0.1" - } - } - } - }, - "mz": { - "version": "2.7.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/mz/-/mz-2.7.0.tgz", - "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=", - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natives": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", - "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "optional": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha1-rCetpmFn+ohJpq3dg39rGJrSCBw=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=" - }, - "nise": { - "version": "1.5.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/nise/-/nise-1.5.2.tgz", - "integrity": "sha1-ttKa8Q5IsyGzB+EOBlGZM47rJlI=", - "requires": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^4.1.0", - "path-to-regexp": "^1.7.0" - } - }, - "nock": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/nock/-/nock-10.0.6.tgz", - "integrity": "sha512-b47OWj1qf/LqSQYnmokNWM8D88KvUl2y7jT0567NB3ZBAZFz2bWp2PC81Xn7u8F2/vJxzkzNZybnemeFa7AZ2w==", - "requires": { - "chai": "^4.1.2", - "debug": "^4.1.0", - "deep-equal": "^1.0.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.5", - "mkdirp": "^0.5.0", - "propagate": "^1.0.0", - "qs": "^6.5.1", - "semver": "^5.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "node-abort-controller": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-1.0.4.tgz", - "integrity": "sha512-7cNtLKTAg0LrW3ViS2C7UfIzbL3rZd8L0++5MidbKqQVJ8yrH6+1VRSHl33P0ZjBTbOJd37d9EYekvHyKkB0QQ==" - }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha1-+pMCdfW/Xa4YjWGSsktMi7rD12o=", - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" - } - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha1-5jNFY4bUqlWGP2dqerDaqP3ssP0=" - }, - "node-fetch-npm": { - "version": "2.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", - "integrity": "sha1-cljJBGGC3KNFtCCO2pGNrzNpf/c=", - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node-gyp": { - "version": "5.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/node-gyp/-/node-gyp-5.0.5.tgz", - "integrity": "sha1-9s8dokbrjEKwl9fNTWw84jpBY68=", - "requires": { - "env-paths": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^4.4.12", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=" - }, - "npm-bundled": { - "version": "1.0.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/npm-bundled/-/npm-bundled-1.0.6.tgz", - "integrity": "sha1-57qarc75YrthJI+RchzZMrP+a90=" - }, - "npm-lifecycle": { - "version": "3.1.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz", - "integrity": "sha1-3ml1x9jfZfUVDbEQtXzOSYsLYEw=", - "requires": { - "byline": "^5.0.0", - "graceful-fs": "^4.1.15", - "node-gyp": "^5.0.2", - "resolve-from": "^4.0.0", - "slide": "^1.1.6", - "uid-number": "0.0.6", - "umask": "^1.1.0", - "which": "^1.3.1" - } - }, - "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha1-AhaMsKSaK3W/mIooaY3ntSnfXLc=", - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" - } - } - }, - "npm-packlist": { - "version": "1.4.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/npm-packlist/-/npm-packlist-1.4.6.tgz", - "integrity": "sha1-U7o+0R+FIwefFFc3bdN57k6kL/Q=", - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "3.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", - "integrity": "sha1-9Nnl/UviFT5fTl+be+jcQZqZq7c=", - "requires": { - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "http://bbnpm.azurewebsites.net/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "http://bbnpm.azurewebsites.net/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "nyc": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.9.0.tgz", - "integrity": "sha512-w8OdJAhXL5izerzZMdqzYKMj/pgHJyY3qEPYBjLLxrhcVoHEY9pU5ENIiZyCgG9OR7x3VcUMoD40o6PtVpfR4g==", - "requires": { - "archy": "^1.0.0", - "arrify": "^1.0.1", - "caching-transform": "^1.0.0", - "convert-source-map": "^1.5.1", - "debug-log": "^1.0.1", - "default-require-extensions": "^1.0.0", - "find-cache-dir": "^0.1.1", - "find-up": "^2.1.0", - "foreground-child": "^1.5.3", - "glob": "^7.0.6", - "istanbul-lib-coverage": "^1.1.2", - "istanbul-lib-hook": "^1.1.0", - "istanbul-lib-instrument": "^1.10.0", - "istanbul-lib-report": "^1.1.3", - "istanbul-lib-source-maps": "^1.2.3", - "istanbul-reports": "^1.4.0", - "md5-hex": "^1.2.0", - "merge-source-map": "^1.1.0", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.0", - "resolve-from": "^2.0.0", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.1", - "spawn-wrap": "^1.4.2", - "test-exclude": "^4.2.0", - "yargs": "11.1.0", - "yargs-parser": "^8.0.0" - }, - "dependencies": { - "align-text": { - "version": "0.1.4", - "bundled": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "bundled": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "ansi-styles": { - "version": "2.2.1", - "bundled": true - }, - "append-transform": { - "version": "0.4.0", - "bundled": true, - "requires": { - "default-require-extensions": "^1.0.0" - } - }, - "archy": { - "version": "1.0.0", - "bundled": true - }, - "arr-diff": { - "version": "4.0.0", - "bundled": true - }, - "arr-flatten": { - "version": "1.1.0", - "bundled": true - }, - "arr-union": { - "version": "3.1.0", - "bundled": true - }, - "array-unique": { - "version": "0.3.2", - "bundled": true - }, - "arrify": { - "version": "1.0.1", - "bundled": true - }, - "assign-symbols": { - "version": "1.0.0", - "bundled": true - }, - "async": { - "version": "1.5.2", - "bundled": true - }, - "atob": { - "version": "2.1.1", - "bundled": true - }, - "babel-code-frame": { - "version": "6.26.0", - "bundled": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-generator": { - "version": "6.26.1", - "bundled": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "bundled": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "bundled": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "bundled": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "bundled": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "bundled": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "base": { - "version": "0.11.2", - "bundled": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "bundled": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "builtin-modules": { - "version": "1.1.1", - "bundled": true - }, - "cache-base": { - "version": "1.0.1", - "bundled": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true - } - } - }, - "caching-transform": { - "version": "1.0.1", - "bundled": true, - "requires": { - "md5-hex": "^1.2.0", - "mkdirp": "^0.5.1", - "write-file-atomic": "^1.1.4" - } - }, - "camelcase": { - "version": "1.2.1", - "bundled": true, - "optional": true - }, - "center-align": { - "version": "0.1.3", - "bundled": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "chalk": { - "version": "1.1.3", - "bundled": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "class-utils": { - "version": "0.3.6", - "bundled": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true - } - } - }, - "cliui": { - "version": "2.1.0", - "bundled": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "bundled": true, - "optional": true - } - } - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "collection-visit": { - "version": "1.0.0", - "bundled": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "commondir": { - "version": "1.0.1", - "bundled": true - }, - "component-emitter": { - "version": "1.2.1", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "convert-source-map": { - "version": "1.5.1", - "bundled": true - }, - "copy-descriptor": { - "version": "0.1.1", - "bundled": true - }, - "core-js": { - "version": "2.5.6", - "bundled": true - }, - "cross-spawn": { - "version": "4.0.2", - "bundled": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "requires": { - "ms": "2.0.0" - } - }, - "debug-log": { - "version": "1.0.1", - "bundled": true - }, - "decamelize": { - "version": "1.2.0", - "bundled": true - }, - "decode-uri-component": { - "version": "0.2.0", - "bundled": true - }, - "default-require-extensions": { - "version": "1.0.0", - "bundled": true, - "requires": { - "strip-bom": "^2.0.0" - } - }, - "define-property": { - "version": "2.0.2", - "bundled": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true - } - } - }, - "detect-indent": { - "version": "4.0.0", - "bundled": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "error-ex": { - "version": "1.3.1", - "bundled": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true - }, - "esutils": { - "version": "2.0.2", - "bundled": true - }, - "execa": { - "version": "0.7.0", - "bundled": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "bundled": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "bundled": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "bundled": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "bundled": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "bundled": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "bundled": true - } - } - }, - "fill-range": { - "version": "4.0.0", - "bundled": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "0.1.1", - "bundled": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "bundled": true - }, - "foreground-child": { - "version": "1.5.6", - "bundled": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "fragment-cache": { - "version": "0.2.1", - "bundled": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "get-caller-file": { - "version": "1.0.2", - "bundled": true - }, - "get-stream": { - "version": "3.0.0", - "bundled": true - }, - "get-value": { - "version": "2.0.6", - "bundled": true - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "9.18.0", - "bundled": true - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "handlebars": { - "version": "4.0.11", - "bundled": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "bundled": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "has-ansi": { - "version": "2.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "1.0.0", - "bundled": true - }, - "has-value": { - "version": "1.0.0", - "bundled": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true - } - } - }, - "has-values": { - "version": "1.0.0", - "bundled": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "bundled": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.6.0", - "bundled": true - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "invariant": { - "version": "2.2.4", - "bundled": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "bundled": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "bundled": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "bundled": true - }, - "is-buffer": { - "version": "1.1.6", - "bundled": true - }, - "is-builtin-module": { - "version": "1.0.0", - "bundled": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "bundled": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "bundled": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "bundled": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "bundled": true - }, - "is-finite": { - "version": "1.0.2", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true - }, - "is-number": { - "version": "3.0.0", - "bundled": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-odd": { - "version": "2.0.0", - "bundled": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "bundled": true - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "bundled": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true - } - } - }, - "is-stream": { - "version": "1.1.0", - "bundled": true - }, - "is-utf8": { - "version": "0.2.1", - "bundled": true - }, - "is-windows": { - "version": "1.0.2", - "bundled": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true - }, - "isobject": { - "version": "3.0.1", - "bundled": true - }, - "istanbul-lib-coverage": { - "version": "1.2.0", - "bundled": true - }, - "istanbul-lib-hook": { - "version": "1.1.0", - "bundled": true, - "requires": { - "append-transform": "^0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.10.1", - "bundled": true, - "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.0", - "semver": "^5.3.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.3", - "bundled": true, - "requires": { - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "bundled": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.3", - "bundled": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "bundled": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "istanbul-reports": { - "version": "1.4.0", - "bundled": true, - "requires": { - "handlebars": "^4.0.3" - } - }, - "js-tokens": { - "version": "3.0.2", - "bundled": true - }, - "jsesc": { - "version": "1.3.0", - "bundled": true - }, - "kind-of": { - "version": "3.2.2", - "bundled": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "bundled": true, - "optional": true - }, - "lcid": { - "version": "1.0.0", - "bundled": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "bundled": true - } - } - }, - "lodash": { - "version": "4.17.10", - "bundled": true - }, - "longest": { - "version": "1.0.1", - "bundled": true - }, - "loose-envify": { - "version": "1.3.1", - "bundled": true, - "requires": { - "js-tokens": "^3.0.0" - } - }, - "lru-cache": { - "version": "4.1.3", - "bundled": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "map-cache": { - "version": "0.2.2", - "bundled": true - }, - "map-visit": { - "version": "1.0.0", - "bundled": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5-hex": { - "version": "1.3.0", - "bundled": true, - "requires": { - "md5-o-matic": "^0.1.1" - } - }, - "md5-o-matic": { - "version": "0.1.1", - "bundled": true - }, - "mem": { - "version": "1.1.0", - "bundled": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "merge-source-map": { - "version": "1.1.0", - "bundled": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true - } - } - }, - "micromatch": { - "version": "3.1.10", - "bundled": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "bundled": true - } - } - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "mixin-deep": { - "version": "1.3.1", - "bundled": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "bundled": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true - }, - "nanomatch": { - "version": "1.2.9", - "bundled": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "bundled": true - }, - "array-unique": { - "version": "0.3.2", - "bundled": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true - } - } - }, - "normalize-package-data": { - "version": "2.4.0", - "bundled": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "object-copy": { - "version": "0.1.0", - "bundled": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "bundled": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true - } - } - }, - "object.pick": { - "version": "1.3.0", - "bundled": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true - } - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "bundled": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true - }, - "os-locale": { - "version": "2.1.0", - "bundled": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "bundled": true - }, - "p-limit": { - "version": "1.2.0", - "bundled": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "bundled": true - }, - "parse-json": { - "version": "2.2.0", - "bundled": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "bundled": true - }, - "path-exists": { - "version": "2.1.0", - "bundled": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true - }, - "path-parse": { - "version": "1.0.5", - "bundled": true - }, - "path-type": { - "version": "1.1.0", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "bundled": true - }, - "pinkie": { - "version": "2.0.4", - "bundled": true - }, - "pinkie-promise": { - "version": "2.0.1", - "bundled": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "bundled": true, - "requires": { - "find-up": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "bundled": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "bundled": true - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true - }, - "read-pkg": { - "version": "1.1.0", - "bundled": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "bundled": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "bundled": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "bundled": true - }, - "regex-not": { - "version": "1.0.2", - "bundled": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "repeat-element": { - "version": "1.1.2", - "bundled": true - }, - "repeat-string": { - "version": "1.6.1", - "bundled": true - }, - "repeating": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true - }, - "resolve-from": { - "version": "2.0.0", - "bundled": true - }, - "resolve-url": { - "version": "0.2.1", - "bundled": true - }, - "ret": { - "version": "0.1.15", - "bundled": true - }, - "right-align": { - "version": "0.1.3", - "bundled": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-regex": { - "version": "1.1.0", - "bundled": true, - "requires": { - "ret": "~0.1.10" - } - }, - "semver": { - "version": "5.5.0", - "bundled": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "set-value": { - "version": "2.0.0", - "bundled": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true - }, - "slide": { - "version": "1.1.6", - "bundled": true - }, - "snapdragon": { - "version": "0.8.2", - "bundled": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "bundled": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "bundled": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-map": { - "version": "0.5.7", - "bundled": true - }, - "source-map-resolve": { - "version": "0.5.1", - "bundled": true, - "requires": { - "atob": "^2.0.0", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "bundled": true - }, - "spawn-wrap": { - "version": "1.4.2", - "bundled": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.0.0", - "bundled": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "bundled": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "bundled": true - }, - "split-string": { - "version": "3.1.0", - "bundled": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "static-extend": { - "version": "0.1.2", - "bundled": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "bundled": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true - }, - "supports-color": { - "version": "2.0.0", - "bundled": true - }, - "test-exclude": { - "version": "4.2.1", - "bundled": true, - "requires": { - "arrify": "^1.0.1", - "micromatch": "^3.1.8", - "object-assign": "^4.1.0", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "bundled": true - }, - "array-unique": { - "version": "0.3.2", - "bundled": true - }, - "braces": { - "version": "2.3.2", - "bundled": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "bundled": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "bundled": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "bundled": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "bundled": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "bundled": true - } - } - }, - "extglob": { - "version": "2.0.4", - "bundled": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "bundled": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "bundled": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true - }, - "micromatch": { - "version": "3.1.10", - "bundled": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "to-fast-properties": { - "version": "1.0.3", - "bundled": true - }, - "to-object-path": { - "version": "0.3.0", - "bundled": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "bundled": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "bundled": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "trim-right": { - "version": "1.0.1", - "bundled": true - }, - "uglify-js": { - "version": "2.8.29", - "bundled": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "bundled": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "union-value": { - "version": "1.0.0", - "bundled": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "bundled": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unset-value": { - "version": "1.0.0", - "bundled": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "bundled": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "bundled": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "bundled": true - }, - "isobject": { - "version": "3.0.1", - "bundled": true - } - } - }, - "urix": { - "version": "0.1.0", - "bundled": true - }, - "use": { - "version": "3.1.0", - "bundled": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "bundled": true - } - } - }, - "validate-npm-package-license": { - "version": "3.0.3", - "bundled": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.0", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true - }, - "window-size": { - "version": "0.1.0", - "bundled": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.3", - "bundled": true - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "write-file-atomic": { - "version": "1.3.4", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, - "y18n": { - "version": "3.2.1", - "bundled": true - }, - "yallist": { - "version": "2.1.2", - "bundled": true - }, - "yargs": { - "version": "11.1.0", - "bundled": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true - }, - "camelcase": { - "version": "4.1.0", - "bundled": true - }, - "cliui": { - "version": "4.1.0", - "bundled": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "yargs-parser": { - "version": "9.0.2", - "bundled": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "8.1.0", - "bundled": true, - "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "bundled": true - } - } - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.6.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha1-xwtsv3LydKq0w0wMgvUWe/gs8Vs=" - }, - "object-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "octokit-pagination-methods": { - "version": "1.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", - "integrity": "sha1-z0cu3J1VEFX573P25CtNu0yAvqQ=" - }, - "once": { - "version": "1.4.0", - "resolved": "http://bbnpm.azurewebsites.net/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "http://bbnpm.azurewebsites.net/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "http://bbnpm.azurewebsites.net/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-name": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/os-name/-/os-name-3.1.0.tgz", - "integrity": "sha1-3sGdlmKW4c1i1wGlpm7h3ernCAE=", - "requires": { - "macos-release": "^2.2.0", - "windows-release": "^3.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "over": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/over/-/over-0.0.5.tgz", - "integrity": "sha1-8phS5w/X4l82DgE6jsRMgq7bVwg=" - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "http://bbnpm.azurewebsites.net/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=" - }, - "p-map-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", - "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-pipe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", - "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=" - }, - "p-queue": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-queue/-/p-queue-4.0.0.tgz", - "integrity": "sha1-7Q7uh5iSftbywvX1t3/bIGGl00Y=", - "requires": { - "eventemitter3": "^3.1.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "p-waterfall": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-1.0.0.tgz", - "integrity": "sha1-ftlLPOszMngjU69qrhGqn8I1uwA=", - "requires": { - "p-reduce": "^1.0.0" - } - }, - "package-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-5.0.0.tgz", - "integrity": "sha512-EeHQFFTlEmLrkIQoxbE9w0FuAWHoc1XpthDqnZ/i9keOt701cteyXwAxQFLpVqVjj3feh2TodkihjLaRUtIgLg==", - "requires": { - "got": "^8.3.1", - "registry-auth-token": "^3.3.2", - "registry-url": "^3.1.0", - "semver": "^5.5.0" - } - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=", - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-github-repo-url": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", - "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=" - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - }, - "parse-path": { - "version": "4.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/parse-path/-/parse-path-4.0.1.tgz", - "integrity": "sha1-DsdpcElJd4yzuO2l6ZTDIHOhrf8=", - "requires": { - "is-ssh": "^1.3.0", - "protocols": "^1.4.0" - } - }, - "parse-url": { - "version": "5.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/parse-url/-/parse-url-5.0.1.tgz", - "integrity": "sha1-mcQIT8Eb4UFB76QbPRF6lvy5Un8=", - "requires": { - "is-ssh": "^1.3.0", - "normalize-url": "^3.3.0", - "parse-path": "^4.0.0", - "protocols": "^1.4.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "http://bbnpm.azurewebsites.net/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://bbnpm.azurewebsites.net/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "http://bbnpm.azurewebsites.net/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=" - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "http://bbnpm.azurewebsites.net/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "http://bbnpm.azurewebsites.net/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pidusage": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-1.2.0.tgz", - "integrity": "sha512-OGo+iSOk44HRJ8q15AyG570UYxcm5u+R99DI8Khu8P3tKGkVu5EZX4ywHglWSTMNNXQ274oeGpYrvFEhDIFGPg==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/pify/-/pify-4.0.1.tgz", - "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha1-qgeniMwxUck5tRMfY1cPDdIAlTc=", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=" - } - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "requires": { - "semver-compare": "^1.0.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "http://bbnpm.azurewebsites.net/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "priorityqueuejs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/priorityqueuejs/-/priorityqueuejs-1.0.0.tgz", - "integrity": "sha1-LuTyPCVgkT4IwHzlzN1t498sWvg=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/progress/-/progress-2.0.3.tgz", - "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, - "promise-retry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", - "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", - "requires": { - "err-code": "^1.0.0", - "retry": "^0.10.0" - } - }, - "promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", - "requires": { - "read": "1" - } - }, - "propagate": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-1.0.0.tgz", - "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=" - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - }, - "protocols": { - "version": "1.4.7", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/protocols/-/protocols-1.4.7.tgz", - "integrity": "sha1-lfeIpPDpebKR/+/PVjatET0DfTI=" - }, - "protoduck": { - "version": "5.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/protoduck/-/protoduck-5.0.1.tgz", - "integrity": "sha1-A8NlnKGAB7aaUP2Cp+vMUWJhFR8=", - "requires": { - "genfun": "^5.0.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.4.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/psl/-/psl-1.4.0.tgz", - "integrity": "sha1-XdJhVs22n6H9uKsZkWZ9P4DO18I=" - }, - "pullstream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pullstream/-/pullstream-0.4.1.tgz", - "integrity": "sha1-1vs79a7Wl+gxFQ6xACwlo/iuExQ=", - "requires": { - "over": ">= 0.0.5 < 1", - "readable-stream": "~1.0.31", - "setimmediate": ">= 1.0.2 < 2", - "slice-stream": ">= 1.0.0 < 2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/pump/-/pump-3.0.0.tgz", - "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/pump/-/pump-2.0.1.tgz", - "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/qs/-/qs-6.5.2.tgz", - "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=" - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" - }, - "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=" - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "1.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz", - "integrity": "sha1-h+Q+ulAJi6WjLQzrWDq45DuWHBY=", - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "read-package-json": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/read-package-json/-/read-package-json-2.1.0.tgz", - "integrity": "sha1-49QubDXqWugg2aA6sMcpEhf8UdU=", - "requires": { - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "json-parse-better-errors": "^1.0.1", - "normalize-package-data": "^2.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "slash": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - } - } - }, - "read-package-tree": { - "version": "5.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/read-package-tree/-/read-package-tree-5.3.1.tgz", - "integrity": "sha1-oyy2TH8x64pvMe8G+c7fdAaP5jY=", - "requires": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "read-text-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-text-file/-/read-text-file-1.1.0.tgz", - "integrity": "sha1-0MPxh2iCj5EH1huws2jue5D3GJM=", - "requires": { - "iconv-lite": "^0.4.17", - "jschardet": "^1.4.2" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" - } - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha1-jUVAe0+HCg3K68DihnDRjnRRQwk=", - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", - "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", - "requires": { - "define-properties": "^1.1.2" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=" - }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "requires": { - "jsesc": "~0.5.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "^1.0.0" - } - }, - "replace-in-file": { - "version": "4.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/replace-in-file/-/replace-in-file-4.2.0.tgz", - "integrity": "sha1-vnefT2Go7hq5+ReZi9NkQWc2gP4=", - "requires": { - "chalk": "^2.4.2", - "glob": "^7.1.4", - "yargs": "^13.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=" - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha1-qgeniMwxUck5tRMfY1cPDdIAlTc=", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "yargs": { - "version": "13.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha1-TGV6VeB+Xyz5R/ijZlZ8BKDe3IM=", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha1-0mBYUyqgbTZf4JH2ofwGsvfl7KA=", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/request/-/request-2.88.0.tgz", - "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "request-progress": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", - "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", - "requires": { - "throttleit": "~0.0.2" - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "http://bbnpm.azurewebsites.net/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.12.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha1-P8ZEo1yEpIVUYJ/ybsUrZvpXffY=", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restify": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/restify/-/restify-7.7.0.tgz", - "integrity": "sha512-BGirRv70pIy5W7tqX7s7+NNjBcjzU2YYgV4KABVbR5g8JjMeucgUzaf2VvTUSmz83qMZAuQ/gXEmPFyPHIcfJQ==", - "requires": { - "assert-plus": "^1.0.0", - "bunyan": "^1.8.12", - "csv": "^1.1.1", - "dtrace-provider": "^0.8.1", - "escape-regexp-component": "^1.0.2", - "ewma": "^2.0.1", - "find-my-way": "^1.13.0", - "formidable": "^1.2.1", - "http-signature": "^1.2.0", - "lodash": "^4.17.10", - "lru-cache": "^4.1.3", - "mime": "^1.5.0", - "negotiator": "^0.6.1", - "once": "^1.4.0", - "pidusage": "^1.2.0", - "qs": "^6.5.2", - "restify-errors": "^5.0.0", - "semver": "^5.4.1", - "spdy": "^3.4.7", - "uuid": "^3.1.0", - "vasync": "^1.6.4", - "verror": "^1.10.0" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - } - }, - "restify-errors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/restify-errors/-/restify-errors-5.0.0.tgz", - "integrity": "sha512-+vby9Kxf7qlzvbZSTIEGkIixkeHG+pVCl34dk6eKnL+ua4pCezpdLT/1/eabzPZb65ADrgoc04jeWrrF1E1pvQ==", - "requires": { - "assert-plus": "^1.0.0", - "lodash": "^4.2.1", - "safe-json-stringify": "^1.0.3", - "verror": "^1.8.1" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ret/-/ret-0.1.15.tgz", - "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=" - }, - "retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", - "requires": { - "glob": "^7.1.3" - } - }, - "rsa-pem-from-mod-exp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/rsa-pem-from-mod-exp/-/rsa-pem-from-mod-exp-0.8.4.tgz", - "integrity": "sha1-NipCxtMEBW1JOz8SvOq7LGV2ptQ=" - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "requires": { - "is-promise": "^2.1.0" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.5.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha1-UQ4mMX9NuRp+sd532d2boKSJmjo=", - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk=" - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/sax/-/sax-1.2.4.tgz", - "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=" - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" - }, - "semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" - }, - "semver": { - "version": "5.5.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-5.5.0.tgz", - "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=" - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" - }, - "semver-dsl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", - "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", - "requires": { - "semver": "^5.3.0" - } - }, - "semver-store": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz", - "integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "http://bbnpm.azurewebsites.net/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "http://bbnpm.azurewebsites.net/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "http://bbnpm.azurewebsites.net/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shelljs": { - "version": "0.8.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha1-p/MxlSDr8J7oEnWyNorbKGZZsJc=", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, - "should": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", - "requires": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" - } - }, - "should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "requires": { - "should-type": "^1.4.0" - } - }, - "should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", - "requires": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" - } - }, - "should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=" - }, - "should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", - "requires": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" - } - }, - "should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "http://bbnpm.azurewebsites.net/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "sinon": { - "version": "7.5.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/sinon/-/sinon-7.5.0.tgz", - "integrity": "sha1-6UiOpGYHDqkI/USj1keP1JI8Z+w=", - "requires": { - "@sinonjs/commons": "^1.4.0", - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/samsam": "^3.3.3", - "diff": "^3.5.0", - "lolex": "^4.2.0", - "nise": "^1.5.2", - "supports-color": "^5.5.0" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/slash/-/slash-2.0.0.tgz", - "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=" - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=", - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "slice-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-stream/-/slice-stream-1.0.0.tgz", - "integrity": "sha1-WzO9ZvATsaf4ZGCwPUY97DmtPqA=", - "requires": { - "readable-stream": "~1.0.31" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, - "smart-buffer": { - "version": "4.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/smart-buffer/-/smart-buffer-4.0.2.tgz", - "integrity": "sha1-UgeFjDgVzGkRBwPGuU5GwVY0OV0=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/debug/-/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "socks": { - "version": "2.3.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/socks/-/socks-2.3.2.tgz", - "integrity": "sha1-reOI6ebYf9sRZJwVdGxXiSKliD4=", - "requires": { - "ip": "^1.1.5", - "smart-buffer": "4.0.2" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", - "integrity": "sha1-PImR8xRbJ5nnDhG9X7yLGWMRY4Y=", - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk=", - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha1-+4PlBERSaPFUsHTiGMh8ADzTHfQ=", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=" - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha1-NpS1gEVnpFjTyARYQqY1hjL2JlQ=" - }, - "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", - "requires": { - "debug": "^2.6.8", - "handle-thing": "^1.2.5", - "http-deceiver": "^1.2.7", - "safe-buffer": "^5.0.1", - "select-hose": "^2.0.0", - "spdy-transport": "^2.0.18" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "spdy-transport": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.1.tgz", - "integrity": "sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==", - "requires": { - "debug": "^2.6.8", - "detect-node": "^2.0.3", - "hpack.js": "^2.1.6", - "obuf": "^1.1.1", - "readable-stream": "^2.2.9", - "safe-buffer": "^5.0.1", - "wbuf": "^1.7.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "split": { - "version": "1.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/split/-/split-1.0.1.tgz", - "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=", - "requires": { - "through": "2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "split2": { - "version": "2.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/split2/-/split2-2.2.0.tgz", - "integrity": "sha1-GGsldbz4PoW30YRldWI47k7kJJM=", - "requires": { - "through2": "^2.0.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stack-chain": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", - "integrity": "sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU=" - }, - "static-eval": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", - "requires": { - "escodegen": "^1.8.1" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" - }, - "stream-transform": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-0.2.2.tgz", - "integrity": "sha1-dYZ0h/SVKPi/HYJJllh1PQLfeDg=" - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha1-bMR/DX641isPNwFhFxWjlUWR1jQ=", - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha1-Zp0WS+nfm291WfqOiZRbFopabFg=", - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" - } - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "http://bbnpm.azurewebsites.net/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha1-D17XjTJeBCGsb5D38Q5pHWrjrhA=", - "requires": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - } - }, - "superagent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-2.3.0.tgz", - "integrity": "sha1-cDUpoHFOV+EjlZ3e+84ZOy5Q0RU=", - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.0.6", - "debug": "^2.2.0", - "extend": "^3.0.0", - "form-data": "1.0.0-rc4", - "formidable": "^1.0.17", - "methods": "^1.1.1", - "mime": "^1.3.4", - "qs": "^6.1.0", - "readable-stream": "^2.0.5" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "form-data": { - "version": "1.0.0-rc4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz", - "integrity": "sha1-BaxrwiIntD5EYfSIFhVUaZ1Pi14=", - "requires": { - "async": "^1.5.2", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.10" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "requires": { - "has-flag": "^3.0.0" - } - }, - "swagger-client": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-2.2.21.tgz", - "integrity": "sha1-WWa+I0dyRm5EcW9l4yAIFm2u66Q=", - "requires": { - "btoa": "^1.1.2", - "cookiejar": "^2.0.1", - "js-yaml": "^3.3.0", - "lodash-compat": "^3.5.0", - "q": "^1.4.1", - "superagent": "^2.2" - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/table/-/table-5.4.6.tgz", - "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=", - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "tar": { - "version": "4.4.13", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/tar/-/tar-4.4.13.tgz", - "integrity": "sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU=", - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" - }, - "temp-write": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz", - "integrity": "sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=", - "requires": { - "graceful-fs": "^4.1.2", - "is-stream": "^1.1.0", - "make-dir": "^1.0.0", - "pify": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "text-extensions": { - "version": "2.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/text-extensions/-/text-extensions-2.0.0.tgz", - "integrity": "sha1-Q+q9G0lUgvrkor9l5fVsKfaSIPY=" - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "thenify": { - "version": "3.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=" - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/through2/-/through2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - } - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=" - }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=" - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "ts-node": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-4.1.0.tgz", - "integrity": "sha512-xcZH12oVg9PShKhy3UHyDmuDLV3y7iKwX25aMVPt1SIXSuAfWkFiGPEkg+th8R4YKW/QCxDoW7lJdb15lx6QWg==", - "requires": { - "arrify": "^1.0.0", - "chalk": "^2.3.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.0", - "tsconfig": "^7.0.0", - "v8flags": "^3.0.0", - "yn": "^2.0.0" - } - }, - "tsconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", - "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", - "requires": { - "@types/strip-bom": "^3.0.0", - "@types/strip-json-comments": "0.0.30", - "strip-bom": "^3.0.0", - "strip-json-comments": "^2.0.0" - } - }, - "tslib": { - "version": "1.10.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha1-w8GflZc/sKYpc/sJ2Q2WHuQ+XIo=" - }, - "tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==" - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "tslint-microsoft-contrib": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz", - "integrity": "sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA==", - "requires": { - "tsutils": "^2.27.2 <2.29.0" - }, - "dependencies": { - "tsutils": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", - "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha1-7XGZF/EcoN7lhicrKsSeAVot11k=", - "requires": { - "tslib": "^1.8.1" - } - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "http://bbnpm.azurewebsites.net/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "http://bbnpm.azurewebsites.net/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "http://bbnpm.azurewebsites.net/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=" - }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha1-Y9ANIE4FlHT+Xht8ARESu9HcKeE=" - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typedoc": { - "version": "0.15.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/typedoc/-/typedoc-0.15.0.tgz", - "integrity": "sha1-Ier020HPJ5e60CenTyp1zQiuDC0=", - "requires": { - "@types/minimatch": "3.0.3", - "fs-extra": "^8.1.0", - "handlebars": "^4.1.2", - "highlight.js": "^9.15.8", - "lodash": "^4.17.15", - "marked": "^0.7.0", - "minimatch": "^3.0.0", - "progress": "^2.0.3", - "shelljs": "^0.8.3", - "typedoc-default-themes": "^0.6.0", - "typescript": "3.5.x" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "typescript": { - "version": "3.5.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha1-yDD2V/k/HqhGgZ6SkJL1/lmD6Xc=" - } - } - }, - "typedoc-default-themes": { - "version": "0.6.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/typedoc-default-themes/-/typedoc-default-themes-0.6.0.tgz", - "integrity": "sha1-fnO/VN2eEVUN0PtXbVF2t1j4+LU=", - "requires": { - "backbone": "^1.4.0", - "jquery": "^3.4.1", - "lunr": "^2.3.6", - "underscore": "^1.9.1" - } - }, - "typedoc-plugin-external-module-name": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/typedoc-plugin-external-module-name/-/typedoc-plugin-external-module-name-2.1.0.tgz", - "integrity": "sha1-JfEI6ZZzrTTzQkcZwQwpnuUOkvA=" - }, - "typedoc-plugin-markdown": { - "version": "2.2.11", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.2.11.tgz", - "integrity": "sha1-gepgenvILPOuC8beS7t+jqa0N/I=", - "requires": { - "fs-extra": "^8.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "typescript": { - "version": "3.7.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/typescript/-/typescript-3.7.2.tgz", - "integrity": "sha1-J+SJuV+lkJRF6f717kjYFpetGPs=" - }, - "typescript-tslint-plugin": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/typescript-tslint-plugin/-/typescript-tslint-plugin-0.3.1.tgz", - "integrity": "sha512-h8HEPBm36UEs901ld1x6m5eY/UFb4mF+A0nvERr4BWMww5wnV5nfcm9ZFt18foYL0GQ5NVMt1Tb3466WUU8dRQ==", - "requires": { - "minimatch": "^3.0.4", - "mock-require": "^3.0.2", - "vscode-languageserver": "^5.1.0" - } - }, - "uglify-js": { - "version": "3.6.8", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/uglify-js/-/uglify-js-3.6.8.tgz", - "integrity": "sha1-Xty8+dScuwQD3En4Vv6BUw1lFF4=", - "optional": true, - "requires": { - "commander": "~2.20.3", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "optional": true - } - } - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" - }, - "umask": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", - "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=" - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha1-BtzjSg5op7q8KbNluOdLiSUgOWE=" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universal-user-agent": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/universal-user-agent/-/universal-user-agent-4.0.0.tgz", - "integrity": "sha1-J9ouyH4ydpYZ9ooUmWRl6hy53xY=", - "requires": { - "os-name": "^3.1.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, - "unzip": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/unzip/-/unzip-0.1.11.tgz", - "integrity": "sha1-iXScY7BY19kNYZ+GuYqhU107l/A=", - "requires": { - "binary": ">= 0.3.0 < 1", - "fstream": ">= 0.1.30 < 1", - "match-stream": ">= 0.0.2 < 1", - "pullstream": ">= 0.4.1 < 1", - "readable-stream": "~1.0.31", - "setimmediate": ">= 1.0.1 < 2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/use/-/use-3.1.1.tgz", - "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util-promisify": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/util-promisify/-/util-promisify-2.1.0.tgz", - "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", - "requires": { - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha1-RWjwIW54dg7h2/Ok0s9T4iQRKGY=" - }, - "v8flags": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", - "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "requires": { - "builtins": "^1.0.3" - } - }, - "validator": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz", - "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==" - }, - "vasync": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz", - "integrity": "sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8=", - "requires": { - "verror": "1.6.0" - }, - "dependencies": { - "extsprintf": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz", - "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk=" - }, - "verror": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz", - "integrity": "sha1-fROyex+swuLakEBetepuW90lLqU=", - "requires": { - "extsprintf": "1.2.0" - } - } - } - }, - "verror": { - "version": "1.10.0", - "resolved": "http://bbnpm.azurewebsites.net/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vscode-jsonrpc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz", - "integrity": "sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==" - }, - "vscode-languageserver": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-5.2.1.tgz", - "integrity": "sha512-GuayqdKZqAwwaCUjDvMTAVRPJOp/SLON3mJ07eGsx/Iq9HjRymhKWztX41rISqDKhHVVyFM+IywICyZDla6U3A==", - "requires": { - "vscode-languageserver-protocol": "3.14.1", - "vscode-uri": "^1.0.6" - } - }, - "vscode-languageserver-protocol": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz", - "integrity": "sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g==", - "requires": { - "vscode-jsonrpc": "^4.0.0", - "vscode-languageserver-types": "3.14.0" - } - }, - "vscode-languageserver-types": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz", - "integrity": "sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==" - }, - "vscode-uri": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.8.tgz", - "integrity": "sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ==" - }, - "watershed": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/watershed/-/watershed-0.4.0.tgz", - "integrity": "sha1-5BJLh3EptHZSJHdn63IgKfgJVTE=", - "requires": { - "dtrace-provider": "~0.8", - "readable-stream": "1.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.2.tgz", - "integrity": "sha1-ITzjaGT8Hw1OmOA7nrksZAQimdQ=" - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY=", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/which/-/which-1.3.1.tgz", - "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "http://bbnpm.azurewebsites.net/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "window-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-1.1.1.tgz", - "integrity": "sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==", - "requires": { - "define-property": "^1.0.0", - "is-number": "^3.0.0" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "windows-release": { - "version": "3.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/windows-release/-/windows-release-3.2.0.tgz", - "integrity": "sha1-gSLa1a/DA9gzQiOAaAp5zfqReF8=", - "requires": { - "execa": "^1.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "http://bbnpm.azurewebsites.net/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "1.0.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/write/-/write-1.0.3.tgz", - "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=", - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha1-H9Lprh3z51uNjDZ0Q8aS1MqB9IE=", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "write-json-file": { - "version": "3.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha1-Zbvcns2KFFjhWVJ3DMut/P9f5io=", - "requires": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" - } - } - }, - "write-pkg": { - "version": "3.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/write-pkg/-/write-pkg-3.2.0.tgz", - "integrity": "sha1-DheP6Xgg04mokovHlTXb5ows/yE=", - "requires": { - "sort-keys": "^2.0.0", - "write-json-file": "^2.2.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "write-json-file": { - "version": "2.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/write-json-file/-/write-json-file-2.3.0.tgz", - "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=", - "requires": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "pify": "^3.0.0", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.0.0" - } - } - } - }, - "ws": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.0.tgz", - "integrity": "sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg==", - "requires": { - "async-limiter": "^1.0.0" - } - }, - "xml2js": { - "version": "0.4.22", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/xml2js/-/xml2js-0.4.22.tgz", - "integrity": "sha1-T6LYRuyAMjfehvMKqbX3C2YA3gI=", - "requires": { - "sax": ">=0.6.0", - "util.promisify": "~1.0.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=" - }, - "xmldom": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" - }, - "xpath": { - "version": "0.0.27", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", - "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" - }, - "xpath.js": { - "version": "1.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/xpath.js/-/xpath.js-1.1.0.tgz", - "integrity": "sha1-OBakTtS7NSCRCD0AKjg91RBKX/E=" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=" - }, - "yargs": { - "version": "14.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/yargs/-/yargs-14.2.0.tgz", - "integrity": "sha1-8RapJCxO2GaHkLQHWbSQbCdudsM=", - "requires": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^15.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=" - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha1-qgeniMwxUck5tRMfY1cPDdIAlTc=", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "15.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha1-zdepdJDsg2GV9Z8/Tb5eqej3Xwg=", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=" - } - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha1-7yXCx2n/a9CeSw+dfGBfsnhG6p8=", - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=" - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha1-qgeniMwxUck5tRMfY1cPDdIAlTc=", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "yargs": { - "version": "13.3.0", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha1-TGV6VeB+Xyz5R/ijZlZ8BKDe3IM=", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha1-0mBYUyqgbTZf4JH2ofwGsvfl7KA=", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" - } - } -} diff --git a/package.json b/package.json index 8cc3c22ef2..c3c0bb2d43 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "build": "lerna run build", "clean": "lerna run clean", "functional-test": "lerna run build && nyc mocha \"libraries/functional-tests/tests/*.test.js\"", + "browser-functional-test": "cd libraries/browser-functional-tests && node nightwatch.js -e chrome", "test": "lerna run build && nyc mocha \"libraries/bot*/tests/*.test.js\"", "test:coveralls": "lerna run build && nyc mocha \"libraries/bot*/tests/*.test.js\" && nyc report --reporter=text-lcov | coveralls", "test-coverage": "nyc mocha \"libraries/bot*/tests/*.test.js\" ", @@ -13,7 +14,7 @@ "build-docs": "lerna run build-docs", "eslint": "eslint ./libraries/*/src/*.ts ./libraries/*/src/**/*.ts", "eslint-fix": "eslint ./libraries/*/src/*.ts ./libraries/*/src/**/*.ts --fix", - "set-dependency-versions": "node tools/util/updateDependenciesInPackageJsons.js ./libraries ^${Version} botframework-streaming botbuilder botbuilder-choices botbuilder-dialogs botbuilder-dialogs-adaptive botbuilder-core botbuilder-prompts botbuilder-testing botframework-connector botframework-config botframework-schema testbot && node tools/util/updateDependenciesInPackageJsons.js ./transcripts ^${Version} botframework-streaming botbuilder botbuilder-ai botbuilder-dialogs botbuilder-testing", + "set-dependency-versions": "node tools/util/updateDependenciesInPackageJsons.js ./libraries ^${Version} botframework-expressions botbuilder-lg botframework-streaming botbuilder botbuilder-choices botbuilder-dialogs botbuilder-core botbuilder-prompts botbuilder-testing botframework-connector botframework-config botframework-schema testbot && node tools/util/updateDependenciesInPackageJsons.js ./transcripts ^${Version} botframework-streaming botbuilder botbuilder-ai botbuilder-dialogs botbuilder-testing", "update-versions": "lerna run set-version && npm run set-dependency-versions" }, "dependencies": { diff --git a/tools/package-lock.json b/tools/package-lock.json deleted file mode 100644 index a909e5d9f8..0000000000 --- a/tools/package-lock.json +++ /dev/null @@ -1,6072 +0,0 @@ -{ - "name": "azure", - "version": "2.2.1-preview", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/caseless": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.1.tgz", - "integrity": "sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A==" - }, - "@types/form-data": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", - "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "10.9.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.9.4.tgz", - "integrity": "sha512-fCHV45gS+m3hH17zgkgADUSi2RR1Vht6wOZ0jyHP8rjiQra9f+mIcgwPQHllmDocYOstIEbKlxbFDYlgrTPYqw==" - }, - "@types/request": { - "version": "2.47.1", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.47.1.tgz", - "integrity": "sha512-TV3XLvDjQbIeVxJ1Z3oCTDk/KuYwwcNKVwz2YaT0F5u86Prgc4syDAp6P96rkTQQ4bIdh+VswQIC9zS6NjY7/g==", - "requires": { - "@types/caseless": "*", - "@types/form-data": "*", - "@types/node": "*", - "@types/tough-cookie": "*" - } - }, - "@types/tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha512-MDQLxNFRLasqS4UlkWMSACMKeSm1x4Q3TxzUC7KQUsh6RK1ZrQ0VEyE3yzXcBu+K8ejVj4wuX32eUG02yNp+YQ==" - }, - "adal-node": { - "version": "0.1.28", - "resolved": "https://registry.npmjs.org/adal-node/-/adal-node-0.1.28.tgz", - "integrity": "sha1-RoxLs+u9lrEnBmn0ucuk4AZepIU=", - "requires": { - "@types/node": "^8.0.47", - "async": ">=0.6.0", - "date-utils": "*", - "jws": "3.x.x", - "request": ">= 2.52.0", - "underscore": ">= 1.3.1", - "uuid": "^3.1.0", - "xmldom": ">= 0.1.x", - "xpath.js": "~1.1.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.29.tgz", - "integrity": "sha512-zbteaWZ2mdduacm0byELwtRyhYE40aK+pAanQk415gr1eRuu67x7QGOLmn8jz5zI8LDK7d0WI/oT6r5Trz4rzQ==" - } - } - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-slice": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", - "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true, - "optional": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "^7.1.1" - } - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "optional": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", - "dev": true, - "optional": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "date-utils": { - "version": "1.2.21", - "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz", - "integrity": "sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q=" - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "deprecated": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", - "dev": true - }, - "detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true, - "requires": { - "fs-exists-sync": "^0.1.0" - } - }, - "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", - "dev": true - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dotenv": { - "version": "4.0.0", - "resolved": "http://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" - }, - "duplexer": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "optional": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz", - "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", - "dev": true, - "requires": { - "once": "~1.3.0" - }, - "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true, - "requires": { - "wrappy": "1" - } - } - } - }, - "entities": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - }, - "es6-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", - "dev": true, - "optional": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dev": true, - "requires": { - "os-homedir": "^1.0.1" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", - "dev": true, - "optional": true, - "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", - "dev": true, - "optional": true - }, - "fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "time-stamp": "^1.0.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "optional": true, - "requires": { - "pend": "~1.2.0" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^1.1.3", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", - "dev": true - }, - "fined": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", - "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "dependencies": { - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - } - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "flagged-respawn": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", - "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - }, - "dependencies": { - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" - } - } - } - }, - "formatio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", - "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", - "dev": true, - "requires": { - "samsam": "1.x" - } - }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, - "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "~0.1.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", - "dev": true, - "requires": { - "glob": "^4.3.1", - "glob2base": "^0.0.12", - "minimatch": "^2.0.1", - "ordered-read-streams": "^0.1.0", - "through2": "^0.6.1", - "unique-stream": "^1.0.0" - }, - "dependencies": { - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "http://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true, - "requires": { - "gaze": "^0.5.1" - } - }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", - "dev": true, - "requires": { - "find-index": "^0.1.1" - } - }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "dev": true, - "requires": { - "global-prefix": "^0.1.4", - "is-windows": "^0.2.0" - } - }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.0", - "ini": "^1.3.4", - "is-windows": "^0.2.0", - "which": "^1.2.12" - }, - "dependencies": { - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "~3.1.21", - "lodash": "~1.0.1", - "minimatch": "~0.2.11" - }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" - } - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "lodash": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - } - } - }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "gulp": { - "version": "3.9.1", - "resolved": "http://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", - "dev": true, - "requires": { - "archy": "^1.0.0", - "chalk": "^1.0.0", - "deprecated": "^0.0.1", - "gulp-util": "^3.0.0", - "interpret": "^1.0.0", - "liftoff": "^2.1.0", - "minimist": "^1.1.0", - "orchestrator": "^0.3.0", - "pretty-hrtime": "^1.0.0", - "semver": "^4.1.0", - "tildify": "^1.0.0", - "v8flags": "^2.0.2", - "vinyl-fs": "^0.3.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "gulp-exec": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/gulp-exec/-/gulp-exec-2.1.2.tgz", - "integrity": "sha1-XYsTKw3gpzjLXcnfq4oCBXJsypY=", - "dev": true, - "requires": { - "gulp-util": "^3.0.0", - "gulplog": "^1.0.0", - "through2": "^2.0.0" - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" - }, - "dependencies": { - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", - "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", - "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "hasha": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", - "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", - "dev": true, - "optional": true, - "requires": { - "is-stream": "^1.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true - }, - "interpret": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true, - "requires": { - "is-relative": "^0.2.1", - "is-windows": "^0.2.0" - } - }, - "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true, - "requires": { - "is-unc-path": "^0.1.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.0" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "jshint": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.6.tgz", - "integrity": "sha512-KO9SIAKTlJQOM4lE64GQUtGBRpTOuvbrRrSZw3AhUxMNG266nX9hK2cKA4SBhXOj0irJGyNyGSLT62HGOVDEOA==", - "dev": true, - "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.10", - "minimatch": "~3.0.2", - "phantom": "~4.0.1", - "phantomjs-prebuilt": "~2.1.7", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x", - "unicode-5.2.0": "^0.7.5" - }, - "dependencies": { - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - } - } - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true, - "optional": true - } - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jwa": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz", - "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.10", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz", - "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==", - "requires": { - "jwa": "^1.1.5", - "safe-buffer": "^5.0.1" - } - }, - "kew": { - "version": "0.7.0", - "resolved": "http://registry.npmjs.org/kew/-/kew-0.7.0.tgz", - "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", - "dev": true, - "optional": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "liftoff": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", - "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^0.4.2", - "fined": "^1.0.1", - "flagged-respawn": "^0.3.2", - "lodash.isplainobject": "^4.0.4", - "lodash.isstring": "^4.0.1", - "lodash.mapvalues": "^4.4.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "dependencies": { - "findup-sync": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", - "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", - "dev": true, - "requires": { - "detect-file": "^0.1.0", - "is-glob": "^2.0.1", - "micromatch": "^2.3.7", - "resolve-dir": "^0.1.0" - } - } - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" - } - }, - "lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", - "dev": true - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "requires": { - "mime-db": "~1.30.0" - } - }, - "minami": { - "version": "github:devigned/minami#3a077f5089c74a703167d06a8ca520daee1e8b97", - "from": "github:devigned/minami#master", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "moment": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" - }, - "ms-rest": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/ms-rest/-/ms-rest-2.3.6.tgz", - "integrity": "sha512-M+Lx9P7Wy4TeAk7jqPLwGS1QS1gvxF6Xo+OHv5j1g3Kcb44T/GTUuSjxTKarF6aKyeacZH1ZD++Nt7pcql7dDA==", - "requires": { - "duplexer": "^0.1.1", - "is-buffer": "^1.1.6", - "is-stream": "^1.1.0", - "moment": "^2.21.0", - "request": "^2.87.0", - "through": "^2.3.8", - "tunnel": "0.0.5", - "uuid": "^3.2.1" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - } - } - }, - "ms-rest-azure": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/ms-rest-azure/-/ms-rest-azure-2.5.7.tgz", - "integrity": "sha512-e4lgB0z29Dx4ufu/c+PmEAYY1WXq98GYUBkE+iRx7WsxsN04lrM3B1vj8y+B8rKt7clPUE0niqB9VovVL8zvag==", - "requires": { - "adal-node": "^0.1.28", - "async": "2.6.0", - "moment": "^2.22.2", - "ms-rest": "^2.3.2", - "uuid": "^3.2.1" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "requires": { - "lodash": "^4.14.0" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - } - } - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, - "native-promise-only": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", - "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", - "dev": true - }, - "natives": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", - "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", - "dev": true - }, - "nock": { - "version": "0.16.0", - "resolved": "http://registry.npmjs.org/nock/-/nock-0.16.0.tgz", - "integrity": "sha1-dNhFQNrq3Zc1pyObxDjWVTuHq/w=", - "dev": true, - "requires": { - "propagate": "0.2.x" - } - }, - "node-forge": { - "version": "0.6.30", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.30.tgz", - "integrity": "sha1-CATnoSBkihEZHJmvmrdnpUtv97s=", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nyc": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.9.0.tgz", - "integrity": "sha512-w8OdJAhXL5izerzZMdqzYKMj/pgHJyY3qEPYBjLLxrhcVoHEY9pU5ENIiZyCgG9OR7x3VcUMoD40o6PtVpfR4g==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "arrify": "^1.0.1", - "caching-transform": "^1.0.0", - "convert-source-map": "^1.5.1", - "debug-log": "^1.0.1", - "default-require-extensions": "^1.0.0", - "find-cache-dir": "^0.1.1", - "find-up": "^2.1.0", - "foreground-child": "^1.5.3", - "glob": "^7.0.6", - "istanbul-lib-coverage": "^1.1.2", - "istanbul-lib-hook": "^1.1.0", - "istanbul-lib-instrument": "^1.10.0", - "istanbul-lib-report": "^1.1.3", - "istanbul-lib-source-maps": "^1.2.3", - "istanbul-reports": "^1.4.0", - "md5-hex": "^1.2.0", - "merge-source-map": "^1.1.0", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.0", - "resolve-from": "^2.0.0", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.1", - "spawn-wrap": "^1.4.2", - "test-exclude": "^4.2.0", - "yargs": "11.1.0", - "yargs-parser": "^8.0.0" - }, - "dependencies": { - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", - "dev": true, - "requires": { - "default-require-extensions": "^1.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "caching-transform": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", - "integrity": "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=", - "dev": true, - "requires": { - "md5-hex": "^1.2.0", - "mkdirp": "^0.5.1", - "write-file-atomic": "^1.1.4" - } - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", - "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==", - "dev": true - }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", - "dev": true, - "requires": { - "strip-bom": "^2.0.0" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreground-child": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", - "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", - "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", - "dev": true, - "requires": { - "append-transform": "^0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", - "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", - "dev": true, - "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.0", - "semver": "^5.3.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz", - "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", - "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "istanbul-reports": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.4.0.tgz", - "integrity": "sha512-OPzVo1fPZ2H+owr8q/LYKLD+vquv9Pj4F+dj808MdHbuQLD7S4ACRjcX+0Tne5Vxt2lxXvdZaL7v+FOOAV281w==", - "dev": true, - "requires": { - "handlebars": "^4.0.3" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "^3.0.0" - } - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5-hex": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", - "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", - "dev": true, - "requires": { - "md5-o-matic": "^0.1.1" - } - }, - "md5-o-matic": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", - "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", - "dev": true - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", - "dev": true, - "requires": { - "atob": "^2.0.0", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spawn-wrap": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", - "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "test-exclude": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", - "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "micromatch": "^3.1.8", - "object-assign": "^4.1.0", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - } - } - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", - "dev": true, - "requires": { - "end-of-stream": "~0.1.5", - "sequencify": "~0.0.7", - "stream-consume": "~0.1.0" - } - }, - "ordered-read-streams": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "parse-filepath": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", - "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", - "dev": true, - "requires": { - "is-absolute": "^0.2.3", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true, - "optional": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "phantom": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/phantom/-/phantom-4.0.12.tgz", - "integrity": "sha512-Tz82XhtPmwCk1FFPmecy7yRGZG2btpzY2KI9fcoPT7zT9det0CcMyfBFPp1S8DqzsnQnm8ZYEfdy528mwVtksA==", - "dev": true, - "optional": true, - "requires": { - "phantomjs-prebuilt": "^2.1.16", - "split": "^1.0.1", - "winston": "^2.4.0" - } - }, - "phantomjs-prebuilt": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", - "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", - "dev": true, - "optional": true, - "requires": { - "es6-promise": "^4.0.3", - "extract-zip": "^1.6.5", - "fs-extra": "^1.0.0", - "hasha": "^2.2.0", - "kew": "^0.7.0", - "progress": "^1.1.8", - "request": "^2.81.0", - "request-progress": "^2.0.1", - "which": "^1.2.10" - }, - "dependencies": { - "fs-extra": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true, - "optional": true - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "optional": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "optional": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "progress": { - "version": "1.1.8", - "resolved": "http://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true, - "optional": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "requires": { - "asap": "~2.0.3" - } - }, - "propagate": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-0.2.2.tgz", - "integrity": "sha1-F6EW0l2vIJRCbX1oRNJiMsnWkms=", - "dev": true - }, - "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "random-js": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/random-js/-/random-js-1.0.4.tgz", - "integrity": "sha1-rRlvxkDF5zGZ4tew/OfAe8uF5m4=", - "dev": true - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "mime-db": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", - "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" - }, - "mime-types": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", - "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", - "requires": { - "mime-db": "~1.36.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - } - } - }, - "request-progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", - "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", - "dev": true, - "optional": true, - "requires": { - "throttleit": "^1.0.0" - } - }, - "resolve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", - "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dev": true, - "requires": { - "expand-tilde": "^1.2.2", - "global-modules": "^0.2.3" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "samsam": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.2.1.tgz", - "integrity": "sha1-7dOQk6MYQ3DLhZJDsr3yVefY6mc=", - "dev": true - }, - "semver": { - "version": "4.3.6", - "resolved": "http://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "sequencify": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", - "dev": true - }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, - "should": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/should/-/should-8.4.0.tgz", - "integrity": "sha1-XmCInT5kS73Tl6MM00+tKPz5C8A=", - "dev": true, - "requires": { - "should-equal": "0.8.0", - "should-format": "0.3.2", - "should-type": "0.2.0" - } - }, - "should-equal": { - "version": "0.8.0", - "resolved": "http://registry.npmjs.org/should-equal/-/should-equal-0.8.0.tgz", - "integrity": "sha1-o/BXMv9FusG3ukEvhAiFaBlkEpk=", - "dev": true, - "requires": { - "should-type": "0.2.0" - } - }, - "should-format": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-0.3.2.tgz", - "integrity": "sha1-pZgx4Bot3uFJkRvHFIvlyAMZ4f8=", - "dev": true, - "requires": { - "should-type": "0.2.0" - } - }, - "should-type": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-0.2.0.tgz", - "integrity": "sha1-ZwfvlVKdmJ3MCY/gdTqx+RNrt/Y=", - "dev": true - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "sinon": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz", - "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==", - "dev": true, - "requires": { - "diff": "^3.1.0", - "formatio": "1.2.0", - "lolex": "^1.6.0", - "native-promise-only": "^0.8.1", - "path-to-regexp": "^1.7.0", - "samsam": "^1.1.3", - "text-encoding": "0.6.4", - "type-detect": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "optional": true, - "requires": { - "through": "2" - } - }, - "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true, - "optional": true - }, - "stream-consume": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", - "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "dev": true, - "requires": { - "first-chunk-stream": "^1.0.0", - "is-utf8": "^0.2.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "text-encoding": { - "version": "0.6.4", - "resolved": "http://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "dev": true - }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", - "dev": true, - "optional": true - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "tildify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "tunnel": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.5.tgz", - "integrity": "sha512-gj5sdqherx4VZKMcBA4vewER7zdK25Td+z1npBqpbDys4eJrLx+SlYjJvq1bDXs2irkuJM5pf8ktaEQVipkrbA==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, - "type-detect": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz", - "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true, - "optional": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - }, - "unicode-5.2.0": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/unicode-5.2.0/-/unicode-5.2.0-0.7.5.tgz", - "integrity": "sha512-KVGLW1Bri30x00yv4HNM8kBxoqFXr0Sbo55735nvrlsx4PYBZol3UtoWgO492fSwmsetzPEZzy73rbU8OGXJcA==", - "dev": true - }, - "unique-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", - "dev": true - }, - "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", - "dev": true - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "^1.1.1" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", - "dev": true, - "requires": { - "defaults": "^1.0.0", - "glob-stream": "^3.1.5", - "glob-watcher": "^0.0.6", - "graceful-fs": "^3.0.0", - "mkdirp": "^0.5.0", - "strip-bom": "^1.0.0", - "through2": "^0.6.1", - "vinyl": "^0.4.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "graceful-fs": { - "version": "3.0.11", - "resolved": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true, - "requires": { - "natives": "^1.1.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "http://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" - } - } - } - }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "dev": true - }, - "winston": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", - "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", - "dev": true, - "optional": true, - "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - }, - "dependencies": { - "async": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=", - "dev": true, - "optional": true - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true, - "optional": true - } - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xmlbuilder": { - "version": "0.4.3", - "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-0.4.3.tgz", - "integrity": "sha1-xGFLp04K0ZbmCcknLNnh3bKKilg=", - "dev": true - }, - "xmldom": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" - }, - "xpath.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", - "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "3.29.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.29.0.tgz", - "integrity": "sha1-GquWYOrnnYuPZ1vK7qtu40ws9pw=", - "dev": true, - "requires": { - "camelcase": "^1.2.1", - "cliui": "^3.0.3", - "decamelize": "^1.0.0", - "os-locale": "^1.4.0", - "window-size": "^0.1.2", - "y18n": "^3.2.0" - } - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "dev": true, - "optional": true, - "requires": { - "fd-slicer": "~1.0.1" - } - } - } -} diff --git a/transcripts/package-lock.json b/transcripts/package-lock.json deleted file mode 100644 index f485fa8090..0000000000 --- a/transcripts/package-lock.json +++ /dev/null @@ -1,1475 +0,0 @@ -{ - "name": "transcript-tests", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.2.tgz", - "integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==", - "dev": true, - "requires": { - "@babel/types": "^7.3.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.2.tgz", - "integrity": "sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ==", - "dev": true - }, - "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" - } - }, - "@babel/traverse": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", - "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.2.3", - "@babel/types": "^7.2.2", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.10" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.2.tgz", - "integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "globals": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", - "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", - "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", - "dev": true, - "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "istanbul-lib-coverage": "^2.0.3", - "semver": "^5.5.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } - }, - "nyc": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.2.0.tgz", - "integrity": "sha512-gQBlOqvfpYt9b2PZ7qElrHWt8x4y8ApNfbMBoDPdl3sY4/4RJwCxDGTSqhA9RnaguZjS5nW7taW8oToe86JLgQ==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "arrify": "^1.0.1", - "caching-transform": "^3.0.1", - "convert-source-map": "^1.6.0", - "find-cache-dir": "^2.0.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.3", - "istanbul-lib-hook": "^2.0.3", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.2", - "istanbul-reports": "^2.1.0", - "make-dir": "^1.3.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.3", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.1.0", - "uuid": "^3.3.2", - "yargs": "^12.0.5", - "yargs-parser": "^11.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "append-transform": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "arrify": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "async": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "builtin-modules": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "caching-transform": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^1.3.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.3.0" - } - }, - "camelcase": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "cliui": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "commander": { - "version": "2.17.1", - "bundled": true, - "dev": true, - "optional": true - }, - "commondir": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cross-spawn": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "default-require-extensions": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "end-of-stream": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "bundled": true, - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es6-error": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "execa": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "bundled": true, - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "find-cache-dir": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "foreground-child": { - "version": "1.5.6", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "bundled": true, - "dev": true - }, - "handlebars": { - "version": "4.0.12", - "bundled": true, - "dev": true, - "requires": { - "async": "^2.5.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "has-flag": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "hasha": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "bundled": true, - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-report": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "supports-color": "^6.0.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "rimraf": "^2.6.2", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "handlebars": "^4.0.11" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "lcid": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "bundled": true, - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "bundled": true, - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "bundled": true, - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "mem": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" - } - }, - "merge-source-map": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.10", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "normalize-package-data": { - "version": "2.4.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-is-promise": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "p-limit": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "package-hash": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "path-type": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "pump": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "release-zalgo": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "spawn-wrap": { - "version": "1.4.2", - "bundled": true, - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.3", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "test-exclude": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "arrify": "^1.0.1", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^1.0.1" - } - }, - "uglify-js": { - "version": "3.4.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "uuid": { - "version": "3.3.2", - "bundled": true, - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "bundled": true, - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "write-file-atomic": { - "version": "2.4.2", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "y18n": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "2.1.2", - "bundled": true, - "dev": true - }, - "yargs": { - "version": "12.0.5", - "bundled": true, - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - } - } -}