44 lines
62 KiB
JavaScript
44 lines
62 KiB
JavaScript
(function(){let e=9223372036854775807n,t=-9223372036854775808n;var n=class extends Error{constructor(e,t){super(e),this.code=t}};function r(r){let a={},o=r._getSqliteFree(),s=r._malloc(8),c=[s,s+4];function l(e){if(typeof e!=`string`)return 0;let t=r.lengthBytesUTF8(e),n=r._sqlite3_malloc(t+1);return r.stringToUTF8(e,n,t+1),n}function u(e,t){return BigInt(t)<<32n|BigInt(e)&4294967295n}let d=(function(){let e=BigInt(2**53-1)>>32n,t=BigInt(-(2**53-1))>>32n;return function(n,r){return r>e||r<t?u(n,r):r*4294967296+(n&2147483647)-(n&2147483648)}})(),f=new Set;function p(e){if(!f.has(e))throw new n(`not a database`,21)}let m=new Map;function h(e){if(!m.has(e))throw new n(`not a statement`,21)}a.bind_collection=function(e,t){h(e);let n=Array.isArray(t),r=a.bind_parameter_count(e);for(let i=1;i<=r;++i){let r=t[n?i-1:a.bind_parameter_name(e,i)];r!==void 0&&a.bind(e,i,r)}return 0},a.bind=function(e,t,n){switch(h(e),typeof n){case`number`:return n===(n|0)?a.bind_int(e,t,n):a.bind_double(e,t,n);case`string`:return a.bind_text(e,t,n);default:return n instanceof Uint8Array||Array.isArray(n)?a.bind_blob(e,t,n):n===null?a.bind_null(e,t):typeof n==`bigint`?a.bind_int64(e,t,n):n===void 0?27:(console.warn(`unknown binding converted to null`,n),a.bind_null(e,t))}},a.bind_blob=(function(){let e=`sqlite3_bind_blob`,t=r.cwrap(e,...i(`nnnnn:n`));return function(n,i,a){h(n);let s=a.byteLength??a.length,c=r._sqlite3_malloc(s);return r.HEAPU8.subarray(c).set(a),v(e,t(n,i,c,s,o),m.get(n))}})(),a.bind_parameter_count=(function(){let e=r.cwrap(`sqlite3_bind_parameter_count`,...i(`n:n`));return function(t){return h(t),e(t)}})(),a.bind_double=(function(){let e=`sqlite3_bind_double`,t=r.cwrap(e,...i(`nnn:n`));return function(n,r,i){return h(n),v(e,t(n,r,i),m.get(n))}})(),a.bind_int=(function(){let e=`sqlite3_bind_int`,t=r.cwrap(e,...i(`nnn:n`));return function(n,r,i){return h(n),i>2147483647||i<-2147483648?25:v(e,t(n,r,i),m.get(n))}})(),a.bind_int64=(function(){let n=`sqlite3_bind_int64`,a=r.cwrap(n,...i(`nnnn:n`));return function(r,i,o){if(h(r),o>e||o<t)return 25;let s=o&4294967295n,c=o>>32n;return v(n,a(r,i,Number(s),Number(c)),m.get(r))}})(),a.bind_null=(function(){let e=`sqlite3_bind_null`,t=r.cwrap(e,...i(`nn:n`));return function(n,r){return h(n),v(e,t(n,r),m.get(n))}})(),a.bind_parameter_name=(function(){let e=r.cwrap(`sqlite3_bind_parameter_name`,...i(`n:s`));return function(t,n){return h(t),e(t,n)}})(),a.bind_text=(function(){let e=`sqlite3_bind_text`,t=r.cwrap(e,...i(`nnnnn:n`));return function(n,r,i){return h(n),v(e,t(n,r,l(i),-1,o),m.get(n))}})(),a.changes=(function(){let e=r.cwrap(`sqlite3_changes`,...i(`n:n`));return function(t){return p(t),e(t)}})(),a.close=(function(){let e=`sqlite3_close`,t=r.cwrap(e,...i(`n:n`),{async:!0});return async function(n){p(n);let r=await t(n);return f.delete(n),v(e,r,n)}})(),a.column=function(e,t){h(e);let i=a.column_type(e,t);switch(i){case 4:return a.column_blob(e,t);case 2:return a.column_double(e,t);case 1:return d(a.column_int(e,t),r.getTempRet0());case 5:return null;case 3:return a.column_text(e,t);default:throw new n(`unknown type`,i)}},a.column_blob=(function(){let e=r.cwrap(`sqlite3_column_blob`,...i(`nn:n`));return function(t,n){h(t);let i=a.column_bytes(t,n),o=e(t,n);return r.HEAPU8.subarray(o,o+i)}})(),a.column_bytes=(function(){let e=r.cwrap(`sqlite3_column_bytes`,...i(`nn:n`));return function(t,n){return h(t),e(t,n)}})(),a.column_count=(function(){let e=r.cwrap(`sqlite3_column_count`,...i(`n:n`));return function(t){return h(t),e(t)}})(),a.column_double=(function(){let e=r.cwrap(`sqlite3_column_double`,...i(`nn:n`));return function(t,n){return h(t),e(t,n)}})(),a.column_int=(function(){let e=r.cwrap(`sqlite3_column_int64`,...i(`nn:n`));return function(t,n){return h(t),e(t,n)}})(),a.column_int64=(function(){let e=r.cwrap(`sqlite3_column_int64`,...i(`nn:n`));return function(t,n){return h(t),u(e(t,n),r.getTempRet0())}})(),a.column_name=(function(){let e=r.cwrap(`sqlite3_column_name`,...i(`nn:s`));return function(t,n){return h(t),e(t,n)}})(),a.column_names=function(e){let t=[],n=a.column_count(e);for(
|
|||
|
|
`)):typeof readline==`function`&&(e=readline(),e!==null&&(e+=`
|
||
|
|
`)),!e){var t=null;break a}t=Array(N(e)+1),e=P(e,t,0,t.length),t.length=e,Ee=t}t=Ee.shift()}return t},tc(e,t){t===null||t===10?(f(j(e.Tb,0)),e.Tb=[]):t!=0&&e.Tb.push(t)},kc(e){e.Tb&&0<e.Tb.length&&(f(j(e.Tb,0)),e.Tb=[])},$c(){return{Wc:25856,Yc:5,Vc:191,Xc:35387,Uc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ad(){return 0},bd(){return[24,80]}},je={tc(e,t){t===null||t===10?(p(j(e.Tb,0)),e.Tb=[]):t!=0&&e.Tb.push(t)},kc(e){e.Tb&&0<e.Tb.length&&(p(j(e.Tb,0)),e.Tb=[])}};function Me(e,t){var n=e.Pb?e.Pb.length:0;n>=t||(t=Math.max(t,n*(1048576>n?2:1.125)>>>0),n!=0&&(t=Math.max(t,256)),n=e.Pb,e.Pb=new Uint8Array(t),0<e.Rb&&e.Pb.set(n.subarray(0,e.Rb),0))}var F={Xb:null,Wb(){return F.createNode(null,`/`,16895,0)},createNode(e,t,n,r){if((n&61440)==24576||(n&61440)==4096)throw new R(63);return F.Xb||={dir:{node:{Vb:F.Eb.Vb,Sb:F.Eb.Sb,ec:F.Eb.ec,lc:F.Eb.lc,Dc:F.Eb.Dc,qc:F.Eb.qc,oc:F.Eb.oc,Cc:F.Eb.Cc,pc:F.Eb.pc},stream:{ac:F.Ob.ac}},file:{node:{Vb:F.Eb.Vb,Sb:F.Eb.Sb},stream:{ac:F.Ob.ac,read:F.Ob.read,write:F.Ob.write,wc:F.Ob.wc,mc:F.Ob.mc,nc:F.Ob.nc}},link:{node:{Vb:F.Eb.Vb,Sb:F.Eb.Sb,ic:F.Eb.ic},stream:{}},xc:{node:{Vb:F.Eb.Vb,Sb:F.Eb.Sb},stream:Je}},n=He(e,t,n,r),V(n.mode)?(n.Eb=F.Xb.dir.node,n.Ob=F.Xb.dir.stream,n.Pb={}):(n.mode&61440)==32768?(n.Eb=F.Xb.file.node,n.Ob=F.Xb.file.stream,n.Rb=0,n.Pb=null):(n.mode&61440)==40960?(n.Eb=F.Xb.link.node,n.Ob=F.Xb.link.stream):(n.mode&61440)==8192&&(n.Eb=F.Xb.xc.node,n.Ob=F.Xb.xc.stream),n.timestamp=Date.now(),e&&(e.Pb[t]=n,e.timestamp=n.timestamp),n},Zc(e){return e.Pb?e.Pb.subarray?e.Pb.subarray(0,e.Rb):new Uint8Array(e.Pb):new Uint8Array},Eb:{Vb(e){var t={};return t.Jc=(e.mode&61440)==8192?e.id:1,t.Ac=e.id,t.mode=e.mode,t.Pc=1,t.uid=0,t.Mc=0,t.hc=e.hc,V(e.mode)?t.size=4096:(e.mode&61440)==32768?t.size=e.Rb:(e.mode&61440)==40960?t.size=e.link.length:t.size=0,t.Fc=new Date(e.timestamp),t.Oc=new Date(e.timestamp),t.Ic=new Date(e.timestamp),t.Gc=4096,t.Hc=Math.ceil(t.size/t.Gc),t},Sb(e,t){if(t.mode!==void 0&&(e.mode=t.mode),t.timestamp!==void 0&&(e.timestamp=t.timestamp),t.size!==void 0&&(t=t.size,e.Rb!=t))if(t==0)e.Pb=null,e.Rb=0;else{var n=e.Pb;e.Pb=new Uint8Array(t),n&&e.Pb.set(n.subarray(0,Math.min(t,e.Rb))),e.Rb=t}},ec(){throw Re[44]},lc(e,t,n,r){return F.createNode(e,t,n,r)},Dc(e,t,n){if(V(e.mode)){try{var r=B(t,n)}catch{}if(r)for(var i in r.Pb)throw new R(55)}delete e.parent.Pb[e.name],e.parent.timestamp=Date.now(),e.name=n,t.Pb[n]=e,t.timestamp=e.parent.timestamp,e.parent=t},qc(e,t){delete e.Pb[t],e.timestamp=Date.now()},oc(e,t){var n=B(e,t),r;for(r in n.Pb)throw new R(55);delete e.Pb[t],e.timestamp=Date.now()},Cc(e){var t=[`.`,`..`],n;for(n in e.Pb)e.Pb.hasOwnProperty(n)&&t.push(n);return t},pc(e,t,n){return e=F.createNode(e,t,41471,0),e.link=n,e},ic(e){if((e.mode&61440)!=40960)throw new R(28);return e.link}},Ob:{read(e,t,n,r,i){var a=e.node.Pb;if(i>=e.node.Rb)return 0;if(e=Math.min(e.node.Rb-i,r),8<e&&a.subarray)t.set(a.subarray(i,i+e),n);else for(r=0;r<e;r++)t[n+r]=a[i+r];return e},write(e,t,n,r,i,a){if(t.buffer===y.buffer&&(a=!1),!r)return 0;if(e=e.node,e.timestamp=Date.now(),t.subarray&&(!e.Pb||e.Pb.subarray)){if(a)return e.Pb=t.subarray(n,n+r),e.Rb=r;if(e.Rb===0&&i===0)return e.Pb=t.slice(n,n+r),e.Rb=r;if(i+r<=e.Rb)return e.Pb.set(t.subarray(n,n+r),i),r}if(Me(e,i+r),e.Pb.subarray&&t.subarray)e.Pb.set(t.subarray(n,n+r),i);else for(a=0;a<r;a++)e.Pb[i+a]=t[n+a];return e.Rb=Math.max(e.Rb,i+r),r},ac(e,t,n){if(n===1?t+=e.position:n===2&&(e.node.mode&61440)==32768&&(t+=e.node.Rb),0>t)throw new R(28);return t},wc(e,t,n){Me(e.node,t+n),e.node.Rb=Math.max(e.node.Rb,t+n)},mc(e,t,n,r,i){if((e.node.mode&61440)!=32768)throw new R(43);if(e=e.node.Pb,i&2||e.buffer!==y.buffer){if((0<n||n+t<e.length)&&(e=e.subarray?e.subarray(n,n+t):Array.prototype.slice.call(e,n,n+t)),n=!0,t=65536*Math.ceil(t/65536),(i=An(65536,t))?(b.fill(0,i,i+t),t=i):t=0,!t)throw new R(48);y.set(e,t)}else n=!1,t=e.byteOffset;return{Qc:t,Ec:n}},nc(e,t,n,r){return F.Ob.write(e,t,0,r,n,!1),0}}},Ne=(e,t)=>{var n=0;return e&&(n|=365),t&&(n|=146),n},Pe=null,Fe={},I=[],Ie=1,L=null,Le=!0,R=null,Re=
|
||
|
|
create table if not exists card_set
|
||
|
|
(
|
||
|
|
id INTEGER primary key autoincrement,
|
||
|
|
name TEXT not null,
|
||
|
|
forward TEXT not null,
|
||
|
|
backward TEXT not null,
|
||
|
|
filter TEXT not null
|
||
|
|
);
|
||
|
|
|
||
|
|
create table if not exists settings
|
||
|
|
(
|
||
|
|
id text primary key,
|
||
|
|
value text
|
||
|
|
);
|
||
|
|
|
||
|
|
create table if not exists word_group
|
||
|
|
(
|
||
|
|
id INTEGER primary key autoincrement,
|
||
|
|
name TEXT not null
|
||
|
|
);
|
||
|
|
|
||
|
|
create table if not exists words
|
||
|
|
(
|
||
|
|
id INTEGER primary key autoincrement,
|
||
|
|
key TEXT not null,
|
||
|
|
value TEXT not null,
|
||
|
|
tags TEXT not null,
|
||
|
|
more TEXT,
|
||
|
|
group_id integer default 1 not null
|
||
|
|
constraint words_word_group_id_fk references word_group on update cascade on delete cascade
|
||
|
|
);
|
||
|
|
|
||
|
|
create table if not exists card_stats
|
||
|
|
(
|
||
|
|
id INTEGER primary key autoincrement,
|
||
|
|
word_id INTEGER not null references words on delete cascade,
|
||
|
|
set_id TEXT not null references card_set on delete cascade,
|
||
|
|
score INTEGER default 1 not null,
|
||
|
|
last_opened integer not null
|
||
|
|
);
|
||
|
|
`.split(`;`).map(e=>e.trim()).filter(e=>e.length>0);for(let t of e)await d.exec(f,t+`;`)}self.onmessage=async e=>{let{type:t,id:n,sql:r,params:i}=e.data;try{switch(t){case`init`:await h(),await g(),self.postMessage({type:`result`,id:n,ok:!0,data:null});break;case`execute`:{if(!d||f===null)throw Error(`БД не инициализирована`);let e=await d.execWithParams(f,r,i);self.postMessage({type:`result`,id:n,ok:!0,data:e.rows});break}case`executeVoid`:if(!d||f===null)throw Error(`БД не инициализирована`);await d.run(f,r,i),self.postMessage({type:`result`,id:n,ok:!0,data:null});break;case`closeDb`:d&&f!==null&&(await d.close(f),f=null),p&&=(await p.close(),null),m=!1,self.postMessage({type:`result`,id:n,ok:!0,data:null});break;case`getFile`:{let e=await(await(await(await navigator.storage.getDirectory()).getFileHandle(`japanese_app.db`)).getFile()).arrayBuffer();self.postMessage({type:`result`,id:n,ok:!0,data:e},{transfer:[e]});break}case`replaceFile`:{d&&f!==null&&(await d.close(f),f=null),p&&=(await p.close(),null),m=!1;let e=await(await(await navigator.storage.getDirectory()).getFileHandle(`japanese_app.db`,{create:!0})).createSyncAccessHandle();try{let t=new Uint8Array(i);e.truncate(0),e.write(t,{at:0}),e.flush()}finally{e.close()}await h(),self.postMessage({type:`result`,id:n,ok:!0,data:null});break}default:throw Error(`Неизвестный тип сообщения: ${t}`)}}catch(e){self.postMessage({type:`result`,id:n,ok:!1,error:e.message})}}})();
|