ifc-expressions 2.3.0 → 3.0.0-beta.2

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.
Files changed (185) hide show
  1. package/README.md +255 -30
  2. package/dist/IfcExpression.d.ts +24 -26
  3. package/dist/IfcExpressionErrorListener.d.ts +3 -3
  4. package/dist/IfcExpressionOptions.d.ts +4 -0
  5. package/dist/autocomplete/CompletionItem.d.ts +24 -0
  6. package/dist/autocomplete/IfcExpressionAutocomplete.d.ts +11 -0
  7. package/dist/builtin/BuiltinRuntimeValueConverter.d.ts +7 -0
  8. package/dist/builtin/BuiltinVariableRegistry.d.ts +50 -0
  9. package/dist/cjs/IfcExpression.js +112 -37
  10. package/dist/cjs/IfcExpression.js.map +1 -1
  11. package/dist/cjs/IfcExpressionErrorListener.js +3 -8
  12. package/dist/cjs/IfcExpressionErrorListener.js.map +1 -1
  13. package/dist/cjs/IfcExpressionOptions.js +3 -0
  14. package/dist/cjs/IfcExpressionOptions.js.map +1 -0
  15. package/dist/cjs/autocomplete/CompletionItem.js +3 -0
  16. package/dist/cjs/autocomplete/CompletionItem.js.map +1 -0
  17. package/dist/cjs/autocomplete/IfcExpressionAutocomplete.js +654 -0
  18. package/dist/cjs/autocomplete/IfcExpressionAutocomplete.js.map +1 -0
  19. package/dist/cjs/builtin/BuiltinRuntimeValueConverter.js +124 -0
  20. package/dist/cjs/builtin/BuiltinRuntimeValueConverter.js.map +1 -0
  21. package/dist/cjs/builtin/BuiltinVariableRegistry.js +405 -0
  22. package/dist/cjs/builtin/BuiltinVariableRegistry.js.map +1 -0
  23. package/dist/cjs/compiler/ExprCompiler.js +44 -41
  24. package/dist/cjs/compiler/ExprCompiler.js.map +1 -1
  25. package/dist/cjs/compiler/ExprManager.js.map +1 -1
  26. package/dist/cjs/compiler/IfcExpressionValidationListener.js +85 -25
  27. package/dist/cjs/compiler/IfcExpressionValidationListener.js.map +1 -1
  28. package/dist/cjs/compiler/TypeManager.js.map +1 -1
  29. package/dist/cjs/context/IfcExpressionContext.js.map +1 -1
  30. package/dist/cjs/context/NopContext.js +3 -0
  31. package/dist/cjs/context/NopContext.js.map +1 -1
  32. package/dist/cjs/documentation/Documentation.js +11 -0
  33. package/dist/cjs/documentation/Documentation.js.map +1 -0
  34. package/dist/cjs/error/ExpressionTypeError.js.map +1 -1
  35. package/dist/cjs/error/IfcExpressionBuiltinConfigException.js +10 -0
  36. package/dist/cjs/error/IfcExpressionBuiltinConfigException.js.map +1 -0
  37. package/dist/cjs/error/InvalidSyntaxException.js.map +1 -1
  38. package/dist/cjs/error/NoSuchFunctionException.js.map +1 -1
  39. package/dist/cjs/error/NoSuchMemberException.js +13 -0
  40. package/dist/cjs/error/NoSuchMemberException.js.map +1 -0
  41. package/dist/cjs/error/ValidationException.js.map +1 -1
  42. package/dist/cjs/error/WrongFunctionArgumentTypeException.js.map +1 -1
  43. package/dist/cjs/expression/ExprKind.js +3 -0
  44. package/dist/cjs/expression/ExprKind.js.map +1 -1
  45. package/dist/cjs/expression/function/Func.js +18 -14
  46. package/dist/cjs/expression/function/Func.js.map +1 -1
  47. package/dist/cjs/expression/function/FuncArg.js +11 -5
  48. package/dist/cjs/expression/function/FuncArg.js.map +1 -1
  49. package/dist/cjs/expression/function/IfcExpressionFunctions.js +198 -42
  50. package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  51. package/dist/cjs/expression/function/impl/CHOOSE.js.map +1 -1
  52. package/dist/cjs/expression/function/impl/IF.js.map +1 -1
  53. package/dist/cjs/expression/function/impl/MAP.js.map +1 -1
  54. package/dist/cjs/expression/function/impl/ReplacePattern.js +20 -2
  55. package/dist/cjs/expression/function/impl/ReplacePattern.js.map +1 -1
  56. package/dist/cjs/expression/reference/BuiltinFunctionCallExpr.js +59 -0
  57. package/dist/cjs/expression/reference/BuiltinFunctionCallExpr.js.map +1 -0
  58. package/dist/cjs/expression/reference/BuiltinPropertyAccessExpr.js +34 -0
  59. package/dist/cjs/expression/reference/BuiltinPropertyAccessExpr.js.map +1 -0
  60. package/dist/cjs/expression/reference/BuiltinRootReferenceExpr.js +29 -0
  61. package/dist/cjs/expression/reference/BuiltinRootReferenceExpr.js.map +1 -0
  62. package/dist/cjs/gen/parser/IfcExpressionLexer.js +126 -104
  63. package/dist/cjs/gen/parser/IfcExpressionLexer.js.map +1 -1
  64. package/dist/cjs/gen/parser/IfcExpressionListener.js +7 -4
  65. package/dist/cjs/gen/parser/IfcExpressionListener.js.map +1 -1
  66. package/dist/cjs/gen/parser/IfcExpressionParser.js +739 -682
  67. package/dist/cjs/gen/parser/IfcExpressionParser.js.map +1 -1
  68. package/dist/cjs/gen/parser/IfcExpressionVisitor.js +4 -4
  69. package/dist/cjs/gen/parser/IfcExpressionVisitor.js.map +1 -1
  70. package/dist/cjs/index.js +4 -1
  71. package/dist/cjs/index.js.map +1 -1
  72. package/dist/cjs/type/ContextObjectType.js +45 -0
  73. package/dist/cjs/type/ContextObjectType.js.map +1 -0
  74. package/dist/cjs/type/Types.js +4 -6
  75. package/dist/cjs/type/Types.js.map +1 -1
  76. package/dist/cjs/value/ContextObjectValue.js +23 -0
  77. package/dist/cjs/value/ContextObjectValue.js.map +1 -0
  78. package/dist/cjs/value/ExpressionValue.js.map +1 -1
  79. package/dist/cjs/value/Value.js.map +1 -1
  80. package/dist/compiler/ExprCompiler.d.ts +8 -3
  81. package/dist/compiler/ExprManager.d.ts +1 -1
  82. package/dist/compiler/IfcExpressionValidationListener.d.ts +9 -3
  83. package/dist/compiler/TypeManager.d.ts +1 -1
  84. package/dist/context/IfcExpressionContext.d.ts +3 -4
  85. package/dist/context/NopContext.d.ts +1 -0
  86. package/dist/documentation/Documentation.d.ts +12 -0
  87. package/dist/error/ExpressionTypeError.d.ts +1 -1
  88. package/dist/error/IfcExpressionBuiltinConfigException.d.ts +3 -0
  89. package/dist/error/InvalidSyntaxException.d.ts +1 -1
  90. package/dist/error/NoSuchFunctionException.d.ts +1 -1
  91. package/dist/error/NoSuchMemberException.d.ts +6 -0
  92. package/dist/error/ValidationException.d.ts +1 -1
  93. package/dist/error/WrongFunctionArgumentTypeException.d.ts +1 -1
  94. package/dist/expression/ExprKind.d.ts +3 -0
  95. package/dist/expression/function/Func.d.ts +7 -21
  96. package/dist/expression/function/FuncArg.d.ts +6 -5
  97. package/dist/expression/function/IfcExpressionFunctions.d.ts +1 -0
  98. package/dist/expression/function/impl/CHOOSE.d.ts +1 -1
  99. package/dist/expression/function/impl/IF.d.ts +1 -1
  100. package/dist/expression/function/impl/MAP.d.ts +1 -1
  101. package/dist/expression/reference/BuiltinFunctionCallExpr.d.ts +19 -0
  102. package/dist/expression/reference/BuiltinPropertyAccessExpr.d.ts +15 -0
  103. package/dist/expression/reference/BuiltinRootReferenceExpr.d.ts +14 -0
  104. package/dist/gen/parser/IfcExpressionLexer.d.ts +9 -8
  105. package/dist/gen/parser/IfcExpressionListener.d.ts +89 -59
  106. package/dist/gen/parser/IfcExpressionParser.d.ts +192 -169
  107. package/dist/gen/parser/IfcExpressionVisitor.d.ts +51 -35
  108. package/dist/index.d.ts +2 -2
  109. package/dist/mjs/IfcExpression.js +104 -32
  110. package/dist/mjs/IfcExpression.js.map +1 -1
  111. package/dist/mjs/IfcExpressionErrorListener.js +3 -8
  112. package/dist/mjs/IfcExpressionErrorListener.js.map +1 -1
  113. package/dist/mjs/IfcExpressionOptions.js +2 -0
  114. package/dist/mjs/IfcExpressionOptions.js.map +1 -0
  115. package/dist/mjs/autocomplete/CompletionItem.js +2 -0
  116. package/dist/mjs/autocomplete/CompletionItem.js.map +1 -0
  117. package/dist/mjs/autocomplete/IfcExpressionAutocomplete.js +650 -0
  118. package/dist/mjs/autocomplete/IfcExpressionAutocomplete.js.map +1 -0
  119. package/dist/mjs/builtin/BuiltinRuntimeValueConverter.js +117 -0
  120. package/dist/mjs/builtin/BuiltinRuntimeValueConverter.js.map +1 -0
  121. package/dist/mjs/builtin/BuiltinVariableRegistry.js +399 -0
  122. package/dist/mjs/builtin/BuiltinVariableRegistry.js.map +1 -0
  123. package/dist/mjs/compiler/ExprCompiler.js +43 -40
  124. package/dist/mjs/compiler/ExprCompiler.js.map +1 -1
  125. package/dist/mjs/compiler/ExprManager.js.map +1 -1
  126. package/dist/mjs/compiler/IfcExpressionValidationListener.js +85 -22
  127. package/dist/mjs/compiler/IfcExpressionValidationListener.js.map +1 -1
  128. package/dist/mjs/compiler/TypeManager.js.map +1 -1
  129. package/dist/mjs/context/IfcExpressionContext.js.map +1 -1
  130. package/dist/mjs/context/NopContext.js +3 -0
  131. package/dist/mjs/context/NopContext.js.map +1 -1
  132. package/dist/mjs/documentation/Documentation.js +7 -0
  133. package/dist/mjs/documentation/Documentation.js.map +1 -0
  134. package/dist/mjs/error/ExpressionTypeError.js.map +1 -1
  135. package/dist/mjs/error/IfcExpressionBuiltinConfigException.js +6 -0
  136. package/dist/mjs/error/IfcExpressionBuiltinConfigException.js.map +1 -0
  137. package/dist/mjs/error/InvalidSyntaxException.js.map +1 -1
  138. package/dist/mjs/error/NoSuchFunctionException.js.map +1 -1
  139. package/dist/mjs/error/NoSuchMemberException.js +9 -0
  140. package/dist/mjs/error/NoSuchMemberException.js.map +1 -0
  141. package/dist/mjs/error/ValidationException.js.map +1 -1
  142. package/dist/mjs/error/WrongFunctionArgumentTypeException.js.map +1 -1
  143. package/dist/mjs/expression/ExprKind.js +3 -0
  144. package/dist/mjs/expression/ExprKind.js.map +1 -1
  145. package/dist/mjs/expression/function/Func.js +18 -14
  146. package/dist/mjs/expression/function/Func.js.map +1 -1
  147. package/dist/mjs/expression/function/FuncArg.js +11 -5
  148. package/dist/mjs/expression/function/FuncArg.js.map +1 -1
  149. package/dist/mjs/expression/function/IfcExpressionFunctions.js +198 -42
  150. package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  151. package/dist/mjs/expression/function/impl/CHOOSE.js.map +1 -1
  152. package/dist/mjs/expression/function/impl/IF.js.map +1 -1
  153. package/dist/mjs/expression/function/impl/MAP.js.map +1 -1
  154. package/dist/mjs/expression/function/impl/ReplacePattern.js +20 -2
  155. package/dist/mjs/expression/function/impl/ReplacePattern.js.map +1 -1
  156. package/dist/mjs/expression/reference/BuiltinFunctionCallExpr.js +55 -0
  157. package/dist/mjs/expression/reference/BuiltinFunctionCallExpr.js.map +1 -0
  158. package/dist/mjs/expression/reference/BuiltinPropertyAccessExpr.js +30 -0
  159. package/dist/mjs/expression/reference/BuiltinPropertyAccessExpr.js.map +1 -0
  160. package/dist/mjs/expression/reference/BuiltinRootReferenceExpr.js +25 -0
  161. package/dist/mjs/expression/reference/BuiltinRootReferenceExpr.js.map +1 -0
  162. package/dist/mjs/gen/parser/IfcExpressionLexer.js +101 -104
  163. package/dist/mjs/gen/parser/IfcExpressionLexer.js.map +1 -1
  164. package/dist/mjs/gen/parser/IfcExpressionListener.js +5 -3
  165. package/dist/mjs/gen/parser/IfcExpressionListener.js.map +1 -1
  166. package/dist/mjs/gen/parser/IfcExpressionParser.js +700 -670
  167. package/dist/mjs/gen/parser/IfcExpressionParser.js.map +1 -1
  168. package/dist/mjs/gen/parser/IfcExpressionVisitor.js +2 -3
  169. package/dist/mjs/gen/parser/IfcExpressionVisitor.js.map +1 -1
  170. package/dist/mjs/index.js +1 -1
  171. package/dist/mjs/index.js.map +1 -1
  172. package/dist/mjs/type/ContextObjectType.js +41 -0
  173. package/dist/mjs/type/ContextObjectType.js.map +1 -0
  174. package/dist/mjs/type/Types.js +4 -6
  175. package/dist/mjs/type/Types.js.map +1 -1
  176. package/dist/mjs/value/ContextObjectValue.js +19 -0
  177. package/dist/mjs/value/ContextObjectValue.js.map +1 -0
  178. package/dist/mjs/value/ExpressionValue.js.map +1 -1
  179. package/dist/mjs/value/Value.js.map +1 -1
  180. package/dist/type/ContextObjectType.d.ts +17 -0
  181. package/dist/type/Types.d.ts +2 -6
  182. package/dist/value/ContextObjectValue.d.ts +11 -0
  183. package/dist/value/ExpressionValue.d.ts +2 -1
  184. package/dist/value/Value.d.ts +1 -1
  185. package/package.json +5 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/autocomplete/IfcExpressionAutocomplete.ts"],"names":[],"mappings":"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","file":"autocomplete/IfcExpressionAutocomplete.js","sourcesContent":["import {\n CharStream,\n CommonTokenStream,\n ParserRuleContext,\n Token,\n} from \"antlr4ng\";\nimport {\n CandidatesCollection,\n CodeCompletionCore,\n ICandidateRule,\n} from \"antlr4-c3\";\nimport {\n BuiltinFunctionDefinition,\n BuiltinMemberDefinition,\n BuiltinVariableRegistry,\n} from \"../builtin/BuiltinVariableRegistry.js\";\nimport { IfcExpressionLexer } from \"../gen/parser/IfcExpressionLexer.js\";\nimport {\n ExprListContext,\n FunctionCallContext,\n IfcExpressionParser,\n MethodAccessorContext,\n MethodCallChainContext,\n MethodCallChainEndContext,\n MethodCallChainInnerContext,\n MethodFunctionCallContext,\n MethodPropertyAccessContext,\n SEMethodCallContext,\n SEParenthesisContext,\n SEVariableRefContext,\n SingleExprContext,\n} from \"../gen/parser/IfcExpressionParser.js\";\nimport { IfcExpressionFunctions } from \"../expression/function/IfcExpressionFunctions.js\";\nimport { ContextObjectType } from \"../type/ContextObjectType.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { CompletionItem, CompletionResult } from \"./CompletionItem.js\";\nimport {\n DocumentationLocalizer,\n resolveLocalizedText,\n} from \"../documentation/Documentation.js\";\n\nexport type IfcExpressionAutocompleteOptions = {\n builtinVariableRegistry?: BuiltinVariableRegistry;\n localizer?: DocumentationLocalizer;\n emptyExpressionStarters?: Array<string>;\n};\n\ntype CompletedAccessorStep =\n | {\n name: string;\n kind: \"property\";\n startTokenIndex: number;\n }\n | {\n name: string;\n kind: \"function\";\n argumentCount: number;\n startTokenIndex: number;\n };\n\ntype MethodAccessorStep =\n | CompletedAccessorStep\n | {\n kind: \"incomplete\";\n startTokenIndex: number;\n };\n\ntype ParsedAutocompleteInput = {\n parser: IfcExpressionParser;\n parseTree: ParserRuleContext;\n tokens: Array<Token>;\n caretTokenIndex: number;\n};\n\nfunction isIdentifierChar(char: string | undefined): boolean {\n return typeof char === \"string\" && /[a-zA-Z0-9_\\-$&]/.test(char);\n}\n\nfunction toBuiltinLabel(name: string): string {\n return name.startsWith(\"$\") ? name : `$${name}`;\n}\n\nfunction normalizeForMatch(value: string): string {\n return value.toUpperCase();\n}\n\nfunction toCompletionTypeName(type: ExprType): string {\n return type.getName().replace(/^\\$/, \"\");\n}\n\nfunction isChainableType(type: ExprType): boolean {\n return type instanceof ContextObjectType;\n}\n\nconst unsupportedPrimitiveMethodFunctionNames = new Set([\n \"NAME\",\n \"GUID\",\n \"IFCCLASS\",\n \"DESCRIPTION\",\n \"VALUE\",\n]);\n\nconst preferredMethodLabels = new Map<string, string>([\n [\"MAP\", \"map\"],\n [\"CHOOSE\", \"choose\"],\n [\"AT\", \"at\"],\n [\"IF\", \"if\"],\n [\"ROUND\", \"round\"],\n [\"NAME\", \"name\"],\n [\"GUID\", \"guid\"],\n [\"IFCCLASS\", \"ifcClass\"],\n [\"DESCRIPTION\", \"description\"],\n [\"VALUE\", \"value\"],\n [\"PROPERTYSET\", \"propertySet\"],\n [\"PROPERTY\", \"property\"],\n [\"TYPE\", \"type\"],\n [\"NOT\", \"not\"],\n [\"TOSTRING\", \"toString\"],\n [\"TONUMERIC\", \"toNumeric\"],\n [\"TONUMBER\", \"toNumber\"],\n [\"TOBOOLEAN\", \"toBoolean\"],\n [\"TOLOGICAL\", \"toLogical\"],\n [\"NOTFOUNDASUNKNOWN\", \"notFoundAsUnknown\"],\n [\"TOIFCDATE\", \"toIfcDate\"],\n [\"TOIFCTIME\", \"toIfcTime\"],\n [\"TOIFCDATETIME\", \"toIfcDateTime\"],\n [\"TOIFCDURATION\", \"toIfcDuration\"],\n [\"TOIFCTIMESTAMP\", \"toIfcTimeStamp\"],\n [\"ADDDURATION\", \"addDuration\"],\n [\"TOLOWERCASE\", \"toLowerCase\"],\n [\"TOUPPERCASE\", \"toUpperCase\"],\n [\"SUBSTRING\", \"substring\"],\n [\"SPLIT\", \"split\"],\n [\"EXISTS\", \"exists\"],\n [\"AND\", \"and\"],\n [\"OR\", \"or\"],\n [\"XOR\", \"xor\"],\n [\"IMPLIES\", \"implies\"],\n [\"EQUALS\", \"equals\"],\n [\"GREATERTHAN\", \"greaterThan\"],\n [\"GREATERTHANOREQUAL\", \"greaterThanOrEqual\"],\n [\"LESSTHAN\", \"lessThan\"],\n [\"LESSTHANOREQUAL\", \"lessThanOrEqual\"],\n [\"CONTAINS\", \"contains\"],\n [\"MATCHES\", \"matches\"],\n [\"REGEXCONTAINS\", \"regexContains\"],\n [\"REGEXMATCHES\", \"regexMatches\"],\n [\"REPLACE\", \"replace\"],\n [\"REGEXREPLACE\", \"regexReplace\"],\n]);\n\nconst emptyExpressionStarterFunctionNames = [\n \"IF\",\n \"EXISTS\",\n \"ROUND\",\n \"CONTAINS\",\n \"MATCHES\",\n \"REPLACE\",\n \"TOSTRING\",\n \"TONUMERIC\",\n \"TOBOOLEAN\",\n] as const;\n\nfunction isExtendableTokenType(tokenType: number): boolean {\n return tokenType === IfcExpressionParser.IDENTIFIER;\n}\n\nfunction findCaretTokenIndex(\n tokens: Array<Token>,\n cursorOffset: number\n): number {\n if (tokens.length === 0) {\n return 0;\n }\n\n const cursor = Math.max(0, cursorOffset);\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.type === Token.EOF) {\n return token.tokenIndex;\n }\n\n if (cursor < token.start) {\n return token.tokenIndex;\n }\n\n if (cursor <= token.stop) {\n return token.tokenIndex;\n }\n\n if (cursor === token.stop + 1) {\n if (isExtendableTokenType(token.type)) {\n return token.tokenIndex;\n }\n\n const nextToken = tokens[i + 1];\n return nextToken?.tokenIndex ?? token.tokenIndex;\n }\n }\n\n return tokens[tokens.length - 1].tokenIndex;\n}\n\nfunction parseAutocompleteInput(\n input: string,\n cursorOffset: number\n): ParsedAutocompleteInput {\n const chars = CharStream.fromString(input);\n const lexer = new IfcExpressionLexer(chars);\n const tokenStream = new CommonTokenStream(lexer);\n const parser = new IfcExpressionParser(tokenStream);\n lexer.removeErrorListeners();\n parser.removeErrorListeners();\n const parseTree = parser.expr();\n tokenStream.fill();\n const tokens = tokenStream.getTokens();\n\n return {\n parser,\n parseTree,\n tokens,\n caretTokenIndex: findCaretTokenIndex(tokens, cursorOffset),\n };\n}\n\nfunction findBuiltinRootReplaceRange(\n input: string,\n cursorOffset: number\n): { from: number; to: number } | undefined {\n const cursor = Math.max(0, Math.min(cursorOffset, input.length));\n let i = cursor - 1;\n\n while (i >= 0 && isIdentifierChar(input[i]) && input[i] !== \"$\") {\n i--;\n }\n\n if (i >= 0 && input[i] === \"$\") {\n return { from: i, to: cursor };\n }\n\n return undefined;\n}\n\nfunction findIdentifierReplaceRange(\n input: string,\n cursorOffset: number\n): { from: number; to: number } {\n const cursor = Math.max(0, Math.min(cursorOffset, input.length));\n let from = cursor;\n\n while (from > 0 && isIdentifierChar(input[from - 1])) {\n from--;\n }\n\n return {\n from,\n to: cursor,\n };\n}\n\nfunction findMemberReplaceRange(\n input: string,\n cursorOffset: number\n): { from: number; to: number } | undefined {\n const range = findIdentifierReplaceRange(input, cursorOffset);\n\n if (range.from === 0 || input[range.from - 1] !== \".\") {\n return undefined;\n }\n\n return range;\n}\n\nfunction findFunctionReplaceRange(\n input: string,\n cursorOffset: number\n): { from: number; to: number } | undefined {\n const range = findIdentifierReplaceRange(input, cursorOffset);\n const prefixChar = range.from > 0 ? input[range.from - 1] : undefined;\n const hasIdentifierFragment =\n range.from < range.to || isIdentifierChar(input[Math.max(0, range.to)]);\n\n if (!hasIdentifierFragment || prefixChar === \".\" || prefixChar === \"$\") {\n return undefined;\n }\n\n return range;\n}\n\nfunction countExprListArguments(exprList: ExprListContext | undefined): number {\n if (!exprList) {\n return 0;\n }\n\n const rest = exprList.exprList();\n return 1 + (rest ? countExprListArguments(rest) : 0);\n}\n\nfunction toMethodAccessorStep(\n methodAccessor: MethodAccessorContext\n): CompletedAccessorStep | undefined {\n if (methodAccessor instanceof MethodPropertyAccessContext) {\n const identifier = methodAccessor.IDENTIFIER()?.getText();\n if (!identifier) {\n return undefined;\n }\n\n return {\n name: identifier,\n kind: \"property\",\n startTokenIndex: methodAccessor.start?.tokenIndex ?? -1,\n };\n }\n\n if (methodAccessor instanceof MethodFunctionCallContext) {\n const functionCall = methodAccessor.functionCall();\n const name = functionCall.IDENTIFIER()?.getText();\n if (!name) {\n return undefined;\n }\n\n return {\n name,\n kind: \"function\",\n argumentCount: countExprListArguments(functionCall.exprList()),\n startTokenIndex: functionCall.start?.tokenIndex ?? -1,\n };\n }\n\n return undefined;\n}\n\nfunction collectMethodCallChainSteps(\n methodCallChain: MethodCallChainContext\n): Array<MethodAccessorStep> | undefined {\n if (methodCallChain instanceof MethodCallChainInnerContext) {\n const current = toMethodAccessorStep(methodCallChain.methodAccessor());\n const rest = collectMethodCallChainSteps(methodCallChain.methodCallChain());\n if (!current || !rest) {\n return undefined;\n }\n\n return [current, ...rest];\n }\n\n if (methodCallChain instanceof MethodCallChainEndContext) {\n const current = toMethodAccessorStep(methodCallChain.methodAccessor());\n return current ? [current] : undefined;\n }\n\n const dot = methodCallChain.getToken(IfcExpressionParser.DOT, 0);\n if (dot) {\n return [\n {\n kind: \"incomplete\",\n startTokenIndex: dot.symbol.tokenIndex + 1,\n },\n ];\n }\n\n return [];\n}\n\nfunction getMemberResultType(definition: BuiltinMemberDefinition): ExprType {\n return definition.kind === \"property\"\n ? definition.valueType\n : definition.returnType;\n}\n\nfunction resolveCompletedAccessorStep(\n currentType: ExprType,\n step: CompletedAccessorStep\n): ExprType | undefined {\n if (!(currentType instanceof ContextObjectType)) {\n return undefined;\n }\n\n const memberDefinition = currentType.getMemberDefinition(step.name);\n if (!memberDefinition) {\n return undefined;\n }\n\n if (step.kind === \"property\") {\n return memberDefinition.kind === \"property\"\n ? memberDefinition.valueType\n : undefined;\n }\n\n if (memberDefinition.kind !== \"function\") {\n return undefined;\n }\n\n if (memberDefinition.argumentTypes.length !== step.argumentCount) {\n return undefined;\n }\n\n return memberDefinition.returnType;\n}\n\nfunction resolveSingleExprType(\n singleExpr: SingleExprContext,\n builtinVariableRegistry: BuiltinVariableRegistry\n): ExprType | undefined {\n if (singleExpr instanceof SEVariableRefContext) {\n const identifier = singleExpr.variableRef()?.IDENTIFIER()?.getText();\n return identifier\n ? builtinVariableRegistry.getDefinition(`$${identifier}`)?.type\n : undefined;\n }\n\n if (singleExpr instanceof SEParenthesisContext) {\n return resolveSingleExprType(\n singleExpr.singleExpr(),\n builtinVariableRegistry\n );\n }\n\n if (singleExpr instanceof SEMethodCallContext) {\n const baseType = resolveSingleExprType(\n singleExpr.singleExpr(),\n builtinVariableRegistry\n );\n const steps = collectMethodCallChainSteps(singleExpr.methodCallChain());\n if (!baseType || !steps) {\n return undefined;\n }\n\n let currentType: ExprType | undefined = baseType;\n for (const step of steps) {\n if (step.kind === \"incomplete\") {\n return undefined;\n }\n\n currentType = resolveCompletedAccessorStep(currentType, step);\n if (!currentType) {\n return undefined;\n }\n }\n\n return currentType;\n }\n\n return undefined;\n}\n\nfunction findReceiverTypeForMemberSlot(\n node: ParserRuleContext,\n startTokenIndex: number,\n builtinVariableRegistry: BuiltinVariableRegistry\n): ExprType | undefined {\n if (node instanceof SEMethodCallContext) {\n const steps = collectMethodCallChainSteps(node.methodCallChain());\n if (steps) {\n const slotIndex = steps.findIndex(\n (step) => step.startTokenIndex === startTokenIndex\n );\n\n if (slotIndex >= 0) {\n let currentType = resolveSingleExprType(\n node.singleExpr(),\n builtinVariableRegistry\n );\n\n for (const step of steps.slice(0, slotIndex)) {\n if (!currentType || step.kind === \"incomplete\") {\n return undefined;\n }\n\n currentType = resolveCompletedAccessorStep(currentType, step);\n }\n\n return currentType;\n }\n }\n }\n\n for (let i = 0; i < node.getChildCount(); i++) {\n const child = node.getChild(i);\n if (child instanceof ParserRuleContext) {\n const receiverType = findReceiverTypeForMemberSlot(\n child,\n startTokenIndex,\n builtinVariableRegistry\n );\n if (receiverType) {\n return receiverType;\n }\n }\n }\n\n return undefined;\n}\n\nfunction isEmptyExpressionInput(input: string): boolean {\n return input.trim().length === 0;\n}\n\nfunction toFunctionInsertText(name: string): string {\n return `${name}()`;\n}\n\nfunction buildSignatureLabel(\n name: string,\n argumentLabels: Array<string>\n): string {\n return `${name}(${argumentLabels.join(\", \")})`;\n}\n\nfunction buildFunctionDocumentation(\n name: string,\n localizer?: DocumentationLocalizer,\n displayName = name\n): string | undefined {\n const func = IfcExpressionFunctions.getFunction(name);\n const documentation = func?.getDocumentation();\n if (!func || !documentation) {\n return undefined;\n }\n\n const fallback = `${func.getSignatureLabel(displayName)}: ${\n documentation.fallback\n }`;\n return localizer ? localizer.t(documentation.key, fallback) : fallback;\n}\n\nfunction buildMemberDocumentation(\n definition: BuiltinMemberDefinition,\n localizer?: DocumentationLocalizer\n): string | undefined {\n if (!definition.documentation) {\n return undefined;\n }\n\n const fallback =\n definition.kind === \"property\"\n ? `${definition.name}: ${definition.documentation.fallback}`\n : `${buildSignatureLabel(\n definition.name,\n (definition.argumentDocumentation ?? []).map(\n (argument, index) => argument.label.fallback ?? `arg${index}`\n )\n )}: ${definition.documentation.fallback}`;\n\n return localizer\n ? localizer.t(definition.documentation.key, fallback)\n : fallback;\n}\n\nfunction buildRootDocumentation(\n name: string,\n documentation,\n localizer?: DocumentationLocalizer\n): string | undefined {\n const key = documentation?.key ?? `builtin.${name}.summary`;\n const fallback =\n documentation?.fallback ??\n `${name}: built-in value from the evaluation context`;\n return localizer ? localizer.t(key, fallback) : fallback;\n}\n\ntype CallFrame = {\n kind: \"function\" | \"group\" | \"array\";\n name?: string;\n argumentIndex: number;\n startTokenIndex?: number;\n};\n\nfunction findActiveCallFrame(\n tokens: Array<Token>,\n cursorOffset: number\n): CallFrame | undefined {\n const stack: Array<CallFrame> = [];\n let previousSignificantToken: Token | undefined;\n\n for (const token of tokens) {\n if (token.type === Token.EOF || token.start >= cursorOffset) {\n break;\n }\n\n if (\n token.type === IfcExpressionParser.WS ||\n token.type === IfcExpressionParser.NEWLINE\n ) {\n continue;\n }\n\n if (token.type === IfcExpressionParser.T__1) {\n stack.push(\n previousSignificantToken?.type === IfcExpressionParser.IDENTIFIER\n ? {\n kind: \"function\",\n name: previousSignificantToken.text ?? undefined,\n argumentIndex: 0,\n startTokenIndex: previousSignificantToken.tokenIndex,\n }\n : { kind: \"group\", argumentIndex: 0 }\n );\n } else if (token.type === IfcExpressionParser.T__10) {\n stack.push({ kind: \"array\", argumentIndex: 0 });\n } else if (\n token.type === IfcExpressionParser.T__2 ||\n token.type === IfcExpressionParser.T__11\n ) {\n stack.pop();\n } else if (token.type === IfcExpressionParser.T__9) {\n const currentFrame = stack[stack.length - 1];\n if (currentFrame?.kind === \"function\") {\n currentFrame.argumentIndex += 1;\n }\n }\n\n previousSignificantToken = token;\n }\n\n for (let i = stack.length - 1; i >= 0; i--) {\n if (stack[i].kind === \"function\") {\n return stack[i];\n }\n }\n\n return undefined;\n}\n\nfunction buildMemberSignatureLabel(\n definition: BuiltinFunctionDefinition\n): string {\n return buildSignatureLabel(\n definition.name,\n (definition.argumentDocumentation ?? []).map(\n (argument, index) => argument.label.fallback ?? `arg${index}`\n )\n );\n}\n\nfunction buildActiveMemberHelp(\n parseTree: ParserRuleContext,\n builtinVariableRegistry: BuiltinVariableRegistry,\n activeFrame: CallFrame,\n localizer?: DocumentationLocalizer\n): CompletionResult[\"activeHelp\"] {\n if (activeFrame.startTokenIndex === undefined || !activeFrame.name) {\n return undefined;\n }\n\n const receiverType = findReceiverTypeForMemberSlot(\n parseTree,\n activeFrame.startTokenIndex,\n builtinVariableRegistry\n );\n if (!(receiverType instanceof ContextObjectType)) {\n return undefined;\n }\n\n const memberDefinition = receiverType.getMemberDefinition(activeFrame.name);\n if (\n memberDefinition?.kind !== \"function\" ||\n !memberDefinition.documentation\n ) {\n return undefined;\n }\n\n const label = buildMemberSignatureLabel(memberDefinition);\n const fallback = memberDefinition.documentation.fallback.startsWith(\n `${label}: `\n )\n ? memberDefinition.documentation.fallback\n : `${label}: ${memberDefinition.documentation.fallback}`;\n const activeArgument =\n memberDefinition.argumentDocumentation?.[activeFrame.argumentIndex];\n\n return {\n label,\n documentation: localizer\n ? localizer.t(memberDefinition.documentation.key, fallback)\n : fallback,\n activeParameterIndex: activeFrame.argumentIndex,\n activeParameterLabel: activeArgument\n ? resolveLocalizedText(activeArgument.label, localizer) ??\n activeArgument.label.fallback\n : undefined,\n activeParameterDocumentation: activeArgument\n ? resolveLocalizedText(activeArgument.documentation, localizer)\n : undefined,\n };\n}\n\nfunction buildActiveHelp(\n parseTree: ParserRuleContext,\n builtinVariableRegistry: BuiltinVariableRegistry,\n tokens: Array<Token>,\n cursorOffset: number,\n localizer?: DocumentationLocalizer\n): CompletionResult[\"activeHelp\"] {\n const activeFrame = findActiveCallFrame(tokens, cursorOffset);\n if (!activeFrame?.name) {\n return undefined;\n }\n\n const memberHelp = buildActiveMemberHelp(\n parseTree,\n builtinVariableRegistry,\n activeFrame,\n localizer\n );\n if (memberHelp) {\n return memberHelp;\n }\n\n const func = IfcExpressionFunctions.getFunction(activeFrame.name);\n const documentation = func?.getDocumentation();\n if (!func || !documentation) {\n return undefined;\n }\n\n const activeArgument = func.getFormalArguments()[activeFrame.argumentIndex];\n const label = func.getSignatureLabel(activeFrame.name);\n const fallback = `${label}: ${documentation.fallback}`;\n return {\n label,\n documentation: localizer\n ? localizer.t(documentation.key, fallback)\n : fallback,\n activeParameterIndex: activeFrame.argumentIndex,\n activeParameterLabel: activeArgument\n ? resolveLocalizedText(activeArgument.displayLabel, localizer) ??\n activeArgument.displayLabel?.fallback ??\n activeArgument.name\n : undefined,\n activeParameterDocumentation: activeArgument\n ? resolveLocalizedText(activeArgument.documentation, localizer)\n : undefined,\n };\n}\nfunction toFunctionItem(\n name: string,\n localizer?: DocumentationLocalizer,\n label = name\n): CompletionItem {\n const insertText = toFunctionInsertText(label);\n\n return {\n kind: \"builtinFunction\",\n label,\n insertText,\n cursorOffset: insertText.length - 1,\n documentation: buildFunctionDocumentation(name, localizer, label),\n };\n}\n\nfunction getPreferredMethodLabel(name: string): string {\n return preferredMethodLabels.get(name) ?? name;\n}\n\nfunction isApplicablePrimitiveMethodFunction(\n name: string,\n receiverType: ExprType\n): boolean {\n if (unsupportedPrimitiveMethodFunctionNames.has(name)) {\n return false;\n }\n\n const func = IfcExpressionFunctions.getFunction(name);\n const firstArgument = func?.getFormalArguments()[0];\n if (!func || !firstArgument) {\n return false;\n }\n\n const firstArgumentType = firstArgument.getType();\n return (\n firstArgumentType.isAssignableFrom(receiverType) ||\n firstArgumentType.overlapsWith(receiverType)\n );\n}\n\nfunction getPrimitiveMethodItems(\n receiverType: ExprType,\n localizer?: DocumentationLocalizer\n): Array<CompletionItem> {\n return IfcExpressionFunctions.getBuiltinFunctionNames()\n .filter((name) => isApplicablePrimitiveMethodFunction(name, receiverType))\n .map((name) =>\n toFunctionItem(name, localizer, getPreferredMethodLabel(name))\n );\n}\n\nfunction toBuiltinRootItem(\n name: string,\n builtinVariableRegistry: BuiltinVariableRegistry,\n localizer?: DocumentationLocalizer\n): CompletionItem | undefined {\n const normalizedName = name.startsWith(\"$\") ? name : `${name}`;\n const definition = builtinVariableRegistry.getDefinition(normalizedName);\n if (!definition) {\n return undefined;\n }\n\n return {\n kind: \"builtinRoot\",\n label: toBuiltinLabel(definition.name),\n documentation: buildRootDocumentation(\n definition.name,\n definition.documentation,\n localizer\n ),\n };\n}\n\nfunction toEmptyExpressionStarterItem(\n name: string,\n builtinVariableRegistry: BuiltinVariableRegistry,\n localizer?: DocumentationLocalizer\n): CompletionItem | undefined {\n if (name.startsWith(\"$\")) {\n return toBuiltinRootItem(name, builtinVariableRegistry, localizer);\n }\n\n return IfcExpressionFunctions.getFunction(name)\n ? toFunctionItem(name, localizer)\n : undefined;\n}\n\nfunction getEmptyExpressionStarterItems(\n builtinVariableRegistry: BuiltinVariableRegistry,\n localizer?: DocumentationLocalizer,\n starterNames: Array<string> = [\n ...builtinVariableRegistry\n .getDefinitions()\n .map((definition) => toBuiltinLabel(definition.name)),\n ...emptyExpressionStarterFunctionNames,\n ]\n): Array<CompletionItem> {\n return starterNames\n .map((name) =>\n toEmptyExpressionStarterItem(name, builtinVariableRegistry, localizer)\n )\n .filter((item): item is CompletionItem => item !== undefined);\n}\n\nfunction toMemberItem(\n definition: BuiltinMemberDefinition,\n localizer?: DocumentationLocalizer\n): CompletionItem {\n if (definition.kind === \"property\") {\n return {\n kind: \"builtinMemberProperty\",\n label: definition.name,\n returnTypeName: toCompletionTypeName(definition.valueType),\n chainable: isChainableType(definition.valueType),\n documentation: buildMemberDocumentation(definition, localizer),\n };\n }\n\n const insertText = toFunctionInsertText(definition.name);\n\n return {\n kind: \"builtinMemberFunction\",\n label: definition.name,\n insertText,\n cursorOffset: insertText.length - 1,\n argumentTypeNames: definition.argumentTypes.map((type) => type.getName()),\n returnTypeName: toCompletionTypeName(definition.returnType),\n chainable: isChainableType(definition.returnType),\n documentation: buildMemberDocumentation(definition, localizer),\n };\n}\n\nfunction collectRuleCandidates(\n parser: IfcExpressionParser,\n caretTokenIndex: number,\n parseTree: ParserRuleContext\n): CandidatesCollection {\n const completionCore = new CodeCompletionCore(parser);\n completionCore.preferredRules = new Set([\n IfcExpressionParser.RULE_variableRef,\n IfcExpressionParser.RULE_methodAccessor,\n ]);\n\n return completionCore.collectCandidates(caretTokenIndex, parseTree);\n}\n\nfunction getMemberRuleCandidate(\n ruleCandidates: Map<number, ICandidateRule>\n): ICandidateRule | undefined {\n return ruleCandidates.get(IfcExpressionParser.RULE_methodAccessor);\n}\n\nfunction hasBuiltinRootRuleCandidate(\n ruleCandidates: Map<number, ICandidateRule>\n): boolean {\n return ruleCandidates.has(IfcExpressionParser.RULE_variableRef);\n}\n\nfunction hasIdentifierTokenCandidate(\n tokenCandidates: Map<number, Array<number>>\n): boolean {\n return tokenCandidates.has(IfcExpressionParser.IDENTIFIER);\n}\n\nexport class IfcExpressionAutocomplete {\n public static complete(\n input: string,\n cursorOffset: number,\n options: IfcExpressionAutocompleteOptions = {}\n ): CompletionResult {\n const builtinVariableRegistry =\n options.builtinVariableRegistry ??\n BuiltinVariableRegistry.getDefaultRegistry();\n\n if (isEmptyExpressionInput(input)) {\n return {\n items: getEmptyExpressionStarterItems(\n builtinVariableRegistry,\n options.localizer,\n options.emptyExpressionStarters\n ),\n replaceFrom: 0,\n replaceTo: input.length,\n };\n }\n\n const parsed = parseAutocompleteInput(input, cursorOffset);\n const candidates = collectRuleCandidates(\n parsed.parser,\n parsed.caretTokenIndex,\n parsed.parseTree\n );\n const ruleCandidates = candidates.rules;\n const activeHelp = buildActiveHelp(\n parsed.parseTree,\n builtinVariableRegistry,\n parsed.tokens,\n cursorOffset,\n options.localizer\n );\n\n const memberCandidate = getMemberRuleCandidate(ruleCandidates);\n if (memberCandidate) {\n const range = findMemberReplaceRange(input, cursorOffset);\n if (!range) {\n return {\n items: [],\n replaceFrom: cursorOffset,\n replaceTo: cursorOffset,\n activeHelp,\n };\n }\n\n const receiverType = findReceiverTypeForMemberSlot(\n parsed.parseTree,\n memberCandidate.startTokenIndex,\n builtinVariableRegistry\n );\n const typedPrefix = normalizeForMatch(input.slice(range.from, range.to));\n const items = (\n receiverType instanceof ContextObjectType\n ? receiverType\n .getMemberDefinitions()\n .map((definition) => toMemberItem(definition, options.localizer))\n : receiverType\n ? getPrimitiveMethodItems(receiverType, options.localizer)\n : []\n )\n .filter((item) => normalizeForMatch(item.label).startsWith(typedPrefix))\n .sort((left, right) => left.label.localeCompare(right.label));\n\n return {\n items,\n replaceFrom: range.from,\n replaceTo: range.to,\n activeHelp,\n };\n }\n\n const functionRange = findFunctionReplaceRange(input, cursorOffset);\n if (functionRange && hasIdentifierTokenCandidate(candidates.tokens)) {\n const typedPrefix = normalizeForMatch(\n input.slice(functionRange.from, functionRange.to)\n );\n const items = IfcExpressionFunctions.getBuiltinFunctionNames()\n .map((name) => toFunctionItem(name, options.localizer))\n .filter((item) => normalizeForMatch(item.label).startsWith(typedPrefix))\n .sort((left, right) => left.label.localeCompare(right.label));\n\n if (items.length > 0) {\n return {\n items,\n replaceFrom: functionRange.from,\n replaceTo: functionRange.to,\n activeHelp,\n };\n }\n }\n\n const range = findBuiltinRootReplaceRange(input, cursorOffset);\n if (!range || !hasBuiltinRootRuleCandidate(ruleCandidates)) {\n return {\n items: [],\n replaceFrom: cursorOffset,\n replaceTo: cursorOffset,\n activeHelp,\n };\n }\n\n const typedPrefix = normalizeForMatch(input.slice(range.from, range.to));\n const items: Array<CompletionItem> = builtinVariableRegistry\n .getDefinitions()\n .map((definition) => ({\n kind: \"builtinRoot\" as const,\n label: toBuiltinLabel(definition.name),\n documentation: buildRootDocumentation(\n definition.name,\n definition.documentation,\n options.localizer\n ),\n }))\n .filter((item) => normalizeForMatch(item.label).startsWith(typedPrefix))\n .sort((left, right) => left.label.localeCompare(right.label));\n\n return {\n items,\n replaceFrom: range.from,\n replaceTo: range.to,\n activeHelp,\n };\n }\n}\n"]}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBuiltinMemberValue = exports.unwrapExpressionValue = exports.inferExpressionValue = exports.toExpressionValue = void 0;
