UNPKG

@altostra/core

Version:

Core library for shared types and logic

1 lines • 5.94 kB
"use strict";var __awaiter=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,o){function a(e){try{l(i.next(e))}catch(e){o(e)}}function s(e){try{l(i.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,s)}l((i=i.apply(e,t||[])).next())}))},__asyncValues=this&&this.__asyncValues||function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e="function"==typeof __values?__values(e):e[Symbol.iterator](),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(r){t[r]=e[r]&&function(t){return new Promise((function(i,n){(function(e,t,r,i){Promise.resolve(i).then((function(t){e({value:t,done:r})}),t)})(i,n,(t=e[r](t)).done,t.value)}))}}},__rest=this&&this.__rest||function(e,t){var r={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(r[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(i=Object.getOwnPropertySymbols(e);n<i.length;n++)t.indexOf(i[n])<0&&Object.prototype.propertyIsEnumerable.call(e,i[n])&&(r[i[n]]=e[i[n]])}return r},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.asPath=exports.pathLiteral=exports.replaceIllegalFileNameCharacters=exports.resolvePathInHomeDir=exports.saveTextFile=exports.saveYamlFile=exports.saveJsonFile=exports.loadJsonFile=exports.getMimeType=exports.deleteIfExists=exports.exists=exports.createTempDir=exports.rmEntireDir=void 0;const fs_1=require("fs"),os_1=require("os"),path_1=require("path"),util_1=require("util"),primitives_1=require("@altostra/type-validations/lib/primitives"),RejectionReasons_1=require("@altostra/type-validations/lib/RejectionReasons"),concat_1=require("@reactivex/ix-es2015-cjs/iterable/concat"),map_1=require("@reactivex/ix-es2015-cjs/iterable/operators/map"),range_1=require("@reactivex/ix-es2015-cjs/iterable/range"),mime_1=require("mime"),rimraf_1=__importDefault(require("rimraf")),NonEmptyString_1=require("../CustomTypes/NonEmptyString"),Errors_1=require("../Errors"),Object_1=require("./Object"),YAML_1=require("./YAML"),{mkdtemp:mkdtemp}=fs_1.promises;function createTempDir(e){return __awaiter(this,void 0,void 0,(function*(){e.endsWith("-")||(e+="-");const t=(0,path_1.join)((0,os_1.tmpdir)(),e);return yield mkdtemp(t)}))}function exists(e){return new Promise(t=>(0,fs_1.access)(e,e=>t(!e)))}function deleteIfExists(e){return new Promise((t,r)=>(0,fs_1.unlink)(e,e=>{if(e&&"ENOENT"!==e.code)return r(e);t()}))}exports.rmEntireDir=(0,util_1.promisify)(rimraf_1.default),exports.createTempDir=createTempDir,exports.exists=exists,exports.deleteIfExists=deleteIfExists;const DEFAULT_MIME_TYPE="application/octet-stream";function getMimeType(e){const t=(0,path_1.extname)(e);if(!t)return DEFAULT_MIME_TYPE;return(0,mime_1.getType)(t)||DEFAULT_MIME_TYPE}function loadJsonFile(e,t=primitives_1.any){var r,i;return __awaiter(this,void 0,void 0,(function*(){const n="string"==typeof e?(0,fs_1.createReadStream)(e,{encoding:"utf8"}):e,o=[];try{for(var a,s=__asyncValues(n);!(a=yield s.next()).done;){const e=a.value;o.push(e)}}catch(e){r={error:e}}finally{try{a&&!a.done&&(i=s.return)&&(yield i.call(s))}finally{if(r)throw r.error}}const l=o.join(""),c=l?JSON.parse(l):void 0,p=(0,RejectionReasons_1.asRejectingValidator)(t),u=(0,RejectionReasons_1.arrayRejectionReasons)();if(!p(c,u))throw Errors_1.AltoError.create("The loaded JSON data is invalid.",{data:{rejections:[...u]}});return c}))}function saveJsonFile(e,t,r={}){var{replacer:i,indent:n="\t"}=r,o=__rest(r,["replacer","indent"]);return __awaiter(this,void 0,void 0,(function*(){const r=JSON.stringify(t,i,n)+os_1.EOL;yield saveTextFile(e,r,o)}))}function saveYamlFile(e,t,r={}){var{replacer:i,indent:n=2}=r,o=__rest(r,["replacer","indent"]);return __awaiter(this,void 0,void 0,(function*(){const r=(0,YAML_1.stringify)(t,i,n)+os_1.EOL;yield saveTextFile(e,r,o)}))}function saveTextFile(e,t,r={}){var{createDir:i}=r,n=__rest(r,["createDir"]);return __awaiter(this,void 0,void 0,(function*(){"string"==typeof e&&i&&(yield fs_1.promises.mkdir((0,path_1.dirname)(e),Object.assign({recursive:!0},"number"==typeof n.mode&&{mode:dirPermsFromFilePerms(n.mode)})));const r="string"!=typeof e?e:(0,fs_1.createWriteStream)(e,Object.assign(Object.assign({encoding:"utf8"},n),{autoClose:!0})),o="string"==typeof e;yield new Promise((e,i)=>{r.write(t,t=>{t?i(t):o?(r.on("error",i).on("close",e),r.end()):e(void 0)})})}))}function dirPermsFromFilePerms(e){const t=56&e,r=7&e;return 192|448&e|(t?8|t:0)|(r?1|r:0)}function resolvePathInHomeDir(e){return(0,path_1.resolve)((0,os_1.homedir)(),e)}exports.getMimeType=getMimeType,exports.loadJsonFile=loadJsonFile,exports.saveJsonFile=saveJsonFile,exports.saveYamlFile=saveYamlFile,exports.saveTextFile=saveTextFile,exports.resolvePathInHomeDir=resolvePathInHomeDir;const illegalFileChars="win32"!==(0,os_1.platform)()?new Set(["\0","/"]):new Set((0,concat_1.concat)((0,range_1.range)(0,32),['"',"*","/",":","<",">","?","\\","|"]).pipe((0,map_1.map)(e=>"string"==typeof e?e:String.fromCharCode(e))));function replaceIllegalFileNameCharacters(e,t="_"){const r=e.replace(/./g,e=>illegalFileChars.has(e)?t:e);return(0,NonEmptyString_1.isNonEmptyString)(r)?r:t}exports.replaceIllegalFileNameCharacters=replaceIllegalFileNameCharacters;const pathLiteralSym=Symbol("path-liters");function pathLiteral(e){return{[pathLiteralSym]:e}}function isPathLiteral(e){return(0,Object_1.isSimpleObject)(e)&&pathLiteralSym in e}function asPath(e,...t){const r=[e[0]];for(let i=0;i<t.length;i++){const n=t[0],o=isPathLiteral(n)?n[pathLiteralSym]:replaceIllegalFileNameCharacters(String(n));r.push(o,e[i+1])}return(0,path_1.normalize)(r.join(""))}exports.pathLiteral=pathLiteral,exports.asPath=asPath;