@speckle/shared
Version:
Shared code between various Speckle JS packages
144 lines • 4.95 kB
JavaScript
"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