UNPKG

memdisk

Version:

A library and a CLI to create RAM disk on macOS and Linux.

2 lines (1 loc) 7.61 kB
let e;Object.defineProperty(exports,"__esModule",{value:!0});var t,r,n,o,i,l,s=require("node:fs"),a=require("node:fs/promises"),u=require("node:path"),c=require("tinyexec"),d=require("node:process"),f=require("node:os"),p=require("gensync"),y=require("fs"),m=require("fs/promises"),h=require("path"),w=require("foxts/extract-error-message"),x=require("picocolors"),g=require("foxts/noop");function E(e){return e&&e.__esModule?e:{default:e}}var v=E(u),$=E(p),_=E(y),b=E(m),M=E(h),O=E(x),A={},S={},k={},P={},j=function(){if(l)return i;l=1;let{isexe:e,sync:s}=(o||(o=1,!function(e){var o=A&&A.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);(!o||("get"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=A&&A.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),l=A&&A.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&o(t,e,r);return i(t,e),t},s=A&&A.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||o(t,e,r)};Object.defineProperty(e,"__esModule",{value:!0}),e.sync=e.isexe=e.posix=e.win32=void 0;let a=l(function(){if(t)return S;t=1,Object.defineProperty(S,"__esModule",{value:!0}),S.sync=S.isexe=void 0;let e=_.default,r=b.default;S.isexe=async(e,t={})=>{let{ignoreErrors:o=!1}=t;try{return n(await (0,r.stat)(e),t)}catch(e){if(o||"EACCES"===e.code)return!1;throw e}},S.sync=(t,r={})=>{let{ignoreErrors:o=!1}=r;try{return n((0,e.statSync)(t),r)}catch(e){if(o||"EACCES"===e.code)return!1;throw e}};let n=(e,t)=>e.isFile()&&o(e,t),o=(e,t)=>{let r=t.uid??process.getuid?.(),n=t.groups??process.getgroups?.()??[],o=t.gid??process.getgid?.()??n[0];if(void 0===r||void 0===o)throw Error("cannot get uid or gid");let i=new Set([o,...n]),l=e.mode,s=e.uid,a=e.gid,u=parseInt("100",8),c=parseInt("010",8);return!!(l&parseInt("001",8)||l&c&&i.has(a)||l&u&&s===r||l&(u|c)&&0===r)};return S}());e.posix=a;let u=l(function(){if(r)return k;r=1,Object.defineProperty(k,"__esModule",{value:!0}),k.sync=k.isexe=void 0;let e=_.default,t=b.default;k.isexe=async(e,r={})=>{let{ignoreErrors:o=!1}=r;try{return n(await (0,t.stat)(e),e,r)}catch(e){if(o||"EACCES"===e.code)return!1;throw e}},k.sync=(t,r={})=>{let{ignoreErrors:o=!1}=r;try{return n((0,e.statSync)(t),t,r)}catch(e){if(o||"EACCES"===e.code)return!1;throw e}};let n=(e,t,r)=>e.isFile()&&((e,t)=>{let{pathExt:r=process.env.PATHEXT||""}=t,n=r.split(";");if(-1!==n.indexOf(""))return!0;for(let t=0;t<n.length;t++){let r=n[t].toLowerCase(),o=e.substring(e.length-r.length).toLowerCase();if(r&&o===r)return!0}return!1})(t,r);return k}());e.win32=u,s((n||(n=1,Object.defineProperty(P,"__esModule",{value:!0})),P),e);let c="win32"===(process.env._ISEXE_TEST_PLATFORM_||process.platform)?u:a;e.isexe=c.isexe,e.sync=c.sync}(A)),A),{join:a,delimiter:u,sep:c,posix:d}=M.default,f="win32"===process.platform,p=new RegExp(`[${d.sep}${c===d.sep?"":c}]`.replace(/(\\)/g,"\\$1")),y=RegExp(`^\\.${p.source}`),m=e=>Object.assign(Error(`not found: ${e}`),{code:"ENOENT"}),h=(e,{path:t=process.env.PATH,pathExt:r=process.env.PATHEXT,delimiter:n=u})=>{let o=e.match(p)?[""]:[...f?[process.cwd()]:[],...(t||"").split(n)];if(f){let t=r||[".EXE",".CMD",".BAT",".COM"].join(n),i=t.split(n).flatMap(e=>[e,e.toLowerCase()]);return e.includes(".")&&""!==i[0]&&i.unshift(""),{pathEnv:o,pathExt:i,pathExtExe:t}}return{pathEnv:o,pathExt:[""]}},w=(e,t)=>{let r=/^".*"$/.test(e)?e.slice(1,-1):e;return(!r&&y.test(t)?t.slice(0,2):"")+a(r,t)},x=async(t,r={})=>{let{pathEnv:n,pathExt:o,pathExtExe:i}=h(t,r),l=[];for(let s of n){let n=w(s,t);for(let t of o){let o=n+t;if(await e(o,{pathExt:i,ignoreErrors:!0})){if(!r.all)return o;l.push(o)}}}if(r.all&&l.length)return l;if(r.nothrow)return null;throw m(t)};return i=x,x.sync=(e,t={})=>{let{pathEnv:r,pathExt:n,pathExtExe:o}=h(e,t),i=[];for(let l of r){let r=w(l,e);for(let e of n){let n=r+e;if(s(n,{pathExt:o,ignoreErrors:!0})){if(!t.all)return n;i.push(n)}}}if(t.all&&i.length)return i;if(t.nothrow)return null;throw m(e)},i}(),R=j&&j.__esModule&&Object.prototype.hasOwnProperty.call(j,"default")?j.default:j;const C=$.default({sync:j.sync,async:R}),q=$.default(function*(t){return(void 0===e&&(e=yield*C("sudo",{nothrow:!0})),null===e)?t:e+" "+t}),{yellow:T,red:F,blue:I}=O.default;function H(e=!1){return{warn:e?g.noop:(...e)=>console.warn(T("WARN")+" ",...e),error:e?g.noop:(...e)=>console.error(F("ERROR")+" ",...e),info:e?g.noop:(...e)=>console.info(I("INFO")+" ",...e)}}const L=$.default({sync:c.xSync,async:c.x}),N=$.default({sync:s.mkdirSync,async:a.mkdir}),X=$.default({sync:s.rmSync,async:a.rm}),D="Initializing RAM disk. You may be prompted for credentials",Y="Mouting RAM disk. You may be prompted for credentials",z=e=>`Unmouting RAM disk at ${e}. You may be prompted for credentials`,B=e=>"darwin"===e||"linux"===e,U=Symbol("not supported");function V(e){return{darwin:{create:$.default(function*(t,r,n,o){e.info(D);let i=(yield*L(`hdiutil attach -nomount ram://${n/512}`)).stdout.trim();e.info(Y),yield*L(`diskutil eraseVolume ${o?"HFS+":"APFS"} ${t} ${i}`)}),destroy:$.default(function*(t,r){e.info(z(t));let n=`hdiutil detach ${t}`;r&&(n+=" -force"),yield*L(n)})},linux:{create:$.default(function*(t,r,n,o){e.info(D),yield*L((yield*q(`mkdir -p ${r}`))),e.info(Y),yield*L((yield*q(`mount -t tmpfs -o size=${n} tmpfs ${r}`)))}),destroy:$.default(function*(t,r){e.info(z(t));let n=r?`umount --force ${t}`:`umount ${t}`;yield*L((yield*q(n)))})},[U]:{create:$.default(function*(t,r,n,o){e.warn(`The current platform "${d.platform}" does not support RAM disks. A temporary directory (which may or may not exists in the RAM) is created at "${r}".`),yield*N(r,{recursive:!0})}),destroy:$.default(function*(t,r){let n=`Current platform "${d.platform}" does not support RAM disks, attempted to remove the directory "${t}"`;try{yield*X(t,{recursive:!0,force:!0}),e.warn(`${n} and successed.`)}catch(t){e.warn(`${n} but failed`+w.extractErrorMessage(t))}})}}}function W(e){if(e)throw Error(`Unsupported platform "${d.platform}"`)}const G=$.default(function*(e,{quiet:t=!0,throwOnNotSupportedPlatform:r=!1,force:n=!0}={}){let o=H(t);if(B(d.platform))return void(yield*V(o)[d.platform].destroy(e,n));W(r),yield*V(o)[U].destroy(e,n)}),J=$.default(function*(e,t,{quiet:r=!0,throwOnNotSupportedPlatform:n=!1,darwinUseHFSPlus:o=!1}={}){let i=H(r),l="darwin"===d.platform?`/Volumes/${e}`:`/mnt/${e}`;try{if(B(d.platform)){if(s.existsSync(l))return i.warn(`The path "${l}" already exists, skipping creation`),l;return yield*V(i)[d.platform].create(e,l,t,o),i.info(`RAM disk is avaliable at ${l}`),l}return W(n),l=v.default.join(f.tmpdir(),".mocked-memdisk",e),yield*V(i)[U].create(e,l,t,o),l}catch{let e=`Failed to create RAM disk at ${l}`;throw s.existsSync(l)&&(i.error(`${e}, clean it up`),yield*G(l,{quiet:r,throwOnNotSupportedPlatform:n})),Error(e)}});exports.create={sync:(...e)=>J.sync.apply(null,e),async:(...e)=>J.async.apply(null,e),errback:(...e)=>J.errback.apply(null,e)},exports.createAsync=(...e)=>J.async.apply(null,e),exports.createSync=(...e)=>J.sync.apply(null,e),exports.destroy={sync:(...e)=>G.sync.apply(null,e),async:(...e)=>G.async.apply(null,e),errback:(...e)=>G.errback.apply(null,e)},exports.destroyAsync=(...e)=>G.async.apply(null,e),exports.destroySync=(...e)=>G.sync.apply(null,e),exports.isSupportedPlatform=B;