UNPKG

insite-db

Version:

MongoDB for inSite

19 lines (14 loc) 6.57 kB
import{MongoClient as B}from"mongodb";function h(t=1,r=4){let e=" ".repeat(r),o={};Error.captureStackTrace(o,h);let n=o.stack.replace(/^Error\W+/m,"").replaceAll(/^\s+/gm,"").split(` `).slice(t).join(` ${e}`);return`${e}${n}`}function u(){}var g=new WeakMap,m=class t extends Promise{constructor(r,e){let o,n;if(super((i,s)=>{o=i,n=s}),g.set(this,{resolve:o,reject:n}),e?.signal)if(e.signal.aborted)this.reject(new DOMException("Aborted","AbortError"));else{let i=()=>this.reject(new DOMException("Aborted","AbortError"));e.signal.addEventListener("abort",i),this.finally(()=>e.signal?.removeEventListener("abort",i))}if(typeof e?.timeout=="number"&&Number.isFinite(e.timeout)){let i=setTimeout(()=>this.reject(new DOMException("Timeout exceeded","TimeoutError")),e.timeout);this.finally(()=>clearTimeout(i))}r?.(this.resolve,this.reject)}isPending=!0;isFulfilled=!1;isRejected=!1;state="pending";result;resolve=r=>{if(this.isPending){this.isPending=!1,this.isFulfilled=!0,this.state="fulfilled",this.result=r;let e=g.get(this);e&&(e.resolve.call(this,r),g.delete(this))}};reject=r=>{if(this.isPending){this.isPending=!1,this.isRejected=!0,this.state="rejected",this.result=r;let e=g.get(this);e&&(e.reject.call(this,r),g.delete(this))}};static resolved(r){return new t(e=>e(r))}static rejected(r){return new t((e,o)=>o(r))}};function I(t,r=0,e={}){let{leading:o=!1,trailing:n=!0}=e,{maxWait:i=1/0}=e,s,c,y,b,$,x,a,w,k=async()=>{let f=Date.now();f>=y?(s=void 0,y=void 0,clearTimeout(c),c=void 0,typeof a=="function"&&await a(),l.resolve(w),x=o):(clearTimeout(s),s=setTimeout(k,y-f))},C=Number.isFinite(i)?()=>{a===p&&(a=!1),p(),c=setTimeout(C,i)}:null;async function p(){try{return w=await t.apply(b,$),w}catch(f){throw l.reject(f),f}}o&&typeof o=="boolean"&&(o=p),x=o,n&&typeof n=="boolean"&&(n=p),a=n;let l=Object.assign(function(...f){return $=f,b=this,y=Date.now()+r,a=n,l.promise.isPending||(l.promise=new m((T,D)=>{l.resolve=T,l.reject=D,typeof x=="function"&&(x(),x=!1,a===p&&(a=!1)),s||(s=setTimeout(k,r),C&&(c=setTimeout(C,i)))})),l.promise},{callback:t,promise:m.resolved(void 0),resolve:u,reject:u,run:p,clear:async f=>{clearTimeout(s),s=void 0,clearTimeout(c),c=void 0,l.resolve(f?await p():w)}});return l}I.noop=Object.assign(()=>{},{callback:u,promise:m.resolved(void 0),resolve:u,reject:u,run:u,clear:u});function O(t,r,e,o,n=!0){return Array.isArray(t)&&(t=t.length),typeof o!="string"&&(n=o??!0,o=e),(n?`${t}\xA0`:"")+O.raw(t,r,e,o)}O.raw=(t,r,e,o=e)=>{t=Math.abs(t);let n=t%10,i=t%100;return n===1&&i!==11?r:n>=2&&n<=4&&!(i>=12&&i<=15)?e:o};function E(t,r){let e={...t};for(let o of r)delete e[o];return e}import{ObjectId as P}from"mongodb";function Mr(){return new P().toString()}function j(t){let r=[];switch(t.operationType){case"insert":case"replace":r.push("fullDocument:",t.fullDocument);break;case"update":r.push("_id:",t.documentKey._id,` `,"updateDescription:",t.updateDescription);break;case"delete":r.push("_id:",t.documentKey._id);break;default:r.push(t)}console.info("\u{1F33F}\u{1F38F}",`\x1B[1m${this.parent.collectionName}\x1B[0m`,`\x1B[3m${t.operationType}\x1B[0m`,...r)}function v(t){console.error(`\u{1F33F}\u2757\uFE0F MongoDB ${this.parent.collectionName} Change Stream: `,t.stack)}var S=class extends Map{constructor(r){super(),this.db=r}db;#e=new Map;#t=new Map;#r=new Map;async ensure(r,e={}){let{db:o}=this,n=this.get(r)??await this.#e.get(r);if(!n){let{promise:i,resolve:s}=Promise.withResolvers();if(this.#e.set(r,i),(await o.listCollections({name:r},{nameOnly:!0}).toArray()).length?n=o.collection(r):(n=await o.createCollection(r,{...e.schema&&{validator:{$jsonSchema:e.schema}},...e.blockCompressor&&{storageEngine:{wiredTiger:{configString:`block_compressor=${e.blockCompressor}`}}}}),delete e.schema,delete e.blockCompressor),e.watch!==!1){let c=n.watch(void 0,{fullDocument:e.fullDocument===!1?void 0:"updateLookup"});(process.env.NODE_ENV==="development"?e.quiet!==!0:!e.quiet)&&c.on("change",j),c.on("error",v),n.changeStream=c}this.set(r,n),this[r]=n,s(n),this.#e.delete(r)}return e.schema&&(this.#t.has(r)?console.warn(`\u{1F33F}\u26A0\uFE0F Attempt to set schema for the \x1B[1m${r}\x1B[22m collection at ${h()} Which has already been set at ${this.#t.get(r)} Skipping`):(this.#t.set(r,h()),await o.command({collMod:r,validator:{$jsonSchema:e.schema}}))),e.indexes&&(this.#r.has(r)?console.warn(`\u{1F33F}\u26A0\uFE0F Attempt to set indexes for the \x1B[1m${r}\x1B[22m collection at ${h()} Which have already been set at ${this.#r.get(r)} Skipping`):(this.#r.set(r,h()),await n.ensureIndexes(e.indexes))),n}};async function Wr({url:t,name:r,onConnect:e,...o}){/localhost/.test(t)&&(t=t.replace(/localhost/,"127.0.0.1"));let n=new B(t,{maxPoolSize:100,...o});try{await n.connect(),console.info("\u{1F33F} MongoDB Client connected to",t.replace(/(?<=\/\/)[^:]+?:[^@]+@/,"").replace(/[/?][^/]*$/,""))}catch(c){console.error("\u{1F33F}\u2757\uFE0F MongoDB Client connection: ",c)}n.on("close",()=>console.error("\u{1F33F}\u2757\uFE0F MongoDB socket closed")).on("error",c=>console.error("\u{1F33F}\u2757\uFE0F MongoDB:",c)).on("parseError",c=>console.error("\u{1F33F}\u2757\uFE0F MongoDB parse:",c)).on("reconnect",()=>console.info("\u{1F33F} MongoDB reconnected")).on("timeout",()=>console.error("\u{1F33F}\u2757\uFE0F MongoDB timeout"));let i=n.db(r),s=new S(i);return await e?.(s,i),{client:n,db:i,collections:s}}import{isDeepStrictEqual as M}from"node:util";import{Collection as d}from"mongodb";var A=2;d.prototype.ensureIndexes=async function(t,r=!1){if(r){let e=await this.indexes();for(let o=0;o<t.length;o++){let[n,i={}]=t[o];for(let s=0;s<e.length;s++){let c=e[s];if(M(n,c.key)&&M(i,E(c,["v","key","name"]))){t.splice(o--,1),e.splice(s,1);break}}}await Promise.all([...t.map(o=>this.createIndex(...o)),...e.filter(({name:o,v:n})=>o&&o!=="_id_"&&(!n||n<=A)).map(({name:o})=>this.dropIndex(o))])}else await Promise.all(t.map(e=>this.createIndex(...e)))};d.prototype.onChange=function(t){return this.changeStream.on("change",t),this};d.prototype.prependChange=function(t){return this.changeStream.prependListener("change",t),this};d.prototype.onceChange=function(t){return this.changeStream.once("change",t),this};d.prototype.prependOnceChange=function(t){return this.changeStream.prependOnceListener("change",t),this};d.prototype.removeChangeListener=function(t){return this.changeStream.removeListener("change",t),this};export*from"mongodb";export{Wr as connect,Mr as newObjectIdString,j as printChangeStreamChangeDetails,v as printChangeStreamError}; //# sourceMappingURL=index.js.map