@altostra/core
Version:
Core library for shared types and logic
1 lines • 2.62 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.ResourceIdsManager=void 0;const AltoError_1=require("../common/Errors/AltoError"),from_1=require("@reactivex/ix-es2015-cjs/iterable/from"),filter_1=require("@reactivex/ix-es2015-cjs/iterable/operators/filter"),map_1=require("@reactivex/ix-es2015-cjs/iterable/operators/map"),scan_1=require("@reactivex/ix-es2015-cjs/iterable/operators/scan"),reduce_1=require("@reactivex/ix-es2015-cjs/iterable/reduce"),Iterable_1=require("../common/Iterable"),ResourceId_1=require("./Resources/ResourceId");class ResourceIdsManager{constructor(e){this._resourceNamesSet=readonlyStringsSet(e),this._highestNameCounter=getHighestNameCounts(this._resourceNamesSet)}getIdFromName(e,r,t){var a;const o=sanitize(e=capitalize(e))||fromTypeName(r),[i,s]=getRawName(o);let n,c=Math.max(s-1,null!==(a=this._highestNameCounter[i])&&void 0!==a?a:0);do{n=i+(++c).toFixed(0).padStart(2,"0")}while(this._resourceNamesSet.has(n));const u=(0,ResourceId_1.resourceId)(n);return t||this.registerName(i,c),u}registerName(e,r){var t;void 0===r&&([e,r]=getRawName(e)),this._highestNameCounter[e]=Math.max(null!==(t=this._highestNameCounter[e])&&void 0!==t?t:0,r)}}function readonlyStringsSet(e){return e instanceof Set?function(e){return{get items(){return[...e]},has:r=>e.has(r),*[Symbol.iterator](){yield*e}}}(e):function(e){return{get items(){return Object.keys(e)},has:r=>Object.prototype.hasOwnProperty.call(e,r),*[Symbol.iterator](){yield*Object.keys(e)}}}(e)}function getHighestNameCounts(e){return(0,reduce_1.reduce)((0,from_1.from)(e).pipe((0,map_1.map)(getRawName)),(e,[r,t])=>{var a;return e[r]=Math.max(t,null!==(a=e[r])&&void 0!==a?a:0),e},{})}exports.ResourceIdsManager=ResourceIdsManager;const rawNameRX=/^([\w\d]*[^\d])(\d*)$/i;function getRawName(e){const r=rawNameRX.exec(e);if(!r)throw AltoError_1.AltoError.create("Invalid resource id: "+e,{data:{resourceId:e}});const[,t,a]=r;return[t,Number(a||0)]}const validRX=/[a-z0-9]/i;function sanitize(e){return(0,Iterable_1.join)((0,from_1.from)(e).pipe((0,filter_1.filter)(e=>validRX.test(e))),"")}function fromTypeName(e){const r=e.split(".");return sanitize(capitalize(r[r.length-1]))}const nonAlphaRX=/[^a-z]/i,upperRX=/[A-Z]/,lowerRX=/[a-z]/;function capitalize(e){return(0,Iterable_1.join)((0,from_1.from)(e).pipe((0,scan_1.scan)(({char:e},r)=>({prevChar:e,char:r}),{char:void 0}),(0,map_1.map)(({prevChar:e,char:t})=>({char:t,isBoundary:r(e,t)})),(0,map_1.map)(({char:e,isBoundary:r})=>r?e.toUpperCase():e.toLowerCase())),"");function r(e,r){return void 0===e||nonAlphaRX.test(e)||lowerRX.test(e)&&upperRX.test(r)}}