UNPKG

10.3 kBPlain TextView Raw
1{"code":"function defineName$__(cls,name){\n\tObject.defineProperty(cls,\"name\",{value:name,configurable:true});\n};\nconst $__initor__$ = Symbol.for('#__initor__'), $__inited__$ = Symbol.for('#__inited__'), $__hooks__$ = Symbol.for('#__hooks__'), $states$ = Symbol.for('#states');\n\n/*body*/\nimport {session} from '../storage';\n\nconst map = new WeakMap;\n\nexport class State {\n\t\n\tstatic from(router,raw){\n\t\t\n\t\tif (!(raw)) { return null };\n\t\treturn new this(router,raw);\n\t}\n\t\n\tconstructor(history,object,local = false){\n\t\t\n\t\tmap.set(this,history);\n\t\tthis.path = object.path;\n\t\tthis.data = object.data || {};\n\t\tthis.index = object.index;\n\t\tthis.type = object.type;\n\t\tthis.local = local;\n\t}\n\t\n\tget history(){\n\t\t\n\t\treturn map.get(this);\n\t}\n\t\n\tget next(){\n\t\t\n\t\treturn this.history.at(this.index + 1);\n\t}\n\t\n\tget prev(){\n\t\t\n\t\treturn this.history.at(this.index - 1);\n\t}\n\t\n\ttoJSON(){\n\t\t\n\t\treturn {path: this.path,data: this.data,index: this.index,type: this.type};\n\t}\n\t\n\tsave(){\n\t\t\n\t\tthis.history.cache[this.index] = this;\n\t\treturn this;\n\t}\n\t\n\ttoString(){\n\t\t\n\t\treturn (\"\" + (this.history.id) + \"|\" + this.index);\n\t}\n\tstatic {\n\t\tdefineName$__(this,'State');}\n};\n\nexport class History {\n\t\n\tconstructor(router){\n\t\t\n\t\tthis.router = router;\n\t\tthis.store = session(\"router\");\n\t\tthis[$states$] = [];\n\t\tthis.cache = {};\n\t\tthis.index = -1;\n\t\t\n\t\tlet curr = globalThis.history.state;\n\t\tlet idx;\n\t\tif (typeof curr == 'string') {\n\t\t\t\n\t\t\tlet m = curr.split('|');\n\t\t\tthis.id = parseInt(m[0]);\n\t\t\tthis.index = parseInt(m[1]);\n\t\t\tthis.cache = this.store(this.id);\n\t\t} else {\n\t\t\t\n\t\t\tthis.id = this.store.id = (this.store.id || 0) + 1;\n\t\t\tthis.cache = this.store(this.id);\n\t\t};\n\t\t\n\t\tif (this.index == -1) {\n\t\t\t\n\t\t\t// could break forward navigation for browser as well\n\t\t\tthis.replaceState({initial: true},null,router.path);\n\t\t};\n\t}\n\t\n\tget length(){\n\t\t\n\t\treturn this.cache.length;\n\t}\n\t\n\tget state(){\n\t\t\n\t\treturn this.at(this.index);\n\t}\n\t\n\tget states(){\n\t\t\n\t\tlet l = this.length;\n\t\tlet i = 0;\n\t\twhile (i < l){\n\t\t\t\n\t\t\tthis.at(i++);\n\t\t};\n\t\treturn this[$states$];\n\t}\n\t\n\tget currentStates(){\n\t\t\n\t\treturn this.states.slice(0,this.length);\n\t}\n\t\n\tget next(){\n\t\t\n\t\treturn this.state.next;\n\t}\n\t\n\tget prev(){\n\t\t\n\t\treturn this.state.prev;\n\t}\n\t\n\tslice(a,b = this.length){\n\t\t\n\t\t\n\t\tlet out = [];\n\t\twhile (a < b){\n\t\t\t\n\t\t\tout.push(this.at(a++));\n\t\t};\n\t\treturn out;\n\t}\n\t\n\tat(index){\n\t\t\n\t\tif (index >= this.length) { return };\n\t\treturn this[$states$][index] ||= State.from(this,this.cache[index]);\n\t}\n\t\n\tbuildState(data,url,significant = true){\n\t\t\n\t\tlet state = {\n\t\t\tdata: data,\n\t\t\tindex: this.index + 1,\n\t\t\tpath: url || this.router.path,\n\t\t\ttype: significant ? 'push' : 'replace'\n\t\t};\n\t\treturn new State(this,state,true);\n\t}\n\t\n\tpushState(state,title,url,significant = true){\n\t\t\n\t\t\n\t\tif (!((state instanceof State))) {\n\t\t\t\n\t\t\tstate = this.buildState(state,url,significant);\n\t\t};\n\t\t\n\t\tthis.index = state.index;\n\t\tthis.cache[this.index] = state;\n\t\tthis[$states$][this.index] = state;\n\t\tthis[$states$].length = this.cache.length = Math.max(state.index + 1,0);\n\t\tglobalThis.history[significant ? 'pushState' : 'replaceState'](String(state),title || null,state.path);\n\t\treturn this;\n\t}\n\t\n\treplaceState(state,title,url){\n\t\t\n\t\treturn this.pushState(state,title,url,false);\n\t}\n\tstatic {\n\t\tdefineName$__(this,'History');}\n};\n","map":{"version":3,"file":"history.js","sourceRoot":"","sources":["/Users/abdellah/workspace/scrimba/imba/packages/imba/src/imba/router/history.imba"],"sourcesContent":["import {session} from '../storage'\n\nconst map = new WeakMap\n\nexport class State\n\tstatic def from router, raw\n\t\treturn null unless raw\n\t\tnew self(router,raw)\n\n\tdef constructor history, object, local = no\n\t\tmap.set(self,history)\n\t\tpath = object.path\n\t\tdata = object.data or {}\n\t\tindex = object.index\n\t\ttype = object.type\n\t\tlocal = local\n\n\tget history\n\t\tmap.get(self)\n\n\tget next\n\t\thistory.at(index + 1)\n\n\tget prev\n\t\thistory.at(index - 1)\n\n\tdef toJSON\n\t\treturn {path,data,index,type}\n\n\tdef save\n\t\thistory.cache[index] = self\n\t\tself\n\n\tdef toString\n\t\t\"{history.id}|{index}\"\n\nexport class History\n\tdef constructor router\n\t\trouter = router\n\t\tstore = session(\"router\")\n\t\t#states = []\n\t\tcache = {}\n\t\tindex = -1\n\n\t\tlet curr = global.history.state\n\t\tlet idx\n\t\tif typeof curr == 'string'\n\t\t\tlet m = curr.split('|')\n\t\t\tid = parseInt(m[0])\n\t\t\tindex = parseInt(m[1])\n\t\t\tcache = store(id)\n\t\telse\n\t\t\tid = store.id = (store.id or 0) + 1\n\t\t\tcache = store(id)\n\n\t\tif index == -1\n\t\t\t# could break forward navigation for browser as well\n\t\t\treplaceState({initial: yes},null,router.path)\n\n\tget length\n\t\tcache.length\n\n\tget state\n\t\tat(index)\n\n\tget states\n\t\tlet l = length\n\t\tlet i = 0\n\t\twhile i < l\n\t\t\tat(i++)\n\t\treturn #states\n\n\tget currentStates\n\t\tstates.slice(0,length)\n\n\tget next\n\t\tstate.next\n\n\tget prev\n\t\tstate.prev\n\n\tdef slice a,b = length\n\n\t\tlet out = []\n\t\twhile a < b\n\t\t\tout.push(at(a++))\n\t\treturn out\n\n\tdef at index\n\t\treturn if index >= length\n\t\t#states[index] ||= State.from(self,cache[index])\n\n\tdef buildState data, url, significant = yes\n\t\tlet state = {\n\t\t\tdata: data\n\t\t\tindex: index + 1\n\t\t\tpath: url or router.path\n\t\t\ttype: significant ? 'push' : 'replace'\n\t\t}\n\t\treturn new State(self,state,yes)\n\n\tdef pushState state, title, url, significant = yes\n\n\t\tunless state isa State\n\t\t\tstate = buildState(state,url,significant)\n\n\t\tindex = state.index\n\t\tcache[index] = state\n\t\t#states[index] = state\n\t\t#states.length = cache.length = Math.max(state.index + 1,0)\n\t\tglobal.history[significant ? 'pushState' : 'replaceState'](String(state),title or null,state.path)\t\t\n\t\treturn self\n\n\tdef replaceState state, title, url\n\t\tpushState(state,title,url,no)"],"names":[],"mappings":"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"},"dependencies":[],"meta":{"vite":{"lang":"js"}}}
\No newline at end of file