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.
- package/README.md +255 -30
- package/dist/IfcExpression.d.ts +24 -26
- package/dist/IfcExpressionErrorListener.d.ts +3 -3
- package/dist/IfcExpressionOptions.d.ts +4 -0
- package/dist/autocomplete/CompletionItem.d.ts +24 -0
- package/dist/autocomplete/IfcExpressionAutocomplete.d.ts +11 -0
- package/dist/builtin/BuiltinRuntimeValueConverter.d.ts +7 -0
- package/dist/builtin/BuiltinVariableRegistry.d.ts +50 -0
- package/dist/cjs/IfcExpression.js +112 -37
- package/dist/cjs/IfcExpression.js.map +1 -1
- package/dist/cjs/IfcExpressionErrorListener.js +3 -8
- package/dist/cjs/IfcExpressionErrorListener.js.map +1 -1
- package/dist/cjs/IfcExpressionOptions.js +3 -0
- package/dist/cjs/IfcExpressionOptions.js.map +1 -0
- package/dist/cjs/autocomplete/CompletionItem.js +3 -0
- package/dist/cjs/autocomplete/CompletionItem.js.map +1 -0
- package/dist/cjs/autocomplete/IfcExpressionAutocomplete.js +654 -0
- package/dist/cjs/autocomplete/IfcExpressionAutocomplete.js.map +1 -0
- package/dist/cjs/builtin/BuiltinRuntimeValueConverter.js +124 -0
- package/dist/cjs/builtin/BuiltinRuntimeValueConverter.js.map +1 -0
- package/dist/cjs/builtin/BuiltinVariableRegistry.js +405 -0
- package/dist/cjs/builtin/BuiltinVariableRegistry.js.map +1 -0
- package/dist/cjs/compiler/ExprCompiler.js +44 -41
- package/dist/cjs/compiler/ExprCompiler.js.map +1 -1
- package/dist/cjs/compiler/ExprManager.js.map +1 -1
- package/dist/cjs/compiler/IfcExpressionValidationListener.js +85 -25
- package/dist/cjs/compiler/IfcExpressionValidationListener.js.map +1 -1
- package/dist/cjs/compiler/TypeManager.js.map +1 -1
- package/dist/cjs/context/IfcExpressionContext.js.map +1 -1
- package/dist/cjs/context/NopContext.js +3 -0
- package/dist/cjs/context/NopContext.js.map +1 -1
- package/dist/cjs/documentation/Documentation.js +11 -0
- package/dist/cjs/documentation/Documentation.js.map +1 -0
- package/dist/cjs/error/ExpressionTypeError.js.map +1 -1
- package/dist/cjs/error/IfcExpressionBuiltinConfigException.js +10 -0
- package/dist/cjs/error/IfcExpressionBuiltinConfigException.js.map +1 -0
- package/dist/cjs/error/InvalidSyntaxException.js.map +1 -1
- package/dist/cjs/error/NoSuchFunctionException.js.map +1 -1
- package/dist/cjs/error/NoSuchMemberException.js +13 -0
- package/dist/cjs/error/NoSuchMemberException.js.map +1 -0
- package/dist/cjs/error/ValidationException.js.map +1 -1
- package/dist/cjs/error/WrongFunctionArgumentTypeException.js.map +1 -1
- package/dist/cjs/expression/ExprKind.js +3 -0
- package/dist/cjs/expression/ExprKind.js.map +1 -1
- package/dist/cjs/expression/function/Func.js +18 -14
- package/dist/cjs/expression/function/Func.js.map +1 -1
- package/dist/cjs/expression/function/FuncArg.js +11 -5
- package/dist/cjs/expression/function/FuncArg.js.map +1 -1
- package/dist/cjs/expression/function/IfcExpressionFunctions.js +198 -42
- package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -1
- package/dist/cjs/expression/function/impl/CHOOSE.js.map +1 -1
- package/dist/cjs/expression/function/impl/IF.js.map +1 -1
- package/dist/cjs/expression/function/impl/MAP.js.map +1 -1
- package/dist/cjs/expression/function/impl/ReplacePattern.js +20 -2
- package/dist/cjs/expression/function/impl/ReplacePattern.js.map +1 -1
- package/dist/cjs/expression/reference/BuiltinFunctionCallExpr.js +59 -0
- package/dist/cjs/expression/reference/BuiltinFunctionCallExpr.js.map +1 -0
- package/dist/cjs/expression/reference/BuiltinPropertyAccessExpr.js +34 -0
- package/dist/cjs/expression/reference/BuiltinPropertyAccessExpr.js.map +1 -0
- package/dist/cjs/expression/reference/BuiltinRootReferenceExpr.js +29 -0
- package/dist/cjs/expression/reference/BuiltinRootReferenceExpr.js.map +1 -0
- package/dist/cjs/gen/parser/IfcExpressionLexer.js +126 -104
- package/dist/cjs/gen/parser/IfcExpressionLexer.js.map +1 -1
- package/dist/cjs/gen/parser/IfcExpressionListener.js +7 -4
- package/dist/cjs/gen/parser/IfcExpressionListener.js.map +1 -1
- package/dist/cjs/gen/parser/IfcExpressionParser.js +739 -682
- package/dist/cjs/gen/parser/IfcExpressionParser.js.map +1 -1
- package/dist/cjs/gen/parser/IfcExpressionVisitor.js +4 -4
- package/dist/cjs/gen/parser/IfcExpressionVisitor.js.map +1 -1
- package/dist/cjs/index.js +4 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/type/ContextObjectType.js +45 -0
- package/dist/cjs/type/ContextObjectType.js.map +1 -0
- package/dist/cjs/type/Types.js +4 -6
- package/dist/cjs/type/Types.js.map +1 -1
- package/dist/cjs/value/ContextObjectValue.js +23 -0
- package/dist/cjs/value/ContextObjectValue.js.map +1 -0
- package/dist/cjs/value/ExpressionValue.js.map +1 -1
- package/dist/cjs/value/Value.js.map +1 -1
- package/dist/compiler/ExprCompiler.d.ts +8 -3
- package/dist/compiler/ExprManager.d.ts +1 -1
- package/dist/compiler/IfcExpressionValidationListener.d.ts +9 -3
- package/dist/compiler/TypeManager.d.ts +1 -1
- package/dist/context/IfcExpressionContext.d.ts +3 -4
- package/dist/context/NopContext.d.ts +1 -0
- package/dist/documentation/Documentation.d.ts +12 -0
- package/dist/error/ExpressionTypeError.d.ts +1 -1
- package/dist/error/IfcExpressionBuiltinConfigException.d.ts +3 -0
- package/dist/error/InvalidSyntaxException.d.ts +1 -1
- package/dist/error/NoSuchFunctionException.d.ts +1 -1
- package/dist/error/NoSuchMemberException.d.ts +6 -0
- package/dist/error/ValidationException.d.ts +1 -1
- package/dist/error/WrongFunctionArgumentTypeException.d.ts +1 -1
- package/dist/expression/ExprKind.d.ts +3 -0
- package/dist/expression/function/Func.d.ts +7 -21
- package/dist/expression/function/FuncArg.d.ts +6 -5
- package/dist/expression/function/IfcExpressionFunctions.d.ts +1 -0
- package/dist/expression/function/impl/CHOOSE.d.ts +1 -1
- package/dist/expression/function/impl/IF.d.ts +1 -1
- package/dist/expression/function/impl/MAP.d.ts +1 -1
- package/dist/expression/reference/BuiltinFunctionCallExpr.d.ts +19 -0
- package/dist/expression/reference/BuiltinPropertyAccessExpr.d.ts +15 -0
- package/dist/expression/reference/BuiltinRootReferenceExpr.d.ts +14 -0
- package/dist/gen/parser/IfcExpressionLexer.d.ts +9 -8
- package/dist/gen/parser/IfcExpressionListener.d.ts +89 -59
- package/dist/gen/parser/IfcExpressionParser.d.ts +192 -169
- package/dist/gen/parser/IfcExpressionVisitor.d.ts +51 -35
- package/dist/index.d.ts +2 -2
- package/dist/mjs/IfcExpression.js +104 -32
- package/dist/mjs/IfcExpression.js.map +1 -1
- package/dist/mjs/IfcExpressionErrorListener.js +3 -8
- package/dist/mjs/IfcExpressionErrorListener.js.map +1 -1
- package/dist/mjs/IfcExpressionOptions.js +2 -0
- package/dist/mjs/IfcExpressionOptions.js.map +1 -0
- package/dist/mjs/autocomplete/CompletionItem.js +2 -0
- package/dist/mjs/autocomplete/CompletionItem.js.map +1 -0
- package/dist/mjs/autocomplete/IfcExpressionAutocomplete.js +650 -0
- package/dist/mjs/autocomplete/IfcExpressionAutocomplete.js.map +1 -0
- package/dist/mjs/builtin/BuiltinRuntimeValueConverter.js +117 -0
- package/dist/mjs/builtin/BuiltinRuntimeValueConverter.js.map +1 -0
- package/dist/mjs/builtin/BuiltinVariableRegistry.js +399 -0
- package/dist/mjs/builtin/BuiltinVariableRegistry.js.map +1 -0
- package/dist/mjs/compiler/ExprCompiler.js +43 -40
- package/dist/mjs/compiler/ExprCompiler.js.map +1 -1
- package/dist/mjs/compiler/ExprManager.js.map +1 -1
- package/dist/mjs/compiler/IfcExpressionValidationListener.js +85 -22
- package/dist/mjs/compiler/IfcExpressionValidationListener.js.map +1 -1
- package/dist/mjs/compiler/TypeManager.js.map +1 -1
- package/dist/mjs/context/IfcExpressionContext.js.map +1 -1
- package/dist/mjs/context/NopContext.js +3 -0
- package/dist/mjs/context/NopContext.js.map +1 -1
- package/dist/mjs/documentation/Documentation.js +7 -0
- package/dist/mjs/documentation/Documentation.js.map +1 -0
- package/dist/mjs/error/ExpressionTypeError.js.map +1 -1
- package/dist/mjs/error/IfcExpressionBuiltinConfigException.js +6 -0
- package/dist/mjs/error/IfcExpressionBuiltinConfigException.js.map +1 -0
- package/dist/mjs/error/InvalidSyntaxException.js.map +1 -1
- package/dist/mjs/error/NoSuchFunctionException.js.map +1 -1
- package/dist/mjs/error/NoSuchMemberException.js +9 -0
- package/dist/mjs/error/NoSuchMemberException.js.map +1 -0
- package/dist/mjs/error/ValidationException.js.map +1 -1
- package/dist/mjs/error/WrongFunctionArgumentTypeException.js.map +1 -1
- package/dist/mjs/expression/ExprKind.js +3 -0
- package/dist/mjs/expression/ExprKind.js.map +1 -1
- package/dist/mjs/expression/function/Func.js +18 -14
- package/dist/mjs/expression/function/Func.js.map +1 -1
- package/dist/mjs/expression/function/FuncArg.js +11 -5
- package/dist/mjs/expression/function/FuncArg.js.map +1 -1
- package/dist/mjs/expression/function/IfcExpressionFunctions.js +198 -42
- package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -1
- package/dist/mjs/expression/function/impl/CHOOSE.js.map +1 -1
- package/dist/mjs/expression/function/impl/IF.js.map +1 -1
- package/dist/mjs/expression/function/impl/MAP.js.map +1 -1
- package/dist/mjs/expression/function/impl/ReplacePattern.js +20 -2
- package/dist/mjs/expression/function/impl/ReplacePattern.js.map +1 -1
- package/dist/mjs/expression/reference/BuiltinFunctionCallExpr.js +55 -0
- package/dist/mjs/expression/reference/BuiltinFunctionCallExpr.js.map +1 -0
- package/dist/mjs/expression/reference/BuiltinPropertyAccessExpr.js +30 -0
- package/dist/mjs/expression/reference/BuiltinPropertyAccessExpr.js.map +1 -0
- package/dist/mjs/expression/reference/BuiltinRootReferenceExpr.js +25 -0
- package/dist/mjs/expression/reference/BuiltinRootReferenceExpr.js.map +1 -0
- package/dist/mjs/gen/parser/IfcExpressionLexer.js +101 -104
- package/dist/mjs/gen/parser/IfcExpressionLexer.js.map +1 -1
- package/dist/mjs/gen/parser/IfcExpressionListener.js +5 -3
- package/dist/mjs/gen/parser/IfcExpressionListener.js.map +1 -1
- package/dist/mjs/gen/parser/IfcExpressionParser.js +700 -670
- package/dist/mjs/gen/parser/IfcExpressionParser.js.map +1 -1
- package/dist/mjs/gen/parser/IfcExpressionVisitor.js +2 -3
- package/dist/mjs/gen/parser/IfcExpressionVisitor.js.map +1 -1
- package/dist/mjs/index.js +1 -1
- package/dist/mjs/index.js.map +1 -1
- package/dist/mjs/type/ContextObjectType.js +41 -0
- package/dist/mjs/type/ContextObjectType.js.map +1 -0
- package/dist/mjs/type/Types.js +4 -6
- package/dist/mjs/type/Types.js.map +1 -1
- package/dist/mjs/value/ContextObjectValue.js +19 -0
- package/dist/mjs/value/ContextObjectValue.js.map +1 -0
- package/dist/mjs/value/ExpressionValue.js.map +1 -1
- package/dist/mjs/value/Value.js.map +1 -1
- package/dist/type/ContextObjectType.d.ts +17 -0
- package/dist/type/Types.d.ts +2 -6
- package/dist/value/ContextObjectValue.d.ts +11 -0
- package/dist/value/ExpressionValue.d.ts +2 -1
- package/dist/value/Value.d.ts +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["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,117 @@
|
|
|
1
|
+
import { ContextObjectType } from "../type/ContextObjectType.js";
|
|
2
|
+
import { ArrayType } from "../type/ArrayType.js";
|
|
3
|
+
import { TupleType } from "../type/TupleType.js";
|
|
4
|
+
import { Type } from "../type/Types.js";
|
|
5
|
+
import { TypeDisjunction } from "../type/TypeDisjunction.js";
|
|
6
|
+
import { NumericValue } from "../value/NumericValue.js";
|
|
7
|
+
import { StringValue } from "../value/StringValue.js";
|
|
8
|
+
import { BooleanValue } from "../value/BooleanValue.js";
|
|
9
|
+
import { LogicalValue } from "../value/LogicalValue.js";
|
|
10
|
+
import { ArrayValue } from "../value/ArrayValue.js";
|
|
11
|
+
import { ContextObjectValue } from "../value/ContextObjectValue.js";
|
|
12
|
+
function isValue(candidate) {
|
|
13
|
+
return (typeof candidate === "object" &&
|
|
14
|
+
candidate !== null &&
|
|
15
|
+
typeof candidate["getValue"] === "function" &&
|
|
16
|
+
typeof candidate["getType"] === "function");
|
|
17
|
+
}
|
|
18
|
+
function normalizeName(name) {
|
|
19
|
+
return name?.replace(/^\$/, "").toUpperCase();
|
|
20
|
+
}
|
|
21
|
+
export function toExpressionValue(value, expectedType) {
|
|
22
|
+
if (isValue(value)) {
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
if (expectedType instanceof TypeDisjunction) {
|
|
26
|
+
for (const option of expectedType.getTypes()) {
|
|
27
|
+
try {
|
|
28
|
+
return toExpressionValue(value, option);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// try next
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (expectedType instanceof ContextObjectType) {
|
|
36
|
+
if (typeof value !== "object" || value === null) {
|
|
37
|
+
throw new Error(`Expected context object value for type ${expectedType.getName()}`);
|
|
38
|
+
}
|
|
39
|
+
return new ContextObjectValue(value, expectedType);
|
|
40
|
+
}
|
|
41
|
+
if (expectedType instanceof TupleType) {
|
|
42
|
+
if (!Array.isArray(value)) {
|
|
43
|
+
throw new Error(`Expected tuple value for type ${expectedType.getName()}`);
|
|
44
|
+
}
|
|
45
|
+
const itemTypes = expectedType.getTypes();
|
|
46
|
+
return ArrayValue.of(value.map((item, index) => toExpressionValue(item, itemTypes[index] ?? Type.ANY)));
|
|
47
|
+
}
|
|
48
|
+
if (expectedType instanceof ArrayType) {
|
|
49
|
+
if (!Array.isArray(value)) {
|
|
50
|
+
throw new Error(`Expected array value for type ${expectedType.getName()}`);
|
|
51
|
+
}
|
|
52
|
+
return ArrayValue.of(value.map((item) => toExpressionValue(item, expectedType.getElementType())));
|
|
53
|
+
}
|
|
54
|
+
if (expectedType.isSameTypeAs(Type.NUMERIC)) {
|
|
55
|
+
return NumericValue.of(value);
|
|
56
|
+
}
|
|
57
|
+
if (expectedType.isSameTypeAs(Type.STRING)) {
|
|
58
|
+
return StringValue.of(value);
|
|
59
|
+
}
|
|
60
|
+
if (expectedType.isSameTypeAs(Type.BOOLEAN)) {
|
|
61
|
+
return BooleanValue.of(value);
|
|
62
|
+
}
|
|
63
|
+
if (expectedType.isSameTypeAs(Type.LOGICAL)) {
|
|
64
|
+
return LogicalValue.of(value);
|
|
65
|
+
}
|
|
66
|
+
if (expectedType.isSameTypeAs(Type.ARRAY)) {
|
|
67
|
+
if (!Array.isArray(value)) {
|
|
68
|
+
throw new Error(`Expected array value for type ${expectedType.getName()}`);
|
|
69
|
+
}
|
|
70
|
+
return ArrayValue.of(value.map((item) => inferExpressionValue(item)));
|
|
71
|
+
}
|
|
72
|
+
return inferExpressionValue(value, expectedType);
|
|
73
|
+
}
|
|
74
|
+
export function inferExpressionValue(value, fallbackType = Type.ANY) {
|
|
75
|
+
if (isValue(value)) {
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
if (typeof value === "number" || typeof value === "string") {
|
|
79
|
+
if (typeof value === "number") {
|
|
80
|
+
return NumericValue.of(value);
|
|
81
|
+
}
|
|
82
|
+
return StringValue.of(value);
|
|
83
|
+
}
|
|
84
|
+
if (typeof value === "boolean") {
|
|
85
|
+
return BooleanValue.of(value);
|
|
86
|
+
}
|
|
87
|
+
if (value === LogicalValue.UNKNOWN_VALUE) {
|
|
88
|
+
return LogicalValue.unknown();
|
|
89
|
+
}
|
|
90
|
+
if (Array.isArray(value)) {
|
|
91
|
+
return ArrayValue.of(value.map((item) => inferExpressionValue(item)));
|
|
92
|
+
}
|
|
93
|
+
if (typeof value === "object" && value !== null) {
|
|
94
|
+
return new ContextObjectValue(value, fallbackType);
|
|
95
|
+
}
|
|
96
|
+
throw new Error(`Cannot convert runtime context value '${value}' to expression value`);
|
|
97
|
+
}
|
|
98
|
+
export function unwrapExpressionValue(value) {
|
|
99
|
+
const raw = value.getValue();
|
|
100
|
+
if (value instanceof ArrayValue) {
|
|
101
|
+
const arrayValue = raw;
|
|
102
|
+
return arrayValue.map((item) => unwrapExpressionValue(item));
|
|
103
|
+
}
|
|
104
|
+
return raw;
|
|
105
|
+
}
|
|
106
|
+
export function getBuiltinMemberValue(value, memberName) {
|
|
107
|
+
const objectValue = value.getValue();
|
|
108
|
+
if (Object.prototype.hasOwnProperty.call(objectValue, memberName)) {
|
|
109
|
+
return objectValue[memberName];
|
|
110
|
+
}
|
|
111
|
+
const normalizedMemberName = normalizeName(memberName);
|
|
112
|
+
const matchingKey = Object.keys(objectValue).find((key) => normalizeName(key) === normalizedMemberName);
|
|
113
|
+
return typeof matchingKey === "undefined"
|
|
114
|
+
? undefined
|
|
115
|
+
: objectValue[matchingKey];
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=BuiltinRuntimeValueConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["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"]}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import { ContextObjectType } from "../type/ContextObjectType.js";
|
|
2
|
+
import { IfcExpressionBuiltinConfigException } from "../error/IfcExpressionBuiltinConfigException.js";
|
|
3
|
+
import { Type, Types } from "../type/Types.js";
|
|
4
|
+
import { BuiltinRootReferenceExpr } from "../expression/reference/BuiltinRootReferenceExpr.js";
|
|
5
|
+
import { ElemObjectReferenceExpr } from "../expression/reference/ElemObjectReferenceExpr.js";
|
|
6
|
+
import { PropObjectReferenceExpr } from "../expression/reference/PropObjectReferenceExpr.js";
|
|
7
|
+
export function isBuiltinPropertyDefinition(definition) {
|
|
8
|
+
return definition?.kind === "property";
|
|
9
|
+
}
|
|
10
|
+
export function isBuiltinFunctionDefinition(definition) {
|
|
11
|
+
return definition?.kind === "function";
|
|
12
|
+
}
|
|
13
|
+
function normalizeBuiltinName(name) {
|
|
14
|
+
return name?.replace(/^\$/, "").toUpperCase();
|
|
15
|
+
}
|
|
16
|
+
function memberArg(labelKey, labelFallback, summaryKey, summaryFallback) {
|
|
17
|
+
return {
|
|
18
|
+
label: { key: labelKey, fallback: labelFallback },
|
|
19
|
+
documentation: { key: summaryKey, fallback: summaryFallback },
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function createStandardIfcObjectTypes() {
|
|
23
|
+
const elementMembers = new Map();
|
|
24
|
+
const propertyMembers = new Map();
|
|
25
|
+
const propertySetMembers = new Map();
|
|
26
|
+
const typeObjectMembers = new Map();
|
|
27
|
+
const propertyType = new ContextObjectType(Type.IFC_PROPERTY_REF.getName(), Type.IFC_PROPERTY_REF, propertyMembers);
|
|
28
|
+
const propertySetType = new ContextObjectType(Type.IFC_PROPERTY_SET_REF.getName(), Type.IFC_PROPERTY_SET_REF, propertySetMembers);
|
|
29
|
+
const typeObjectType = new ContextObjectType(Type.IFC_TYPE_OBJECT_REF.getName(), Type.IFC_TYPE_OBJECT_REF, typeObjectMembers);
|
|
30
|
+
const elementType = new ContextObjectType(Type.IFC_ELEMENT_REF.getName(), Type.IFC_ELEMENT_REF, elementMembers);
|
|
31
|
+
standardIfcElementMembers({
|
|
32
|
+
elementType,
|
|
33
|
+
propertyType,
|
|
34
|
+
propertySetType,
|
|
35
|
+
typeObjectType,
|
|
36
|
+
}).forEach((member) => {
|
|
37
|
+
elementMembers.set(normalizeBuiltinName(member.name), member);
|
|
38
|
+
});
|
|
39
|
+
standardIfcPropertyMembers({
|
|
40
|
+
elementType,
|
|
41
|
+
propertyType,
|
|
42
|
+
propertySetType,
|
|
43
|
+
typeObjectType,
|
|
44
|
+
}).forEach((member) => {
|
|
45
|
+
propertyMembers.set(normalizeBuiltinName(member.name), member);
|
|
46
|
+
});
|
|
47
|
+
standardIfcPropertySetMembers({
|
|
48
|
+
elementType,
|
|
49
|
+
propertyType,
|
|
50
|
+
propertySetType,
|
|
51
|
+
typeObjectType,
|
|
52
|
+
}).forEach((member) => {
|
|
53
|
+
propertySetMembers.set(normalizeBuiltinName(member.name), member);
|
|
54
|
+
});
|
|
55
|
+
standardIfcTypeObjectMembers({
|
|
56
|
+
elementType,
|
|
57
|
+
propertyType,
|
|
58
|
+
propertySetType,
|
|
59
|
+
typeObjectType,
|
|
60
|
+
}).forEach((member) => {
|
|
61
|
+
typeObjectMembers.set(normalizeBuiltinName(member.name), member);
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
elementType,
|
|
65
|
+
propertyType,
|
|
66
|
+
propertySetType,
|
|
67
|
+
typeObjectType,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function standardIfcElementMembers(types) {
|
|
71
|
+
return [
|
|
72
|
+
{
|
|
73
|
+
name: "name",
|
|
74
|
+
kind: "function",
|
|
75
|
+
returnType: Type.STRING,
|
|
76
|
+
argumentTypes: [],
|
|
77
|
+
documentation: {
|
|
78
|
+
key: "builtin.$element.name.summary",
|
|
79
|
+
fallback: "name(): name of the current IFC element",
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: "guid",
|
|
84
|
+
kind: "function",
|
|
85
|
+
returnType: Type.STRING,
|
|
86
|
+
argumentTypes: [],
|
|
87
|
+
documentation: {
|
|
88
|
+
key: "builtin.$element.guid.summary",
|
|
89
|
+
fallback: "guid(): globally unique identifier of the current IFC element",
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: "ifcClass",
|
|
94
|
+
kind: "function",
|
|
95
|
+
returnType: Type.STRING,
|
|
96
|
+
argumentTypes: [],
|
|
97
|
+
documentation: {
|
|
98
|
+
key: "builtin.$element.ifcClass.summary",
|
|
99
|
+
fallback: "ifcClass(): IFC class name of the current element",
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: "description",
|
|
104
|
+
kind: "function",
|
|
105
|
+
returnType: Type.STRING,
|
|
106
|
+
argumentTypes: [],
|
|
107
|
+
documentation: {
|
|
108
|
+
key: "builtin.$element.description.summary",
|
|
109
|
+
fallback: "description(): description of the current IFC element",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: "property",
|
|
114
|
+
kind: "function",
|
|
115
|
+
returnType: types.propertyType,
|
|
116
|
+
argumentTypes: [Type.STRING],
|
|
117
|
+
documentation: {
|
|
118
|
+
key: "builtin.$element.property.summary",
|
|
119
|
+
fallback: "property(name): property of the current IFC element by name",
|
|
120
|
+
},
|
|
121
|
+
argumentDocumentation: [
|
|
122
|
+
memberArg("builtin.$element.property.arg.name.label", "name", "builtin.$element.property.arg.name.summary", "The name of the property to resolve"),
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: "propertySet",
|
|
127
|
+
kind: "function",
|
|
128
|
+
returnType: types.propertySetType,
|
|
129
|
+
argumentTypes: [Type.STRING],
|
|
130
|
+
documentation: {
|
|
131
|
+
key: "builtin.$element.propertySet.summary",
|
|
132
|
+
fallback: "propertySet(name): property set of the current IFC element by name",
|
|
133
|
+
},
|
|
134
|
+
argumentDocumentation: [
|
|
135
|
+
memberArg("builtin.$element.propertySet.arg.name.label", "name", "builtin.$element.propertySet.arg.name.summary", "The name of the property set to resolve"),
|
|
136
|
+
],
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: "type",
|
|
140
|
+
kind: "function",
|
|
141
|
+
returnType: types.typeObjectType,
|
|
142
|
+
argumentTypes: [],
|
|
143
|
+
documentation: {
|
|
144
|
+
key: "builtin.$element.type.summary",
|
|
145
|
+
fallback: "type(): type object of the current IFC element",
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
];
|
|
149
|
+
}
|
|
150
|
+
function standardIfcPropertyMembers(types) {
|
|
151
|
+
return [
|
|
152
|
+
{
|
|
153
|
+
name: "name",
|
|
154
|
+
kind: "function",
|
|
155
|
+
returnType: Type.STRING,
|
|
156
|
+
argumentTypes: [],
|
|
157
|
+
documentation: {
|
|
158
|
+
key: "builtin.$property.name.summary",
|
|
159
|
+
fallback: "name(): name of the current IFC property",
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: "ifcClass",
|
|
164
|
+
kind: "function",
|
|
165
|
+
returnType: Type.STRING,
|
|
166
|
+
argumentTypes: [],
|
|
167
|
+
documentation: {
|
|
168
|
+
key: "builtin.$property.ifcClass.summary",
|
|
169
|
+
fallback: "ifcClass(): IFC class name of the current property",
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: "description",
|
|
174
|
+
kind: "function",
|
|
175
|
+
returnType: Type.STRING,
|
|
176
|
+
argumentTypes: [],
|
|
177
|
+
documentation: {
|
|
178
|
+
key: "builtin.$property.description.summary",
|
|
179
|
+
fallback: "description(): description of the current IFC property",
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: "propertySet",
|
|
184
|
+
kind: "function",
|
|
185
|
+
returnType: types.propertySetType,
|
|
186
|
+
argumentTypes: [],
|
|
187
|
+
documentation: {
|
|
188
|
+
key: "builtin.$property.propertySet.summary",
|
|
189
|
+
fallback: "propertySet(): property set containing the current IFC property",
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
name: "value",
|
|
194
|
+
kind: "function",
|
|
195
|
+
returnType: Types.or(Type.STRING, Type.NUMERIC, Type.BOOLEAN, Type.ARRAY),
|
|
196
|
+
argumentTypes: [],
|
|
197
|
+
documentation: {
|
|
198
|
+
key: "builtin.$property.value.summary",
|
|
199
|
+
fallback: "value(): value of the current IFC property",
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
];
|
|
203
|
+
}
|
|
204
|
+
function standardIfcPropertySetMembers(types) {
|
|
205
|
+
return [
|
|
206
|
+
{
|
|
207
|
+
name: "name",
|
|
208
|
+
kind: "function",
|
|
209
|
+
returnType: Type.STRING,
|
|
210
|
+
argumentTypes: [],
|
|
211
|
+
documentation: {
|
|
212
|
+
key: "builtin.$propertySet.name.summary",
|
|
213
|
+
fallback: "name(): name of the current IFC property set",
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
name: "guid",
|
|
218
|
+
kind: "function",
|
|
219
|
+
returnType: Type.STRING,
|
|
220
|
+
argumentTypes: [],
|
|
221
|
+
documentation: {
|
|
222
|
+
key: "builtin.$propertySet.guid.summary",
|
|
223
|
+
fallback: "guid(): globally unique identifier of the current IFC property set",
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
name: "description",
|
|
228
|
+
kind: "function",
|
|
229
|
+
returnType: Type.STRING,
|
|
230
|
+
argumentTypes: [],
|
|
231
|
+
documentation: {
|
|
232
|
+
key: "builtin.$propertySet.description.summary",
|
|
233
|
+
fallback: "description(): description of the current IFC property set",
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
name: "property",
|
|
238
|
+
kind: "function",
|
|
239
|
+
returnType: types.propertyType,
|
|
240
|
+
argumentTypes: [Type.STRING],
|
|
241
|
+
documentation: {
|
|
242
|
+
key: "builtin.$propertySet.property.summary",
|
|
243
|
+
fallback: "property(name): property of the current IFC property set by name",
|
|
244
|
+
},
|
|
245
|
+
argumentDocumentation: [
|
|
246
|
+
memberArg("builtin.$propertySet.property.arg.name.label", "name", "builtin.$propertySet.property.arg.name.summary", "The name of the property to resolve"),
|
|
247
|
+
],
|
|
248
|
+
},
|
|
249
|
+
];
|
|
250
|
+
}
|
|
251
|
+
function standardIfcTypeObjectMembers(types) {
|
|
252
|
+
return [
|
|
253
|
+
{
|
|
254
|
+
name: "name",
|
|
255
|
+
kind: "function",
|
|
256
|
+
returnType: Type.STRING,
|
|
257
|
+
argumentTypes: [],
|
|
258
|
+
documentation: {
|
|
259
|
+
key: "builtin.$typeObject.name.summary",
|
|
260
|
+
fallback: "name(): name of the current IFC type object",
|
|
261
|
+
},
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
name: "guid",
|
|
265
|
+
kind: "function",
|
|
266
|
+
returnType: Type.STRING,
|
|
267
|
+
argumentTypes: [],
|
|
268
|
+
documentation: {
|
|
269
|
+
key: "builtin.$typeObject.guid.summary",
|
|
270
|
+
fallback: "guid(): globally unique identifier of the current IFC type object",
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: "description",
|
|
275
|
+
kind: "function",
|
|
276
|
+
returnType: Type.STRING,
|
|
277
|
+
argumentTypes: [],
|
|
278
|
+
documentation: {
|
|
279
|
+
key: "builtin.$typeObject.description.summary",
|
|
280
|
+
fallback: "description(): description of the current IFC type object",
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
name: "property",
|
|
285
|
+
kind: "function",
|
|
286
|
+
returnType: types.propertyType,
|
|
287
|
+
argumentTypes: [Type.STRING],
|
|
288
|
+
documentation: {
|
|
289
|
+
key: "builtin.$typeObject.property.summary",
|
|
290
|
+
fallback: "property(name): property of the current IFC type object by name",
|
|
291
|
+
},
|
|
292
|
+
argumentDocumentation: [
|
|
293
|
+
memberArg("builtin.$typeObject.property.arg.name.label", "name", "builtin.$typeObject.property.arg.name.summary", "The name of the property to resolve"),
|
|
294
|
+
],
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
name: "propertySet",
|
|
298
|
+
kind: "function",
|
|
299
|
+
returnType: types.propertySetType,
|
|
300
|
+
argumentTypes: [Type.STRING],
|
|
301
|
+
documentation: {
|
|
302
|
+
key: "builtin.$typeObject.propertySet.summary",
|
|
303
|
+
fallback: "propertySet(name): property set of the current IFC type object by name",
|
|
304
|
+
},
|
|
305
|
+
argumentDocumentation: [
|
|
306
|
+
memberArg("builtin.$typeObject.propertySet.arg.name.label", "name", "builtin.$typeObject.propertySet.arg.name.summary", "The name of the property set to resolve"),
|
|
307
|
+
],
|
|
308
|
+
},
|
|
309
|
+
];
|
|
310
|
+
}
|
|
311
|
+
const standardIfcObjectTypes = createStandardIfcObjectTypes();
|
|
312
|
+
export class BuiltinVariableRegistry {
|
|
313
|
+
constructor(definitions = []) {
|
|
314
|
+
this.builtinVariables = new Map();
|
|
315
|
+
definitions.forEach((definition) => this.register(definition));
|
|
316
|
+
}
|
|
317
|
+
static getDefaultRegistry() {
|
|
318
|
+
return this.defaultRegistry;
|
|
319
|
+
}
|
|
320
|
+
static normalizeName(name) {
|
|
321
|
+
return normalizeBuiltinName(name);
|
|
322
|
+
}
|
|
323
|
+
static isBuiltinVariable(name) {
|
|
324
|
+
return this.defaultRegistry.isBuiltinVariable(name);
|
|
325
|
+
}
|
|
326
|
+
static isReservedName(name) {
|
|
327
|
+
return this.defaultRegistry.isReservedName(name);
|
|
328
|
+
}
|
|
329
|
+
static getDefinition(name) {
|
|
330
|
+
return this.defaultRegistry.getDefinition(name);
|
|
331
|
+
}
|
|
332
|
+
isBuiltinVariable(name) {
|
|
333
|
+
return this.builtinVariables.has(BuiltinVariableRegistry.normalizeName(name));
|
|
334
|
+
}
|
|
335
|
+
isReservedName(name) {
|
|
336
|
+
return this.isBuiltinVariable(name);
|
|
337
|
+
}
|
|
338
|
+
getDefinition(name) {
|
|
339
|
+
return this.builtinVariables.get(BuiltinVariableRegistry.normalizeName(name));
|
|
340
|
+
}
|
|
341
|
+
getDefinitions() {
|
|
342
|
+
return [...this.builtinVariables.values()];
|
|
343
|
+
}
|
|
344
|
+
register(definition) {
|
|
345
|
+
const normalizedName = BuiltinVariableRegistry.normalizeName(definition.name);
|
|
346
|
+
if (this.builtinVariables.has(normalizedName)) {
|
|
347
|
+
throw new IfcExpressionBuiltinConfigException(`cannot register builtin variable with name '${definition.name}': name already in use`);
|
|
348
|
+
}
|
|
349
|
+
const members = this.registerMembers(definition);
|
|
350
|
+
const baseType = definition.type ??
|
|
351
|
+
(members.size > 0 ? Type.CONTEXT_OBJECT_REF : Type.ANY);
|
|
352
|
+
const resolvedType = members.size > 0
|
|
353
|
+
? new ContextObjectType(definition.name, baseType, members)
|
|
354
|
+
: baseType;
|
|
355
|
+
const createReferenceExpr = definition.createReferenceExpr ??
|
|
356
|
+
(() => new BuiltinRootReferenceExpr(definition.name, resolvedType));
|
|
357
|
+
this.builtinVariables.set(normalizedName, {
|
|
358
|
+
name: definition.name,
|
|
359
|
+
type: resolvedType,
|
|
360
|
+
documentation: definition.documentation,
|
|
361
|
+
members,
|
|
362
|
+
createReferenceExpr,
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
registerMembers(definition) {
|
|
366
|
+
const members = new Map();
|
|
367
|
+
definition.members?.forEach((member) => {
|
|
368
|
+
const normalizedMemberName = BuiltinVariableRegistry.normalizeName(member.name);
|
|
369
|
+
if (members.has(normalizedMemberName)) {
|
|
370
|
+
throw new IfcExpressionBuiltinConfigException(`cannot register member '${member.name}' for builtin '${definition.name}': name already in use`);
|
|
371
|
+
}
|
|
372
|
+
members.set(normalizedMemberName, member);
|
|
373
|
+
});
|
|
374
|
+
return members;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
BuiltinVariableRegistry.defaultRegistry = new BuiltinVariableRegistry([
|
|
378
|
+
{
|
|
379
|
+
name: "element",
|
|
380
|
+
type: Type.IFC_ELEMENT_REF,
|
|
381
|
+
documentation: {
|
|
382
|
+
key: "builtin.$element.summary",
|
|
383
|
+
fallback: "$element: IFC element from the evaluation context",
|
|
384
|
+
},
|
|
385
|
+
members: standardIfcElementMembers(standardIfcObjectTypes),
|
|
386
|
+
createReferenceExpr: () => new ElemObjectReferenceExpr(),
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
name: "property",
|
|
390
|
+
type: Type.IFC_PROPERTY_REF,
|
|
391
|
+
documentation: {
|
|
392
|
+
key: "builtin.$property.summary",
|
|
393
|
+
fallback: "$property: IFC property from the evaluation context",
|
|
394
|
+
},
|
|
395
|
+
members: standardIfcPropertyMembers(standardIfcObjectTypes),
|
|
396
|
+
createReferenceExpr: () => new PropObjectReferenceExpr(),
|
|
397
|
+
},
|
|
398
|
+
]);
|
|
399
|
+
//# sourceMappingURL=BuiltinVariableRegistry.js.map
|