4
+ const ContextObjectType_js_1 = require("../type/ContextObjectType.js");
5
+ const ArrayType_js_1 = require("../type/ArrayType.js");
6
+ const TupleType_js_1 = require("../type/TupleType.js");
7
+ const Types_js_1 = require("../type/Types.js");
8
+ const TypeDisjunction_js_1 = require("../type/TypeDisjunction.js");
9
+ const NumericValue_js_1 = require("../value/NumericValue.js");
10
+ const StringValue_js_1 = require("../value/StringValue.js");
11
+ const BooleanValue_js_1 = require("../value/BooleanValue.js");
12
+ const LogicalValue_js_1 = require("../value/LogicalValue.js");
13
+ const ArrayValue_js_1 = require("../value/ArrayValue.js");
14
+ const ContextObjectValue_js_1 = require("../value/ContextObjectValue.js");
15
+ function isValue(candidate) {
16
+ return (typeof candidate === "object" &&
17
+ candidate !== null &&
18
+ typeof candidate["getValue"] === "function" &&
19
+ typeof candidate["getType"] === "function");
20
+ }
21
+ function normalizeName(name) {
22
+ return name?.replace(/^\$/, "").toUpperCase();
23
+ }
24
+ function toExpressionValue(value, expectedType) {
25
+ if (isValue(value)) {
26
+ return value;
27
+ }
28
+ if (expectedType instanceof TypeDisjunction_js_1.TypeDisjunction) {
29
+ for (const option of expectedType.getTypes()) {
30
+ try {
31
+ return toExpressionValue(value, option);
32
+ }
33
+ catch {
34
+ // try next
35
+ }
36
+ }
37
+ }
38
+ if (expectedType instanceof ContextObjectType_js_1.ContextObjectType) {
39
+ if (typeof value !== "object" || value === null) {
40
+ throw new Error(`Expected context object value for type ${expectedType.getName()}`);
41
+ }
42
+ return new ContextObjectValue_js_1.ContextObjectValue(value, expectedType);
43
+ }
44
+ if (expectedType instanceof TupleType_js_1.TupleType) {
45
+ if (!Array.isArray(value)) {
46
+ throw new Error(`Expected tuple value for type ${expectedType.getName()}`);
47
+ }
48
+ const itemTypes = expectedType.getTypes();
49
+ return ArrayValue_js_1.ArrayValue.of(value.map((item, index) => toExpressionValue(item, itemTypes[index] ?? Types_js_1.Type.ANY)));
50
+ }
51
+ if (expectedType instanceof ArrayType_js_1.ArrayType) {
52
+ if (!Array.isArray(value)) {
53
+ throw new Error(`Expected array value for type ${expectedType.getName()}`);
54
+ }
55
+ return ArrayValue_js_1.ArrayValue.of(value.map((item) => toExpressionValue(item, expectedType.getElementType())));
56
+ }
57
+ if (expectedType.isSameTypeAs(Types_js_1.Type.NUMERIC)) {
58
+ return NumericValue_js_1.NumericValue.of(value);
59
+ }
60
+ if (expectedType.isSameTypeAs(Types_js_1.Type.STRING)) {
61
+ return StringValue_js_1.StringValue.of(value);
62
+ }
63
+ if (expectedType.isSameTypeAs(Types_js_1.Type.BOOLEAN)) {
64
+ return BooleanValue_js_1.BooleanValue.of(value);
65
+ }
66
+ if (expectedType.isSameTypeAs(Types_js_1.Type.LOGICAL)) {
67
+ return LogicalValue_js_1.LogicalValue.of(value);
68
+ }
69
+ if (expectedType.isSameTypeAs(Types_js_1.Type.ARRAY)) {
70
+ if (!Array.isArray(value)) {
71
+ throw new Error(`Expected array value for type ${expectedType.getName()}`);
72
+ }
73
+ return ArrayValue_js_1.ArrayValue.of(value.map((item) => inferExpressionValue(item)));
74
+ }
75
+ return inferExpressionValue(value, expectedType);
76
+ }
77
+ exports.toExpressionValue = toExpressionValue;
78
+ function inferExpressionValue(value, fallbackType = Types_js_1.Type.ANY) {
79
+ if (isValue(value)) {
80
+ return value;
81
+ }
82
+ if (typeof value === "number" || typeof value === "string") {
83
+ if (typeof value === "number") {
84
+ return NumericValue_js_1.NumericValue.of(value);
85
+ }
86
+ return StringValue_js_1.StringValue.of(value);
87
+ }
88
+ if (typeof value === "boolean") {
89
+ return BooleanValue_js_1.BooleanValue.of(value);
90
+ }
91
+ if (value === LogicalValue_js_1.LogicalValue.UNKNOWN_VALUE) {
92
+ return LogicalValue_js_1.LogicalValue.unknown();
93
+ }
94
+ if (Array.isArray(value)) {
95
+ return ArrayValue_js_1.ArrayValue.of(value.map((item) => inferExpressionValue(item)));
96
+ }
97
+ if (typeof value === "object" && value !== null) {
98
+ return new ContextObjectValue_js_1.ContextObjectValue(value, fallbackType);
99
+ }
100
+ throw new Error(`Cannot convert runtime context value '${value}' to expression value`);
101
+ }
102
+ exports.inferExpressionValue = inferExpressionValue;
103
+ function unwrapExpressionValue(value) {
104
+ const raw = value.getValue();
105
+ if (value instanceof ArrayValue_js_1.ArrayValue) {
106
+ const arrayValue = raw;
107
+ return arrayValue.map((item) => unwrapExpressionValue(item));
108
+ }
109
+ return raw;
110
+ }
111
+ exports.unwrapExpressionValue = unwrapExpressionValue;
112
+ function getBuiltinMemberValue(value, memberName) {
113
+ const objectValue = value.getValue();
114
+ if (Object.prototype.hasOwnProperty.call(objectValue, memberName)) {
115
+ return objectValue[memberName];
116
+ }
117
+ const normalizedMemberName = normalizeName(memberName);
118
+ const matchingKey = Object.keys(objectValue).find((key) => normalizeName(key) === normalizedMemberName);
119
+ return typeof matchingKey === "undefined"
120
+ ? undefined
121
+ : objectValue[matchingKey];
122
+ }
123
+ exports.getBuiltinMemberValue = getBuiltinMemberValue;
124
+ //# sourceMappingURL=BuiltinRuntimeValueConverter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/builtin/BuiltinRuntimeValueConverter.ts"],"names":[],"mappings":"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","file":"builtin/BuiltinRuntimeValueConverter.js","sourcesContent":["import { ExprType } from \"../type/ExprType.js\";\nimport { ContextObjectType } from \"../type/ContextObjectType.js\";\nimport { ArrayType } from \"../type/ArrayType.js\";\nimport { TupleType } from \"../type/TupleType.js\";\nimport { Type, Types } from \"../type/Types.js\";\nimport { TypeDisjunction } from \"../type/TypeDisjunction.js\";\nimport { ExpressionValue } from \"../value/ExpressionValue.js\";\nimport { NumericValue } from \"../value/NumericValue.js\";\nimport { StringValue } from \"../value/StringValue.js\";\nimport { BooleanValue } from \"../value/BooleanValue.js\";\nimport { LogicalValue } from \"../value/LogicalValue.js\";\nimport { ArrayValue } from \"../value/ArrayValue.js\";\nimport { Value } from \"../value/Value.js\";\nimport { ContextObjectValue } from \"../value/ContextObjectValue.js\";\n\nfunction isValue(candidate: unknown): candidate is Value<any> {\n return (\n typeof candidate === \"object\" &&\n candidate !== null &&\n typeof candidate[\"getValue\"] === \"function\" &&\n typeof candidate[\"getType\"] === \"function\"\n );\n}\n\nfunction normalizeName(name: string): string {\n return name?.replace(/^\\$/, \"\").toUpperCase();\n}\n\nexport function toExpressionValue(\n value: unknown,\n expectedType: ExprType\n): ExpressionValue {\n if (isValue(value)) {\n return value as ExpressionValue;\n }\n\n if (expectedType instanceof TypeDisjunction) {\n for (const option of expectedType.getTypes()) {\n try {\n return toExpressionValue(value, option);\n } catch {\n // try next\n }\n }\n }\n\n if (expectedType instanceof ContextObjectType) {\n if (typeof value !== \"object\" || value === null) {\n throw new Error(\n `Expected context object value for type ${expectedType.getName()}`\n );\n }\n return new ContextObjectValue(\n value as Record<string, unknown>,\n expectedType\n );\n }\n\n if (expectedType instanceof TupleType) {\n if (!Array.isArray(value)) {\n throw new Error(\n `Expected tuple value for type ${expectedType.getName()}`\n );\n }\n const itemTypes = expectedType.getTypes();\n return ArrayValue.of(\n value.map((item, index) =>\n toExpressionValue(item, itemTypes[index] ?? Type.ANY)\n )\n );\n }\n\n if (expectedType instanceof ArrayType) {\n if (!Array.isArray(value)) {\n throw new Error(\n `Expected array value for type ${expectedType.getName()}`\n );\n }\n return ArrayValue.of(\n value.map((item) =>\n toExpressionValue(item, expectedType.getElementType())\n )\n );\n }\n\n if (expectedType.isSameTypeAs(Type.NUMERIC)) {\n return NumericValue.of(value as string | number);\n }\n if (expectedType.isSameTypeAs(Type.STRING)) {\n return StringValue.of(value as string);\n }\n if (expectedType.isSameTypeAs(Type.BOOLEAN)) {\n return BooleanValue.of(value as boolean);\n }\n if (expectedType.isSameTypeAs(Type.LOGICAL)) {\n return LogicalValue.of(value as boolean | \"UNKNOWN\");\n }\n if (expectedType.isSameTypeAs(Type.ARRAY)) {\n if (!Array.isArray(value)) {\n throw new Error(\n `Expected array value for type ${expectedType.getName()}`\n );\n }\n return ArrayValue.of(value.map((item) => inferExpressionValue(item)));\n }\n\n return inferExpressionValue(value, expectedType);\n}\n\nexport function inferExpressionValue(\n value: unknown,\n fallbackType: ExprType = Type.ANY\n): ExpressionValue {\n if (isValue(value)) {\n return value as ExpressionValue;\n }\n if (typeof value === \"number\" || typeof value === \"string\") {\n if (typeof value === \"number\") {\n return NumericValue.of(value);\n }\n return StringValue.of(value);\n }\n if (typeof value === \"boolean\") {\n return BooleanValue.of(value);\n }\n if (value === LogicalValue.UNKNOWN_VALUE) {\n return LogicalValue.unknown();\n }\n if (Array.isArray(value)) {\n return ArrayValue.of(value.map((item) => inferExpressionValue(item)));\n }\n if (typeof value === \"object\" && value !== null) {\n return new ContextObjectValue(\n value as Record<string, unknown>,\n fallbackType\n );\n }\n throw new Error(\n `Cannot convert runtime context value '${value}' to expression value`\n );\n}\n\nexport function unwrapExpressionValue(value: ExpressionValue): unknown {\n const raw = value.getValue();\n if (value instanceof ArrayValue) {\n const arrayValue = raw as Array<ExpressionValue>;\n return arrayValue.map((item) => unwrapExpressionValue(item));\n }\n return raw;\n}\n\nexport function getBuiltinMemberValue(\n value: ContextObjectValue,\n memberName: string\n): unknown {\n const objectValue = value.getValue();\n if (Object.prototype.hasOwnProperty.call(objectValue, memberName)) {\n return objectValue[memberName];\n }\n const normalizedMemberName = normalizeName(memberName);\n const matchingKey = Object.keys(objectValue).find(\n (key) => normalizeName(key) === normalizedMemberName\n );\n return typeof matchingKey === \"undefined\"\n ? undefined\n : objectValue[matchingKey];\n}\n"]}