diff --git a/cli/BUILD b/cli/BUILD index 966d3753..9f2d7869 100644 --- a/cli/BUILD +++ b/cli/BUILD @@ -33,7 +33,7 @@ BUILD_DATA = [ "@npm//vscode-languageserver-types", "@npm//typescript", "//language/dsl:@player-tools/dsl", - "//language/service:@player-tools/language-service", + "//language/json-language-service:@player-tools/json-language-service", "//xlr/sdk:@player-tools/xlr-sdk", "//xlr/utils:@player-tools/xlr-utils", "//xlr/converters:@player-tools/xlr-converters" diff --git a/cli/src/plugins/LSPAssetsPlugin.ts b/cli/src/plugins/LSPAssetsPlugin.ts index 67972cb7..27700f41 100644 --- a/cli/src/plugins/LSPAssetsPlugin.ts +++ b/cli/src/plugins/LSPAssetsPlugin.ts @@ -1,4 +1,4 @@ -import type { PlayerLanguageService } from '@player-tools/language-service'; +import type { PlayerLanguageService } from '@player-tools/json-language-service'; import type { PlayerCLIPlugin } from './index'; export interface Config { diff --git a/cli/src/plugins/index.ts b/cli/src/plugins/index.ts index e804267a..e783ee5e 100644 --- a/cli/src/plugins/index.ts +++ b/cli/src/plugins/index.ts @@ -1,4 +1,4 @@ -import type { PlayerLanguageService } from '@player-tools/language-service'; +import type { PlayerLanguageService } from '@player-tools/json-language-service'; import type { DSLCompiler } from '@player-tools/dsl'; import type { ExportTypes } from '@player-tools/xlr-sdk'; import type { TransformFunction } from '@player-tools/xlr'; diff --git a/cli/src/utils/base-command.ts b/cli/src/utils/base-command.ts index 6a8fa409..df52048c 100644 --- a/cli/src/utils/base-command.ts +++ b/cli/src/utils/base-command.ts @@ -4,7 +4,7 @@ import { Command, Flags } from '@oclif/core'; import path from 'path'; import { cosmiconfig } from 'cosmiconfig'; -import { PlayerLanguageService } from '@player-tools/language-service'; +import { PlayerLanguageService } from '@player-tools/json-language-service'; import { DSLCompiler } from '@player-tools/dsl'; import type { ExportTypes } from '@player-tools/xlr-sdk'; import type { TransformFunction } from '@player-tools/xlr'; diff --git a/common/static_xlrs/expression/xlr/ceil.json b/common/static_xlrs/expression/xlr/ceil.json new file mode 100755 index 00000000..4f653812 --- /dev/null +++ b/common/static_xlrs/expression/xlr/ceil.json @@ -0,0 +1,33 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "ceil", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "type": { + "type": "or", + "or": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "optional": false, + "name": "num" + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "number" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/concat.json b/common/static_xlrs/expression/xlr/concat.json new file mode 100755 index 00000000..36e2ef6e --- /dev/null +++ b/common/static_xlrs/expression/xlr/concat.json @@ -0,0 +1,19 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "concat", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "array", + "elementType": { + "type": "unknown" + }, + "title": "[]", + "name": "args" + }, + { + "type": "unknown" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/containsAny.json b/common/static_xlrs/expression/xlr/containsAny.json new file mode 100755 index 00000000..57a892f8 --- /dev/null +++ b/common/static_xlrs/expression/xlr/containsAny.json @@ -0,0 +1,44 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "containsAny", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "type": { + "type": "string" + }, + "optional": false, + "name": "str" + }, + { + "type": { + "type": "or", + "or": [ + { + "type": "string" + }, + { + "type": "array", + "elementType": { + "type": "string" + }, + "title": "[]" + } + ] + }, + "optional": false, + "name": "keywords" + } + ], + "additionalItems": false, + "minItems": 2 + }, + { + "type": "boolean" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/findProperty.json b/common/static_xlrs/expression/xlr/findProperty.json new file mode 100755 index 00000000..2194b4ff --- /dev/null +++ b/common/static_xlrs/expression/xlr/findProperty.json @@ -0,0 +1,92 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "findProperty", + "type": "ref", + "ref": "ExpressionHandler<\n [Array | Binding, string | undefined, any, string | undefined, any],\n any\n>", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "type": { + "type": "or", + "or": [ + { + "type": "array", + "elementType": { + "type": "any" + }, + "title": "0" + }, + { + "type": "ref", + "ref": "Binding", + "title": "0" + } + ], + "title": "0" + }, + "optional": false, + "name": "bindingOrModel" + }, + { + "type": { + "type": "or", + "or": [ + { + "type": "string", + "title": "1" + }, + { + "type": "undefined", + "title": "1" + } + ], + "title": "1" + }, + "optional": false, + "name": "propToCheck" + }, + { + "type": { + "type": "any", + "title": "2" + }, + "optional": false, + "name": "valueToCheck" + }, + { + "type": { + "type": "or", + "or": [ + { + "type": "string", + "title": "3" + }, + { + "type": "undefined", + "title": "3" + } + ], + "title": "3" + }, + "optional": false, + "name": "propToReturn" + }, + { + "type": { + "type": "any", + "title": "4" + }, + "optional": false, + "name": "defaultValue" + } + ], + "additionalItems": false, + "minItems": 5 + }, + { + "type": "any" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/findPropertyIndex.json b/common/static_xlrs/expression/xlr/findPropertyIndex.json new file mode 100755 index 00000000..c787541e --- /dev/null +++ b/common/static_xlrs/expression/xlr/findPropertyIndex.json @@ -0,0 +1,66 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "findPropertyIndex", + "type": "ref", + "ref": "ExpressionHandler<\n [Array | Binding, string | undefined, any],\n number\n>", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "type": { + "type": "or", + "or": [ + { + "type": "array", + "elementType": { + "type": "any" + }, + "title": "0" + }, + { + "type": "ref", + "ref": "Binding", + "title": "0" + } + ], + "title": "0" + }, + "optional": false, + "name": "bindingOrModel" + }, + { + "type": { + "type": "or", + "or": [ + { + "type": "string", + "title": "1" + }, + { + "type": "undefined", + "title": "1" + } + ], + "title": "1" + }, + "optional": false, + "name": "propToCheck" + }, + { + "type": { + "type": "any", + "title": "2" + }, + "optional": false, + "name": "valueToCheck" + } + ], + "additionalItems": false, + "minItems": 3 + }, + { + "type": "number" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/floor.json b/common/static_xlrs/expression/xlr/floor.json new file mode 100755 index 00000000..dd507782 --- /dev/null +++ b/common/static_xlrs/expression/xlr/floor.json @@ -0,0 +1,33 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "floor", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "type": { + "type": "or", + "or": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "optional": false, + "name": "num" + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "number" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/isEmpty.json b/common/static_xlrs/expression/xlr/isEmpty.json new file mode 100755 index 00000000..844d74cc --- /dev/null +++ b/common/static_xlrs/expression/xlr/isEmpty.json @@ -0,0 +1,26 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "isEmpty", + "type": "ref", + "ref": "ExpressionHandler<[unknown], boolean>", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "type": { + "type": "unknown", + "title": "0" + }, + "optional": false, + "name": "val" + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "boolean" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/isNotEmpty.json b/common/static_xlrs/expression/xlr/isNotEmpty.json new file mode 100755 index 00000000..71b7b39f --- /dev/null +++ b/common/static_xlrs/expression/xlr/isNotEmpty.json @@ -0,0 +1,26 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "isNotEmpty", + "type": "ref", + "ref": "ExpressionHandler<[unknown], boolean>", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "type": { + "type": "unknown", + "title": "0" + }, + "optional": false, + "name": "val" + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "boolean" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/length.json b/common/static_xlrs/expression/xlr/length.json new file mode 100755 index 00000000..be2d1089 --- /dev/null +++ b/common/static_xlrs/expression/xlr/length.json @@ -0,0 +1,24 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "length", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "name": "val", + "type": { + "type": "unknown" + } + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "number" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/lowerCase.json b/common/static_xlrs/expression/xlr/lowerCase.json new file mode 100755 index 00000000..0c503b62 --- /dev/null +++ b/common/static_xlrs/expression/xlr/lowerCase.json @@ -0,0 +1,24 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "lowerCase", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "name": "arg", + "type": { + "type": "unknown" + } + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "unknown" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/manifest.js b/common/static_xlrs/expression/xlr/manifest.js new file mode 100755 index 00000000..c98bd2f3 --- /dev/null +++ b/common/static_xlrs/expression/xlr/manifest.js @@ -0,0 +1,28 @@ +const size = require('./size.json') +const length = require('./length.json') +const isEmpty = require('./isEmpty.json') +const isNotEmpty = require('./isNotEmpty.json') +const concat = require('./concat.json') +const trim = require('./trim.json') +const upperCase = require('./upperCase.json') +const lowerCase = require('./lowerCase.json') +const replace = require('./replace.json') +const titleCase = require('./titleCase.json') +const sentenceCase = require('./sentenceCase.json') +const number = require('./number.json') +const round = require('./round.json') +const floor = require('./floor.json') +const ceil = require('./ceil.json') +const sum = require('./sum.json') +const findPropertyIndex = require('./findPropertyIndex.json') +const findProperty = require('./findProperty.json') +const containsAny = require('./containsAny.json') + +module.exports = { + "pluginName": "CommonExpressions", + "capabilities": { + "Assets":[], + "Views":[], + "Expressions":[size,length,isEmpty,isNotEmpty,concat,trim,upperCase,lowerCase,replace,titleCase,sentenceCase,number,round,floor,ceil,sum,findPropertyIndex,findProperty,containsAny], + } +} diff --git a/common/static_xlrs/expression/xlr/manifest.json b/common/static_xlrs/expression/xlr/manifest.json new file mode 100755 index 00000000..68b5de10 --- /dev/null +++ b/common/static_xlrs/expression/xlr/manifest.json @@ -0,0 +1,28 @@ +{ + "pluginName": "CommonExpressions", + "capabilities": { + "Assets": [], + "Views": [], + "Expressions": [ + "size", + "length", + "isEmpty", + "isNotEmpty", + "concat", + "trim", + "upperCase", + "lowerCase", + "replace", + "titleCase", + "sentenceCase", + "number", + "round", + "floor", + "ceil", + "sum", + "findPropertyIndex", + "findProperty", + "containsAny" + ] + } +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/number.json b/common/static_xlrs/expression/xlr/number.json new file mode 100755 index 00000000..90c25f23 --- /dev/null +++ b/common/static_xlrs/expression/xlr/number.json @@ -0,0 +1,31 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "number", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "name": "val", + "type": { + "type": "unknown" + } + }, + { + "name": "coerceTo0", + "type": { + "type": "boolean" + }, + "optional": true + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "number" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/replace.json b/common/static_xlrs/expression/xlr/replace.json new file mode 100755 index 00000000..55033104 --- /dev/null +++ b/common/static_xlrs/expression/xlr/replace.json @@ -0,0 +1,37 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "replace", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "name": "str", + "type": { + "type": "unknown" + } + }, + { + "name": "pattern", + "type": { + "type": "unknown" + } + }, + { + "name": "replacement", + "type": { + "type": "unknown" + }, + "optional": true + } + ], + "additionalItems": false, + "minItems": 2 + }, + { + "type": "unknown" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/round.json b/common/static_xlrs/expression/xlr/round.json new file mode 100755 index 00000000..80cec1a4 --- /dev/null +++ b/common/static_xlrs/expression/xlr/round.json @@ -0,0 +1,33 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "round", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "type": { + "type": "or", + "or": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "optional": false, + "name": "num" + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "number" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/sentenceCase.json b/common/static_xlrs/expression/xlr/sentenceCase.json new file mode 100755 index 00000000..146a34a1 --- /dev/null +++ b/common/static_xlrs/expression/xlr/sentenceCase.json @@ -0,0 +1,24 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "sentenceCase", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "name": "arg", + "type": { + "type": "unknown" + } + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "unknown" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/size.json b/common/static_xlrs/expression/xlr/size.json new file mode 100755 index 00000000..a943e401 --- /dev/null +++ b/common/static_xlrs/expression/xlr/size.json @@ -0,0 +1,24 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "size", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "name": "val", + "type": { + "type": "unknown" + } + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "number" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/sum.json b/common/static_xlrs/expression/xlr/sum.json new file mode 100755 index 00000000..13da4bf2 --- /dev/null +++ b/common/static_xlrs/expression/xlr/sum.json @@ -0,0 +1,27 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "sum", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "array", + "elementType": { + "type": "or", + "or": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "title": "[]", + "name": "args" + }, + { + "type": "number" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/titleCase.json b/common/static_xlrs/expression/xlr/titleCase.json new file mode 100755 index 00000000..3fef9eef --- /dev/null +++ b/common/static_xlrs/expression/xlr/titleCase.json @@ -0,0 +1,24 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "titleCase", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "name": "arg", + "type": { + "type": "unknown" + } + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "unknown" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/trim.json b/common/static_xlrs/expression/xlr/trim.json new file mode 100755 index 00000000..b56aabe2 --- /dev/null +++ b/common/static_xlrs/expression/xlr/trim.json @@ -0,0 +1,24 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "trim", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "name": "arg", + "type": { + "type": "unknown" + } + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "unknown" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/expression/xlr/upperCase.json b/common/static_xlrs/expression/xlr/upperCase.json new file mode 100755 index 00000000..362e008c --- /dev/null +++ b/common/static_xlrs/expression/xlr/upperCase.json @@ -0,0 +1,24 @@ +{ + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/59/execroot/player/plugins/common-expressions/core/src/expressions/index.ts", + "name": "upperCase", + "type": "ref", + "ref": "ExpressionHandler", + "genericArguments": [ + { + "type": "tuple", + "elementTypes": [ + { + "name": "arg", + "type": { + "type": "unknown" + } + } + ], + "additionalItems": false, + "minItems": 1 + }, + { + "type": "unknown" + } + ] +} \ No newline at end of file diff --git a/common/static_xlrs/plugin/xlr/ActionAsset.json b/common/static_xlrs/plugin/xlr/ActionAsset.json index 9288c564..e73e0774 100755 --- a/common/static_xlrs/plugin/xlr/ActionAsset.json +++ b/common/static_xlrs/plugin/xlr/ActionAsset.json @@ -1,7 +1,7 @@ { + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", "name": "ActionAsset", "type": "object", - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/plugins/reference-assets/core/src/assets/action/types.ts", "properties": { "value": { "required": false, @@ -51,8 +51,8 @@ "beacon": { "required": false, "node": { + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", "name": "BeaconDataType", - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", "type": "or", "or": [ { diff --git a/common/static_xlrs/plugin/xlr/CollectionAsset.json b/common/static_xlrs/plugin/xlr/CollectionAsset.json index 5306ebc3..b91298bc 100755 --- a/common/static_xlrs/plugin/xlr/CollectionAsset.json +++ b/common/static_xlrs/plugin/xlr/CollectionAsset.json @@ -1,7 +1,7 @@ { + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", "name": "CollectionAsset", "type": "object", - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/plugins/reference-assets/core/src/assets/collection/types.ts", "properties": { "label": { "required": false, diff --git a/common/static_xlrs/plugin/xlr/InfoAsset.json b/common/static_xlrs/plugin/xlr/InfoAsset.json index bb2bf896..dd53117c 100755 --- a/common/static_xlrs/plugin/xlr/InfoAsset.json +++ b/common/static_xlrs/plugin/xlr/InfoAsset.json @@ -1,7 +1,7 @@ { + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", "name": "InfoAsset", "type": "object", - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/plugins/reference-assets/core/src/assets/info/types.ts", "properties": { "title": { "required": false, diff --git a/common/static_xlrs/plugin/xlr/InputAsset.json b/common/static_xlrs/plugin/xlr/InputAsset.json index d38332da..6a348349 100755 --- a/common/static_xlrs/plugin/xlr/InputAsset.json +++ b/common/static_xlrs/plugin/xlr/InputAsset.json @@ -1,7 +1,7 @@ { + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", "name": "InputAsset", "type": "object", - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/plugins/reference-assets/core/src/assets/input/types.ts", "properties": { "label": { "required": false, @@ -50,8 +50,8 @@ "beacon": { "required": false, "node": { + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", "name": "BeaconDataType", - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", "type": "or", "or": [ { diff --git a/common/static_xlrs/plugin/xlr/TextAsset.json b/common/static_xlrs/plugin/xlr/TextAsset.json index 233e34e9..fb924d09 100755 --- a/common/static_xlrs/plugin/xlr/TextAsset.json +++ b/common/static_xlrs/plugin/xlr/TextAsset.json @@ -1,7 +1,7 @@ { + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", "name": "TextAsset", "type": "object", - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/plugins/reference-assets/core/src/assets/text/types.ts", "properties": { "value": { "required": true, @@ -16,14 +16,14 @@ "node": { "type": "array", "elementType": { + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", "name": "TextModifier", - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/plugins/reference-assets/core/src/assets/text/types.ts", "type": "or", "or": [ { + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", "name": "BasicTextModifier", "type": "object", - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/plugins/reference-assets/core/src/assets/text/types.ts", "properties": { "type": { "required": true, @@ -48,9 +48,9 @@ "title": "BasicTextModifier" }, { + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", "name": "LinkModifier", "type": "object", - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/plugins/reference-assets/core/src/assets/text/types.ts", "properties": { "type": { "required": true, diff --git a/common/static_xlrs/plugin/xlr/manifest.js b/common/static_xlrs/plugin/xlr/manifest.js old mode 100644 new mode 100755 index 741900ae..81d09d31 --- a/common/static_xlrs/plugin/xlr/manifest.js +++ b/common/static_xlrs/plugin/xlr/manifest.js @@ -1,14 +1,12 @@ -const InputAsset = require( './InputAsset.json') -const TextAsset = require( './TextAsset.json') -const ActionAsset = require( './ActionAsset.json') -const InfoAsset = require( './InfoAsset.json') -const CollectionAsset = require( './CollectionAsset.json') -const TransformedAction = require( './TransformedAction.json') -const TransformedInput = require( './TransformedInput.json') +const InputAsset = require('./InputAsset.json') +const TextAsset = require('./TextAsset.json') +const ActionAsset = require('./ActionAsset.json') +const InfoAsset = require('./InfoAsset.json') +const CollectionAsset = require('./CollectionAsset.json') module.exports = { - "pluginName": "BaseAssetsPlugin", + "pluginName": "reference-assets-web-plugin", "capabilities": { - "Assets":[InputAsset,TextAsset,ActionAsset,InfoAsset,CollectionAsset, TransformedAction, TransformedInput], + "Assets":[InputAsset,TextAsset,ActionAsset,InfoAsset,CollectionAsset], } } diff --git a/common/static_xlrs/plugin/xlr/manifest.json b/common/static_xlrs/plugin/xlr/manifest.json old mode 100644 new mode 100755 index 32cc3795..2f1d5b1f --- a/common/static_xlrs/plugin/xlr/manifest.json +++ b/common/static_xlrs/plugin/xlr/manifest.json @@ -1,14 +1,12 @@ { - "pluginName": "BaseAssetsPlugin", + "pluginName": "reference-assets-web-plugin", "capabilities": { "Assets": [ "InputAsset", "TextAsset", "ActionAsset", "InfoAsset", - "CollectionAsset", - "TransformedAction", - "TransformedInput" + "CollectionAsset" ] } } \ No newline at end of file diff --git a/devtools/common/BUILD b/devtools/common/BUILD index b8d92bda..3bf495d4 100644 --- a/devtools/common/BUILD +++ b/devtools/common/BUILD @@ -3,7 +3,7 @@ load("//:index.bzl", "javascript_pipeline") javascript_pipeline( name = "@player-tools/devtools-common", dependencies = [ - "@npm//@player-ui/logger", + "@npm//@player-ui/player", "@npm//@player-ui/types", "@npm//@reduxjs/toolkit", "@npm//@types/uuid", diff --git a/devtools/common/src/types/index.ts b/devtools/common/src/types/index.ts index 2a2ce3e9..156d36bf 100644 --- a/devtools/common/src/types/index.ts +++ b/devtools/common/src/types/index.ts @@ -1,4 +1,4 @@ -import type { Severity } from '@player-ui/logger'; +import type { Severity } from '@player-ui/player'; import type { Binding, Flow, Schema, View } from '@player-ui/types'; import type { RUNTIME_SOURCE } from '../constants'; import type { ProfilerNode } from './state'; diff --git a/language/dsl/BUILD b/language/dsl/BUILD index d349976e..0831123f 100644 --- a/language/dsl/BUILD +++ b/language/dsl/BUILD @@ -4,6 +4,7 @@ javascript_pipeline( name = "@player-tools/dsl", dependencies = [ "@npm//@player-ui/types", + "@npm//@player-ui/player", "@npm//@types/mkdirp", "@npm//@types/signale", "@npm//chalk", diff --git a/language/dsl/src/__tests__/edge-cases.test.tsx b/language/dsl/src/__tests__/edge-cases.test.tsx index 5f35e154..053d466e 100644 --- a/language/dsl/src/__tests__/edge-cases.test.tsx +++ b/language/dsl/src/__tests__/edge-cases.test.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { render } from '..'; +import { render, expression as e } from '..'; import { Collection, Input, Text } from './helpers/asset-library'; test('works with a Component that returns a Fragment of items', async () => { @@ -62,3 +62,19 @@ test('works with a Component that returns a Fragment of items', async () => { expect(contentWithoutFragment.jsonValue).toStrictEqual(expected); }); + +test('handles invalid expressions', async () => { + const App = () => { + return ( + + + Hello + + + ); + }; + + await expect(render()).rejects.toThrow( + 'Unclosed quote after "" at character 9' + ); +}); diff --git a/language/dsl/src/string-templates/index.ts b/language/dsl/src/string-templates/index.ts index 42239782..cceb1738 100644 --- a/language/dsl/src/string-templates/index.ts +++ b/language/dsl/src/string-templates/index.ts @@ -1,4 +1,5 @@ import React from 'react'; +import { parseExpression } from '@player-ui/player'; export type TemplateInstanceRefStringContext = 'binding' | 'expression'; export interface TemplateRefStringOptions { @@ -71,6 +72,14 @@ const createTemplateInstance = ( return sum + next + (element?.toRefString(options) ?? ''); }, ''); + /** Try to parse the expression as valid */ + if (options.nestedContext === 'expression') { + const parsedExpression = parseExpression(value, { strict: false }); + if (parsedExpression.error) { + throw parsedExpression.error; + } + } + /** get the unwrapped version */ const toString = () => { return options.toRefString({}, value); diff --git a/language/server/BUILD b/language/json-language-server/BUILD similarity index 63% rename from language/server/BUILD rename to language/json-language-server/BUILD index a6c1dfcd..378fdc11 100644 --- a/language/server/BUILD +++ b/language/json-language-server/BUILD @@ -2,9 +2,9 @@ load("//:index.bzl", "javascript_pipeline") javascript_pipeline( - name = "@player-tools/language-server", + name = "@player-tools/json-language-server", dependencies = [ - "//language/service:@player-tools/language-service", + "//language/json-language-service:@player-tools/json-language-service", "@npm//vscode-languageserver", "@npm//vscode-languageserver-textdocument" ], diff --git a/language/server/README.md b/language/json-language-server/README.md similarity index 88% rename from language/server/README.md rename to language/json-language-server/README.md index 5d6e00e3..51f67d12 100644 --- a/language/server/README.md +++ b/language/json-language-server/README.md @@ -1,3 +1,3 @@ -# @player-tools/language-server +# @player-tools/json-language-server This package starts a node JSON-RPC server which maps LSP requests to the [@player-language/service](https://github.intuit.com/player/language/tree/master/packages/service). This is typically started by an IDE and used in conjunction with a client to receive the language features. \ No newline at end of file diff --git a/language/server/src/index.ts b/language/json-language-server/src/index.ts similarity index 98% rename from language/server/src/index.ts rename to language/json-language-server/src/index.ts index 8e4cbc8e..44573cc2 100644 --- a/language/server/src/index.ts +++ b/language/json-language-server/src/index.ts @@ -8,7 +8,7 @@ import { TextDocumentSyncKind, } from 'vscode-languageserver'; import { TextDocument } from 'vscode-languageserver-textdocument'; -import { PlayerLanguageService } from '@player-tools/language-service'; +import { PlayerLanguageService } from '@player-tools/json-language-service'; import fs from 'fs'; import { runAndCatch } from './utils'; diff --git a/language/server/src/utils.ts b/language/json-language-server/src/utils.ts similarity index 100% rename from language/server/src/utils.ts rename to language/json-language-server/src/utils.ts diff --git a/language/server/tsconfig.json b/language/json-language-server/tsconfig.json similarity index 100% rename from language/server/tsconfig.json rename to language/json-language-server/tsconfig.json diff --git a/language/server/webpack.config.js b/language/json-language-server/webpack.config.js similarity index 100% rename from language/server/webpack.config.js rename to language/json-language-server/webpack.config.js diff --git a/language/service/BUILD b/language/json-language-service/BUILD similarity index 86% rename from language/service/BUILD rename to language/json-language-service/BUILD index a24c8d0a..9b18cbf0 100644 --- a/language/service/BUILD +++ b/language/json-language-service/BUILD @@ -2,7 +2,7 @@ load("//:index.bzl", "javascript_pipeline") javascript_pipeline( - name = "@player-tools/language-service", + name = "@player-tools/json-language-service", dependencies = [ "//xlr/types:@player-tools/xlr", "//xlr/sdk:@player-tools/xlr-sdk", @@ -17,9 +17,6 @@ javascript_pipeline( "@npm//vscode-languageserver-textdocument", "@npm//vscode-languageserver-types" ], - data = [ - "tsconfig.json" - ], test_data = [ "//common:static_xlrs" ] diff --git a/language/service/README.md b/language/json-language-service/README.md similarity index 91% rename from language/service/README.md rename to language/json-language-service/README.md index a15a3fb3..97b4330d 100644 --- a/language/service/README.md +++ b/language/json-language-service/README.md @@ -1,4 +1,4 @@ -# @player-tools/language-service +# @player-tools/json-language-service The player LSP currently supports: diff --git a/language/service/src/__tests__/__snapshots__/service.test.ts.snap b/language/json-language-service/src/__tests__/__snapshots__/service.test.ts.snap similarity index 100% rename from language/service/src/__tests__/__snapshots__/service.test.ts.snap rename to language/json-language-service/src/__tests__/__snapshots__/service.test.ts.snap diff --git a/language/service/src/__tests__/service.test.ts b/language/json-language-service/src/__tests__/service.test.ts similarity index 100% rename from language/service/src/__tests__/service.test.ts rename to language/json-language-service/src/__tests__/service.test.ts diff --git a/language/service/src/constants.ts b/language/json-language-service/src/constants.ts similarity index 100% rename from language/service/src/constants.ts rename to language/json-language-service/src/constants.ts diff --git a/language/service/src/index.ts b/language/json-language-service/src/index.ts similarity index 100% rename from language/service/src/index.ts rename to language/json-language-service/src/index.ts diff --git a/language/service/src/parser/__tests__/parse.test.ts b/language/json-language-service/src/parser/__tests__/parse.test.ts similarity index 100% rename from language/service/src/parser/__tests__/parse.test.ts rename to language/json-language-service/src/parser/__tests__/parse.test.ts diff --git a/language/service/src/parser/document.ts b/language/json-language-service/src/parser/document.ts similarity index 100% rename from language/service/src/parser/document.ts rename to language/json-language-service/src/parser/document.ts diff --git a/language/service/src/parser/edits.ts b/language/json-language-service/src/parser/edits.ts similarity index 100% rename from language/service/src/parser/edits.ts rename to language/json-language-service/src/parser/edits.ts diff --git a/language/service/src/parser/index.ts b/language/json-language-service/src/parser/index.ts similarity index 100% rename from language/service/src/parser/index.ts rename to language/json-language-service/src/parser/index.ts diff --git a/language/service/src/parser/jsonParseErrors.ts b/language/json-language-service/src/parser/jsonParseErrors.ts similarity index 100% rename from language/service/src/parser/jsonParseErrors.ts rename to language/json-language-service/src/parser/jsonParseErrors.ts diff --git a/language/service/src/parser/types.ts b/language/json-language-service/src/parser/types.ts similarity index 100% rename from language/service/src/parser/types.ts rename to language/json-language-service/src/parser/types.ts diff --git a/language/service/src/parser/utils.ts b/language/json-language-service/src/parser/utils.ts similarity index 100% rename from language/service/src/parser/utils.ts rename to language/json-language-service/src/parser/utils.ts diff --git a/language/service/src/plugins/__tests__/action-plugin.test.ts b/language/json-language-service/src/plugins/__tests__/action-plugin.test.ts similarity index 100% rename from language/service/src/plugins/__tests__/action-plugin.test.ts rename to language/json-language-service/src/plugins/__tests__/action-plugin.test.ts diff --git a/language/service/src/plugins/__tests__/asset-wrapper-array-plugin.test.ts b/language/json-language-service/src/plugins/__tests__/asset-wrapper-array-plugin.test.ts similarity index 100% rename from language/service/src/plugins/__tests__/asset-wrapper-array-plugin.test.ts rename to language/json-language-service/src/plugins/__tests__/asset-wrapper-array-plugin.test.ts diff --git a/language/service/src/plugins/__tests__/binding-schema-plugin.test.ts b/language/json-language-service/src/plugins/__tests__/binding-schema-plugin.test.ts similarity index 100% rename from language/service/src/plugins/__tests__/binding-schema-plugin.test.ts rename to language/json-language-service/src/plugins/__tests__/binding-schema-plugin.test.ts diff --git a/language/service/src/plugins/__tests__/duplicate-id-plugin.test.ts b/language/json-language-service/src/plugins/__tests__/duplicate-id-plugin.test.ts similarity index 100% rename from language/service/src/plugins/__tests__/duplicate-id-plugin.test.ts rename to language/json-language-service/src/plugins/__tests__/duplicate-id-plugin.test.ts diff --git a/language/service/src/plugins/__tests__/missing-asset-wrapper-plugin.test.ts b/language/json-language-service/src/plugins/__tests__/missing-asset-wrapper-plugin.test.ts similarity index 100% rename from language/service/src/plugins/__tests__/missing-asset-wrapper-plugin.test.ts rename to language/json-language-service/src/plugins/__tests__/missing-asset-wrapper-plugin.test.ts diff --git a/language/service/src/plugins/__tests__/nav-state-plugin.test.ts b/language/json-language-service/src/plugins/__tests__/nav-state-plugin.test.ts similarity index 100% rename from language/service/src/plugins/__tests__/nav-state-plugin.test.ts rename to language/json-language-service/src/plugins/__tests__/nav-state-plugin.test.ts diff --git a/language/service/src/plugins/__tests__/template-plugin.test.ts b/language/json-language-service/src/plugins/__tests__/template-plugin.test.ts similarity index 100% rename from language/service/src/plugins/__tests__/template-plugin.test.ts rename to language/json-language-service/src/plugins/__tests__/template-plugin.test.ts diff --git a/language/service/src/plugins/__tests__/view-node-plugin.test.ts b/language/json-language-service/src/plugins/__tests__/view-node-plugin.test.ts similarity index 100% rename from language/service/src/plugins/__tests__/view-node-plugin.test.ts rename to language/json-language-service/src/plugins/__tests__/view-node-plugin.test.ts diff --git a/language/service/src/plugins/asset-wrapper-array-plugin.ts b/language/json-language-service/src/plugins/asset-wrapper-array-plugin.ts similarity index 100% rename from language/service/src/plugins/asset-wrapper-array-plugin.ts rename to language/json-language-service/src/plugins/asset-wrapper-array-plugin.ts diff --git a/language/service/src/plugins/binding-schema-plugin.ts b/language/json-language-service/src/plugins/binding-schema-plugin.ts similarity index 100% rename from language/service/src/plugins/binding-schema-plugin.ts rename to language/json-language-service/src/plugins/binding-schema-plugin.ts diff --git a/language/service/src/plugins/duplicate-id-plugin.ts b/language/json-language-service/src/plugins/duplicate-id-plugin.ts similarity index 100% rename from language/service/src/plugins/duplicate-id-plugin.ts rename to language/json-language-service/src/plugins/duplicate-id-plugin.ts diff --git a/language/service/src/plugins/legacy-action-plugin.ts b/language/json-language-service/src/plugins/legacy-action-plugin.ts similarity index 100% rename from language/service/src/plugins/legacy-action-plugin.ts rename to language/json-language-service/src/plugins/legacy-action-plugin.ts diff --git a/language/service/src/plugins/legacy-template-plugin.ts b/language/json-language-service/src/plugins/legacy-template-plugin.ts similarity index 100% rename from language/service/src/plugins/legacy-template-plugin.ts rename to language/json-language-service/src/plugins/legacy-template-plugin.ts diff --git a/language/service/src/plugins/missing-asset-wrapper-plugin.ts b/language/json-language-service/src/plugins/missing-asset-wrapper-plugin.ts similarity index 100% rename from language/service/src/plugins/missing-asset-wrapper-plugin.ts rename to language/json-language-service/src/plugins/missing-asset-wrapper-plugin.ts diff --git a/language/service/src/plugins/nav-state-plugin.ts b/language/json-language-service/src/plugins/nav-state-plugin.ts similarity index 100% rename from language/service/src/plugins/nav-state-plugin.ts rename to language/json-language-service/src/plugins/nav-state-plugin.ts diff --git a/language/service/src/plugins/view-node-plugin.ts b/language/json-language-service/src/plugins/view-node-plugin.ts similarity index 100% rename from language/service/src/plugins/view-node-plugin.ts rename to language/json-language-service/src/plugins/view-node-plugin.ts diff --git a/language/service/src/plugins/xlr-plugin.ts b/language/json-language-service/src/plugins/xlr-plugin.ts similarity index 100% rename from language/service/src/plugins/xlr-plugin.ts rename to language/json-language-service/src/plugins/xlr-plugin.ts diff --git a/language/service/src/types.ts b/language/json-language-service/src/types.ts similarity index 100% rename from language/service/src/types.ts rename to language/json-language-service/src/types.ts diff --git a/language/service/src/utils.ts b/language/json-language-service/src/utils.ts similarity index 100% rename from language/service/src/utils.ts rename to language/json-language-service/src/utils.ts diff --git a/language/service/src/xlr/__tests__/__snapshots__/transform.test.ts.snap b/language/json-language-service/src/xlr/__tests__/__snapshots__/transform.test.ts.snap similarity index 100% rename from language/service/src/xlr/__tests__/__snapshots__/transform.test.ts.snap rename to language/json-language-service/src/xlr/__tests__/__snapshots__/transform.test.ts.snap diff --git a/language/service/src/xlr/__tests__/transform.test.ts b/language/json-language-service/src/xlr/__tests__/transform.test.ts similarity index 100% rename from language/service/src/xlr/__tests__/transform.test.ts rename to language/json-language-service/src/xlr/__tests__/transform.test.ts diff --git a/language/service/src/xlr/index.ts b/language/json-language-service/src/xlr/index.ts similarity index 100% rename from language/service/src/xlr/index.ts rename to language/json-language-service/src/xlr/index.ts diff --git a/language/service/src/xlr/registry.ts b/language/json-language-service/src/xlr/registry.ts similarity index 100% rename from language/service/src/xlr/registry.ts rename to language/json-language-service/src/xlr/registry.ts diff --git a/language/service/src/xlr/service.ts b/language/json-language-service/src/xlr/service.ts similarity index 100% rename from language/service/src/xlr/service.ts rename to language/json-language-service/src/xlr/service.ts diff --git a/language/service/src/xlr/transforms.ts b/language/json-language-service/src/xlr/transforms.ts similarity index 100% rename from language/service/src/xlr/transforms.ts rename to language/json-language-service/src/xlr/transforms.ts diff --git a/language/service/tsconfig.json b/language/service/tsconfig.json deleted file mode 100644 index b6aab79d..00000000 --- a/language/service/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "include": ["src/**/*", "../../typings/**/*"], - "compilerOptions": { - "incremental": false, - "target": "es6", - "module": "commonjs", - "strict": true, - "jsx": "react", - "allowSyntheticDefaultImports": true, - "sourceMap": true, - "declaration": true, - "lib": ["es6", "es2017", "esnext", "dom"], - "esModuleInterop": true, - "experimentalDecorators": true, - "resolveJsonModule": true, - "downlevelIteration": true, - "outDir": "./dist", - "rootDir": "./src", - } -} diff --git a/language/typescript-expression-plugin/BUILD b/language/typescript-expression-plugin/BUILD new file mode 100644 index 00000000..72fed075 --- /dev/null +++ b/language/typescript-expression-plugin/BUILD @@ -0,0 +1,17 @@ + +load("//:index.bzl", "javascript_pipeline") + +javascript_pipeline( + name = "@player-tools/typescript-expression-plugin", + dependencies = [ + "//xlr/types:@player-tools/xlr", + "//xlr/sdk:@player-tools/xlr-sdk", + "//xlr/utils:@player-tools/xlr-utils", + "@npm//@player-ui/player", + "@npm//jsonc-parser", + "@npm//typescript-template-language-service-decorator", + ], + test_data = [ + "//common:@player-tools/static-xlrs" + ] +) \ No newline at end of file diff --git a/language/typescript-expression-plugin/src/__tests__/service.test.ts b/language/typescript-expression-plugin/src/__tests__/service.test.ts new file mode 100644 index 00000000..68d810a9 --- /dev/null +++ b/language/typescript-expression-plugin/src/__tests__/service.test.ts @@ -0,0 +1,184 @@ +import SampleExpression from '@player-tools/static-xlrs/static_xlrs/expression/xlr/manifest'; +import { symbolDisplayToString } from '@player-tools/xlr-utils'; +import { ExpressionLanguageService } from '../service'; + +describe('language-service', () => { + let service: ExpressionLanguageService; + + beforeEach(() => { + service = new ExpressionLanguageService({ plugins: [SampleExpression] }); + }); + + it('should auto-complete expressions', () => { + const completions = service.getCompletionsAtPosition( + { + text: 't', + } as any, + { + line: 0, + character: 1, + } + ); + + expect(completions).toMatchInlineSnapshot(` + Object { + "entries": Array [ + Object { + "insertText": "trim()", + "isRecommended": true, + "kind": "function", + "name": "trim", + "sortText": "trim", + }, + Object { + "insertText": "titleCase()", + "isRecommended": true, + "kind": "function", + "name": "titleCase", + "sortText": "titleCase", + }, + ], + "isGlobalCompletion": false, + "isMemberCompletion": false, + "isNewIdentifierLocation": true, + } + `); + }); + + describe('validations', () => { + it('ships expression validations when no plugins are registered', () => { + service.setConfig({ + plugins: [], + }); + + const diagnostics = service.getSemanticDiagnostics({ + text: 'trim()', + node: { + getSourceFile: () => null, + }, + } as any); + + expect(diagnostics).toMatchInlineSnapshot(`Array []`); + }); + + it('should validate number of expression arguments', () => { + const diagnostics = service.getSemanticDiagnostics({ + text: 'trim()', + node: { + getSourceFile: () => null, + }, + } as any); + + expect(diagnostics).toMatchInlineSnapshot(` + Array [ + Object { + "category": 1, + "code": 1, + "file": null, + "length": 4, + "messageText": "Expected 1 argument(s), got 0", + "start": 0, + }, + ] + `); + }); + + it('validate basic args', () => { + const diagnostics = service.getSemanticDiagnostics({ + text: 'containsAny({ "foo": "bar"}, "123")', + node: { + getSourceFile: () => null, + }, + } as any); + + expect(diagnostics).toMatchInlineSnapshot(` + Array [ + Object { + "category": 1, + "code": 1, + "file": null, + "length": 15, + "messageText": "Expected type 'string' but got 'object'", + "start": 12, + }, + ] + `); + }); + + it('validate nested args', () => { + const diagnostics = service.getSemanticDiagnostics({ + text: 'containsAny("123", containsAny(123, "123"))', + node: { + getSourceFile: () => null, + }, + } as any); + + expect(diagnostics).toMatchInlineSnapshot(` + Array [ + Object { + "category": 1, + "code": 1, + "file": null, + "length": 3, + "messageText": "Expected type 'string' but got 'number'", + "start": 31, + }, + ] + `); + }); + + it('working args', () => { + const diagnostics = service.getSemanticDiagnostics({ + text: 'containsAny("123", "123")', + node: { + getSourceFile: () => null, + }, + } as any); + + expect(diagnostics).toMatchInlineSnapshot(`Array []`); + }); + + it('should validate typos', () => { + const diagnostics = service.getSyntacticDiagnostics({ + text: 'containsAny("123', + node: { + getSourceFile: () => null, + }, + } as any); + + expect(diagnostics).toMatchInlineSnapshot(` + Array [ + Object { + "category": 1, + "code": 1, + "file": null, + "length": 16, + "messageText": "Unclosed quote after \\"123\\" at character 16", + "start": 0, + }, + ] + `); + }); + }); + + describe('quick info', () => { + it('should get quick info for expression', () => { + const info = service.getQuickInfoAtPosition( + { + text: 'trim()', + node: { + getSourceFile: () => null, + }, + } as any, + { + line: 0, + character: 0, + } + ); + + expect( + symbolDisplayToString(info?.displayParts as ts.SymbolDisplayPart[]) + ).toMatchInlineSnapshot(`"function trim(arg: unknown): unknown"`); + }); + }); +}); diff --git a/language/typescript-expression-plugin/src/index.ts b/language/typescript-expression-plugin/src/index.ts new file mode 100644 index 00000000..0ed8e288 --- /dev/null +++ b/language/typescript-expression-plugin/src/index.ts @@ -0,0 +1,48 @@ +import type * as ts from 'typescript/lib/tsserverlibrary'; +import { decorateWithTemplateLanguageService } from 'typescript-template-language-service-decorator'; +import { ExpressionLanguageService } from './service'; +import { LSPLogger } from './logger'; + +interface InitParams { + typescript: typeof ts; +} +class Plugin implements ts.server.PluginModule { + private readonly initOptions: InitParams; + private logger?: LSPLogger; + private templateService?: ExpressionLanguageService; + + constructor(initOptions: InitParams) { + this.initOptions = initOptions; + } + + create(info: ts.server.PluginCreateInfo): ts.LanguageService { + const logger = new LSPLogger(info); + this.logger = logger; + + const templateService = new ExpressionLanguageService({ logger }); + this.templateService = templateService; + + return decorateWithTemplateLanguageService( + this.initOptions.typescript, + info.languageService, + info.project, + templateService, + { + tags: ['e', 'expr', 'expression'], + enableForStringWithSubstitutions: true, + }, + { logger } + ); + } + + onConfigurationChanged(config: any) { + this.templateService?.setConfig(config); + } +} + +function init(mod: InitParams): ts.server.PluginModule { + return new Plugin(mod); +} + +export default init; +// export = init; diff --git a/language/typescript-expression-plugin/src/logger.ts b/language/typescript-expression-plugin/src/logger.ts new file mode 100644 index 00000000..4e98fba9 --- /dev/null +++ b/language/typescript-expression-plugin/src/logger.ts @@ -0,0 +1,14 @@ +import type { Logger } from 'typescript-template-language-service-decorator'; +import type * as ts from 'typescript/lib/tsserverlibrary'; + +export class LSPLogger implements Logger { + private readonly info: ts.server.PluginCreateInfo; + + constructor(info: ts.server.PluginCreateInfo) { + this.info = info; + } + + log(msg: string) { + this.info.project.projectService.logger.info(`[player-expr-lsp] ${msg}`); + } +} diff --git a/language/typescript-expression-plugin/src/service.ts b/language/typescript-expression-plugin/src/service.ts new file mode 100644 index 00000000..5bf938a6 --- /dev/null +++ b/language/typescript-expression-plugin/src/service.ts @@ -0,0 +1,339 @@ +import * as ts from 'typescript/lib/tsserverlibrary'; +import type { + TemplateLanguageService, + TemplateContext, + Logger, +} from 'typescript-template-language-service-decorator'; +import type { FunctionType, TSManifest, NodeType } from '@player-tools/xlr'; +import { createTSDocString } from '@player-tools/xlr-utils'; +import { XLRSDK } from '@player-tools/xlr-sdk'; +import type { ExpressionNode } from '@player-ui/player'; +import { parseExpression } from '@player-ui/player'; +import { + getTokenAtPosition, + toTSLocation, + convertExprToJSONNode, +} from './utils'; +import { toFunction } from './transforms'; + +interface ExpressionEntry { + /** + * The name of the expression + */ + name: string; + /** + * The description of the expression + */ + description?: string; + /** + * The XLR type of the expression + */ + type: FunctionType; + /** + * The XLR enabled plugin the expression was sourced from + */ + source: TSManifest; +} + +export interface ExpressionLanguageServiceConfig { + /** + * The list of XLR enabled plugins to load + */ + plugins: Array; +} + +/** + * Language server to check Player expression syntax and usage + */ +export class ExpressionLanguageService implements TemplateLanguageService { + private logger?: Logger; + private _plugins: Array = []; + private _expressions: Map; + private xlr: XLRSDK; + + constructor( + options?: { logger?: Logger } & Partial + ) { + this.logger = options?.logger; + this._plugins = options?.plugins ?? []; + this.xlr = new XLRSDK(); + + this._plugins.forEach((p) => { + this.xlr.loadDefinitionsFromModule(p, undefined, [toFunction]); + }); + this._expressions = this.reduceExpression(); + } + + setConfig(config: ExpressionLanguageServiceConfig) { + this._plugins = config.plugins; + this.xlr = new XLRSDK(); + + this._plugins.forEach((p) => { + this.xlr.loadDefinitionsFromModule(p, undefined, [toFunction]); + }); + this._expressions = this.reduceExpression(); + } + + private reduceExpression(): Map { + // Overlaps in names will be resolved by the last plugin to be loaded + // So use a map to ensure no duplicates + const expressions = new Map(); + + this.xlr.listTypes().forEach((type) => { + const typeInfo = this.xlr.getTypeInfo(type.name); + const source = this._plugins.find( + (value) => value.pluginName === typeInfo?.plugin + ); + + if ( + type.type === 'function' && + typeInfo?.capability === 'Expressions' && + source + ) { + expressions.set(type.name, { + name: type.name, + description: type.description, + type: type as FunctionType, + source, + }); + } + }); + + return expressions; + } + + getCompletionsAtPosition( + context: TemplateContext, + position: ts.LineAndCharacter + ): ts.CompletionInfo { + const completionInfo: ts.CompletionInfo = { + isGlobalCompletion: false, + isMemberCompletion: false, + isNewIdentifierLocation: true, + entries: [], + }; + + if (context.text.length === 0) { + // This happens for the start of an expression (e``) + // Provide all the completions in this case + + this._expressions.forEach((exp) => { + completionInfo.entries.push({ + name: exp.name, + kind: ts.ScriptElementKind.functionElement, + sortText: exp.name, + isRecommended: true, + insertText: `${exp.name}()`, + }); + }); + + return completionInfo; + } + + const line = context.text.split(/\n/g)[position.line]; + const parsed = parseExpression(line, { strict: false }); + const token = getTokenAtPosition(parsed, position); + + if (token?.type === 'Compound' && token.error) { + // We hit the end of the expression, and it's expecting more + // so provide all the completions + this._expressions.forEach((exp) => { + completionInfo.entries.push({ + name: exp.name, + kind: ts.ScriptElementKind.functionElement, + sortText: exp.name, + isRecommended: true, + insertText: `${exp.name}()`, + }); + }); + + return completionInfo; + } + + if (token?.type === 'Identifier') { + // get the relevant start of the identifier + const start = token.location?.start ?? { character: 0 }; + const wordFromStart = line.slice(start.character, position.character); + const allCompletions = Array.from(this._expressions.keys()).filter( + (key) => key.startsWith(wordFromStart) + ); + + allCompletions.forEach((c) => { + completionInfo.entries.push({ + name: c, + kind: ts.ScriptElementKind.functionElement, + sortText: c, + isRecommended: true, + insertText: `${c}()`, + }); + }); + } + + return completionInfo; + } + + getCompletionEntryDetails( + context: TemplateContext, + position: ts.LineAndCharacter, + name: string + ): ts.CompletionEntryDetails { + const expression = this._expressions.get(name); + + const completionDetails: ts.CompletionEntryDetails = { + name, + kind: ts.ScriptElementKind.functionElement, + kindModifiers: ts.ScriptElementKindModifier.none, + + documentation: [ + { + kind: 'text', + text: expression?.type.description ?? '', + }, + ], + displayParts: expression ? createTSDocString(expression.type) : [], + }; + + return completionDetails; + } + + getQuickInfoAtPosition( + context: TemplateContext, + position: ts.LineAndCharacter + ): ts.QuickInfo | undefined { + const parsed = parseExpression(context.text, { strict: false }); + const token = getTokenAtPosition(parsed, position); + + if (token?.type === 'Identifier') { + const expression = this._expressions.get(token.name); + + if (expression) { + const completionDetails = this.getCompletionEntryDetails( + context, + position, + expression.name + ); + + return { + ...completionDetails, + textSpan: toTSLocation(token), + }; + } + } + + return undefined; + } + + private checkNode( + context: TemplateContext, + node: ExpressionNode, + xlrType: NodeType + ): ts.Diagnostic[] { + const diagnostics: ts.Diagnostic[] = []; + const asJsonNodeValue = convertExprToJSONNode(node); + + if (asJsonNodeValue) { + const xlrDiags = this.xlr.validateByType(xlrType, asJsonNodeValue); + + xlrDiags.forEach((d) => { + diagnostics.push({ + file: context.node.getSourceFile(), + ...toTSLocation(node), + messageText: d.message, + category: ts.DiagnosticCategory.Error, + code: 1, + }); + }); + } + + return diagnostics; + } + + private getDiagnosticsForNode( + context: TemplateContext, + node: ExpressionNode + ): ts.Diagnostic[] { + const diags: ts.Diagnostic[] = []; + + if (node.type === 'Compound') { + node.body.forEach((n) => { + diags.push(...this.getDiagnosticsForNode(context, n)); + }); + } + + if (node.type === 'CallExpression') { + // Check that the expression is valid + const exprName = node.callTarget.name; + const expression = this._expressions.get(exprName); + + node.args.forEach((n) => { + diags.push(...this.getDiagnosticsForNode(context, n)); + }); + + if (expression) { + // Double check the arguments match what we expect + const expectedArgs = expression.type.parameters; + const actualArgs = node.args; + + actualArgs.forEach((actualArg, index) => { + const expectedArg = expectedArgs[index]; + + if (expectedArg) { + // Check that the type satisfies the expected type + diags.push(...this.checkNode(context, actualArg, expectedArg.type)); + } + }); + + if (expectedArgs.length > actualArgs.length) { + const requiredArgs = expectedArgs.filter((a) => !a.optional); + if (actualArgs.length < requiredArgs.length) { + diags.push({ + category: ts.DiagnosticCategory.Error, + code: 1, + file: context.node.getSourceFile(), + ...toTSLocation(node.callTarget), + messageText: `Expected ${requiredArgs.length} argument(s), got ${actualArgs.length}`, + }); + } + } + } else { + diags.push({ + category: ts.DiagnosticCategory.Error, + code: 1, + file: context.node.getSourceFile(), + ...toTSLocation(node.callTarget), + messageText: `Unknown expression ${exprName}`, + }); + } + } + + return diags; + } + + getSemanticDiagnostics(context: TemplateContext): ts.Diagnostic[] { + // Shortcut any type-checking if we don't have any info about what expressions are registered + if (this._plugins.length === 0) { + return []; + } + + const parsed = parseExpression(context.text.trim(), { strict: false }); + return this.getDiagnosticsForNode(context, parsed); + } + + getSyntacticDiagnostics(context: TemplateContext): ts.Diagnostic[] { + const parsed = parseExpression(context.text.trim(), { strict: false }); + + if (parsed.error) { + return [ + { + category: ts.DiagnosticCategory.Error, + code: 1, + file: context.node.getSourceFile(), + ...toTSLocation(parsed), + messageText: parsed.error.message, + }, + ]; + } + + return []; + } +} diff --git a/language/typescript-expression-plugin/src/transforms.ts b/language/typescript-expression-plugin/src/transforms.ts new file mode 100644 index 00000000..6d6effe5 --- /dev/null +++ b/language/typescript-expression-plugin/src/transforms.ts @@ -0,0 +1,44 @@ +import type { FunctionType, FunctionTypeParameters } from '@player-tools/xlr'; +import { simpleTransformGenerator } from '@player-tools/xlr-sdk'; + +export const toFunction = simpleTransformGenerator( + 'ref', + 'Expressions', + (exp) => { + if (!exp.genericArguments || exp.ref !== 'ExpressionHandler') { + return exp; + } + + const [args, returnType] = exp.genericArguments; + + const parameters: Array = ( + args.type === 'tuple' ? args.elementTypes : [] + ).map((elementType, index) => { + return { + name: + elementType.name ?? + elementType.type.name ?? + elementType.type.title ?? + `arg_${index}`, + + type: { + name: + elementType.name ?? + elementType.type.name ?? + elementType.type.title ?? + `arg_${index}`, + ...elementType.type, + }, + optional: + elementType.optional === true ? elementType.optional : undefined, + }; + }); + + return { + ...exp, + type: 'function', + parameters, + returnType, + } as FunctionType as any; + } +); diff --git a/language/typescript-expression-plugin/src/utils.ts b/language/typescript-expression-plugin/src/utils.ts new file mode 100644 index 00000000..39277542 --- /dev/null +++ b/language/typescript-expression-plugin/src/utils.ts @@ -0,0 +1,94 @@ +import type { Position } from 'vscode-languageserver-types'; +import type { ExpressionNode, NodeLocation } from '@player-ui/player'; +import { parseTree } from 'jsonc-parser'; +import type { Node } from 'jsonc-parser'; + +/** Check if the vscode position overlaps with the expression location */ +export function isInRange(position: Position, location: NodeLocation) { + return ( + position.character >= location.start.character && + position.character <= location.end.character + ); +} + +/** Find the closest marked token at the given position */ +export function getTokenAtPosition( + node: ExpressionNode, + position: Position +): ExpressionNode | undefined { + if (node.type === 'CallExpression') { + const anyArgs = node.args.find((arg) => { + return getTokenAtPosition(arg, position); + }); + + if (anyArgs) { + return anyArgs; + } + + const asTarget = getTokenAtPosition(node.callTarget, position); + if (asTarget) { + return asTarget; + } + } + + if (node.type === 'Assignment') { + const asTarget = + getTokenAtPosition(node.left, position) ?? + getTokenAtPosition(node.right, position); + if (asTarget) { + return asTarget; + } + } + + // Lastly check for yourself + if (node.location && isInRange(position, node.location)) { + return node; + } +} + +/** Get the location info that TS expects for it's diags */ +export function toTSLocation(node: ExpressionNode): ts.TextSpan { + const start = node.location?.start.character; + const end = node.location?.end.character; + if (start === undefined || end === undefined) { + return { + start: 0, + length: 0, + }; + } + + return { + start, + length: end - start, + }; +} + +/** ExpressionNode -> raw value */ +export function convertExprToValue(exprNode: ExpressionNode): any { + let val; + + if (exprNode.type === 'Literal') { + val = exprNode.value; + } else if (exprNode.type === 'Object') { + val = {}; + exprNode.attributes.forEach((prop) => { + val[convertExprToValue(prop.key)] = convertExprToValue(prop.value); + }); + } else if (exprNode.type === 'ArrayExpression') { + val = exprNode.elements.map(convertExprToValue); + } + + return val; +} + +/** ExpressionNode -> JSONC Node */ +export function convertExprToJSONNode( + exprNode: ExpressionNode +): Node | undefined { + const val = convertExprToValue(exprNode); + if (val === undefined) { + return undefined; + } + + return parseTree(JSON.stringify(val)); +} diff --git a/language/typescript-expression-plugin/src/virtual-service-host.ts b/language/typescript-expression-plugin/src/virtual-service-host.ts new file mode 100644 index 00000000..3a4f3c63 --- /dev/null +++ b/language/typescript-expression-plugin/src/virtual-service-host.ts @@ -0,0 +1,72 @@ +import type * as ts from 'typescript/lib/tsserverlibrary'; + +export default class VirtualServiceHost implements ts.LanguageServiceHost { + private readonly files = new Map(); + private readonly typescript: typeof ts; + private readonly compilerOptions: ts.CompilerOptions; + private readonly workspacePath: string; + + constructor( + typescript: typeof ts, + compilerOptions: ts.CompilerOptions, + workspacePath: string + ) { + this.typescript = typescript; + this.compilerOptions = compilerOptions; + this.workspacePath = workspacePath; + } + + withFile(fileName: string, content: string, callback: () => T): T { + this.files.set(fileName, content); + const result = callback(); + this.files.delete(fileName); + return result; + } + + getCompilationSettings() { + return this.compilerOptions; + } + + getScriptFileNames() { + return Array.from(this.files.keys()); + } + + getScriptKind() { + return this.typescript.ScriptKind.TS; + } + + getScriptVersion() { + return '0'; + } + + getScriptSnapshot(fileName: string) { + const fileText = this.readFile(fileName); + if (fileText) { + return this.typescript.ScriptSnapshot.fromString(fileText); + } + } + + getCurrentDirectory() { + return this.workspacePath; + } + + getDefaultLibFileName(options: ts.CompilerOptions) { + return this.typescript.getDefaultLibFilePath(options); + } + + fileExists(path: string): boolean { + return path.includes('node_modules') + ? this.typescript.sys.fileExists(path) + : this.files.has(path); + } + + readFile(path: string, encoding?: string | undefined): string | undefined { + return path.includes('node_modules') + ? this.typescript.sys.readFile(path, encoding) + : this.files.get(path); + } + + useCaseSensitiveFileNames() { + return true; + } +} diff --git a/language/vscode-player-syntax/.vscodeignore b/language/vscode-player-syntax/.vscodeignore deleted file mode 100644 index f369b5e5..00000000 --- a/language/vscode-player-syntax/.vscodeignore +++ /dev/null @@ -1,4 +0,0 @@ -.vscode/** -.vscode-test/** -.gitignore -vsc-extension-quickstart.md diff --git a/language/vscode-player-syntax/BUILD b/language/vscode-player-syntax/BUILD deleted file mode 100644 index 0998062c..00000000 --- a/language/vscode-player-syntax/BUILD +++ /dev/null @@ -1,15 +0,0 @@ -load("@rules_player//player/vsce:index.bzl", "vsce") - -vsce( - name = "vscode-plugin", - substitutions = { - "__VERSION__": "{STABLE_VERSION}", - "0.0.0-PLACEHOLDER": "{STABLE_VERSION}", - "__GIT_COMMIT__": "{STABLE_GIT_COMMIT}", - }, - data = [ - "package.json", - ".vscodeignore", - "language-configuration.json" - ] + glob(["syntaxes/*"]) -) \ No newline at end of file diff --git a/language/vscode-player-syntax/language-configuration.json b/language/vscode-player-syntax/language-configuration.json deleted file mode 100644 index 2b1e4e94..00000000 --- a/language/vscode-player-syntax/language-configuration.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "comments": { - // symbol used for single line comment. Remove this entry if your language does not support line comments - "lineComment": "//", - // symbols used for start and end a block comment. Remove this entry if your language does not support block comments - "blockComment": ["/*", "*/"] - }, - // symbols used as brackets - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - // symbols that are auto closed when typing - "autoClosingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"] - ], - // symbols that can be used to surround a selection - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"] - ] -} diff --git a/language/vscode-player-syntax/package.json b/language/vscode-player-syntax/package.json deleted file mode 100644 index e8fb9a8f..00000000 --- a/language/vscode-player-syntax/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "player-ui-vscode-syntax", - "displayName": "Player VSCode Syntax", - "description": "", - "publisher": "player-oss", - "version": "0.0.0-PLACEHOLDER", - "engines": { - "vscode": "^1.56.0" - }, - "files": [ - "player-syntax.vsix", - "syntaxes", - "language-configuration.json" - ], - "categories": [ - "Programming Languages" - ], - "keywords": [ - "player", - "vscode" - ], - "contributes": { - "languages": [ - { - "id": "source.player.binding", - "extensions": [ - ".player.binding" - ] - }, - { - "id": "source.player.expression", - "extensions": [ - ".player.expression" - ] - } - ], - "grammars": [ - { - "language": "source.player.binding", - "scopeName": "source.player.binding", - "path": "./syntaxes/player-binding.tmLanguage.json" - }, - { - "language": "source.player.expression", - "scopeName": "source.player.expression", - "path": "./syntaxes/player-expression.tmLanguage.json" - }, - { - "injectTo": [ - "source.js", - "source.ts", - "source.js.jsx", - "source.tsx", - "source.vue" - ], - "scopeName": "inline.player.expression", - "path": "./syntaxes/player-expression-inline.json", - "embeddedLanguages": { - "meta.embedded.block.expression": "source.player.expression" - } - }, - { - "injectTo": [ - "source.js", - "source.ts", - "source.js.jsx", - "source.tsx", - "source.vue" - ], - "scopeName": "inline.player.binding", - "path": "./syntaxes/player-binding-inline.json", - "embeddedLanguages": { - "meta.embedded.block.binding": "source.player.binding" - } - } - ] - } -} diff --git a/language/vscode-player-syntax/syntaxes/player-binding-inline.json b/language/vscode-player-syntax/syntaxes/player-binding-inline.json deleted file mode 100644 index 3cd1354a..00000000 --- a/language/vscode-player-syntax/syntaxes/player-binding-inline.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "fileTypes": ["js", "jsx", "ts", "tsx", "vue"], - "injectionSelector": "L:source -string -comment", - "patterns": [ - { - "name": "taggedTemplates", - "contentName": "meta.embedded.block.binding", - "begin": "b(`)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.string.template.begin.js" - } - }, - "end": "`", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.template.end.js" - } - }, - "patterns": [{ "include": "source.player.binding" }] - } - ], - "scopeName": "inline.player.binding" -} diff --git a/language/vscode-player-syntax/syntaxes/player-binding.tmLanguage.json b/language/vscode-player-syntax/syntaxes/player-binding.tmLanguage.json deleted file mode 100644 index 62178b51..00000000 --- a/language/vscode-player-syntax/syntaxes/player-binding.tmLanguage.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", - "name": "Player Binding", - "patterns": [{ "include": "#binding" }], - "scopeName": "source.player.binding", - "repository": { - "binding": { - "patterns": [ - { "include": "#modelRef" }, - { "include": "#separator" }, - { "include": "#optionallyQuotedSegment" }, - { "include": "#identifier" } - ] - }, - "bracketSegment": { - "begin": "\\[", - "end": "\\]", - "beginCaptures": { "0": { "name": "keyword.operator.eq" } }, - "endCaptures": { "0": { "name": "keyword.operator.eq" } }, - - "patterns": [ - { "include": "#optionallyQuotedSegment" }, - { "name": "keyword.operator.eq", "match": "={1,3}" }, - { "include": "#optionallyQuotedSegment" } - ] - }, - "expressionRef": { - "begin": "`", - "end": "`", - "patterns": [{ "include": "source.player.expression" }] - }, - "identifier": { - "name": "entity.other.attribute-name", - "match": "[\\w\\-@]+" - }, - "modelRef": { - "begin": "{{", - "end": "}}", - "patterns": [{ "include": "source.player.binding" }] - }, - "separator": { - "name": "keyword.control", - "match": "\\." - }, - "optionallyQuotedSegment": { - "patterns": [ - { - "name": "string.quoted.single.js", - "begin": "'", - "end": "'", - "beginCaptures": { - "0": { "name": "punctuation.definition.string.begin.js" } - }, - "endCaptures": { - "0": { "name": "punctuation.definition.string.end.js" } - }, - "patterns": [ - { "include": "#escapes" }, - { - "name": "constant.character.escape.newline.js", - "match": "\\\n" - }, - { - "name": "invalid.illegal.character-not-allowed-here.js", - "match": "\n" - } - ] - }, - { - "name": "string.quoted.double.js", - "begin": "\"", - "end": "\"", - "beginCaptures": { - "0": { "name": "punctuation.definition.string.begin.js" } - }, - "endCaptures": { - "0": { "name": "punctuation.definition.string.end.js" } - }, - "patterns": [ - { "include": "#escapes" }, - { - "name": "constant.character.escape.newline.js", - "match": "\\\n" - }, - { - "name": "invalid.illegal.character-not-allowed-here.js", - "match": "\n" - } - ] - }, - { "include": "#identifier" } - ] - } - } -} diff --git a/language/vscode-player-syntax/syntaxes/player-expression-inline.json b/language/vscode-player-syntax/syntaxes/player-expression-inline.json deleted file mode 100644 index bfc73dc2..00000000 --- a/language/vscode-player-syntax/syntaxes/player-expression-inline.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "fileTypes": ["js", "jsx", "ts", "tsx", "vue"], - "injectionSelector": "L:source -string -comment", - "patterns": [ - { - "name": "taggedTemplates", - "contentName": "meta.embedded.block.expression", - "begin": "e(`)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.string.template.begin.js" - } - }, - "end": "`", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.template.end.js" - } - }, - "patterns": [{ "include": "source.player.expression" }] - } - ], - "scopeName": "inline.player.expression" -} diff --git a/language/vscode-player-syntax/syntaxes/player-expression.tmLanguage.json b/language/vscode-player-syntax/syntaxes/player-expression.tmLanguage.json deleted file mode 100644 index ccfe3ceb..00000000 --- a/language/vscode-player-syntax/syntaxes/player-expression.tmLanguage.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", - "name": "Player Expressions", - "patterns": [{ "include": "#expression" }], - "scopeName": "source.player.expression", - "repository": { - "expression": { - "patterns": [ - { "include": "#function-call" }, - { "include": "#templateExpression" }, - { "include": "#number" }, - { "include": "#operator" }, - { "include": "#separator" }, - { "include": "source.player.binding#modelRef" }, - { "include": "source.player.binding#optionallyQuotedSegment" }, - { "include": "#identifier" } - ] - }, - "templateExpression": { - "name": "meta.template.expression.js", - "begin": "\\$\\{", - "end": "\\}", - "beginCaptures": { - "0": { "name": "punctuation.definition.template-expression.begin.js" } - }, - "endCaptures": { - "0": { "name": "punctuation.definition.template-expression.end.js" } - }, - "patterns": [{ "include": "source.js" }] - }, - "identifier": { - "name": "entity.other.attribute-name", - "match": "\\w+" - }, - "number": { - "match": "(\\d+)(\\.)?(\\d+)?", - "captures": { - "1": { "name": "constant.numerical.decimal.js" }, - "2": { "name": "meta.delimiter.decimal.period.js" }, - "3": { "name": "constant.numerical.decimal.js" } - } - }, - "operator": { - "name": "keyword.operator.arithmetic.js", - "match": "[*-+/=]" - }, - "separator": { - "name": "punctuation.separator.comma.js", - "match": "\\," - }, - "function-call": { - "begin": "(\\w+)(\\()", - "end": "\\)", - "beginCaptures": { - "1": { "name": "entity.name.function.js" }, - "2": { "name": "keyword.operator.eq" } - }, - "endCaptures": { - "0": { "name": "keyword.operator.eq" } - }, - "patterns": [ - { "include": "#templateExpression" }, - { "include": "#number" }, - { "include": "#separator" }, - { "include": "#operator" }, - { "include": "source.player.binding" }, - { "include": "#identifier" } - ] - } - } -} diff --git a/package.json b/package.json index 09d05105..48601daf 100644 --- a/package.json +++ b/package.json @@ -18,18 +18,14 @@ "dependencies": { "@auto-it/version-file": "^10.37.2", "@babel/cli": "^7.15.7", - "duplicate-package-checker-webpack-plugin": "^3.0.0", - "uuid": "^8.3.2", "@babel/core": "^7.15.5", "@babel/eslint-parser": "^7.15.8", "@babel/plugin-transform-react-jsx-source": "^7.18.6", "@babel/plugin-transform-runtime": "^7.15.8", "@babel/preset-env": "^7.15.6", - "style-loader": "^1.3.0", "@babel/preset-react": "^7.14.5", "@babel/preset-typescript": "^7.15.0", "@babel/register": "^7.17.7", - "babel-loader": "^8.2.5", "@babel/runtime": "7.15.4", "@bazel/typescript": "^4.4.2", "@chakra-ui/react": "^1.0.0", @@ -43,8 +39,8 @@ "@kendallgassner/eslint-plugin-package-json": "^0.2.1", "@oclif/core": "1.9.0", "@oclif/plugin-legacy": "^1.2.7", - "@player-ui/logger": "^0.2.0", - "@player-ui/types": "^0.2.0", + "@player-ui/player": "0.4.0-next.7", + "@player-ui/types": "0.4.0-next.7", "@reduxjs/toolkit": "^1.6.1", "@rollup/plugin-image": "^2.1.1", "@rollup/plugin-json": "^4.1.0", @@ -69,6 +65,8 @@ "@typescript/vfs": "^1.4.0", "all-contributors-cli": "^6.20.0", "auto": "^10.37.2", + "babel-loader": "^8.2.5", + "bundle-analyzer": "^0.0.6", "c8": "^7.10.0", "case-sensitive-paths-webpack-plugin": "^2.3.0", "chalk": "^4.0.1", @@ -80,6 +78,7 @@ "css-loader": "^3.6.0", "dequal": "^2.0.2", "detect-indent": "^6.0.0", + "duplicate-package-checker-webpack-plugin": "^3.0.0", "elegant-spinner": "^2.0.0", "esbuild": "^0.13.15", "eslint": "^8.0.1", @@ -137,16 +136,20 @@ "rollup": "^2.60.1", "rollup-plugin-dts": "^4.0.1", "rollup-plugin-esbuild": "^4.7.2", + "rollup-plugin-node-externals": "^5.0.3", "rollup-plugin-string": "^3.0.0", "rollup-plugin-styles": "^4.0.0", "signale": "^1.4.0", "source-map-js": "^1.0.2", "std-mocks": "^1.0.1", + "style-loader": "^1.3.0", "tapable-ts": "^0.1.0", "timm": "^1.7.1", "ts-loader": "^5.3.3", "ts-node": "^10.4.0", "typescript": "4.8.4", + "typescript-template-language-service-decorator": "^2.3.1", + "uuid": "^8.3.2", "vsce": "^1.93.0", "vscode-languageserver": "^6.1.1", "vscode-languageserver-textdocument": "^1.0.1", diff --git a/scripts/yarn-link-setup.js b/scripts/yarn-link-setup.js index aad8d67b..ef5a851b 100755 --- a/scripts/yarn-link-setup.js +++ b/scripts/yarn-link-setup.js @@ -29,10 +29,4 @@ dependencyMap.forEach(([pkgName, pkgPath]) => { } execSync(`ln -sf ${path.join(rootDir, pkgPath)} ${nodeModDir}`); - - if (!fs.existsSync(nodeModDir)) { - return; - } - - execSync(`cd ${nodeModDir} && yarn link`); }); diff --git a/xlr/converters/src/__tests__/__snapshots__/ts-to-common.test.ts.snap b/xlr/converters/src/__tests__/__snapshots__/ts-to-common.test.ts.snap index 47d2cad5..29d52be2 100644 --- a/xlr/converters/src/__tests__/__snapshots__/ts-to-common.test.ts.snap +++ b/xlr/converters/src/__tests__/__snapshots__/ts-to-common.test.ts.snap @@ -1457,3 +1457,63 @@ Array [ }, ] `; + +exports[`Variable Exports gets named tuple members 1`] = ` +Array [ + Object { + "additionalItems": false, + "elementTypes": Array [ + Object { + "name": "argName", + "optional": undefined, + "type": Object { + "type": "string", + }, + }, + Object { + "name": "argValue", + "optional": undefined, + "type": Object { + "type": "string", + }, + }, + ], + "genericTokens": undefined, + "minItems": 2, + "name": "Foo", + "source": "filename.ts", + "title": "Foo", + "type": "tuple", + }, +] +`; + +exports[`Variable Exports named tuples in generics 1`] = ` +Array [ + Object { + "additionalItems": false, + "elementTypes": Array [ + Object { + "name": "argName", + "optional": undefined, + "type": Object { + "type": "string", + }, + }, + Object { + "name": "argValue", + "optional": undefined, + "type": Object { + "type": "string", + }, + }, + ], + "genericTokens": undefined, + "minItems": 2, + "name": "Foo", + "source": "filename.ts", + "title": "Bar", + "type": "tuple", + }, +] +`; diff --git a/xlr/converters/src/__tests__/ts-to-common.test.ts b/xlr/converters/src/__tests__/ts-to-common.test.ts index 972cf5d8..10595714 100644 --- a/xlr/converters/src/__tests__/ts-to-common.test.ts +++ b/xlr/converters/src/__tests__/ts-to-common.test.ts @@ -654,6 +654,18 @@ describe('Variable Exports', () => { expect(XLR).toMatchSnapshot(); }); + it('gets named tuple members', () => { + const sc = ` + export type Foo = [argName: string, argValue: string]; + `; + + const { sf, tc } = setupTestEnv(sc); + const converter = new TsConverter(tc); + const XLR = converter.convertSourceFile(sf).data.types; + + expect(XLR).toMatchSnapshot(); + }); + it('Arrow function with parameters', () => { const sc = ` interface Bar { @@ -676,6 +688,19 @@ describe('Variable Exports', () => { expect(XLR).toMatchSnapshot(); }); + it('named tuples in generics', () => { + const sc = ` + type Foo = T; + export type Bar = Foo<[argName: string, argValue: string]>; + `; + + const { sf, tc } = setupTestEnv(sc); + const converter = new TsConverter(tc); + const XLR = converter.convertSourceFile(sf).data.types; + + expect(XLR).toMatchSnapshot(); + }); + it('Aliased Arrow function exports its own name', () => { const sc = ` interface Bar { diff --git a/xlr/sdk/src/__tests__/__snapshots__/sdk.test.ts.snap b/xlr/sdk/src/__tests__/__snapshots__/sdk.test.ts.snap index aa437abc..f5c34310 100644 --- a/xlr/sdk/src/__tests__/__snapshots__/sdk.test.ts.snap +++ b/xlr/sdk/src/__tests__/__snapshots__/sdk.test.ts.snap @@ -2334,7 +2334,7 @@ Players can get field type information from the 'schema' definition, thus to dec }, }, ], - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", "title": "InputAsset.metaData.beacon", "type": "or", }, @@ -2456,7 +2456,7 @@ Players can get field type information from the 'schema' definition, thus to dec }, }, ], - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", "title": "InputAsset.metaData.beacon", "type": "or", }, @@ -2484,7 +2484,7 @@ Players can get field type information from the 'schema' definition, thus to dec "required": false, }, }, - "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/181/execroot/player/plugins/reference-assets/core/src/assets/input/types.ts", + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", "title": "InputAsset", "type": "object", } diff --git a/xlr/utils/src/__tests__/documentation.test.ts b/xlr/utils/src/__tests__/documentation.test.ts new file mode 100644 index 00000000..c3e382ac --- /dev/null +++ b/xlr/utils/src/__tests__/documentation.test.ts @@ -0,0 +1,115 @@ +import type { FunctionType, OrType, TupleType } from '@player-tools/xlr'; +import { createDocString } from '../documentation'; + +describe('docs', () => { + it('or', () => { + const type1: OrType = { + type: 'or', + or: [ + { + type: 'string', + }, + { + type: 'array', + elementType: { + type: 'string', + }, + }, + ], + }; + + expect(createDocString(type1)).toMatchInlineSnapshot( + `"string | Array"` + ); + }); + + it('function', () => { + const type1: FunctionType = { + type: 'function', + name: 'testABC', + parameters: [ + { + name: 'a', + type: { + type: 'string', + }, + }, + { + name: 'b', + type: { + type: 'array', + elementType: { + type: 'string', + }, + }, + }, + ], + returnType: { + type: 'string', + }, + }; + + expect(createDocString(type1)).toMatchInlineSnapshot( + `"function testABC(a: string, b: Array): string"` + ); + }); + + it('tuple', () => { + const type1: TupleType = { + type: 'tuple', + name: 'testABC', + elementTypes: [ + { + name: 'a', + type: { + type: 'string', + }, + }, + { + type: { + type: 'array', + elementType: { + type: 'string', + }, + }, + }, + ], + minItems: 2, + additionalItems: false, + }; + + expect(createDocString(type1)).toMatchInlineSnapshot( + `"[a: string, Array]"` + ); + }); + + it('const', () => { + const type1: OrType = { + type: 'or', + or: [ + { + type: 'string', + const: 'abc', + }, + { + type: 'number', + const: 123, + }, + { + type: 'boolean', + const: true, + }, + { + type: 'array', + elementType: { + type: 'string', + }, + }, + ], + }; + + expect(createDocString(type1)).toMatchInlineSnapshot( + `"'abc' | 123 | true | Array"` + ); + }); +}); diff --git a/xlr/utils/src/documentation.ts b/xlr/utils/src/documentation.ts new file mode 100644 index 00000000..5eab98a4 --- /dev/null +++ b/xlr/utils/src/documentation.ts @@ -0,0 +1,241 @@ +import { SymbolDisplayPartKind, displayPartsToString } from 'typescript'; +import type { SymbolDisplayPart } from 'typescript'; +import type { NodeType } from '@player-tools/xlr'; +import { isPrimitiveTypeNode } from './type-checks'; + +/** Like `.join()` but for arrays */ +function insertBetweenElements(array: Array, separator: T): T[] { + return array.reduce((acc, item, index) => { + if (index === 0) { + return [item]; + } + + return [...acc, separator, item]; + }, [] as T[]); +} + +/** + * Generate a documentation string for a given node + * + * @param node - The source node to author the docs string for + * @returns - documentation string + */ +export function createTSDocString(node: NodeType): Array { + if (node.type === 'ref') { + return [ + { + text: node.ref, + kind: SymbolDisplayPartKind.keyword as any, + }, + ]; + } + + if (node.type === 'or' || node.type === 'and') { + const items = node.type === 'and' ? node.and : node.or; + + return insertBetweenElements( + items.map((subnode) => createTSDocString(subnode)), + [ + { + kind: SymbolDisplayPartKind.punctuation as any, + text: node.type === 'and' ? ' & ' : ' | ', + }, + ] + ).flat(); + } + + if (node.type === 'function') { + return [ + { + kind: SymbolDisplayPartKind.keyword as any, + text: 'function', + }, + { + kind: SymbolDisplayPartKind.space as any, + text: ' ', + }, + ...(node.name + ? [{ text: node.name, kind: SymbolDisplayPartKind.methodName }] + : []), + { + kind: SymbolDisplayPartKind.punctuation as any, + text: '(', + }, + ...insertBetweenElements( + node.parameters.map((p) => { + if (p.name) { + return [ + { + kind: SymbolDisplayPartKind.parameterName as any, + text: p.name, + }, + { + kind: SymbolDisplayPartKind.punctuation as any, + text: p.optional ? '?' : '', + }, + { + kind: SymbolDisplayPartKind.punctuation as any, + text: ': ', + }, + ...createTSDocString(p.type), + ]; + } + + return createTSDocString(p.type); + }), + [ + { + kind: SymbolDisplayPartKind.punctuation as any, + text: ', ', + }, + ] + ).flat(), + { + kind: SymbolDisplayPartKind.punctuation as any, + text: ')', + }, + ...(node.returnType + ? [ + { + kind: SymbolDisplayPartKind.punctuation as any, + text: ': ', + }, + ...createTSDocString(node.returnType), + ] + : []), + ]; + } + + if (node.type === 'tuple') { + return [ + { + kind: SymbolDisplayPartKind.punctuation as any, + text: '[', + }, + ...insertBetweenElements( + node.elementTypes.map((t) => { + if (t.name) { + return [ + { + kind: SymbolDisplayPartKind.propertyName as any, + text: t.name, + }, + { + kind: SymbolDisplayPartKind.punctuation as any, + text: ': ', + }, + ...createTSDocString(t.type), + ]; + } + + return createTSDocString(t.type); + }), + [ + { + kind: SymbolDisplayPartKind.punctuation as any, + text: ', ', + }, + ] + ).flat(), + { + kind: SymbolDisplayPartKind.punctuation as any, + text: ']', + }, + ]; + } + + if (node.type === 'array') { + return [ + { + kind: SymbolDisplayPartKind.interfaceName as any, + text: 'Array', + }, + { + kind: SymbolDisplayPartKind.punctuation as any, + text: '<', + }, + ...createTSDocString(node.elementType), + { + kind: SymbolDisplayPartKind.punctuation as any, + text: '>', + }, + ]; + } + + if (node.type === 'record') { + return [ + { + kind: SymbolDisplayPartKind.interfaceName as any, + text: 'Record', + }, + { + kind: SymbolDisplayPartKind.punctuation as any, + text: '<', + }, + ...createTSDocString(node.keyType), + { + kind: SymbolDisplayPartKind.punctuation as any, + text: ', ', + }, + ...createTSDocString(node.valueType), + { + kind: SymbolDisplayPartKind.punctuation as any, + text: '>', + }, + ]; + } + + if ( + (node.type === 'string' || + node.type === 'boolean' || + node.type === 'number') && + node.const !== undefined + ) { + return [ + { + kind: SymbolDisplayPartKind.keyword as any, + text: + typeof node.const === 'string' + ? `'${node.const}'` + : String(node.const), + }, + ]; + } + + if (isPrimitiveTypeNode(node) && node.type !== 'null') { + return [ + { + kind: SymbolDisplayPartKind.keyword as any, + text: node.type, + }, + ]; + } + + if (node.type === 'object' && node.name) { + return [ + { + kind: SymbolDisplayPartKind.interfaceName as any, + text: node.name, + }, + ]; + } + + return [ + { + kind: SymbolDisplayPartKind.localName as any, + text: node.type, + }, + ]; +} + +/** Convert the TS SymbolDisplayParts into a single string */ +export function symbolDisplayToString( + displayParts: Array +): string { + return displayPartsToString(displayParts); +} + +/** Create a documentation string from node */ +export function createDocString(node: NodeType): string { + return symbolDisplayToString(createTSDocString(node)); +} diff --git a/xlr/utils/src/index.ts b/xlr/utils/src/index.ts index ae9e776c..8d23e8e3 100644 --- a/xlr/utils/src/index.ts +++ b/xlr/utils/src/index.ts @@ -3,3 +3,4 @@ export * from './ts-helpers'; export * from './type-checks'; export * from './validation-helpers'; export * from './test-helpers'; +export * from './documentation'; diff --git a/yarn.lock b/yarn.lock index 2c201433..9ac68346 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3204,18 +3204,41 @@ dependencies: "@octokit/openapi-types" "^12.11.0" -"@player-ui/logger@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@player-ui/logger/-/logger-0.2.0.tgz#8cda9d07922a2f1a4090cb849a42f7e9499fbda9" - integrity sha512-rwWOuWDRCEsLv8SpHJgpVei18PcXLzr/F6ZS8SPR2UIlZ4y6T1TxPd/qjIdPMs6CeP5pzOVeZVIevhDQNHO+lQ== +"@player-ui/partial-match-registry@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/partial-match-registry/-/partial-match-registry-0.4.0-next.7.tgz#579710d4cee77c8a75dfda02b3c2f74652e56dfa" + integrity sha512-JCoIZvH+VPmrDJECtHxD1p6quzYAlvKCKwpcLTb/clIYIR5xXr0H5xqqkQi+32y9nZjIkj9p8Tw0qmQ/oLplvg== dependencies: "@babel/runtime" "7.15.4" - tapable-ts "^0.1.0" + "@types/dlv" "^1.1.2" + dlv "^1.1.3" + sorted-array "^2.0.4" -"@player-ui/types@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@player-ui/types/-/types-0.2.0.tgz#72990b70621d65ceebf02da9f813481e8eb17692" - integrity sha512-Lj7XNWQ9bHeVQbPJQwObXhYJddvr5iEhFCivCdbREuqiuF7RhG6Sodn3nT88L8EQPr78n88I7oxD6G8fQ/iEjw== +"@player-ui/player@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/player/-/player-0.4.0-next.7.tgz#d0e6152badd077474a2c015d00396c59f90de1a2" + integrity sha512-0SlssdS7uYL5XO0kKg5mt9LqTQ+2Zxb82Z4I4P7AE9FdCLjGDU6bpH6Sm0Odf9UK0kmwvael/vcEDihunzFPEw== + dependencies: + "@babel/runtime" "7.15.4" + "@player-ui/partial-match-registry" "0.4.0-next.7" + "@player-ui/types" "0.4.0-next.7" + "@types/nested-error-stacks" "^2.1.0" + "@types/parsimmon" "^1.10.0" + arr-flatten "^1.1.0" + dequal "^2.0.2" + ebnf "^1.9.0" + error-polyfill "^0.1.3" + nested-error-stacks "^2.1.1" + p-defer "^3.0.0" + parsimmon "^1.12.0" + queue-microtask "^1.2.3" + tapable-ts "^0.2.3" + timm "^1.6.2" + +"@player-ui/types@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/types/-/types-0.4.0-next.7.tgz#efe9daba706ca750b34680ca94a97d41bd3782c6" + integrity sha512-mU8+eXb9de2Fmhhp7K/lUXNqKDjiFEoPGBkGwWTO/dIaHPZBR6yyALBUELXRus7xBBJjm3++B/ErjmUFIGpLDw== dependencies: "@babel/runtime" "7.15.4" @@ -3583,6 +3606,11 @@ dependencies: "@types/ms" "*" +"@types/dlv@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/dlv/-/dlv-1.1.2.tgz#02d4fcc41c5f707753427867c64fdae543031fb9" + integrity sha512-OyiZ3jEKu7RtGO1yp9oOdK0cTwZ/10oE9PDJ6fyN3r9T5wkyOcvr6awdugjYdqF6KVO5eUvt7jx7rk2Eylufow== + "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" @@ -3725,6 +3753,11 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== +"@types/nested-error-stacks@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0e4caf703b874c3c4e6ba74dbc0c6acf88b8ce05" + integrity sha512-7+la7jn6iA603lBgyASoaW5Nk/R5G3+hkJ4Y0gtc9VYHlcixvm/YBV2KV92dTBpeCQJYjpN2owb5jVuKCqxOaA== + "@types/node-fetch@^2.5.12": version "2.6.2" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" @@ -3763,6 +3796,11 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/parsimmon@^1.10.0": + version "1.10.6" + resolved "https://registry.yarnpkg.com/@types/parsimmon/-/parsimmon-1.10.6.tgz#8fcf95990514d2a7624aa5f630c13bf2427f9cdd" + integrity sha512-FwAQwMRbkhx0J6YELkwIpciVzCcgEqXEbIrIn3a2P5d3kGEHQ3wVhlN3YdVepYP+bZzCYO6OjmD4o9TGOZ40rA== + "@types/prettier@^2.1.5": version "2.7.1" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e" @@ -4292,7 +4330,7 @@ absolute-path@^0.0.0: resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" integrity sha512-HQiug4c+/s3WOvEnDRxXVmNtSG5s2gJM9r19BTcqjp7BWcE48PB+Y2G6jE65kqI0LpsQeMZygt/b60Gi4KxGyA== -accepts@^1.3.7: +accepts@^1.3.7, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -4614,6 +4652,11 @@ array-differ@^3.0.0: resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + array-includes@^3.1.4, array-includes@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" @@ -5069,6 +5112,24 @@ bn.js@^5.0.0, bn.js@^5.1.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -5275,6 +5336,20 @@ builtins@^1.0.3: resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== +bundle-analyzer@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/bundle-analyzer/-/bundle-analyzer-0.0.6.tgz#c7cdd93a0d624f2eb282b487286b8b9f3e70e1ec" + integrity sha512-MXRDG8uFjrz1h716wbahzhoaS3ImVQFBs1F2XNuDjmjKReMkSNO7XaxwUe0jtKoWO6Pt98E2rlgyebGlEA4NnA== + dependencies: + express "^4.16.2" + opn "^5.2.0" + source-map "^0.7.2" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + c8@^7.10.0: version "7.12.0" resolved "https://registry.yarnpkg.com/c8/-/c8-7.12.0.tgz#402db1c1af4af5249153535d1c84ad70c5c96b14" @@ -5442,6 +5517,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz#5f1715e506e71860b4b07c50060ea6462217611e" integrity sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg== +capability@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/capability/-/capability-0.2.5.tgz#51ad87353f1936ffd77f2f21c74633a4dea88801" + integrity sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg== + capital-case@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" @@ -6116,11 +6196,23 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + content-type@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" @@ -6128,6 +6220,16 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, dependencies: safe-buffer "~5.1.1" +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -6662,6 +6764,11 @@ denodeify@^1.2.1: resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" integrity sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + depd@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -6685,6 +6792,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" @@ -6774,6 +6886,11 @@ disparity@^3.1.0: ansi-styles "^4.2.1" diff "^4.0.2" +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -6902,6 +7019,11 @@ duplicate-package-checker-webpack-plugin@^3.0.0: lodash "^4.17.4" semver "^5.4.1" +ebnf@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/ebnf/-/ebnf-1.9.0.tgz#9c2dd6052f3ed43a69c1f0b07b15bd03cefda764" + integrity sha512-LKK899+j758AgPq00ms+y90mo+2P86fMKUWD28sH0zLKUj7aL6iIH2wy4jejAMM9I2BawJ+2kp6C3mMXj+Ii5g== + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -7054,6 +7176,15 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +error-polyfill@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/error-polyfill/-/error-polyfill-0.1.3.tgz#df848b61ad8834f7a5db69a70b9913df86721d15" + integrity sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg== + dependencies: + capability "^0.2.5" + o3 "^1.0.3" + u3 "^0.1.1" + error-stack-parser@^2.0.6: version "2.1.4" resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" @@ -7714,6 +7845,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + eventemitter3@^4.0.4, eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -7816,6 +7952,43 @@ expect@^29.0.0: jest-message-util "^29.1.2" jest-util "^29.1.2" +express@^4.16.2: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -8044,6 +8217,19 @@ finalhandler@1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -8312,6 +8498,11 @@ format@^0.2.0: resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + fp-ts@^2.5.3: version "2.12.3" resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-2.12.3.tgz#d991b1e8467d325dadbb6b0ab9524f773e9c3c49" @@ -8344,6 +8535,11 @@ framesync@5.3.0: dependencies: tslib "^2.1.0" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -9033,6 +9229,17 @@ http-call@^5.1.2, http-call@^5.2.2, http-call@^5.2.4: parse-json "^4.0.0" tunnel-agent "^0.6.0" +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" @@ -9228,7 +9435,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -9319,6 +9526,11 @@ ip@^2.0.0: resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -11087,6 +11299,11 @@ meant@^1.0.1: resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c" integrity sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw== +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + "mem-fs-editor@^8.1.2 || ^9.0.0": version "9.5.0" resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-9.5.0.tgz#9368724bd37f76eebfcf24d71fc6624b01588969" @@ -11139,6 +11356,11 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -11149,6 +11371,11 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + metro-babel-transformer@0.70.3: version "0.70.3" resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.70.3.tgz#dca61852be273824a4b641bd1ecafff07ff3ad1f" @@ -11433,14 +11660,14 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.34, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.34, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" -mime@^1.3.4: +mime@1.6.0, mime@^1.3.4: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -11677,7 +11904,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -11750,6 +11977,11 @@ neo-async@^2.5.0, neo-async@^2.6.1: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +nested-error-stacks@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5" + integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== + nested-error-stacks@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b" @@ -12044,6 +12276,13 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== +o3@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/o3/-/o3-1.0.3.tgz#192ce877a882dfa6751f0412a865fafb2da1dac0" + integrity sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ== + dependencies: + capability "^0.2.5" + ob1@0.70.3: version "0.70.3" resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.70.3.tgz#f48cd5a5abf54b0c423b1b06b6d4ff4d049816cb" @@ -12166,6 +12405,13 @@ oclif@3.0.1: yeoman-generator "^5.6.1" yosay "^2.0.2" +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -12202,6 +12448,13 @@ open@^7.4.2: is-docker "^2.0.0" is-wsl "^2.1.1" +opn@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + optimist@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -12279,6 +12532,11 @@ osenv@^0.1.3: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== + p-filter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" @@ -12562,6 +12820,11 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +parsimmon@^1.12.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/parsimmon/-/parsimmon-1.18.1.tgz#d8dd9c28745647d02fc6566f217690897eed7709" + integrity sha512-u7p959wLfGAhJpSDJVYXoyMCXWYwHia78HhRBWqk7AIbxdmlrfdp5wX0l3xv/iTSH5HvhN9K7o26hwwpgS5Nmw== + pascal-case@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" @@ -12650,6 +12913,11 @@ path-parse@^1.0.5, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -13248,6 +13516,14 @@ protobufjs@6.8.8: "@types/node" "^10.1.0" long "^4.0.0" +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -13329,7 +13605,7 @@ qqjs@^0.3.11: tmp "^0.1.0" write-json-file "^4.1.1" -qs@^6.9.1: +qs@6.11.0, qs@^6.9.1: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -13361,7 +13637,7 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== -queue-microtask@^1.2.2: +queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== @@ -13381,6 +13657,21 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + rc@^1.2.7, rc@^1.2.8, rc@~1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -14095,6 +14386,11 @@ rollup-plugin-esbuild@^4.7.2: joycon "^3.0.1" jsonc-parser "^3.0.0" +rollup-plugin-node-externals@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-externals/-/rollup-plugin-node-externals-5.0.3.tgz#77522654ddbae6f28f6ae15a849d54427d5a637d" + integrity sha512-2hehUFt243Lra6tf1cJyRMz5OlTf+kn8zYyl8wR4MLkUiX+X96YVhfer7qsn2X30mnuGVvpY/oyFlJ86i9DF3Q== + rollup-plugin-string@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/rollup-plugin-string/-/rollup-plugin-string-3.0.0.tgz#fed2d6301fae1e59eb610957df757ef13fada3f0" @@ -14173,7 +14469,7 @@ rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5: dependencies: tslib "^2.1.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -14302,6 +14598,25 @@ semver@^7.3.8: dependencies: lru-cache "^6.0.0" +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + sentence-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" @@ -14323,6 +14638,16 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -14350,6 +14675,11 @@ setimmediate@^1.0.4: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -14559,6 +14889,11 @@ sort-keys@^4.0.0, sort-keys@^4.2.0: dependencies: is-plain-obj "^2.0.0" +sorted-array@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/sorted-array/-/sorted-array-2.0.4.tgz#5d62bbfe64d1bde3cf4b6b79530a6feb95afb5ae" + integrity sha512-58INzrX0rL6ttCfsGoFmOuQY5AjR6A5E/MmGKJ5JvWHOey6gOEOC6vO8K6C0Y2bQR6KJ8o8aFwHjp/mJ/HcYsQ== + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -14611,7 +14946,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: +source-map@^0.7.2, source-map@^0.7.3: version "0.7.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== @@ -14725,6 +15060,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -15105,6 +15445,11 @@ tapable-ts@^0.1.0: resolved "https://registry.yarnpkg.com/tapable-ts/-/tapable-ts-0.1.0.tgz#9ea393d3f5ed9c998ac1d5cff81a2293569ac47e" integrity sha512-pLNOGWrzcm+cc4UnyqEFK+k+thwJtJiuugKnsTrj7WPah4oZTnwDxKVNx9jhP6+RVfDOghaDIc14B5aXfV8wfQ== +tapable-ts@^0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/tapable-ts/-/tapable-ts-0.2.4.tgz#51d0c46baa8355754e2796dfcd5586ebce742d68" + integrity sha512-CKej5YdHXHZtpzJ3MHF1ADeMNVF+qiiL3xGRo0cXWqfd8BbZmjV/8KYSoXHiAhsFWYcPyxoabS61p6VxkrwBRA== + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -15278,7 +15623,7 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -timm@^1.7.1: +timm@^1.6.2, timm@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== @@ -15386,6 +15731,11 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + tough-cookie@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" @@ -15558,6 +15908,14 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + typed-rest-client@^1.8.4: version "1.8.9" resolved "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-1.8.9.tgz#e560226bcadfe71b0fb5c416b587f8da3b8f92d8" @@ -15584,6 +15942,11 @@ typescript-memoize@^1.0.0-alpha.3: resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.1.1.tgz#02737495d5df6ebf72c07ba0d002e8f4cf5ccfa0" integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== +typescript-template-language-service-decorator@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/typescript-template-language-service-decorator/-/typescript-template-language-service-decorator-2.3.1.tgz#f5e3a15cd6cdcd32aa0cbaebf2be753f8ceb46a7" + integrity sha512-+Q5+cvBtPO4VKNyyI6O+XnIne+/hq/WfNhBaF4hJP8nB8TbikTg+2h9uBMsqduwX1+kVfwG9SBSwMTtvi2Ep7w== + typescript@4.8.4: version "4.8.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" @@ -15599,6 +15962,11 @@ typical@^5.2.0: resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== +u3@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/u3/-/u3-0.1.1.tgz#5f52044f42ee76cd8de33148829e14528494b73b" + integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== + uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" @@ -15729,7 +16097,7 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@~1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -15948,6 +16316,11 @@ value-or-function@^3.0.0: resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" integrity sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg== +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + vinyl-file@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-3.0.0.tgz#b104d9e4409ffa325faadd520642d0a3b488b365"