fs.js 1.8 KB

1
  1. "use strict";const fs=require("fs"),path=require("path"),{getReader:getReader,splitPath:splitPath}=require("./wxvpkgreader"),internalModuleReadFileSync=fs.readFileSync;fs.readFileSync=function(e,t){const[i,n,s]=splitPath(e);if(!i||!s)return internalModuleReadFileSync.apply(this,arguments);const r=getReader(n);let l=s.replace(/\\/g,"/");l=path.posix.resolve(l);const a=r.getFile(l);let c;return t?"[object String]"===Object.prototype.toString.call(t)&&(c={encoding:t,flag:"r"}):c={encoding:null,flag:"r"},c&&c.encoding?a.toString(c.encoding):a};let nextInode=0;const uid=process.getuid?process.getuid():0,gid=process.getgid?process.getgid():0,fakeTime=Date.now(),internalModuleStatSync=fs.statSync;fs.statSync=function(e){const[t,i,n]=splitPath(e);if(!t)return internalModuleStatSync.apply(this,arguments);if(!n){const e=internalModuleStatSync.apply(this,arguments);return Object.assign(Object.assign({},e),{isFile:()=>!1,isDirectory:()=>!0,wxvpkg:!0})}const s=getReader(i);let r=n.replace(/\\/g,"/");r=path.posix.resolve(r);const l=s.stat(r);return{dev:1,ino:++nextInode,mode:33188,nlink:1,uid:uid,gid:gid,rdev:0,atime:l.atime||fakeTime,birthtime:l.birthtime||fakeTime,mtime:l.mtime||fakeTime,ctime:l.ctime||fakeTime,size:l.size,isFile:()=>l.isFile,isDirectory:()=>!l.isFile,isSymbolicLink:()=>!1,isBlockDevice:()=>!1,isCharacterDevice:()=>!1,isFIFO:()=>!1,isSocket:()=>!1}};const internalModuleExistSync=fs.existsSync;fs.existsSync=function(e){const[t,i,n]=splitPath(e);if(!t||!n)return internalModuleExistSync.apply(this,arguments);const s=getReader(i);let r=n.replace(/\\/g,"/");return r=path.posix.resolve(r),s.exists(r)},module.exports={internalModuleReadFileSync:internalModuleReadFileSync,internalModuleStatSync:internalModuleStatSync,internalModuleExistSync:internalModuleExistSync};