lakutata 2.0.65 → 2.0.67

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.
Files changed (213) hide show
  1. package/com/cacher.cjs +1 -1
  2. package/com/cacher.d.ts +4 -4
  3. package/com/cacher.mjs +1 -1
  4. package/com/database.cjs +0 -2
  5. package/com/database.d.ts +4 -4
  6. package/com/database.mjs +0 -2
  7. package/com/docker.d.ts +5 -5
  8. package/com/entrypoint.cjs +3 -1
  9. package/com/entrypoint.d.ts +2 -2
  10. package/com/entrypoint.mjs +3 -1
  11. package/com/logger.d.ts +1 -1
  12. package/com/monitor.d.ts +2 -2
  13. package/decorator/asst.d.ts +1 -1
  14. package/decorator/ctrl.cjs +3 -1
  15. package/decorator/ctrl.d.ts +4 -4
  16. package/decorator/ctrl.mjs +3 -1
  17. package/decorator/di.d.ts +3 -3
  18. package/decorator/dto.d.ts +3 -3
  19. package/decorator/orm.cjs +86 -88
  20. package/decorator/orm.d.ts +51 -75
  21. package/decorator/orm.mjs +44 -46
  22. package/helper.cjs +24 -18
  23. package/helper.d.ts +129 -3
  24. package/helper.mjs +6 -2
  25. package/lakutata.cjs +3 -1
  26. package/lakutata.d.ts +10 -10
  27. package/lakutata.mjs +3 -1
  28. package/orm.cjs +1075 -112
  29. package/orm.d.ts +6 -6
  30. package/orm.mjs +1015 -17
  31. package/package.json +1 -1
  32. package/provider/database.cjs +0 -2
  33. package/provider/database.d.ts +4 -4
  34. package/provider/database.mjs +0 -2
  35. package/provider/passwordHash.d.ts +1 -1
  36. package/src/components/Database.cjs +0 -2
  37. package/src/components/Database.mjs +0 -2
  38. package/src/components/cacher/Cacher.cjs +1 -1
  39. package/src/components/cacher/Cacher.mjs +1 -1
  40. package/src/components/cacher/adapters/CreateFileCacheAdapter.cjs +1 -1
  41. package/src/components/cacher/adapters/CreateFileCacheAdapter.mjs +1 -1
  42. package/src/components/cacher/adapters/CreateMemcacheCacheAdapter.cjs +2 -2
  43. package/src/components/cacher/adapters/CreateMemcacheCacheAdapter.mjs +2 -2
  44. package/src/components/cacher/adapters/CreateMongoCacheAdapter.cjs +2 -2
  45. package/src/components/cacher/adapters/CreateMongoCacheAdapter.mjs +2 -2
  46. package/src/components/cacher/adapters/CreateMysqlCacheAdapter.cjs +2 -2
  47. package/src/components/cacher/adapters/CreateMysqlCacheAdapter.mjs +2 -2
  48. package/src/components/cacher/adapters/CreatePostgresCacheAdapter.cjs +2 -2
  49. package/src/components/cacher/adapters/CreatePostgresCacheAdapter.mjs +2 -2
  50. package/src/components/cacher/adapters/CreateRedisCacheAdapter.cjs +2 -2
  51. package/src/components/cacher/adapters/CreateRedisCacheAdapter.mjs +2 -2
  52. package/src/components/cacher/adapters/CreateSqliteCacheAdapter.cjs +2 -2
  53. package/src/components/cacher/adapters/CreateSqliteCacheAdapter.mjs +2 -2
  54. package/src/components/entrypoint/Entrypoint.cjs +3 -1
  55. package/src/components/entrypoint/Entrypoint.mjs +3 -1
  56. package/src/decorators/ctrl/CLIAction.cjs +7 -5
  57. package/src/decorators/ctrl/CLIAction.mjs +3 -1
  58. package/src/decorators/ctrl/HTTPAction.cjs +8 -6
  59. package/src/decorators/ctrl/HTTPAction.mjs +3 -1
  60. package/src/decorators/ctrl/ServiceAction.cjs +3 -1
  61. package/src/decorators/ctrl/ServiceAction.mjs +7 -5
  62. package/src/decorators/ctrl/http/DELETE.cjs +3 -1
  63. package/src/decorators/ctrl/http/DELETE.mjs +3 -1
  64. package/src/decorators/ctrl/http/GET.cjs +3 -1
  65. package/src/decorators/ctrl/http/GET.mjs +3 -1
  66. package/src/decorators/ctrl/http/HEAD.cjs +3 -1
  67. package/src/decorators/ctrl/http/HEAD.mjs +3 -1
  68. package/src/decorators/ctrl/http/OPTIONS.cjs +3 -1
  69. package/src/decorators/ctrl/http/OPTIONS.mjs +3 -1
  70. package/src/decorators/ctrl/http/PATCH.cjs +3 -1
  71. package/src/decorators/ctrl/http/PATCH.mjs +3 -1
  72. package/src/decorators/ctrl/http/POST.cjs +3 -1
  73. package/src/decorators/ctrl/http/POST.mjs +3 -1
  74. package/src/decorators/ctrl/http/PUT.cjs +3 -1
  75. package/src/decorators/ctrl/http/PUT.mjs +3 -1
  76. package/src/decorators/orm/AfterInsert.cjs +27 -7
  77. package/src/decorators/orm/AfterInsert.mjs +28 -6
  78. package/src/decorators/orm/AfterLoad.cjs +27 -7
  79. package/src/decorators/orm/AfterLoad.mjs +28 -6
  80. package/src/decorators/orm/AfterRecover.cjs +27 -7
  81. package/src/decorators/orm/AfterRecover.mjs +28 -6
  82. package/src/decorators/orm/AfterRemove.cjs +27 -7
  83. package/src/decorators/orm/AfterRemove.mjs +28 -6
  84. package/src/decorators/orm/AfterSoftRemove.cjs +27 -7
  85. package/src/decorators/orm/AfterSoftRemove.mjs +28 -6
  86. package/src/decorators/orm/AfterUpdate.cjs +27 -7
  87. package/src/decorators/orm/AfterUpdate.mjs +28 -6
  88. package/src/decorators/orm/BeforeInsert.cjs +27 -7
  89. package/src/decorators/orm/BeforeInsert.mjs +28 -6
  90. package/src/decorators/orm/BeforeRecover.cjs +27 -7
  91. package/src/decorators/orm/BeforeRecover.mjs +28 -6
  92. package/src/decorators/orm/BeforeRemove.cjs +27 -7
  93. package/src/decorators/orm/BeforeRemove.mjs +28 -6
  94. package/src/decorators/orm/BeforeSoftRemove.cjs +27 -7
  95. package/src/decorators/orm/BeforeSoftRemove.mjs +28 -6
  96. package/src/decorators/orm/BeforeUpdate.cjs +27 -7
  97. package/src/decorators/orm/BeforeUpdate.mjs +28 -6
  98. package/src/decorators/orm/Check.cjs +30 -7
  99. package/src/decorators/orm/Check.mjs +31 -6
  100. package/src/decorators/orm/ChildEntity.cjs +30 -7
  101. package/src/decorators/orm/ChildEntity.mjs +31 -6
  102. package/src/decorators/orm/Column.cjs +62 -7
  103. package/src/decorators/orm/Column.mjs +63 -6
  104. package/src/decorators/orm/CreateDateColumn.cjs +26 -7
  105. package/src/decorators/orm/CreateDateColumn.mjs +27 -6
  106. package/src/decorators/orm/DeleteDateColumn.cjs +26 -7
  107. package/src/decorators/orm/DeleteDateColumn.mjs +27 -6
  108. package/src/decorators/orm/Entity.cjs +36 -7
  109. package/src/decorators/orm/Entity.mjs +37 -6
  110. package/src/decorators/orm/EventSubscriber.cjs +23 -7
  111. package/src/decorators/orm/EventSubscriber.mjs +24 -6
  112. package/src/decorators/orm/Exclusion.cjs +30 -7
  113. package/src/decorators/orm/Exclusion.mjs +31 -6
  114. package/src/decorators/orm/Generated.cjs +25 -7
  115. package/src/decorators/orm/Generated.mjs +26 -6
  116. package/src/decorators/orm/Index.cjs +42 -7
  117. package/src/decorators/orm/Index.mjs +43 -6
  118. package/src/decorators/orm/JoinColumn.cjs +30 -7
  119. package/src/decorators/orm/JoinColumn.mjs +31 -6
  120. package/src/decorators/orm/JoinTable.cjs +31 -7
  121. package/src/decorators/orm/JoinTable.mjs +32 -6
  122. package/src/decorators/orm/ManyToMany.cjs +43 -7
  123. package/src/decorators/orm/ManyToMany.mjs +44 -6
  124. package/src/decorators/orm/ManyToOne.cjs +43 -7
  125. package/src/decorators/orm/ManyToOne.mjs +44 -6
  126. package/src/decorators/orm/ObjectIdColumn.cjs +29 -7
  127. package/src/decorators/orm/ObjectIdColumn.mjs +30 -6
  128. package/src/decorators/orm/OneToMany.cjs +35 -7
  129. package/src/decorators/orm/OneToMany.mjs +36 -6
  130. package/src/decorators/orm/OneToOne.cjs +43 -7
  131. package/src/decorators/orm/OneToOne.mjs +44 -6
  132. package/src/decorators/orm/PrimaryColumn.cjs +50 -7
  133. package/src/decorators/orm/PrimaryColumn.mjs +51 -6
  134. package/src/decorators/orm/PrimaryGeneratedColumn.cjs +55 -7
  135. package/src/decorators/orm/PrimaryGeneratedColumn.mjs +56 -6
  136. package/src/decorators/orm/RelationId.cjs +27 -7
  137. package/src/decorators/orm/RelationId.mjs +28 -6
  138. package/src/decorators/orm/TableInheritance.cjs +27 -7
  139. package/src/decorators/orm/TableInheritance.mjs +28 -6
  140. package/src/decorators/orm/Tree.cjs +25 -7
  141. package/src/decorators/orm/Tree.mjs +26 -6
  142. package/src/decorators/orm/TreeChildren.cjs +32 -7
  143. package/src/decorators/orm/TreeChildren.mjs +33 -6
  144. package/src/decorators/orm/TreeLevelColumn.cjs +26 -7
  145. package/src/decorators/orm/TreeLevelColumn.mjs +27 -6
  146. package/src/decorators/orm/TreeParent.cjs +32 -7
  147. package/src/decorators/orm/TreeParent.mjs +33 -6
  148. package/src/decorators/orm/Unique.cjs +45 -7
  149. package/src/decorators/orm/Unique.mjs +46 -6
  150. package/src/decorators/orm/UpdateDateColumn.cjs +26 -7
  151. package/src/decorators/orm/UpdateDateColumn.mjs +27 -6
  152. package/src/decorators/orm/VersionColumn.cjs +26 -7
  153. package/src/decorators/orm/VersionColumn.mjs +27 -6
  154. package/src/decorators/orm/ViewColumn.cjs +26 -7
  155. package/src/decorators/orm/ViewColumn.mjs +27 -6
  156. package/src/decorators/orm/ViewEntity.cjs +35 -7
  157. package/src/decorators/orm/ViewEntity.mjs +36 -6
  158. package/src/decorators/orm/VirtualColumn.cjs +43 -7
  159. package/src/decorators/orm/VirtualColumn.mjs +44 -6
  160. package/src/lib/base/internal/ControllerEntrypoint.cjs +70 -610
  161. package/src/lib/base/internal/ControllerEntrypoint.mjs +87 -627
  162. package/src/lib/base/internal/StringifyPattern.cjs +1 -1
  163. package/src/lib/base/internal/StringifyPattern.mjs +1 -1
  164. package/src/lib/core/Application.cjs +3 -1
  165. package/src/lib/core/Application.mjs +3 -1
  166. package/src/lib/helpers/MD5.cjs +1 -1
  167. package/src/lib/helpers/MD5.mjs +1 -1
  168. package/src/lib/helpers/SHA1.cjs +1 -1
  169. package/src/lib/helpers/SHA1.mjs +1 -1
  170. package/src/lib/helpers/SHA256.cjs +1 -1
  171. package/src/lib/helpers/SHA256.mjs +1 -1
  172. package/src/lib/helpers/SortArray.cjs +1 -1
  173. package/src/lib/helpers/SortArray.mjs +1 -1
  174. package/src/lib/helpers/UUID.cjs +45 -0
  175. package/src/lib/helpers/UUID.mjs +39 -0
  176. package/src/providers/Database.cjs +0 -2
  177. package/src/providers/Database.mjs +0 -2
  178. package/vendor/Package.122.cjs +13223 -16706
  179. package/vendor/Package.122.mjs +13498 -16881
  180. package/vendor/Package.19.cjs +184 -195
  181. package/vendor/Package.19.mjs +176 -187
  182. package/vendor/Package.610.cjs +297 -113
  183. package/vendor/Package.610.mjs +285 -97
  184. package/vendor/Package.611.cjs +85 -103
  185. package/vendor/Package.611.mjs +80 -98
  186. package/vendor/Package.612.cjs +100 -121
  187. package/vendor/Package.612.mjs +97 -120
  188. package/vendor/Package.613.cjs +196 -0
  189. package/vendor/Package.613.mjs +180 -0
  190. package/vendor/Package.64.cjs +511 -134
  191. package/vendor/Package.64.mjs +491 -134
  192. package/vendor/Package.65.cjs +140 -4118
  193. package/vendor/Package.65.mjs +140 -4126
  194. package/vendor/Package.66.cjs +4142 -692
  195. package/vendor/Package.66.mjs +4151 -689
  196. package/vendor/Package.67.cjs +571 -535
  197. package/vendor/Package.67.mjs +586 -528
  198. package/vendor/Package.68.cjs +633 -96
  199. package/vendor/Package.68.mjs +619 -94
  200. package/vendor/Package.69.cjs +96 -294
  201. package/vendor/Package.69.mjs +95 -295
  202. package/vendor/TypeDef.internal.1.d.ts +1 -1
  203. package/vendor/TypeDef.internal.10.d.ts +1 -1
  204. package/vendor/TypeDef.internal.11.d.ts +2 -2
  205. package/vendor/TypeDef.internal.12.d.ts +2 -2
  206. package/vendor/TypeDef.internal.13.d.ts +6 -6
  207. package/vendor/TypeDef.internal.3.d.ts +3 -3
  208. package/vendor/TypeDef.internal.4.d.ts +181 -347
  209. package/vendor/TypeDef.internal.5.d.ts +2 -2
  210. package/vendor/TypeDef.internal.6.d.ts +2 -2
  211. package/vendor/TypeDef.internal.7.d.ts +1 -1
  212. package/vendor/TypeDef.internal.8.d.ts +1 -1
  213. package/vendor/TypeDef.internal.9.d.ts +1 -1
