@newcms/database 0.1.1 → 0.3.0
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/index.cjs +1682 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2763 -0
- package/dist/index.d.ts +2763 -14
- package/dist/index.js +1682 -8
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
- package/dist/cache/index.d.ts +0 -3
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -2
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/object-cache.d.ts +0 -139
- package/dist/cache/object-cache.d.ts.map +0 -1
- package/dist/cache/object-cache.js +0 -321
- package/dist/cache/object-cache.js.map +0 -1
- package/dist/connection.d.ts +0 -18
- package/dist/connection.d.ts.map +0 -1
- package/dist/connection.js +0 -32
- package/dist/connection.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/repositories/meta-repository.d.ts +0 -71
- package/dist/repositories/meta-repository.d.ts.map +0 -1
- package/dist/repositories/meta-repository.js +0 -176
- package/dist/repositories/meta-repository.js.map +0 -1
- package/dist/repositories/options-repository.d.ts +0 -59
- package/dist/repositories/options-repository.d.ts.map +0 -1
- package/dist/repositories/options-repository.js +0 -222
- package/dist/repositories/options-repository.js.map +0 -1
- package/dist/repositories/post-repository.d.ts +0 -121
- package/dist/repositories/post-repository.d.ts.map +0 -1
- package/dist/repositories/post-repository.js +0 -241
- package/dist/repositories/post-repository.js.map +0 -1
- package/dist/repositories/revision-repository.d.ts +0 -50
- package/dist/repositories/revision-repository.d.ts.map +0 -1
- package/dist/repositories/revision-repository.js +0 -149
- package/dist/repositories/revision-repository.js.map +0 -1
- package/dist/repositories/taxonomy-repository.d.ts +0 -63
- package/dist/repositories/taxonomy-repository.d.ts.map +0 -1
- package/dist/repositories/taxonomy-repository.js +0 -268
- package/dist/repositories/taxonomy-repository.js.map +0 -1
- package/dist/schema/comments.d.ts +0 -369
- package/dist/schema/comments.d.ts.map +0 -1
- package/dist/schema/comments.js +0 -47
- package/dist/schema/comments.js.map +0 -1
- package/dist/schema/index.d.ts +0 -9
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -9
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/links.d.ts +0 -245
- package/dist/schema/links.d.ts.map +0 -1
- package/dist/schema/links.js +0 -17
- package/dist/schema/links.js.map +0 -1
- package/dist/schema/options.d.ts +0 -95
- package/dist/schema/options.d.ts.map +0 -1
- package/dist/schema/options.js +0 -12
- package/dist/schema/options.js.map +0 -1
- package/dist/schema/posts.d.ts +0 -509
- package/dist/schema/posts.d.ts.map +0 -1
- package/dist/schema/posts.js +0 -51
- package/dist/schema/posts.js.map +0 -1
- package/dist/schema/scheduled-events.d.ts +0 -156
- package/dist/schema/scheduled-events.d.ts.map +0 -1
- package/dist/schema/scheduled-events.js +0 -22
- package/dist/schema/scheduled-events.js.map +0 -1
- package/dist/schema/sessions.d.ts +0 -157
- package/dist/schema/sessions.d.ts.map +0 -1
- package/dist/schema/sessions.js +0 -26
- package/dist/schema/sessions.js.map +0 -1
- package/dist/schema/terms.d.ts +0 -343
- package/dist/schema/terms.d.ts.map +0 -1
- package/dist/schema/terms.js +0 -46
- package/dist/schema/terms.js.map +0 -1
- package/dist/schema/users.d.ts +0 -288
- package/dist/schema/users.d.ts.map +0 -1
- package/dist/schema/users.js +0 -30
- package/dist/schema/users.js.map +0 -1
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
import Redis from 'ioredis';
|
|
2
|
-
/**
|
|
3
|
-
* Redis-backed object cache implementing the CMS cache API.
|
|
4
|
-
*
|
|
5
|
-
* Features:
|
|
6
|
-
* - Group-based key namespacing
|
|
7
|
-
* - Global vs per-site groups (multisite support)
|
|
8
|
-
* - Configurable TTL per group
|
|
9
|
-
* - Batch get/set operations via pipeline
|
|
10
|
-
* - Flush by group or total flush
|
|
11
|
-
* - Increment/decrement operations
|
|
12
|
-
*/
|
|
13
|
-
export class ObjectCache {
|
|
14
|
-
redis;
|
|
15
|
-
siteId = 1;
|
|
16
|
-
keyPrefix;
|
|
17
|
-
defaultTtl;
|
|
18
|
-
/** Groups that are shared across all sites (multisite) */
|
|
19
|
-
globalGroups = new Set();
|
|
20
|
-
/** Per-group TTL overrides (in seconds) */
|
|
21
|
-
groupTtl = new Map();
|
|
22
|
-
/** Local in-memory cache for the current request (non-persistent) */
|
|
23
|
-
localCache = new Map();
|
|
24
|
-
constructor(config) {
|
|
25
|
-
this.redis = new Redis({
|
|
26
|
-
host: config.host,
|
|
27
|
-
port: config.port,
|
|
28
|
-
lazyConnect: true,
|
|
29
|
-
maxRetriesPerRequest: 3,
|
|
30
|
-
});
|
|
31
|
-
this.keyPrefix = config.keyPrefix ?? 'cache';
|
|
32
|
-
this.defaultTtl = config.defaultTtl ?? 0;
|
|
33
|
-
}
|
|
34
|
-
async connect() {
|
|
35
|
-
await this.redis.connect();
|
|
36
|
-
}
|
|
37
|
-
async disconnect() {
|
|
38
|
-
await this.redis.quit();
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Set the current site ID (for multisite per-site cache isolation).
|
|
42
|
-
*/
|
|
43
|
-
setSiteId(siteId) {
|
|
44
|
-
this.siteId = siteId;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Register groups as global (shared across sites in multisite).
|
|
48
|
-
*/
|
|
49
|
-
addGlobalGroups(groups) {
|
|
50
|
-
for (const group of groups) {
|
|
51
|
-
this.globalGroups.add(group);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Set TTL for a specific cache group.
|
|
56
|
-
*/
|
|
57
|
-
setGroupTtl(group, ttlSeconds) {
|
|
58
|
-
this.groupTtl.set(group, ttlSeconds);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Build the Redis key for a cache entry.
|
|
62
|
-
*/
|
|
63
|
-
buildKey(key, group = 'default') {
|
|
64
|
-
if (this.globalGroups.has(group)) {
|
|
65
|
-
return `${this.keyPrefix}:global:${group}:${key}`;
|
|
66
|
-
}
|
|
67
|
-
return `${this.keyPrefix}:site:${this.siteId}:${group}:${key}`;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Build a local cache key (in-memory, for current request).
|
|
71
|
-
*/
|
|
72
|
-
buildLocalKey(key, group = 'default') {
|
|
73
|
-
if (this.globalGroups.has(group)) {
|
|
74
|
-
return `global:${group}:${key}`;
|
|
75
|
-
}
|
|
76
|
-
return `site:${this.siteId}:${group}:${key}`;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Get TTL for a group in seconds.
|
|
80
|
-
*/
|
|
81
|
-
getTtl(group) {
|
|
82
|
-
return this.groupTtl.get(group) ?? this.defaultTtl;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Get a cached value.
|
|
86
|
-
*
|
|
87
|
-
* @returns The cached value, or undefined if not found
|
|
88
|
-
*/
|
|
89
|
-
async get(key, group = 'default') {
|
|
90
|
-
// Check local cache first
|
|
91
|
-
const localKey = this.buildLocalKey(key, group);
|
|
92
|
-
if (this.localCache.has(localKey)) {
|
|
93
|
-
return this.localCache.get(localKey);
|
|
94
|
-
}
|
|
95
|
-
const redisKey = this.buildKey(key, group);
|
|
96
|
-
const raw = await this.redis.get(redisKey);
|
|
97
|
-
if (raw === null)
|
|
98
|
-
return undefined;
|
|
99
|
-
try {
|
|
100
|
-
const value = JSON.parse(raw);
|
|
101
|
-
this.localCache.set(localKey, value);
|
|
102
|
-
return value;
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
return raw;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Set a cached value.
|
|
110
|
-
*
|
|
111
|
-
* @param key - Cache key
|
|
112
|
-
* @param value - Value to cache (will be JSON serialized)
|
|
113
|
-
* @param group - Cache group
|
|
114
|
-
* @param ttl - TTL in seconds (overrides group default). 0 = no expiry.
|
|
115
|
-
* @returns true on success
|
|
116
|
-
*/
|
|
117
|
-
async set(key, value, group = 'default', ttl) {
|
|
118
|
-
const redisKey = this.buildKey(key, group);
|
|
119
|
-
const serialized = JSON.stringify(value);
|
|
120
|
-
const effectiveTtl = ttl ?? this.getTtl(group);
|
|
121
|
-
if (effectiveTtl > 0) {
|
|
122
|
-
await this.redis.setex(redisKey, effectiveTtl, serialized);
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
await this.redis.set(redisKey, serialized);
|
|
126
|
-
}
|
|
127
|
-
const localKey = this.buildLocalKey(key, group);
|
|
128
|
-
this.localCache.set(localKey, value);
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Add a cached value only if it doesn't already exist.
|
|
133
|
-
*
|
|
134
|
-
* @returns true if the value was added, false if key already exists
|
|
135
|
-
*/
|
|
136
|
-
async add(key, value, group = 'default', ttl) {
|
|
137
|
-
const redisKey = this.buildKey(key, group);
|
|
138
|
-
const serialized = JSON.stringify(value);
|
|
139
|
-
const effectiveTtl = ttl ?? this.getTtl(group);
|
|
140
|
-
let result;
|
|
141
|
-
if (effectiveTtl > 0) {
|
|
142
|
-
result = await this.redis.set(redisKey, serialized, 'EX', effectiveTtl, 'NX');
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
result = await this.redis.set(redisKey, serialized, 'NX');
|
|
146
|
-
}
|
|
147
|
-
if (result === 'OK') {
|
|
148
|
-
const localKey = this.buildLocalKey(key, group);
|
|
149
|
-
this.localCache.set(localKey, value);
|
|
150
|
-
return true;
|
|
151
|
-
}
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Delete a cached value.
|
|
156
|
-
*
|
|
157
|
-
* @returns true if the key existed and was deleted
|
|
158
|
-
*/
|
|
159
|
-
async delete(key, group = 'default') {
|
|
160
|
-
const redisKey = this.buildKey(key, group);
|
|
161
|
-
const count = await this.redis.del(redisKey);
|
|
162
|
-
const localKey = this.buildLocalKey(key, group);
|
|
163
|
-
this.localCache.delete(localKey);
|
|
164
|
-
return count > 0;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Increment a numeric cached value.
|
|
168
|
-
*
|
|
169
|
-
* @returns The new value, or false if key doesn't exist
|
|
170
|
-
*/
|
|
171
|
-
async incr(key, group = 'default', offset = 1) {
|
|
172
|
-
const redisKey = this.buildKey(key, group);
|
|
173
|
-
const keyExists = await this.redis.exists(redisKey);
|
|
174
|
-
if (!keyExists)
|
|
175
|
-
return false;
|
|
176
|
-
const current = await this.get(key, group);
|
|
177
|
-
if (current === undefined || typeof current !== 'number')
|
|
178
|
-
return false;
|
|
179
|
-
const newValue = current + offset;
|
|
180
|
-
await this.set(key, newValue, group);
|
|
181
|
-
return newValue;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Decrement a numeric cached value.
|
|
185
|
-
*
|
|
186
|
-
* @returns The new value, or false if key doesn't exist
|
|
187
|
-
*/
|
|
188
|
-
async decr(key, group = 'default', offset = 1) {
|
|
189
|
-
return this.incr(key, group, -offset);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Get multiple cached values at once.
|
|
193
|
-
*
|
|
194
|
-
* @returns Map of key -> value (missing keys are not included)
|
|
195
|
-
*/
|
|
196
|
-
async getMultiple(keys, group = 'default') {
|
|
197
|
-
const result = new Map();
|
|
198
|
-
if (keys.length === 0)
|
|
199
|
-
return result;
|
|
200
|
-
const redisKeys = keys.map((k) => this.buildKey(k, group));
|
|
201
|
-
const values = await this.redis.mget(...redisKeys);
|
|
202
|
-
for (let i = 0; i < keys.length; i++) {
|
|
203
|
-
const raw = values[i];
|
|
204
|
-
if (raw !== null) {
|
|
205
|
-
try {
|
|
206
|
-
const value = JSON.parse(raw);
|
|
207
|
-
result.set(keys[i], value);
|
|
208
|
-
const localKey = this.buildLocalKey(keys[i], group);
|
|
209
|
-
this.localCache.set(localKey, value);
|
|
210
|
-
}
|
|
211
|
-
catch {
|
|
212
|
-
result.set(keys[i], raw);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return result;
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Set multiple cached values at once.
|
|
220
|
-
*/
|
|
221
|
-
async setMultiple(entries, group = 'default', ttl) {
|
|
222
|
-
const items = entries instanceof Map ? entries : new Map(Object.entries(entries));
|
|
223
|
-
if (items.size === 0)
|
|
224
|
-
return true;
|
|
225
|
-
const effectiveTtl = ttl ?? this.getTtl(group);
|
|
226
|
-
const pipeline = this.redis.pipeline();
|
|
227
|
-
for (const [key, value] of items) {
|
|
228
|
-
const redisKey = this.buildKey(key, group);
|
|
229
|
-
const serialized = JSON.stringify(value);
|
|
230
|
-
if (effectiveTtl > 0) {
|
|
231
|
-
pipeline.setex(redisKey, effectiveTtl, serialized);
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
pipeline.set(redisKey, serialized);
|
|
235
|
-
}
|
|
236
|
-
const localKey = this.buildLocalKey(key, group);
|
|
237
|
-
this.localCache.set(localKey, value);
|
|
238
|
-
}
|
|
239
|
-
await pipeline.exec();
|
|
240
|
-
return true;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Flush all keys in a specific group using SCAN + pipeline DEL.
|
|
244
|
-
*
|
|
245
|
-
* @returns Number of keys deleted
|
|
246
|
-
*/
|
|
247
|
-
async flushGroup(group) {
|
|
248
|
-
const pattern = this.globalGroups.has(group)
|
|
249
|
-
? `${this.keyPrefix}:global:${group}:*`
|
|
250
|
-
: `${this.keyPrefix}:site:${this.siteId}:${group}:*`;
|
|
251
|
-
let deleted = 0;
|
|
252
|
-
let cursor = '0';
|
|
253
|
-
do {
|
|
254
|
-
const [nextCursor, keys] = await this.redis.scan(cursor, 'MATCH', pattern, 'COUNT', 100);
|
|
255
|
-
cursor = nextCursor;
|
|
256
|
-
if (keys.length > 0) {
|
|
257
|
-
const pipeline = this.redis.pipeline();
|
|
258
|
-
for (const key of keys) {
|
|
259
|
-
pipeline.del(key);
|
|
260
|
-
}
|
|
261
|
-
await pipeline.exec();
|
|
262
|
-
deleted += keys.length;
|
|
263
|
-
}
|
|
264
|
-
} while (cursor !== '0');
|
|
265
|
-
// Clear local cache for this group
|
|
266
|
-
for (const localKey of this.localCache.keys()) {
|
|
267
|
-
if (localKey.startsWith(`${group}:`)) {
|
|
268
|
-
this.localCache.delete(localKey);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
return deleted;
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Flush all cached data (all groups, all sites).
|
|
275
|
-
* Uses SCAN + DEL to only clear cache keys (not other Redis data).
|
|
276
|
-
*
|
|
277
|
-
* @returns Number of keys deleted
|
|
278
|
-
*/
|
|
279
|
-
async flushAll() {
|
|
280
|
-
const pattern = `${this.keyPrefix}:*`;
|
|
281
|
-
let deleted = 0;
|
|
282
|
-
let cursor = '0';
|
|
283
|
-
do {
|
|
284
|
-
const [nextCursor, keys] = await this.redis.scan(cursor, 'MATCH', pattern, 'COUNT', 100);
|
|
285
|
-
cursor = nextCursor;
|
|
286
|
-
if (keys.length > 0) {
|
|
287
|
-
const pipeline = this.redis.pipeline();
|
|
288
|
-
for (const key of keys) {
|
|
289
|
-
pipeline.del(key);
|
|
290
|
-
}
|
|
291
|
-
await pipeline.exec();
|
|
292
|
-
deleted += keys.length;
|
|
293
|
-
}
|
|
294
|
-
} while (cursor !== '0');
|
|
295
|
-
this.localCache.clear();
|
|
296
|
-
return deleted;
|
|
297
|
-
}
|
|
298
|
-
/**
|
|
299
|
-
* Clear only the local in-memory cache (for request boundary cleanup).
|
|
300
|
-
*/
|
|
301
|
-
clearLocalCache() {
|
|
302
|
-
this.localCache.clear();
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Check if a key exists in cache.
|
|
306
|
-
*/
|
|
307
|
-
async exists(key, group = 'default') {
|
|
308
|
-
const localKey = this.buildLocalKey(key, group);
|
|
309
|
-
if (this.localCache.has(localKey))
|
|
310
|
-
return true;
|
|
311
|
-
const redisKey = this.buildKey(key, group);
|
|
312
|
-
return (await this.redis.exists(redisKey)) === 1;
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Get the underlying Redis instance (for advanced operations).
|
|
316
|
-
*/
|
|
317
|
-
getRedis() {
|
|
318
|
-
return this.redis;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
//# sourceMappingURL=object-cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"object-cache.js","sourceRoot":"","sources":["../../src/cache/object-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/connection.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import postgres from 'postgres';
|
|
2
|
-
import * as schema from './schema/index.js';
|
|
3
|
-
export interface DatabaseConfig {
|
|
4
|
-
host: string;
|
|
5
|
-
port: number;
|
|
6
|
-
database: string;
|
|
7
|
-
user: string;
|
|
8
|
-
password: string;
|
|
9
|
-
maxConnections?: number;
|
|
10
|
-
}
|
|
11
|
-
export declare function createConnection(config?: DatabaseConfig): {
|
|
12
|
-
db: import("drizzle-orm/postgres-js").PostgresJsDatabase<typeof schema> & {
|
|
13
|
-
$client: postgres.Sql<{}>;
|
|
14
|
-
};
|
|
15
|
-
client: postgres.Sql<{}>;
|
|
16
|
-
};
|
|
17
|
-
export type Database = ReturnType<typeof createConnection>['db'];
|
|
18
|
-
//# sourceMappingURL=connection.d.ts.map
|
package/dist/connection.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAqBD,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,cAAc;;;;;EAevD;AAED,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/connection.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { drizzle } from 'drizzle-orm/postgres-js';
|
|
2
|
-
import postgres from 'postgres';
|
|
3
|
-
import * as schema from './schema/index.js';
|
|
4
|
-
function getConfigFromEnv() {
|
|
5
|
-
const password = process.env['DB_PASSWORD'];
|
|
6
|
-
if (!password) {
|
|
7
|
-
throw new Error('DB_PASSWORD environment variable is required. ' +
|
|
8
|
-
'Set it in your .env file or environment.');
|
|
9
|
-
}
|
|
10
|
-
return {
|
|
11
|
-
host: process.env['DB_HOST'] ?? 'localhost',
|
|
12
|
-
port: parseInt(process.env['DB_PORT'] ?? '5432', 10),
|
|
13
|
-
database: process.env['DB_NAME'] ?? 'newcms',
|
|
14
|
-
user: process.env['DB_USER'] ?? 'newcms',
|
|
15
|
-
password,
|
|
16
|
-
maxConnections: parseInt(process.env['DB_MAX_CONNECTIONS'] ?? '10', 10),
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export function createConnection(config) {
|
|
20
|
-
const cfg = config ?? getConfigFromEnv();
|
|
21
|
-
const client = postgres({
|
|
22
|
-
host: cfg.host,
|
|
23
|
-
port: cfg.port,
|
|
24
|
-
database: cfg.database,
|
|
25
|
-
user: cfg.user,
|
|
26
|
-
password: cfg.password,
|
|
27
|
-
max: cfg.maxConnections ?? 10,
|
|
28
|
-
});
|
|
29
|
-
const db = drizzle(client, { schema });
|
|
30
|
-
return { db, client };
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=connection.js.map
|
package/dist/connection.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAW5C,SAAS,gBAAgB;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACd,gDAAgD;YAC/C,0CAA0C,CAC3C,CAAC;IACH,CAAC;IAED,OAAO;QACN,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,WAAW;QAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC;QACpD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,QAAQ;QAC5C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,QAAQ;QACxC,QAAQ;QACR,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;KACvE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACvD,MAAM,GAAG,GAAG,MAAM,IAAI,gBAAgB,EAAE,CAAC;IAEzC,MAAM,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,GAAG,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE;KAC7B,CAAC,CAAC;IAEH,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAEvC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AACvB,CAAC"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChE,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACtG,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC"}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import type { PgTable, PgColumn } from 'drizzle-orm/pg-core';
|
|
2
|
-
import type { Database } from '../connection.js';
|
|
3
|
-
/**
|
|
4
|
-
* Column references needed for a meta table.
|
|
5
|
-
*/
|
|
6
|
-
export interface MetaTableColumns {
|
|
7
|
-
metaId: PgColumn;
|
|
8
|
-
objectId: PgColumn;
|
|
9
|
-
metaKey: PgColumn;
|
|
10
|
-
metaValue: PgColumn;
|
|
11
|
-
metaValueJson: PgColumn;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Column name mapping for raw SQL operations and result parsing.
|
|
15
|
-
*
|
|
16
|
-
* `sql` = names as in the database (for INSERT/UPDATE raw SQL)
|
|
17
|
-
* `ts` = names as in the Drizzle schema definition (for reading select results)
|
|
18
|
-
*/
|
|
19
|
-
export interface MetaColumnNames {
|
|
20
|
-
table: string;
|
|
21
|
-
/** SQL column names (for raw queries) */
|
|
22
|
-
sql: {
|
|
23
|
-
metaId: string;
|
|
24
|
-
objectId: string;
|
|
25
|
-
metaKey: string;
|
|
26
|
-
metaValue: string;
|
|
27
|
-
metaValueJson: string;
|
|
28
|
-
};
|
|
29
|
-
/** TypeScript property names (for reading Drizzle select results) */
|
|
30
|
-
ts: {
|
|
31
|
-
metaId: string;
|
|
32
|
-
objectId: string;
|
|
33
|
-
metaKey: string;
|
|
34
|
-
metaValue: string;
|
|
35
|
-
metaValueJson: string;
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
export interface MetaEntry {
|
|
39
|
-
metaId: number;
|
|
40
|
-
objectId: number;
|
|
41
|
-
metaKey: string | null;
|
|
42
|
-
metaValue: string | null;
|
|
43
|
-
metaValueJson: unknown;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Generic metadata repository — works with any meta table (postmeta, usermeta,
|
|
47
|
-
* commentmeta, termmeta). Follows the entity-attribute-value pattern with
|
|
48
|
-
* JSONB support for structured queries.
|
|
49
|
-
*/
|
|
50
|
-
export declare class MetaRepository {
|
|
51
|
-
private db;
|
|
52
|
-
private table;
|
|
53
|
-
private columns;
|
|
54
|
-
private colNames;
|
|
55
|
-
constructor(db: Database, table: PgTable, columns: MetaTableColumns, colNames: MetaColumnNames);
|
|
56
|
-
get<T = unknown>(objectId: number, key: string): Promise<T | undefined>;
|
|
57
|
-
getAll<T = unknown>(objectId: number, key: string): Promise<T[]>;
|
|
58
|
-
getAllForObject(objectId: number): Promise<Map<string, unknown[]>>;
|
|
59
|
-
batchLoad(objectIds: number[]): Promise<Map<number, Map<string, unknown[]>>>;
|
|
60
|
-
add(objectId: number, key: string, value: unknown): Promise<number>;
|
|
61
|
-
update(objectId: number, key: string, value: unknown): Promise<boolean>;
|
|
62
|
-
delete(objectId: number, key: string, value?: unknown): Promise<number>;
|
|
63
|
-
deleteAllForObject(objectId: number): Promise<number>;
|
|
64
|
-
/**
|
|
65
|
-
* Convert a raw DB row to MetaEntry using column name mapping.
|
|
66
|
-
*/
|
|
67
|
-
private toMetaEntry;
|
|
68
|
-
private serialize;
|
|
69
|
-
private deserialize;
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=meta-repository.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"meta-repository.d.ts","sourceRoot":"","sources":["../../src/repositories/meta-repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,QAAQ,CAAC;IACpB,aAAa,EAAE,QAAQ,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACrG,qEAAqE;IACrE,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CACpG;AAED,MAAM,WAAW,SAAS;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACvB;AAED;;;;GAIG;AACH,qBAAa,cAAc;IAIzB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IALhB,OAAO,CAAC,QAAQ,CAAkB;gBAGzB,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,gBAAgB,EACjC,QAAQ,EAAE,eAAe;IAKpB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAWvE,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAShE,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAiBlE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAwB5E,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBnE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BvE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBvE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ3D;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,WAAW;CAWnB"}
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import { eq, and, inArray, sql } from 'drizzle-orm';
|
|
2
|
-
/**
|
|
3
|
-
* Generic metadata repository — works with any meta table (postmeta, usermeta,
|
|
4
|
-
* commentmeta, termmeta). Follows the entity-attribute-value pattern with
|
|
5
|
-
* JSONB support for structured queries.
|
|
6
|
-
*/
|
|
7
|
-
export class MetaRepository {
|
|
8
|
-
db;
|
|
9
|
-
table;
|
|
10
|
-
columns;
|
|
11
|
-
colNames;
|
|
12
|
-
constructor(db, table, columns, colNames) {
|
|
13
|
-
this.db = db;
|
|
14
|
-
this.table = table;
|
|
15
|
-
this.columns = columns;
|
|
16
|
-
this.colNames = colNames;
|
|
17
|
-
}
|
|
18
|
-
async get(objectId, key) {
|
|
19
|
-
const rows = await this.db
|
|
20
|
-
.select()
|
|
21
|
-
.from(this.table)
|
|
22
|
-
.where(and(eq(this.columns.objectId, objectId), eq(this.columns.metaKey, key)))
|
|
23
|
-
.limit(1);
|
|
24
|
-
if (rows.length === 0)
|
|
25
|
-
return undefined;
|
|
26
|
-
return this.deserialize(this.toMetaEntry(rows[0]));
|
|
27
|
-
}
|
|
28
|
-
async getAll(objectId, key) {
|
|
29
|
-
const rows = await this.db
|
|
30
|
-
.select()
|
|
31
|
-
.from(this.table)
|
|
32
|
-
.where(and(eq(this.columns.objectId, objectId), eq(this.columns.metaKey, key)));
|
|
33
|
-
return rows.map((r) => this.deserialize(this.toMetaEntry(r)));
|
|
34
|
-
}
|
|
35
|
-
async getAllForObject(objectId) {
|
|
36
|
-
const rows = await this.db
|
|
37
|
-
.select()
|
|
38
|
-
.from(this.table)
|
|
39
|
-
.where(eq(this.columns.objectId, objectId));
|
|
40
|
-
const result = new Map();
|
|
41
|
-
for (const row of rows) {
|
|
42
|
-
const entry = this.toMetaEntry(row);
|
|
43
|
-
const key = entry.metaKey ?? '';
|
|
44
|
-
const values = result.get(key) ?? [];
|
|
45
|
-
values.push(this.deserialize(entry));
|
|
46
|
-
result.set(key, values);
|
|
47
|
-
}
|
|
48
|
-
return result;
|
|
49
|
-
}
|
|
50
|
-
async batchLoad(objectIds) {
|
|
51
|
-
if (objectIds.length === 0)
|
|
52
|
-
return new Map();
|
|
53
|
-
const rows = await this.db
|
|
54
|
-
.select()
|
|
55
|
-
.from(this.table)
|
|
56
|
-
.where(inArray(this.columns.objectId, objectIds));
|
|
57
|
-
const result = new Map();
|
|
58
|
-
for (const row of rows) {
|
|
59
|
-
const rawRow = row;
|
|
60
|
-
const entry = this.toMetaEntry(rawRow);
|
|
61
|
-
if (!result.has(entry.objectId)) {
|
|
62
|
-
result.set(entry.objectId, new Map());
|
|
63
|
-
}
|
|
64
|
-
const objectMeta = result.get(entry.objectId);
|
|
65
|
-
const key = entry.metaKey ?? '';
|
|
66
|
-
const values = objectMeta.get(key) ?? [];
|
|
67
|
-
values.push(this.deserialize(entry));
|
|
68
|
-
objectMeta.set(key, values);
|
|
69
|
-
}
|
|
70
|
-
return result;
|
|
71
|
-
}
|
|
72
|
-
async add(objectId, key, value) {
|
|
73
|
-
const { textValue, jsonValue } = this.serialize(value);
|
|
74
|
-
const jsonStr = jsonValue !== null ? JSON.stringify(jsonValue) : null;
|
|
75
|
-
const s = this.colNames.sql;
|
|
76
|
-
const t = this.colNames.table;
|
|
77
|
-
const rows = await this.db.execute(sql `
|
|
78
|
-
INSERT INTO ${sql.raw(`"${t}"`)} (${sql.raw(`"${s.objectId}"`)}, ${sql.raw(`"${s.metaKey}"`)}, ${sql.raw(`"${s.metaValue}"`)}, ${sql.raw(`"${s.metaValueJson}"`)})
|
|
79
|
-
VALUES (${objectId}, ${key}, ${textValue}, ${jsonStr}::jsonb)
|
|
80
|
-
RETURNING ${sql.raw(`"${s.metaId}"`)}
|
|
81
|
-
`);
|
|
82
|
-
const returnedRows = rows;
|
|
83
|
-
return returnedRows[0][s.metaId];
|
|
84
|
-
}
|
|
85
|
-
async update(objectId, key, value) {
|
|
86
|
-
const { textValue, jsonValue } = this.serialize(value);
|
|
87
|
-
const existing = await this.db
|
|
88
|
-
.select({ metaId: this.columns.metaId })
|
|
89
|
-
.from(this.table)
|
|
90
|
-
.where(and(eq(this.columns.objectId, objectId), eq(this.columns.metaKey, key)))
|
|
91
|
-
.limit(1);
|
|
92
|
-
if (existing.length === 0) {
|
|
93
|
-
await this.add(objectId, key, value);
|
|
94
|
-
return true;
|
|
95
|
-
}
|
|
96
|
-
const metaId = existing[0].metaId;
|
|
97
|
-
const jsonStr = jsonValue !== null ? JSON.stringify(jsonValue) : null;
|
|
98
|
-
const s = this.colNames.sql;
|
|
99
|
-
const t = this.colNames.table;
|
|
100
|
-
await this.db.execute(sql `
|
|
101
|
-
UPDATE ${sql.raw(`"${t}"`)}
|
|
102
|
-
SET ${sql.raw(`"${s.metaValue}"`)} = ${textValue}, ${sql.raw(`"${s.metaValueJson}"`)} = ${jsonStr}::jsonb
|
|
103
|
-
WHERE ${sql.raw(`"${s.metaId}"`)} = ${metaId}
|
|
104
|
-
`);
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
|
-
async delete(objectId, key, value) {
|
|
108
|
-
if (value !== undefined) {
|
|
109
|
-
const { textValue } = this.serialize(value);
|
|
110
|
-
const result = await this.db
|
|
111
|
-
.delete(this.table)
|
|
112
|
-
.where(and(eq(this.columns.objectId, objectId), eq(this.columns.metaKey, key), eq(this.columns.metaValue, textValue)))
|
|
113
|
-
.returning({ metaId: this.columns.metaId });
|
|
114
|
-
return result.length;
|
|
115
|
-
}
|
|
116
|
-
const result = await this.db
|
|
117
|
-
.delete(this.table)
|
|
118
|
-
.where(and(eq(this.columns.objectId, objectId), eq(this.columns.metaKey, key)))
|
|
119
|
-
.returning({ metaId: this.columns.metaId });
|
|
120
|
-
return result.length;
|
|
121
|
-
}
|
|
122
|
-
async deleteAllForObject(objectId) {
|
|
123
|
-
const result = await this.db
|
|
124
|
-
.delete(this.table)
|
|
125
|
-
.where(eq(this.columns.objectId, objectId))
|
|
126
|
-
.returning({ metaId: this.columns.metaId });
|
|
127
|
-
return result.length;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Convert a raw DB row to MetaEntry using column name mapping.
|
|
131
|
-
*/
|
|
132
|
-
toMetaEntry(row) {
|
|
133
|
-
const ts = this.colNames.ts;
|
|
134
|
-
return {
|
|
135
|
-
metaId: row[ts.metaId],
|
|
136
|
-
objectId: row[ts.objectId],
|
|
137
|
-
metaKey: row[ts.metaKey],
|
|
138
|
-
metaValue: row[ts.metaValue],
|
|
139
|
-
metaValueJson: row[ts.metaValueJson],
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
serialize(value) {
|
|
143
|
-
if (value === null || value === undefined) {
|
|
144
|
-
return { textValue: '', jsonValue: null };
|
|
145
|
-
}
|
|
146
|
-
if (typeof value === 'string') {
|
|
147
|
-
try {
|
|
148
|
-
const parsed = JSON.parse(value);
|
|
149
|
-
if (typeof parsed === 'object' && parsed !== null) {
|
|
150
|
-
return { textValue: value, jsonValue: parsed };
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
catch { /* plain string */ }
|
|
154
|
-
return { textValue: value, jsonValue: null };
|
|
155
|
-
}
|
|
156
|
-
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
157
|
-
return { textValue: String(value), jsonValue: null };
|
|
158
|
-
}
|
|
159
|
-
const textValue = JSON.stringify(value);
|
|
160
|
-
return { textValue, jsonValue: value };
|
|
161
|
-
}
|
|
162
|
-
deserialize(entry) {
|
|
163
|
-
if (entry.metaValueJson !== null && entry.metaValueJson !== undefined) {
|
|
164
|
-
return entry.metaValueJson;
|
|
165
|
-
}
|
|
166
|
-
if (entry.metaValue === null)
|
|
167
|
-
return '';
|
|
168
|
-
try {
|
|
169
|
-
return JSON.parse(entry.metaValue);
|
|
170
|
-
}
|
|
171
|
-
catch {
|
|
172
|
-
return entry.metaValue;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
//# sourceMappingURL=meta-repository.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"meta-repository.js","sourceRoot":"","sources":["../../src/repositories/meta-repository.ts"],"names":[],"mappings":"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"}
|