UNPKG

41 kBPlain TextView Raw
1{"code":"function defineName$__(cls,name){\n\tObject.defineProperty(cls,\"name\",{value:name,configurable:true});\n};;\nfunction iter$__(a){ let v; return a ? ((v=a.toIterable) ? v.call(a) : a) : a; };;\nfunction inheritClass$__(cls){\n\tObject.getPrototypeOf(cls.prototype).constructor?.inherited?.(cls);\n};;\nfunction extend$__(target,ext){\n\t// @ts-ignore\n\tconst descriptors = Object.getOwnPropertyDescriptors(ext);\n\tdelete descriptors.constructor;\n\tif(target.extend__ instanceof Function){\n\t\ttarget.extend__(descriptors,ext);\n\t} else {\n\t\t// @ts-ignore\n\t\tObject.defineProperties(target,descriptors);\n\t}\n\treturn target;\n};\nconst $__initor__$ = Symbol.for('#__initor__'), $__inited__$ = Symbol.for('#__inited__'), $__hooks__$ = Symbol.for('#__hooks__'), $promise$ = Symbol.for('#promise'), $resolve$ = Symbol.for('#resolve'), $idler$ = Symbol.for('#idler');\nvar $1 = Symbol(), $2 = Symbol(), $3 = Symbol();\n\n/*body*/\nconst nameToTableCache = {};\nexport const epoch = ((2017 - 1970) * 31536000 * 1000);\nexport const base62Chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nexport function now(){\n\treturn Math.round((Date.now() - epoch) / 1000);\n};\n\nimport * as os from './util/os';\n\nimport {STACK} from './stack';\nimport {FLAGS} from './protocol';\n\nimport Haikunator from 'haikunator';\nconst haikunator = new Haikunator;\n\nexport class Generator {\n\t\n\tref(options){\n\t\t\n\t\treturn haikunator.haikunate({tokenLength: 0,...options});\n\t}\n\t\n\ttoken(){\n\t\t\n\t\treturn os.crypto.randomBytes(10).toString('hex');\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Generator');}\n};\n\nexport const random = new Generator;\n\nrandom.ref.sql = 'op.autoname()';\n\nexport function isPlainObject(val){\n\t\n\treturn typeof val == 'object' && val && Object.getPrototypeOf(val) == Object.prototype;\n};\n\nexport function numkeys(val){\n\t\n\treturn Object.values(val).length;\n};\n\nexport function md5(val){\n\t\n\treturn os.crypto.createHash('md5').update(val).digest('hex');\n};\n\nexport class Thenable {\n\t\n\tconstructor(target){\n\t\t\n\t\tthis.target = target;\n\t\tthis.promises = null;\n\t}\n\t\n\tadd(promise){\n\t\t\n\t\tif (!(this.promises)) {\n\t\t\t\n\t\t\tthis.promises = [promise];\n\t\t};\n\t\t\n\t\treturn this.promises.push(promise);\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Thenable');}\n};\n\nfunction hex2min(hex){\n\t\n\tif (typeof hex != 'string') { hex = hex.toString('hex') };\n\tlet i = 0;\n\tlet l = hex.length;\n\tlet out = '';\n\twhile (i < l){\n\t\t\n\t\tlet byte = parseInt(hex.slice(i,i += 2),16);\n\t\t\n\t\tlet rounded = Math.round(byte / (255 / 61));\n\t\t\n\t\tlet chr = base62Chars[rounded];\n\t\tchr = num2min(rounded);\n\t\t\n\t\tconsole.log((\"conv \" + byte + \" -> \" + rounded + \" -> \" + chr));\n\t\tout += chr;\n\t};\n\treturn out;\n};\n\nfunction min2hex(min){\n\t\n\tlet str = '';\n\tfor (let chr of iter$__(min)){\n\t\t\n\t\tlet val = base62Chars.indexOf(chr);\n\t\tval = min2num(chr);\n\t\t\n\t\tstr += Math.round(val * (255 / 61)).toString(16).padStart(2,'0');\n\t};\n\treturn str;\n};\n\n// could be a lazy queue as well?\nexport class Queue extends Set {\n\t\n\tconstructor(target){\n\t\t\n\t\tsuper();\n\t\tthis.target = target || this;\n\t\tthis[$__initor__$]===$1 && (this[$__hooks__$]&&this[$__hooks__$].inited(this),this[$__inited__$] && this[$__inited__$]());\n\t}\n\t\n\t// def emit name, ...params do emit(self,name,params)\n\t// def on name, ...params do listen(self,name,...params)\n\t// def once name, ...params do once(self,name,...params)\n\t// def un name, ...params do unlisten(self,name,...params)\n\t\n\tadd(value){\n\t\tvar self = this;\n\t\t\n\t\tif (value instanceof Function) {\n\t\t\t\n\t\t\tvalue = value();\n\t\t};\n\t\t\n\t\tif (!(this.has(value))) {\n\t\t\t\n\t\t\tvalue.then(function() {\n\t\t\t\t\n\t\t\t\tconsole.log('promise finished');\n\t\t\t\treturn self.delete(value);\n\t\t\t});\n\t\t\tlet first = this.size == 0;\n\t\t\tsuper.add(value);\n\t\t\tif (first) {\n\t\t\t\t\n\t\t\t\tthis[$promise$] = new Promise(function(resolve) {\n\t\t\t\t\t\n\t\t\t\t\tconsole.log('created promise!',self.size);\n\t\t\t\t\treturn self[$resolve$] = resolve;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.target.then = function(ok,err) { return self[$promise$].then(ok,err); };\n\t\t\t};\n\t\t};\n\t\treturn value;\n\t}\n\t\n\tdelete(value){\n\t\t\n\t\tif (super.delete(value)) {\n\t\t\t\n\t\t\tif (this.size == 0) {\n\t\t\t\t\n\t\t\t\tif (this[$resolve$]) {\n\t\t\t\t\t\n\t\t\t\t\tthis.target.then = undefined;\n\t\t\t\t\tthis[$resolve$](this.target);\n\t\t\t\t\tthis[$resolve$] = null;\n\t\t\t\t} else {\n\t\t\t\t\t\n\t\t\t\t\tconsole.log('deleted - not resolved?!');\n\t\t\t\t};\n\t\t\t};\n\t\t\treturn true;\n\t\t};\n\t\treturn false;\n\t}\n\t\n\tget idle(){\n\t\tvar self = this;\n\t\t\n\t\treturn this[$idler$] ||= new Promise(function(resolve) {\n\t\t\t\n\t\t\treturn self[$resolve$] = resolve;\n\t\t});\n\t}\n\tstatic {\n\t\tthis.prototype[$__initor__$] = $1;defineName$__(this,'Queue');inheritClass$__(this);}\n};\n\nglobalThis.Q = Queue;\n\n/*\nShould this allow varying order of the keys?\n*/\n\nexport function compare(a,b,levels = 0,depth = 0,trueΞifΞdeep = true){\n\t\n\tif (a == b) { return true };\n\tif (levels > 0 && depth == levels) { return trueΞifΞdeep };\n\tlet ta = typeof a;\n\tlet tb = typeof b;\n\tif (ta != tb) { return false };\n\t// what if it is a nodelist?\n\tif ((a instanceof Array) && (b instanceof Array)) {\n\t\t\n\t\tif (a.length != b.length) { return false };\n\t\tfor (let i = 0, $4 = iter$__(a), $5 = $4.length; i < $5; i++) {\n\t\t\tlet v = $4[i];\n\t\t\tif (b[i] != v) {\n\t\t\t\t\n\t\t\t\tif (levels == 0 || !(compare(b[i],v,levels,depth + 1,trueΞifΞdeep))) {\n\t\t\t\t\t\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t\treturn true;\n\t};\n\t\n\tif (isPlainObject(a) && isPlainObject(b)) {\n\t\t\n\t\tlet ka = Object.keys(a);\n\t\tlet kb = Object.keys(b);\n\t\tif (ka.length != kb.length) { return false };\n\t\t\n\t\t// Don't require them to be in the same order\n\t\t\n\t\tfor (let i = 0, $6 = iter$__(ka), $7 = $6.length; i < $7; i++) {\n\t\t\tlet k = $6[i];\n\t\t\t\n\t\t\t// return false if kb[i] != k\n\t\t\tif (b[k] != a[k]) { // recurse into shallow\n\t\t\t\t\n\t\t\t\tif (levels == 0 || !(compare(b[k],a[k],levels,depth + 1,trueΞifΞdeep))) {\n\t\t\t\t\t\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t\treturn true;\n\t};\n\t\n\treturn false;\n};\n\nexport function compareShallow(a,b){\n\t\n\treturn compare(a,b,0);\n};\n\nexport function compareDeep(a,b){\n\t\n\treturn compare(a,b,20,0,false);\n};\n\nimport {register,Serializers} from './msgpack';\n\nexport class OPSerialization {\n\t\n\t\n\tconstructor(shape,model = null,flags = 0){\n\t\t\n\t\tObject.defineProperty(this,'_',{enumerable: false,value: flags,writable: true});\n\t\tObject.defineProperty(this,'$shape',{enumerable: false,value: shape});\n\t\tObject.defineProperty(this,'$model',{enumerable: false,value: model});\n\t}\n\t\n\tget $type(){\n\t\t\n\t\treturn OP.typeof(this.id);\n\t}\n\t\n\t$changes(source){\n\t\t\n\t\tlet keys = Object.keys(this);\n\t\tlet flags = ((FLAGS.CLOUD)) | FLAGS.DIFF;\n\t\tlet diff = {};\n\t\tlet fields = [];\n\t\tfor (let [f,v] of iter$__(this)){\n\t\t\t\n\t\t\tlet changed = !(compareShallow(v,source[f]));\n\t\t\tif (changed) {\n\t\t\t\t\n\t\t\t\tdiff[f] = v;\n\t\t\t\tfields.push(f);\n\t\t\t};\n\t\t};\n\t\t\n\t\tif (!(fields.length)) { return null };\n\t\tlet dup = new OPSerialization(this.$shape,this.$model,flags);\n\t\tObject.assign(dup,diff);\n\t\treturn dup;\n\t}\n\t\n\t// TODO Returns a serialization including they keys and values that are different\n\t// from other.\n\t$diff(other = {}){\n\t\t\n\t\tlet keys = Object.keys(this);\n\t\tlet diff = {id: this.$model.id};\n\t\tlet changes = 0;\n\t\t\n\t\tfor (let [f,v] of iter$__(this)){\n\t\t\t\n\t\t\tlet name = f.name || f;\n\t\t\tlet system = name[0] == '_' && name != '_del' && name != '_cloud';// hardcoded until we figure it out\n\t\t\t\n\t\t\tlet dirty = !(system) && !(compareShallow(v,other[name]));\n\t\t\tif (dirty) { changes ++ };\n\t\t\t\n\t\t\tif (system || dirty) {\n\t\t\t\t\n\t\t\t\tdiff[name] = v;\n\t\t\t};\n\t\t};\n\t\t\n\t\tif (!(changes)) { return null };\n\t\tlet dup = new OPSerialization(this.$shape,this.$model);\n\t\t\n\t\tObject.assign(dup,diff);\n\t\treturn dup;\n\t}\n\t\n\ttoString(){\n\t\t\n\t\treturn JSON.stringify(this);\n\t}\n\t\n\t[Symbol.iterator](){\n\t\tvar self = this;\n\t\t\n\t\tlet i = 0;\n\t\tlet keys = Object.keys(this);\n\t\t\n\t\treturn {\n\t\t\tnext: function() {\n\t\t\t\t\n\t\t\t\tif (i >= keys.length) {\n\t\t\t\t\t\n\t\t\t\t\treturn {done: true};\n\t\t\t\t};\n\t\t\t\tlet key = keys[i++];\n\t\t\t\tlet val = [self.$shape && self.$shape[key] || key,self[key]];\n\t\t\t\treturn {done: false,value: val};\n\t\t\t},\n\t\t\t\n\t\t\treturn: function() {\n\t\t\t\t\n\t\t\t\treturn {done: true};\n\t\t\t}\n\t\t};\n\t}\n\tstatic {\n\t\tdefineName$__(this,'OPSerialization');}\n}; globalThis.OPSerialization = OPSerialization;\n\nregister(0,OPSerialization,Serializers.Object);\n\nexport function tsToMs(ts){\n\t\n\tif (ts == 0) { return 0 };\n\treturn ts * 1000 + epoch;\n};\n\nclass ΩNumber {\n\t\n\tget oms(){\n\t\t\n\t\tif (this == 0) { return 0 };\n\t\treturn this * 1000 + epoch;\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Number');}\n};\nextend$__(Number.prototype,ΩNumber.prototype);\n;\n\nclass ΩDate {\n\t\n\tget optime(){\n\t\t\n\t\treturn Math.round((Number(this) - epoch) / 1000);\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Date');}\n};\nextend$__(Date.prototype,ΩDate.prototype);\n;\n\nclass ΩArray {\n\t\n\t\n\t[Symbol.match](item){\n\t\t\n\t\tif (!(this.length)) { return true };\n\t\treturn this.some(function(_0) { return _0[Symbol.match](item); });\n\t}\n\t\n\t// extension of filter that allows more flexible filters - not just functions\n\trefine(test){\n\t\t\n\t\tif (test[Symbol.match]) {\n\t\t\t\n\t\t\ttest = test[Symbol.match].bind(test);\n\t\t};\n\t\t\n\t\treturn this.filter(test);\n\t}\n\t\n\tall(){\n\t\t\n\t\treturn this;\n\t}\n\t\n\teq(arr){\n\t\tvar $8;\n\t\t\n\t\tif (this === arr) { return true };\n\t\tif (arr == null) { return false };\n\t\tif (this.length !== arr.length) { return false };\n\t\tif (this.length === 0 && arr.length === 0) { return true };\n\t\t$8 = 0; for (let item of iter$__(this)){\n\t\t\tlet i = $8++;\n\t\t\tif (item !== arr[i]) { return false };\n\t\t};\n\t\treturn true;\n\t}\n\t\n\t// TODO add size, has etc\n\t\n\tget random(){\n\t\t\n\t\treturn this[Math.floor(Math.random() * this.length)];\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Array');}\n};\nextend$__(Array.prototype,ΩArray.prototype);\n;\n\nclass ΩSet {\n\t\n\t\n\trefine(test){\n\t\t\n\t\treturn new Set(Array.from(this).refine(test));\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Set');}\n};\nextend$__(Set.prototype,ΩSet.prototype);\n;\n\nclass OPDate {\n\t\n\t\n\tstatic now(){\n\t\t\n\t\treturn now();\n\t}\n\tstatic {\n\t\tdefineName$__(this,'OPDate');}\n}; globalThis.OPDate = OPDate;\n\nexport function nameToTable(name){\n\t\n\treturn nameToTableCache[name] ??= true && (\n\t\t\n\t\tname = name.replace(/([a-z])([A-Z]+)/g,function(m,a,b) { return (\"\" + a + b.toLowerCase()); }),\n\t\tname = '_' + name.toLowerCase()// + '_' # tables are underscored?\n\t\t// (name + 's').replace(/ss$/,'s').replace(/ys$/,'ies').toLowerCase()\n\t);\n};\n\nexport function promising(cb){\n\t\n\tlet resolver;\n\tlet rejector;\n\tlet promise = new Promise(function(resolve,reject) {\n\t\t\n\t\tresolver = resolve;\n\t\treturn rejector = reject;\n\t});\n\t\n\tpromise.resolve = function(...args) {\n\t\t\n\t\t\n\t\tif ((promise.resolved != true) ? ((promise.resolved = true,true)) : false) {\n\t\t\t\n\t\t\tpromise.resolved = args;\n\t\t\treturn resolver(...args);\n\t\t};\n\t};\n\t\n\tpromise.reject = function(...args) { return rejector(...args); };\n\t// promise.reject = rejector\n\tcb.call(promise,promise.resolve,promise.reject);\n\t\n\treturn promise;\n};\n\nexport function cloneShallow(a){\n\t\n\treturn Object.assign({},a);\n};\n\nexport function tableToName(tbl){\n\t\n\tfor (let $9 = 0, $10 = Object.keys(nameToTableCache), $11 = $10.length, k, v; $9 < $11; $9++){\n\t\tk = $10[$9];v = nameToTableCache[k];\n\t\tif (v == tbl) { return k };\n\t};\n\treturn null;\n};\n\nexport function getDeepDescriptors(object){\n\t\n\tlet result = {};\n\tlet target = object;\n\twhile (target && target != Object.prototype){\n\t\t\n\t\tlet descs = Object.getOwnPropertyDescriptors(target);\n\t\tresult = Object.assign({},descs,result);\n\t\ttarget = Object.getPrototypeOf(target);\n\t};\n\t\n\treturn result;\n};\n\nexport function getDeepDescriptor(object,name){\n\t\n\tlet target = object;\n\twhile (target && target != Object.prototype){\n\t\t\n\t\tlet desc = Object.getOwnPropertyDescriptor(target,name);\n\t\tif (desc) { return desc };\n\t\ttarget = Object.getPrototypeOf(target);\n\t};\n\treturn null;\n};\n\nexport class WeakCache extends WeakMap {\n\t\n\tconstructor(fn){\n\t\t\n\t\tsuper();\n\t\tthis.$initor = fn;\n\t\treturn this;\n\t\tthis[$__initor__$]===$2 && (this[$__hooks__$]&&this[$__hooks__$].inited(this),this[$__inited__$] && this[$__inited__$]());\n\t}\n\t\n\tget(key){\n\t\t\n\t\tlet val = super.get(key);\n\t\tif (!(val)) {\n\t\t\t\n\t\t\tthis.set(key,val = this.$initor(key));\n\t\t};\n\t\treturn val;\n\t}\n\tstatic {\n\t\tthis.prototype[$__initor__$] = $2;defineName$__(this,'WeakCache');inheritClass$__(this);}\n};\n\n// @template [K=any]\n// @template [V=(k?:any,map?:this)=>any]\n// @extends {Map<K,ReturnType<V>>}\nexport class MemoMap extends Map {\n\t\n\t\n\t/**\n\t@param {V} fn\n\t*/\n\tconstructor(fn){\n\t\t\n\t\tsuper();\n\t\tthis.generator = fn;\n\t\tthis[$__initor__$]===$3 && (this[$__hooks__$]&&this[$__hooks__$].inited(this),this[$__inited__$] && this[$__inited__$]());\n\t}\n\t\n\tfind(key){\n\t\t\n\t\treturn this.has(key) && this.get(key);\n\t}\n\t\n\t/**\n\t@returns { ReturnType<V> }\n\t*/\n\tget(key){\n\t\t\n\t\tlet val = super.get(key);\n\t\t(val ?? this.set(key,val = this.generator(key,this)));\n\t\treturn val;\n\t}\n\t\n\t// def toIterable\n\t// Array.from(values!)\n\t\n\tstatic {\n\t\tthis.prototype[$__initor__$] = $3;defineName$__(this,'MemoMap');inheritClass$__(this);}\n};\n\nexport class RichSet extends Set {\n\t\n\tfilter(cb){\n\t\t\n\t\treturn new RichSet(Array.from(this).filter(cb));\n\t}\n\tstatic {\n\t\tdefineName$__(this,'RichSet');inheritClass$__(this);}\n};\n\nexport class NamedSet extends Set {\n\t\n\tadd(item,key = item.name){\n\t\t\n\t\tthis[key] = item;\n\t\tsuper.add(item);\n\t\treturn item;\n\t}\n\t\n\tfilter(cb){\n\t\t\n\t\treturn new NamedSet(Array.from(this).filter(cb));\n\t}\n\t\n\tmap(cb){\n\t\t\n\t\treturn Array.from(this).map(cb);\n\t}\n\tstatic {\n\t\tdefineName$__(this,'NamedSet');inheritClass$__(this);}\n};\n\nfunction func(meta,fn){\n\t\n\tObject.assign(fn,meta);\n\treturn fn;\n};\n\nexport const autoname = func({sql: 'op.autoname()'},function() {\n\t\n\treturn true;\n});\n\nexport const randomstr = func({sql: 'op.rndstr()'},function() {\n\t\n\treturn true;\n});\n\nexport function throttled(blk,interval = 100,flush = (10 * 1000)){\n\t\n\tlet fn;\n\tlet timeout;\n\t\n\tlet call = function() {\n\t\t\n\t\tclearTimeout(timeout);\n\t\ttimeout = null;\n\t\tfn.last = null;\n\t\treturn blk();\n\t};\n\t\n\tfn = function(arg) {\n\t\t\n\t\tclearTimeout(timeout);\n\t\tlet delay = fn.delay;\n\t\tif (typeof arg == 'number') {\n\t\t\t\n\t\t\tdelay = fn.delay = arg;\n\t\t\tif (!(timeout)) { return };\n\t\t} else {\n\t\t\t\n\t\t\tlet last = fn.last ??= Date.now();\n\t\t\tlet elapsed = (Date.now() - last);\n\t\t\tdelay = Math.min(delay,flush - elapsed);\n\t\t};\n\t\t\n\t\treturn timeout = setTimeout(call,delay);\n\t};\n\t\n\tfn.delay = interval;\n\tfn.cancel = function() {\n\t\t\n\t\tclearTimeout(timeout);\n\t\treturn fn.last = null;\n\t};\n\treturn fn;\n};\n","map":{"version":3,"file":"utils.js","sourceRoot":"","sources":["/Users/abdellah/workspace/scrimba/op/src/utils.imba"],"sourcesContent":["const nameToTableCache = {}\nexport const epoch = ((2017 - 1970) * 31536000 * 1000)\nexport const base62Chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\nexport def now do Math.round((Date.now! - epoch) / 1000)\n\nimport * as os from './util/os'\n\nimport {STACK} from './stack'\nimport {FLAGS} from './protocol'\n\nimport Haikunator from 'haikunator'\nconst haikunator = new Haikunator\n\nexport class Generator\n\tdef ref options\n\t\thaikunator.haikunate({ tokenLength: 0, ...options })\n\n\tdef token\n\t\tos.crypto.randomBytes(10).toString('hex')\n\nexport const random = new Generator\n\nrandom.ref.sql = 'op.autoname()'\n\nexport def isPlainObject val\n\ttypeof val == 'object' and val and Object.getPrototypeOf(val) == Object.prototype\n\nexport def numkeys val\n\tObject.values(val).length\n\nexport def md5 val\n\treturn os.crypto.createHash('md5').update(val).digest('hex')\n\nexport class Thenable\n\tdef constructor target\n\t\ttarget = target\n\t\tpromises = null\n\n\tdef add promise\n\t\tunless promises\n\t\t\tpromises = [promise]\n\n\t\tpromises.push(promise)\n\ndef hex2min hex\n\thex = hex.toString('hex') unless typeof hex == 'string'\n\tlet i = 0\n\tlet l = hex.length\n\tlet out = ''\n\twhile i < l\n\t\tlet byte = parseInt(hex.slice(i,i+=2),16)\n\n\t\tlet rounded = Math.round(byte / (255 / 61))\n\n\t\tlet chr = base62Chars[rounded]\n\t\tchr = num2min(rounded)\n\n\t\tconsole.log \"conv {byte} -> {rounded} -> {chr}\"\n\t\tout += chr\n\treturn out\n\ndef min2hex min\n\tlet str = ''\n\tfor chr of min\n\t\tlet val = base62Chars.indexOf(chr)\n\t\tval = min2num(chr)\n\n\t\tstr += Math.round(val * (255 / 61)).toString(16).padStart(2,'0')\n\treturn str\n\n# could be a lazy queue as well?\nexport class Queue < Set\n\tconstructor(target)\n\t\tsuper()\n\t\tself.target = target or self\n\n\t# def emit name, ...params do emit(self,name,params)\n\t# def on name, ...params do listen(self,name,...params)\n\t# def once name, ...params do once(self,name,...params)\n\t# def un name, ...params do unlisten(self,name,...params)\n\n\tdef add value\n\t\tif value isa Function\n\t\t\tvalue = value()\n\n\t\tunless has(value)\n\t\t\tvalue.then do\n\t\t\t\tconsole.log 'promise finished'\n\t\t\t\tself.delete(value)\n\t\t\tlet first = size == 0\n\t\t\tsuper(value)\n\t\t\tif first\n\t\t\t\t#promise = new Promise do(resolve)\n\t\t\t\t\tconsole.log 'created promise!',size\n\t\t\t\t\t#resolve = resolve\n\n\t\t\t\ttarget.then = do(ok,err) #promise.then(ok,err)\n\t\treturn value\n\n\tdef delete value\n\t\tif super(value)\n\t\t\tif size == 0\n\t\t\t\tif #resolve\n\t\t\t\t\ttarget.then = undefined\n\t\t\t\t\t#resolve(target)\n\t\t\t\t\t#resolve = null\n\t\t\t\telse\n\t\t\t\t\tconsole.log 'deleted - not resolved?!'\n\t\t\treturn true\n\t\treturn false\n\n\tget idle\n\t\t#idler ||= new Promise do(resolve)\n\t\t\t#resolve = resolve\n\nglobal.Q = Queue\n\n###\nShould this allow varying order of the keys?\n###\nexport def compare a,b,levels = 0,depth = 0,true-if-deep = yes\n\treturn true if a == b\n\treturn true-if-deep if levels > 0 and depth == levels\n\tlet ta = typeof a\n\tlet tb = typeof b\n\treturn false if ta != tb\n\t# what if it is a nodelist?\n\tif a isa Array and b isa Array\n\t\treturn false if a.length != b.length\n\t\tfor v,i in a\n\t\t\tif b[i] != v\n\t\t\t\tif levels == 0 or !compare(b[i],v,levels,depth + 1,true-if-deep)\n\t\t\t\t\treturn false\n\t\treturn true\n\n\tif isPlainObject(a) and isPlainObject(b)\n\t\tlet ka = Object.keys(a)\n\t\tlet kb = Object.keys(b)\n\t\treturn false if ka.length != kb.length\n\n\t\t# Don't require them to be in the same order\n\n\t\tfor k,i in ka\n\t\t\t# return false if kb[i] != k\n\t\t\tif b[k] != a[k] # recurse into shallow\n\t\t\t\tif levels == 0 or !compare(b[k],a[k],levels,depth + 1,true-if-deep)\n\t\t\t\t\treturn false\n\t\treturn true\n\n\treturn false\n\nexport def compareShallow a,b\n\tcompare(a,b,0)\n\nexport def compareDeep a,b\n\tcompare(a,b,20,0,no)\n\nimport {register,Serializers} from './msgpack'\n\nexport global class OPSerialization\n\n\tdeclare $shape\\OPShape\n\tdeclare $model\\any\n\tdeclare id\\string\n\n\tdef constructor shape, model = null, flags = 0\n\t\tObject.defineProperty(self,'_',{enumerable: no, value: flags, writable: yes})\n\t\tObject.defineProperty(self,'$shape',{enumerable: no, value: shape})\n\t\tObject.defineProperty(self,'$model',{enumerable: no, value: model})\n\n\tget $type\n\t\tOP.typeof(id)\n\n\tdef $changes source\n\t\tlet keys = Object.keys(self)\n\t\tlet flags = ($node$ ? FLAGS.CLOUD : FLAGS.WEB) | FLAGS.DIFF\n\t\tlet diff = {}\n\t\tlet fields = []\n\t\tfor [f,v] of self\n\t\t\tlet changed = !compareShallow(v,source[f])\n\t\t\tif changed\n\t\t\t\tdiff[f] = v\n\t\t\t\tfields.push(f)\n\n\t\treturn null unless fields.length\n\t\tlet dup = new OPSerialization($shape,$model,flags)\n\t\tObject.assign(dup,diff)\n\t\treturn dup\n\n\t# TODO Returns a serialization including they keys and values that are different\n\t# from other.\n\tdef $diff other = {}\n\t\tlet keys = Object.keys(self)\n\t\tlet diff = {id: $model.id}\n\t\tlet changes = 0\n\n\t\tfor [f,v] of self\n\t\t\tlet name = f.name or f\n\t\t\tlet system = name[0] == '_' and name != '_del' and name != '_cloud' # hardcoded until we figure it out\n\n\t\t\tlet dirty = !system and !compareShallow(v,other[name])\n\t\t\tchanges++ if dirty\n\n\t\t\tif system or dirty\n\t\t\t\tdiff[name] = v\n\n\t\treturn null unless changes\n\t\tlet dup = new OPSerialization($shape,$model)\n\n\t\tObject.assign(dup,diff)\n\t\treturn dup\n\n\tdef toString\n\t\tJSON.stringify(self)\n\n\tdef [Symbol.iterator]\n\t\tlet i = 0\n\t\tlet keys = Object.keys(self)\n\n\t\treturn {\n\t\t\tnext: do\n\t\t\t\tif i >= keys.length\n\t\t\t\t\treturn {done: true}\n\t\t\t\tlet key = keys[i++]\n\t\t\t\tlet val = [$shape and $shape[key] or key,self[key]]\n\t\t\t\treturn {done: false, value: val}\n\n\t\t\treturn: do\n\t\t\t\treturn {done: true}\n\t\t}\n\nregister(0,OPSerialization,Serializers.Object)\n\nexport def tsToMs ts\n\treturn 0 if ts == 0\n\tts * 1000 + epoch\n\nextend class Number\n\tget oms\n\t\treturn 0 if this == 0\n\t\tthis * 1000 + epoch\n\nextend class Date\n\tget optime\n\t\tMath.round( (Number(self) - epoch) / 1000)\n\nextend class Array\n\n\tdef [Symbol.match] item\n\t\treturn true unless length\n\t\tsome(do $1[Symbol.match](item) )\n\n\t# extension of filter that allows more flexible filters - not just functions\n\tdef refine test\n\t\tif test[Symbol.match]\n\t\t\ttest = test[Symbol.match].bind(test)\n\n\t\tfilter(test)\n\n\tdef all\n\t\tself\n\n\tdef eq arr\n\t\treturn yes if self is arr\n\t\treturn no if arr == null\n\t\treturn no if self.length isnt arr.length\n\t\treturn yes if self.length is 0 and arr.length is 0\n\t\tfor item, i of self\n\t\t\treturn no if item isnt arr[i]\n\t\tyes\n\n\t# TODO add size, has etc\n\n\tget random\n\t\tself[Math.floor(Math.random! * length)]\n\nextend class Set\n\n\tdef refine test\n\t\tnew Set(Array.from(self).refine(test))\n\nglobal class OPDate\n\n\tstatic def now\n\t\tnow!\n\nexport def nameToTable name\n\tnameToTableCache[name] ??= if true\n\t\tname = name.replace(/([a-z])([A-Z]+)/g) do(m,a,b) `{a}{b.toLowerCase!}`\n\t\tname = '_' + name.toLowerCase! # + '_' # tables are underscored?\n\t\t# (name + 's').replace(/ss$/,'s').replace(/ys$/,'ies').toLowerCase()\n\nexport def promising cb\n\tlet resolver\n\tlet rejector\n\tlet promise = new Promise do(resolve,reject)\n\t\tresolver = resolve\n\t\trejector = reject\n\n\tpromise.resolve = do(...args)\n\n\t\tif promise.resolved =? yes\n\t\t\tpromise.resolved = args\n\t\t\tresolver(...args)\n\n\tpromise.reject = do(...args) rejector(...args)\n\t# promise.reject = rejector\n\tcb.call(promise,promise.resolve,promise.reject)\n\n\treturn promise\n\nexport def cloneShallow a\n\treturn Object.assign({},a)\n\nexport def tableToName tbl\n\tfor own k,v of nameToTableCache\n\t\treturn k if v == tbl\n\treturn null\n\nexport def getDeepDescriptors object\n\tlet result = {}\n\tlet target = object\n\twhile target and target != Object.prototype\n\t\tlet descs = Object.getOwnPropertyDescriptors(target)\n\t\tresult = Object.assign({},descs,result)\n\t\ttarget = Object.getPrototypeOf(target)\n\n\treturn result\n\nexport def getDeepDescriptor object, name\n\tlet target = object\n\twhile target and target != Object.prototype\n\t\tlet desc = Object.getOwnPropertyDescriptor(target,name)\n\t\treturn desc if desc\n\t\ttarget = Object.getPrototypeOf(target)\n\treturn null\n\nexport class WeakCache < WeakMap\n\tdef constructor fn\n\t\tsuper()\n\t\t$initor = fn\n\t\treturn self\n\n\tdef get key\n\t\tlet val = super(key)\n\t\tunless val\n\t\t\tself.set(key,val = $initor(key))\n\t\treturn val\n\n# @template [K=any]\n# @template [V=(k?:any,map?:this)=>any]\n# @extends {Map<K,ReturnType<V>>}\nexport class MemoMap < Map\n\n\tdef constructor fn\\V\n\t\tsuper()\n\t\tgenerator = fn\n\n\tdef find key\n\t\thas(key) and get(key)\n\n\tdef get\\ReturnType<V> key\n\t\tlet val = super(key)\n\t\tval ?? set(key,val = generator(key,self))\n\t\treturn val\n\n\t# def toIterable\n\t#\tArray.from(values!)\n\nexport class RichSet < Set\n\tdef filter cb\n\t\tnew RichSet(Array.from(self).filter(cb))\n\nexport class NamedSet < Set\n\tdef add item, key = item.name\n\t\tself[key] = item\n\t\tsuper(item)\n\t\treturn item\n\n\tdef filter cb\n\t\tnew NamedSet(Array.from(self).filter(cb))\n\n\tdef map cb\n\t\tArray.from(self).map(cb)\n\ndef func meta, fn\n\tObject.assign(fn,meta)\n\treturn fn\n\nexport const autoname = func(sql: 'op.autoname()') do\n\tyes\n\nexport const randomstr = func(sql: 'op.rndstr()') do\n\tyes\n\nexport def throttled blk, interval = 100ms, flush = 10s\n\tlet fn\n\tlet timeout\n\n\tlet call = do\n\t\tclearTimeout(timeout)\n\t\ttimeout = null\n\t\tfn.last = null\n\t\tblk()\n\n\tfn = do(arg)\n\t\tclearTimeout(timeout)\n\t\tlet delay = fn.delay\n\t\tif typeof arg == 'number'\n\t\t\tdelay = fn.delay = arg\n\t\t\treturn unless timeout\n\t\telse\n\t\t\tlet last = fn.last ??= Date.now!\n\t\t\tlet elapsed = (Date.now! - last)\n\t\t\tdelay = Math.min(delay, flush - elapsed)\n\n\t\ttimeout = setTimeout(call,delay)\n\n\tfn.delay = interval\n\tfn.cancel = do\n\t\tclearTimeout(timeout)\n\t\tfn.last = null\n\treturn fn\n"],"names":[],"mappings":"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"},"dependencies":[],"meta":{"vite":{"lang":"js"}}}
\No newline at end of file