@player-tools/xlr-sdk 0.5.3-next.0 → 0.6.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +10 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/index.legacy-esm.js +10 -0
- package/dist/index.mjs +10 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/cjs/index.cjs
CHANGED
|
@@ -46,6 +46,9 @@ var import_typescript = __toESM(require("typescript"));
|
|
|
46
46
|
|
|
47
47
|
// ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/registry/basic-registry.ts
|
|
48
48
|
var BasicXLRRegistry = class {
|
|
49
|
+
typeMap;
|
|
50
|
+
pluginMap;
|
|
51
|
+
infoMap;
|
|
49
52
|
constructor() {
|
|
50
53
|
this.typeMap = /* @__PURE__ */ new Map();
|
|
51
54
|
this.pluginMap = /* @__PURE__ */ new Map();
|
|
@@ -99,6 +102,8 @@ var BasicXLRRegistry = class {
|
|
|
99
102
|
// ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/validator.ts
|
|
100
103
|
var import_xlr_utils = require("@player-tools/xlr-utils");
|
|
101
104
|
var XLRValidator = class {
|
|
105
|
+
resolveType;
|
|
106
|
+
regexCache;
|
|
102
107
|
constructor(resolveType) {
|
|
103
108
|
this.resolveType = resolveType;
|
|
104
109
|
this.regexCache = /* @__PURE__ */ new Map();
|
|
@@ -531,6 +536,11 @@ function simpleTransformGenerator(typeToTransform, capabilityToTransform, functi
|
|
|
531
536
|
|
|
532
537
|
// ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/sdk.ts
|
|
533
538
|
var XLRSDK = class {
|
|
539
|
+
registry;
|
|
540
|
+
validator;
|
|
541
|
+
tsWriter;
|
|
542
|
+
computedNodeCache;
|
|
543
|
+
externalTransformFunctions;
|
|
534
544
|
constructor(customRegistry) {
|
|
535
545
|
this.registry = customRegistry ?? new BasicXLRRegistry();
|
|
536
546
|
this.validator = new XLRValidator(this.getType.bind(this));
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/index.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/sdk.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/registry/basic-registry.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/validator.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/utils.ts"],"sourcesContent":["export * from \"./sdk\";\nexport * from \"./types\";\nexport * from \"./registry\";\nexport * from \"./utils\";\n","import type {\n Manifest,\n NamedType,\n NodeType,\n ObjectNode,\n ObjectType,\n TransformFunction,\n TSManifest,\n} from \"@player-tools/xlr\";\nimport type { TopLevelDeclaration } from \"@player-tools/xlr-utils\";\nimport {\n computeEffectiveObject,\n resolveReferenceNode,\n} from \"@player-tools/xlr-utils\";\nimport { fillInGenerics } from \"@player-tools/xlr-utils\";\nimport type { Node } from \"jsonc-parser\";\nimport { TSWriter } from \"@player-tools/xlr-converters\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport ts from \"typescript\";\n\nimport type { XLRRegistry, Filters } from \"./registry\";\nimport { BasicXLRRegistry } from \"./registry\";\nimport type { ExportTypes } from \"./types\";\nimport { XLRValidator } from \"./validator\";\nimport { simpleTransformGenerator } from \"./utils\";\n\nexport interface GetTypeOptions {\n /** Resolves `extends` fields in objects */\n getRawType?: boolean;\n}\n\n/**\n * Abstraction for interfacing with XLRs making it more approachable to use without understanding the inner workings of the types and how they are packaged\n */\nexport class XLRSDK {\n private registry: XLRRegistry;\n private validator: XLRValidator;\n private tsWriter: TSWriter;\n private computedNodeCache: Map<string, NodeType>;\n private externalTransformFunctions: Map<string, TransformFunction>;\n\n constructor(customRegistry?: XLRRegistry) {\n this.registry = customRegistry ?? new BasicXLRRegistry();\n this.validator = new XLRValidator(this.getType.bind(this));\n this.tsWriter = new TSWriter();\n this.computedNodeCache = new Map();\n this.externalTransformFunctions = new Map();\n }\n\n /**\n * Loads definitions from a path on the filesystem\n *\n * @param inputPath - path to the directory to load (above the xlr folder)\n * @param filters - Any filters to apply when loading the types (a positive match will omit)\n * @param transforms - any transforms to apply to the types being loaded\n */\n public loadDefinitionsFromDisk(\n inputPath: string,\n filters?: Omit<Filters, \"pluginFilter\">,\n transforms?: Array<TransformFunction>\n ) {\n this.computedNodeCache.clear();\n\n const transformsToRun = [\n ...this.externalTransformFunctions.values(),\n ...(transforms ?? []),\n ];\n\n const manifest = JSON.parse(\n fs.readFileSync(path.join(inputPath, \"xlr\", \"manifest.json\")).toString(),\n (key: unknown, value: unknown) => {\n // Custom parser because JSON objects -> JS Objects, not maps\n if (typeof value === \"object\" && value !== null) {\n if (key === \"capabilities\") {\n return new Map(Object.entries(value));\n }\n }\n\n return value;\n }\n ) as Manifest;\n\n manifest.capabilities?.forEach((capabilityList, capabilityName) => {\n if (\n filters?.capabilityFilter &&\n capabilityName.match(filters?.capabilityFilter)\n )\n return;\n capabilityList.forEach((extensionName) => {\n if (!filters?.typeFilter || !extensionName.match(filters?.typeFilter)) {\n const cType: NamedType<NodeType> = JSON.parse(\n fs\n .readFileSync(\n path.join(inputPath, \"xlr\", `${extensionName}.json`)\n )\n .toString()\n );\n const effectiveType =\n transformsToRun?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n capabilityName\n ) as NamedType<NodeType>,\n cType\n ) ?? cType;\n\n this.registry.add(effectiveType, manifest.pluginName, capabilityName);\n }\n });\n });\n }\n\n /**\n * Load definitions from a js/ts file in memory\n *\n * @param manifest - The imported XLR manifest module\n * @param filters - Any filters to apply when loading the types (a positive match will omit)\n * @param transforms - any transforms to apply to the types being loaded\n */\n public async loadDefinitionsFromModule(\n manifest: TSManifest,\n filters?: Omit<Filters, \"pluginFilter\">,\n transforms?: Array<TransformFunction>\n ) {\n this.computedNodeCache.clear();\n\n const transformsToRun = [\n ...this.externalTransformFunctions.values(),\n ...(transforms ?? []),\n ];\n\n Object.keys(manifest.capabilities)?.forEach((capabilityName) => {\n if (\n filters?.capabilityFilter &&\n capabilityName.match(filters?.capabilityFilter)\n )\n return;\n const capabilityList = manifest.capabilities[capabilityName];\n capabilityList.forEach((extension) => {\n if (\n !filters?.typeFilter ||\n !extension.name.match(filters?.typeFilter)\n ) {\n const effectiveType =\n transformsToRun?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n capabilityName\n ) as NamedType<NodeType>,\n extension\n ) ?? extension;\n\n this.registry.add(effectiveType, manifest.pluginName, capabilityName);\n }\n });\n });\n }\n\n /**\n * Statically load transform function that should be applied to every XLR bundle that is imported\n */\n public addTransformFunction(name: string, fn: TransformFunction): void {\n this.externalTransformFunctions.set(name, fn);\n }\n\n /**\n * Remove any transform function loaded via the `addTransformFunction` method by name\n */\n public removeTransformFunction(name: string): void {\n this.externalTransformFunctions.delete(name);\n }\n\n /**\n * Returns a Type that has been previously loaded\n *\n * @param id - Type to retrieve\n * @param options - `GetTypeOptions`\n * @returns `NamedType<NodeType>` | `undefined`\n */\n public getType(\n id: string,\n options?: GetTypeOptions\n ): NamedType<NodeType> | undefined {\n let type = this.registry.get(id);\n if (options?.getRawType === true || !type) {\n return type;\n }\n\n if (this.computedNodeCache.has(id)) {\n return JSON.parse(JSON.stringify(this.computedNodeCache.get(id))) as\n | NamedType<NodeType>\n | undefined;\n }\n\n type = fillInGenerics(this.resolveType(type)) as NamedType;\n\n this.computedNodeCache.set(id, type);\n\n return type;\n }\n\n /**\n * Returns if a Type with `id` has been loaded into the DSK\n *\n * @param id - Type to retrieve\n * @returns `boolean`\n */\n public hasType(id: string) {\n return this.registry.has(id);\n }\n\n /**\n * Lists types that have been loaded into the SDK\n *\n * @param filters - Any filters to apply to the types returned (a positive match will omit)\n * @returns `Array<NamedTypes>`\n */\n public listTypes(filters?: Filters) {\n return this.registry.list(filters);\n }\n\n /**\n * Returns meta information around a registered type\n *\n * @param id - Name of Type to retrieve\n * @returns `TypeMetaData` | `undefined`\n */\n public getTypeInfo(id: string) {\n return this.registry.info(id);\n }\n\n /**\n * Validates if a JSONC Node follows the XLR Type registered under the `typeName` specified\n *\n * @param typeName - Registered XLR Type to use for validation\n * @param rootNode - Node to validate\n * @returns `Array<ValidationErrors>`\n */\n public validateByName(typeName: string, rootNode: Node) {\n const xlr = this.getType(typeName);\n if (!xlr) {\n throw new Error(\n `Type ${typeName} does not exist in registry, can't validate`\n );\n }\n\n return this.validator.validateType(rootNode, xlr);\n }\n\n /**\n * Validates if a JSONC Node follows the supplied XLR Type\n *\n * @param type - Type to validate against\n * @param rootNode - Node to validate\n * @returns `Array<ValidationErrors>`\n */\n public validateByType(type: NodeType, rootNode: Node) {\n return this.validator.validateType(rootNode, type);\n }\n\n /**\n * Exports the types loaded into the registry to the specified format\n *\n * @param exportType - what format to export as\n * @param importMap - a map of primitive packages to types exported from that package to add import statements\n * @param filters - filter out plugins/capabilities/types you don't want to export\n * @param transforms - transforms to apply to types before exporting them\n * @returns [filename, content][] - Tuples of filenames and content to write\n */\n public exportRegistry(\n exportType: ExportTypes,\n importMap: Map<string, string[]>,\n filters?: Filters,\n transforms?: Array<TransformFunction>\n ): [string, string][] {\n const typesToExport = this.registry.list(filters).map((type) => {\n const resolvedType = this.resolveType(type);\n const effectiveType =\n transforms?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n this.registry.info(type.name)?.capability as string\n ) as NamedType<NodeType>,\n resolvedType\n ) ?? resolvedType;\n\n return effectiveType;\n });\n\n if (exportType === \"TypeScript\") {\n const outputString = this.exportToTypeScript(typesToExport, importMap);\n return [[\"out.d.ts\", outputString]];\n }\n\n throw new Error(`Unknown export format ${exportType}`);\n }\n\n private resolveType(type: NodeType): NamedType {\n return simpleTransformGenerator(\"object\", \"any\", (objectNode) => {\n if (objectNode.extends) {\n const refName = objectNode.extends.ref.split(\"<\")[0];\n let extendedType = this.getType(refName, { getRawType: true });\n if (!extendedType) {\n throw new Error(\n `Error resolving ${objectNode.name}: can't find extended type ${refName}`\n );\n }\n\n extendedType = resolveReferenceNode(\n objectNode.extends,\n extendedType as NamedType<ObjectType>\n ) as NamedType;\n if (extendedType.type === \"object\") {\n return {\n ...computeEffectiveObject(\n extendedType as ObjectType,\n objectNode as ObjectType,\n false\n ),\n name: objectNode.name,\n description: objectNode.description,\n };\n }\n\n // if the merge isn't straightforward, defer until validation time for now\n return {\n name: objectNode.name,\n type: \"and\",\n and: [\n {\n ...objectNode,\n extends: undefined,\n },\n extendedType,\n ],\n } as unknown as ObjectNode;\n }\n\n return objectNode;\n })(type, \"any\") as NamedType;\n }\n\n private exportToTypeScript(\n typesToExport: NamedType[],\n importMap: Map<string, string[]>\n ): string {\n const referencedImports: Set<string> = new Set();\n const exportedTypes: Map<string, TopLevelDeclaration> = new Map();\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n\n let resultFile = ts.createSourceFile(\n \"output.d.ts\",\n \"\",\n ts.ScriptTarget.ES2017,\n false, // setParentNodes\n ts.ScriptKind.TS\n );\n\n typesToExport.forEach((typeNode) => {\n const { type, referencedTypes, additionalTypes } =\n this.tsWriter.convertNamedType(typeNode);\n exportedTypes.set(typeNode.name, type);\n additionalTypes?.forEach((additionalType, name) =>\n exportedTypes.set(name, additionalType)\n );\n referencedTypes?.forEach((referencedType) =>\n referencedImports.add(referencedType)\n );\n });\n\n const typesToPrint: Array<string> = [];\n\n exportedTypes.forEach((type) =>\n typesToPrint.push(\n printer.printNode(ts.EmitHint.Unspecified, type, resultFile)\n )\n );\n\n importMap.forEach((imports, packageName) => {\n const applicableImports = imports.filter((i) => referencedImports.has(i));\n resultFile = ts.factory.updateSourceFile(resultFile, [\n ts.factory.createImportDeclaration(\n /* modifiers */ undefined,\n ts.factory.createImportClause(\n false,\n undefined,\n ts.factory.createNamedImports(\n applicableImports.map((i) =>\n ts.factory.createImportSpecifier(\n false,\n undefined,\n ts.factory.createIdentifier(i)\n )\n )\n )\n ),\n ts.factory.createStringLiteral(packageName)\n ),\n ...resultFile.statements,\n ]);\n });\n\n const headerText = printer.printFile(resultFile);\n const nodeText = typesToPrint.join(\"\\n\");\n return `${headerText}\\n${nodeText}`;\n }\n}\n","import type { NamedType, NodeType } from \"@player-tools/xlr\";\nimport type { XLRRegistry, Filters, TypeMetadata } from \"./types\";\n\n/**\n * Basic example of a XLRs Registry\n */\nexport class BasicXLRRegistry implements XLRRegistry {\n private typeMap: Map<string, NamedType<NodeType>>;\n private pluginMap: Map<string, Map<string, Array<string>>>;\n private infoMap: Map<string, TypeMetadata>;\n\n constructor() {\n this.typeMap = new Map();\n this.pluginMap = new Map();\n this.infoMap = new Map();\n }\n\n /** Returns a copy of the XLR to guard against unexpected type modification */\n get(id: string): NamedType<NodeType> | undefined {\n const value = this.typeMap.get(id);\n return value ? JSON.parse(JSON.stringify(value)) : undefined;\n }\n\n add(type: NamedType<NodeType>, plugin: string, capability: string): void {\n this.typeMap.set(type.name, type);\n this.infoMap.set(type.name, { plugin, capability });\n\n if (!this.pluginMap.has(plugin)) {\n this.pluginMap.set(plugin, new Map());\n }\n\n const pluginsCapabilities = this.pluginMap.get(plugin) as Map<\n string,\n Array<string>\n >;\n\n if (!pluginsCapabilities.has(capability)) {\n pluginsCapabilities.set(capability, []);\n }\n\n const providedCapabilities = pluginsCapabilities.get(\n capability\n ) as string[];\n providedCapabilities.push(type.name);\n }\n\n has(id: string): boolean {\n return this.typeMap.has(id);\n }\n\n list(filterArgs?: Filters): NamedType<NodeType>[] {\n const validTypes: Array<string> = [];\n\n this.pluginMap.forEach((manifest, pluginName) => {\n if (\n !filterArgs?.pluginFilter ||\n !pluginName.match(filterArgs.pluginFilter)\n ) {\n manifest.forEach((types, capabilityName) => {\n if (\n !filterArgs?.capabilityFilter ||\n !capabilityName.match(filterArgs.capabilityFilter)\n ) {\n types.forEach((type) => {\n if (\n !filterArgs?.typeFilter ||\n !type.match(filterArgs.typeFilter)\n ) {\n validTypes.push(type);\n }\n });\n }\n });\n }\n });\n return validTypes.map((type) => this.get(type) as NamedType);\n }\n\n info(id: string): TypeMetadata | undefined {\n return this.infoMap.get(id);\n }\n}\n","import type { Node } from \"jsonc-parser\";\nimport type {\n ArrayType,\n NamedType,\n NodeType,\n ObjectType,\n OrType,\n PrimitiveTypes,\n RefType,\n TemplateLiteralType,\n} from \"@player-tools/xlr\";\nimport {\n makePropertyMap,\n resolveConditional,\n isPrimitiveTypeNode,\n resolveReferenceNode,\n computeEffectiveObject,\n} from \"@player-tools/xlr-utils\";\nimport type { ValidationError } from \"./types\";\n\n/**\n * Validator for XLRs on JSON Nodes\n */\nexport class XLRValidator {\n private resolveType: (id: string) => NamedType<NodeType> | undefined;\n private regexCache: Map<string, RegExp>;\n\n constructor(resolveType: (id: string) => NamedType<NodeType> | undefined) {\n this.resolveType = resolveType;\n this.regexCache = new Map();\n }\n\n /** Main entrypoint for validation */\n public validateType(\n rootNode: Node,\n xlrNode: NodeType\n ): Array<ValidationError> {\n const validationIssues = new Array<ValidationError>();\n if (xlrNode.type === \"object\") {\n if (rootNode.type === \"object\") {\n validationIssues.push(...this.validateObject(xlrNode, rootNode));\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode,\n message: `Expected an object but got an \"${rootNode.type}\"`,\n });\n }\n } else if (xlrNode.type === \"array\") {\n if (rootNode.type === \"array\") {\n validationIssues.push(...this.validateArray(rootNode, xlrNode));\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode,\n message: `Expected an array but got an \"${rootNode.type}\"`,\n });\n }\n } else if (xlrNode.type === \"template\") {\n const error = this.validateTemplate(rootNode, xlrNode);\n if (error) {\n validationIssues.push(error);\n }\n } else if (xlrNode.type === \"or\") {\n // eslint-disable-next-line no-restricted-syntax\n for (const potentialType of xlrNode.or) {\n const potentialErrors = this.validateType(rootNode, potentialType);\n if (potentialErrors.length === 0) {\n return validationIssues;\n }\n }\n\n let message: string;\n\n if (xlrNode.name) {\n message = `Does not match any of the expected types for type: '${xlrNode.name}'`;\n } else if (xlrNode.title) {\n message = `Does not match any of the expected types for property: '${xlrNode.title}'`;\n } else {\n message = `Does not match any of the types ${xlrNode.or\n .map((node) => node.name ?? node.title ?? \"<unnamed type>\")\n .join(\" | \")}`;\n }\n\n validationIssues.push({\n type: \"value\",\n node: rootNode,\n message,\n });\n } else if (xlrNode.type === \"and\") {\n const effectiveType = {\n ...this.computeIntersectionType(xlrNode.and),\n ...(xlrNode.name ? { name: xlrNode.name } : {}),\n };\n validationIssues.push(...this.validateType(rootNode, effectiveType));\n } else if (xlrNode.type === \"record\") {\n rootNode.children?.forEach((child) => {\n validationIssues.push(\n ...this.validateType(child.children?.[0] as Node, xlrNode.keyType)\n );\n validationIssues.push(\n ...this.validateType(child.children?.[1] as Node, xlrNode.valueType)\n );\n });\n } else if (xlrNode.type === \"ref\") {\n const refType = this.getRefType(xlrNode);\n if (refType === undefined) {\n validationIssues.push({\n type: \"unknown\",\n node: rootNode,\n message: `Type \"${xlrNode.ref}\" is not defined in provided bundles`,\n });\n } else {\n validationIssues.push(\n ...this.validateType(rootNode, refType as NamedType)\n );\n }\n } else if (isPrimitiveTypeNode(xlrNode)) {\n if (!this.validateLiteralType(xlrNode, rootNode)) {\n if (\n (xlrNode.type === \"string\" ||\n xlrNode.type === \"number\" ||\n xlrNode.type === \"boolean\") &&\n xlrNode.const\n ) {\n validationIssues.push({\n type: \"type\",\n node: rootNode.parent as Node,\n message: `Expected \"${xlrNode.const}\" but got \"${rootNode.value}\"`,\n });\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode.parent as Node,\n message: `Expected type \"${xlrNode.type}\" but got \"${rootNode.type}\"`,\n });\n }\n }\n } else if (xlrNode.type === \"conditional\") {\n // Resolve RefNodes in check conditions if needed\n let { right, left } = xlrNode.check;\n\n if (right.type === \"ref\") {\n right = this.getRefType(right);\n }\n\n if (left.type === \"ref\") {\n left = this.getRefType(left);\n }\n\n const resolvedXLRNode = {\n ...xlrNode,\n check: {\n left,\n right,\n },\n };\n\n const resolvedConditional = resolveConditional(resolvedXLRNode);\n if (resolvedConditional === resolvedXLRNode) {\n throw Error(\n `Unable to resolve conditional type at runtime: ${xlrNode.name}`\n );\n }\n\n validationIssues.push(\n ...this.validateType(rootNode, resolvedConditional)\n );\n } else {\n throw Error(`Unknown type ${xlrNode.type}`);\n }\n\n return validationIssues;\n }\n\n private validateTemplate(\n node: Node,\n xlrNode: TemplateLiteralType\n ): ValidationError | undefined {\n if (node.type !== \"string\") {\n return {\n type: \"type\",\n node: node.parent as Node,\n message: `Expected type \"${xlrNode.type}\" but got \"${typeof node}\"`,\n };\n }\n\n const regex = this.getRegex(xlrNode.format);\n const valid = regex.exec(node.value);\n if (!valid) {\n return {\n type: \"value\",\n node: node.parent as Node,\n message: `Does not match expected format: ${xlrNode.format}`,\n };\n }\n }\n\n private validateArray(rootNode: Node, xlrNode: ArrayType) {\n const issues: Array<ValidationError> = [];\n rootNode.children?.forEach((child) =>\n issues.push(...this.validateType(child, xlrNode.elementType))\n );\n return issues;\n }\n\n private validateObject(xlrNode: ObjectType, node: Node) {\n const issues: Array<ValidationError> = [];\n const objectProps = makePropertyMap(node);\n\n // eslint-disable-next-line guard-for-in, no-restricted-syntax\n for (const prop in xlrNode.properties) {\n const expectedType = xlrNode.properties[prop];\n const valueNode = objectProps.get(prop);\n if (expectedType.required && valueNode === undefined) {\n issues.push({\n type: \"missing\",\n node,\n message: `Property \"${prop}\" missing from type \"${xlrNode.name}\"`,\n });\n }\n\n if (valueNode) {\n issues.push(\n ...this.validateType(valueNode, expectedType.node as NamedType)\n );\n }\n }\n\n // Check if unknown keys are allowed and if they are - do the violate the constraint\n const extraKeys = Array.from(objectProps.keys()).filter(\n (key) => xlrNode.properties[key] === undefined\n );\n if (xlrNode.additionalProperties === false && extraKeys.length > 0) {\n issues.push({\n type: \"value\",\n node,\n message: `Unexpected properties on \"${xlrNode.name}\": ${extraKeys.join(\n \", \"\n )}`,\n });\n } else {\n issues.push(\n ...extraKeys.flatMap((key) =>\n this.validateType(\n objectProps.get(key) as Node,\n xlrNode.additionalProperties as NodeType\n )\n )\n );\n }\n\n return issues;\n }\n\n private validateLiteralType(expectedType: PrimitiveTypes, literalType: Node) {\n switch (expectedType.type) {\n case \"boolean\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"boolean\";\n case \"number\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"number\";\n case \"string\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"string\";\n case \"null\":\n return literalType.value === \"null\";\n case \"never\":\n return literalType === undefined;\n case \"any\":\n return literalType !== undefined;\n case \"unknown\":\n return literalType !== undefined;\n case \"undefined\":\n return true;\n default:\n return false;\n }\n }\n\n private getRefType(ref: RefType): NodeType {\n let refName = ref.ref;\n if (refName.indexOf(\"<\") > 0) {\n [refName] = refName.split(\"<\");\n }\n\n const actualType = this.resolveType(refName);\n if (!actualType) {\n throw new Error(`Error: can't resolve type reference ${refName}`);\n }\n\n return resolveReferenceNode(ref, actualType);\n }\n\n private getRegex(expString: string): RegExp {\n if (this.regexCache.has(expString)) {\n return this.regexCache.get(expString) as RegExp;\n }\n\n const exp = new RegExp(expString);\n this.regexCache.set(expString, exp);\n return exp;\n }\n\n private computeIntersectionType(types: Array<NodeType>): ObjectType | OrType {\n let firstElement = types[0];\n let effectiveType: ObjectType | OrType;\n\n if (firstElement.type === \"ref\") {\n firstElement = this.getRefType(firstElement);\n }\n\n if (firstElement.type === \"and\") {\n effectiveType = this.computeIntersectionType(firstElement.and);\n } else if (firstElement.type === \"record\") {\n effectiveType = {\n type: \"object\",\n properties: {},\n additionalProperties: firstElement.valueType,\n };\n } else if (firstElement.type !== \"or\" && firstElement.type !== \"object\") {\n throw new Error(\n `Can't compute a union with a non-object type ${firstElement.type} (${firstElement.name})`\n );\n } else {\n effectiveType = firstElement;\n }\n\n types.slice(1).forEach((type) => {\n let typeToApply = type;\n\n if (typeToApply.type === \"record\") {\n typeToApply = {\n type: \"object\",\n properties: {},\n additionalProperties: typeToApply.valueType,\n };\n }\n\n if (type.type === \"ref\") {\n typeToApply = this.getRefType(type);\n }\n\n if (typeToApply.type === \"and\") {\n typeToApply = this.computeIntersectionType([type, effectiveType]);\n }\n\n if (typeToApply.type === \"object\") {\n if (effectiveType.type === \"object\") {\n effectiveType = computeEffectiveObject(effectiveType, typeToApply);\n } else {\n effectiveType = {\n ...effectiveType,\n or: effectiveType.or.map((y) =>\n this.computeIntersectionType([y, typeToApply])\n ),\n };\n }\n } else if (typeToApply.type === \"or\") {\n if (effectiveType.type === \"object\") {\n effectiveType = {\n ...typeToApply,\n or: typeToApply.or.map((y) =>\n this.computeIntersectionType([y, effectiveType])\n ),\n };\n } else {\n throw new Error(\"unimplemented operation or x or projection\");\n }\n } else {\n throw new Error(\n `Can't compute a union with a non-object type ${typeToApply.type} (${typeToApply.name})`\n );\n }\n });\n\n return effectiveType;\n }\n}\n","/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\nimport type {\n NamedType,\n NodeTypeStrings,\n NodeTypeMap,\n TransformFunction,\n NodeType,\n ObjectProperty,\n RefNode,\n} from \"@player-tools/xlr\";\nimport { isGenericNamedType } from \"@player-tools/xlr-utils\";\n\nconst isMatchingCapability = (\n capability: string,\n capabilitiesToMatch: string | Array<string>\n): boolean => {\n if (Array.isArray(capabilitiesToMatch)) {\n return capabilitiesToMatch.includes(capability);\n }\n\n return capability === capabilitiesToMatch;\n};\n\n/**\n * Helper function for simple transforms\n * Walks an XLR tree looking for the specified node type calls the supplied function when called\n */\nexport function simpleTransformGenerator<\n T extends NodeTypeStrings = NodeTypeStrings\n>(\n typeToTransform: T,\n capabilityToTransform: string | Array<string>,\n functionToRun: (input: NodeTypeMap[T]) => NodeTypeMap[T]\n): TransformFunction {\n /** walker for an XLR tree to touch every node */\n const walker: TransformFunction = (\n n: NamedType | NodeType,\n capability: string\n ) => {\n // Run transform on base node before running on children\n if (isMatchingCapability(capability, capabilityToTransform)) {\n let node = { ...n };\n if (node.type === typeToTransform) {\n node = functionToRun(node as unknown as NodeTypeMap[T]);\n }\n\n if (node.type === \"object\") {\n const newObjectProperties: Record<string, ObjectProperty> = {};\n\n for (const key in node.properties) {\n const value = node.properties[key];\n newObjectProperties[key] = {\n required: value.required,\n node: walker(value.node, capability),\n };\n }\n\n // need to walk generic tokens\n return {\n ...node,\n properties: { ...newObjectProperties },\n ...(isGenericNamedType(node)\n ? {\n genericTokens: node.genericTokens.map((token) => {\n return {\n ...token,\n constraints: token.constraints\n ? walker(token.constraints, capability)\n : undefined,\n default: token.default\n ? walker(token.default, capability)\n : undefined,\n };\n }),\n }\n : {}),\n extends: node.extends\n ? (walker(node.extends, capability) as RefNode)\n : undefined,\n additionalProperties: node.additionalProperties\n ? walker(node.additionalProperties, capability)\n : false,\n };\n }\n\n if (node.type === \"array\") {\n return {\n ...node,\n elementType: walker(node.elementType, capability),\n };\n }\n\n if (node.type === \"and\") {\n return {\n ...node,\n and: node.and.map((element) => walker(element, capability)),\n };\n }\n\n if (node.type === \"or\") {\n return {\n ...node,\n or: node.or.map((element) => walker(element, capability)),\n };\n }\n\n if (node.type === \"ref\") {\n return {\n ...node,\n ...(node.genericArguments\n ? {\n genericArguments: node.genericArguments?.map((arg) =>\n walker(arg, capability)\n ),\n }\n : {}),\n };\n }\n\n if (node.type === \"tuple\") {\n return {\n ...node,\n elementTypes: node.elementTypes.map((element) => {\n return {\n name: element.name,\n type: walker(element.type, capability),\n optional: element.optional,\n };\n }),\n additionalItems: node.additionalItems\n ? walker(node.additionalItems, capability)\n : false,\n };\n }\n\n if (node.type === \"function\") {\n return {\n ...node,\n parameters: node.parameters.map((param) => {\n return {\n ...param,\n type: walker(param.type, capability),\n default: param.default\n ? walker(param.default, capability)\n : undefined,\n };\n }),\n returnType: node.returnType\n ? walker(node.returnType, capability)\n : undefined,\n };\n }\n\n if (node.type === \"record\") {\n return {\n ...node,\n keyType: walker(node.keyType, capability),\n valueType: walker(node.valueType, capability),\n };\n }\n\n if (node.type === \"conditional\") {\n return {\n ...node,\n check: {\n left: walker(node.check.left, capability),\n right: walker(node.check.left, capability),\n },\n value: {\n true: walker(node.value.true, capability),\n false: walker(node.value.false, capability),\n },\n };\n }\n }\n\n return n;\n };\n\n return walker;\n}\n"],"mappings":"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","names":["import_xlr_utils","import_xlr_utils","fs","path","ts"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/index.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/sdk.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/registry/basic-registry.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/validator.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/utils.ts"],"sourcesContent":["export * from \"./sdk\";\nexport * from \"./types\";\nexport * from \"./registry\";\nexport * from \"./utils\";\n","import type {\n Manifest,\n NamedType,\n NodeType,\n ObjectNode,\n ObjectType,\n TransformFunction,\n TSManifest,\n} from \"@player-tools/xlr\";\nimport type { TopLevelDeclaration } from \"@player-tools/xlr-utils\";\nimport {\n computeEffectiveObject,\n resolveReferenceNode,\n} from \"@player-tools/xlr-utils\";\nimport { fillInGenerics } from \"@player-tools/xlr-utils\";\nimport type { Node } from \"jsonc-parser\";\nimport { TSWriter } from \"@player-tools/xlr-converters\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport ts from \"typescript\";\n\nimport type { XLRRegistry, Filters } from \"./registry\";\nimport { BasicXLRRegistry } from \"./registry\";\nimport type { ExportTypes } from \"./types\";\nimport { XLRValidator } from \"./validator\";\nimport { simpleTransformGenerator } from \"./utils\";\n\nexport interface GetTypeOptions {\n /** Resolves `extends` fields in objects */\n getRawType?: boolean;\n}\n\n/**\n * Abstraction for interfacing with XLRs making it more approachable to use without understanding the inner workings of the types and how they are packaged\n */\nexport class XLRSDK {\n private registry: XLRRegistry;\n private validator: XLRValidator;\n private tsWriter: TSWriter;\n private computedNodeCache: Map<string, NodeType>;\n private externalTransformFunctions: Map<string, TransformFunction>;\n\n constructor(customRegistry?: XLRRegistry) {\n this.registry = customRegistry ?? new BasicXLRRegistry();\n this.validator = new XLRValidator(this.getType.bind(this));\n this.tsWriter = new TSWriter();\n this.computedNodeCache = new Map();\n this.externalTransformFunctions = new Map();\n }\n\n /**\n * Loads definitions from a path on the filesystem\n *\n * @param inputPath - path to the directory to load (above the xlr folder)\n * @param filters - Any filters to apply when loading the types (a positive match will omit)\n * @param transforms - any transforms to apply to the types being loaded\n */\n public loadDefinitionsFromDisk(\n inputPath: string,\n filters?: Omit<Filters, \"pluginFilter\">,\n transforms?: Array<TransformFunction>\n ) {\n this.computedNodeCache.clear();\n\n const transformsToRun = [\n ...this.externalTransformFunctions.values(),\n ...(transforms ?? []),\n ];\n\n const manifest = JSON.parse(\n fs.readFileSync(path.join(inputPath, \"xlr\", \"manifest.json\")).toString(),\n (key: unknown, value: unknown) => {\n // Custom parser because JSON objects -> JS Objects, not maps\n if (typeof value === \"object\" && value !== null) {\n if (key === \"capabilities\") {\n return new Map(Object.entries(value));\n }\n }\n\n return value;\n }\n ) as Manifest;\n\n manifest.capabilities?.forEach((capabilityList, capabilityName) => {\n if (\n filters?.capabilityFilter &&\n capabilityName.match(filters?.capabilityFilter)\n )\n return;\n capabilityList.forEach((extensionName) => {\n if (!filters?.typeFilter || !extensionName.match(filters?.typeFilter)) {\n const cType: NamedType<NodeType> = JSON.parse(\n fs\n .readFileSync(\n path.join(inputPath, \"xlr\", `${extensionName}.json`)\n )\n .toString()\n );\n const effectiveType =\n transformsToRun?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n capabilityName\n ) as NamedType<NodeType>,\n cType\n ) ?? cType;\n\n this.registry.add(effectiveType, manifest.pluginName, capabilityName);\n }\n });\n });\n }\n\n /**\n * Load definitions from a js/ts file in memory\n *\n * @param manifest - The imported XLR manifest module\n * @param filters - Any filters to apply when loading the types (a positive match will omit)\n * @param transforms - any transforms to apply to the types being loaded\n */\n public async loadDefinitionsFromModule(\n manifest: TSManifest,\n filters?: Omit<Filters, \"pluginFilter\">,\n transforms?: Array<TransformFunction>\n ) {\n this.computedNodeCache.clear();\n\n const transformsToRun = [\n ...this.externalTransformFunctions.values(),\n ...(transforms ?? []),\n ];\n\n Object.keys(manifest.capabilities)?.forEach((capabilityName) => {\n if (\n filters?.capabilityFilter &&\n capabilityName.match(filters?.capabilityFilter)\n )\n return;\n const capabilityList = manifest.capabilities[capabilityName];\n capabilityList.forEach((extension) => {\n if (\n !filters?.typeFilter ||\n !extension.name.match(filters?.typeFilter)\n ) {\n const effectiveType =\n transformsToRun?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n capabilityName\n ) as NamedType<NodeType>,\n extension\n ) ?? extension;\n\n this.registry.add(effectiveType, manifest.pluginName, capabilityName);\n }\n });\n });\n }\n\n /**\n * Statically load transform function that should be applied to every XLR bundle that is imported\n */\n public addTransformFunction(name: string, fn: TransformFunction): void {\n this.externalTransformFunctions.set(name, fn);\n }\n\n /**\n * Remove any transform function loaded via the `addTransformFunction` method by name\n */\n public removeTransformFunction(name: string): void {\n this.externalTransformFunctions.delete(name);\n }\n\n /**\n * Returns a Type that has been previously loaded\n *\n * @param id - Type to retrieve\n * @param options - `GetTypeOptions`\n * @returns `NamedType<NodeType>` | `undefined`\n */\n public getType(\n id: string,\n options?: GetTypeOptions\n ): NamedType<NodeType> | undefined {\n let type = this.registry.get(id);\n if (options?.getRawType === true || !type) {\n return type;\n }\n\n if (this.computedNodeCache.has(id)) {\n return JSON.parse(JSON.stringify(this.computedNodeCache.get(id))) as\n | NamedType<NodeType>\n | undefined;\n }\n\n type = fillInGenerics(this.resolveType(type)) as NamedType;\n\n this.computedNodeCache.set(id, type);\n\n return type;\n }\n\n /**\n * Returns if a Type with `id` has been loaded into the DSK\n *\n * @param id - Type to retrieve\n * @returns `boolean`\n */\n public hasType(id: string) {\n return this.registry.has(id);\n }\n\n /**\n * Lists types that have been loaded into the SDK\n *\n * @param filters - Any filters to apply to the types returned (a positive match will omit)\n * @returns `Array<NamedTypes>`\n */\n public listTypes(filters?: Filters) {\n return this.registry.list(filters);\n }\n\n /**\n * Returns meta information around a registered type\n *\n * @param id - Name of Type to retrieve\n * @returns `TypeMetaData` | `undefined`\n */\n public getTypeInfo(id: string) {\n return this.registry.info(id);\n }\n\n /**\n * Validates if a JSONC Node follows the XLR Type registered under the `typeName` specified\n *\n * @param typeName - Registered XLR Type to use for validation\n * @param rootNode - Node to validate\n * @returns `Array<ValidationErrors>`\n */\n public validateByName(typeName: string, rootNode: Node) {\n const xlr = this.getType(typeName);\n if (!xlr) {\n throw new Error(\n `Type ${typeName} does not exist in registry, can't validate`\n );\n }\n\n return this.validator.validateType(rootNode, xlr);\n }\n\n /**\n * Validates if a JSONC Node follows the supplied XLR Type\n *\n * @param type - Type to validate against\n * @param rootNode - Node to validate\n * @returns `Array<ValidationErrors>`\n */\n public validateByType(type: NodeType, rootNode: Node) {\n return this.validator.validateType(rootNode, type);\n }\n\n /**\n * Exports the types loaded into the registry to the specified format\n *\n * @param exportType - what format to export as\n * @param importMap - a map of primitive packages to types exported from that package to add import statements\n * @param filters - filter out plugins/capabilities/types you don't want to export\n * @param transforms - transforms to apply to types before exporting them\n * @returns [filename, content][] - Tuples of filenames and content to write\n */\n public exportRegistry(\n exportType: ExportTypes,\n importMap: Map<string, string[]>,\n filters?: Filters,\n transforms?: Array<TransformFunction>\n ): [string, string][] {\n const typesToExport = this.registry.list(filters).map((type) => {\n const resolvedType = this.resolveType(type);\n const effectiveType =\n transforms?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n this.registry.info(type.name)?.capability as string\n ) as NamedType<NodeType>,\n resolvedType\n ) ?? resolvedType;\n\n return effectiveType;\n });\n\n if (exportType === \"TypeScript\") {\n const outputString = this.exportToTypeScript(typesToExport, importMap);\n return [[\"out.d.ts\", outputString]];\n }\n\n throw new Error(`Unknown export format ${exportType}`);\n }\n\n private resolveType(type: NodeType): NamedType {\n return simpleTransformGenerator(\"object\", \"any\", (objectNode) => {\n if (objectNode.extends) {\n const refName = objectNode.extends.ref.split(\"<\")[0];\n let extendedType = this.getType(refName, { getRawType: true });\n if (!extendedType) {\n throw new Error(\n `Error resolving ${objectNode.name}: can't find extended type ${refName}`\n );\n }\n\n extendedType = resolveReferenceNode(\n objectNode.extends,\n extendedType as NamedType<ObjectType>\n ) as NamedType;\n if (extendedType.type === \"object\") {\n return {\n ...computeEffectiveObject(\n extendedType as ObjectType,\n objectNode as ObjectType,\n false\n ),\n name: objectNode.name,\n description: objectNode.description,\n };\n }\n\n // if the merge isn't straightforward, defer until validation time for now\n return {\n name: objectNode.name,\n type: \"and\",\n and: [\n {\n ...objectNode,\n extends: undefined,\n },\n extendedType,\n ],\n } as unknown as ObjectNode;\n }\n\n return objectNode;\n })(type, \"any\") as NamedType;\n }\n\n private exportToTypeScript(\n typesToExport: NamedType[],\n importMap: Map<string, string[]>\n ): string {\n const referencedImports: Set<string> = new Set();\n const exportedTypes: Map<string, TopLevelDeclaration> = new Map();\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n\n let resultFile = ts.createSourceFile(\n \"output.d.ts\",\n \"\",\n ts.ScriptTarget.ES2017,\n false, // setParentNodes\n ts.ScriptKind.TS\n );\n\n typesToExport.forEach((typeNode) => {\n const { type, referencedTypes, additionalTypes } =\n this.tsWriter.convertNamedType(typeNode);\n exportedTypes.set(typeNode.name, type);\n additionalTypes?.forEach((additionalType, name) =>\n exportedTypes.set(name, additionalType)\n );\n referencedTypes?.forEach((referencedType) =>\n referencedImports.add(referencedType)\n );\n });\n\n const typesToPrint: Array<string> = [];\n\n exportedTypes.forEach((type) =>\n typesToPrint.push(\n printer.printNode(ts.EmitHint.Unspecified, type, resultFile)\n )\n );\n\n importMap.forEach((imports, packageName) => {\n const applicableImports = imports.filter((i) => referencedImports.has(i));\n resultFile = ts.factory.updateSourceFile(resultFile, [\n ts.factory.createImportDeclaration(\n /* modifiers */ undefined,\n ts.factory.createImportClause(\n false,\n undefined,\n ts.factory.createNamedImports(\n applicableImports.map((i) =>\n ts.factory.createImportSpecifier(\n false,\n undefined,\n ts.factory.createIdentifier(i)\n )\n )\n )\n ),\n ts.factory.createStringLiteral(packageName)\n ),\n ...resultFile.statements,\n ]);\n });\n\n const headerText = printer.printFile(resultFile);\n const nodeText = typesToPrint.join(\"\\n\");\n return `${headerText}\\n${nodeText}`;\n }\n}\n","import type { NamedType, NodeType } from \"@player-tools/xlr\";\nimport type { XLRRegistry, Filters, TypeMetadata } from \"./types\";\n\n/**\n * Basic example of a XLRs Registry\n */\nexport class BasicXLRRegistry implements XLRRegistry {\n private typeMap: Map<string, NamedType<NodeType>>;\n private pluginMap: Map<string, Map<string, Array<string>>>;\n private infoMap: Map<string, TypeMetadata>;\n\n constructor() {\n this.typeMap = new Map();\n this.pluginMap = new Map();\n this.infoMap = new Map();\n }\n\n /** Returns a copy of the XLR to guard against unexpected type modification */\n get(id: string): NamedType<NodeType> | undefined {\n const value = this.typeMap.get(id);\n return value ? JSON.parse(JSON.stringify(value)) : undefined;\n }\n\n add(type: NamedType<NodeType>, plugin: string, capability: string): void {\n this.typeMap.set(type.name, type);\n this.infoMap.set(type.name, { plugin, capability });\n\n if (!this.pluginMap.has(plugin)) {\n this.pluginMap.set(plugin, new Map());\n }\n\n const pluginsCapabilities = this.pluginMap.get(plugin) as Map<\n string,\n Array<string>\n >;\n\n if (!pluginsCapabilities.has(capability)) {\n pluginsCapabilities.set(capability, []);\n }\n\n const providedCapabilities = pluginsCapabilities.get(\n capability\n ) as string[];\n providedCapabilities.push(type.name);\n }\n\n has(id: string): boolean {\n return this.typeMap.has(id);\n }\n\n list(filterArgs?: Filters): NamedType<NodeType>[] {\n const validTypes: Array<string> = [];\n\n this.pluginMap.forEach((manifest, pluginName) => {\n if (\n !filterArgs?.pluginFilter ||\n !pluginName.match(filterArgs.pluginFilter)\n ) {\n manifest.forEach((types, capabilityName) => {\n if (\n !filterArgs?.capabilityFilter ||\n !capabilityName.match(filterArgs.capabilityFilter)\n ) {\n types.forEach((type) => {\n if (\n !filterArgs?.typeFilter ||\n !type.match(filterArgs.typeFilter)\n ) {\n validTypes.push(type);\n }\n });\n }\n });\n }\n });\n return validTypes.map((type) => this.get(type) as NamedType);\n }\n\n info(id: string): TypeMetadata | undefined {\n return this.infoMap.get(id);\n }\n}\n","import type { Node } from \"jsonc-parser\";\nimport type {\n ArrayType,\n NamedType,\n NodeType,\n ObjectType,\n OrType,\n PrimitiveTypes,\n RefType,\n TemplateLiteralType,\n} from \"@player-tools/xlr\";\nimport {\n makePropertyMap,\n resolveConditional,\n isPrimitiveTypeNode,\n resolveReferenceNode,\n computeEffectiveObject,\n} from \"@player-tools/xlr-utils\";\nimport type { ValidationError } from \"./types\";\n\n/**\n * Validator for XLRs on JSON Nodes\n */\nexport class XLRValidator {\n private resolveType: (id: string) => NamedType<NodeType> | undefined;\n private regexCache: Map<string, RegExp>;\n\n constructor(resolveType: (id: string) => NamedType<NodeType> | undefined) {\n this.resolveType = resolveType;\n this.regexCache = new Map();\n }\n\n /** Main entrypoint for validation */\n public validateType(\n rootNode: Node,\n xlrNode: NodeType\n ): Array<ValidationError> {\n const validationIssues = new Array<ValidationError>();\n if (xlrNode.type === \"object\") {\n if (rootNode.type === \"object\") {\n validationIssues.push(...this.validateObject(xlrNode, rootNode));\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode,\n message: `Expected an object but got an \"${rootNode.type}\"`,\n });\n }\n } else if (xlrNode.type === \"array\") {\n if (rootNode.type === \"array\") {\n validationIssues.push(...this.validateArray(rootNode, xlrNode));\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode,\n message: `Expected an array but got an \"${rootNode.type}\"`,\n });\n }\n } else if (xlrNode.type === \"template\") {\n const error = this.validateTemplate(rootNode, xlrNode);\n if (error) {\n validationIssues.push(error);\n }\n } else if (xlrNode.type === \"or\") {\n // eslint-disable-next-line no-restricted-syntax\n for (const potentialType of xlrNode.or) {\n const potentialErrors = this.validateType(rootNode, potentialType);\n if (potentialErrors.length === 0) {\n return validationIssues;\n }\n }\n\n let message: string;\n\n if (xlrNode.name) {\n message = `Does not match any of the expected types for type: '${xlrNode.name}'`;\n } else if (xlrNode.title) {\n message = `Does not match any of the expected types for property: '${xlrNode.title}'`;\n } else {\n message = `Does not match any of the types ${xlrNode.or\n .map((node) => node.name ?? node.title ?? \"<unnamed type>\")\n .join(\" | \")}`;\n }\n\n validationIssues.push({\n type: \"value\",\n node: rootNode,\n message,\n });\n } else if (xlrNode.type === \"and\") {\n const effectiveType = {\n ...this.computeIntersectionType(xlrNode.and),\n ...(xlrNode.name ? { name: xlrNode.name } : {}),\n };\n validationIssues.push(...this.validateType(rootNode, effectiveType));\n } else if (xlrNode.type === \"record\") {\n rootNode.children?.forEach((child) => {\n validationIssues.push(\n ...this.validateType(child.children?.[0] as Node, xlrNode.keyType)\n );\n validationIssues.push(\n ...this.validateType(child.children?.[1] as Node, xlrNode.valueType)\n );\n });\n } else if (xlrNode.type === \"ref\") {\n const refType = this.getRefType(xlrNode);\n if (refType === undefined) {\n validationIssues.push({\n type: \"unknown\",\n node: rootNode,\n message: `Type \"${xlrNode.ref}\" is not defined in provided bundles`,\n });\n } else {\n validationIssues.push(\n ...this.validateType(rootNode, refType as NamedType)\n );\n }\n } else if (isPrimitiveTypeNode(xlrNode)) {\n if (!this.validateLiteralType(xlrNode, rootNode)) {\n if (\n (xlrNode.type === \"string\" ||\n xlrNode.type === \"number\" ||\n xlrNode.type === \"boolean\") &&\n xlrNode.const\n ) {\n validationIssues.push({\n type: \"type\",\n node: rootNode.parent as Node,\n message: `Expected \"${xlrNode.const}\" but got \"${rootNode.value}\"`,\n });\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode.parent as Node,\n message: `Expected type \"${xlrNode.type}\" but got \"${rootNode.type}\"`,\n });\n }\n }\n } else if (xlrNode.type === \"conditional\") {\n // Resolve RefNodes in check conditions if needed\n let { right, left } = xlrNode.check;\n\n if (right.type === \"ref\") {\n right = this.getRefType(right);\n }\n\n if (left.type === \"ref\") {\n left = this.getRefType(left);\n }\n\n const resolvedXLRNode = {\n ...xlrNode,\n check: {\n left,\n right,\n },\n };\n\n const resolvedConditional = resolveConditional(resolvedXLRNode);\n if (resolvedConditional === resolvedXLRNode) {\n throw Error(\n `Unable to resolve conditional type at runtime: ${xlrNode.name}`\n );\n }\n\n validationIssues.push(\n ...this.validateType(rootNode, resolvedConditional)\n );\n } else {\n throw Error(`Unknown type ${xlrNode.type}`);\n }\n\n return validationIssues;\n }\n\n private validateTemplate(\n node: Node,\n xlrNode: TemplateLiteralType\n ): ValidationError | undefined {\n if (node.type !== \"string\") {\n return {\n type: \"type\",\n node: node.parent as Node,\n message: `Expected type \"${xlrNode.type}\" but got \"${typeof node}\"`,\n };\n }\n\n const regex = this.getRegex(xlrNode.format);\n const valid = regex.exec(node.value);\n if (!valid) {\n return {\n type: \"value\",\n node: node.parent as Node,\n message: `Does not match expected format: ${xlrNode.format}`,\n };\n }\n }\n\n private validateArray(rootNode: Node, xlrNode: ArrayType) {\n const issues: Array<ValidationError> = [];\n rootNode.children?.forEach((child) =>\n issues.push(...this.validateType(child, xlrNode.elementType))\n );\n return issues;\n }\n\n private validateObject(xlrNode: ObjectType, node: Node) {\n const issues: Array<ValidationError> = [];\n const objectProps = makePropertyMap(node);\n\n // eslint-disable-next-line guard-for-in, no-restricted-syntax\n for (const prop in xlrNode.properties) {\n const expectedType = xlrNode.properties[prop];\n const valueNode = objectProps.get(prop);\n if (expectedType.required && valueNode === undefined) {\n issues.push({\n type: \"missing\",\n node,\n message: `Property \"${prop}\" missing from type \"${xlrNode.name}\"`,\n });\n }\n\n if (valueNode) {\n issues.push(\n ...this.validateType(valueNode, expectedType.node as NamedType)\n );\n }\n }\n\n // Check if unknown keys are allowed and if they are - do the violate the constraint\n const extraKeys = Array.from(objectProps.keys()).filter(\n (key) => xlrNode.properties[key] === undefined\n );\n if (xlrNode.additionalProperties === false && extraKeys.length > 0) {\n issues.push({\n type: \"value\",\n node,\n message: `Unexpected properties on \"${xlrNode.name}\": ${extraKeys.join(\n \", \"\n )}`,\n });\n } else {\n issues.push(\n ...extraKeys.flatMap((key) =>\n this.validateType(\n objectProps.get(key) as Node,\n xlrNode.additionalProperties as NodeType\n )\n )\n );\n }\n\n return issues;\n }\n\n private validateLiteralType(expectedType: PrimitiveTypes, literalType: Node) {\n switch (expectedType.type) {\n case \"boolean\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"boolean\";\n case \"number\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"number\";\n case \"string\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"string\";\n case \"null\":\n return literalType.value === \"null\";\n case \"never\":\n return literalType === undefined;\n case \"any\":\n return literalType !== undefined;\n case \"unknown\":\n return literalType !== undefined;\n case \"undefined\":\n return true;\n default:\n return false;\n }\n }\n\n private getRefType(ref: RefType): NodeType {\n let refName = ref.ref;\n if (refName.indexOf(\"<\") > 0) {\n [refName] = refName.split(\"<\");\n }\n\n const actualType = this.resolveType(refName);\n if (!actualType) {\n throw new Error(`Error: can't resolve type reference ${refName}`);\n }\n\n return resolveReferenceNode(ref, actualType);\n }\n\n private getRegex(expString: string): RegExp {\n if (this.regexCache.has(expString)) {\n return this.regexCache.get(expString) as RegExp;\n }\n\n const exp = new RegExp(expString);\n this.regexCache.set(expString, exp);\n return exp;\n }\n\n private computeIntersectionType(types: Array<NodeType>): ObjectType | OrType {\n let firstElement = types[0];\n let effectiveType: ObjectType | OrType;\n\n if (firstElement.type === \"ref\") {\n firstElement = this.getRefType(firstElement);\n }\n\n if (firstElement.type === \"and\") {\n effectiveType = this.computeIntersectionType(firstElement.and);\n } else if (firstElement.type === \"record\") {\n effectiveType = {\n type: \"object\",\n properties: {},\n additionalProperties: firstElement.valueType,\n };\n } else if (firstElement.type !== \"or\" && firstElement.type !== \"object\") {\n throw new Error(\n `Can't compute a union with a non-object type ${firstElement.type} (${firstElement.name})`\n );\n } else {\n effectiveType = firstElement;\n }\n\n types.slice(1).forEach((type) => {\n let typeToApply = type;\n\n if (typeToApply.type === \"record\") {\n typeToApply = {\n type: \"object\",\n properties: {},\n additionalProperties: typeToApply.valueType,\n };\n }\n\n if (type.type === \"ref\") {\n typeToApply = this.getRefType(type);\n }\n\n if (typeToApply.type === \"and\") {\n typeToApply = this.computeIntersectionType([type, effectiveType]);\n }\n\n if (typeToApply.type === \"object\") {\n if (effectiveType.type === \"object\") {\n effectiveType = computeEffectiveObject(effectiveType, typeToApply);\n } else {\n effectiveType = {\n ...effectiveType,\n or: effectiveType.or.map((y) =>\n this.computeIntersectionType([y, typeToApply])\n ),\n };\n }\n } else if (typeToApply.type === \"or\") {\n if (effectiveType.type === \"object\") {\n effectiveType = {\n ...typeToApply,\n or: typeToApply.or.map((y) =>\n this.computeIntersectionType([y, effectiveType])\n ),\n };\n } else {\n throw new Error(\"unimplemented operation or x or projection\");\n }\n } else {\n throw new Error(\n `Can't compute a union with a non-object type ${typeToApply.type} (${typeToApply.name})`\n );\n }\n });\n\n return effectiveType;\n }\n}\n","/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\nimport type {\n NamedType,\n NodeTypeStrings,\n NodeTypeMap,\n TransformFunction,\n NodeType,\n ObjectProperty,\n RefNode,\n} from \"@player-tools/xlr\";\nimport { isGenericNamedType } from \"@player-tools/xlr-utils\";\n\nconst isMatchingCapability = (\n capability: string,\n capabilitiesToMatch: string | Array<string>\n): boolean => {\n if (Array.isArray(capabilitiesToMatch)) {\n return capabilitiesToMatch.includes(capability);\n }\n\n return capability === capabilitiesToMatch;\n};\n\n/**\n * Helper function for simple transforms\n * Walks an XLR tree looking for the specified node type calls the supplied function when called\n */\nexport function simpleTransformGenerator<\n T extends NodeTypeStrings = NodeTypeStrings\n>(\n typeToTransform: T,\n capabilityToTransform: string | Array<string>,\n functionToRun: (input: NodeTypeMap[T]) => NodeTypeMap[T]\n): TransformFunction {\n /** walker for an XLR tree to touch every node */\n const walker: TransformFunction = (\n n: NamedType | NodeType,\n capability: string\n ) => {\n // Run transform on base node before running on children\n if (isMatchingCapability(capability, capabilityToTransform)) {\n let node = { ...n };\n if (node.type === typeToTransform) {\n node = functionToRun(node as unknown as NodeTypeMap[T]);\n }\n\n if (node.type === \"object\") {\n const newObjectProperties: Record<string, ObjectProperty> = {};\n\n for (const key in node.properties) {\n const value = node.properties[key];\n newObjectProperties[key] = {\n required: value.required,\n node: walker(value.node, capability),\n };\n }\n\n // need to walk generic tokens\n return {\n ...node,\n properties: { ...newObjectProperties },\n ...(isGenericNamedType(node)\n ? {\n genericTokens: node.genericTokens.map((token) => {\n return {\n ...token,\n constraints: token.constraints\n ? walker(token.constraints, capability)\n : undefined,\n default: token.default\n ? walker(token.default, capability)\n : undefined,\n };\n }),\n }\n : {}),\n extends: node.extends\n ? (walker(node.extends, capability) as RefNode)\n : undefined,\n additionalProperties: node.additionalProperties\n ? walker(node.additionalProperties, capability)\n : false,\n };\n }\n\n if (node.type === \"array\") {\n return {\n ...node,\n elementType: walker(node.elementType, capability),\n };\n }\n\n if (node.type === \"and\") {\n return {\n ...node,\n and: node.and.map((element) => walker(element, capability)),\n };\n }\n\n if (node.type === \"or\") {\n return {\n ...node,\n or: node.or.map((element) => walker(element, capability)),\n };\n }\n\n if (node.type === \"ref\") {\n return {\n ...node,\n ...(node.genericArguments\n ? {\n genericArguments: node.genericArguments?.map((arg) =>\n walker(arg, capability)\n ),\n }\n : {}),\n };\n }\n\n if (node.type === \"tuple\") {\n return {\n ...node,\n elementTypes: node.elementTypes.map((element) => {\n return {\n name: element.name,\n type: walker(element.type, capability),\n optional: element.optional,\n };\n }),\n additionalItems: node.additionalItems\n ? walker(node.additionalItems, capability)\n : false,\n };\n }\n\n if (node.type === \"function\") {\n return {\n ...node,\n parameters: node.parameters.map((param) => {\n return {\n ...param,\n type: walker(param.type, capability),\n default: param.default\n ? walker(param.default, capability)\n : undefined,\n };\n }),\n returnType: node.returnType\n ? walker(node.returnType, capability)\n : undefined,\n };\n }\n\n if (node.type === \"record\") {\n return {\n ...node,\n keyType: walker(node.keyType, capability),\n valueType: walker(node.valueType, capability),\n };\n }\n\n if (node.type === \"conditional\") {\n return {\n ...node,\n check: {\n left: walker(node.check.left, capability),\n right: walker(node.check.left, capability),\n },\n value: {\n true: walker(node.value.true, capability),\n false: walker(node.value.false, capability),\n },\n };\n }\n }\n\n return n;\n };\n\n return walker;\n}\n"],"mappings":"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","names":["import_xlr_utils","import_xlr_utils","fs","path","ts"]}
|
package/dist/index.legacy-esm.js
CHANGED
|
@@ -11,6 +11,9 @@ import ts from "typescript";
|
|
|
11
11
|
|
|
12
12
|
// ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/registry/basic-registry.ts
|
|
13
13
|
var BasicXLRRegistry = class {
|
|
14
|
+
typeMap;
|
|
15
|
+
pluginMap;
|
|
16
|
+
infoMap;
|
|
14
17
|
constructor() {
|
|
15
18
|
this.typeMap = /* @__PURE__ */ new Map();
|
|
16
19
|
this.pluginMap = /* @__PURE__ */ new Map();
|
|
@@ -70,6 +73,8 @@ import {
|
|
|
70
73
|
computeEffectiveObject
|
|
71
74
|
} from "@player-tools/xlr-utils";
|
|
72
75
|
var XLRValidator = class {
|
|
76
|
+
resolveType;
|
|
77
|
+
regexCache;
|
|
73
78
|
constructor(resolveType) {
|
|
74
79
|
this.resolveType = resolveType;
|
|
75
80
|
this.regexCache = /* @__PURE__ */ new Map();
|
|
@@ -502,6 +507,11 @@ function simpleTransformGenerator(typeToTransform, capabilityToTransform, functi
|
|
|
502
507
|
|
|
503
508
|
// ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/sdk.ts
|
|
504
509
|
var XLRSDK = class {
|
|
510
|
+
registry;
|
|
511
|
+
validator;
|
|
512
|
+
tsWriter;
|
|
513
|
+
computedNodeCache;
|
|
514
|
+
externalTransformFunctions;
|
|
505
515
|
constructor(customRegistry) {
|
|
506
516
|
this.registry = customRegistry ?? new BasicXLRRegistry();
|
|
507
517
|
this.validator = new XLRValidator(this.getType.bind(this));
|
package/dist/index.mjs
CHANGED
|
@@ -11,6 +11,9 @@ import ts from "typescript";
|
|
|
11
11
|
|
|
12
12
|
// ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/registry/basic-registry.ts
|
|
13
13
|
var BasicXLRRegistry = class {
|
|
14
|
+
typeMap;
|
|
15
|
+
pluginMap;
|
|
16
|
+
infoMap;
|
|
14
17
|
constructor() {
|
|
15
18
|
this.typeMap = /* @__PURE__ */ new Map();
|
|
16
19
|
this.pluginMap = /* @__PURE__ */ new Map();
|
|
@@ -70,6 +73,8 @@ import {
|
|
|
70
73
|
computeEffectiveObject
|
|
71
74
|
} from "@player-tools/xlr-utils";
|
|
72
75
|
var XLRValidator = class {
|
|
76
|
+
resolveType;
|
|
77
|
+
regexCache;
|
|
73
78
|
constructor(resolveType) {
|
|
74
79
|
this.resolveType = resolveType;
|
|
75
80
|
this.regexCache = /* @__PURE__ */ new Map();
|
|
@@ -502,6 +507,11 @@ function simpleTransformGenerator(typeToTransform, capabilityToTransform, functi
|
|
|
502
507
|
|
|
503
508
|
// ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/sdk.ts
|
|
504
509
|
var XLRSDK = class {
|
|
510
|
+
registry;
|
|
511
|
+
validator;
|
|
512
|
+
tsWriter;
|
|
513
|
+
computedNodeCache;
|
|
514
|
+
externalTransformFunctions;
|
|
505
515
|
constructor(customRegistry) {
|
|
506
516
|
this.registry = customRegistry ?? new BasicXLRRegistry();
|
|
507
517
|
this.validator = new XLRValidator(this.getType.bind(this));
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/sdk.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/registry/basic-registry.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/validator.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/utils.ts"],"sourcesContent":["import type {\n Manifest,\n NamedType,\n NodeType,\n ObjectNode,\n ObjectType,\n TransformFunction,\n TSManifest,\n} from \"@player-tools/xlr\";\nimport type { TopLevelDeclaration } from \"@player-tools/xlr-utils\";\nimport {\n computeEffectiveObject,\n resolveReferenceNode,\n} from \"@player-tools/xlr-utils\";\nimport { fillInGenerics } from \"@player-tools/xlr-utils\";\nimport type { Node } from \"jsonc-parser\";\nimport { TSWriter } from \"@player-tools/xlr-converters\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport ts from \"typescript\";\n\nimport type { XLRRegistry, Filters } from \"./registry\";\nimport { BasicXLRRegistry } from \"./registry\";\nimport type { ExportTypes } from \"./types\";\nimport { XLRValidator } from \"./validator\";\nimport { simpleTransformGenerator } from \"./utils\";\n\nexport interface GetTypeOptions {\n /** Resolves `extends` fields in objects */\n getRawType?: boolean;\n}\n\n/**\n * Abstraction for interfacing with XLRs making it more approachable to use without understanding the inner workings of the types and how they are packaged\n */\nexport class XLRSDK {\n private registry: XLRRegistry;\n private validator: XLRValidator;\n private tsWriter: TSWriter;\n private computedNodeCache: Map<string, NodeType>;\n private externalTransformFunctions: Map<string, TransformFunction>;\n\n constructor(customRegistry?: XLRRegistry) {\n this.registry = customRegistry ?? new BasicXLRRegistry();\n this.validator = new XLRValidator(this.getType.bind(this));\n this.tsWriter = new TSWriter();\n this.computedNodeCache = new Map();\n this.externalTransformFunctions = new Map();\n }\n\n /**\n * Loads definitions from a path on the filesystem\n *\n * @param inputPath - path to the directory to load (above the xlr folder)\n * @param filters - Any filters to apply when loading the types (a positive match will omit)\n * @param transforms - any transforms to apply to the types being loaded\n */\n public loadDefinitionsFromDisk(\n inputPath: string,\n filters?: Omit<Filters, \"pluginFilter\">,\n transforms?: Array<TransformFunction>\n ) {\n this.computedNodeCache.clear();\n\n const transformsToRun = [\n ...this.externalTransformFunctions.values(),\n ...(transforms ?? []),\n ];\n\n const manifest = JSON.parse(\n fs.readFileSync(path.join(inputPath, \"xlr\", \"manifest.json\")).toString(),\n (key: unknown, value: unknown) => {\n // Custom parser because JSON objects -> JS Objects, not maps\n if (typeof value === \"object\" && value !== null) {\n if (key === \"capabilities\") {\n return new Map(Object.entries(value));\n }\n }\n\n return value;\n }\n ) as Manifest;\n\n manifest.capabilities?.forEach((capabilityList, capabilityName) => {\n if (\n filters?.capabilityFilter &&\n capabilityName.match(filters?.capabilityFilter)\n )\n return;\n capabilityList.forEach((extensionName) => {\n if (!filters?.typeFilter || !extensionName.match(filters?.typeFilter)) {\n const cType: NamedType<NodeType> = JSON.parse(\n fs\n .readFileSync(\n path.join(inputPath, \"xlr\", `${extensionName}.json`)\n )\n .toString()\n );\n const effectiveType =\n transformsToRun?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n capabilityName\n ) as NamedType<NodeType>,\n cType\n ) ?? cType;\n\n this.registry.add(effectiveType, manifest.pluginName, capabilityName);\n }\n });\n });\n }\n\n /**\n * Load definitions from a js/ts file in memory\n *\n * @param manifest - The imported XLR manifest module\n * @param filters - Any filters to apply when loading the types (a positive match will omit)\n * @param transforms - any transforms to apply to the types being loaded\n */\n public async loadDefinitionsFromModule(\n manifest: TSManifest,\n filters?: Omit<Filters, \"pluginFilter\">,\n transforms?: Array<TransformFunction>\n ) {\n this.computedNodeCache.clear();\n\n const transformsToRun = [\n ...this.externalTransformFunctions.values(),\n ...(transforms ?? []),\n ];\n\n Object.keys(manifest.capabilities)?.forEach((capabilityName) => {\n if (\n filters?.capabilityFilter &&\n capabilityName.match(filters?.capabilityFilter)\n )\n return;\n const capabilityList = manifest.capabilities[capabilityName];\n capabilityList.forEach((extension) => {\n if (\n !filters?.typeFilter ||\n !extension.name.match(filters?.typeFilter)\n ) {\n const effectiveType =\n transformsToRun?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n capabilityName\n ) as NamedType<NodeType>,\n extension\n ) ?? extension;\n\n this.registry.add(effectiveType, manifest.pluginName, capabilityName);\n }\n });\n });\n }\n\n /**\n * Statically load transform function that should be applied to every XLR bundle that is imported\n */\n public addTransformFunction(name: string, fn: TransformFunction): void {\n this.externalTransformFunctions.set(name, fn);\n }\n\n /**\n * Remove any transform function loaded via the `addTransformFunction` method by name\n */\n public removeTransformFunction(name: string): void {\n this.externalTransformFunctions.delete(name);\n }\n\n /**\n * Returns a Type that has been previously loaded\n *\n * @param id - Type to retrieve\n * @param options - `GetTypeOptions`\n * @returns `NamedType<NodeType>` | `undefined`\n */\n public getType(\n id: string,\n options?: GetTypeOptions\n ): NamedType<NodeType> | undefined {\n let type = this.registry.get(id);\n if (options?.getRawType === true || !type) {\n return type;\n }\n\n if (this.computedNodeCache.has(id)) {\n return JSON.parse(JSON.stringify(this.computedNodeCache.get(id))) as\n | NamedType<NodeType>\n | undefined;\n }\n\n type = fillInGenerics(this.resolveType(type)) as NamedType;\n\n this.computedNodeCache.set(id, type);\n\n return type;\n }\n\n /**\n * Returns if a Type with `id` has been loaded into the DSK\n *\n * @param id - Type to retrieve\n * @returns `boolean`\n */\n public hasType(id: string) {\n return this.registry.has(id);\n }\n\n /**\n * Lists types that have been loaded into the SDK\n *\n * @param filters - Any filters to apply to the types returned (a positive match will omit)\n * @returns `Array<NamedTypes>`\n */\n public listTypes(filters?: Filters) {\n return this.registry.list(filters);\n }\n\n /**\n * Returns meta information around a registered type\n *\n * @param id - Name of Type to retrieve\n * @returns `TypeMetaData` | `undefined`\n */\n public getTypeInfo(id: string) {\n return this.registry.info(id);\n }\n\n /**\n * Validates if a JSONC Node follows the XLR Type registered under the `typeName` specified\n *\n * @param typeName - Registered XLR Type to use for validation\n * @param rootNode - Node to validate\n * @returns `Array<ValidationErrors>`\n */\n public validateByName(typeName: string, rootNode: Node) {\n const xlr = this.getType(typeName);\n if (!xlr) {\n throw new Error(\n `Type ${typeName} does not exist in registry, can't validate`\n );\n }\n\n return this.validator.validateType(rootNode, xlr);\n }\n\n /**\n * Validates if a JSONC Node follows the supplied XLR Type\n *\n * @param type - Type to validate against\n * @param rootNode - Node to validate\n * @returns `Array<ValidationErrors>`\n */\n public validateByType(type: NodeType, rootNode: Node) {\n return this.validator.validateType(rootNode, type);\n }\n\n /**\n * Exports the types loaded into the registry to the specified format\n *\n * @param exportType - what format to export as\n * @param importMap - a map of primitive packages to types exported from that package to add import statements\n * @param filters - filter out plugins/capabilities/types you don't want to export\n * @param transforms - transforms to apply to types before exporting them\n * @returns [filename, content][] - Tuples of filenames and content to write\n */\n public exportRegistry(\n exportType: ExportTypes,\n importMap: Map<string, string[]>,\n filters?: Filters,\n transforms?: Array<TransformFunction>\n ): [string, string][] {\n const typesToExport = this.registry.list(filters).map((type) => {\n const resolvedType = this.resolveType(type);\n const effectiveType =\n transforms?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n this.registry.info(type.name)?.capability as string\n ) as NamedType<NodeType>,\n resolvedType\n ) ?? resolvedType;\n\n return effectiveType;\n });\n\n if (exportType === \"TypeScript\") {\n const outputString = this.exportToTypeScript(typesToExport, importMap);\n return [[\"out.d.ts\", outputString]];\n }\n\n throw new Error(`Unknown export format ${exportType}`);\n }\n\n private resolveType(type: NodeType): NamedType {\n return simpleTransformGenerator(\"object\", \"any\", (objectNode) => {\n if (objectNode.extends) {\n const refName = objectNode.extends.ref.split(\"<\")[0];\n let extendedType = this.getType(refName, { getRawType: true });\n if (!extendedType) {\n throw new Error(\n `Error resolving ${objectNode.name}: can't find extended type ${refName}`\n );\n }\n\n extendedType = resolveReferenceNode(\n objectNode.extends,\n extendedType as NamedType<ObjectType>\n ) as NamedType;\n if (extendedType.type === \"object\") {\n return {\n ...computeEffectiveObject(\n extendedType as ObjectType,\n objectNode as ObjectType,\n false\n ),\n name: objectNode.name,\n description: objectNode.description,\n };\n }\n\n // if the merge isn't straightforward, defer until validation time for now\n return {\n name: objectNode.name,\n type: \"and\",\n and: [\n {\n ...objectNode,\n extends: undefined,\n },\n extendedType,\n ],\n } as unknown as ObjectNode;\n }\n\n return objectNode;\n })(type, \"any\") as NamedType;\n }\n\n private exportToTypeScript(\n typesToExport: NamedType[],\n importMap: Map<string, string[]>\n ): string {\n const referencedImports: Set<string> = new Set();\n const exportedTypes: Map<string, TopLevelDeclaration> = new Map();\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n\n let resultFile = ts.createSourceFile(\n \"output.d.ts\",\n \"\",\n ts.ScriptTarget.ES2017,\n false, // setParentNodes\n ts.ScriptKind.TS\n );\n\n typesToExport.forEach((typeNode) => {\n const { type, referencedTypes, additionalTypes } =\n this.tsWriter.convertNamedType(typeNode);\n exportedTypes.set(typeNode.name, type);\n additionalTypes?.forEach((additionalType, name) =>\n exportedTypes.set(name, additionalType)\n );\n referencedTypes?.forEach((referencedType) =>\n referencedImports.add(referencedType)\n );\n });\n\n const typesToPrint: Array<string> = [];\n\n exportedTypes.forEach((type) =>\n typesToPrint.push(\n printer.printNode(ts.EmitHint.Unspecified, type, resultFile)\n )\n );\n\n importMap.forEach((imports, packageName) => {\n const applicableImports = imports.filter((i) => referencedImports.has(i));\n resultFile = ts.factory.updateSourceFile(resultFile, [\n ts.factory.createImportDeclaration(\n /* modifiers */ undefined,\n ts.factory.createImportClause(\n false,\n undefined,\n ts.factory.createNamedImports(\n applicableImports.map((i) =>\n ts.factory.createImportSpecifier(\n false,\n undefined,\n ts.factory.createIdentifier(i)\n )\n )\n )\n ),\n ts.factory.createStringLiteral(packageName)\n ),\n ...resultFile.statements,\n ]);\n });\n\n const headerText = printer.printFile(resultFile);\n const nodeText = typesToPrint.join(\"\\n\");\n return `${headerText}\\n${nodeText}`;\n }\n}\n","import type { NamedType, NodeType } from \"@player-tools/xlr\";\nimport type { XLRRegistry, Filters, TypeMetadata } from \"./types\";\n\n/**\n * Basic example of a XLRs Registry\n */\nexport class BasicXLRRegistry implements XLRRegistry {\n private typeMap: Map<string, NamedType<NodeType>>;\n private pluginMap: Map<string, Map<string, Array<string>>>;\n private infoMap: Map<string, TypeMetadata>;\n\n constructor() {\n this.typeMap = new Map();\n this.pluginMap = new Map();\n this.infoMap = new Map();\n }\n\n /** Returns a copy of the XLR to guard against unexpected type modification */\n get(id: string): NamedType<NodeType> | undefined {\n const value = this.typeMap.get(id);\n return value ? JSON.parse(JSON.stringify(value)) : undefined;\n }\n\n add(type: NamedType<NodeType>, plugin: string, capability: string): void {\n this.typeMap.set(type.name, type);\n this.infoMap.set(type.name, { plugin, capability });\n\n if (!this.pluginMap.has(plugin)) {\n this.pluginMap.set(plugin, new Map());\n }\n\n const pluginsCapabilities = this.pluginMap.get(plugin) as Map<\n string,\n Array<string>\n >;\n\n if (!pluginsCapabilities.has(capability)) {\n pluginsCapabilities.set(capability, []);\n }\n\n const providedCapabilities = pluginsCapabilities.get(\n capability\n ) as string[];\n providedCapabilities.push(type.name);\n }\n\n has(id: string): boolean {\n return this.typeMap.has(id);\n }\n\n list(filterArgs?: Filters): NamedType<NodeType>[] {\n const validTypes: Array<string> = [];\n\n this.pluginMap.forEach((manifest, pluginName) => {\n if (\n !filterArgs?.pluginFilter ||\n !pluginName.match(filterArgs.pluginFilter)\n ) {\n manifest.forEach((types, capabilityName) => {\n if (\n !filterArgs?.capabilityFilter ||\n !capabilityName.match(filterArgs.capabilityFilter)\n ) {\n types.forEach((type) => {\n if (\n !filterArgs?.typeFilter ||\n !type.match(filterArgs.typeFilter)\n ) {\n validTypes.push(type);\n }\n });\n }\n });\n }\n });\n return validTypes.map((type) => this.get(type) as NamedType);\n }\n\n info(id: string): TypeMetadata | undefined {\n return this.infoMap.get(id);\n }\n}\n","import type { Node } from \"jsonc-parser\";\nimport type {\n ArrayType,\n NamedType,\n NodeType,\n ObjectType,\n OrType,\n PrimitiveTypes,\n RefType,\n TemplateLiteralType,\n} from \"@player-tools/xlr\";\nimport {\n makePropertyMap,\n resolveConditional,\n isPrimitiveTypeNode,\n resolveReferenceNode,\n computeEffectiveObject,\n} from \"@player-tools/xlr-utils\";\nimport type { ValidationError } from \"./types\";\n\n/**\n * Validator for XLRs on JSON Nodes\n */\nexport class XLRValidator {\n private resolveType: (id: string) => NamedType<NodeType> | undefined;\n private regexCache: Map<string, RegExp>;\n\n constructor(resolveType: (id: string) => NamedType<NodeType> | undefined) {\n this.resolveType = resolveType;\n this.regexCache = new Map();\n }\n\n /** Main entrypoint for validation */\n public validateType(\n rootNode: Node,\n xlrNode: NodeType\n ): Array<ValidationError> {\n const validationIssues = new Array<ValidationError>();\n if (xlrNode.type === \"object\") {\n if (rootNode.type === \"object\") {\n validationIssues.push(...this.validateObject(xlrNode, rootNode));\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode,\n message: `Expected an object but got an \"${rootNode.type}\"`,\n });\n }\n } else if (xlrNode.type === \"array\") {\n if (rootNode.type === \"array\") {\n validationIssues.push(...this.validateArray(rootNode, xlrNode));\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode,\n message: `Expected an array but got an \"${rootNode.type}\"`,\n });\n }\n } else if (xlrNode.type === \"template\") {\n const error = this.validateTemplate(rootNode, xlrNode);\n if (error) {\n validationIssues.push(error);\n }\n } else if (xlrNode.type === \"or\") {\n // eslint-disable-next-line no-restricted-syntax\n for (const potentialType of xlrNode.or) {\n const potentialErrors = this.validateType(rootNode, potentialType);\n if (potentialErrors.length === 0) {\n return validationIssues;\n }\n }\n\n let message: string;\n\n if (xlrNode.name) {\n message = `Does not match any of the expected types for type: '${xlrNode.name}'`;\n } else if (xlrNode.title) {\n message = `Does not match any of the expected types for property: '${xlrNode.title}'`;\n } else {\n message = `Does not match any of the types ${xlrNode.or\n .map((node) => node.name ?? node.title ?? \"<unnamed type>\")\n .join(\" | \")}`;\n }\n\n validationIssues.push({\n type: \"value\",\n node: rootNode,\n message,\n });\n } else if (xlrNode.type === \"and\") {\n const effectiveType = {\n ...this.computeIntersectionType(xlrNode.and),\n ...(xlrNode.name ? { name: xlrNode.name } : {}),\n };\n validationIssues.push(...this.validateType(rootNode, effectiveType));\n } else if (xlrNode.type === \"record\") {\n rootNode.children?.forEach((child) => {\n validationIssues.push(\n ...this.validateType(child.children?.[0] as Node, xlrNode.keyType)\n );\n validationIssues.push(\n ...this.validateType(child.children?.[1] as Node, xlrNode.valueType)\n );\n });\n } else if (xlrNode.type === \"ref\") {\n const refType = this.getRefType(xlrNode);\n if (refType === undefined) {\n validationIssues.push({\n type: \"unknown\",\n node: rootNode,\n message: `Type \"${xlrNode.ref}\" is not defined in provided bundles`,\n });\n } else {\n validationIssues.push(\n ...this.validateType(rootNode, refType as NamedType)\n );\n }\n } else if (isPrimitiveTypeNode(xlrNode)) {\n if (!this.validateLiteralType(xlrNode, rootNode)) {\n if (\n (xlrNode.type === \"string\" ||\n xlrNode.type === \"number\" ||\n xlrNode.type === \"boolean\") &&\n xlrNode.const\n ) {\n validationIssues.push({\n type: \"type\",\n node: rootNode.parent as Node,\n message: `Expected \"${xlrNode.const}\" but got \"${rootNode.value}\"`,\n });\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode.parent as Node,\n message: `Expected type \"${xlrNode.type}\" but got \"${rootNode.type}\"`,\n });\n }\n }\n } else if (xlrNode.type === \"conditional\") {\n // Resolve RefNodes in check conditions if needed\n let { right, left } = xlrNode.check;\n\n if (right.type === \"ref\") {\n right = this.getRefType(right);\n }\n\n if (left.type === \"ref\") {\n left = this.getRefType(left);\n }\n\n const resolvedXLRNode = {\n ...xlrNode,\n check: {\n left,\n right,\n },\n };\n\n const resolvedConditional = resolveConditional(resolvedXLRNode);\n if (resolvedConditional === resolvedXLRNode) {\n throw Error(\n `Unable to resolve conditional type at runtime: ${xlrNode.name}`\n );\n }\n\n validationIssues.push(\n ...this.validateType(rootNode, resolvedConditional)\n );\n } else {\n throw Error(`Unknown type ${xlrNode.type}`);\n }\n\n return validationIssues;\n }\n\n private validateTemplate(\n node: Node,\n xlrNode: TemplateLiteralType\n ): ValidationError | undefined {\n if (node.type !== \"string\") {\n return {\n type: \"type\",\n node: node.parent as Node,\n message: `Expected type \"${xlrNode.type}\" but got \"${typeof node}\"`,\n };\n }\n\n const regex = this.getRegex(xlrNode.format);\n const valid = regex.exec(node.value);\n if (!valid) {\n return {\n type: \"value\",\n node: node.parent as Node,\n message: `Does not match expected format: ${xlrNode.format}`,\n };\n }\n }\n\n private validateArray(rootNode: Node, xlrNode: ArrayType) {\n const issues: Array<ValidationError> = [];\n rootNode.children?.forEach((child) =>\n issues.push(...this.validateType(child, xlrNode.elementType))\n );\n return issues;\n }\n\n private validateObject(xlrNode: ObjectType, node: Node) {\n const issues: Array<ValidationError> = [];\n const objectProps = makePropertyMap(node);\n\n // eslint-disable-next-line guard-for-in, no-restricted-syntax\n for (const prop in xlrNode.properties) {\n const expectedType = xlrNode.properties[prop];\n const valueNode = objectProps.get(prop);\n if (expectedType.required && valueNode === undefined) {\n issues.push({\n type: \"missing\",\n node,\n message: `Property \"${prop}\" missing from type \"${xlrNode.name}\"`,\n });\n }\n\n if (valueNode) {\n issues.push(\n ...this.validateType(valueNode, expectedType.node as NamedType)\n );\n }\n }\n\n // Check if unknown keys are allowed and if they are - do the violate the constraint\n const extraKeys = Array.from(objectProps.keys()).filter(\n (key) => xlrNode.properties[key] === undefined\n );\n if (xlrNode.additionalProperties === false && extraKeys.length > 0) {\n issues.push({\n type: \"value\",\n node,\n message: `Unexpected properties on \"${xlrNode.name}\": ${extraKeys.join(\n \", \"\n )}`,\n });\n } else {\n issues.push(\n ...extraKeys.flatMap((key) =>\n this.validateType(\n objectProps.get(key) as Node,\n xlrNode.additionalProperties as NodeType\n )\n )\n );\n }\n\n return issues;\n }\n\n private validateLiteralType(expectedType: PrimitiveTypes, literalType: Node) {\n switch (expectedType.type) {\n case \"boolean\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"boolean\";\n case \"number\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"number\";\n case \"string\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"string\";\n case \"null\":\n return literalType.value === \"null\";\n case \"never\":\n return literalType === undefined;\n case \"any\":\n return literalType !== undefined;\n case \"unknown\":\n return literalType !== undefined;\n case \"undefined\":\n return true;\n default:\n return false;\n }\n }\n\n private getRefType(ref: RefType): NodeType {\n let refName = ref.ref;\n if (refName.indexOf(\"<\") > 0) {\n [refName] = refName.split(\"<\");\n }\n\n const actualType = this.resolveType(refName);\n if (!actualType) {\n throw new Error(`Error: can't resolve type reference ${refName}`);\n }\n\n return resolveReferenceNode(ref, actualType);\n }\n\n private getRegex(expString: string): RegExp {\n if (this.regexCache.has(expString)) {\n return this.regexCache.get(expString) as RegExp;\n }\n\n const exp = new RegExp(expString);\n this.regexCache.set(expString, exp);\n return exp;\n }\n\n private computeIntersectionType(types: Array<NodeType>): ObjectType | OrType {\n let firstElement = types[0];\n let effectiveType: ObjectType | OrType;\n\n if (firstElement.type === \"ref\") {\n firstElement = this.getRefType(firstElement);\n }\n\n if (firstElement.type === \"and\") {\n effectiveType = this.computeIntersectionType(firstElement.and);\n } else if (firstElement.type === \"record\") {\n effectiveType = {\n type: \"object\",\n properties: {},\n additionalProperties: firstElement.valueType,\n };\n } else if (firstElement.type !== \"or\" && firstElement.type !== \"object\") {\n throw new Error(\n `Can't compute a union with a non-object type ${firstElement.type} (${firstElement.name})`\n );\n } else {\n effectiveType = firstElement;\n }\n\n types.slice(1).forEach((type) => {\n let typeToApply = type;\n\n if (typeToApply.type === \"record\") {\n typeToApply = {\n type: \"object\",\n properties: {},\n additionalProperties: typeToApply.valueType,\n };\n }\n\n if (type.type === \"ref\") {\n typeToApply = this.getRefType(type);\n }\n\n if (typeToApply.type === \"and\") {\n typeToApply = this.computeIntersectionType([type, effectiveType]);\n }\n\n if (typeToApply.type === \"object\") {\n if (effectiveType.type === \"object\") {\n effectiveType = computeEffectiveObject(effectiveType, typeToApply);\n } else {\n effectiveType = {\n ...effectiveType,\n or: effectiveType.or.map((y) =>\n this.computeIntersectionType([y, typeToApply])\n ),\n };\n }\n } else if (typeToApply.type === \"or\") {\n if (effectiveType.type === \"object\") {\n effectiveType = {\n ...typeToApply,\n or: typeToApply.or.map((y) =>\n this.computeIntersectionType([y, effectiveType])\n ),\n };\n } else {\n throw new Error(\"unimplemented operation or x or projection\");\n }\n } else {\n throw new Error(\n `Can't compute a union with a non-object type ${typeToApply.type} (${typeToApply.name})`\n );\n }\n });\n\n return effectiveType;\n }\n}\n","/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\nimport type {\n NamedType,\n NodeTypeStrings,\n NodeTypeMap,\n TransformFunction,\n NodeType,\n ObjectProperty,\n RefNode,\n} from \"@player-tools/xlr\";\nimport { isGenericNamedType } from \"@player-tools/xlr-utils\";\n\nconst isMatchingCapability = (\n capability: string,\n capabilitiesToMatch: string | Array<string>\n): boolean => {\n if (Array.isArray(capabilitiesToMatch)) {\n return capabilitiesToMatch.includes(capability);\n }\n\n return capability === capabilitiesToMatch;\n};\n\n/**\n * Helper function for simple transforms\n * Walks an XLR tree looking for the specified node type calls the supplied function when called\n */\nexport function simpleTransformGenerator<\n T extends NodeTypeStrings = NodeTypeStrings\n>(\n typeToTransform: T,\n capabilityToTransform: string | Array<string>,\n functionToRun: (input: NodeTypeMap[T]) => NodeTypeMap[T]\n): TransformFunction {\n /** walker for an XLR tree to touch every node */\n const walker: TransformFunction = (\n n: NamedType | NodeType,\n capability: string\n ) => {\n // Run transform on base node before running on children\n if (isMatchingCapability(capability, capabilityToTransform)) {\n let node = { ...n };\n if (node.type === typeToTransform) {\n node = functionToRun(node as unknown as NodeTypeMap[T]);\n }\n\n if (node.type === \"object\") {\n const newObjectProperties: Record<string, ObjectProperty> = {};\n\n for (const key in node.properties) {\n const value = node.properties[key];\n newObjectProperties[key] = {\n required: value.required,\n node: walker(value.node, capability),\n };\n }\n\n // need to walk generic tokens\n return {\n ...node,\n properties: { ...newObjectProperties },\n ...(isGenericNamedType(node)\n ? {\n genericTokens: node.genericTokens.map((token) => {\n return {\n ...token,\n constraints: token.constraints\n ? walker(token.constraints, capability)\n : undefined,\n default: token.default\n ? walker(token.default, capability)\n : undefined,\n };\n }),\n }\n : {}),\n extends: node.extends\n ? (walker(node.extends, capability) as RefNode)\n : undefined,\n additionalProperties: node.additionalProperties\n ? walker(node.additionalProperties, capability)\n : false,\n };\n }\n\n if (node.type === \"array\") {\n return {\n ...node,\n elementType: walker(node.elementType, capability),\n };\n }\n\n if (node.type === \"and\") {\n return {\n ...node,\n and: node.and.map((element) => walker(element, capability)),\n };\n }\n\n if (node.type === \"or\") {\n return {\n ...node,\n or: node.or.map((element) => walker(element, capability)),\n };\n }\n\n if (node.type === \"ref\") {\n return {\n ...node,\n ...(node.genericArguments\n ? {\n genericArguments: node.genericArguments?.map((arg) =>\n walker(arg, capability)\n ),\n }\n : {}),\n };\n }\n\n if (node.type === \"tuple\") {\n return {\n ...node,\n elementTypes: node.elementTypes.map((element) => {\n return {\n name: element.name,\n type: walker(element.type, capability),\n optional: element.optional,\n };\n }),\n additionalItems: node.additionalItems\n ? walker(node.additionalItems, capability)\n : false,\n };\n }\n\n if (node.type === \"function\") {\n return {\n ...node,\n parameters: node.parameters.map((param) => {\n return {\n ...param,\n type: walker(param.type, capability),\n default: param.default\n ? walker(param.default, capability)\n : undefined,\n };\n }),\n returnType: node.returnType\n ? walker(node.returnType, capability)\n : undefined,\n };\n }\n\n if (node.type === \"record\") {\n return {\n ...node,\n keyType: walker(node.keyType, capability),\n valueType: walker(node.valueType, capability),\n };\n }\n\n if (node.type === \"conditional\") {\n return {\n ...node,\n check: {\n left: walker(node.check.left, capability),\n right: walker(node.check.left, capability),\n },\n value: {\n true: walker(node.value.true, capability),\n false: walker(node.value.false, capability),\n },\n };\n }\n }\n\n return n;\n };\n\n return walker;\n}\n"],"mappings":"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","names":["computeEffectiveObject","resolveReferenceNode","resolveReferenceNode","computeEffectiveObject"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/sdk.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/registry/basic-registry.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/validator.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/xlr/sdk/src/utils.ts"],"sourcesContent":["import type {\n Manifest,\n NamedType,\n NodeType,\n ObjectNode,\n ObjectType,\n TransformFunction,\n TSManifest,\n} from \"@player-tools/xlr\";\nimport type { TopLevelDeclaration } from \"@player-tools/xlr-utils\";\nimport {\n computeEffectiveObject,\n resolveReferenceNode,\n} from \"@player-tools/xlr-utils\";\nimport { fillInGenerics } from \"@player-tools/xlr-utils\";\nimport type { Node } from \"jsonc-parser\";\nimport { TSWriter } from \"@player-tools/xlr-converters\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport ts from \"typescript\";\n\nimport type { XLRRegistry, Filters } from \"./registry\";\nimport { BasicXLRRegistry } from \"./registry\";\nimport type { ExportTypes } from \"./types\";\nimport { XLRValidator } from \"./validator\";\nimport { simpleTransformGenerator } from \"./utils\";\n\nexport interface GetTypeOptions {\n /** Resolves `extends` fields in objects */\n getRawType?: boolean;\n}\n\n/**\n * Abstraction for interfacing with XLRs making it more approachable to use without understanding the inner workings of the types and how they are packaged\n */\nexport class XLRSDK {\n private registry: XLRRegistry;\n private validator: XLRValidator;\n private tsWriter: TSWriter;\n private computedNodeCache: Map<string, NodeType>;\n private externalTransformFunctions: Map<string, TransformFunction>;\n\n constructor(customRegistry?: XLRRegistry) {\n this.registry = customRegistry ?? new BasicXLRRegistry();\n this.validator = new XLRValidator(this.getType.bind(this));\n this.tsWriter = new TSWriter();\n this.computedNodeCache = new Map();\n this.externalTransformFunctions = new Map();\n }\n\n /**\n * Loads definitions from a path on the filesystem\n *\n * @param inputPath - path to the directory to load (above the xlr folder)\n * @param filters - Any filters to apply when loading the types (a positive match will omit)\n * @param transforms - any transforms to apply to the types being loaded\n */\n public loadDefinitionsFromDisk(\n inputPath: string,\n filters?: Omit<Filters, \"pluginFilter\">,\n transforms?: Array<TransformFunction>\n ) {\n this.computedNodeCache.clear();\n\n const transformsToRun = [\n ...this.externalTransformFunctions.values(),\n ...(transforms ?? []),\n ];\n\n const manifest = JSON.parse(\n fs.readFileSync(path.join(inputPath, \"xlr\", \"manifest.json\")).toString(),\n (key: unknown, value: unknown) => {\n // Custom parser because JSON objects -> JS Objects, not maps\n if (typeof value === \"object\" && value !== null) {\n if (key === \"capabilities\") {\n return new Map(Object.entries(value));\n }\n }\n\n return value;\n }\n ) as Manifest;\n\n manifest.capabilities?.forEach((capabilityList, capabilityName) => {\n if (\n filters?.capabilityFilter &&\n capabilityName.match(filters?.capabilityFilter)\n )\n return;\n capabilityList.forEach((extensionName) => {\n if (!filters?.typeFilter || !extensionName.match(filters?.typeFilter)) {\n const cType: NamedType<NodeType> = JSON.parse(\n fs\n .readFileSync(\n path.join(inputPath, \"xlr\", `${extensionName}.json`)\n )\n .toString()\n );\n const effectiveType =\n transformsToRun?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n capabilityName\n ) as NamedType<NodeType>,\n cType\n ) ?? cType;\n\n this.registry.add(effectiveType, manifest.pluginName, capabilityName);\n }\n });\n });\n }\n\n /**\n * Load definitions from a js/ts file in memory\n *\n * @param manifest - The imported XLR manifest module\n * @param filters - Any filters to apply when loading the types (a positive match will omit)\n * @param transforms - any transforms to apply to the types being loaded\n */\n public async loadDefinitionsFromModule(\n manifest: TSManifest,\n filters?: Omit<Filters, \"pluginFilter\">,\n transforms?: Array<TransformFunction>\n ) {\n this.computedNodeCache.clear();\n\n const transformsToRun = [\n ...this.externalTransformFunctions.values(),\n ...(transforms ?? []),\n ];\n\n Object.keys(manifest.capabilities)?.forEach((capabilityName) => {\n if (\n filters?.capabilityFilter &&\n capabilityName.match(filters?.capabilityFilter)\n )\n return;\n const capabilityList = manifest.capabilities[capabilityName];\n capabilityList.forEach((extension) => {\n if (\n !filters?.typeFilter ||\n !extension.name.match(filters?.typeFilter)\n ) {\n const effectiveType =\n transformsToRun?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n capabilityName\n ) as NamedType<NodeType>,\n extension\n ) ?? extension;\n\n this.registry.add(effectiveType, manifest.pluginName, capabilityName);\n }\n });\n });\n }\n\n /**\n * Statically load transform function that should be applied to every XLR bundle that is imported\n */\n public addTransformFunction(name: string, fn: TransformFunction): void {\n this.externalTransformFunctions.set(name, fn);\n }\n\n /**\n * Remove any transform function loaded via the `addTransformFunction` method by name\n */\n public removeTransformFunction(name: string): void {\n this.externalTransformFunctions.delete(name);\n }\n\n /**\n * Returns a Type that has been previously loaded\n *\n * @param id - Type to retrieve\n * @param options - `GetTypeOptions`\n * @returns `NamedType<NodeType>` | `undefined`\n */\n public getType(\n id: string,\n options?: GetTypeOptions\n ): NamedType<NodeType> | undefined {\n let type = this.registry.get(id);\n if (options?.getRawType === true || !type) {\n return type;\n }\n\n if (this.computedNodeCache.has(id)) {\n return JSON.parse(JSON.stringify(this.computedNodeCache.get(id))) as\n | NamedType<NodeType>\n | undefined;\n }\n\n type = fillInGenerics(this.resolveType(type)) as NamedType;\n\n this.computedNodeCache.set(id, type);\n\n return type;\n }\n\n /**\n * Returns if a Type with `id` has been loaded into the DSK\n *\n * @param id - Type to retrieve\n * @returns `boolean`\n */\n public hasType(id: string) {\n return this.registry.has(id);\n }\n\n /**\n * Lists types that have been loaded into the SDK\n *\n * @param filters - Any filters to apply to the types returned (a positive match will omit)\n * @returns `Array<NamedTypes>`\n */\n public listTypes(filters?: Filters) {\n return this.registry.list(filters);\n }\n\n /**\n * Returns meta information around a registered type\n *\n * @param id - Name of Type to retrieve\n * @returns `TypeMetaData` | `undefined`\n */\n public getTypeInfo(id: string) {\n return this.registry.info(id);\n }\n\n /**\n * Validates if a JSONC Node follows the XLR Type registered under the `typeName` specified\n *\n * @param typeName - Registered XLR Type to use for validation\n * @param rootNode - Node to validate\n * @returns `Array<ValidationErrors>`\n */\n public validateByName(typeName: string, rootNode: Node) {\n const xlr = this.getType(typeName);\n if (!xlr) {\n throw new Error(\n `Type ${typeName} does not exist in registry, can't validate`\n );\n }\n\n return this.validator.validateType(rootNode, xlr);\n }\n\n /**\n * Validates if a JSONC Node follows the supplied XLR Type\n *\n * @param type - Type to validate against\n * @param rootNode - Node to validate\n * @returns `Array<ValidationErrors>`\n */\n public validateByType(type: NodeType, rootNode: Node) {\n return this.validator.validateType(rootNode, type);\n }\n\n /**\n * Exports the types loaded into the registry to the specified format\n *\n * @param exportType - what format to export as\n * @param importMap - a map of primitive packages to types exported from that package to add import statements\n * @param filters - filter out plugins/capabilities/types you don't want to export\n * @param transforms - transforms to apply to types before exporting them\n * @returns [filename, content][] - Tuples of filenames and content to write\n */\n public exportRegistry(\n exportType: ExportTypes,\n importMap: Map<string, string[]>,\n filters?: Filters,\n transforms?: Array<TransformFunction>\n ): [string, string][] {\n const typesToExport = this.registry.list(filters).map((type) => {\n const resolvedType = this.resolveType(type);\n const effectiveType =\n transforms?.reduce(\n (typeAccumulator: NamedType<NodeType>, transformFn) =>\n transformFn(\n typeAccumulator,\n this.registry.info(type.name)?.capability as string\n ) as NamedType<NodeType>,\n resolvedType\n ) ?? resolvedType;\n\n return effectiveType;\n });\n\n if (exportType === \"TypeScript\") {\n const outputString = this.exportToTypeScript(typesToExport, importMap);\n return [[\"out.d.ts\", outputString]];\n }\n\n throw new Error(`Unknown export format ${exportType}`);\n }\n\n private resolveType(type: NodeType): NamedType {\n return simpleTransformGenerator(\"object\", \"any\", (objectNode) => {\n if (objectNode.extends) {\n const refName = objectNode.extends.ref.split(\"<\")[0];\n let extendedType = this.getType(refName, { getRawType: true });\n if (!extendedType) {\n throw new Error(\n `Error resolving ${objectNode.name}: can't find extended type ${refName}`\n );\n }\n\n extendedType = resolveReferenceNode(\n objectNode.extends,\n extendedType as NamedType<ObjectType>\n ) as NamedType;\n if (extendedType.type === \"object\") {\n return {\n ...computeEffectiveObject(\n extendedType as ObjectType,\n objectNode as ObjectType,\n false\n ),\n name: objectNode.name,\n description: objectNode.description,\n };\n }\n\n // if the merge isn't straightforward, defer until validation time for now\n return {\n name: objectNode.name,\n type: \"and\",\n and: [\n {\n ...objectNode,\n extends: undefined,\n },\n extendedType,\n ],\n } as unknown as ObjectNode;\n }\n\n return objectNode;\n })(type, \"any\") as NamedType;\n }\n\n private exportToTypeScript(\n typesToExport: NamedType[],\n importMap: Map<string, string[]>\n ): string {\n const referencedImports: Set<string> = new Set();\n const exportedTypes: Map<string, TopLevelDeclaration> = new Map();\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n\n let resultFile = ts.createSourceFile(\n \"output.d.ts\",\n \"\",\n ts.ScriptTarget.ES2017,\n false, // setParentNodes\n ts.ScriptKind.TS\n );\n\n typesToExport.forEach((typeNode) => {\n const { type, referencedTypes, additionalTypes } =\n this.tsWriter.convertNamedType(typeNode);\n exportedTypes.set(typeNode.name, type);\n additionalTypes?.forEach((additionalType, name) =>\n exportedTypes.set(name, additionalType)\n );\n referencedTypes?.forEach((referencedType) =>\n referencedImports.add(referencedType)\n );\n });\n\n const typesToPrint: Array<string> = [];\n\n exportedTypes.forEach((type) =>\n typesToPrint.push(\n printer.printNode(ts.EmitHint.Unspecified, type, resultFile)\n )\n );\n\n importMap.forEach((imports, packageName) => {\n const applicableImports = imports.filter((i) => referencedImports.has(i));\n resultFile = ts.factory.updateSourceFile(resultFile, [\n ts.factory.createImportDeclaration(\n /* modifiers */ undefined,\n ts.factory.createImportClause(\n false,\n undefined,\n ts.factory.createNamedImports(\n applicableImports.map((i) =>\n ts.factory.createImportSpecifier(\n false,\n undefined,\n ts.factory.createIdentifier(i)\n )\n )\n )\n ),\n ts.factory.createStringLiteral(packageName)\n ),\n ...resultFile.statements,\n ]);\n });\n\n const headerText = printer.printFile(resultFile);\n const nodeText = typesToPrint.join(\"\\n\");\n return `${headerText}\\n${nodeText}`;\n }\n}\n","import type { NamedType, NodeType } from \"@player-tools/xlr\";\nimport type { XLRRegistry, Filters, TypeMetadata } from \"./types\";\n\n/**\n * Basic example of a XLRs Registry\n */\nexport class BasicXLRRegistry implements XLRRegistry {\n private typeMap: Map<string, NamedType<NodeType>>;\n private pluginMap: Map<string, Map<string, Array<string>>>;\n private infoMap: Map<string, TypeMetadata>;\n\n constructor() {\n this.typeMap = new Map();\n this.pluginMap = new Map();\n this.infoMap = new Map();\n }\n\n /** Returns a copy of the XLR to guard against unexpected type modification */\n get(id: string): NamedType<NodeType> | undefined {\n const value = this.typeMap.get(id);\n return value ? JSON.parse(JSON.stringify(value)) : undefined;\n }\n\n add(type: NamedType<NodeType>, plugin: string, capability: string): void {\n this.typeMap.set(type.name, type);\n this.infoMap.set(type.name, { plugin, capability });\n\n if (!this.pluginMap.has(plugin)) {\n this.pluginMap.set(plugin, new Map());\n }\n\n const pluginsCapabilities = this.pluginMap.get(plugin) as Map<\n string,\n Array<string>\n >;\n\n if (!pluginsCapabilities.has(capability)) {\n pluginsCapabilities.set(capability, []);\n }\n\n const providedCapabilities = pluginsCapabilities.get(\n capability\n ) as string[];\n providedCapabilities.push(type.name);\n }\n\n has(id: string): boolean {\n return this.typeMap.has(id);\n }\n\n list(filterArgs?: Filters): NamedType<NodeType>[] {\n const validTypes: Array<string> = [];\n\n this.pluginMap.forEach((manifest, pluginName) => {\n if (\n !filterArgs?.pluginFilter ||\n !pluginName.match(filterArgs.pluginFilter)\n ) {\n manifest.forEach((types, capabilityName) => {\n if (\n !filterArgs?.capabilityFilter ||\n !capabilityName.match(filterArgs.capabilityFilter)\n ) {\n types.forEach((type) => {\n if (\n !filterArgs?.typeFilter ||\n !type.match(filterArgs.typeFilter)\n ) {\n validTypes.push(type);\n }\n });\n }\n });\n }\n });\n return validTypes.map((type) => this.get(type) as NamedType);\n }\n\n info(id: string): TypeMetadata | undefined {\n return this.infoMap.get(id);\n }\n}\n","import type { Node } from \"jsonc-parser\";\nimport type {\n ArrayType,\n NamedType,\n NodeType,\n ObjectType,\n OrType,\n PrimitiveTypes,\n RefType,\n TemplateLiteralType,\n} from \"@player-tools/xlr\";\nimport {\n makePropertyMap,\n resolveConditional,\n isPrimitiveTypeNode,\n resolveReferenceNode,\n computeEffectiveObject,\n} from \"@player-tools/xlr-utils\";\nimport type { ValidationError } from \"./types\";\n\n/**\n * Validator for XLRs on JSON Nodes\n */\nexport class XLRValidator {\n private resolveType: (id: string) => NamedType<NodeType> | undefined;\n private regexCache: Map<string, RegExp>;\n\n constructor(resolveType: (id: string) => NamedType<NodeType> | undefined) {\n this.resolveType = resolveType;\n this.regexCache = new Map();\n }\n\n /** Main entrypoint for validation */\n public validateType(\n rootNode: Node,\n xlrNode: NodeType\n ): Array<ValidationError> {\n const validationIssues = new Array<ValidationError>();\n if (xlrNode.type === \"object\") {\n if (rootNode.type === \"object\") {\n validationIssues.push(...this.validateObject(xlrNode, rootNode));\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode,\n message: `Expected an object but got an \"${rootNode.type}\"`,\n });\n }\n } else if (xlrNode.type === \"array\") {\n if (rootNode.type === \"array\") {\n validationIssues.push(...this.validateArray(rootNode, xlrNode));\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode,\n message: `Expected an array but got an \"${rootNode.type}\"`,\n });\n }\n } else if (xlrNode.type === \"template\") {\n const error = this.validateTemplate(rootNode, xlrNode);\n if (error) {\n validationIssues.push(error);\n }\n } else if (xlrNode.type === \"or\") {\n // eslint-disable-next-line no-restricted-syntax\n for (const potentialType of xlrNode.or) {\n const potentialErrors = this.validateType(rootNode, potentialType);\n if (potentialErrors.length === 0) {\n return validationIssues;\n }\n }\n\n let message: string;\n\n if (xlrNode.name) {\n message = `Does not match any of the expected types for type: '${xlrNode.name}'`;\n } else if (xlrNode.title) {\n message = `Does not match any of the expected types for property: '${xlrNode.title}'`;\n } else {\n message = `Does not match any of the types ${xlrNode.or\n .map((node) => node.name ?? node.title ?? \"<unnamed type>\")\n .join(\" | \")}`;\n }\n\n validationIssues.push({\n type: \"value\",\n node: rootNode,\n message,\n });\n } else if (xlrNode.type === \"and\") {\n const effectiveType = {\n ...this.computeIntersectionType(xlrNode.and),\n ...(xlrNode.name ? { name: xlrNode.name } : {}),\n };\n validationIssues.push(...this.validateType(rootNode, effectiveType));\n } else if (xlrNode.type === \"record\") {\n rootNode.children?.forEach((child) => {\n validationIssues.push(\n ...this.validateType(child.children?.[0] as Node, xlrNode.keyType)\n );\n validationIssues.push(\n ...this.validateType(child.children?.[1] as Node, xlrNode.valueType)\n );\n });\n } else if (xlrNode.type === \"ref\") {\n const refType = this.getRefType(xlrNode);\n if (refType === undefined) {\n validationIssues.push({\n type: \"unknown\",\n node: rootNode,\n message: `Type \"${xlrNode.ref}\" is not defined in provided bundles`,\n });\n } else {\n validationIssues.push(\n ...this.validateType(rootNode, refType as NamedType)\n );\n }\n } else if (isPrimitiveTypeNode(xlrNode)) {\n if (!this.validateLiteralType(xlrNode, rootNode)) {\n if (\n (xlrNode.type === \"string\" ||\n xlrNode.type === \"number\" ||\n xlrNode.type === \"boolean\") &&\n xlrNode.const\n ) {\n validationIssues.push({\n type: \"type\",\n node: rootNode.parent as Node,\n message: `Expected \"${xlrNode.const}\" but got \"${rootNode.value}\"`,\n });\n } else {\n validationIssues.push({\n type: \"type\",\n node: rootNode.parent as Node,\n message: `Expected type \"${xlrNode.type}\" but got \"${rootNode.type}\"`,\n });\n }\n }\n } else if (xlrNode.type === \"conditional\") {\n // Resolve RefNodes in check conditions if needed\n let { right, left } = xlrNode.check;\n\n if (right.type === \"ref\") {\n right = this.getRefType(right);\n }\n\n if (left.type === \"ref\") {\n left = this.getRefType(left);\n }\n\n const resolvedXLRNode = {\n ...xlrNode,\n check: {\n left,\n right,\n },\n };\n\n const resolvedConditional = resolveConditional(resolvedXLRNode);\n if (resolvedConditional === resolvedXLRNode) {\n throw Error(\n `Unable to resolve conditional type at runtime: ${xlrNode.name}`\n );\n }\n\n validationIssues.push(\n ...this.validateType(rootNode, resolvedConditional)\n );\n } else {\n throw Error(`Unknown type ${xlrNode.type}`);\n }\n\n return validationIssues;\n }\n\n private validateTemplate(\n node: Node,\n xlrNode: TemplateLiteralType\n ): ValidationError | undefined {\n if (node.type !== \"string\") {\n return {\n type: \"type\",\n node: node.parent as Node,\n message: `Expected type \"${xlrNode.type}\" but got \"${typeof node}\"`,\n };\n }\n\n const regex = this.getRegex(xlrNode.format);\n const valid = regex.exec(node.value);\n if (!valid) {\n return {\n type: \"value\",\n node: node.parent as Node,\n message: `Does not match expected format: ${xlrNode.format}`,\n };\n }\n }\n\n private validateArray(rootNode: Node, xlrNode: ArrayType) {\n const issues: Array<ValidationError> = [];\n rootNode.children?.forEach((child) =>\n issues.push(...this.validateType(child, xlrNode.elementType))\n );\n return issues;\n }\n\n private validateObject(xlrNode: ObjectType, node: Node) {\n const issues: Array<ValidationError> = [];\n const objectProps = makePropertyMap(node);\n\n // eslint-disable-next-line guard-for-in, no-restricted-syntax\n for (const prop in xlrNode.properties) {\n const expectedType = xlrNode.properties[prop];\n const valueNode = objectProps.get(prop);\n if (expectedType.required && valueNode === undefined) {\n issues.push({\n type: \"missing\",\n node,\n message: `Property \"${prop}\" missing from type \"${xlrNode.name}\"`,\n });\n }\n\n if (valueNode) {\n issues.push(\n ...this.validateType(valueNode, expectedType.node as NamedType)\n );\n }\n }\n\n // Check if unknown keys are allowed and if they are - do the violate the constraint\n const extraKeys = Array.from(objectProps.keys()).filter(\n (key) => xlrNode.properties[key] === undefined\n );\n if (xlrNode.additionalProperties === false && extraKeys.length > 0) {\n issues.push({\n type: \"value\",\n node,\n message: `Unexpected properties on \"${xlrNode.name}\": ${extraKeys.join(\n \", \"\n )}`,\n });\n } else {\n issues.push(\n ...extraKeys.flatMap((key) =>\n this.validateType(\n objectProps.get(key) as Node,\n xlrNode.additionalProperties as NodeType\n )\n )\n );\n }\n\n return issues;\n }\n\n private validateLiteralType(expectedType: PrimitiveTypes, literalType: Node) {\n switch (expectedType.type) {\n case \"boolean\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"boolean\";\n case \"number\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"number\";\n case \"string\":\n if (expectedType.const) {\n return expectedType.const === literalType.value;\n }\n\n return typeof literalType.value === \"string\";\n case \"null\":\n return literalType.value === \"null\";\n case \"never\":\n return literalType === undefined;\n case \"any\":\n return literalType !== undefined;\n case \"unknown\":\n return literalType !== undefined;\n case \"undefined\":\n return true;\n default:\n return false;\n }\n }\n\n private getRefType(ref: RefType): NodeType {\n let refName = ref.ref;\n if (refName.indexOf(\"<\") > 0) {\n [refName] = refName.split(\"<\");\n }\n\n const actualType = this.resolveType(refName);\n if (!actualType) {\n throw new Error(`Error: can't resolve type reference ${refName}`);\n }\n\n return resolveReferenceNode(ref, actualType);\n }\n\n private getRegex(expString: string): RegExp {\n if (this.regexCache.has(expString)) {\n return this.regexCache.get(expString) as RegExp;\n }\n\n const exp = new RegExp(expString);\n this.regexCache.set(expString, exp);\n return exp;\n }\n\n private computeIntersectionType(types: Array<NodeType>): ObjectType | OrType {\n let firstElement = types[0];\n let effectiveType: ObjectType | OrType;\n\n if (firstElement.type === \"ref\") {\n firstElement = this.getRefType(firstElement);\n }\n\n if (firstElement.type === \"and\") {\n effectiveType = this.computeIntersectionType(firstElement.and);\n } else if (firstElement.type === \"record\") {\n effectiveType = {\n type: \"object\",\n properties: {},\n additionalProperties: firstElement.valueType,\n };\n } else if (firstElement.type !== \"or\" && firstElement.type !== \"object\") {\n throw new Error(\n `Can't compute a union with a non-object type ${firstElement.type} (${firstElement.name})`\n );\n } else {\n effectiveType = firstElement;\n }\n\n types.slice(1).forEach((type) => {\n let typeToApply = type;\n\n if (typeToApply.type === \"record\") {\n typeToApply = {\n type: \"object\",\n properties: {},\n additionalProperties: typeToApply.valueType,\n };\n }\n\n if (type.type === \"ref\") {\n typeToApply = this.getRefType(type);\n }\n\n if (typeToApply.type === \"and\") {\n typeToApply = this.computeIntersectionType([type, effectiveType]);\n }\n\n if (typeToApply.type === \"object\") {\n if (effectiveType.type === \"object\") {\n effectiveType = computeEffectiveObject(effectiveType, typeToApply);\n } else {\n effectiveType = {\n ...effectiveType,\n or: effectiveType.or.map((y) =>\n this.computeIntersectionType([y, typeToApply])\n ),\n };\n }\n } else if (typeToApply.type === \"or\") {\n if (effectiveType.type === \"object\") {\n effectiveType = {\n ...typeToApply,\n or: typeToApply.or.map((y) =>\n this.computeIntersectionType([y, effectiveType])\n ),\n };\n } else {\n throw new Error(\"unimplemented operation or x or projection\");\n }\n } else {\n throw new Error(\n `Can't compute a union with a non-object type ${typeToApply.type} (${typeToApply.name})`\n );\n }\n });\n\n return effectiveType;\n }\n}\n","/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\nimport type {\n NamedType,\n NodeTypeStrings,\n NodeTypeMap,\n TransformFunction,\n NodeType,\n ObjectProperty,\n RefNode,\n} from \"@player-tools/xlr\";\nimport { isGenericNamedType } from \"@player-tools/xlr-utils\";\n\nconst isMatchingCapability = (\n capability: string,\n capabilitiesToMatch: string | Array<string>\n): boolean => {\n if (Array.isArray(capabilitiesToMatch)) {\n return capabilitiesToMatch.includes(capability);\n }\n\n return capability === capabilitiesToMatch;\n};\n\n/**\n * Helper function for simple transforms\n * Walks an XLR tree looking for the specified node type calls the supplied function when called\n */\nexport function simpleTransformGenerator<\n T extends NodeTypeStrings = NodeTypeStrings\n>(\n typeToTransform: T,\n capabilityToTransform: string | Array<string>,\n functionToRun: (input: NodeTypeMap[T]) => NodeTypeMap[T]\n): TransformFunction {\n /** walker for an XLR tree to touch every node */\n const walker: TransformFunction = (\n n: NamedType | NodeType,\n capability: string\n ) => {\n // Run transform on base node before running on children\n if (isMatchingCapability(capability, capabilityToTransform)) {\n let node = { ...n };\n if (node.type === typeToTransform) {\n node = functionToRun(node as unknown as NodeTypeMap[T]);\n }\n\n if (node.type === \"object\") {\n const newObjectProperties: Record<string, ObjectProperty> = {};\n\n for (const key in node.properties) {\n const value = node.properties[key];\n newObjectProperties[key] = {\n required: value.required,\n node: walker(value.node, capability),\n };\n }\n\n // need to walk generic tokens\n return {\n ...node,\n properties: { ...newObjectProperties },\n ...(isGenericNamedType(node)\n ? {\n genericTokens: node.genericTokens.map((token) => {\n return {\n ...token,\n constraints: token.constraints\n ? walker(token.constraints, capability)\n : undefined,\n default: token.default\n ? walker(token.default, capability)\n : undefined,\n };\n }),\n }\n : {}),\n extends: node.extends\n ? (walker(node.extends, capability) as RefNode)\n : undefined,\n additionalProperties: node.additionalProperties\n ? walker(node.additionalProperties, capability)\n : false,\n };\n }\n\n if (node.type === \"array\") {\n return {\n ...node,\n elementType: walker(node.elementType, capability),\n };\n }\n\n if (node.type === \"and\") {\n return {\n ...node,\n and: node.and.map((element) => walker(element, capability)),\n };\n }\n\n if (node.type === \"or\") {\n return {\n ...node,\n or: node.or.map((element) => walker(element, capability)),\n };\n }\n\n if (node.type === \"ref\") {\n return {\n ...node,\n ...(node.genericArguments\n ? {\n genericArguments: node.genericArguments?.map((arg) =>\n walker(arg, capability)\n ),\n }\n : {}),\n };\n }\n\n if (node.type === \"tuple\") {\n return {\n ...node,\n elementTypes: node.elementTypes.map((element) => {\n return {\n name: element.name,\n type: walker(element.type, capability),\n optional: element.optional,\n };\n }),\n additionalItems: node.additionalItems\n ? walker(node.additionalItems, capability)\n : false,\n };\n }\n\n if (node.type === \"function\") {\n return {\n ...node,\n parameters: node.parameters.map((param) => {\n return {\n ...param,\n type: walker(param.type, capability),\n default: param.default\n ? walker(param.default, capability)\n : undefined,\n };\n }),\n returnType: node.returnType\n ? walker(node.returnType, capability)\n : undefined,\n };\n }\n\n if (node.type === \"record\") {\n return {\n ...node,\n keyType: walker(node.keyType, capability),\n valueType: walker(node.valueType, capability),\n };\n }\n\n if (node.type === \"conditional\") {\n return {\n ...node,\n check: {\n left: walker(node.check.left, capability),\n right: walker(node.check.left, capability),\n },\n value: {\n true: walker(node.value.true, capability),\n false: walker(node.value.false, capability),\n },\n };\n }\n }\n\n return n;\n };\n\n return walker;\n}\n"],"mappings":"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","names":["computeEffectiveObject","resolveReferenceNode","resolveReferenceNode","computeEffectiveObject"]}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@player-tools/xlr-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0-next.0",
|
|
4
4
|
"main": "dist/cjs/index.cjs",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@player-tools/xlr": "0.
|
|
7
|
-
"@player-tools/xlr-utils": "0.
|
|
8
|
-
"@player-tools/xlr-converters": "0.
|
|
6
|
+
"@player-tools/xlr": "0.6.0-next.0",
|
|
7
|
+
"@player-tools/xlr-utils": "0.6.0-next.0",
|
|
8
|
+
"@player-tools/xlr-converters": "0.6.0-next.0",
|
|
9
9
|
"@types/fs-extra": "^9.0.13",
|
|
10
10
|
"@types/node": "^18.18.0",
|
|
11
11
|
"fs-extra": "^10.0.0",
|