@itwin/presentation-backend 4.5.0-dev.2 → 4.5.0-dev.21
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/CHANGELOG.md +31 -1
- package/LICENSE.md +1 -1
- package/README.md +1 -1
- package/lib/cjs/presentation-backend/BackendLoggerCategory.js +3 -3
- package/lib/cjs/presentation-backend/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/presentation-backend/ElementPropertiesHelper.js +11 -11
- package/lib/cjs/presentation-backend/ElementPropertiesHelper.js.map +1 -1
- package/lib/cjs/presentation-backend/NativePlatform.d.ts +1 -2
- package/lib/cjs/presentation-backend/NativePlatform.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/NativePlatform.js +19 -14
- package/lib/cjs/presentation-backend/NativePlatform.js.map +1 -1
- package/lib/cjs/presentation-backend/Presentation.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/Presentation.js +15 -9
- package/lib/cjs/presentation-backend/Presentation.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationIpcHandler.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/PresentationIpcHandler.js +3 -3
- package/lib/cjs/presentation-backend/PresentationIpcHandler.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationManager.d.ts +2 -1
- package/lib/cjs/presentation-backend/PresentationManager.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/PresentationManager.js +23 -12
- package/lib/cjs/presentation-backend/PresentationManager.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationManagerDetail.d.ts +5 -2
- package/lib/cjs/presentation-backend/PresentationManagerDetail.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/PresentationManagerDetail.js +68 -36
- package/lib/cjs/presentation-backend/PresentationManagerDetail.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationRpcImpl.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/PresentationRpcImpl.js +34 -26
- package/lib/cjs/presentation-backend/PresentationRpcImpl.js.map +1 -1
- package/lib/cjs/presentation-backend/RulesetEmbedder.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/RulesetEmbedder.js +25 -17
- package/lib/cjs/presentation-backend/RulesetEmbedder.js.map +1 -1
- package/lib/cjs/presentation-backend/RulesetManager.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/RulesetManager.js +9 -6
- package/lib/cjs/presentation-backend/RulesetManager.js.map +1 -1
- package/lib/cjs/presentation-backend/RulesetVariablesManager.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/RulesetVariablesManager.js +33 -21
- package/lib/cjs/presentation-backend/RulesetVariablesManager.js.map +1 -1
- package/lib/cjs/presentation-backend/SelectionScopesHelper.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/SelectionScopesHelper.js +54 -37
- package/lib/cjs/presentation-backend/SelectionScopesHelper.js.map +1 -1
- package/lib/cjs/presentation-backend/TemporaryStorage.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/TemporaryStorage.js +22 -14
- package/lib/cjs/presentation-backend/TemporaryStorage.js.map +1 -1
- package/lib/cjs/presentation-backend/Utils.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/Utils.js +24 -14
- package/lib/cjs/presentation-backend/Utils.js.map +1 -1
- package/lib/cjs/presentation-backend/domain/PresentationRulesDomain.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/domain/PresentationRulesDomain.js +7 -4
- package/lib/cjs/presentation-backend/domain/PresentationRulesDomain.js.map +1 -1
- package/lib/cjs/presentation-backend/domain/RulesetElements.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/domain/RulesetElements.js +8 -5
- package/lib/cjs/presentation-backend/domain/RulesetElements.js.map +1 -1
- package/lib/cjs/presentation-backend.js +3 -3
- package/lib/cjs/presentation-backend.js.map +1 -1
- package/package.json +18 -15
- package/lib/cjs/presentation-backend/UpdatesTracker.d.ts +0 -28
- package/lib/cjs/presentation-backend/UpdatesTracker.d.ts.map +0 -1
- package/lib/cjs/presentation-backend/UpdatesTracker.js +0 -55
- package/lib/cjs/presentation-backend/UpdatesTracker.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresentationRpcImpl.js","sourceRoot":"","sources":["../../../src/presentation-backend/PresentationRpcImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RPC\n */\n\nimport { IModelDb, RpcTrace } from \"@itwin/core-backend\";\nimport { assert, BeEvent, Id64String, IDisposable, Logger } from \"@itwin/core-bentley\";\nimport { IModelRpcProps } from \"@itwin/core-common\";\nimport {\n ClientDiagnostics, ComputeSelectionRequestOptions, ComputeSelectionRpcRequestOptions, ContentDescriptorRpcRequestOptions, ContentFlags,\n ContentInstanceKeysRpcRequestOptions, ContentRpcRequestOptions, ContentSourcesRpcRequestOptions, ContentSourcesRpcResult, DescriptorJSON,\n Diagnostics, DisplayLabelRpcRequestOptions, DisplayLabelsRpcRequestOptions, DisplayValueGroup, DisplayValueGroupJSON,\n DistinctValuesRpcRequestOptions, ElementProperties, FilterByInstancePathsHierarchyRpcRequestOptions, FilterByTextHierarchyRpcRequestOptions,\n HierarchyLevelDescriptorRpcRequestOptions, HierarchyLevelJSON, HierarchyRpcRequestOptions, isComputeSelectionRequestOptions, ItemJSON, KeySet,\n KeySetJSON, LabelDefinition, NodeJSON, NodeKey, NodeKeyJSON, NodePathElement, NodePathElementJSON, Paged, PagedResponse, PageOptions,\n PresentationError, PresentationRpcInterface, PresentationRpcResponse, PresentationRpcResponseData, PresentationStatus, RpcDiagnosticsOptions,\n Ruleset, RulesetVariable, RulesetVariableJSON, SelectClassInfo, SelectionScope, SelectionScopeRpcRequestOptions,\n SingleElementPropertiesRpcRequestOptions,\n} from \"@itwin/presentation-common\";\nimport { PresentationBackendLoggerCategory } from \"./BackendLoggerCategory\";\nimport { Presentation } from \"./Presentation\";\nimport { PresentationManager } from \"./PresentationManager\";\nimport { TemporaryStorage } from \"./TemporaryStorage\";\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst packageJsonVersion = require(\"../../../package.json\").version;\n\ntype ContentGetter<TResult = any, TOptions = any> = (requestOptions: TOptions) => TResult;\n\n/** @internal */\nexport const MAX_ALLOWED_PAGE_SIZE = 1000;\n/** @internal */\nexport const MAX_ALLOWED_KEYS_PAGE_SIZE = 10000;\n\nconst DEFAULT_REQUEST_TIMEOUT = 5000;\n\n/**\n * The backend implementation of PresentationRpcInterface. All it's basically\n * responsible for is forwarding calls to [[Presentation.manager]].\n *\n * @internal\n */\nexport class PresentationRpcImpl extends PresentationRpcInterface implements IDisposable {\n\n private _requestTimeout: number;\n private _pendingRequests: TemporaryStorage<PresentationRpcResponse<any>>;\n private _cancelEvents: Map<string, BeEvent<() => void>>;\n\n public constructor(props?: { requestTimeout?: number }) {\n super();\n this._requestTimeout = props?.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT;\n this._pendingRequests = new TemporaryStorage({\n // remove the pending request after request timeout + 10 seconds - this gives\n // frontend 10 seconds to re-send the request until it's removed from requests' cache\n unusedValueLifetime: (this._requestTimeout > 0) ? (this._requestTimeout + 10 * 1000) : undefined,\n\n // attempt to clean up every second\n cleanupInterval: 1000,\n\n cleanupHandler: (id, _, reason) => {\n if (reason !== \"request\") {\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Cleaning up request without frontend retrieving it: ${id}.`);\n // istanbul ignore next\n this._cancelEvents.get(id)?.raiseEvent();\n }\n this._cancelEvents.delete(id);\n },\n });\n this._cancelEvents = new Map<string, BeEvent<() => void>>();\n }\n\n public dispose() {\n this._pendingRequests.dispose();\n }\n\n public get requestTimeout() { return this._requestTimeout; }\n\n public get pendingRequests() { return this._pendingRequests; }\n\n /** Returns an ok response with result inside */\n private successResponse<TResult>(result: TResult, diagnostics?: ClientDiagnostics) {\n return {\n statusCode: PresentationStatus.Success,\n result,\n diagnostics,\n };\n }\n\n /** Returns a bad request response with empty result and an error code */\n private errorResponse(errorCode: PresentationStatus, errorMessage?: string, diagnostics?: ClientDiagnostics) {\n return {\n statusCode: errorCode,\n result: undefined,\n errorMessage,\n diagnostics,\n };\n }\n\n /**\n * Get the [[PresentationManager]] used by this RPC impl.\n */\n public getManager(clientId?: string): PresentationManager {\n return Presentation.getManager(clientId);\n }\n\n private async getIModel(token: IModelRpcProps): Promise<IModelDb> {\n let imodel: IModelDb;\n try {\n imodel = IModelDb.findByKey(token.key);\n // call refreshContainer, just in case this is a V2 checkpoint whose sasToken is about to expire, or its default transaction is about to be restarted.\n await imodel.refreshContainer(RpcTrace.expectCurrentActivity.accessToken);\n } catch {\n throw new PresentationError(PresentationStatus.InvalidArgument, \"IModelRpcProps doesn't point to a valid iModel\");\n }\n return imodel;\n }\n\n private async makeRequest<TRpcOptions extends { rulesetOrId?: Ruleset | string, clientId?: string, diagnostics?: RpcDiagnosticsOptions, rulesetVariables?: RulesetVariableJSON[] }, TResult>(token: IModelRpcProps, requestId: string, requestOptions: TRpcOptions, request: ContentGetter<Promise<TResult>>): PresentationRpcResponse<TResult> {\n const requestKey = JSON.stringify({ iModelKey: token.key, requestId, requestOptions });\n\n Logger.logInfo(PresentationBackendLoggerCategory.Rpc, `Received '${requestId}' request. Params: ${requestKey}`);\n\n let imodel: IModelDb;\n try {\n imodel = await this.getIModel(token);\n } catch (e) {\n assert(e instanceof Error);\n return this.errorResponse(PresentationStatus.InvalidArgument, e.message);\n }\n\n let resultPromise = this._pendingRequests.getValue(requestKey);\n if (resultPromise) {\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Request already pending`);\n } else {\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Request not found, creating a new one`);\n const { clientId: _, diagnostics: diagnosticsOptions, rulesetVariables, ...options } = requestOptions;\n const managerRequestOptions: any = {\n ...options,\n imodel,\n cancelEvent: new BeEvent<() => void>(),\n };\n\n // set up ruleset variables\n if (rulesetVariables)\n managerRequestOptions.rulesetVariables = rulesetVariables.map(RulesetVariable.fromJSON);\n\n // set up diagnostics listener\n let diagnostics: ClientDiagnostics | undefined;\n const getDiagnostics = (): ClientDiagnostics => {\n if (!diagnostics)\n diagnostics = {};\n return diagnostics;\n };\n if (diagnosticsOptions) {\n if (diagnosticsOptions.backendVersion) {\n getDiagnostics().backendVersion = packageJsonVersion;\n }\n managerRequestOptions.diagnostics = {\n ...diagnosticsOptions,\n handler: (d: Diagnostics) => {\n if (d.logs) {\n const target = getDiagnostics();\n if (target.logs)\n target.logs.push(...d.logs);\n else\n target.logs = [...d.logs];\n }\n },\n };\n }\n\n // initiate request\n resultPromise = request(managerRequestOptions)\n .then((result) => this.successResponse(result, diagnostics))\n .catch((e: PresentationError) => this.errorResponse(e.errorNumber, e.message, diagnostics));\n\n // store the request promise\n this._pendingRequests.addValue(requestKey, resultPromise);\n this._cancelEvents.set(requestKey, managerRequestOptions.cancelEvent);\n }\n\n if (this._requestTimeout === 0) {\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Request timeout not configured, returning promise without a timeout.`);\n resultPromise.finally(() => {\n this._pendingRequests.deleteValue(requestKey);\n });\n return resultPromise;\n }\n\n let timeout: NodeJS.Timeout;\n const timeoutPromise = new Promise<any>((_resolve, reject) => {\n timeout = setTimeout(() => {\n reject();\n }, this._requestTimeout);\n });\n\n /* eslint-disable @typescript-eslint/indent */\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Returning a promise with a timeout of ${this._requestTimeout}.`);\n return Promise\n .race([resultPromise, timeoutPromise])\n .catch<PresentationRpcResponseData>(() => {\n // note: error responses from the manager get handled when creating `resultPromise`, so we can only get here due\n // to a timeout exception\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Request timeout, returning \"BackendTimeout\" status.`);\n return this.errorResponse(PresentationStatus.BackendTimeout);\n })\n .then((response: PresentationRpcResponseData<TResult>) => {\n if (response.statusCode !== PresentationStatus.BackendTimeout) {\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Request completed, returning result.`);\n this._pendingRequests.deleteValue(requestKey);\n }\n clearTimeout(timeout);\n return response;\n });\n /* eslint-enable @typescript-eslint/indent */\n }\n\n public override async getNodesCount(token: IModelRpcProps, requestOptions: HierarchyRpcRequestOptions): PresentationRpcResponse<number> {\n return this.makeRequest(token, \"getNodesCount\", requestOptions, async (options) => {\n options = {\n ...options,\n parentKey: nodeKeyFromJson(options.parentKey),\n };\n return this.getManager(requestOptions.clientId).getNodesCount(options);\n });\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public override async getPagedNodes(token: IModelRpcProps, requestOptions: Paged<HierarchyRpcRequestOptions>): PresentationRpcResponse<PagedResponse<NodeJSON>> {\n return this.makeRequest(token, \"getPagedNodes\", requestOptions, async (options) => {\n options = enforceValidPageSize({\n ...options,\n parentKey: nodeKeyFromJson(options.parentKey),\n });\n const [serializedNodesJson, count] = await Promise.all([\n this.getManager(requestOptions.clientId).getDetail().getNodes(options),\n this.getManager(requestOptions.clientId).getNodesCount(options),\n ]);\n // eslint-disable-next-line deprecation/deprecation\n const nodesJson = JSON.parse(serializedNodesJson) as HierarchyLevelJSON;\n return {\n total: count,\n items: nodesJson.nodes,\n };\n });\n }\n\n public override async getNodesDescriptor(token: IModelRpcProps, requestOptions: HierarchyLevelDescriptorRpcRequestOptions): PresentationRpcResponse<string | DescriptorJSON | undefined> {\n return this.makeRequest(token, \"getNodesDescriptor\", requestOptions, async (options) => {\n options = {\n ...options,\n parentKey: nodeKeyFromJson(options.parentKey),\n };\n return this.getManager(requestOptions.clientId).getDetail().getNodesDescriptor(options);\n });\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public override async getNodePaths(token: IModelRpcProps, requestOptions: FilterByInstancePathsHierarchyRpcRequestOptions): PresentationRpcResponse<NodePathElementJSON[]> {\n return this.makeRequest(token, \"getNodePaths\", requestOptions, async (options) => {\n const result = await this.getManager(requestOptions.clientId).getDetail().getNodePaths(options);\n // eslint-disable-next-line deprecation/deprecation\n return result.map(NodePathElement.toJSON);\n });\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public override async getFilteredNodePaths(token: IModelRpcProps, requestOptions: FilterByTextHierarchyRpcRequestOptions): PresentationRpcResponse<NodePathElementJSON[]> {\n return this.makeRequest(token, \"getFilteredNodePaths\", requestOptions, async (options) => {\n const result = await this.getManager(requestOptions.clientId).getDetail().getFilteredNodePaths(options);\n // eslint-disable-next-line deprecation/deprecation\n return result.map(NodePathElement.toJSON);\n });\n }\n\n public override async getContentSources(token: IModelRpcProps, requestOptions: ContentSourcesRpcRequestOptions): PresentationRpcResponse<ContentSourcesRpcResult> {\n return this.makeRequest(token, \"getContentSources\", requestOptions, async (options) => {\n const result = await this.getManager(requestOptions.clientId).getContentSources(options);\n const classesMap = {};\n const selectClasses = result.map((sci) => SelectClassInfo.toCompressedJSON(sci, classesMap));\n return { sources: selectClasses, classesMap };\n });\n }\n\n public override async getContentDescriptor(token: IModelRpcProps, requestOptions: ContentDescriptorRpcRequestOptions): PresentationRpcResponse<DescriptorJSON | undefined> {\n return this.makeRequest(token, \"getContentDescriptor\", requestOptions, async (options) => {\n options = {\n ...options,\n contentFlags: (options.contentFlags ?? 0) | ContentFlags.DescriptorOnly, // always append the \"descriptor only\" flag when handling request from the frontend\n keys: KeySet.fromJSON(options.keys),\n };\n if (options.transport === \"unparsed-json\") {\n // Here we send a plain JSON string but we will parse it to DescriptorJSON on the frontend. This way we are\n // bypassing unnecessary deserialization and serialization.\n return Presentation.getManager(requestOptions.clientId).getDetail().getContentDescriptor(options) as unknown as DescriptorJSON | undefined;\n } else {\n // Support for older frontends that still expect a parsed descriptor\n const descriptor = await Presentation.getManager(requestOptions.clientId).getContentDescriptor(options);\n return descriptor?.toJSON();\n }\n });\n }\n\n public override async getContentSetSize(token: IModelRpcProps, requestOptions: ContentRpcRequestOptions): PresentationRpcResponse<number> {\n return this.makeRequest(token, \"getContentSetSize\", requestOptions, async (options) => {\n options = {\n ...options,\n keys: KeySet.fromJSON(options.keys),\n };\n return this.getManager(requestOptions.clientId).getContentSetSize(options);\n });\n }\n\n public override async getPagedContent(token: IModelRpcProps, requestOptions: Paged<ContentRpcRequestOptions>): PresentationRpcResponse<{ descriptor: DescriptorJSON, contentSet: PagedResponse<ItemJSON> } | undefined> {\n return this.makeRequest(token, \"getPagedContent\", requestOptions, async (options) => {\n options = enforceValidPageSize({\n ...options,\n keys: KeySet.fromJSON(options.keys),\n });\n\n const [size, content] = await Promise.all([\n this.getManager(requestOptions.clientId).getContentSetSize(options),\n this.getManager(requestOptions.clientId).getDetail().getContent(options),\n ]);\n\n if (!content)\n return undefined;\n\n return {\n descriptor: content.descriptor.toJSON(),\n contentSet: {\n total: size,\n items: content.contentSet.map((i) => i.toJSON()),\n },\n };\n });\n }\n\n public override async getPagedContentSet(token: IModelRpcProps, requestOptions: Paged<ContentRpcRequestOptions>): PresentationRpcResponse<PagedResponse<ItemJSON>> {\n const content = await this.getPagedContent(token, requestOptions);\n return this.successResponse(content.result ? content.result.contentSet : { total: 0, items: [] });\n }\n\n public override async getElementProperties(token: IModelRpcProps, requestOptions: SingleElementPropertiesRpcRequestOptions): PresentationRpcResponse<ElementProperties | undefined> {\n return this.makeRequest(token, \"getElementProperties\", { ...requestOptions }, async (options) => {\n return this.getManager(requestOptions.clientId).getDetail().getElementProperties(options);\n });\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public override async getPagedDistinctValues(token: IModelRpcProps, requestOptions: DistinctValuesRpcRequestOptions): PresentationRpcResponse<PagedResponse<DisplayValueGroupJSON>> {\n return this.makeRequest(token, \"getPagedDistinctValues\", requestOptions, async (options) => {\n options = enforceValidPageSize({\n ...options,\n keys: KeySet.fromJSON(options.keys),\n });\n const response = await this.getManager(requestOptions.clientId).getDetail().getPagedDistinctValues(options);\n return {\n ...response,\n // eslint-disable-next-line deprecation/deprecation\n items: response.items.map(DisplayValueGroup.toJSON),\n };\n });\n }\n\n public override async getContentInstanceKeys(token: IModelRpcProps, requestOptions: ContentInstanceKeysRpcRequestOptions): PresentationRpcResponse<{ total: number, items: KeySetJSON }> {\n return this.makeRequest(token, \"getContentInstanceKeys\", requestOptions, async (options) => {\n const { displayType, ...optionsNoDisplayType } = options;\n options = enforceValidPageSize({\n ...optionsNoDisplayType,\n keys: KeySet.fromJSON(optionsNoDisplayType.keys),\n descriptor: {\n displayType,\n contentFlags: ContentFlags.KeysOnly,\n },\n }, MAX_ALLOWED_KEYS_PAGE_SIZE);\n\n const [size, content] = await Promise.all([\n this.getManager(requestOptions.clientId).getContentSetSize(options),\n this.getManager(requestOptions.clientId).getDetail().getContent(options),\n ]);\n\n if (size === 0 || !content)\n return { total: 0, items: new KeySet().toJSON() };\n\n return {\n total: size,\n items: content.contentSet.reduce((keys, item) => keys.add(item.primaryKeys), new KeySet()).toJSON(),\n };\n });\n }\n\n public override async getDisplayLabelDefinition(token: IModelRpcProps, requestOptions: DisplayLabelRpcRequestOptions): PresentationRpcResponse<LabelDefinition> {\n return this.makeRequest(token, \"getDisplayLabelDefinition\", requestOptions, async (options) => {\n const label = await this.getManager(requestOptions.clientId).getDetail().getDisplayLabelDefinition(options);\n return label;\n });\n }\n\n public override async getPagedDisplayLabelDefinitions(token: IModelRpcProps, requestOptions: DisplayLabelsRpcRequestOptions): PresentationRpcResponse<PagedResponse<LabelDefinition>> {\n const pageOpts = enforceValidPageSize({ paging: { start: 0, size: requestOptions.keys.length } });\n if (pageOpts.paging.size < requestOptions.keys.length)\n requestOptions.keys.splice(pageOpts.paging.size);\n return this.makeRequest(token, \"getPagedDisplayLabelDefinitions\", requestOptions, async (options) => {\n const labels = await this.getManager(requestOptions.clientId).getDetail().getDisplayLabelDefinitions({ ...options, keys: options.keys });\n return {\n total: options.keys.length,\n items: labels,\n };\n });\n }\n\n public override async getSelectionScopes(token: IModelRpcProps, requestOptions: SelectionScopeRpcRequestOptions): PresentationRpcResponse<SelectionScope[]> {\n return this.makeRequest(token, \"getSelectionScopes\", requestOptions, async (options) =>\n this.getManager(requestOptions.clientId).getSelectionScopes(options),\n );\n }\n\n public override async computeSelection(token: IModelRpcProps, requestOptions: ComputeSelectionRpcRequestOptions | SelectionScopeRpcRequestOptions, ids?: Id64String[], scopeId?: string): PresentationRpcResponse<KeySetJSON> {\n return this.makeRequest(token, \"computeSelection\", requestOptions, async (options) => {\n if (!isComputeSelectionRequestOptions(options)) {\n options = {\n ...options,\n elementIds: ids!,\n scope: { id: scopeId! },\n };\n }\n const keys = await this.getManager(requestOptions.clientId).computeSelection(options as ComputeSelectionRequestOptions<IModelDb>);\n return keys.toJSON();\n });\n }\n}\n\nconst enforceValidPageSize = <TOptions extends Paged<object>>(requestOptions: TOptions, maxPageSize = MAX_ALLOWED_PAGE_SIZE): TOptions & { paging: PageOptions } => {\n const validPageSize = getValidPageSize(requestOptions.paging?.size, maxPageSize);\n if (!requestOptions.paging || requestOptions.paging.size !== validPageSize)\n return { ...requestOptions, paging: { ...requestOptions.paging, size: validPageSize } };\n return requestOptions as (TOptions & { paging: PageOptions });\n};\n\nconst getValidPageSize = (size: number | undefined, maxPageSize: number) => {\n const requestedSize = size ?? 0;\n return (requestedSize === 0 || requestedSize > maxPageSize) ? maxPageSize : requestedSize;\n};\n\n// eslint-disable-next-line deprecation/deprecation\nconst nodeKeyFromJson = (json: NodeKeyJSON | undefined): NodeKey | undefined => {\n if (!json)\n return undefined;\n // eslint-disable-next-line deprecation/deprecation\n return NodeKey.fromJSON(json);\n};\n"]}
|
|
1
|
+
{"version":3,"file":"PresentationRpcImpl.js","sourceRoot":"","sources":["../../../src/presentation-backend/PresentationRpcImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module RPC\r\n */\r\n\r\nimport { IModelDb, RpcTrace } from \"@itwin/core-backend\";\r\nimport { assert, BeEvent, Id64String, IDisposable, Logger } from \"@itwin/core-bentley\";\r\nimport { IModelRpcProps } from \"@itwin/core-common\";\r\nimport {\r\n ClientDiagnostics,\r\n ComputeSelectionRequestOptions,\r\n ComputeSelectionRpcRequestOptions,\r\n ContentDescriptorRpcRequestOptions,\r\n ContentFlags,\r\n ContentInstanceKeysRpcRequestOptions,\r\n ContentRpcRequestOptions,\r\n ContentSourcesRpcRequestOptions,\r\n ContentSourcesRpcResult,\r\n DescriptorJSON,\r\n Diagnostics,\r\n DisplayLabelRpcRequestOptions,\r\n DisplayLabelsRpcRequestOptions,\r\n DisplayValueGroup,\r\n DisplayValueGroupJSON,\r\n DistinctValuesRpcRequestOptions,\r\n ElementProperties,\r\n FilterByInstancePathsHierarchyRpcRequestOptions,\r\n FilterByTextHierarchyRpcRequestOptions,\r\n HierarchyLevelDescriptorRpcRequestOptions,\r\n HierarchyLevelJSON,\r\n HierarchyRpcRequestOptions,\r\n isComputeSelectionRequestOptions,\r\n ItemJSON,\r\n KeySet,\r\n KeySetJSON,\r\n LabelDefinition,\r\n NodeJSON,\r\n NodeKey,\r\n NodeKeyJSON,\r\n NodePathElement,\r\n NodePathElementJSON,\r\n Paged,\r\n PagedResponse,\r\n PageOptions,\r\n PresentationError,\r\n PresentationRpcInterface,\r\n PresentationRpcResponse,\r\n PresentationRpcResponseData,\r\n PresentationStatus,\r\n RpcDiagnosticsOptions,\r\n Ruleset,\r\n RulesetVariable,\r\n RulesetVariableJSON,\r\n SelectClassInfo,\r\n SelectionScope,\r\n SelectionScopeRpcRequestOptions,\r\n SingleElementPropertiesRpcRequestOptions,\r\n} from \"@itwin/presentation-common\";\r\nimport { PresentationBackendLoggerCategory } from \"./BackendLoggerCategory\";\r\nimport { Presentation } from \"./Presentation\";\r\nimport { PresentationManager } from \"./PresentationManager\";\r\nimport { TemporaryStorage } from \"./TemporaryStorage\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst packageJsonVersion = require(\"../../../package.json\").version;\r\n\r\ntype ContentGetter<TResult = any, TOptions = any> = (requestOptions: TOptions) => TResult;\r\n\r\n/** @internal */\r\nexport const MAX_ALLOWED_PAGE_SIZE = 1000;\r\n/** @internal */\r\nexport const MAX_ALLOWED_KEYS_PAGE_SIZE = 10000;\r\n\r\nconst DEFAULT_REQUEST_TIMEOUT = 5000;\r\n\r\n/**\r\n * The backend implementation of PresentationRpcInterface. All it's basically\r\n * responsible for is forwarding calls to [[Presentation.manager]].\r\n *\r\n * @internal\r\n */\r\nexport class PresentationRpcImpl extends PresentationRpcInterface implements IDisposable {\r\n private _requestTimeout: number;\r\n private _pendingRequests: TemporaryStorage<PresentationRpcResponse<any>>;\r\n private _cancelEvents: Map<string, BeEvent<() => void>>;\r\n\r\n public constructor(props?: { requestTimeout?: number }) {\r\n super();\r\n this._requestTimeout = props?.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT;\r\n this._pendingRequests = new TemporaryStorage({\r\n // remove the pending request after request timeout + 10 seconds - this gives\r\n // frontend 10 seconds to re-send the request until it's removed from requests' cache\r\n unusedValueLifetime: this._requestTimeout > 0 ? this._requestTimeout + 10 * 1000 : undefined,\r\n\r\n // attempt to clean up every second\r\n cleanupInterval: 1000,\r\n\r\n cleanupHandler: (id, _, reason) => {\r\n if (reason !== \"request\") {\r\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Cleaning up request without frontend retrieving it: ${id}.`);\r\n // istanbul ignore next\r\n this._cancelEvents.get(id)?.raiseEvent();\r\n }\r\n this._cancelEvents.delete(id);\r\n },\r\n });\r\n this._cancelEvents = new Map<string, BeEvent<() => void>>();\r\n }\r\n\r\n public dispose() {\r\n this._pendingRequests.dispose();\r\n }\r\n\r\n public get requestTimeout() {\r\n return this._requestTimeout;\r\n }\r\n\r\n public get pendingRequests() {\r\n return this._pendingRequests;\r\n }\r\n\r\n /** Returns an ok response with result inside */\r\n private successResponse<TResult>(result: TResult, diagnostics?: ClientDiagnostics) {\r\n return {\r\n statusCode: PresentationStatus.Success,\r\n result,\r\n diagnostics,\r\n };\r\n }\r\n\r\n /** Returns a bad request response with empty result and an error code */\r\n private errorResponse(errorCode: PresentationStatus, errorMessage?: string, diagnostics?: ClientDiagnostics) {\r\n return {\r\n statusCode: errorCode,\r\n result: undefined,\r\n errorMessage,\r\n diagnostics,\r\n };\r\n }\r\n\r\n /**\r\n * Get the [[PresentationManager]] used by this RPC impl.\r\n */\r\n public getManager(clientId?: string): PresentationManager {\r\n return Presentation.getManager(clientId);\r\n }\r\n\r\n private async getIModel(token: IModelRpcProps): Promise<IModelDb> {\r\n let imodel: IModelDb;\r\n try {\r\n imodel = IModelDb.findByKey(token.key);\r\n // call refreshContainer, just in case this is a V2 checkpoint whose sasToken is about to expire, or its default transaction is about to be restarted.\r\n await imodel.refreshContainerForRpc(RpcTrace.expectCurrentActivity.accessToken);\r\n } catch {\r\n throw new PresentationError(PresentationStatus.InvalidArgument, \"IModelRpcProps doesn't point to a valid iModel\");\r\n }\r\n return imodel;\r\n }\r\n\r\n private async makeRequest<\r\n TRpcOptions extends { rulesetOrId?: Ruleset | string; clientId?: string; diagnostics?: RpcDiagnosticsOptions; rulesetVariables?: RulesetVariableJSON[] },\r\n TResult,\r\n >(token: IModelRpcProps, requestId: string, requestOptions: TRpcOptions, request: ContentGetter<Promise<TResult>>): PresentationRpcResponse<TResult> {\r\n const requestKey = JSON.stringify({ iModelKey: token.key, requestId, requestOptions });\r\n\r\n Logger.logInfo(PresentationBackendLoggerCategory.Rpc, `Received '${requestId}' request. Params: ${requestKey}`);\r\n\r\n let imodel: IModelDb;\r\n try {\r\n imodel = await this.getIModel(token);\r\n } catch (e) {\r\n assert(e instanceof Error);\r\n return this.errorResponse(PresentationStatus.InvalidArgument, e.message);\r\n }\r\n\r\n let resultPromise = this._pendingRequests.getValue(requestKey);\r\n if (resultPromise) {\r\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Request already pending`);\r\n } else {\r\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Request not found, creating a new one`);\r\n const { clientId: _, diagnostics: diagnosticsOptions, rulesetVariables, ...options } = requestOptions;\r\n const managerRequestOptions: any = {\r\n ...options,\r\n imodel,\r\n cancelEvent: new BeEvent<() => void>(),\r\n };\r\n\r\n // set up ruleset variables\r\n if (rulesetVariables) {\r\n managerRequestOptions.rulesetVariables = rulesetVariables.map(RulesetVariable.fromJSON);\r\n }\r\n\r\n // set up diagnostics listener\r\n let diagnostics: ClientDiagnostics | undefined;\r\n const getDiagnostics = (): ClientDiagnostics => {\r\n if (!diagnostics) {\r\n diagnostics = {};\r\n }\r\n return diagnostics;\r\n };\r\n if (diagnosticsOptions) {\r\n if (diagnosticsOptions.backendVersion) {\r\n getDiagnostics().backendVersion = packageJsonVersion;\r\n }\r\n managerRequestOptions.diagnostics = {\r\n ...diagnosticsOptions,\r\n handler: (d: Diagnostics) => {\r\n if (d.logs) {\r\n const target = getDiagnostics();\r\n if (target.logs) {\r\n target.logs.push(...d.logs);\r\n } else {\r\n target.logs = [...d.logs];\r\n }\r\n }\r\n },\r\n };\r\n }\r\n\r\n // initiate request\r\n resultPromise = request(managerRequestOptions)\r\n .then((result) => this.successResponse(result, diagnostics))\r\n .catch((e: PresentationError) => this.errorResponse(e.errorNumber, e.message, diagnostics));\r\n\r\n // store the request promise\r\n this._pendingRequests.addValue(requestKey, resultPromise);\r\n this._cancelEvents.set(requestKey, managerRequestOptions.cancelEvent);\r\n }\r\n\r\n if (this._requestTimeout === 0) {\r\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Request timeout not configured, returning promise without a timeout.`);\r\n resultPromise.finally(() => {\r\n this._pendingRequests.deleteValue(requestKey);\r\n });\r\n return resultPromise;\r\n }\r\n\r\n let timeout: NodeJS.Timeout;\r\n const timeoutPromise = new Promise<any>((_resolve, reject) => {\r\n timeout = setTimeout(() => {\r\n reject();\r\n }, this._requestTimeout);\r\n });\r\n\r\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Returning a promise with a timeout of ${this._requestTimeout}.`);\r\n return Promise.race([resultPromise, timeoutPromise])\r\n .catch<PresentationRpcResponseData>(() => {\r\n // note: error responses from the manager get handled when creating `resultPromise`, so we can only get here due\r\n // to a timeout exception\r\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Request timeout, returning \"BackendTimeout\" status.`);\r\n return this.errorResponse(PresentationStatus.BackendTimeout);\r\n })\r\n .then((response: PresentationRpcResponseData<TResult>) => {\r\n if (response.statusCode !== PresentationStatus.BackendTimeout) {\r\n Logger.logTrace(PresentationBackendLoggerCategory.Rpc, `Request completed, returning result.`);\r\n this._pendingRequests.deleteValue(requestKey);\r\n }\r\n clearTimeout(timeout);\r\n return response;\r\n });\r\n }\r\n\r\n public override async getNodesCount(token: IModelRpcProps, requestOptions: HierarchyRpcRequestOptions): PresentationRpcResponse<number> {\r\n return this.makeRequest(token, \"getNodesCount\", requestOptions, async (options) => {\r\n options = {\r\n ...options,\r\n parentKey: nodeKeyFromJson(options.parentKey),\r\n };\r\n return this.getManager(requestOptions.clientId).getNodesCount(options);\r\n });\r\n }\r\n\r\n public override async getPagedNodes(\r\n token: IModelRpcProps,\r\n requestOptions: Paged<HierarchyRpcRequestOptions>,\r\n // eslint-disable-next-line deprecation/deprecation\r\n ): PresentationRpcResponse<PagedResponse<NodeJSON>> {\r\n return this.makeRequest(token, \"getPagedNodes\", requestOptions, async (options) => {\r\n options = enforceValidPageSize({\r\n ...options,\r\n parentKey: nodeKeyFromJson(options.parentKey),\r\n });\r\n const [serializedNodesJson, count] = await Promise.all([\r\n this.getManager(requestOptions.clientId).getDetail().getNodes(options),\r\n this.getManager(requestOptions.clientId).getNodesCount(options),\r\n ]);\r\n // eslint-disable-next-line deprecation/deprecation\r\n const nodesJson = JSON.parse(serializedNodesJson) as HierarchyLevelJSON;\r\n return {\r\n total: count,\r\n items: nodesJson.nodes,\r\n };\r\n });\r\n }\r\n\r\n public override async getNodesDescriptor(\r\n token: IModelRpcProps,\r\n requestOptions: HierarchyLevelDescriptorRpcRequestOptions,\r\n ): PresentationRpcResponse<string | DescriptorJSON | undefined> {\r\n return this.makeRequest(token, \"getNodesDescriptor\", requestOptions, async (options) => {\r\n options = {\r\n ...options,\r\n parentKey: nodeKeyFromJson(options.parentKey),\r\n };\r\n return this.getManager(requestOptions.clientId).getDetail().getNodesDescriptor(options);\r\n });\r\n }\r\n\r\n public override async getNodePaths(\r\n token: IModelRpcProps,\r\n requestOptions: FilterByInstancePathsHierarchyRpcRequestOptions,\r\n // eslint-disable-next-line deprecation/deprecation\r\n ): PresentationRpcResponse<NodePathElementJSON[]> {\r\n return this.makeRequest(token, \"getNodePaths\", requestOptions, async (options) => {\r\n const result = await this.getManager(requestOptions.clientId).getDetail().getNodePaths(options);\r\n // eslint-disable-next-line deprecation/deprecation\r\n return result.map(NodePathElement.toJSON);\r\n });\r\n }\r\n\r\n public override async getFilteredNodePaths(\r\n token: IModelRpcProps,\r\n requestOptions: FilterByTextHierarchyRpcRequestOptions,\r\n // eslint-disable-next-line deprecation/deprecation\r\n ): PresentationRpcResponse<NodePathElementJSON[]> {\r\n return this.makeRequest(token, \"getFilteredNodePaths\", requestOptions, async (options) => {\r\n const result = await this.getManager(requestOptions.clientId).getDetail().getFilteredNodePaths(options);\r\n // eslint-disable-next-line deprecation/deprecation\r\n return result.map(NodePathElement.toJSON);\r\n });\r\n }\r\n\r\n public override async getContentSources(\r\n token: IModelRpcProps,\r\n requestOptions: ContentSourcesRpcRequestOptions,\r\n ): PresentationRpcResponse<ContentSourcesRpcResult> {\r\n return this.makeRequest(token, \"getContentSources\", requestOptions, async (options) => {\r\n const result = await this.getManager(requestOptions.clientId).getContentSources(options);\r\n const classesMap = {};\r\n const selectClasses = result.map((sci) => SelectClassInfo.toCompressedJSON(sci, classesMap));\r\n return { sources: selectClasses, classesMap };\r\n });\r\n }\r\n\r\n public override async getContentDescriptor(\r\n token: IModelRpcProps,\r\n requestOptions: ContentDescriptorRpcRequestOptions,\r\n ): PresentationRpcResponse<DescriptorJSON | undefined> {\r\n return this.makeRequest(token, \"getContentDescriptor\", requestOptions, async (options) => {\r\n options = {\r\n ...options,\r\n contentFlags: (options.contentFlags ?? 0) | ContentFlags.DescriptorOnly, // always append the \"descriptor only\" flag when handling request from the frontend\r\n keys: KeySet.fromJSON(options.keys),\r\n };\r\n if (options.transport === \"unparsed-json\") {\r\n // Here we send a plain JSON string but we will parse it to DescriptorJSON on the frontend. This way we are\r\n // bypassing unnecessary deserialization and serialization.\r\n return Presentation.getManager(requestOptions.clientId).getDetail().getContentDescriptor(options) as unknown as DescriptorJSON | undefined;\r\n } else {\r\n // Support for older frontends that still expect a parsed descriptor\r\n const descriptor = await Presentation.getManager(requestOptions.clientId).getContentDescriptor(options);\r\n return descriptor?.toJSON();\r\n }\r\n });\r\n }\r\n\r\n public override async getContentSetSize(token: IModelRpcProps, requestOptions: ContentRpcRequestOptions): PresentationRpcResponse<number> {\r\n return this.makeRequest(token, \"getContentSetSize\", requestOptions, async (options) => {\r\n options = {\r\n ...options,\r\n keys: KeySet.fromJSON(options.keys),\r\n };\r\n return this.getManager(requestOptions.clientId).getContentSetSize(options);\r\n });\r\n }\r\n\r\n public override async getPagedContent(\r\n token: IModelRpcProps,\r\n requestOptions: Paged<ContentRpcRequestOptions>,\r\n ): PresentationRpcResponse<{ descriptor: DescriptorJSON; contentSet: PagedResponse<ItemJSON> } | undefined> {\r\n return this.makeRequest(token, \"getPagedContent\", requestOptions, async (options) => {\r\n options = enforceValidPageSize({\r\n ...options,\r\n keys: KeySet.fromJSON(options.keys),\r\n });\r\n\r\n const [size, content] = await Promise.all([\r\n this.getManager(requestOptions.clientId).getContentSetSize(options),\r\n this.getManager(requestOptions.clientId).getDetail().getContent(options),\r\n ]);\r\n\r\n if (!content) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n descriptor: content.descriptor.toJSON(),\r\n contentSet: {\r\n total: size,\r\n items: content.contentSet.map((i) => i.toJSON()),\r\n },\r\n };\r\n });\r\n }\r\n\r\n public override async getPagedContentSet(\r\n token: IModelRpcProps,\r\n requestOptions: Paged<ContentRpcRequestOptions>,\r\n ): PresentationRpcResponse<PagedResponse<ItemJSON>> {\r\n const content = await this.getPagedContent(token, requestOptions);\r\n return this.successResponse(content.result ? content.result.contentSet : { total: 0, items: [] });\r\n }\r\n\r\n public override async getElementProperties(\r\n token: IModelRpcProps,\r\n requestOptions: SingleElementPropertiesRpcRequestOptions,\r\n ): PresentationRpcResponse<ElementProperties | undefined> {\r\n return this.makeRequest(token, \"getElementProperties\", { ...requestOptions }, async (options) => {\r\n return this.getManager(requestOptions.clientId).getDetail().getElementProperties(options);\r\n });\r\n }\r\n\r\n public override async getPagedDistinctValues(\r\n token: IModelRpcProps,\r\n requestOptions: DistinctValuesRpcRequestOptions,\r\n // eslint-disable-next-line deprecation/deprecation\r\n ): PresentationRpcResponse<PagedResponse<DisplayValueGroupJSON>> {\r\n return this.makeRequest(token, \"getPagedDistinctValues\", requestOptions, async (options) => {\r\n options = enforceValidPageSize({\r\n ...options,\r\n keys: KeySet.fromJSON(options.keys),\r\n });\r\n const response = await this.getManager(requestOptions.clientId).getDetail().getPagedDistinctValues(options);\r\n return {\r\n ...response,\r\n // eslint-disable-next-line deprecation/deprecation\r\n items: response.items.map(DisplayValueGroup.toJSON),\r\n };\r\n });\r\n }\r\n\r\n public override async getContentInstanceKeys(\r\n token: IModelRpcProps,\r\n requestOptions: ContentInstanceKeysRpcRequestOptions,\r\n ): PresentationRpcResponse<{ total: number; items: KeySetJSON }> {\r\n return this.makeRequest(token, \"getContentInstanceKeys\", requestOptions, async (options) => {\r\n const { displayType, ...optionsNoDisplayType } = options;\r\n options = enforceValidPageSize(\r\n {\r\n ...optionsNoDisplayType,\r\n keys: KeySet.fromJSON(optionsNoDisplayType.keys),\r\n descriptor: {\r\n displayType,\r\n contentFlags: ContentFlags.KeysOnly,\r\n },\r\n },\r\n MAX_ALLOWED_KEYS_PAGE_SIZE,\r\n );\r\n\r\n const [size, content] = await Promise.all([\r\n this.getManager(requestOptions.clientId).getContentSetSize(options),\r\n this.getManager(requestOptions.clientId).getDetail().getContent(options),\r\n ]);\r\n\r\n if (size === 0 || !content) {\r\n return { total: 0, items: new KeySet().toJSON() };\r\n }\r\n\r\n return {\r\n total: size,\r\n items: content.contentSet.reduce((keys, item) => keys.add(item.primaryKeys), new KeySet()).toJSON(),\r\n };\r\n });\r\n }\r\n\r\n public override async getDisplayLabelDefinition(\r\n token: IModelRpcProps,\r\n requestOptions: DisplayLabelRpcRequestOptions,\r\n ): PresentationRpcResponse<LabelDefinition> {\r\n return this.makeRequest(token, \"getDisplayLabelDefinition\", requestOptions, async (options) => {\r\n const label = await this.getManager(requestOptions.clientId).getDetail().getDisplayLabelDefinition(options);\r\n return label;\r\n });\r\n }\r\n\r\n public override async getPagedDisplayLabelDefinitions(\r\n token: IModelRpcProps,\r\n requestOptions: DisplayLabelsRpcRequestOptions,\r\n ): PresentationRpcResponse<PagedResponse<LabelDefinition>> {\r\n const pageOpts = enforceValidPageSize({ paging: { start: 0, size: requestOptions.keys.length } });\r\n if (pageOpts.paging.size < requestOptions.keys.length) {\r\n requestOptions.keys.splice(pageOpts.paging.size);\r\n }\r\n return this.makeRequest(token, \"getPagedDisplayLabelDefinitions\", requestOptions, async (options) => {\r\n const labels = await this.getManager(requestOptions.clientId)\r\n .getDetail()\r\n .getDisplayLabelDefinitions({ ...options, keys: options.keys });\r\n return {\r\n total: options.keys.length,\r\n items: labels,\r\n };\r\n });\r\n }\r\n\r\n public override async getSelectionScopes(token: IModelRpcProps, requestOptions: SelectionScopeRpcRequestOptions): PresentationRpcResponse<SelectionScope[]> {\r\n return this.makeRequest(token, \"getSelectionScopes\", requestOptions, async (options) =>\r\n this.getManager(requestOptions.clientId).getSelectionScopes(options),\r\n );\r\n }\r\n\r\n public override async computeSelection(\r\n token: IModelRpcProps,\r\n requestOptions: ComputeSelectionRpcRequestOptions | SelectionScopeRpcRequestOptions,\r\n ids?: Id64String[],\r\n scopeId?: string,\r\n ): PresentationRpcResponse<KeySetJSON> {\r\n return this.makeRequest(token, \"computeSelection\", requestOptions, async (options) => {\r\n if (!isComputeSelectionRequestOptions(options)) {\r\n options = {\r\n ...options,\r\n elementIds: ids!,\r\n scope: { id: scopeId! },\r\n };\r\n }\r\n const keys = await this.getManager(requestOptions.clientId).computeSelection(options as ComputeSelectionRequestOptions<IModelDb>);\r\n return keys.toJSON();\r\n });\r\n }\r\n}\r\n\r\nconst enforceValidPageSize = <TOptions extends Paged<object>>(\r\n requestOptions: TOptions,\r\n maxPageSize = MAX_ALLOWED_PAGE_SIZE,\r\n): TOptions & { paging: PageOptions } => {\r\n const validPageSize = getValidPageSize(requestOptions.paging?.size, maxPageSize);\r\n if (!requestOptions.paging || requestOptions.paging.size !== validPageSize) {\r\n return { ...requestOptions, paging: { ...requestOptions.paging, size: validPageSize } };\r\n }\r\n return requestOptions as TOptions & { paging: PageOptions };\r\n};\r\n\r\nconst getValidPageSize = (size: number | undefined, maxPageSize: number) => {\r\n const requestedSize = size ?? 0;\r\n return requestedSize === 0 || requestedSize > maxPageSize ? maxPageSize : requestedSize;\r\n};\r\n\r\n// eslint-disable-next-line deprecation/deprecation\r\nconst nodeKeyFromJson = (json: NodeKeyJSON | undefined): NodeKey | undefined => {\r\n if (!json) {\r\n return undefined;\r\n }\r\n // eslint-disable-next-line deprecation/deprecation\r\n return NodeKey.fromJSON(json);\r\n};\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RulesetEmbedder.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetEmbedder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"RulesetEmbedder.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetEmbedder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAML,MAAM,EACN,QAAQ,EAIT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAoB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAcnE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAKrD;;;GAGG;AACH,UAAU,eAAe;IACvB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED;;;GAGG;AACH,UAAU,eAAe;IACvB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,wBAAwB,GAAG,yBAAyB,CAAC;IAElF;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,OAAO,CAAC;IAEhD;;OAEG;IACH,cAAc,CAAC,EAAE,eAAe,CAAC;IAEjC;;OAEG;IACH,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,kCAAkC;IAClC,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgG;IAC5H,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuB;IACzD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuB;IAE3D;;OAEG;gBACgB,KAAK,EAAE,oBAAoB;IAK9C;;;;;OAKG;IACU,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;YA2EnF,aAAa;YAWb,gBAAgB;IAa9B;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAiBhC,uBAAuB;IAWrC,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,YAAY;YAYN,qBAAqB;YAWrB,yBAAyB;YAezB,aAAa;YAqBb,mCAAmC;YAcnC,aAAa;YAYb,WAAW;YAaX,aAAa;CAU5B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*---------------------------------------------------------------------------------------------
|
|
3
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
-
*--------------------------------------------------------------------------------------------*/
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
/** @packageDocumentation
|
|
7
7
|
* @module Core
|
|
8
8
|
*/
|
|
@@ -67,9 +67,9 @@ class RulesetEmbedder {
|
|
|
67
67
|
await this.handleElementOperationPrerequisites();
|
|
68
68
|
// find all rulesets with the same ID
|
|
69
69
|
const rulesetsWithSameId = [];
|
|
70
|
-
const query = `
|
|
71
|
-
SELECT ECInstanceId, JsonProperties
|
|
72
|
-
FROM ${RulesetElements.Ruleset.schema.name}.${RulesetElements.Ruleset.className}
|
|
70
|
+
const query = `
|
|
71
|
+
SELECT ECInstanceId, JsonProperties
|
|
72
|
+
FROM ${RulesetElements.Ruleset.schema.name}.${RulesetElements.Ruleset.className}
|
|
73
73
|
WHERE json_extract(JsonProperties, '$.jsonProperties.id') = :rulesetId`;
|
|
74
74
|
const reader = this._imodel.createQueryReader(query, core_common_1.QueryBinder.from({ rulesetId: ruleset.id }), { rowFormat: core_common_1.QueryRowFormat.UseJsPropertyNames });
|
|
75
75
|
while (await reader.step()) {
|
|
@@ -83,14 +83,15 @@ class RulesetEmbedder {
|
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
85
|
// check if we need to do anything at all
|
|
86
|
-
const shouldSkip = normalizedOptions.skip === "same-id" && rulesetsWithSameId.length > 0
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
const shouldSkip = (normalizedOptions.skip === "same-id" && rulesetsWithSameId.length > 0) ||
|
|
87
|
+
(normalizedOptions.skip === "same-id-and-version-eq" && rulesetsWithSameId.some((entry) => entry.normalizedVersion === rulesetVersion)) ||
|
|
88
|
+
(normalizedOptions.skip === "same-id-and-version-gte" && rulesetsWithSameId.some((entry) => (0, semver_1.gte)(entry.normalizedVersion, rulesetVersion)));
|
|
89
89
|
if (shouldSkip) {
|
|
90
90
|
// we're not inserting anything - return ID of the ruleset element with the highest version
|
|
91
91
|
const rulesetEntryWithHighestVersion = rulesetsWithSameId.reduce((highest, curr) => {
|
|
92
|
-
if (!highest.ruleset.version || curr.ruleset.version && (0, semver_1.gt)(curr.ruleset.version, highest.ruleset.version))
|
|
92
|
+
if (!highest.ruleset.version || (curr.ruleset.version && (0, semver_1.gt)(curr.ruleset.version, highest.ruleset.version))) {
|
|
93
93
|
return curr;
|
|
94
|
+
}
|
|
94
95
|
return highest;
|
|
95
96
|
}, rulesetsWithSameId[0]);
|
|
96
97
|
return rulesetEntryWithHighestVersion.id;
|
|
@@ -107,8 +108,9 @@ class RulesetEmbedder {
|
|
|
107
108
|
return false;
|
|
108
109
|
};
|
|
109
110
|
rulesetsWithSameId.forEach((entry) => {
|
|
110
|
-
if (shouldRemove(entry.ruleset, entry.normalizedVersion))
|
|
111
|
+
if (shouldRemove(entry.ruleset, entry.normalizedVersion)) {
|
|
111
112
|
rulesetsToRemove.push(entry.id);
|
|
113
|
+
}
|
|
112
114
|
});
|
|
113
115
|
this._imodel.elements.deleteElement(rulesetsToRemove);
|
|
114
116
|
// attempt to update ruleset with same ID and version
|
|
@@ -144,8 +146,9 @@ class RulesetEmbedder {
|
|
|
144
146
|
* Get all rulesets embedded in the iModel.
|
|
145
147
|
*/
|
|
146
148
|
async getRulesets() {
|
|
147
|
-
if (!this._imodel.containsClass(RulesetElements.Ruleset.classFullName))
|
|
149
|
+
if (!this._imodel.containsClass(RulesetElements.Ruleset.classFullName)) {
|
|
148
150
|
return [];
|
|
151
|
+
}
|
|
149
152
|
const rulesetList = [];
|
|
150
153
|
this._imodel.withPreparedStatement(`SELECT ECInstanceId AS id FROM ${RulesetElements.Ruleset.classFullName}`, (statement) => {
|
|
151
154
|
while (core_bentley_1.DbResult.BE_SQLITE_ROW === statement.step()) {
|
|
@@ -159,22 +162,25 @@ class RulesetEmbedder {
|
|
|
159
162
|
}
|
|
160
163
|
async getOrCreateRulesetModel(callbacks) {
|
|
161
164
|
const rulesetModel = this.queryRulesetModel();
|
|
162
|
-
if (undefined !== rulesetModel)
|
|
165
|
+
if (undefined !== rulesetModel) {
|
|
163
166
|
return rulesetModel;
|
|
167
|
+
}
|
|
164
168
|
const rulesetSubject = await this.insertSubject(callbacks);
|
|
165
169
|
const definitionPartition = await this.insertDefinitionPartition(rulesetSubject, callbacks);
|
|
166
170
|
return this.insertDefinitionModel(definitionPartition, callbacks);
|
|
167
171
|
}
|
|
168
172
|
queryRulesetModel() {
|
|
169
173
|
const definitionPartition = this.queryDefinitionPartition();
|
|
170
|
-
if (undefined === definitionPartition)
|
|
174
|
+
if (undefined === definitionPartition) {
|
|
171
175
|
return undefined;
|
|
176
|
+
}
|
|
172
177
|
return this._imodel.models.getSubModel(definitionPartition.id);
|
|
173
178
|
}
|
|
174
179
|
queryDefinitionPartition() {
|
|
175
180
|
const subject = this.querySubject();
|
|
176
|
-
if (undefined === subject)
|
|
181
|
+
if (undefined === subject) {
|
|
177
182
|
return undefined;
|
|
183
|
+
}
|
|
178
184
|
return this._imodel.elements.tryGetElement(core_backend_1.DefinitionPartition.createCode(this._imodel, subject.id, this._rulesetModelName));
|
|
179
185
|
}
|
|
180
186
|
querySubject() {
|
|
@@ -229,8 +235,9 @@ class RulesetEmbedder {
|
|
|
229
235
|
return this.insertElement(subjectProps, callbacks);
|
|
230
236
|
}
|
|
231
237
|
async handleElementOperationPrerequisites() {
|
|
232
|
-
if (this._imodel.containsClass(RulesetElements.Ruleset.classFullName))
|
|
238
|
+
if (this._imodel.containsClass(RulesetElements.Ruleset.classFullName)) {
|
|
233
239
|
return;
|
|
240
|
+
}
|
|
234
241
|
// import PresentationRules ECSchema
|
|
235
242
|
await this._imodel.importSchemas([this._schemaPath]);
|
|
236
243
|
// insert CodeSpec for ruleset elements
|
|
@@ -276,8 +283,9 @@ class RulesetEmbedder {
|
|
|
276
283
|
}
|
|
277
284
|
exports.RulesetEmbedder = RulesetEmbedder;
|
|
278
285
|
function normalizeRulesetInsertOptions(options) {
|
|
279
|
-
if (options === undefined)
|
|
286
|
+
if (options === undefined) {
|
|
280
287
|
return { skip: "same-id-and-version-eq", replaceVersions: "exact" };
|
|
288
|
+
}
|
|
281
289
|
return {
|
|
282
290
|
skip: options.skip ?? "same-id-and-version-eq",
|
|
283
291
|
replaceVersions: options.replaceVersions ?? "exact",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RulesetEmbedder.js","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetEmbedder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Core\n */\n\nimport * as path from \"path\";\nimport { gt as versionGt, gte as versionGte, lt as versionLt } from \"semver\";\nimport {\n DefinitionElement, DefinitionModel, DefinitionPartition, ECSqlStatement, Element, Entity, IModelDb, KnownLocations, Model, Subject,\n} from \"@itwin/core-backend\";\nimport { assert, DbResult, Id64String } from \"@itwin/core-bentley\";\nimport {\n BisCodeSpec, Code, CodeScopeSpec, CodeSpec, DefinitionElementProps, ElementProps, InformationPartitionElementProps, ModelProps, QueryBinder,\n QueryRowFormat, SubjectProps,\n} from \"@itwin/core-common\";\nimport { Ruleset } from \"@itwin/presentation-common\";\nimport { PresentationRules } from \"./domain/PresentationRulesDomain\";\nimport * as RulesetElements from \"./domain/RulesetElements\";\nimport { normalizeVersion } from \"./Utils\";\n\n/**\n * Interface for callbacks which will be called before and after Element/Model updates\n * @public\n */\ninterface UpdateCallbacks {\n onBeforeUpdate: (props: Entity) => Promise<void>;\n onAfterUpdate: (props: Entity) => Promise<void>;\n}\n\n/**\n * Interface for callbacks which will be called before and after Element/Model is inserted\n * @public\n */\ninterface InsertCallbacks {\n onBeforeInsert: (props: Entity) => Promise<void>;\n onAfterInsert: (props: Entity) => Promise<void>;\n}\n\n/**\n * Options for [[RulesetEmbedder.insertRuleset]] operation.\n * @public\n */\nexport interface RulesetInsertOptions {\n /**\n * When should insertion be skipped:\n * - `same-id` - if iModel already contains a ruleset with the same id and **any** version\n * - `same-id-and-version-eq` - if iModel already contains a ruleset with same id and version\n * - `same-id-and-version-gte` - if iModel already contains a ruleset with same id and\n * version greater or equal to version of the inserted ruleset.\n *\n * Defaults to `same-id-and-version-eq`.\n */\n skip?: \"never\" | \"same-id\" | \"same-id-and-version-eq\" | \"same-id-and-version-gte\";\n\n /**\n * Which existing versions of rulesets with same id should be replaced when we insert a new one:\n * - `all` - replace all rulesets with same id.\n * - `all-lower` - replace rulesets with same id and version lower than the version of inserted ruleset.\n * - `exact` - replace only the ruleset whose id and version matches the inserted ruleset.\n *\n * Defaults to `exact`.\n */\n replaceVersions?: \"all\" | \"all-lower\" | \"exact\";\n\n /**\n * Callbacks that will be called before and after `Entity` updates\n */\n onEntityUpdate?: UpdateCallbacks;\n\n /**\n * Callbacks that will be called before and after `Entity` is inserted\n */\n onEntityInsert?: InsertCallbacks;\n}\n\n/**\n * Properties for creating a `RulesetEmbedder` instance.\n * @public\n */\nexport interface RulesetEmbedderProps {\n /** iModel to embed rulesets to */\n imodel: IModelDb;\n}\n\n/**\n * An API for embedding presentation rulesets into iModels.\n * @public\n */\nexport class RulesetEmbedder {\n\n private _imodel: IModelDb;\n private readonly _schemaPath = path.join(KnownLocations.nativeAssetsDir, \"ECSchemas/Domain/PresentationRules.ecschema.xml\");\n private readonly _rulesetModelName = \"PresentationRules\";\n private readonly _rulesetSubjectName = \"PresentationRules\";\n\n /**\n * Constructs RulesetEmbedder\n */\n public constructor(props: RulesetEmbedderProps) {\n PresentationRules.registerSchema();\n this._imodel = props.imodel;\n }\n\n /**\n * Inserts a ruleset into iModel.\n * @param ruleset Ruleset to insert.\n * @param options Options for inserting a ruleset.\n * @returns ID of inserted ruleset element or, if insertion was skipped, ID of existing ruleset with the same ID and highest version.\n */\n public async insertRuleset(ruleset: Ruleset, options?: RulesetInsertOptions): Promise<Id64String> {\n const normalizedOptions = normalizeRulesetInsertOptions(options);\n const rulesetVersion = normalizeVersion(ruleset.version);\n\n // ensure imodel has PresentationRules schema and required CodeSpecs\n await this.handleElementOperationPrerequisites();\n\n // find all rulesets with the same ID\n const rulesetsWithSameId: Array<{\n ruleset: Ruleset;\n id: Id64String;\n normalizedVersion: string;\n }> = [];\n const query = `\n SELECT ECInstanceId, JsonProperties\n FROM ${RulesetElements.Ruleset.schema.name}.${RulesetElements.Ruleset.className}\n WHERE json_extract(JsonProperties, '$.jsonProperties.id') = :rulesetId`;\n const reader = this._imodel.createQueryReader(query, QueryBinder.from({ rulesetId: ruleset.id }), { rowFormat: QueryRowFormat.UseJsPropertyNames });\n while (await reader.step()) {\n const row = reader.current.toRow();\n const existingRulesetElementId: Id64String = row.id;\n const existingRuleset: Ruleset = JSON.parse(row.jsonProperties).jsonProperties;\n rulesetsWithSameId.push({\n id: existingRulesetElementId,\n ruleset: existingRuleset,\n normalizedVersion: normalizeVersion(existingRuleset.version),\n });\n }\n\n // check if we need to do anything at all\n const shouldSkip = normalizedOptions.skip === \"same-id\" && rulesetsWithSameId.length > 0\n || normalizedOptions.skip === \"same-id-and-version-eq\" && rulesetsWithSameId.some((entry) => entry.normalizedVersion === rulesetVersion)\n || normalizedOptions.skip === \"same-id-and-version-gte\" && rulesetsWithSameId.some((entry) => versionGte(entry.normalizedVersion, rulesetVersion));\n if (shouldSkip) {\n // we're not inserting anything - return ID of the ruleset element with the highest version\n const rulesetEntryWithHighestVersion = rulesetsWithSameId.reduce((highest, curr) => {\n if (!highest.ruleset.version || curr.ruleset.version && versionGt(curr.ruleset.version, highest.ruleset.version))\n return curr;\n return highest;\n }, rulesetsWithSameId[0]);\n return rulesetEntryWithHighestVersion.id;\n }\n\n // if requested, delete existing rulesets\n const rulesetsToRemove: Id64String[] = [];\n const shouldRemove = (_: Ruleset, normalizedVersion: string): boolean => {\n switch (normalizedOptions.replaceVersions) {\n case \"all\":\n return normalizedVersion !== rulesetVersion;\n case \"all-lower\":\n return normalizedVersion !== rulesetVersion && versionLt(normalizedVersion, rulesetVersion);\n }\n return false;\n };\n rulesetsWithSameId.forEach((entry) => {\n if (shouldRemove(entry.ruleset, entry.normalizedVersion))\n rulesetsToRemove.push(entry.id);\n });\n this._imodel.elements.deleteElement(rulesetsToRemove);\n\n // attempt to update ruleset with same ID and version\n const exactMatch = rulesetsWithSameId.find((curr) => curr.normalizedVersion === rulesetVersion);\n if (exactMatch !== undefined) {\n return this.updateRuleset(exactMatch.id, ruleset, normalizedOptions.onEntityUpdate);\n }\n\n // no exact match found - insert a new ruleset element\n const model = await this.getOrCreateRulesetModel(normalizedOptions.onEntityInsert);\n const rulesetCode = RulesetElements.Ruleset.createRulesetCode(this._imodel, model.id, ruleset);\n return this.insertNewRuleset(ruleset, model, rulesetCode, normalizedOptions.onEntityInsert);\n }\n\n private async updateRuleset(elementId: Id64String, ruleset: Ruleset, callbacks?: UpdateCallbacks) {\n const existingRulesetElement = this._imodel.elements.tryGetElement<DefinitionElement>(elementId);\n assert(existingRulesetElement !== undefined);\n existingRulesetElement.jsonProperties.jsonProperties = ruleset;\n\n await this.updateElement(existingRulesetElement, callbacks);\n\n this._imodel.saveChanges();\n return existingRulesetElement.id;\n }\n\n private async insertNewRuleset(ruleset: Ruleset, model: Model, rulesetCode: Code, callbacks?: InsertCallbacks): Promise<Id64String> {\n const props: DefinitionElementProps = {\n model: model.id,\n code: rulesetCode,\n classFullName: RulesetElements.Ruleset.classFullName,\n jsonProperties: { jsonProperties: ruleset },\n };\n\n const element = await this.insertElement(props, callbacks);\n this._imodel.saveChanges();\n return element.id;\n }\n\n /**\n * Get all rulesets embedded in the iModel.\n */\n public async getRulesets(): Promise<Ruleset[]> {\n if (!this._imodel.containsClass(RulesetElements.Ruleset.classFullName))\n return [];\n\n const rulesetList: Ruleset[] = [];\n this._imodel.withPreparedStatement(`SELECT ECInstanceId AS id FROM ${RulesetElements.Ruleset.classFullName}`, (statement: ECSqlStatement) => {\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const row = statement.getRow();\n const rulesetElement = this._imodel.elements.getElement({ id: row.id });\n const ruleset = rulesetElement.jsonProperties.jsonProperties;\n rulesetList.push(ruleset);\n }\n });\n return rulesetList;\n }\n\n private async getOrCreateRulesetModel(callbacks?: InsertCallbacks): Promise<DefinitionModel> {\n const rulesetModel = this.queryRulesetModel();\n if (undefined !== rulesetModel)\n return rulesetModel;\n\n const rulesetSubject = await this.insertSubject(callbacks);\n const definitionPartition = await this.insertDefinitionPartition(rulesetSubject, callbacks);\n return this.insertDefinitionModel(definitionPartition, callbacks);\n }\n\n private queryRulesetModel(): DefinitionModel | undefined {\n const definitionPartition = this.queryDefinitionPartition();\n if (undefined === definitionPartition)\n return undefined;\n\n return this._imodel.models.getSubModel(definitionPartition.id);\n }\n\n private queryDefinitionPartition(): DefinitionPartition | undefined {\n const subject = this.querySubject();\n if (undefined === subject)\n return undefined;\n\n return this._imodel.elements.tryGetElement<DefinitionPartition>(DefinitionPartition.createCode(this._imodel, subject.id, this._rulesetModelName));\n }\n\n private querySubject(): DefinitionPartition | undefined {\n const root = this._imodel.elements.getRootSubject();\n const codeSpec: CodeSpec = this._imodel.codeSpecs.getByName(BisCodeSpec.subject);\n const code = new Code({\n spec: codeSpec.id,\n scope: root.id,\n value: this._rulesetSubjectName,\n });\n\n return this._imodel.elements.tryGetElement<DefinitionPartition>(code);\n }\n\n private async insertDefinitionModel(definitionPartition: DefinitionPartition, callbacks?: InsertCallbacks): Promise<DefinitionModel> {\n const modelProps: ModelProps = {\n modeledElement: definitionPartition,\n name: this._rulesetModelName,\n classFullName: DefinitionModel.classFullName,\n isPrivate: true,\n };\n\n return this.insertModel(modelProps, callbacks);\n }\n\n private async insertDefinitionPartition(rulesetSubject: Subject, callbacks?: InsertCallbacks): Promise<DefinitionPartition> {\n const partitionCode = DefinitionPartition.createCode(this._imodel, rulesetSubject.id, this._rulesetModelName);\n const definitionPartitionProps: InformationPartitionElementProps = {\n parent: {\n id: rulesetSubject.id,\n relClassName: \"BisCore:SubjectOwnsPartitionElements\",\n },\n model: rulesetSubject.model,\n code: partitionCode,\n classFullName: DefinitionPartition.classFullName,\n };\n\n return this.insertElement(definitionPartitionProps, callbacks);\n }\n\n private async insertSubject(callbacks?: InsertCallbacks): Promise<Subject> {\n const root = this._imodel.elements.getRootSubject();\n const codeSpec: CodeSpec = this._imodel.codeSpecs.getByName(BisCodeSpec.subject);\n const subjectCode = new Code({\n spec: codeSpec.id,\n scope: root.id,\n value: this._rulesetSubjectName,\n });\n const subjectProps: SubjectProps = {\n classFullName: Subject.classFullName,\n model: root.model,\n parent: {\n id: root.id,\n relClassName: \"BisCore:SubjectOwnsSubjects\",\n },\n code: subjectCode,\n };\n\n return this.insertElement(subjectProps, callbacks);\n }\n\n private async handleElementOperationPrerequisites(): Promise<void> {\n if (this._imodel.containsClass(RulesetElements.Ruleset.classFullName))\n return;\n\n // import PresentationRules ECSchema\n await this._imodel.importSchemas([this._schemaPath]);\n\n // insert CodeSpec for ruleset elements\n this._imodel.codeSpecs.insert(CodeSpec.create(this._imodel, PresentationRules.CodeSpec.Ruleset, CodeScopeSpec.Type.Model));\n\n this._imodel.saveChanges();\n }\n\n private async insertElement<TProps extends ElementProps>(props: TProps, callbacks?: InsertCallbacks): Promise<Element> {\n const element = this._imodel.elements.createElement(props);\n // istanbul ignore next\n await callbacks?.onBeforeInsert(element);\n try {\n return this._imodel.elements.getElement(element.insert());\n } finally {\n // istanbul ignore next\n await callbacks?.onAfterInsert(element);\n }\n }\n\n private async insertModel(props: ModelProps, callbacks?: InsertCallbacks): Promise<Model> {\n const model = this._imodel.models.createModel(props);\n // istanbul ignore next\n await callbacks?.onBeforeInsert(model);\n try {\n model.id = model.insert();\n return model;\n } finally {\n // istanbul ignore next\n await callbacks?.onAfterInsert(model);\n }\n }\n\n private async updateElement(element: Element, callbacks?: UpdateCallbacks) {\n // istanbul ignore next\n await callbacks?.onBeforeUpdate(element);\n try {\n element.update();\n } finally {\n // istanbul ignore next\n await callbacks?.onAfterUpdate(element);\n }\n }\n}\n\nfunction normalizeRulesetInsertOptions(options?: RulesetInsertOptions): RulesetInsertOptions {\n if (options === undefined)\n return { skip: \"same-id-and-version-eq\", replaceVersions: \"exact\" };\n\n return {\n skip: options.skip ?? \"same-id-and-version-eq\",\n replaceVersions: options.replaceVersions ?? \"exact\",\n onEntityUpdate: options.onEntityUpdate,\n onEntityInsert: options.onEntityInsert,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RulesetEmbedder.js","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetEmbedder.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,mCAA6E;AAC7E,sDAW6B;AAC7B,sDAAmE;AACnE,oDAY4B;AAE5B,8EAAqE;AACrE,0EAA4D;AAC5D,mCAA2C;AAkE3C;;;GAGG;AACH,MAAa,eAAe;IAM1B;;OAEG;IACH,YAAmB,KAA2B;QAP7B,gBAAW,GAAG,IAAI,CAAC,IAAI,CAAC,6BAAc,CAAC,eAAe,EAAE,iDAAiD,CAAC,CAAC;QAC3G,sBAAiB,GAAG,mBAAmB,CAAC;QACxC,wBAAmB,GAAG,mBAAmB,CAAC;QAMzD,2CAAiB,CAAC,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,aAAa,CAAC,OAAgB,EAAE,OAA8B;QACzE,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,IAAA,wBAAgB,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzD,oEAAoE;QACpE,MAAM,IAAI,CAAC,mCAAmC,EAAE,CAAC;QAEjD,qCAAqC;QACrC,MAAM,kBAAkB,GAInB,EAAE,CAAC;QACR,MAAM,KAAK,GAAG;;aAEL,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,eAAe,CAAC,OAAO,CAAC,SAAS;6EACR,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,yBAAW,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,4BAAc,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACpJ,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,wBAAwB,GAAe,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,eAAe,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;YAC/E,kBAAkB,CAAC,IAAI,CAAC;gBACtB,EAAE,EAAE,wBAAwB;gBAC5B,OAAO,EAAE,eAAe;gBACxB,iBAAiB,EAAE,IAAA,wBAAgB,EAAC,eAAe,CAAC,OAAO,CAAC;aAC7D,CAAC,CAAC;SACJ;QAED,yCAAyC;QACzC,MAAM,UAAU,GACd,CAAC,iBAAiB,CAAC,IAAI,KAAK,SAAS,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;YACvE,CAAC,iBAAiB,CAAC,IAAI,KAAK,wBAAwB,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,KAAK,cAAc,CAAC,CAAC;YACvI,CAAC,iBAAiB,CAAC,IAAI,KAAK,yBAAyB,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,YAAU,EAAC,KAAK,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QACpJ,IAAI,UAAU,EAAE;YACd,2FAA2F;YAC3F,MAAM,8BAA8B,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;gBACjF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAA,WAAS,EAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE;oBAClH,OAAO,IAAI,CAAC;iBACb;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO,8BAA8B,CAAC,EAAE,CAAC;SAC1C;QAED,yCAAyC;QACzC,MAAM,gBAAgB,GAAiB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,CAAC,CAAU,EAAE,iBAAyB,EAAW,EAAE;YACtE,QAAQ,iBAAiB,CAAC,eAAe,EAAE;gBACzC,KAAK,KAAK;oBACR,OAAO,iBAAiB,KAAK,cAAc,CAAC;gBAC9C,KAAK,WAAW;oBACd,OAAO,iBAAiB,KAAK,cAAc,IAAI,IAAA,WAAS,EAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;aAC/F;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QACF,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACnC,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE;gBACxD,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aACjC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAEtD,qDAAqD;QACrD,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,KAAK,cAAc,CAAC,CAAC;QAChG,IAAI,UAAU,KAAK,SAAS,EAAE;YAC5B,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;SACrF;QAED,sDAAsD;QACtD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACnF,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/F,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC9F,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAAqB,EAAE,OAAgB,EAAE,SAA2B;QAC9F,MAAM,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB,SAAS,CAAC,CAAC;QACjG,IAAA,qBAAM,EAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC;QAC7C,sBAAsB,CAAC,cAAc,CAAC,cAAc,GAAG,OAAO,CAAC;QAE/D,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;QAE5D,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3B,OAAO,sBAAsB,CAAC,EAAE,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,OAAgB,EAAE,KAAY,EAAE,WAAiB,EAAE,SAA2B;QAC3G,MAAM,KAAK,GAA2B;YACpC,KAAK,EAAE,KAAK,CAAC,EAAE;YACf,IAAI,EAAE,WAAW;YACjB,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,aAAa;YACpD,cAAc,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE;SAC5C,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,WAAW;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YACtE,OAAO,EAAE,CAAC;SACX;QAED,MAAM,WAAW,GAAc,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,kCAAkC,eAAe,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,SAAyB,EAAE,EAAE;YAC1I,OAAO,uBAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE;gBAClD,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxE,MAAM,OAAO,GAAG,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC;gBAC7D,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC3B;QACH,CAAC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,SAA2B;QAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9C,IAAI,SAAS,KAAK,YAAY,EAAE;YAC9B,OAAO,YAAY,CAAC;SACrB;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAC5F,OAAO,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;IACpE,CAAC;IAEO,iBAAiB;QACvB,MAAM,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC5D,IAAI,SAAS,KAAK,mBAAmB,EAAE;YACrC,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAEO,wBAAwB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACpC,IAAI,SAAS,KAAK,OAAO,EAAE;YACzB,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB,kCAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACpJ,CAAC;IAEO,YAAY;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAa,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAW,CAAC,OAAO,CAAC,CAAC;QACjF,MAAM,IAAI,GAAG,IAAI,kBAAI,CAAC;YACpB,IAAI,EAAE,QAAQ,CAAC,EAAE;YACjB,KAAK,EAAE,IAAI,CAAC,EAAE;YACd,KAAK,EAAE,IAAI,CAAC,mBAAmB;SAChC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB,IAAI,CAAC,CAAC;IACxE,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,mBAAwC,EAAE,SAA2B;QACvG,MAAM,UAAU,GAAe;YAC7B,cAAc,EAAE,mBAAmB;YACnC,IAAI,EAAE,IAAI,CAAC,iBAAiB;YAC5B,aAAa,EAAE,8BAAe,CAAC,aAAa;YAC5C,SAAS,EAAE,IAAI;SAChB,CAAC;QAEF,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,yBAAyB,CAAC,cAAuB,EAAE,SAA2B;QAC1F,MAAM,aAAa,GAAG,kCAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9G,MAAM,wBAAwB,GAAqC;YACjE,MAAM,EAAE;gBACN,EAAE,EAAE,cAAc,CAAC,EAAE;gBACrB,YAAY,EAAE,sCAAsC;aACrD;YACD,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,IAAI,EAAE,aAAa;YACnB,aAAa,EAAE,kCAAmB,CAAC,aAAa;SACjD,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IACjE,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAA2B;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAa,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAW,CAAC,OAAO,CAAC,CAAC;QACjF,MAAM,WAAW,GAAG,IAAI,kBAAI,CAAC;YAC3B,IAAI,EAAE,QAAQ,CAAC,EAAE;YACjB,KAAK,EAAE,IAAI,CAAC,EAAE;YACd,KAAK,EAAE,IAAI,CAAC,mBAAmB;SAChC,CAAC,CAAC;QACH,MAAM,YAAY,GAAiB;YACjC,aAAa,EAAE,sBAAO,CAAC,aAAa;YACpC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE;gBACN,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,YAAY,EAAE,6BAA6B;aAC5C;YACD,IAAI,EAAE,WAAW;SAClB,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,mCAAmC;QAC/C,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YACrE,OAAO;SACR;QAED,oCAAoC;QACpC,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAErD,uCAAuC;QACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,sBAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,2CAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE,2BAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAE3H,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,aAAa,CAA8B,KAAa,EAAE,SAA2B;QACjG,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3D,uBAAuB;QACvB,MAAM,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI;YACF,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;SAC3D;gBAAS;YACR,uBAAuB;YACvB,MAAM,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;SACzC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,KAAiB,EAAE,SAA2B;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrD,uBAAuB;QACvB,MAAM,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI;YACF,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;SACd;gBAAS;YACR,uBAAuB;YACvB,MAAM,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;SACvC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAgB,EAAE,SAA2B;QACvE,uBAAuB;QACvB,MAAM,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI;YACF,OAAO,CAAC,MAAM,EAAE,CAAC;SAClB;gBAAS;YACR,uBAAuB;YACvB,MAAM,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;SACzC;IACH,CAAC;CACF;AApRD,0CAoRC;AAED,SAAS,6BAA6B,CAAC,OAA8B;IACnE,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;KACrE;IAED,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,wBAAwB;QAC9C,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,OAAO;QACnD,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport * as path from \"path\";\r\nimport { gt as versionGt, gte as versionGte, lt as versionLt } from \"semver\";\r\nimport {\r\n DefinitionElement,\r\n DefinitionModel,\r\n DefinitionPartition,\r\n ECSqlStatement,\r\n Element,\r\n Entity,\r\n IModelDb,\r\n KnownLocations,\r\n Model,\r\n Subject,\r\n} from \"@itwin/core-backend\";\r\nimport { assert, DbResult, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BisCodeSpec,\r\n Code,\r\n CodeScopeSpec,\r\n CodeSpec,\r\n DefinitionElementProps,\r\n ElementProps,\r\n InformationPartitionElementProps,\r\n ModelProps,\r\n QueryBinder,\r\n QueryRowFormat,\r\n SubjectProps,\r\n} from \"@itwin/core-common\";\r\nimport { Ruleset } from \"@itwin/presentation-common\";\r\nimport { PresentationRules } from \"./domain/PresentationRulesDomain\";\r\nimport * as RulesetElements from \"./domain/RulesetElements\";\r\nimport { normalizeVersion } from \"./Utils\";\r\n\r\n/**\r\n * Interface for callbacks which will be called before and after Element/Model updates\r\n * @public\r\n */\r\ninterface UpdateCallbacks {\r\n onBeforeUpdate: (props: Entity) => Promise<void>;\r\n onAfterUpdate: (props: Entity) => Promise<void>;\r\n}\r\n\r\n/**\r\n * Interface for callbacks which will be called before and after Element/Model is inserted\r\n * @public\r\n */\r\ninterface InsertCallbacks {\r\n onBeforeInsert: (props: Entity) => Promise<void>;\r\n onAfterInsert: (props: Entity) => Promise<void>;\r\n}\r\n\r\n/**\r\n * Options for [[RulesetEmbedder.insertRuleset]] operation.\r\n * @public\r\n */\r\nexport interface RulesetInsertOptions {\r\n /**\r\n * When should insertion be skipped:\r\n * - `same-id` - if iModel already contains a ruleset with the same id and **any** version\r\n * - `same-id-and-version-eq` - if iModel already contains a ruleset with same id and version\r\n * - `same-id-and-version-gte` - if iModel already contains a ruleset with same id and\r\n * version greater or equal to version of the inserted ruleset.\r\n *\r\n * Defaults to `same-id-and-version-eq`.\r\n */\r\n skip?: \"never\" | \"same-id\" | \"same-id-and-version-eq\" | \"same-id-and-version-gte\";\r\n\r\n /**\r\n * Which existing versions of rulesets with same id should be replaced when we insert a new one:\r\n * - `all` - replace all rulesets with same id.\r\n * - `all-lower` - replace rulesets with same id and version lower than the version of inserted ruleset.\r\n * - `exact` - replace only the ruleset whose id and version matches the inserted ruleset.\r\n *\r\n * Defaults to `exact`.\r\n */\r\n replaceVersions?: \"all\" | \"all-lower\" | \"exact\";\r\n\r\n /**\r\n * Callbacks that will be called before and after `Entity` updates\r\n */\r\n onEntityUpdate?: UpdateCallbacks;\r\n\r\n /**\r\n * Callbacks that will be called before and after `Entity` is inserted\r\n */\r\n onEntityInsert?: InsertCallbacks;\r\n}\r\n\r\n/**\r\n * Properties for creating a `RulesetEmbedder` instance.\r\n * @public\r\n */\r\nexport interface RulesetEmbedderProps {\r\n /** iModel to embed rulesets to */\r\n imodel: IModelDb;\r\n}\r\n\r\n/**\r\n * An API for embedding presentation rulesets into iModels.\r\n * @public\r\n */\r\nexport class RulesetEmbedder {\r\n private _imodel: IModelDb;\r\n private readonly _schemaPath = path.join(KnownLocations.nativeAssetsDir, \"ECSchemas/Domain/PresentationRules.ecschema.xml\");\r\n private readonly _rulesetModelName = \"PresentationRules\";\r\n private readonly _rulesetSubjectName = \"PresentationRules\";\r\n\r\n /**\r\n * Constructs RulesetEmbedder\r\n */\r\n public constructor(props: RulesetEmbedderProps) {\r\n PresentationRules.registerSchema();\r\n this._imodel = props.imodel;\r\n }\r\n\r\n /**\r\n * Inserts a ruleset into iModel.\r\n * @param ruleset Ruleset to insert.\r\n * @param options Options for inserting a ruleset.\r\n * @returns ID of inserted ruleset element or, if insertion was skipped, ID of existing ruleset with the same ID and highest version.\r\n */\r\n public async insertRuleset(ruleset: Ruleset, options?: RulesetInsertOptions): Promise<Id64String> {\r\n const normalizedOptions = normalizeRulesetInsertOptions(options);\r\n const rulesetVersion = normalizeVersion(ruleset.version);\r\n\r\n // ensure imodel has PresentationRules schema and required CodeSpecs\r\n await this.handleElementOperationPrerequisites();\r\n\r\n // find all rulesets with the same ID\r\n const rulesetsWithSameId: Array<{\r\n ruleset: Ruleset;\r\n id: Id64String;\r\n normalizedVersion: string;\r\n }> = [];\r\n const query = `\r\n SELECT ECInstanceId, JsonProperties\r\n FROM ${RulesetElements.Ruleset.schema.name}.${RulesetElements.Ruleset.className}\r\n WHERE json_extract(JsonProperties, '$.jsonProperties.id') = :rulesetId`;\r\n const reader = this._imodel.createQueryReader(query, QueryBinder.from({ rulesetId: ruleset.id }), { rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n while (await reader.step()) {\r\n const row = reader.current.toRow();\r\n const existingRulesetElementId: Id64String = row.id;\r\n const existingRuleset: Ruleset = JSON.parse(row.jsonProperties).jsonProperties;\r\n rulesetsWithSameId.push({\r\n id: existingRulesetElementId,\r\n ruleset: existingRuleset,\r\n normalizedVersion: normalizeVersion(existingRuleset.version),\r\n });\r\n }\r\n\r\n // check if we need to do anything at all\r\n const shouldSkip =\r\n (normalizedOptions.skip === \"same-id\" && rulesetsWithSameId.length > 0) ||\r\n (normalizedOptions.skip === \"same-id-and-version-eq\" && rulesetsWithSameId.some((entry) => entry.normalizedVersion === rulesetVersion)) ||\r\n (normalizedOptions.skip === \"same-id-and-version-gte\" && rulesetsWithSameId.some((entry) => versionGte(entry.normalizedVersion, rulesetVersion)));\r\n if (shouldSkip) {\r\n // we're not inserting anything - return ID of the ruleset element with the highest version\r\n const rulesetEntryWithHighestVersion = rulesetsWithSameId.reduce((highest, curr) => {\r\n if (!highest.ruleset.version || (curr.ruleset.version && versionGt(curr.ruleset.version, highest.ruleset.version))) {\r\n return curr;\r\n }\r\n return highest;\r\n }, rulesetsWithSameId[0]);\r\n return rulesetEntryWithHighestVersion.id;\r\n }\r\n\r\n // if requested, delete existing rulesets\r\n const rulesetsToRemove: Id64String[] = [];\r\n const shouldRemove = (_: Ruleset, normalizedVersion: string): boolean => {\r\n switch (normalizedOptions.replaceVersions) {\r\n case \"all\":\r\n return normalizedVersion !== rulesetVersion;\r\n case \"all-lower\":\r\n return normalizedVersion !== rulesetVersion && versionLt(normalizedVersion, rulesetVersion);\r\n }\r\n return false;\r\n };\r\n rulesetsWithSameId.forEach((entry) => {\r\n if (shouldRemove(entry.ruleset, entry.normalizedVersion)) {\r\n rulesetsToRemove.push(entry.id);\r\n }\r\n });\r\n this._imodel.elements.deleteElement(rulesetsToRemove);\r\n\r\n // attempt to update ruleset with same ID and version\r\n const exactMatch = rulesetsWithSameId.find((curr) => curr.normalizedVersion === rulesetVersion);\r\n if (exactMatch !== undefined) {\r\n return this.updateRuleset(exactMatch.id, ruleset, normalizedOptions.onEntityUpdate);\r\n }\r\n\r\n // no exact match found - insert a new ruleset element\r\n const model = await this.getOrCreateRulesetModel(normalizedOptions.onEntityInsert);\r\n const rulesetCode = RulesetElements.Ruleset.createRulesetCode(this._imodel, model.id, ruleset);\r\n return this.insertNewRuleset(ruleset, model, rulesetCode, normalizedOptions.onEntityInsert);\r\n }\r\n\r\n private async updateRuleset(elementId: Id64String, ruleset: Ruleset, callbacks?: UpdateCallbacks) {\r\n const existingRulesetElement = this._imodel.elements.tryGetElement<DefinitionElement>(elementId);\r\n assert(existingRulesetElement !== undefined);\r\n existingRulesetElement.jsonProperties.jsonProperties = ruleset;\r\n\r\n await this.updateElement(existingRulesetElement, callbacks);\r\n\r\n this._imodel.saveChanges();\r\n return existingRulesetElement.id;\r\n }\r\n\r\n private async insertNewRuleset(ruleset: Ruleset, model: Model, rulesetCode: Code, callbacks?: InsertCallbacks): Promise<Id64String> {\r\n const props: DefinitionElementProps = {\r\n model: model.id,\r\n code: rulesetCode,\r\n classFullName: RulesetElements.Ruleset.classFullName,\r\n jsonProperties: { jsonProperties: ruleset },\r\n };\r\n\r\n const element = await this.insertElement(props, callbacks);\r\n this._imodel.saveChanges();\r\n return element.id;\r\n }\r\n\r\n /**\r\n * Get all rulesets embedded in the iModel.\r\n */\r\n public async getRulesets(): Promise<Ruleset[]> {\r\n if (!this._imodel.containsClass(RulesetElements.Ruleset.classFullName)) {\r\n return [];\r\n }\r\n\r\n const rulesetList: Ruleset[] = [];\r\n this._imodel.withPreparedStatement(`SELECT ECInstanceId AS id FROM ${RulesetElements.Ruleset.classFullName}`, (statement: ECSqlStatement) => {\r\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const row = statement.getRow();\r\n const rulesetElement = this._imodel.elements.getElement({ id: row.id });\r\n const ruleset = rulesetElement.jsonProperties.jsonProperties;\r\n rulesetList.push(ruleset);\r\n }\r\n });\r\n return rulesetList;\r\n }\r\n\r\n private async getOrCreateRulesetModel(callbacks?: InsertCallbacks): Promise<DefinitionModel> {\r\n const rulesetModel = this.queryRulesetModel();\r\n if (undefined !== rulesetModel) {\r\n return rulesetModel;\r\n }\r\n\r\n const rulesetSubject = await this.insertSubject(callbacks);\r\n const definitionPartition = await this.insertDefinitionPartition(rulesetSubject, callbacks);\r\n return this.insertDefinitionModel(definitionPartition, callbacks);\r\n }\r\n\r\n private queryRulesetModel(): DefinitionModel | undefined {\r\n const definitionPartition = this.queryDefinitionPartition();\r\n if (undefined === definitionPartition) {\r\n return undefined;\r\n }\r\n\r\n return this._imodel.models.getSubModel(definitionPartition.id);\r\n }\r\n\r\n private queryDefinitionPartition(): DefinitionPartition | undefined {\r\n const subject = this.querySubject();\r\n if (undefined === subject) {\r\n return undefined;\r\n }\r\n\r\n return this._imodel.elements.tryGetElement<DefinitionPartition>(DefinitionPartition.createCode(this._imodel, subject.id, this._rulesetModelName));\r\n }\r\n\r\n private querySubject(): DefinitionPartition | undefined {\r\n const root = this._imodel.elements.getRootSubject();\r\n const codeSpec: CodeSpec = this._imodel.codeSpecs.getByName(BisCodeSpec.subject);\r\n const code = new Code({\r\n spec: codeSpec.id,\r\n scope: root.id,\r\n value: this._rulesetSubjectName,\r\n });\r\n\r\n return this._imodel.elements.tryGetElement<DefinitionPartition>(code);\r\n }\r\n\r\n private async insertDefinitionModel(definitionPartition: DefinitionPartition, callbacks?: InsertCallbacks): Promise<DefinitionModel> {\r\n const modelProps: ModelProps = {\r\n modeledElement: definitionPartition,\r\n name: this._rulesetModelName,\r\n classFullName: DefinitionModel.classFullName,\r\n isPrivate: true,\r\n };\r\n\r\n return this.insertModel(modelProps, callbacks);\r\n }\r\n\r\n private async insertDefinitionPartition(rulesetSubject: Subject, callbacks?: InsertCallbacks): Promise<DefinitionPartition> {\r\n const partitionCode = DefinitionPartition.createCode(this._imodel, rulesetSubject.id, this._rulesetModelName);\r\n const definitionPartitionProps: InformationPartitionElementProps = {\r\n parent: {\r\n id: rulesetSubject.id,\r\n relClassName: \"BisCore:SubjectOwnsPartitionElements\",\r\n },\r\n model: rulesetSubject.model,\r\n code: partitionCode,\r\n classFullName: DefinitionPartition.classFullName,\r\n };\r\n\r\n return this.insertElement(definitionPartitionProps, callbacks);\r\n }\r\n\r\n private async insertSubject(callbacks?: InsertCallbacks): Promise<Subject> {\r\n const root = this._imodel.elements.getRootSubject();\r\n const codeSpec: CodeSpec = this._imodel.codeSpecs.getByName(BisCodeSpec.subject);\r\n const subjectCode = new Code({\r\n spec: codeSpec.id,\r\n scope: root.id,\r\n value: this._rulesetSubjectName,\r\n });\r\n const subjectProps: SubjectProps = {\r\n classFullName: Subject.classFullName,\r\n model: root.model,\r\n parent: {\r\n id: root.id,\r\n relClassName: \"BisCore:SubjectOwnsSubjects\",\r\n },\r\n code: subjectCode,\r\n };\r\n\r\n return this.insertElement(subjectProps, callbacks);\r\n }\r\n\r\n private async handleElementOperationPrerequisites(): Promise<void> {\r\n if (this._imodel.containsClass(RulesetElements.Ruleset.classFullName)) {\r\n return;\r\n }\r\n\r\n // import PresentationRules ECSchema\r\n await this._imodel.importSchemas([this._schemaPath]);\r\n\r\n // insert CodeSpec for ruleset elements\r\n this._imodel.codeSpecs.insert(CodeSpec.create(this._imodel, PresentationRules.CodeSpec.Ruleset, CodeScopeSpec.Type.Model));\r\n\r\n this._imodel.saveChanges();\r\n }\r\n\r\n private async insertElement<TProps extends ElementProps>(props: TProps, callbacks?: InsertCallbacks): Promise<Element> {\r\n const element = this._imodel.elements.createElement(props);\r\n // istanbul ignore next\r\n await callbacks?.onBeforeInsert(element);\r\n try {\r\n return this._imodel.elements.getElement(element.insert());\r\n } finally {\r\n // istanbul ignore next\r\n await callbacks?.onAfterInsert(element);\r\n }\r\n }\r\n\r\n private async insertModel(props: ModelProps, callbacks?: InsertCallbacks): Promise<Model> {\r\n const model = this._imodel.models.createModel(props);\r\n // istanbul ignore next\r\n await callbacks?.onBeforeInsert(model);\r\n try {\r\n model.id = model.insert();\r\n return model;\r\n } finally {\r\n // istanbul ignore next\r\n await callbacks?.onAfterInsert(model);\r\n }\r\n }\r\n\r\n private async updateElement(element: Element, callbacks?: UpdateCallbacks) {\r\n // istanbul ignore next\r\n await callbacks?.onBeforeUpdate(element);\r\n try {\r\n element.update();\r\n } finally {\r\n // istanbul ignore next\r\n await callbacks?.onAfterUpdate(element);\r\n }\r\n }\r\n}\r\n\r\nfunction normalizeRulesetInsertOptions(options?: RulesetInsertOptions): RulesetInsertOptions {\r\n if (options === undefined) {\r\n return { skip: \"same-id-and-version-eq\", replaceVersions: \"exact\" };\r\n }\r\n\r\n return {\r\n skip: options.skip ?? \"same-id-and-version-eq\",\r\n replaceVersions: options.replaceVersions ?? \"exact\",\r\n onEntityUpdate: options.onEntityUpdate,\r\n onEntityInsert: options.onEntityInsert,\r\n };\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RulesetManager.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAE/C;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAAC;IAEzC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;IAE/D;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,cAAc;
|
|
1
|
+
{"version":3,"file":"RulesetManager.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAE/C;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAAC;IAEzC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;IAE/D;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,mBAAmB,CAAwC;gBAEvD,iBAAiB,EAAE,MAAM,wBAAwB;IAI7D;;OAEG;IACI,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAcrD;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB;IAU/C;;OAEG;IACI,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;IAcrE;;OAEG;IACI,KAAK,IAAI,IAAI;IAKpB,OAAO,CAAC,WAAW;CAKpB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*---------------------------------------------------------------------------------------------
|
|
3
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
-
*--------------------------------------------------------------------------------------------*/
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
/** @packageDocumentation
|
|
7
7
|
* @module Core
|
|
8
8
|
*/
|
|
@@ -23,12 +23,14 @@ class RulesetManagerImpl {
|
|
|
23
23
|
*/
|
|
24
24
|
get(id) {
|
|
25
25
|
const foundRuleset = this._registeredRulesets.get(id);
|
|
26
|
-
if (foundRuleset)
|
|
26
|
+
if (foundRuleset) {
|
|
27
27
|
return foundRuleset;
|
|
28
|
+
}
|
|
28
29
|
const serializedRulesetsArray = this._getNativePlatform().getRulesets(id).result;
|
|
29
30
|
const rulesetsArray = JSON.parse(serializedRulesetsArray);
|
|
30
|
-
if (0 === rulesetsArray.length)
|
|
31
|
+
if (0 === rulesetsArray.length) {
|
|
31
32
|
return undefined;
|
|
33
|
+
}
|
|
32
34
|
return this.saveRuleset(rulesetsArray[0].ruleset, rulesetsArray[0].hash, (ruleset) => this.remove(ruleset));
|
|
33
35
|
}
|
|
34
36
|
/**
|
|
@@ -36,8 +38,9 @@ class RulesetManagerImpl {
|
|
|
36
38
|
*/
|
|
37
39
|
add(ruleset) {
|
|
38
40
|
const foundRuleset = this._registeredRulesets.get(ruleset.id);
|
|
39
|
-
if (foundRuleset)
|
|
41
|
+
if (foundRuleset) {
|
|
40
42
|
return foundRuleset;
|
|
43
|
+
}
|
|
41
44
|
const hash = this._getNativePlatform().addRuleset(JSON.stringify(ruleset)).result;
|
|
42
45
|
return this.saveRuleset(ruleset, hash, (r) => this.remove(r));
|
|
43
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RulesetManager.js","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetManager.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"RulesetManager.js","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetManager.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH,oEAAwE;AA6BxE;;;GAGG;AACH,MAAa,kBAAkB;IAI7B,YAAY,iBAAiD;QAFrD,wBAAmB,GAAG,IAAI,GAAG,EAA6B,CAAC;QAGjE,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;IAC9C,CAAC;IAED;;OAEG;IACI,GAAG,CAAC,EAAU;QACnB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,YAAY,EAAE;YAChB,OAAO,YAAY,CAAC;SACrB;QAED,MAAM,uBAAuB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;QACjF,MAAM,aAAa,GAA0B,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACjF,IAAI,CAAC,KAAK,aAAa,CAAC,MAAM,EAAE;YAC9B,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAA0B,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACjI,CAAC;IAED;;OAEG;IACI,GAAG,CAAC,OAAgB;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,YAAY,EAAE;YAChB,OAAO,YAAY,CAAC;SACrB;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAClF,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,OAA6C;QACzD,IAAI,SAAS,EAAE,iBAAyB,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvB,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SAChC;aAAM;YACL,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;YACvB,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;SAC9C;QAED,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC;IACtF,CAAC;IAED;;OAEG;IACI,KAAK;QACV,IAAI,CAAC,kBAAkB,EAAE,CAAC,aAAa,EAAE,CAAC;QAC1C,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAEO,WAAW,CAAC,OAAgB,EAAE,IAAY,EAAE,WAAiD;QACnG,MAAM,UAAU,GAAG,IAAI,uCAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACxD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AApED,gDAoEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { RegisteredRuleset, Ruleset } from \"@itwin/presentation-common\";\r\nimport { NativePlatformDefinition } from \"./NativePlatform\";\r\n\r\n/**\r\n * Presentation ruleset registry.\r\n * @public\r\n */\r\nexport interface RulesetManager {\r\n /**\r\n * Get a ruleset with the specified id.\r\n */\r\n get(id: string): RegisteredRuleset | undefined;\r\n\r\n /**\r\n * Register the supplied ruleset\r\n */\r\n add(ruleset: Ruleset): RegisteredRuleset;\r\n\r\n /**\r\n * Unregister the supplied ruleset\r\n */\r\n remove(ruleset: RegisteredRuleset | [string, string]): boolean;\r\n\r\n /**\r\n * Remove all rulesets registered in this session.\r\n */\r\n clear(): void;\r\n}\r\n\r\n/**\r\n * Presentation ruleset registry implementation.\r\n * @internal\r\n */\r\nexport class RulesetManagerImpl implements RulesetManager {\r\n private _getNativePlatform: () => NativePlatformDefinition;\r\n private _registeredRulesets = new Map<string, RegisteredRuleset>();\r\n\r\n constructor(getNativePlatform: () => NativePlatformDefinition) {\r\n this._getNativePlatform = getNativePlatform;\r\n }\r\n\r\n /**\r\n * Get a ruleset with the specified id.\r\n */\r\n public get(id: string): RegisteredRuleset | undefined {\r\n const foundRuleset = this._registeredRulesets.get(id);\r\n if (foundRuleset) {\r\n return foundRuleset;\r\n }\r\n\r\n const serializedRulesetsArray = this._getNativePlatform().getRulesets(id).result;\r\n const rulesetsArray: RulesetResponseJson[] = JSON.parse(serializedRulesetsArray);\r\n if (0 === rulesetsArray.length) {\r\n return undefined;\r\n }\r\n return this.saveRuleset(rulesetsArray[0].ruleset, rulesetsArray[0].hash, (ruleset: RegisteredRuleset) => this.remove(ruleset));\r\n }\r\n\r\n /**\r\n * Register the supplied ruleset\r\n */\r\n public add(ruleset: Ruleset): RegisteredRuleset {\r\n const foundRuleset = this._registeredRulesets.get(ruleset.id);\r\n if (foundRuleset) {\r\n return foundRuleset;\r\n }\r\n\r\n const hash = this._getNativePlatform().addRuleset(JSON.stringify(ruleset)).result;\r\n return this.saveRuleset(ruleset, hash, (r: RegisteredRuleset) => this.remove(r));\r\n }\r\n\r\n /**\r\n * Unregister the supplied ruleset\r\n */\r\n public remove(ruleset: RegisteredRuleset | [string, string]): boolean {\r\n let rulesetId, rulesetIdentifier: string;\r\n if (Array.isArray(ruleset)) {\r\n rulesetId = ruleset[0];\r\n rulesetIdentifier = ruleset[1];\r\n } else {\r\n rulesetId = ruleset.id;\r\n rulesetIdentifier = ruleset.uniqueIdentifier;\r\n }\r\n\r\n this._registeredRulesets.delete(rulesetId);\r\n return this._getNativePlatform().removeRuleset(rulesetId, rulesetIdentifier).result;\r\n }\r\n\r\n /**\r\n * Remove all rulesets registered in this session.\r\n */\r\n public clear(): void {\r\n this._getNativePlatform().clearRulesets();\r\n this._registeredRulesets.clear();\r\n }\r\n\r\n private saveRuleset(ruleset: Ruleset, hash: string, disposeFunc: (ruleset: RegisteredRuleset) => void) {\r\n const newRuleset = new RegisteredRuleset(ruleset, hash, disposeFunc);\r\n this._registeredRulesets.set(newRuleset.id, newRuleset);\r\n return newRuleset;\r\n }\r\n}\r\n\r\ninterface RulesetResponseJson {\r\n ruleset: Ruleset;\r\n hash: string;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RulesetVariablesManager.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetVariablesManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,gDAAgD;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC;IACtE,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACnF,qCAAqC;IACrC,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnD;;;OAGG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC;;OAEG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAElD;;;OAGG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhD;;;OAGG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtC;;OAEG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAEnD;;;OAGG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC;IACxC;;OAEG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAErD;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IAC3C;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;CACzD;AAED;;;GAGG;AACH,qBAAa,2BAA4B,YAAW,uBAAuB;IACzE,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,UAAU,CAAS;gBAEf,cAAc,EAAE,MAAM,wBAAwB,EAAE,SAAS,EAAE,MAAM;IAKtE,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAI1F,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,aAAa;IAI7E,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"RulesetVariablesManager.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetVariablesManager.ts"],"names":[],"mappings":"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"}
|