@@ -1,139 +1,327 @@
1
1
  import t from "events";
2
2
 
3
- import { promisify as e } from "util";
3
+ import { Buffer as e } from "buffer";
4
4
 
5
- import { i as s } from "./Package.66.mjs";
5
+ import { MongoClient as n, GridFSBucket as s, MongoServerError as a } from "mongodb";
6
6
 
7
- import a from "sqlite3";
7
+ var o = new Set([ "url", "collection", "namespace", "serialize", "deserialize", "uri", "useGridFS", "dialect", "db" ]);
8
8
 
9
- import "buffer";
10
-
11
- var i = t => String(t).search(/^[a-zA-Z]+$/) < 0 ? "_" + t : t;
12
-
13
- var n = class extends t {
14
- ttlSupport;
9
+ var i = class extends t {
10
+ ttlSupport=false;
15
11
  opts;
12
+ connect;
16
13
  namespace;
17
- close;
18
- query;
19
- constructor(t) {
14
+ constructor(t, e) {
20
15
  super();
21
- this.ttlSupport = false;
22
- let s = {
23
- dialect: "sqlite",
24
- uri: "sqlite://:memory:"
25
- };
16
+ t ??= {};
26
17
  if (typeof t === "string") {
27
- s.uri = t;
28
- } else {
29
- s = {
30
- ...s,
18
+ t = {
19
+ url: t
20
+ };
21
+ }
22
+ if (t.uri) {
23
+ t = {
24
+ url: t.uri,
31
25
  ...t
32
26
  };
33
27
  }
34
- s.db = s.uri.replace(/^sqlite:\/\//, "");
35
- s.connect = async () => new Promise(((t, e) => {
36
- const i = new a.Database(s.db, (a => {
37
- if (a) {
38
- e(a);
28
+ this.opts = {
29
+ url: "mongodb://127.0.0.1:27017",
30
+ collection: "keyv",
31
+ ...t,
32
+ ...e
33
+ };
34
+ delete this.opts.emitErrors;
35
+ const a = Object.fromEntries(Object.entries(this.opts).filter((([t]) => !o.has(t))));
36
+ this.opts = Object.fromEntries(Object.entries(this.opts).filter((([t]) => o.has(t))));
37
+ this.connect = new Promise((async (t, e) => {
38
+ try {
39
+ let e = "";
40
+ if (this.opts.url) {
41
+ e = this.opts.url;
42
+ }
43
+ const o = new n(e, a);
44
+ await o.connect();
45
+ const i = o.db(this.opts.db);
46
+ if (this.opts.useGridFS) {
47
+ const e = new s(i, {
48
+ readPreference: this.opts.readPreference,
49
+ bucketName: this.opts.collection
50
+ });
51
+ const n = i.collection(`${this.opts.collection}.files`);
52
+ await n.createIndex({
53
+ uploadDate: -1
54
+ });
55
+ await n.createIndex({
56
+ "metadata.expiresAt": 1
57
+ });
58
+ await n.createIndex({
59
+ "metadata.lastAccessed": 1
60
+ });
61
+ await n.createIndex({
62
+ "metadata.filename": 1
63
+ });
64
+ t({
65
+ bucket: e,
66
+ store: n,
67
+ db: i,
68
+ mongoClient: o
69
+ });
39
70
  } else {
40
- if (s.busyTimeout) {
41
- i.configure("busyTimeout", s.busyTimeout);
71
+ let e = "keyv";
72
+ if (this.opts.collection) {
73
+ e = this.opts.collection;
42
74
  }
43
- t(i);
75
+ const n = i.collection(e);
76
+ await n.createIndex({
77
+ key: 1
78
+ }, {
79
+ unique: true,
80
+ background: true
81
+ });
82
+ await n.createIndex({
83
+ expiresAt: 1
84
+ }, {
85
+ expireAfterSeconds: 0,
86
+ background: true
87
+ });
88
+ t({
89
+ store: n,
90
+ mongoClient: o
91
+ });
44
92
  }
45
- }));
46
- })).then((t => ({
47
- query: e(t.all).bind(t),
48
- close: e(t.close).bind(t)
49
- })));
50
- this.opts = {
51
- table: "keyv",
52
- keySize: 255,
53
- ...s
54
- };
55
- this.opts.table = i(this.opts.table);
56
- const n = `CREATE TABLE IF NOT EXISTS ${this.opts.table}(key VARCHAR(${Number(this.opts.keySize)}) PRIMARY KEY, value TEXT )`;
57
- const o = this.opts.connect().then((async t => t.query(n).then((() => t)))).catch((t => this.emit("error", t)));
58
- this.query = async (t, ...e) => o.then((async s => s.query(t, ...e)));
59
- this.close = async () => o.then((t => t.close()));
93
+ } catch (t) {
94
+ this.emit("error", t);
95
+ }
96
+ }));
60
97
  }
61
98
  async get(t) {
62
- const e = `SELECT * FROM ${this.opts.table} WHERE key = ?`;
63
- const s = await this.query(e, t);
64
- const a = s[0];
65
- if (a === void 0) {
99
+ const n = await this.connect;
100
+ if (this.opts.useGridFS) {
101
+ await n.store.updateOne({
102
+ filename: t
103
+ }, {
104
+ $set: {
105
+ "metadata.lastAccessed": new Date
106
+ }
107
+ });
108
+ const s = n.bucket.openDownloadStreamByName(t);
109
+ return new Promise((t => {
110
+ const n = [];
111
+ s.on("error", (() => {
112
+ t(void 0);
113
+ }));
114
+ s.on("end", (() => {
115
+ const s = e.concat(n).toString("utf8");
116
+ t(s);
117
+ }));
118
+ s.on("data", (t => {
119
+ n.push(t);
120
+ }));
121
+ }));
122
+ }
123
+ const s = await n.store.findOne({
124
+ key: {
125
+ $eq: t
126
+ }
127
+ });
128
+ if (!s) {
66
129
  return void 0;
67
130
  }
68
- return a.value;
131
+ return s.value;
69
132
  }
70
133
  async getMany(t) {
71
- const e = `SELECT * FROM ${this.opts.table} WHERE key IN (SELECT value FROM json_each(?))`;
72
- const s = await this.query(e, JSON.stringify(t));
73
- return t.map((t => {
74
- const e = s.find((e => e.key === t));
75
- return e ? e.value : void 0;
76
- }));
134
+ if (this.opts.useGridFS) {
135
+ const e = [];
136
+ for (const n of t) {
137
+ e.push(this.get(n));
138
+ }
139
+ const n = await Promise.allSettled(e);
140
+ const s = [];
141
+ for (const t of n) {
142
+ s.push(t.value);
143
+ }
144
+ return s;
145
+ }
146
+ const e = await this.connect;
147
+ const n = await e.store.s.db.collection(this.opts.collection).find({
148
+ key: {
149
+ $in: t
150
+ }
151
+ }).project({
152
+ _id: 0,
153
+ value: 1,
154
+ key: 1
155
+ }).toArray();
156
+ const s = [ ...t ];
157
+ let a = 0;
158
+ for (const e of t) {
159
+ const t = n.findIndex((t => t.key === e));
160
+ s[a] = t > -1 ? n[t].value : void 0;
161
+ a++;
162
+ }
163
+ return s;
77
164
  }
78
- async set(t, e) {
79
- const s = `INSERT INTO ${this.opts.table} (key, value)\n\t\t\tVALUES(?, ?) \n\t\t\tON CONFLICT(key) \n\t\t\tDO UPDATE SET value=excluded.value;`;
80
- return this.query(s, t, e);
165
+ async set(t, e, n) {
166
+ const s = typeof n === "number" ? new Date(Date.now() + n) : null;
167
+ if (this.opts.useGridFS) {
168
+ const n = await this.connect;
169
+ const a = n.bucket.openUploadStream(t, {
170
+ metadata: {
171
+ expiresAt: s,
172
+ lastAccessed: new Date
173
+ }
174
+ });
175
+ return new Promise((t => {
176
+ a.on("finish", (() => {
177
+ t(a);
178
+ }));
179
+ a.end(e);
180
+ }));
181
+ }
182
+ const a = await this.connect;
183
+ await a.store.updateOne({
184
+ key: {
185
+ $eq: t
186
+ }
187
+ }, {
188
+ $set: {
189
+ key: t,
190
+ value: e,
191
+ expiresAt: s
192
+ }
193
+ }, {
194
+ upsert: true
195
+ });
81
196
  }
82
197
  async delete(t) {
83
- const e = `SELECT * FROM ${this.opts.table} WHERE key = ?`;
84
- const s = `DELETE FROM ${this.opts.table} WHERE key = ?`;
85
- const a = await this.query(e, t);
86
- const i = a[0];
87
- if (i === void 0) {
198
+ if (typeof t !== "string") {
88
199
  return false;
89
200
  }
90
- await this.query(s, t);
91
- return true;
201
+ const e = await this.connect;
202
+ if (this.opts.useGridFS) {
203
+ try {
204
+ const n = e.db;
205
+ const a = new s(n, {
206
+ bucketName: this.opts.collection
207
+ });
208
+ const o = await a.find({
209
+ filename: t
210
+ }).toArray();
211
+ await e.bucket.delete(o[0]._id);
212
+ return true;
213
+ } catch {
214
+ return false;
215
+ }
216
+ }
217
+ const n = await e.store.deleteOne({
218
+ key: {
219
+ $eq: t
220
+ }
221
+ });
222
+ return n.deletedCount > 0;
92
223
  }
93
224
  async deleteMany(t) {
94
- const e = `DELETE FROM ${this.opts.table} WHERE key IN (SELECT value FROM json_each(?))`;
95
- const s = await this.getMany(t);
96
- if (s.every((t => t === void 0))) {
97
- return false;
225
+ const e = await this.connect;
226
+ if (this.opts.useGridFS) {
227
+ const n = e.db;
228
+ const a = new s(n, {
229
+ bucketName: this.opts.collection
230
+ });
231
+ const o = await a.find({
232
+ filename: {
233
+ $in: t
234
+ }
235
+ }).toArray();
236
+ if (o.length === 0) {
237
+ return false;
238
+ }
239
+ await Promise.all(o.map((async t => e.bucket.delete(t._id))));
240
+ return true;
98
241
  }
99
- await this.query(e, JSON.stringify(t));
100
- return true;
242
+ const n = await e.store.deleteMany({
243
+ key: {
244
+ $in: t
245
+ }
246
+ });
247
+ return n.deletedCount > 0;
101
248
  }
102
249
  async clear() {
103
- const t = `DELETE FROM ${this.opts.table} WHERE key LIKE ?`;
104
- await this.query(t, this.namespace ? `${this.namespace}:%` : "%");
105
- }
106
- async* iterator(t) {
107
- const e = Number.parseInt(this.opts.iterationLimit, 10) || 10;
108
- async function* s(a, i, n) {
109
- const o = `SELECT * FROM ${i.table} WHERE key LIKE ? LIMIT ? OFFSET ?`;
110
- const r = await n(o, [ `${t ? t + ":" : ""}%`, e, a ]);
111
- const c = [ ...r ];
112
- if (c.length === 0) {
113
- return;
250
+ const t = await this.connect;
251
+ if (this.opts.useGridFS) {
252
+ try {
253
+ await t.bucket.drop();
254
+ } catch (t) {
255
+ if (!(t instanceof a && t.code === 26)) {
256
+ throw t;
257
+ }
114
258
  }
115
- for (const t of c) {
116
- a += 1;
117
- yield [ t.key, t.value ];
259
+ }
260
+ await t.store.deleteMany({
261
+ key: {
262
+ $regex: this.namespace ? `^${this.namespace}:*` : ""
118
263
  }
119
- yield* s(a, i, n);
264
+ });
265
+ }
266
+ async clearExpired() {
267
+ if (!this.opts.useGridFS) {
268
+ return false;
120
269
  }
121
- yield* s(0, this.opts, this.query);
270
+ return this.connect.then((async t => {
271
+ const e = t.db;
272
+ const n = new s(e, {
273
+ bucketName: this.opts.collection
274
+ });
275
+ return n.find({
276
+ "metadata.expiresAt": {
277
+ $lte: new Date(Date.now())
278
+ }
279
+ }).toArray().then((async e => Promise.all(e.map((async e => t.bucket.delete(e._id)))).then((() => true))));
280
+ }));
281
+ }
282
+ async clearUnusedFor(t) {
283
+ if (!this.opts.useGridFS) {
284
+ return false;
285
+ }
286
+ const e = await this.connect;
287
+ const n = e.db;
288
+ const a = new s(n, {
289
+ bucketName: this.opts.collection
290
+ });
291
+ const o = await a.find({
292
+ "metadata.lastAccessed": {
293
+ $lte: new Date(Date.now() - t * 1e3)
294
+ }
295
+ }).toArray();
296
+ await Promise.all(o.map((async t => e.bucket.delete(t._id))));
297
+ return true;
298
+ }
299
+ async* iterator(t) {
300
+ const e = await this.connect;
301
+ const n = new RegExp(`^${t ? t + ":" : ".*"}`);
302
+ const s = this.opts.useGridFS ? e.store.find({
303
+ filename: n
304
+ }).map((async t => [ t.filename, await this.get(t.filename) ])) : e.store.find({
305
+ key: n
306
+ }).map((t => [ t.key, t.value ]));
307
+ yield* s;
122
308
  }
123
309
  async has(t) {
124
- const e = `SELECT EXISTS ( SELECT * FROM ${this.opts.table} WHERE key = ? )`;
125
- const s = await this.query(e, t);
126
- return Object.values(s[0])[0] === 1;
310
+ const e = await this.connect;
311
+ const n = {
312
+ [this.opts.useGridFS ? "filename" : "key"]: {
313
+ $eq: t
314
+ }
315
+ };
316
+ const s = await e.store.count(n);
317
+ return s !== 0;
127
318
  }
128
319
  async disconnect() {
129
- await this.close();
320
+ const t = await this.connect;
321
+ await t.mongoClient.close();
130
322
  }
131
323
  };
132
324
 
133
- var o = t => new s({
134
- store: new n(t)
135
- });
136
-
137
- var r = n;
325
+ var c = i;
138
326
 
139
- export { n as KeyvSqlite, o as createKeyv, r as default };
327
+ export { i as KeyvMongo, c as default };
@@ -6,9 +6,11 @@ Object.defineProperty(exports, Symbol.toStringTag, {
6
6
 
7
7
  const t = require("events");
8
8
 
9
- const e = require("./Package.66.cjs");
9
+ const e = require("util");
10
10
 
11
- const s = require("pg");
11
+ const s = require("./Package.67.cjs");
12
+
13
+ const i = require("sqlite3");
12
14
 
13
15
  require("buffer");
14
16
 
@@ -16,160 +18,140 @@ const a = t => t && t.__esModule ? t : {
16
18
  default: t
17
19
  };
18
20
 
19
- const i = a(t);
20
-
21
- const o = a(s);
22
-
23
- var r;
21
+ const n = a(t);
24
22
 
25
- var n;
26
-
27
- var c = (t, e = {}) => {
28
- if (n !== t) {
29
- r = void 0;
30
- n = t;
31
- }
32
- r ??= new o.default.Pool({
33
- connectionString: t,
34
- ...e
35
- });
36
- return r;
37
- };
23
+ const r = a(i);
38
24
 
39
- var h = async () => {
40
- await r.end();
41
- n = void 0;
42
- };
25
+ var o = t => String(t).search(/^[a-zA-Z]+$/) < 0 ? "_" + t : t;
43
26
 
44
- var u = class extends i.default {
27
+ var c = class extends n.default {
45
28
  ttlSupport;
46
29
  opts;
47
- query;
48
30
  namespace;
31
+ close;
32
+ query;
49
33
  constructor(t) {
50
34
  super();
51
35
  this.ttlSupport = false;
36
+ let s = {
37
+ dialect: "sqlite",
38
+ uri: "sqlite://:memory:"
39
+ };
52
40
  if (typeof t === "string") {
53
- const e = t;
54
- t = {
55
- dialect: "postgres",
56
- uri: e
57
- };
41
+ s.uri = t;
58
42
  } else {
59
- t = {
60
- dialect: "postgres",
61
- uri: "postgresql://localhost:5432",
43
+ s = {
44
+ ...s,
62
45
  ...t
63
46
  };
64
47
  }
65
- const e = async () => {
66
- const e = c(t.uri, t);
67
- return async (t, s) => {
68
- const a = await e.query(t, s);
69
- return a.rows;
70
- };
71
- };
48
+ s.db = s.uri.replace(/^sqlite:\/\//, "");
49
+ s.connect = async () => new Promise(((t, e) => {
50
+ const i = new r.default.Database(s.db, (a => {
51
+ if (a) {
52
+ e(a);
53
+ } else {
54
+ if (s.busyTimeout) {
55
+ i.configure("busyTimeout", s.busyTimeout);
56
+ }
57
+ t(i);
58
+ }
59
+ }));
60
+ })).then((t => ({
61
+ query: e.promisify(t.all).bind(t),
62
+ close: e.promisify(t.close).bind(t)
63
+ })));
72
64
  this.opts = {
73
65
  table: "keyv",
74
- schema: "public",
75
66
  keySize: 255,
76
- ...t
67
+ ...s
77
68
  };
78
- let s = `CREATE${this.opts.useUnloggedTable ? " UNLOGGED " : " "}TABLE IF NOT EXISTS ${this.opts.schema}.${this.opts.table}(key VARCHAR(${Number(this.opts.keySize)}) PRIMARY KEY, value TEXT )`;
79
- if (this.opts.schema !== "public") {
80
- s = `CREATE SCHEMA IF NOT EXISTS ${this.opts.schema}; ${s}`;
81
- }
82
- const a = e().then((async t => {
83
- try {
84
- await t(s);
85
- } catch (e) {
86
- if (e.code !== "23505") {
87
- this.emit("error", e);
88
- }
89
- return t;
90
- }
91
- return t;
92
- })).catch((t => this.emit("error", t)));
93
- this.query = async (t, e) => a.then((s => s(t, e)));
69
+ this.opts.table = o(this.opts.table);
70
+ const i = `CREATE TABLE IF NOT EXISTS ${this.opts.table}(key VARCHAR(${Number(this.opts.keySize)}) PRIMARY KEY, value TEXT )`;
71
+ const a = this.opts.connect().then((async t => t.query(i).then((() => t)))).catch((t => this.emit("error", t)));
72
+ this.query = async (t, ...e) => a.then((async s => s.query(t, ...e)));
73
+ this.close = async () => a.then((t => t.close()));
94
74
  }
95
75
  async get(t) {
96
- const e = `SELECT * FROM ${this.opts.schema}.${this.opts.table} WHERE key = $1`;
97
- const s = await this.query(e, [ t ]);
98
- const a = s[0];
99
- return a === void 0 ? void 0 : a.value;
76
+ const e = `SELECT * FROM ${this.opts.table} WHERE key = ?`;
77
+ const s = await this.query(e, t);
78
+ const i = s[0];
79
+ if (i === void 0) {
80
+ return void 0;
81
+ }
82
+ return i.value;
100
83
  }
101
84
  async getMany(t) {
102
- const e = `SELECT * FROM ${this.opts.schema}.${this.opts.table} WHERE key = ANY($1)`;
103
- const s = await this.query(e, [ t ]);
104
- const a = [];
105
- for (const e of t) {
106
- const t = s?.findIndex((t => t.key === e));
107
- a.push(t > -1 ? s[t].value : void 0);
108
- }
109
- return a;
85
+ const e = `SELECT * FROM ${this.opts.table} WHERE key IN (SELECT value FROM json_each(?))`;
86
+ const s = await this.query(e, JSON.stringify(t));
87
+ return t.map((t => {
88
+ const e = s.find((e => e.key === t));
89
+ return e ? e.value : void 0;
90
+ }));
110
91
  }
111
92
  async set(t, e) {
112
- const s = `INSERT INTO ${this.opts.schema}.${this.opts.table} (key, value)\n VALUES($1, $2) \n ON CONFLICT(key) \n DO UPDATE SET value=excluded.value;`;
113
- await this.query(s, [ t, e ]);
93
+ const s = `INSERT INTO ${this.opts.table} (key, value)\n\t\t\tVALUES(?, ?) \n\t\t\tON CONFLICT(key) \n\t\t\tDO UPDATE SET value=excluded.value;`;
94
+ return this.query(s, t, e);
114
95
  }
115
96
  async delete(t) {
116
- const e = `SELECT * FROM ${this.opts.schema}.${this.opts.table} WHERE key = $1`;
117
- const s = `DELETE FROM ${this.opts.schema}.${this.opts.table} WHERE key = $1`;
118
- const a = await this.query(e, [ t ]);
119
- if (a[0] === void 0) {
97
+ const e = `SELECT * FROM ${this.opts.table} WHERE key = ?`;
98
+ const s = `DELETE FROM ${this.opts.table} WHERE key = ?`;
99
+ const i = await this.query(e, t);
100
+ const a = i[0];
101
+ if (a === void 0) {
120
102
  return false;
121
103
  }
122
- await this.query(s, [ t ]);
104
+ await this.query(s, t);
123
105
  return true;
124
106
  }
125
107
  async deleteMany(t) {
126
- const e = `SELECT * FROM ${this.opts.schema}.${this.opts.table} WHERE key = ANY($1)`;
127
- const s = `DELETE FROM ${this.opts.schema}.${this.opts.table} WHERE key = ANY($1)`;
128
- const a = await this.query(e, [ t ]);
129
- if (a[0] === void 0) {
108
+ const e = `DELETE FROM ${this.opts.table} WHERE key IN (SELECT value FROM json_each(?))`;
109
+ const s = await this.getMany(t);
110
+ if (s.every((t => t === void 0))) {
130
111
  return false;
131
112
  }
132
- await this.query(s, [ t ]);
113
+ await this.query(e, JSON.stringify(t));
133
114
  return true;
134
115
  }
135
116
  async clear() {
136
- const t = `DELETE FROM ${this.opts.schema}.${this.opts.table} WHERE key LIKE $1`;
137
- await this.query(t, [ this.namespace ? `${this.namespace}:%` : "%" ]);
117
+ const t = `DELETE FROM ${this.opts.table} WHERE key LIKE ?`;
118
+ await this.query(t, this.namespace ? `${this.namespace}:%` : "%");
138
119
  }
139
120
  async* iterator(t) {
140
- const e = Number.parseInt(String(this.opts.iterationLimit), 10) || 10;
141
- async function* s(a, i, o) {
142
- const r = `SELECT * FROM ${i.schema}.${i.table} WHERE key LIKE $1 LIMIT $2 OFFSET $3`;
143
- const n = await o(r, [ `${t ? t + ":" : ""}%`, e, a ]);
144
- if (n.length === 0) {
121
+ const e = Number.parseInt(this.opts.iterationLimit, 10) || 10;
122
+ async function* s(i, a, n) {
123
+ const r = `SELECT * FROM ${a.table} WHERE key LIKE ? LIMIT ? OFFSET ?`;
124
+ const o = await n(r, [ `${t ? t + ":" : ""}%`, e, i ]);
125
+ const c = [ ...o ];
126
+ if (c.length === 0) {
145
127
  return;
146
128
  }
147
- for (const t of n) {
148
- a += 1;
129
+ for (const t of c) {
130
+ i += 1;
149
131
  yield [ t.key, t.value ];
150
132
  }
151
- yield* s(a, i, o);
133
+ yield* s(i, a, n);
152
134
  }
153
135
  yield* s(0, this.opts, this.query);
154
136
  }
155
137
  async has(t) {
156
- const e = `SELECT EXISTS ( SELECT * FROM ${this.opts.schema}.${this.opts.table} WHERE key = $1 )`;
157
- const s = await this.query(e, [ t ]);
158
- return s[0].exists;
138
+ const e = `SELECT EXISTS ( SELECT * FROM ${this.opts.table} WHERE key = ? )`;
139
+ const s = await this.query(e, t);
140
+ return Object.values(s[0])[0] === 1;
159
141
  }
160
142
  async disconnect() {
161
- await h();
143
+ await this.close();
162
144
  }
163
145
  };
164
146
 
165
- var E = t => new e.index_default({
166
- store: new u(t)
147
+ var u = t => new s.index_default({
148
+ store: new c(t)
167
149
  });
168
150
 
169
- var y = u;
151
+ var l = c;
170
152
 
171
- exports.KeyvPostgres = u;
153
+ exports.KeyvSqlite = c;
172
154
 
173
- exports.createKeyv = E;
155
+ exports.createKeyv = u;
174
156
 
175
- exports.default = y;
157
+ exports.default = l;