UNPKG

@itwin/presentation-backend

Version:

Backend of iTwin.js Presentation library

78 lines 2.82 kB
"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /** @packageDocumentation * @module Core */ Object.defineProperty(exports, "__esModule", { value: true }); exports.RulesetManagerImpl = void 0; const presentation_common_1 = require("@itwin/presentation-common"); /** * Presentation ruleset registry implementation. * @internal */ class RulesetManagerImpl { _getNativePlatform; _registeredRulesets = new Map(); constructor(getNativePlatform) { this._getNativePlatform = getNativePlatform; } /** * Get a ruleset with the specified id. */ get(id) { const foundRuleset = this._registeredRulesets.get(id); if (foundRuleset) { return foundRuleset; } const serializedRulesetsArray = this._getNativePlatform().getRulesets(id).result; const rulesetsArray = JSON.parse(serializedRulesetsArray); if (0 === rulesetsArray.length) { return undefined; } return this.saveRuleset(rulesetsArray[0].ruleset, rulesetsArray[0].hash, (ruleset) => this.remove(ruleset)); } /** * Register the supplied ruleset */ add(ruleset) { const foundRuleset = this._registeredRulesets.get(ruleset.id); if (foundRuleset) { return foundRuleset; } const hash = this._getNativePlatform().addRuleset(JSON.stringify(ruleset)).result; return this.saveRuleset(ruleset, hash, (r) => this.remove(r)); } /** * Unregister the supplied ruleset */ remove(ruleset) { let rulesetId, rulesetIdentifier; if (Array.isArray(ruleset)) { rulesetId = ruleset[0]; rulesetIdentifier = ruleset[1]; } else { rulesetId = ruleset.id; rulesetIdentifier = ruleset.uniqueIdentifier; } this._registeredRulesets.delete(rulesetId); return this._getNativePlatform().removeRuleset(rulesetId, rulesetIdentifier).result; } /** * Remove all rulesets registered in this session. */ clear() { this._getNativePlatform().clearRulesets(); this._registeredRulesets.clear(); } saveRuleset(ruleset, hash, disposeFunc) { const newRuleset = new presentation_common_1.RegisteredRuleset(ruleset, hash, disposeFunc); this._registeredRulesets.set(newRuleset.id, newRuleset); return newRuleset; } } exports.RulesetManagerImpl = RulesetManagerImpl; //# sourceMappingURL=RulesetManager.js.map