ueberdb2 4.1.26 → 4.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/databases/cassandra_db.js +1 -0
- package/dist/databases/couch_db.js +1 -0
- package/dist/databases/dirty_db.js +1 -0
- package/dist/databases/dirty_git_db.js +1 -0
- package/dist/databases/elasticsearch_db.js +1 -0
- package/dist/databases/memory_db.js +1 -0
- package/dist/databases/mock_db.js +1 -0
- package/dist/databases/mongodb_db.js +1 -0
- package/dist/databases/mssql_db.js +5 -0
- package/dist/databases/mysql_db.js +1 -0
- package/dist/databases/postgres_db.js +1 -0
- package/dist/databases/redis_db.js +1 -0
- package/dist/databases/rethink_db.js +1 -0
- package/dist/databases/sqlite_db.js +4 -0
- package/dist/index.js +1 -0
- package/dist/lib/AbstractDatabase.js +1 -0
- package/package.json +2 -2
- package/dist/databases/cassandra_db.cjs +0 -1
- package/dist/databases/couch_db.cjs +0 -1
- package/dist/databases/dirty_db.cjs +0 -1
- package/dist/databases/dirty_git_db.cjs +0 -1
- package/dist/databases/elasticsearch_db.cjs +0 -1
- package/dist/databases/memory_db.cjs +0 -1
- package/dist/databases/mock_db.cjs +0 -1
- package/dist/databases/mongodb_db.cjs +0 -1
- package/dist/databases/mssql_db.cjs +0 -5
- package/dist/databases/mysql_db.cjs +0 -1
- package/dist/databases/postgres_db.cjs +0 -1
- package/dist/databases/redis_db.cjs +0 -1
- package/dist/databases/rethink_db.cjs +0 -1
- package/dist/databases/sqlite_db.cjs +0 -4
- package/dist/lib/AbstractDatabase.cjs +0 -1
- /package/dist/databases/{postgrespool_db.cjs → postgrespool_db.js} +0 -0
- /package/dist/lib/{CacheAndBufferLayer.cjs → CacheAndBufferLayer.js} +0 -0
- /package/dist/lib/{logging.cjs → logging.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var y=Object.defineProperty;var m=(o,r,e)=>r in o?y(o,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[r]=e;var h=(o,r,e)=>(m(o,typeof r!="symbol"?r+"":r,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("../lib/AbstractDatabase.js"),d=require("../node_modules/cassandra-driver/index.js"),f=class extends E{constructor(e){super();h(this,"client");h(this,"pool");if(!e.clientOptions)throw new Error("The Cassandra client options should be defined");if(!e.columnFamily)throw new Error("The Cassandra column family should be defined");this.settings={database:e.database},this.settings.clientOptions=e.clientOptions,this.settings.columnFamily=e.columnFamily,this.settings.logger=e.logger}init(e){this.client=new d.Client(this.settings.clientOptions),this.settings.logger&&this.client.on("log",this.settings.logger),this.client.execute("SELECT columnfamily_name FROM system.schema_columnfamilies WHERE keyspace_name = ?",[this.settings.clientOptions.keyspace],(i,t)=>{if(i)return e(i);let s=!1;const n=t.rows.length;for(let l=0;l<n;l++)if(t.rows[l].columnfamily_name===this.settings.columnFamily){s=!0;break}if(s)return e(null);{const l=`CREATE COLUMNFAMILY "${this.settings.columnFamily}" (key text PRIMARY KEY, data text)`;this.client&&this.client.execute(l,e)}})}get(e,i){const t=`SELECT data FROM "${this.settings.columnFamily}" WHERE key = ?`;this.client&&this.client.execute(t,[e],(s,n)=>s?i(s):!n.rows||n.rows.length===0?i(null,null):i(null,n.rows[0].data))}findKeys(e,i,t){let s=null;if(!i)s=`SELECT key FROM "${this.settings.columnFamily}"`,this.client&&this.client.execute(s,(n,l)=>{if(n)return t(n);const u=new RegExp(`^${e.replace(/\*/g,".*")}$`),a=[];return l.rows.forEach(c=>{u.test(c.key)&&a.push(c.key)}),t(null,a)});else if(i==="*:*:*"){const n=/^([^:]+):\*$/.exec(e);if(n)s=`SELECT * from "${this.settings.columnFamily}" WHERE key = ?`,this.client&&this.client.execute(s,[`ueberdb:keys:${n[1]}`],(l,u)=>{if(l)return t(l);if(!u.rows||u.rows.length===0)return t(null,[]);const a=u.rows.map(c=>c.data);return t(null,a)});else{const l="Cassandra db only supports key patterns like pad:* when notKey is set to *:*:*";return t(new Error(l),null)}}else return t(new Error("Cassandra db currently only supports *:*:* as notKey"),null)}set(e,i,t){this.doBulk([{type:"set",key:e,value:i}],t)}remove(e,i){this.doBulk([{type:"remove",key:e}],i)}doBulk(e,i){const t=[];e.forEach(s=>{const n=/^([^:]+):([^:]+)$/.exec(s.key);s.type==="set"?(t.push({query:`UPDATE "${this.settings.columnFamily}" SET data = ? WHERE key = ?`,params:[s.value,s.key]}),n&&t.push({query:`UPDATE "${this.settings.columnFamily}" SET data = ? WHERE key = ?`,params:["1",`ueberdb:keys:${n[1]}`]})):s.type==="remove"&&(t.push({query:`DELETE FROM "${this.settings.columnFamily}" WHERE key=?`,params:[s.key]}),n&&t.push({query:`DELETE FROM "${this.settings.columnFamily}" WHERE key = ?`,params:[`ueberdb:keys:${n[1]}`]}))}),this.client&&this.client.batch(t,{prepare:!0},i)}close(e){this.pool.shutdown(e)}};exports.Database=f;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var u=Object.defineProperty;var c=(o,n,t)=>n in o?u(o,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[n]=t;var d=(o,n,t)=>(c(o,typeof n!="symbol"?n+"":n,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("../lib/AbstractDatabase.js"),l=require("../_virtual/__vite-browser-external.js"),g=require("../node_modules/nano/lib/nano.js"),f=class extends h{constructor(t){super();d(this,"agent");d(this,"db");this.agent=null,this.db=null,this.settings=t,this.settings.cache=1e3,this.settings.writeInterval=100,this.settings.json=!1}get isAsync(){return!0}async init(){this.agent=new l.Agent({keepAlive:!0,maxSockets:this.settings.maxListeners||1});const t={url:`http://${this.settings.host}:${this.settings.port}`,requestDefaults:{agent:this.agent}};this.settings.user&&this.settings.password&&(t.requestDefaults.auth={username:this.settings.user,password:this.settings.password});const s=g(t);try{await s.db.get(this.settings.database)}catch(e){if(e.statusCode!==404)throw e;await s.db.create(this.settings.database)}this.db=s.use(this.settings.database)}async get(t){let s;try{this.db&&(s=await this.db.get(t))}catch(e){if(e.statusCode===404)return null;throw e}return s&&"value"in s?s.value:""}async findKeys(t,s){const e=t.indexOf("*");if(!this.db)return;const i=e<0?t:t.slice(0,e);return(await this.db.find({selector:{_id:e<0?i:{$gte:i,$lte:`${i}`,$regex:this.createFindRegex(t,s).source}},fields:["_id"]})).docs.map(r=>r._id)}async set(t,s){let e;if(this.db){try{e=await this.db.get(t)}catch(i){if(i.statusCode!==404)throw i}await this.db.insert({_id:t,value:s,...e==null?{}:{_rev:e._rev}})}}async remove(t){let s;if(!this.db)return;try{s=await this.db.head(t)}catch(i){if(i.statusCode===404)return;throw i}const e=JSON.parse(s.etag);await this.db.destroy(t,e)}async doBulk(t){if(!this.db)return;const s=t.map(a=>a.key),e={};for(const{key:a,value:r}of(await this.db.fetchRevs({keys:s})).rows)r!=null&&(e[a]=r.rev);const i=[];for(const a of t){const r={_id:a.key,_rev:void 0,_deleted:!1,value:""};e[a.key]!=null&&(r._rev=e[a.key]),a.type==="set"&&(r.value=a.value),a.type==="remove"&&(r._deleted=!0),i.push(r)}await this.db.bulk({docs:i})}async close(){this.db=null,this.agent&&this.agent.destroy(),this.agent=null}};exports.Database=f;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var h=Object.defineProperty;var d=(s,e,t)=>e in s?h(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var l=(s,e,t)=>(d(s,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../lib/AbstractDatabase.js"),c=require("../node_modules/dirty/lib/dirty/index.js"),b=class extends o{constructor(e){super();l(this,"db");this.db=null,(!e||!e.filename)&&(e={filename:null}),this.settings=e,this.settings.cache=0,this.settings.writeInterval=0,this.settings.json=!1}init(e){this.db=new c.default(this.settings.filename),this.db.on("load",t=>{e()})}get(e,t){t(null,this.db.get(e))}findKeys(e,t,i){const n=[],r=this.createFindRegex(e,t);this.db.forEach((a,u)=>{a.search(r)!==-1&&n.push(a)}),i(null,n)}set(e,t,i){this.db.set(e,t,i)}remove(e,t){this.db.rm(e,t)}close(e){this.db.close(),this.db=null,e&&e()}};exports.Database=b;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var d=Object.defineProperty;var c=(s,t,e)=>t in s?d(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var a=(s,t,e)=>(c(s,typeof t!="symbol"?t+"":t,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("../lib/AbstractDatabase.js"),l=require("../node_modules/dirty/lib/dirty/index.js"),u=class extends h{constructor(t){super();a(this,"db");this.db=null,(!t||!t.filename)&&(t={}),this.settings=t,this.settings.cache=0,this.settings.writeInterval=0,this.settings.json=!1}init(t){this.db=new l.dirty.Dirty(this.settings.filename),this.db.on("load",e=>{t()})}get(t,e){e(null,this.db.get(t))}findKeys(t,e,r){const i=[],o=this.createFindRegex(t,e);this.db.forEach((n,b)=>{n.search(o)!==-1&&i.push(n)}),r(null,i)}set(t,e,r){this.db.set(t,e,r);const i=require("path").dirname(this.settings.filename);require("simple-git")(i).silent(!0).add("./*.db").commit("Automated commit...").push(["-u","origin","master"],()=>console.debug("Stored git commit"))}remove(t,e){this.db.rm(t,e)}close(t){this.db.close(),t&&t()}};exports.Database=u;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var q=Object.defineProperty;var k=(i,e,t)=>e in i?q(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var l=(i,e,t)=>(k(i,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("../lib/AbstractDatabase.js"),w=require("assert");require("../node_modules/buffer/index.js");const C=require("crypto"),M=require("../node_modules/elasticsearch8/index.js"),S=require("../_virtual/index3.js"),j="2",c=i=>{const e=S.__exports.Buffer.from(i);return e.length>512?C.createHash("sha512").update(e).digest("hex"):i},y={properties:{key:{type:"wildcard"},value:{type:"object",enabled:!1}}},D=async(i,e,t,s)=>{let n=0,r=0;const f=new Map;s.info(`Attempting elasticsearch record migration from schema v1 at base index ${e} to schema v2 at index ${t}...`);const $=await i.indices.get({index:[e,`${e}-*-*`]}),u=new Map,d=[];try{for(const a of Object.keys($)){const o=await i.search({index:a,scroll:"10m"});u.set(a,o._scroll_id),d.push({index:a,res:o})}for(;d.length;){const{index:a,res:{hits:{hits:o,total:{value:b}}}}=d.shift();if(o.length===0)continue;f.set(a,b);const m=[];for(const{_id:h,_type:_,_source:{val:x}}of o){let g=`${_}:${h}`;if(e&&a!==e){const p=a.slice(e.length+1).split("-");if(p.length!==2)throw new Error(`unable to migrate records from index ${a} due to data ambiguity`);g=`${p[0]}:${decodeURIComponent(_)}:${p[1]}:${h}`}m.push({index:{_id:c(g)}},{key:g,value:JSON.parse(x)})}if(await i.bulk({index:t,body:m}),r+=o.length,Math.floor(r/100)>Math.floor(n/100)){const h=[...f.values()].reduce((_,x)=>_+x,0);s.info(`Migrated ${r} records out of ${h}`),n=r}d.push({index:a,res:await i.scroll({scroll:"5m",scroll_id:u.get(a)})})}s.info(`Finished migrating ${r} records`)}finally{await Promise.all([...u.values()].map(a=>i.clearScroll({scroll_id:a})))}},A=class extends v{constructor(e){super();l(this,"_client");l(this,"_index");l(this,"_indexClean");l(this,"_q");this._client=null,this.settings={host:"127.0.0.1",port:"9200",base_index:"ueberes",migrate_to_newer_schema:!1,api:"7.6",...e||{},json:!1},this._index=`${this.settings.base_index}_s${j}`,this._q={index:this._index},this._indexClean=!0}get isAsync(){return!0}async _refreshIndex(){this._indexClean||(this._indexClean=!0,await this._client.indices.refresh(this._q))}async init(){const e=new M.elasticsearch8.Client({node:`http://${this.settings.host}:${this.settings.port}`});if(await e.ping(),!await e.indices.exists({index:this._index})){let s;const n=await e.indices.exists({index:this.settings.base_index});if(n&&!this.settings.migrate_to_newer_schema)throw new Error(`Data exists under the legacy index (schema) named ${this.settings.base_index}. Set migrate_to_newer_schema to true to copy the existing data to a new index named ${this._index}.`);let r=0;for(;s=`${this._index}_${n?"migrate_attempt_":"i"}${r++}`,!!await e.indices.exists({index:s}););await e.indices.create({index:s,mappings:y}),n&&await D(e,this.settings.base_index,s,this.logger),await e.indices.putAlias({index:s,name:this._index})}const t=Object.values(await e.indices.get({index:this._index}));w.equal(t.length,1);try{w.deepEqual(t[0].mappings,y)}catch(s){this.logger.warn(`Index ${this._index} mappings does not match expected; attempting to use index anyway. Details: ${s}`)}this._client=e}async get(e){const t=await this._client.get({...this._q,id:c(e)},{ignore:[404]});return t.found?t._source.value:null}async findKeys(e,t){await this._refreshIndex();const s={...this._q,body:{query:{bool:{filter:{wildcard:{key:{value:e}}},...t==null?{}:{must_not:{wildcard:{key:{value:t}}}}}}}},{hits:n}=await this._client.search(s);return n.hits.map(r=>r._source.key)}async set(e,t){this._indexClean=!1,await this._client.index({...this._q,id:c(e),body:{key:e,value:t}})}async remove(e){this._indexClean=!1,await this._client.delete({...this._q,id:c(e)},{ignore:[404]})}async doBulk(e){const t=[];for(const{type:s,key:n,value:r}of e)switch(this._indexClean=!1,s){case"set":t.push({index:{_id:c(n)}}),t.push({key:n,value:r});break;case"remove":t.push({delete:{_id:c(n)}});break}await this._client.bulk({...this._q,body:t})}async close(){this._client!=null&&this._client.close(),this._client=null}};exports.Database=A;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var d=Object.defineProperty;var c=(a,e,t)=>e in a?d(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var r=(a,e,t)=>(c(a,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("../lib/AbstractDatabase.js"),o=class extends l{constructor(t){super();r(this,"_data");this.settings=t,t.json=!1,t.cache=0,t.writeInterval=0,this._data=null}get isAsync(){return!0}close(){this._data=null}findKeys(t,s){const i=this.createFindRegex(t,s);return[...this._data.keys()].filter(n=>i.test(n))}get(t){return this._data.get(t)}init(){this._data=this.settings.data||new Map}remove(t){this._data.delete(t)}set(t,s){this._data.set(t,s)}};exports.Database=o;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var n=Object.defineProperty;var r=(i,t,e)=>t in i?n(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var o=(i,t,e)=>(r(i,typeof t!="symbol"?t+"":t,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../node_modules/events/events.js"),c=class extends a.default.EventEmitter{constructor(t){super();o(this,"settings");o(this,"mock");this.settings={writeInterval:1,...t},t.mock=this,this.settings=t,console.log("Initialized")}close(t){this.emit("close",t)}doBulk(t,e){this.emit("doBulk",t,e)}findKeys(t,e,s){this.emit("findKeys",t,e,s)}get(t,e){this.emit("get",t,e)}async init(t){this.emit("init",t())}remove(t,e){this.emit("remove",t,e)}set(t,e,s){this.emit("set",t,e,s)}};exports.Database=c;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var c=Object.defineProperty;var h=(n,e,t)=>e in n?c(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var o=(n,e,t)=>(h(n,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../lib/AbstractDatabase.js");require("../node_modules/mongodb/lib/index.js");const r=require("../_virtual/index2.js"),d=class extends a{constructor(e){super();o(this,"interval");o(this,"database");o(this,"client");o(this,"collection");if(this.settings=e,!this.settings.url)throw new Error("You must specify a mongodb url");this.settings.database==null&&(this.settings.database=this.settings.dbName),this.settings.collection||(this.settings.collection="ueberdb")}clearPing(){this.interval&&clearInterval(this.interval[Symbol.toPrimitive]())}schedulePing(){this.clearPing(),this.interval=setInterval(()=>{this.database.command({ping:1})},1e4)}init(e){r.__exports.MongoClient.connect(this.settings.url).then(t=>{this.client=t,this.database=t.db(this.settings.database),this.collection=this.database.collection(this.settings.collection),e(null)}).catch(t=>{e(t)}),this.schedulePing()}get(e,t){this.collection.findOne({_id:e}).then(i=>{t(null,i&&i.value)}).catch(i=>{console.log(i),t(i)}),this.schedulePing()}findKeys(e,t,i){const s={$and:[{_id:{$regex:`${e.replace(/\*/g,"")}`}}]};t&&s.$and.push({_id:{$not:{$regex:`${t.replace(/\*/g,"")}`}}}),this.collection.find(s).map(l=>l._id).toArray().then(l=>{i(null,l)}).catch(l=>i(l)),this.schedulePing()}set(e,t,i){e.length>100?i("Your Key can only be 100 chars"):this.collection.updateMany({_id:e},{$set:{value:t}},{upsert:!0}).then(()=>i(null)).catch(s=>i(s)),this.schedulePing()}remove(e,t){this.collection.deleteOne({_id:e}).then(i=>t(null,i)).catch(i=>t(i)),this.schedulePing()}doBulk(e,t){const i=this.collection.initializeOrderedBulkOp();for(const s in e)e[s].type==="set"?i.find({_id:e[s].key}).upsert().updateOne({$set:{value:e[s].value}}):e[s].type==="remove"&&i.find({_id:e[s].key}).deleteOne();i.execute().then(s=>{t(null,s)}).catch(s=>{t(s)}),this.schedulePing()}close(e){this.clearPing(),this.client.close().then(t=>e(t))}};exports.Database=d;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";var h=Object.defineProperty;var R=(T,N,e)=>N in T?h(T,N,{enumerable:!0,configurable:!0,writable:!0,value:e}):T[N]=e;var y=(T,N,e)=>(R(T,typeof N!="symbol"?N+"":N,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../lib/AbstractDatabase.js"),v=require("../node_modules/async/dist/async.js"),u=require("../node_modules/mssql/index.js"),A=class extends f{constructor(e){super();y(this,"db");e=e||{},e.json!=null&&(e.parseJSON=e.json),e.requestTimeout=3e5,e.server=e.host,this.settings=e,this.settings.cache=0,this.settings.writeInterval=0}init(e){const r="IF OBJECT_ID(N'dbo.store', N'U') IS NULL BEGIN CREATE TABLE [store] ( [key] NVARCHAR(100) PRIMARY KEY, [value] NTEXT NOT NULL ); END";new u.ConnectionPool(this.settings).connect().then(n=>{this.db=n,new u.Request(this.db).query(r,s=>{e(s)}),this.db.on("error",s=>{console.log(s)})})}get(e,r){const n=new u.Request(this.db);n.input("key",u.NVarChar(100),e),n.query("SELECT [value] FROM [store] WHERE [key] = @key",(o,s)=>{let E=null;!o&&s&&s.rowsAffected[0]===1&&(E=s.recordset[0].value),r(o,E)})}findKeys(e,r,n){const o=new u.Request(this.db);let s="SELECT [key] FROM [store] WHERE [key] LIKE @key";e=e.replace(/\*/g,"%"),o.input("key",u.NVarChar(100),e),r!=null&&(r=r.replace(/\*/g,"%"),o.input("notkey",u.NVarChar(100),r),s+=" AND [key] NOT LIKE @notkey"),o.query(s,(E,a)=>{const i=[];if(!E&&a&&a.rowsAffected[0]>0)for(let t=0;t<a.recordset.length;t++)i.push(a.recordset[t].key);n(E,i)})}set(e,r,n){const o=new u.Request(this.db);if(e.length>100)n("Your Key can only be 100 chars");else{const s="MERGE [store] t USING (SELECT @key [key], @value [value]) s ON t.[key] = s.[key] WHEN MATCHED AND s.[value] IS NOT NULL THEN UPDATE SET t.[value] = s.[value] WHEN NOT MATCHED THEN INSERT ([key], [value]) VALUES (s.[key], s.[value]);";o.input("key",u.NVarChar(100),e),o.input("value",u.NText,r),o.query(s,(E,a)=>{n(E?E.toString():"")})}}remove(e,r){const n=new u.Request(this.db);n.input("key",u.NVarChar(100),e),n.query("DELETE FROM [store] WHERE [key] = @key",r)}doBulk(e,r){const o=new u.Request(this.db);let s=!0,E=!0;const a=[];let i="DELETE FROM [store] WHERE [key] IN (";for(const t in e)e[t].type==="set"?(s?(a.push("BEGIN TRANSACTION;"),s=!1):Number(t)%100===0&&a.push(`
|
|
2
|
+
COMMIT TRANSACTION;
|
|
3
|
+
BEGIN TRANSACTION;
|
|
4
|
+
`),a.push(`MERGE [store] t USING (SELECT '${e[t].key}' [key], '${e[t].value}' [value]) s`,"ON t.[key] = s.[key]","WHEN MATCHED AND s.[value] IS NOT NULL THEN UPDATE SET t.[value] = s.[value]","WHEN NOT MATCHED THEN INSERT ([key], [value]) VALUES (s.[key], s.[value]);")):e[t].type==="remove"&&(E||(i+=","),E=!1,i+=`'${e[t].key}'`);i+=");",a.push("COMMIT TRANSACTION;"),v.default.parallel([t=>{s?t():o.batch(a.join(`
|
|
5
|
+
`),(l,c)=>{l&&t(l),t(l,c)})},t=>{E?t():o.query(i,t)}],(t,l)=>{t&&r(t),r(t,l)})}close(e){this.db&&this.db.close(e)}};exports.Database=A;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var c=Object.defineProperty;var h=(i,t,e)=>t in i?c(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var l=(i,t,e)=>(h(i,typeof t!="symbol"?t+"":t,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../lib/AbstractDatabase.js");require("crypto");require("../node_modules/events/events.js");require("../node_modules/buffer/index.js");const E=require("util");require("../node_modules/string_decoder/lib/string_decoder.js");const A=class extends u{constructor(t){super();l(this,"_mysqlSettings");l(this,"_pool");this.logger=console,this._mysqlSettings={charset:"utf8mb4",...t},this.settings={engine:"InnoDB",bulkLimit:100,json:!0,queryTimeout:6e4},this._pool=null}get isAsync(){return!0}async _query(t){try{return await new Promise((e,r)=>{t={timeout:this.settings.queryTimeout,...t},this._pool&&this._pool.query(t,(s,...n)=>s!=null?r(s):e(n))})}catch(e){throw this.logger.error(`${e.fatal?"Fatal ":""}MySQL error: ${e.stack||e}`),e}}async init(){this._pool=(void 0)(this._mysqlSettings);const{database:t,charset:e}=this._mysqlSettings,r=`CREATE TABLE IF NOT EXISTS \`store\` ( \`key\` VARCHAR( 100 ) NOT NULL COLLATE utf8mb4_bin, \`value\` LONGTEXT COLLATE utf8mb4_bin NOT NULL , PRIMARY KEY ( \`key\` ) ) ENGINE=${this.settings.engine} CHARSET=utf8mb4 COLLATE=utf8mb4_bin;`,s="ALTER TABLE store MODIFY `key` VARCHAR(100) COLLATE utf8mb4_bin;";await this._query({sql:r});const n=`SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${t}'`;let[a]=await this._query({sql:n});a=JSON.parse(JSON.stringify(a)),a[0].DEFAULT_CHARACTER_SET_NAME!==e&&(this.logger.error(`Database is not configured with charset ${e} -- This may lead to crashes when certain characters are pasted in pads`),this.logger.log(a[0],e)),a[0].DEFAULT_COLLATION_NAME.indexOf(e)===-1&&(this.logger.error(`Database is not configured with collation name that includes ${e} -- This may lead to crashes when certain characters are pasted in pads`),this.logger.log(a[0],e,a[0].DEFAULT_COLLATION_NAME));const o=`SELECT CCSA.character_set_name AS character_set_name FROM information_schema.\`TABLES\` T,information_schema.\`COLLATION_CHARACTER_SET_APPLICABILITY\` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = '${t}' AND T.table_name = 'store'`;[a]=await this._query({sql:o}),a[0]||this.logger.warn("Data has no character_set_name value -- This may lead to crashes when certain characters are pasted in pads"),a[0]&&a[0].character_set_name!==e&&(this.logger.error(`table is not configured with charset ${e} -- This may lead to crashes when certain characters are pasted in pads`),this.logger.log(a[0],e)),await this.get("MYSQL_MIGRATION_LEVEL")!=="1"&&(await this._query({sql:s}),await this.set("MYSQL_MIGRATION_LEVEL","1"))}async get(t){const[e]=await this._query({sql:"SELECT `value` FROM `store` WHERE `key` = ? AND BINARY `key` = ?",values:[t,t]});return e.length===1?e[0].value:null}async findKeys(t,e){let r="SELECT `key` FROM `store` WHERE `key` LIKE ?";const s=[];t=t.replace(/\*/g,"%"),s.push(t),e!=null&&(e=e.replace(/\*/g,"%"),r+=" AND `key` NOT LIKE ?",s.push(e));const[n]=await this._query({sql:r,values:s});return n.map(a=>a.key)}async set(t,e){if(t.length>100)throw new Error("Your Key can only be 100 chars");await this._query({sql:"REPLACE INTO `store` VALUES (?,?)",values:[t,e]})}async remove(t){await this._query({sql:"DELETE FROM `store` WHERE `key` = ? AND BINARY `key` = ?",values:[t,t]})}async doBulk(t){const e=[],r=[];for(const s of t)switch(s.type){case"set":e.push([s.key,s.value]);break;case"remove":r.push(s.key);break;default:throw new Error(`unknown op type: ${s.type}`)}await Promise.all([e.length?this._query({sql:"REPLACE INTO `store` VALUES ?;",values:[e]}):null,r.length?this._query({sql:"DELETE FROM `store` WHERE `key` IN (?) AND BINARY `key` IN (?);",values:[r,r]}):null])}async close(){await E.promisify(this._pool.end.bind(this._pool))()}};exports.Database=A;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var c=Object.defineProperty;var T=(E,e,t)=>e in E?c(E,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):E[e]=t;var l=(E,e,t)=>(T(E,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../lib/AbstractDatabase.js"),y=require("../node_modules/async/dist/async.js");require("../node_modules/pg/lib/client.js");require("../node_modules/pg/lib/defaults.js");require("../node_modules/pg/lib/connection.js");require("../node_modules/events/events.js");require("../node_modules/pg-protocol/dist/index.js");require("../node_modules/pg-types/index.js");require("../node_modules/pg/lib/type-overrides.js");require("util");require("../node_modules/pg/lib/connection-parameters.js");const d=class extends p{constructor(e){super();l(this,"db");l(this,"upsertStatement");typeof e=="string"&&(e={connectionString:e}),this.settings=e,this.settings.cache=e.cache||1e3,this.settings.writeInterval=100,this.settings.json=!0,this.settings.max=this.settings.max||20,this.settings.min=this.settings.min||4,this.settings.idleTimeoutMillis=this.settings.idleTimeoutMillis||1e3,this.db=new(void 0)(this.settings)}init(e){const t="SELECT 1 as exists FROM pg_tables WHERE tablename = 'store'",n='CREATE TABLE IF NOT EXISTS store ("key" character varying(100) NOT NULL, "value" text NOT NULL, CONSTRAINT store_pkey PRIMARY KEY (key))';this.upsertStatement=null;const r=s=>{const o="SELECT ueberdb_insert_or_update($1,$2)",u="INSERT INTO store(key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = excluded.value",a="CREATE OR REPLACE FUNCTION ueberdb_insert_or_update(character varying, text) RETURNS void AS $$ BEGIN IF EXISTS( SELECT * FROM store WHERE key = $1 ) THEN UPDATE store SET value = $2 WHERE key = $1; ELSE INSERT INTO store(key,value) VALUES( $1, $2 ); END IF; RETURN; END; $$ LANGUAGE plpgsql;",i=`EXPLAIN ${u}`;this.db.query(i,["test-key","test-value"],h=>{if(h){this.upsertStatement=o,this.db.query(a,[],s);return}this.upsertStatement=u,s()})};this.db.query(t,(s,o)=>{if(s!=null)return e(s);o.rows.length===0?this.db.query(n,u=>{if(u!=null)return e(u);r(e)}):r(e)})}get(e,t){this.db.query("SELECT value FROM store WHERE key=$1",[e],(n,r)=>{let s=null;!n&&r.rows.length===1&&(s=r.rows[0].value),t(n,s)})}findKeys(e,t,n){let r="SELECT key FROM store WHERE key LIKE $1";const s=[];e=e.replace(/\*/g,"%"),s.push(e),t!=null&&(t=t.replace(/\*/g,"%"),r+=" AND key NOT LIKE $2",s.push(t)),this.db.query(r,s,(o,u)=>{const a=[];!o&&u.rows.length>0&&u.rows.forEach(i=>{a.push(i.key)}),n(o,a)})}set(e,t,n){if(e.length>100){const r="";n(Error("Your Key can only be 100 chars"),r)}else this.upsertStatement!=null&&this.db.query(this.upsertStatement,[e,t],n)}remove(e,t){this.db.query("DELETE FROM store WHERE key=$1",[e],t)}doBulk(e,t){const n=[];let r="DELETE FROM store WHERE key IN (";const s=[];let o=0;for(const i in e)e[i].type==="set"?n.push([e[i].key,e[i].value]):e[i].type==="remove"&&(o!==0&&(r+=","),o+=1,r+=`$${o}`,s.push(e[i].key));if(r+=");",!this.upsertStatement)return;const u=n.map(i=>h=>this.db.query(this.upsertStatement,i,h)),a=i=>{s.length>1?i():this.db.query(r,s,i)};u.push(a),y.default.parallel(u,t)}close(e){this.db.end(e)}};exports.Database=d;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var h=Object.defineProperty;var o=(l,i,t)=>i in l?h(l,i,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[i]=t;var u=(l,i,t)=>(o(l,typeof i!="symbol"?i+"":i,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("../lib/AbstractDatabase.js");require("../node_modules/redis/dist/index.js");const a=require("../_virtual/index.js"),f=class extends _{constructor(t){super();u(this,"_client");this._client=null,this.settings=t||{}}get isAsync(){return!0}async init(){if(this.settings.url)this._client=a.__exports.createClient({url:this.settings.url});else if(this.settings.host){const t={socket:{host:this.settings.host,port:Number(this.settings.port)}};this.settings.password&&(t.password=this.settings.password),this.settings.user&&(t.username=this.settings.user),this._client=a.__exports.createClient(t)}this._client&&(await this._client.connect(),await this._client.ping())}async get(t){return this._client==null?null:await this._client.get(t)}async findKeys(t,e){if(this._client==null)return null;const[s]=/^([^:*]+):\*$/.exec(t)||[];if(s!=null&&["*:*:*",`${t}:*`].includes(e))return await this._client.sMembers(`ueberDB:keys:${s}`);let r=await this._client.keys(t.replace(/[?[\]\\]/g,"\\$&"));if(e!=null){const c=this.createFindRegex(t,e);r=r.filter(n=>c.test(n))}return r}async set(t,e){if(this._client==null)return null;const s=/^([^:]+):([^:]+)$/.exec(t);await Promise.all([s&&this._client.sAdd(`ueberDB:keys:${s[1]}`,s[0]),this._client.set(t,e)])}async remove(t){if(this._client==null)return null;const e=/^([^:]+):([^:]+)$/.exec(t);await Promise.all([e&&this._client.sRem(`ueberDB:keys:${e[1]}`,e[0]),this._client.del(t)])}async doBulk(t){if(this._client==null)return null;const e=this._client.multi();for(const{key:s,type:r,value:c}of t){const n=/^([^:]+):([^:]+)$/.exec(s);r==="set"?(n&&e.sAdd(`ueberDB:keys:${n[1]}`,n[0]),e.set(s,c)):r==="remove"&&(n&&e.sRem(`ueberDB:keys:${n[1]}`,n[0]),e.del(s))}await e.exec()}async close(){if(this._client==null)return null;await this._client.quit(),this._client=null}};exports.Database=f;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var l=Object.defineProperty;var h=(s,t,e)=>t in s?l(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var r=(s,t,e)=>(h(s,typeof t!="symbol"?t+"":t,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("../lib/AbstractDatabase.js"),c=require("../node_modules/rethinkdb/rethinkdb.js"),u=require("../node_modules/async/dist/async.js"),d=class extends b{constructor(t){super();r(this,"host");r(this,"db");r(this,"port");r(this,"table");r(this,"connection");t||(t={}),t.host||(t.host="localhost"),t.port||(t.port=28015),t.db||(t.db="test"),t.table||(t.table="test"),this.host=t.host,this.db=t.db,this.port=t.port,this.table=t.table,this.connection=null}init(t){c.connect(this,(e,o)=>{if(e)throw e;this.connection=o,c.table(this.table).run(this.connection,(i,n)=>{i?c.tableCreate(this.table).run(this.connection,t):t&&t(null,n)})})}get(t,e){c.table(this.table).get(t).run(this.connection,(o,i)=>{e(o,i&&i.content)})}findKeys(t,e,o){const i=[],n=this.createFindRegex(t,e);c.filter(a=>{a.id.search(n)!==-1&&i.push(a.id)}).run(this.connection,o)}set(t,e,o){c.table(this.table).insert({id:t,content:e},{conflict:"replace"}).run(this.connection,o)}doBulk(t,e){const o=[],i=[];for(const n in t)t[n].type==="set"?o.push({id:t[n].key,content:t[n].value}):t[n].type==="remove"&&i.push(t[n].key);u.default.parallel([n=>{c.table(this.table).insert(o,{conflict:"replace"}).run(this.connection,n)},n=>{c.table(this.table).getAll(i).delete().run(this.connection,n)}],e)}remove(t,e){c.table(this.table).get(t).delete().run(this.connection,e)}close(t){this.connection&&this.connection.close(t)}};exports.Database=d;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";var f=Object.defineProperty;var d=(n,a,e)=>a in n?f(n,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[a]=e;var h=(n,a,e)=>(d(n,typeof a!="symbol"?a+"":a,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("../lib/AbstractDatabase.js"),b=require("util");let c;try{c=require("sqlite3").Database}catch{throw new Error(`sqlite3 not found. It was removed from ueberdb's dependencies because it requires compilation which fails on several systems. If you still want to use sqlite, run "npm install sqlite3" in your etherpad-lite ./src directory.`)}const l=n=>`'${n.replace(/'/g,"''")}'`,m=class extends T{constructor(e){super();h(this,"db");this.db=null,(!e||!e.filename)&&(e={filename:":memory:"}),this.settings=e,e.filename===":memory:"?(this.settings.cache=0,this.settings.writeInterval=0,this.settings.json=!0):(this.settings.cache=1e3,this.settings.writeInterval=100,this.settings.json=!0)}init(e){b.callbackify(async()=>{this.db=new c(this.settings.filename),await this._query("CREATE TABLE IF NOT EXISTS store (key TEXT PRIMARY KEY, value TEXT)")})(e)}async _query(e,s=[]){return await new Promise((i,t)=>{this.db&&this.db.all(e,s,(r,o)=>{if(r!=null)return t(r);i(o)})})}_queryCb(e,s,i){const t=this._query(e,s);i&&t.then(r=>i(null,r),r=>i(r||new Error(r)))}get(e,s){this._queryCb("SELECT value FROM store WHERE key = ?",[e],(i,t)=>s(i,i==null&&t&&t.length?t[0].value:null))}findKeys(e,s,i){let t="SELECT key FROM store WHERE key LIKE ?";const r=[];e=e.replace(/\*/g,"%"),r.push(e),s!=null&&(s=s.replace(/\*/g,"%"),t+=" AND key NOT LIKE ?",r.push(s)),this._queryCb(t,r,(o,u)=>{const E=[];!o&&Object.keys(u).length>0&&u.forEach(y=>{E.push(y.key)}),i(o,E)})}set(e,s,i){this._queryCb("REPLACE INTO store VALUES (?,?)",[e,s],i)}remove(e,s){this._queryCb("DELETE FROM store WHERE key = ?",[e],s)}doBulk(e,s){let i=`BEGIN TRANSACTION;
|
|
2
|
+
`;for(const t in e)e[t].type==="set"?i+=`REPLACE INTO store VALUES (${l(e[t].key)}, ${l(e[t].value)});
|
|
3
|
+
`:e[t].type==="remove"&&(i+=`DELETE FROM store WHERE key = ${l(e[t].key)};
|
|
4
|
+
`);i+="END TRANSACTION;",this.db&&this.db.exec(i,t=>{t&&(console.error("ERROR WITH SQL: "),console.error(i)),s(t)})}close(e){e(),this.db&&this.db.close(s=>e(s))}};exports.Database=m;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var h=Object.defineProperty;var b=(t,e,l)=>e in t?h(t,e,{enumerable:!0,configurable:!0,writable:!0,value:l}):t[e]=l;var n=(t,e,l)=>(b(t,typeof e!="symbol"?e+"":e,l),l);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./lib/CacheAndBufferLayer.js"),d=require("./lib/logging.js"),f=require("util"),s={init:()=>{},flush:()=>{},get:()=>{},remove:()=>{},findKeys:()=>{},close:()=>{},getSub:()=>{},setSub:()=>{}},g=["close","findKeys","flush","get","getSub","init","remove","set","setSub"];for(const t of g)s[t]=f.callbackify(r.Database.prototype[t]);const u=(t,e)=>l=>{if(t&&t(l),e&&e(l),l!=null&&t==null&&e==null)throw l},a=class{constructor(t,e,l,i=null){n(this,"type");n(this,"dbModule");n(this,"dbSettings");n(this,"wrapperSettings");n(this,"logger");n(this,"db");n(this,"metrics");t||(t="sqlite",e=null,l=null),this.type=t,this.dbSettings=e,this.wrapperSettings=l,this.logger=d.normalizeLogger(i)}async init(t=null){this.dbModule=await import(`./databases/${this.type}_db`);const e=new this.dbModule.Database(this.dbSettings);return e.logger=this.logger,this.db=new r.Database(e,this.wrapperSettings,this.logger),this.metrics=this.db.metrics,t!=null?s.init.call(this.db):this.db.init()}doShutdown(t=null){return this.flush(t)}flush(t=null){return!s||!s.flush===void 0?null:t!=null?s.flush.call(this.db,t):this.db.flush()}get(t,e=null){return e!=null?s.get.call(this.db,t,e):this.db.get(t)}findKeys(t,e,l=null){return l!=null?s.findKeys.call(this.db,t,e,l):this.db.findKeys(t,e)}remove(t,e=null,l=null){return e!=null?s.remove.call(this.db,t,u(e,l)):this.db.remove(t)}set(t,e,l=null,i=null){return l!=null?s.get.call(this.db,t,e,u(l,i)):this.db.set(t,e)}getSub(t,e,l=null){return l!=null?s.getSub.call(this.db,t,e,l):this.db.getSub(t,e)}setSub(t,e,l,i=null,o=null){return i!=null?s.setSub.call(this.db,t,e,l,u(i,o)):this.db.setSub(t,e,l)}close(t=null){return t!=null?s.close.call(this.db,t):this.db.close()}};exports.database=exports.Database;exports.Database=a;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var l=(r,e,t)=>e in r?i(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var o=(r,e,t)=>(l(r,typeof e!="symbol"?e+"":e,t),t);const g=require("./logging.js"),a=g.normalizeLogger(null),s=r=>r.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");class c{constructor(){o(this,"logger");o(this,"settings");if(new.target===module.exports)throw new TypeError("cannot instantiate Abstract Database directly");for(const e of["init","close","get","findKeys","remove","set"])if(typeof this[e]!="function")throw new TypeError(`method ${e} not defined`);this.logger=a}createFindRegex(e,t){let n=`^(?=${s(e)}$)`;return t!=null&&(n+=`(?!${s(t)}$)`),new RegExp(n)}doBulk(e,t){throw new Error("the doBulk method must be implemented if write caching is enabled")}get isAsync(){return!1}}module.exports=c;
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var y=Object.defineProperty;var m=(o,r,e)=>r in o?y(o,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[r]=e;var h=(o,r,e)=>(m(o,typeof r!="symbol"?r+"":r,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("../lib/AbstractDatabase.cjs"),d=require("../node_modules/cassandra-driver/index.cjs"),f=class extends E{constructor(e){super();h(this,"client");h(this,"pool");if(!e.clientOptions)throw new Error("The Cassandra client options should be defined");if(!e.columnFamily)throw new Error("The Cassandra column family should be defined");this.settings={database:e.database},this.settings.clientOptions=e.clientOptions,this.settings.columnFamily=e.columnFamily,this.settings.logger=e.logger}init(e){this.client=new d.Client(this.settings.clientOptions),this.settings.logger&&this.client.on("log",this.settings.logger),this.client.execute("SELECT columnfamily_name FROM system.schema_columnfamilies WHERE keyspace_name = ?",[this.settings.clientOptions.keyspace],(i,t)=>{if(i)return e(i);let s=!1;const n=t.rows.length;for(let l=0;l<n;l++)if(t.rows[l].columnfamily_name===this.settings.columnFamily){s=!0;break}if(s)return e(null);{const l=`CREATE COLUMNFAMILY "${this.settings.columnFamily}" (key text PRIMARY KEY, data text)`;this.client&&this.client.execute(l,e)}})}get(e,i){const t=`SELECT data FROM "${this.settings.columnFamily}" WHERE key = ?`;this.client&&this.client.execute(t,[e],(s,n)=>s?i(s):!n.rows||n.rows.length===0?i(null,null):i(null,n.rows[0].data))}findKeys(e,i,t){let s=null;if(!i)s=`SELECT key FROM "${this.settings.columnFamily}"`,this.client&&this.client.execute(s,(n,l)=>{if(n)return t(n);const u=new RegExp(`^${e.replace(/\*/g,".*")}$`),a=[];return l.rows.forEach(c=>{u.test(c.key)&&a.push(c.key)}),t(null,a)});else if(i==="*:*:*"){const n=/^([^:]+):\*$/.exec(e);if(n)s=`SELECT * from "${this.settings.columnFamily}" WHERE key = ?`,this.client&&this.client.execute(s,[`ueberdb:keys:${n[1]}`],(l,u)=>{if(l)return t(l);if(!u.rows||u.rows.length===0)return t(null,[]);const a=u.rows.map(c=>c.data);return t(null,a)});else{const l="Cassandra db only supports key patterns like pad:* when notKey is set to *:*:*";return t(new Error(l),null)}}else return t(new Error("Cassandra db currently only supports *:*:* as notKey"),null)}set(e,i,t){this.doBulk([{type:"set",key:e,value:i}],t)}remove(e,i){this.doBulk([{type:"remove",key:e}],i)}doBulk(e,i){const t=[];e.forEach(s=>{const n=/^([^:]+):([^:]+)$/.exec(s.key);s.type==="set"?(t.push({query:`UPDATE "${this.settings.columnFamily}" SET data = ? WHERE key = ?`,params:[s.value,s.key]}),n&&t.push({query:`UPDATE "${this.settings.columnFamily}" SET data = ? WHERE key = ?`,params:["1",`ueberdb:keys:${n[1]}`]})):s.type==="remove"&&(t.push({query:`DELETE FROM "${this.settings.columnFamily}" WHERE key=?`,params:[s.key]}),n&&t.push({query:`DELETE FROM "${this.settings.columnFamily}" WHERE key = ?`,params:[`ueberdb:keys:${n[1]}`]}))}),this.client&&this.client.batch(t,{prepare:!0},i)}close(e){this.pool.shutdown(e)}};exports.Database=f;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var u=Object.defineProperty;var c=(o,n,t)=>n in o?u(o,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[n]=t;var d=(o,n,t)=>(c(o,typeof n!="symbol"?n+"":n,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("../lib/AbstractDatabase.cjs"),l=require("../_virtual/__vite-browser-external.cjs"),g=require("../node_modules/nano/lib/nano.cjs"),f=class extends h{constructor(t){super();d(this,"agent");d(this,"db");this.agent=null,this.db=null,this.settings=t,this.settings.cache=1e3,this.settings.writeInterval=100,this.settings.json=!1}get isAsync(){return!0}async init(){this.agent=new l.Agent({keepAlive:!0,maxSockets:this.settings.maxListeners||1});const t={url:`http://${this.settings.host}:${this.settings.port}`,requestDefaults:{agent:this.agent}};this.settings.user&&this.settings.password&&(t.requestDefaults.auth={username:this.settings.user,password:this.settings.password});const s=g(t);try{await s.db.get(this.settings.database)}catch(e){if(e.statusCode!==404)throw e;await s.db.create(this.settings.database)}this.db=s.use(this.settings.database)}async get(t){let s;try{this.db&&(s=await this.db.get(t))}catch(e){if(e.statusCode===404)return null;throw e}return s&&"value"in s?s.value:""}async findKeys(t,s){const e=t.indexOf("*");if(!this.db)return;const i=e<0?t:t.slice(0,e);return(await this.db.find({selector:{_id:e<0?i:{$gte:i,$lte:`${i}`,$regex:this.createFindRegex(t,s).source}},fields:["_id"]})).docs.map(r=>r._id)}async set(t,s){let e;if(this.db){try{e=await this.db.get(t)}catch(i){if(i.statusCode!==404)throw i}await this.db.insert({_id:t,value:s,...e==null?{}:{_rev:e._rev}})}}async remove(t){let s;if(!this.db)return;try{s=await this.db.head(t)}catch(i){if(i.statusCode===404)return;throw i}const e=JSON.parse(s.etag);await this.db.destroy(t,e)}async doBulk(t){if(!this.db)return;const s=t.map(a=>a.key),e={};for(const{key:a,value:r}of(await this.db.fetchRevs({keys:s})).rows)r!=null&&(e[a]=r.rev);const i=[];for(const a of t){const r={_id:a.key,_rev:void 0,_deleted:!1,value:""};e[a.key]!=null&&(r._rev=e[a.key]),a.type==="set"&&(r.value=a.value),a.type==="remove"&&(r._deleted=!0),i.push(r)}await this.db.bulk({docs:i})}async close(){this.db=null,this.agent&&this.agent.destroy(),this.agent=null}};exports.Database=f;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var h=Object.defineProperty;var d=(s,e,t)=>e in s?h(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var l=(s,e,t)=>(d(s,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../lib/AbstractDatabase.cjs"),c=require("../node_modules/dirty/lib/dirty/index.cjs"),b=class extends o{constructor(e){super();l(this,"db");this.db=null,(!e||!e.filename)&&(e={filename:null}),this.settings=e,this.settings.cache=0,this.settings.writeInterval=0,this.settings.json=!1}init(e){this.db=new c.default(this.settings.filename),this.db.on("load",t=>{e()})}get(e,t){t(null,this.db.get(e))}findKeys(e,t,i){const n=[],r=this.createFindRegex(e,t);this.db.forEach((a,u)=>{a.search(r)!==-1&&n.push(a)}),i(null,n)}set(e,t,i){this.db.set(e,t,i)}remove(e,t){this.db.rm(e,t)}close(e){this.db.close(),this.db=null,e&&e()}};exports.Database=b;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var d=Object.defineProperty;var c=(s,t,e)=>t in s?d(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var a=(s,t,e)=>(c(s,typeof t!="symbol"?t+"":t,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("../lib/AbstractDatabase.cjs"),l=require("../node_modules/dirty/lib/dirty/index.cjs"),u=class extends h{constructor(t){super();a(this,"db");this.db=null,(!t||!t.filename)&&(t={}),this.settings=t,this.settings.cache=0,this.settings.writeInterval=0,this.settings.json=!1}init(t){this.db=new l.dirty.Dirty(this.settings.filename),this.db.on("load",e=>{t()})}get(t,e){e(null,this.db.get(t))}findKeys(t,e,r){const i=[],o=this.createFindRegex(t,e);this.db.forEach((n,b)=>{n.search(o)!==-1&&i.push(n)}),r(null,i)}set(t,e,r){this.db.set(t,e,r);const i=require("path").dirname(this.settings.filename);require("simple-git")(i).silent(!0).add("./*.db").commit("Automated commit...").push(["-u","origin","master"],()=>console.debug("Stored git commit"))}remove(t,e){this.db.rm(t,e)}close(t){this.db.close(),t&&t()}};exports.Database=u;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var q=Object.defineProperty;var k=(i,e,t)=>e in i?q(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var l=(i,e,t)=>(k(i,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("../lib/AbstractDatabase.cjs"),w=require("assert");require("../node_modules/buffer/index.cjs");const C=require("crypto"),M=require("../node_modules/elasticsearch8/index.cjs"),S=require("../_virtual/index3.cjs"),j="2",c=i=>{const e=S.__exports.Buffer.from(i);return e.length>512?C.createHash("sha512").update(e).digest("hex"):i},y={properties:{key:{type:"wildcard"},value:{type:"object",enabled:!1}}},D=async(i,e,t,s)=>{let n=0,r=0;const f=new Map;s.info(`Attempting elasticsearch record migration from schema v1 at base index ${e} to schema v2 at index ${t}...`);const $=await i.indices.get({index:[e,`${e}-*-*`]}),u=new Map,d=[];try{for(const a of Object.keys($)){const o=await i.search({index:a,scroll:"10m"});u.set(a,o._scroll_id),d.push({index:a,res:o})}for(;d.length;){const{index:a,res:{hits:{hits:o,total:{value:b}}}}=d.shift();if(o.length===0)continue;f.set(a,b);const m=[];for(const{_id:h,_type:_,_source:{val:x}}of o){let g=`${_}:${h}`;if(e&&a!==e){const p=a.slice(e.length+1).split("-");if(p.length!==2)throw new Error(`unable to migrate records from index ${a} due to data ambiguity`);g=`${p[0]}:${decodeURIComponent(_)}:${p[1]}:${h}`}m.push({index:{_id:c(g)}},{key:g,value:JSON.parse(x)})}if(await i.bulk({index:t,body:m}),r+=o.length,Math.floor(r/100)>Math.floor(n/100)){const h=[...f.values()].reduce((_,x)=>_+x,0);s.info(`Migrated ${r} records out of ${h}`),n=r}d.push({index:a,res:await i.scroll({scroll:"5m",scroll_id:u.get(a)})})}s.info(`Finished migrating ${r} records`)}finally{await Promise.all([...u.values()].map(a=>i.clearScroll({scroll_id:a})))}},A=class extends v{constructor(e){super();l(this,"_client");l(this,"_index");l(this,"_indexClean");l(this,"_q");this._client=null,this.settings={host:"127.0.0.1",port:"9200",base_index:"ueberes",migrate_to_newer_schema:!1,api:"7.6",...e||{},json:!1},this._index=`${this.settings.base_index}_s${j}`,this._q={index:this._index},this._indexClean=!0}get isAsync(){return!0}async _refreshIndex(){this._indexClean||(this._indexClean=!0,await this._client.indices.refresh(this._q))}async init(){const e=new M.elasticsearch8.Client({node:`http://${this.settings.host}:${this.settings.port}`});if(await e.ping(),!await e.indices.exists({index:this._index})){let s;const n=await e.indices.exists({index:this.settings.base_index});if(n&&!this.settings.migrate_to_newer_schema)throw new Error(`Data exists under the legacy index (schema) named ${this.settings.base_index}. Set migrate_to_newer_schema to true to copy the existing data to a new index named ${this._index}.`);let r=0;for(;s=`${this._index}_${n?"migrate_attempt_":"i"}${r++}`,!!await e.indices.exists({index:s}););await e.indices.create({index:s,mappings:y}),n&&await D(e,this.settings.base_index,s,this.logger),await e.indices.putAlias({index:s,name:this._index})}const t=Object.values(await e.indices.get({index:this._index}));w.equal(t.length,1);try{w.deepEqual(t[0].mappings,y)}catch(s){this.logger.warn(`Index ${this._index} mappings does not match expected; attempting to use index anyway. Details: ${s}`)}this._client=e}async get(e){const t=await this._client.get({...this._q,id:c(e)},{ignore:[404]});return t.found?t._source.value:null}async findKeys(e,t){await this._refreshIndex();const s={...this._q,body:{query:{bool:{filter:{wildcard:{key:{value:e}}},...t==null?{}:{must_not:{wildcard:{key:{value:t}}}}}}}},{hits:n}=await this._client.search(s);return n.hits.map(r=>r._source.key)}async set(e,t){this._indexClean=!1,await this._client.index({...this._q,id:c(e),body:{key:e,value:t}})}async remove(e){this._indexClean=!1,await this._client.delete({...this._q,id:c(e)},{ignore:[404]})}async doBulk(e){const t=[];for(const{type:s,key:n,value:r}of e)switch(this._indexClean=!1,s){case"set":t.push({index:{_id:c(n)}}),t.push({key:n,value:r});break;case"remove":t.push({delete:{_id:c(n)}});break}await this._client.bulk({...this._q,body:t})}async close(){this._client!=null&&this._client.close(),this._client=null}};exports.Database=A;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var d=Object.defineProperty;var c=(a,e,t)=>e in a?d(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var r=(a,e,t)=>(c(a,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("../lib/AbstractDatabase.cjs"),o=class extends l{constructor(t){super();r(this,"_data");this.settings=t,t.json=!1,t.cache=0,t.writeInterval=0,this._data=null}get isAsync(){return!0}close(){this._data=null}findKeys(t,s){const i=this.createFindRegex(t,s);return[...this._data.keys()].filter(n=>i.test(n))}get(t){return this._data.get(t)}init(){this._data=this.settings.data||new Map}remove(t){this._data.delete(t)}set(t,s){this._data.set(t,s)}};exports.Database=o;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var n=Object.defineProperty;var r=(i,t,e)=>t in i?n(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var o=(i,t,e)=>(r(i,typeof t!="symbol"?t+"":t,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../node_modules/events/events.cjs"),c=class extends a.default.EventEmitter{constructor(t){super();o(this,"settings");o(this,"mock");this.settings={writeInterval:1,...t},t.mock=this,this.settings=t,console.log("Initialized")}close(t){this.emit("close",t)}doBulk(t,e){this.emit("doBulk",t,e)}findKeys(t,e,s){this.emit("findKeys",t,e,s)}get(t,e){this.emit("get",t,e)}async init(t){this.emit("init",t())}remove(t,e){this.emit("remove",t,e)}set(t,e,s){this.emit("set",t,e,s)}};exports.Database=c;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var c=Object.defineProperty;var h=(n,e,t)=>e in n?c(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var o=(n,e,t)=>(h(n,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../lib/AbstractDatabase.cjs");require("../node_modules/mongodb/lib/index.cjs");const r=require("../_virtual/index2.cjs"),d=class extends a{constructor(e){super();o(this,"interval");o(this,"database");o(this,"client");o(this,"collection");if(this.settings=e,!this.settings.url)throw new Error("You must specify a mongodb url");this.settings.database==null&&(this.settings.database=this.settings.dbName),this.settings.collection||(this.settings.collection="ueberdb")}clearPing(){this.interval&&clearInterval(this.interval[Symbol.toPrimitive]())}schedulePing(){this.clearPing(),this.interval=setInterval(()=>{this.database.command({ping:1})},1e4)}init(e){r.__exports.MongoClient.connect(this.settings.url).then(t=>{this.client=t,this.database=t.db(this.settings.database),this.collection=this.database.collection(this.settings.collection),e(null)}).catch(t=>{e(t)}),this.schedulePing()}get(e,t){this.collection.findOne({_id:e}).then(i=>{t(null,i&&i.value)}).catch(i=>{console.log(i),t(i)}),this.schedulePing()}findKeys(e,t,i){const s={$and:[{_id:{$regex:`${e.replace(/\*/g,"")}`}}]};t&&s.$and.push({_id:{$not:{$regex:`${t.replace(/\*/g,"")}`}}}),this.collection.find(s).map(l=>l._id).toArray().then(l=>{i(null,l)}).catch(l=>i(l)),this.schedulePing()}set(e,t,i){e.length>100?i("Your Key can only be 100 chars"):this.collection.updateMany({_id:e},{$set:{value:t}},{upsert:!0}).then(()=>i(null)).catch(s=>i(s)),this.schedulePing()}remove(e,t){this.collection.deleteOne({_id:e}).then(i=>t(null,i)).catch(i=>t(i)),this.schedulePing()}doBulk(e,t){const i=this.collection.initializeOrderedBulkOp();for(const s in e)e[s].type==="set"?i.find({_id:e[s].key}).upsert().updateOne({$set:{value:e[s].value}}):e[s].type==="remove"&&i.find({_id:e[s].key}).deleteOne();i.execute().then(s=>{t(null,s)}).catch(s=>{t(s)}),this.schedulePing()}close(e){this.clearPing(),this.client.close().then(t=>e(t))}};exports.Database=d;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";var h=Object.defineProperty;var R=(T,N,e)=>N in T?h(T,N,{enumerable:!0,configurable:!0,writable:!0,value:e}):T[N]=e;var y=(T,N,e)=>(R(T,typeof N!="symbol"?N+"":N,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../lib/AbstractDatabase.cjs"),v=require("../node_modules/async/dist/async.cjs"),u=require("../node_modules/mssql/index.cjs"),A=class extends f{constructor(e){super();y(this,"db");e=e||{},e.json!=null&&(e.parseJSON=e.json),e.requestTimeout=3e5,e.server=e.host,this.settings=e,this.settings.cache=0,this.settings.writeInterval=0}init(e){const r="IF OBJECT_ID(N'dbo.store', N'U') IS NULL BEGIN CREATE TABLE [store] ( [key] NVARCHAR(100) PRIMARY KEY, [value] NTEXT NOT NULL ); END";new u.ConnectionPool(this.settings).connect().then(n=>{this.db=n,new u.Request(this.db).query(r,s=>{e(s)}),this.db.on("error",s=>{console.log(s)})})}get(e,r){const n=new u.Request(this.db);n.input("key",u.NVarChar(100),e),n.query("SELECT [value] FROM [store] WHERE [key] = @key",(o,s)=>{let E=null;!o&&s&&s.rowsAffected[0]===1&&(E=s.recordset[0].value),r(o,E)})}findKeys(e,r,n){const o=new u.Request(this.db);let s="SELECT [key] FROM [store] WHERE [key] LIKE @key";e=e.replace(/\*/g,"%"),o.input("key",u.NVarChar(100),e),r!=null&&(r=r.replace(/\*/g,"%"),o.input("notkey",u.NVarChar(100),r),s+=" AND [key] NOT LIKE @notkey"),o.query(s,(E,a)=>{const i=[];if(!E&&a&&a.rowsAffected[0]>0)for(let t=0;t<a.recordset.length;t++)i.push(a.recordset[t].key);n(E,i)})}set(e,r,n){const o=new u.Request(this.db);if(e.length>100)n("Your Key can only be 100 chars");else{const s="MERGE [store] t USING (SELECT @key [key], @value [value]) s ON t.[key] = s.[key] WHEN MATCHED AND s.[value] IS NOT NULL THEN UPDATE SET t.[value] = s.[value] WHEN NOT MATCHED THEN INSERT ([key], [value]) VALUES (s.[key], s.[value]);";o.input("key",u.NVarChar(100),e),o.input("value",u.NText,r),o.query(s,(E,a)=>{n(E?E.toString():"")})}}remove(e,r){const n=new u.Request(this.db);n.input("key",u.NVarChar(100),e),n.query("DELETE FROM [store] WHERE [key] = @key",r)}doBulk(e,r){const o=new u.Request(this.db);let s=!0,E=!0;const a=[];let i="DELETE FROM [store] WHERE [key] IN (";for(const t in e)e[t].type==="set"?(s?(a.push("BEGIN TRANSACTION;"),s=!1):Number(t)%100===0&&a.push(`
|
|
2
|
-
COMMIT TRANSACTION;
|
|
3
|
-
BEGIN TRANSACTION;
|
|
4
|
-
`),a.push(`MERGE [store] t USING (SELECT '${e[t].key}' [key], '${e[t].value}' [value]) s`,"ON t.[key] = s.[key]","WHEN MATCHED AND s.[value] IS NOT NULL THEN UPDATE SET t.[value] = s.[value]","WHEN NOT MATCHED THEN INSERT ([key], [value]) VALUES (s.[key], s.[value]);")):e[t].type==="remove"&&(E||(i+=","),E=!1,i+=`'${e[t].key}'`);i+=");",a.push("COMMIT TRANSACTION;"),v.default.parallel([t=>{s?t():o.batch(a.join(`
|
|
5
|
-
`),(l,c)=>{l&&t(l),t(l,c)})},t=>{E?t():o.query(i,t)}],(t,l)=>{t&&r(t),r(t,l)})}close(e){this.db&&this.db.close(e)}};exports.Database=A;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var c=Object.defineProperty;var h=(i,t,e)=>t in i?c(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var l=(i,t,e)=>(h(i,typeof t!="symbol"?t+"":t,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../lib/AbstractDatabase.cjs");require("crypto");require("../node_modules/events/events.cjs");require("../node_modules/buffer/index.cjs");const E=require("util");require("../node_modules/string_decoder/lib/string_decoder.cjs");const A=class extends u{constructor(t){super();l(this,"_mysqlSettings");l(this,"_pool");this.logger=console,this._mysqlSettings={charset:"utf8mb4",...t},this.settings={engine:"InnoDB",bulkLimit:100,json:!0,queryTimeout:6e4},this._pool=null}get isAsync(){return!0}async _query(t){try{return await new Promise((e,r)=>{t={timeout:this.settings.queryTimeout,...t},this._pool&&this._pool.query(t,(s,...n)=>s!=null?r(s):e(n))})}catch(e){throw this.logger.error(`${e.fatal?"Fatal ":""}MySQL error: ${e.stack||e}`),e}}async init(){this._pool=(void 0)(this._mysqlSettings);const{database:t,charset:e}=this._mysqlSettings,r=`CREATE TABLE IF NOT EXISTS \`store\` ( \`key\` VARCHAR( 100 ) NOT NULL COLLATE utf8mb4_bin, \`value\` LONGTEXT COLLATE utf8mb4_bin NOT NULL , PRIMARY KEY ( \`key\` ) ) ENGINE=${this.settings.engine} CHARSET=utf8mb4 COLLATE=utf8mb4_bin;`,s="ALTER TABLE store MODIFY `key` VARCHAR(100) COLLATE utf8mb4_bin;";await this._query({sql:r});const n=`SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${t}'`;let[a]=await this._query({sql:n});a=JSON.parse(JSON.stringify(a)),a[0].DEFAULT_CHARACTER_SET_NAME!==e&&(this.logger.error(`Database is not configured with charset ${e} -- This may lead to crashes when certain characters are pasted in pads`),this.logger.log(a[0],e)),a[0].DEFAULT_COLLATION_NAME.indexOf(e)===-1&&(this.logger.error(`Database is not configured with collation name that includes ${e} -- This may lead to crashes when certain characters are pasted in pads`),this.logger.log(a[0],e,a[0].DEFAULT_COLLATION_NAME));const o=`SELECT CCSA.character_set_name AS character_set_name FROM information_schema.\`TABLES\` T,information_schema.\`COLLATION_CHARACTER_SET_APPLICABILITY\` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = '${t}' AND T.table_name = 'store'`;[a]=await this._query({sql:o}),a[0]||this.logger.warn("Data has no character_set_name value -- This may lead to crashes when certain characters are pasted in pads"),a[0]&&a[0].character_set_name!==e&&(this.logger.error(`table is not configured with charset ${e} -- This may lead to crashes when certain characters are pasted in pads`),this.logger.log(a[0],e)),await this.get("MYSQL_MIGRATION_LEVEL")!=="1"&&(await this._query({sql:s}),await this.set("MYSQL_MIGRATION_LEVEL","1"))}async get(t){const[e]=await this._query({sql:"SELECT `value` FROM `store` WHERE `key` = ? AND BINARY `key` = ?",values:[t,t]});return e.length===1?e[0].value:null}async findKeys(t,e){let r="SELECT `key` FROM `store` WHERE `key` LIKE ?";const s=[];t=t.replace(/\*/g,"%"),s.push(t),e!=null&&(e=e.replace(/\*/g,"%"),r+=" AND `key` NOT LIKE ?",s.push(e));const[n]=await this._query({sql:r,values:s});return n.map(a=>a.key)}async set(t,e){if(t.length>100)throw new Error("Your Key can only be 100 chars");await this._query({sql:"REPLACE INTO `store` VALUES (?,?)",values:[t,e]})}async remove(t){await this._query({sql:"DELETE FROM `store` WHERE `key` = ? AND BINARY `key` = ?",values:[t,t]})}async doBulk(t){const e=[],r=[];for(const s of t)switch(s.type){case"set":e.push([s.key,s.value]);break;case"remove":r.push(s.key);break;default:throw new Error(`unknown op type: ${s.type}`)}await Promise.all([e.length?this._query({sql:"REPLACE INTO `store` VALUES ?;",values:[e]}):null,r.length?this._query({sql:"DELETE FROM `store` WHERE `key` IN (?) AND BINARY `key` IN (?);",values:[r,r]}):null])}async close(){await E.promisify(this._pool.end.bind(this._pool))()}};exports.Database=A;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var c=Object.defineProperty;var T=(E,e,t)=>e in E?c(E,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):E[e]=t;var l=(E,e,t)=>(T(E,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../lib/AbstractDatabase.cjs"),y=require("../node_modules/async/dist/async.cjs");require("../node_modules/pg/lib/client.cjs");require("../node_modules/pg/lib/defaults.cjs");require("../node_modules/pg/lib/connection.cjs");require("../node_modules/events/events.cjs");require("../node_modules/pg-protocol/dist/index.cjs");require("../node_modules/pg-types/index.cjs");require("../node_modules/pg/lib/type-overrides.cjs");require("util");require("../node_modules/pg/lib/connection-parameters.cjs");const d=class extends p{constructor(e){super();l(this,"db");l(this,"upsertStatement");typeof e=="string"&&(e={connectionString:e}),this.settings=e,this.settings.cache=e.cache||1e3,this.settings.writeInterval=100,this.settings.json=!0,this.settings.max=this.settings.max||20,this.settings.min=this.settings.min||4,this.settings.idleTimeoutMillis=this.settings.idleTimeoutMillis||1e3,this.db=new(void 0)(this.settings)}init(e){const t="SELECT 1 as exists FROM pg_tables WHERE tablename = 'store'",n='CREATE TABLE IF NOT EXISTS store ("key" character varying(100) NOT NULL, "value" text NOT NULL, CONSTRAINT store_pkey PRIMARY KEY (key))';this.upsertStatement=null;const r=s=>{const o="SELECT ueberdb_insert_or_update($1,$2)",u="INSERT INTO store(key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = excluded.value",a="CREATE OR REPLACE FUNCTION ueberdb_insert_or_update(character varying, text) RETURNS void AS $$ BEGIN IF EXISTS( SELECT * FROM store WHERE key = $1 ) THEN UPDATE store SET value = $2 WHERE key = $1; ELSE INSERT INTO store(key,value) VALUES( $1, $2 ); END IF; RETURN; END; $$ LANGUAGE plpgsql;",i=`EXPLAIN ${u}`;this.db.query(i,["test-key","test-value"],h=>{if(h){this.upsertStatement=o,this.db.query(a,[],s);return}this.upsertStatement=u,s()})};this.db.query(t,(s,o)=>{if(s!=null)return e(s);o.rows.length===0?this.db.query(n,u=>{if(u!=null)return e(u);r(e)}):r(e)})}get(e,t){this.db.query("SELECT value FROM store WHERE key=$1",[e],(n,r)=>{let s=null;!n&&r.rows.length===1&&(s=r.rows[0].value),t(n,s)})}findKeys(e,t,n){let r="SELECT key FROM store WHERE key LIKE $1";const s=[];e=e.replace(/\*/g,"%"),s.push(e),t!=null&&(t=t.replace(/\*/g,"%"),r+=" AND key NOT LIKE $2",s.push(t)),this.db.query(r,s,(o,u)=>{const a=[];!o&&u.rows.length>0&&u.rows.forEach(i=>{a.push(i.key)}),n(o,a)})}set(e,t,n){if(e.length>100){const r="";n(Error("Your Key can only be 100 chars"),r)}else this.upsertStatement!=null&&this.db.query(this.upsertStatement,[e,t],n)}remove(e,t){this.db.query("DELETE FROM store WHERE key=$1",[e],t)}doBulk(e,t){const n=[];let r="DELETE FROM store WHERE key IN (";const s=[];let o=0;for(const i in e)e[i].type==="set"?n.push([e[i].key,e[i].value]):e[i].type==="remove"&&(o!==0&&(r+=","),o+=1,r+=`$${o}`,s.push(e[i].key));if(r+=");",!this.upsertStatement)return;const u=n.map(i=>h=>this.db.query(this.upsertStatement,i,h)),a=i=>{s.length>1?i():this.db.query(r,s,i)};u.push(a),y.default.parallel(u,t)}close(e){this.db.end(e)}};exports.Database=d;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var h=Object.defineProperty;var o=(l,i,t)=>i in l?h(l,i,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[i]=t;var u=(l,i,t)=>(o(l,typeof i!="symbol"?i+"":i,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("../lib/AbstractDatabase.cjs");require("../node_modules/redis/dist/index.cjs");const a=require("../_virtual/index.cjs"),f=class extends _{constructor(t){super();u(this,"_client");this._client=null,this.settings=t||{}}get isAsync(){return!0}async init(){if(this.settings.url)this._client=a.__exports.createClient({url:this.settings.url});else if(this.settings.host){const t={socket:{host:this.settings.host,port:Number(this.settings.port)}};this.settings.password&&(t.password=this.settings.password),this.settings.user&&(t.username=this.settings.user),this._client=a.__exports.createClient(t)}this._client&&(await this._client.connect(),await this._client.ping())}async get(t){return this._client==null?null:await this._client.get(t)}async findKeys(t,e){if(this._client==null)return null;const[s]=/^([^:*]+):\*$/.exec(t)||[];if(s!=null&&["*:*:*",`${t}:*`].includes(e))return await this._client.sMembers(`ueberDB:keys:${s}`);let r=await this._client.keys(t.replace(/[?[\]\\]/g,"\\$&"));if(e!=null){const c=this.createFindRegex(t,e);r=r.filter(n=>c.test(n))}return r}async set(t,e){if(this._client==null)return null;const s=/^([^:]+):([^:]+)$/.exec(t);await Promise.all([s&&this._client.sAdd(`ueberDB:keys:${s[1]}`,s[0]),this._client.set(t,e)])}async remove(t){if(this._client==null)return null;const e=/^([^:]+):([^:]+)$/.exec(t);await Promise.all([e&&this._client.sRem(`ueberDB:keys:${e[1]}`,e[0]),this._client.del(t)])}async doBulk(t){if(this._client==null)return null;const e=this._client.multi();for(const{key:s,type:r,value:c}of t){const n=/^([^:]+):([^:]+)$/.exec(s);r==="set"?(n&&e.sAdd(`ueberDB:keys:${n[1]}`,n[0]),e.set(s,c)):r==="remove"&&(n&&e.sRem(`ueberDB:keys:${n[1]}`,n[0]),e.del(s))}await e.exec()}async close(){if(this._client==null)return null;await this._client.quit(),this._client=null}};exports.Database=f;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var l=Object.defineProperty;var h=(s,t,e)=>t in s?l(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var r=(s,t,e)=>(h(s,typeof t!="symbol"?t+"":t,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("../lib/AbstractDatabase.cjs"),c=require("../node_modules/rethinkdb/rethinkdb.cjs"),u=require("../node_modules/async/dist/async.cjs"),d=class extends b{constructor(t){super();r(this,"host");r(this,"db");r(this,"port");r(this,"table");r(this,"connection");t||(t={}),t.host||(t.host="localhost"),t.port||(t.port=28015),t.db||(t.db="test"),t.table||(t.table="test"),this.host=t.host,this.db=t.db,this.port=t.port,this.table=t.table,this.connection=null}init(t){c.connect(this,(e,o)=>{if(e)throw e;this.connection=o,c.table(this.table).run(this.connection,(i,n)=>{i?c.tableCreate(this.table).run(this.connection,t):t&&t(null,n)})})}get(t,e){c.table(this.table).get(t).run(this.connection,(o,i)=>{e(o,i&&i.content)})}findKeys(t,e,o){const i=[],n=this.createFindRegex(t,e);c.filter(a=>{a.id.search(n)!==-1&&i.push(a.id)}).run(this.connection,o)}set(t,e,o){c.table(this.table).insert({id:t,content:e},{conflict:"replace"}).run(this.connection,o)}doBulk(t,e){const o=[],i=[];for(const n in t)t[n].type==="set"?o.push({id:t[n].key,content:t[n].value}):t[n].type==="remove"&&i.push(t[n].key);u.default.parallel([n=>{c.table(this.table).insert(o,{conflict:"replace"}).run(this.connection,n)},n=>{c.table(this.table).getAll(i).delete().run(this.connection,n)}],e)}remove(t,e){c.table(this.table).get(t).delete().run(this.connection,e)}close(t){this.connection&&this.connection.close(t)}};exports.Database=d;
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";var f=Object.defineProperty;var d=(n,a,e)=>a in n?f(n,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[a]=e;var h=(n,a,e)=>(d(n,typeof a!="symbol"?a+"":a,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("../lib/AbstractDatabase.cjs"),b=require("util");let c;try{c=require("sqlite3").Database}catch{throw new Error(`sqlite3 not found. It was removed from ueberdb's dependencies because it requires compilation which fails on several systems. If you still want to use sqlite, run "npm install sqlite3" in your etherpad-lite ./src directory.`)}const l=n=>`'${n.replace(/'/g,"''")}'`,m=class extends T{constructor(e){super();h(this,"db");this.db=null,(!e||!e.filename)&&(e={filename:":memory:"}),this.settings=e,e.filename===":memory:"?(this.settings.cache=0,this.settings.writeInterval=0,this.settings.json=!0):(this.settings.cache=1e3,this.settings.writeInterval=100,this.settings.json=!0)}init(e){b.callbackify(async()=>{this.db=new c(this.settings.filename),await this._query("CREATE TABLE IF NOT EXISTS store (key TEXT PRIMARY KEY, value TEXT)")})(e)}async _query(e,s=[]){return await new Promise((i,t)=>{this.db&&this.db.all(e,s,(r,o)=>{if(r!=null)return t(r);i(o)})})}_queryCb(e,s,i){const t=this._query(e,s);i&&t.then(r=>i(null,r),r=>i(r||new Error(r)))}get(e,s){this._queryCb("SELECT value FROM store WHERE key = ?",[e],(i,t)=>s(i,i==null&&t&&t.length?t[0].value:null))}findKeys(e,s,i){let t="SELECT key FROM store WHERE key LIKE ?";const r=[];e=e.replace(/\*/g,"%"),r.push(e),s!=null&&(s=s.replace(/\*/g,"%"),t+=" AND key NOT LIKE ?",r.push(s)),this._queryCb(t,r,(o,u)=>{const E=[];!o&&Object.keys(u).length>0&&u.forEach(y=>{E.push(y.key)}),i(o,E)})}set(e,s,i){this._queryCb("REPLACE INTO store VALUES (?,?)",[e,s],i)}remove(e,s){this._queryCb("DELETE FROM store WHERE key = ?",[e],s)}doBulk(e,s){let i=`BEGIN TRANSACTION;
|
|
2
|
-
`;for(const t in e)e[t].type==="set"?i+=`REPLACE INTO store VALUES (${l(e[t].key)}, ${l(e[t].value)});
|
|
3
|
-
`:e[t].type==="remove"&&(i+=`DELETE FROM store WHERE key = ${l(e[t].key)};
|
|
4
|
-
`);i+="END TRANSACTION;",this.db&&this.db.exec(i,t=>{t&&(console.error("ERROR WITH SQL: "),console.error(i)),s(t)})}close(e){e(),this.db&&this.db.close(s=>e(s))}};exports.Database=m;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var i=Object.defineProperty;var l=(r,e,t)=>e in r?i(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var o=(r,e,t)=>(l(r,typeof e!="symbol"?e+"":e,t),t);const g=require("./logging.cjs"),a=g.normalizeLogger(null),s=r=>r.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");class c{constructor(){o(this,"logger");o(this,"settings");if(new.target===module.exports)throw new TypeError("cannot instantiate Abstract Database directly");for(const e of["init","close","get","findKeys","remove","set"])if(typeof this[e]!="function")throw new TypeError(`method ${e} not defined`);this.logger=a}createFindRegex(e,t){let n=`^(?=${s(e)}$)`;return t!=null&&(n+=`(?!${s(t)}$)`),new RegExp(n)}doBulk(e,t){throw new Error("the doBulk method must be implemented if write caching is enabled")}get isAsync(){return!1}}module.exports=c;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|