UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

144 lines 4.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isModelFolderResource = exports.isObjectResource = exports.isModelResource = exports.isAllModelsResource = exports.ViewerModelFolderResource = exports.ViewerObjectResource = exports.ViewerVersionResource = exports.ViewerModelResource = exports.ViewerAllModelsResource = exports.ViewerResourceType = void 0; exports.parseUrlParameters = parseUrlParameters; exports.createGetParamFromResources = createGetParamFromResources; exports.resourceBuilder = resourceBuilder; const _lodash_1 = require("#lodash"); var ViewerResourceType; (function (ViewerResourceType) { ViewerResourceType["Model"] = "Model"; ViewerResourceType["Object"] = "Object"; ViewerResourceType["ModelFolder"] = "ModelFolder"; ViewerResourceType["AllModels"] = "all-models"; })(ViewerResourceType || (exports.ViewerResourceType = ViewerResourceType = {})); class ViewerAllModelsResource { type = ViewerResourceType.AllModels; toString() { return 'all'; } } exports.ViewerAllModelsResource = ViewerAllModelsResource; class ViewerModelResource { type; modelId; versionId; constructor(modelId, versionId) { this.type = ViewerResourceType.Model; this.modelId = modelId; this.versionId = versionId; } toString() { return (this.versionId ? `${this.modelId}@${this.versionId}` : this.modelId).toLowerCase(); } } exports.ViewerModelResource = ViewerModelResource; class ViewerVersionResource extends ViewerModelResource { versionId; constructor(modelId, versionId) { super(modelId, versionId); this.versionId = versionId; } toJSON() { return this.toString(); } } exports.ViewerVersionResource = ViewerVersionResource; class ViewerObjectResource { type; objectId; constructor(objectId) { this.type = ViewerResourceType.Object; this.objectId = objectId; } toString() { return this.objectId.toLowerCase(); } } exports.ViewerObjectResource = ViewerObjectResource; class ViewerModelFolderResource { type; folderName; constructor(folderName) { this.type = ViewerResourceType.ModelFolder; this.folderName = folderName; } toString() { return ('$' + this.folderName).toLowerCase(); } } exports.ViewerModelFolderResource = ViewerModelFolderResource; function parseUrlParameters(resourceGetParam) { if (!resourceGetParam?.length) return []; const parts = resourceGetParam.toLowerCase().split(',').sort(); const resources = []; for (const part of parts) { if (part === 'all') { resources.push(new ViewerAllModelsResource()); } else if (part.includes('@')) { const [modelId, versionId] = part.split('@'); resources.push(new ViewerModelResource(modelId, versionId)); } else if (part.startsWith('$')) { resources.push(new ViewerModelFolderResource(part.substring(1))); } else if (part.length === 32) { resources.push(new ViewerObjectResource(part)); } else { resources.push(new ViewerModelResource(part)); } } // Remove duplicates return (0, _lodash_1.uniqBy)(resources, (r) => r.toString()); } function createGetParamFromResources(resources) { const resourceParts = (0, _lodash_1.uniq)(resources.map((r) => r.toString().toLowerCase())).sort(); return resourceParts.join(','); } const isAllModelsResource = (r) => r.type === ViewerResourceType.AllModels; exports.isAllModelsResource = isAllModelsResource; const isModelResource = (r) => r.type === ViewerResourceType.Model; exports.isModelResource = isModelResource; const isObjectResource = (r) => r.type === ViewerResourceType.Object; exports.isObjectResource = isObjectResource; const isModelFolderResource = (r) => r.type === ViewerResourceType.ModelFolder; exports.isModelFolderResource = isModelFolderResource; class ViewerResourceBuilder { #resources = []; addAllModels() { this.#resources.push(new ViewerAllModelsResource()); return this; } addModel(modelId, versionId) { this.#resources.push(new ViewerModelResource(modelId, versionId)); return this; } addModelFolder(folderName) { this.#resources.push(new ViewerModelFolderResource(folderName)); return this; } addObject(objectId) { this.#resources.push(new ViewerObjectResource(objectId)); return this; } toString() { return createGetParamFromResources(this.#resources); } toResources() { return this.#resources.slice(); } clear() { this.#resources = []; return this; } } /** * Fluent API for easier resource building */ function resourceBuilder() { return new ViewerResourceBuilder(); } //# sourceMappingURL=route.js.map