@paroicms/server-text-cache-system 0.11.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/README.md +3 -0
- package/ddl/text-cache.ddl.sql +25 -0
- package/dist/api.d.ts +2 -0
- package/dist/api.js +19 -0
- package/dist/api.js.map +1 -0
- package/dist/cache-system.d.ts +25 -0
- package/dist/cache-system.js +71 -0
- package/dist/cache-system.js.map +1 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +6 -0
- package/dist/constants.js.map +1 -0
- package/dist/db-init/db-init.d.ts +10 -0
- package/dist/db-init/db-init.js +35 -0
- package/dist/db-init/db-init.js.map +1 -0
- package/dist/db-init/ddl-migration.d.ts +12 -0
- package/dist/db-init/ddl-migration.js +28 -0
- package/dist/db-init/ddl-migration.js.map +1 -0
- package/dist/entities/PaCache.entity.d.ts +7 -0
- package/dist/entities/PaCache.entity.js +45 -0
- package/dist/entities/PaCache.entity.js.map +1 -0
- package/dist/entities/PaCacheDependency.entity.d.ts +4 -0
- package/dist/entities/PaCacheDependency.entity.js +30 -0
- package/dist/entities/PaCacheDependency.entity.js.map +1 -0
- package/dist/internal/cache-system-context.d.ts +14 -0
- package/dist/internal/cache-system-context.js +22 -0
- package/dist/internal/cache-system-context.js.map +1 -0
- package/dist/internal/helpers.d.ts +2 -0
- package/dist/internal/helpers.js +18 -0
- package/dist/internal/helpers.js.map +1 -0
- package/dist/internal/helpers.spec.d.ts +1 -0
- package/dist/internal/helpers.spec.js +39 -0
- package/dist/internal/helpers.spec.js.map +1 -0
- package/dist/internal/queries.d.ts +18 -0
- package/dist/internal/queries.js +144 -0
- package/dist/internal/queries.js.map +1 -0
- package/dist/public-types.d.ts +16 -0
- package/dist/public-types.js +3 -0
- package/dist/public-types.js.map +1 -0
- package/package.json +36 -0
package/README.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
PRAGMA journal_mode = TRUNCATE;
|
|
2
|
+
PRAGMA foreign_keys = 1;
|
|
3
|
+
|
|
4
|
+
create table PaDbMetadata (
|
|
5
|
+
dbSchema varchar(100) not null primary key,
|
|
6
|
+
dbVersion integer not null
|
|
7
|
+
);
|
|
8
|
+
|
|
9
|
+
insert into PaDbMetadata (dbSchema, dbVersion) values ('text-cache', 1);
|
|
10
|
+
|
|
11
|
+
create table PaCache (
|
|
12
|
+
id integer not null primary key autoincrement,
|
|
13
|
+
ts timestamp not null default current_timestamp,
|
|
14
|
+
lastUseTs timestamp not null default current_timestamp,
|
|
15
|
+
k varchar(250) not null unique,
|
|
16
|
+
val text not null
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
create table PaCacheDependency (
|
|
20
|
+
cacheId integer not null references PaCache (id) on delete cascade,
|
|
21
|
+
depKey varchar(250) not null,
|
|
22
|
+
primary key (cacheId, depKey)
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
create index PaCacheDependency_depKey_index on PaCacheDependency (depKey);
|
package/dist/api.d.ts
ADDED
package/dist/api.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./cache-system"), exports);
|
|
18
|
+
__exportStar(require("./public-types"), exports);
|
|
19
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,iDAA+B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AppLog, Tracker } from "@paroicms/server-lib";
|
|
2
|
+
import { CacheSetData, CacheValue, TextCacheSystemStorage } from "./public-types";
|
|
3
|
+
export interface CreateTextCacheSystemOptions {
|
|
4
|
+
siteName: string;
|
|
5
|
+
storage: TextCacheSystemStorage;
|
|
6
|
+
appLog: AppLog;
|
|
7
|
+
/**
|
|
8
|
+
* For example: `"14d"`. Leave `undefined` to keep cache data undefinitely.
|
|
9
|
+
*/
|
|
10
|
+
timeToIdle?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface TextCacheSystem {
|
|
13
|
+
setCacheValue(data: CacheSetData, tracker: Tracker): Promise<CacheValue>;
|
|
14
|
+
getCacheValue(cacheKey: string, tracker: Tracker): Promise<CacheValue | undefined>;
|
|
15
|
+
getDependencyKeys(cacheKey: string, tracker: Tracker): Promise<string[]>;
|
|
16
|
+
/**
|
|
17
|
+
* @returns the list of cache cacheKeys that were deleted
|
|
18
|
+
*/
|
|
19
|
+
invalidate(dependencyKeys: string[]): Promise<string[]>;
|
|
20
|
+
cleanUnusedValues(): Promise<void>;
|
|
21
|
+
clearCache(): Promise<void>;
|
|
22
|
+
close(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export declare function createTextCacheSystem(options: CreateTextCacheSystemOptions): Promise<TextCacheSystem>;
|
|
25
|
+
export declare function createNoTextCacheSystem(): TextCacheSystem;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNoTextCacheSystem = exports.createTextCacheSystem = void 0;
|
|
4
|
+
const cache_system_context_1 = require("./internal/cache-system-context");
|
|
5
|
+
const queries_1 = require("./internal/queries");
|
|
6
|
+
async function createTextCacheSystem(options) {
|
|
7
|
+
const context = await (0, cache_system_context_1.createTextCacheSystemContext)(options);
|
|
8
|
+
function checkStatus() {
|
|
9
|
+
if (context.status !== "ready") {
|
|
10
|
+
throw new Error(`TextCache is ${context.status}`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
async setCacheValue(data, tracker) {
|
|
15
|
+
checkStatus();
|
|
16
|
+
return await (0, queries_1.insertOrUpdateCacheValue)(context.cn, data, tracker);
|
|
17
|
+
},
|
|
18
|
+
async getCacheValue(cacheKey, tracker) {
|
|
19
|
+
checkStatus();
|
|
20
|
+
const value = await (0, queries_1.getCacheValue)(context, cacheKey, tracker);
|
|
21
|
+
if (value !== undefined) {
|
|
22
|
+
context.appLog.debug(`[${context.siteName}] found cache: ${cacheKey}`);
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
},
|
|
26
|
+
async getDependencyKeys(cacheKey, tracker) {
|
|
27
|
+
checkStatus();
|
|
28
|
+
return await (0, queries_1.getDependencyKeys)(context, cacheKey, tracker);
|
|
29
|
+
},
|
|
30
|
+
async invalidate(dependencyKeys) {
|
|
31
|
+
checkStatus();
|
|
32
|
+
const cacheKeys = await (0, queries_1.deleteCacheValues)(context.cn, { dependencyKeys });
|
|
33
|
+
if (cacheKeys.length > 0) {
|
|
34
|
+
context.appLog.debug(`[${context.siteName}] ${cacheKeys.length} invalidated cache: ${cacheKeys.join(", ")}`);
|
|
35
|
+
}
|
|
36
|
+
return cacheKeys;
|
|
37
|
+
},
|
|
38
|
+
async cleanUnusedValues() {
|
|
39
|
+
checkStatus();
|
|
40
|
+
const count = await (0, queries_1.deleteUnusedCacheValues)(context);
|
|
41
|
+
if (count !== undefined && count > 0) {
|
|
42
|
+
context.appLog.debug(`[${context.siteName}] ${count} unused cache values were deleted`);
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
async clearCache() {
|
|
46
|
+
checkStatus();
|
|
47
|
+
await (0, queries_1.clearCacheValues)(context);
|
|
48
|
+
context.appLog.debug(`[${context.siteName}] cache is cleared`);
|
|
49
|
+
},
|
|
50
|
+
async close() {
|
|
51
|
+
if (context.status === "destroyed")
|
|
52
|
+
return;
|
|
53
|
+
context.status = "destroyed";
|
|
54
|
+
await context.mainCn.destroy();
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
exports.createTextCacheSystem = createTextCacheSystem;
|
|
59
|
+
function createNoTextCacheSystem() {
|
|
60
|
+
return {
|
|
61
|
+
setCacheValue: (data) => Promise.resolve({ value: data.value, lastModified: new Date().toISOString() }),
|
|
62
|
+
getCacheValue: () => Promise.resolve(undefined),
|
|
63
|
+
getDependencyKeys: () => Promise.resolve([]),
|
|
64
|
+
invalidate: () => Promise.resolve([]),
|
|
65
|
+
cleanUnusedValues: () => Promise.resolve(),
|
|
66
|
+
clearCache: () => Promise.resolve(),
|
|
67
|
+
close: () => Promise.resolve(),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
exports.createNoTextCacheSystem = createNoTextCacheSystem;
|
|
71
|
+
//# sourceMappingURL=cache-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-system.js","sourceRoot":"","sources":["../src/cache-system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const packageDir: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAElB,QAAA,UAAU,GAAG,IAAA,cAAO,EAAC,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AppLog } from "@paroicms/server-lib";
|
|
2
|
+
import { DataSource } from "typeorm";
|
|
3
|
+
export declare function createOrOpenMainCn({ sqliteFile, siteName, appLog, }: {
|
|
4
|
+
sqliteFile: string;
|
|
5
|
+
siteName: string;
|
|
6
|
+
appLog: AppLog;
|
|
7
|
+
}): Promise<{
|
|
8
|
+
mainCn: DataSource;
|
|
9
|
+
logNextQuery: (count?: number | undefined) => void;
|
|
10
|
+
}>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createOrOpenMainCn = void 0;
|
|
4
|
+
const server_lib_1 = require("@paroicms/server-lib");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const constants_1 = require("../constants");
|
|
7
|
+
const PaCache_entity_1 = require("../entities/PaCache.entity");
|
|
8
|
+
const PaCacheDependency_entity_1 = require("../entities/PaCacheDependency.entity");
|
|
9
|
+
const ddl_migration_1 = require("./ddl-migration");
|
|
10
|
+
async function createOrOpenMainCn({ sqliteFile, siteName, appLog, }) {
|
|
11
|
+
const { logNextQuery, typeOrmLogger } = (0, server_lib_1.createSqlLogger)({ appLog, siteName, dbSchemaName: ddl_migration_1.dbSchemaName });
|
|
12
|
+
const { mainCn } = await (0, server_lib_1.createOrOpenSqliteConnection)({
|
|
13
|
+
siteName: siteName,
|
|
14
|
+
canCreate: true,
|
|
15
|
+
dbSchemaName: ddl_migration_1.dbSchemaName,
|
|
16
|
+
sqliteFile,
|
|
17
|
+
ddlFile: (0, path_1.join)(constants_1.packageDir, "ddl", "text-cache.ddl.sql"),
|
|
18
|
+
migrateDb,
|
|
19
|
+
entities: [PaCache_entity_1.PaCacheEntity, PaCacheDependency_entity_1.PaCacheDependencyEntity],
|
|
20
|
+
logger: typeOrmLogger,
|
|
21
|
+
});
|
|
22
|
+
async function migrateDb(cn) {
|
|
23
|
+
const dbVersion = await (0, ddl_migration_1.getDbVersion)(cn, { siteName });
|
|
24
|
+
if (dbVersion !== ddl_migration_1.currentVariantsDbSchemaVersion) {
|
|
25
|
+
await (0, ddl_migration_1.migrateMediasDb)(cn, {
|
|
26
|
+
fromVersion: dbVersion,
|
|
27
|
+
siteName,
|
|
28
|
+
appLog,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return { mainCn, logNextQuery };
|
|
33
|
+
}
|
|
34
|
+
exports.createOrOpenMainCn = createOrOpenMainCn;
|
|
35
|
+
//# sourceMappingURL=db-init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../src/db-init/db-init.ts"],"names":[],"mappings":";;;AAAA,qDAA6F;AAC7F,+BAA4B;AAE5B,4CAA0C;AAC1C,+DAA2D;AAC3D,mFAA+E;AAC/E,mDAKyB;AAElB,KAAK,UAAU,kBAAkB,CAAC,EACvC,UAAU,EACV,QAAQ,EACR,MAAM,GACmD;IACzD,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,IAAA,4BAAe,EAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAZ,4BAAY,EAAE,CAAC,CAAC;IAE5F,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,yCAA4B,EAAC;QACpD,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE,IAAI;QACf,YAAY,EAAZ,4BAAY;QACZ,UAAU;QACV,OAAO,EAAE,IAAA,WAAI,EAAC,sBAAU,EAAE,KAAK,EAAE,oBAAoB,CAAC;QACtD,SAAS;QACT,QAAQ,EAAE,CAAC,8BAAa,EAAE,kDAAuB,CAAC;QAClD,MAAM,EAAE,aAAa;KACtB,CAAC,CAAC;IAEH,KAAK,UAAU,SAAS,CAAC,EAAc;QACrC,MAAM,SAAS,GAAG,MAAM,IAAA,4BAAY,EAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvD,IAAI,SAAS,KAAK,8CAA8B,EAAE,CAAC;YACjD,MAAM,IAAA,+BAAe,EAAC,EAAE,EAAE;gBACxB,WAAW,EAAE,SAAS;gBACtB,QAAQ;gBACR,MAAM;aACP,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAClC,CAAC;AA9BD,gDA8BC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AppLog } from "@paroicms/server-lib";
|
|
2
|
+
import { DataSource } from "typeorm";
|
|
3
|
+
export declare const dbSchemaName = "text-cache";
|
|
4
|
+
export declare const currentVariantsDbSchemaVersion = 1;
|
|
5
|
+
export declare function getDbVersion(cn: DataSource, { siteName }: {
|
|
6
|
+
siteName: string;
|
|
7
|
+
}): Promise<number>;
|
|
8
|
+
export declare function migrateMediasDb(cn: DataSource, { fromVersion, siteName, appLog }: {
|
|
9
|
+
fromVersion: number;
|
|
10
|
+
siteName: string;
|
|
11
|
+
appLog: AppLog;
|
|
12
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.migrateMediasDb = exports.getDbVersion = exports.currentVariantsDbSchemaVersion = exports.dbSchemaName = void 0;
|
|
4
|
+
const data_formatters_lib_1 = require("@paroi/data-formatters-lib");
|
|
5
|
+
exports.dbSchemaName = "text-cache";
|
|
6
|
+
exports.currentVariantsDbSchemaVersion = 1;
|
|
7
|
+
async function getDbVersion(cn, { siteName }) {
|
|
8
|
+
const [row] = await cn.query(`select dbVersion from PaDbMetadata where dbSchema = '${exports.dbSchemaName}'`);
|
|
9
|
+
if (!row)
|
|
10
|
+
throw new Error(`[${siteName}] missing dbSchema '${exports.dbSchemaName}' in database`);
|
|
11
|
+
return (0, data_formatters_lib_1.nbVal)(row.dbVersion, { varName: "dbVersion" });
|
|
12
|
+
}
|
|
13
|
+
exports.getDbVersion = getDbVersion;
|
|
14
|
+
async function migrateMediasDb(cn, { fromVersion, siteName, appLog }) {
|
|
15
|
+
const toVersion = exports.currentVariantsDbSchemaVersion;
|
|
16
|
+
let currentVersion = fromVersion;
|
|
17
|
+
if (currentVersion === 1) {
|
|
18
|
+
// await cn.query("alter table ...");
|
|
19
|
+
// await cn.query(`update PaDbMetadata set dbVersion = 2 where dbSchema = '${dbSchemaName}'`);
|
|
20
|
+
currentVersion = 2;
|
|
21
|
+
}
|
|
22
|
+
if (currentVersion !== toVersion) {
|
|
23
|
+
throw new Error(`[${siteName}] version of ${exports.dbSchemaName} database should be '${toVersion}', but is '${currentVersion}'`);
|
|
24
|
+
}
|
|
25
|
+
appLog.info(`[${siteName}] ${exports.dbSchemaName} database was migrated from ${fromVersion} to ${currentVersion}`);
|
|
26
|
+
}
|
|
27
|
+
exports.migrateMediasDb = migrateMediasDb;
|
|
28
|
+
//# sourceMappingURL=ddl-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ddl-migration.js","sourceRoot":"","sources":["../../src/db-init/ddl-migration.ts"],"names":[],"mappings":";;;AAAA,oEAAmD;AAKtC,QAAA,YAAY,GAAG,YAAY,CAAC;AAC5B,QAAA,8BAA8B,GAAG,CAAC,CAAC;AAEzC,KAAK,UAAU,YAAY,CAAC,EAAc,EAAE,EAAE,QAAQ,EAAwB;IACnF,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAC1B,wDAAwD,oBAAY,GAAG,CACxE,CAAC;IACF,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,QAAQ,uBAAuB,oBAAY,eAAe,CAAC,CAAC;IAC1F,OAAO,IAAA,2BAAK,EAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AACxD,CAAC;AAND,oCAMC;AAEM,KAAK,UAAU,eAAe,CACnC,EAAc,EACd,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAA6D;IAE5F,MAAM,SAAS,GAAG,sCAA8B,CAAC;IACjD,IAAI,cAAc,GAAG,WAAW,CAAC;IAEjC,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,qCAAqC;QACrC,8FAA8F;QAC9F,cAAc,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,IAAI,QAAQ,gBAAgB,oBAAY,wBAAwB,SAAS,cAAc,cAAc,GAAG,CACzG,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,IAAI,CACT,IAAI,QAAQ,KAAK,oBAAY,+BAA+B,WAAW,OAAO,cAAc,EAAE,CAC/F,CAAC;AACJ,CAAC;AArBD,0CAqBC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PaCacheEntity = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
let PaCacheEntity = class PaCacheEntity {
|
|
15
|
+
id;
|
|
16
|
+
ts;
|
|
17
|
+
lastUseTs;
|
|
18
|
+
k;
|
|
19
|
+
val;
|
|
20
|
+
};
|
|
21
|
+
exports.PaCacheEntity = PaCacheEntity;
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, typeorm_1.PrimaryGeneratedColumn)(),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], PaCacheEntity.prototype, "id", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
(0, typeorm_1.Column)({ type: "datetime", default: () => "current_timestamp" }),
|
|
28
|
+
__metadata("design:type", Date)
|
|
29
|
+
], PaCacheEntity.prototype, "ts", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, typeorm_1.Column)({ type: "datetime", default: () => "current_timestamp" }),
|
|
32
|
+
__metadata("design:type", Date)
|
|
33
|
+
], PaCacheEntity.prototype, "lastUseTs", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, typeorm_1.Column)(),
|
|
36
|
+
__metadata("design:type", String)
|
|
37
|
+
], PaCacheEntity.prototype, "k", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, typeorm_1.Column)({ type: "text" }),
|
|
40
|
+
__metadata("design:type", String)
|
|
41
|
+
], PaCacheEntity.prototype, "val", void 0);
|
|
42
|
+
exports.PaCacheEntity = PaCacheEntity = __decorate([
|
|
43
|
+
(0, typeorm_1.Entity)("PaCache")
|
|
44
|
+
], PaCacheEntity);
|
|
45
|
+
//# sourceMappingURL=PaCache.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaCache.entity.js","sourceRoot":"","sources":["../../src/entities/PaCache.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAiE;AAG1D,IAAM,aAAa,GAAnB,MAAM,aAAa;IAExB,EAAE,CAAU;IAGZ,EAAE,CAAQ;IAGV,SAAS,CAAQ;IAGjB,CAAC,CAAU;IAGX,GAAG,CAAU;CACd,CAAA;AAfY,sCAAa;AAExB;IADC,IAAA,gCAAsB,GAAE;;yCACb;AAGZ;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;8BAC5D,IAAI;yCAAC;AAGV;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;8BACrD,IAAI;gDAAC;AAGjB;IADC,IAAA,gBAAM,GAAE;;wCACE;AAGX;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;0CACZ;wBAdF,aAAa;IADzB,IAAA,gBAAM,EAAC,SAAS,CAAC;GACL,aAAa,CAezB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PaCacheDependencyEntity = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
let PaCacheDependencyEntity = class PaCacheDependencyEntity {
|
|
15
|
+
cacheId;
|
|
16
|
+
depKey;
|
|
17
|
+
};
|
|
18
|
+
exports.PaCacheDependencyEntity = PaCacheDependencyEntity;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, typeorm_1.Column)({ type: "integer", primary: true }),
|
|
21
|
+
__metadata("design:type", String)
|
|
22
|
+
], PaCacheDependencyEntity.prototype, "cacheId", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, typeorm_1.Column)({ primary: true }),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], PaCacheDependencyEntity.prototype, "depKey", void 0);
|
|
27
|
+
exports.PaCacheDependencyEntity = PaCacheDependencyEntity = __decorate([
|
|
28
|
+
(0, typeorm_1.Entity)("PaCacheDependency")
|
|
29
|
+
], PaCacheDependencyEntity);
|
|
30
|
+
//# sourceMappingURL=PaCacheDependency.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaCacheDependency.entity.js","sourceRoot":"","sources":["../../src/entities/PaCacheDependency.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAyC;AAGlC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAElC,OAAO,CAAU;IAGjB,MAAM,CAAU;CACjB,CAAA;AANY,0DAAuB;AAElC;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;wDAC1B;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;uDACV;kCALL,uBAAuB;IADnC,IAAA,gBAAM,EAAC,mBAAmB,CAAC;GACf,uBAAuB,CAMnC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AppLog } from "@paroicms/server-lib";
|
|
2
|
+
import type { DataSource, EntityManager } from "typeorm";
|
|
3
|
+
import { CreateTextCacheSystemOptions } from "../cache-system";
|
|
4
|
+
import { TextCacheSystemStorage } from "../public-types";
|
|
5
|
+
export interface TextCacheSystemContext extends CreateTextCacheSystemOptions {
|
|
6
|
+
status: "ready" | "destroyed";
|
|
7
|
+
appLog: AppLog;
|
|
8
|
+
mainCn: DataSource;
|
|
9
|
+
cn: EntityManager;
|
|
10
|
+
storage: TextCacheSystemStorage;
|
|
11
|
+
logNextQuery: (count?: number) => void;
|
|
12
|
+
timeToIdleDays?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function createTextCacheSystemContext(options: CreateTextCacheSystemOptions): Promise<TextCacheSystemContext>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTextCacheSystemContext = void 0;
|
|
4
|
+
const anywhere_lib_1 = require("@paroicms/anywhere-lib");
|
|
5
|
+
const db_init_1 = require("../db-init/db-init");
|
|
6
|
+
async function createTextCacheSystemContext(options) {
|
|
7
|
+
const { mainCn, logNextQuery } = await (0, db_init_1.createOrOpenMainCn)({
|
|
8
|
+
siteName: options.siteName,
|
|
9
|
+
sqliteFile: options.storage.file,
|
|
10
|
+
appLog: options.appLog,
|
|
11
|
+
});
|
|
12
|
+
return {
|
|
13
|
+
...options,
|
|
14
|
+
status: "ready",
|
|
15
|
+
mainCn,
|
|
16
|
+
cn: mainCn.manager,
|
|
17
|
+
logNextQuery,
|
|
18
|
+
timeToIdleDays: options.timeToIdle === undefined ? undefined : (0, anywhere_lib_1.parseTimeWithUnit)(options.timeToIdle).delay,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
exports.createTextCacheSystemContext = createTextCacheSystemContext;
|
|
22
|
+
//# sourceMappingURL=cache-system-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-system-context.js","sourceRoot":"","sources":["../../src/internal/cache-system-context.ts"],"names":[],"mappings":";;;AAAA,yDAA2D;AAI3D,gDAAwD;AAajD,KAAK,UAAU,4BAA4B,CAChD,OAAqC;IAErC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,4BAAkB,EAAC;QACxD,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,OAAO;QACV,MAAM,EAAE,OAAO;QACf,MAAM;QACN,EAAE,EAAE,MAAM,CAAC,OAAO;QAClB,YAAY;QACZ,cAAc,EACZ,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,gCAAiB,EAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK;KAC7F,CAAC;AACJ,CAAC;AAlBD,oEAkBC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseCacheTtl = exports.isSameTimeUnit = void 0;
|
|
4
|
+
function isSameTimeUnit(dt, timeUnit) {
|
|
5
|
+
const nowDay = new Date().toISOString().substring(0, 10);
|
|
6
|
+
const dtDay = dt.toISOString().substring(0, 10);
|
|
7
|
+
return nowDay === dtDay;
|
|
8
|
+
}
|
|
9
|
+
exports.isSameTimeUnit = isSameTimeUnit;
|
|
10
|
+
function parseCacheTtl(cacheTtl) {
|
|
11
|
+
if (!cacheTtl)
|
|
12
|
+
return;
|
|
13
|
+
if (!cacheTtl.endsWith("d"))
|
|
14
|
+
throw new Error(`invalid textCacheTtl: '${cacheTtl}'`);
|
|
15
|
+
return Number(cacheTtl.slice(0, -1));
|
|
16
|
+
}
|
|
17
|
+
exports.parseCacheTtl = parseCacheTtl;
|
|
18
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/internal/helpers.ts"],"names":[],"mappings":";;;AAAA,SAAgB,cAAc,CAAC,EAAQ,EAAE,QAAe;IACtD,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,MAAM,KAAK,KAAK,CAAC;AAC1B,CAAC;AAJD,wCAIC;AAED,SAAgB,aAAa,CAAC,QAA4B;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,GAAG,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAJD,sCAIC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const helpers_1 = require("./helpers");
|
|
5
|
+
(0, vitest_1.describe)("parseCacheTtl", () => {
|
|
6
|
+
(0, vitest_1.it)("should return undefined when textCacheTtl is undefined", () => {
|
|
7
|
+
const textCacheTtl = undefined;
|
|
8
|
+
const result = (0, helpers_1.parseCacheTtl)(textCacheTtl);
|
|
9
|
+
(0, vitest_1.expect)(result).toBeUndefined();
|
|
10
|
+
});
|
|
11
|
+
(0, vitest_1.it)("should throw an error when textCacheTtl does not end with 'd'", () => {
|
|
12
|
+
const textCacheTtl = "10h";
|
|
13
|
+
(0, vitest_1.expect)(() => (0, helpers_1.parseCacheTtl)(textCacheTtl)).toThrowError("invalid textCacheTtl: '10h'");
|
|
14
|
+
});
|
|
15
|
+
(0, vitest_1.it)("should return the parsed number when textCacheTtl is valid", () => {
|
|
16
|
+
const textCacheTtl = "7d";
|
|
17
|
+
const result = (0, helpers_1.parseCacheTtl)(textCacheTtl);
|
|
18
|
+
(0, vitest_1.expect)(result).toBe(7);
|
|
19
|
+
});
|
|
20
|
+
(0, vitest_1.it)("should return the parsed number when textCacheTtl is 0", () => {
|
|
21
|
+
const textCacheTtl = "0d";
|
|
22
|
+
const result = (0, helpers_1.parseCacheTtl)(textCacheTtl);
|
|
23
|
+
(0, vitest_1.expect)(result).toBe(0);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.describe)("isSameTimeUnit", () => {
|
|
27
|
+
(0, vitest_1.it)("should return true when dt is the same day as now", () => {
|
|
28
|
+
const now = new Date();
|
|
29
|
+
const result = (0, helpers_1.isSameTimeUnit)(now, "day");
|
|
30
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)("should return false when dt is not the same day as now", () => {
|
|
33
|
+
const yesterday = new Date();
|
|
34
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
35
|
+
const result = (0, helpers_1.isSameTimeUnit)(yesterday, "day");
|
|
36
|
+
(0, vitest_1.expect)(result).toBe(false);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=helpers.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../../src/internal/helpers.spec.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,uCAA0D;AAE1D,IAAA,iBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAA,WAAE,EAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,YAAY,GAAG,SAAS,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,YAAY,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,YAAY,GAAG,KAAK,CAAC;QAC3B,IAAA,eAAM,EAAC,GAAG,EAAE,CAAC,IAAA,uBAAa,EAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,YAAY,GAAG,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,YAAY,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,YAAY,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAA,WAAE,EAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAA,wBAAc,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAA,wBAAc,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Tracker } from "@paroicms/server-lib";
|
|
2
|
+
import { EntityManager } from "typeorm";
|
|
3
|
+
import { CacheSetData, CacheValue } from "../public-types";
|
|
4
|
+
import { TextCacheSystemContext } from "./cache-system-context";
|
|
5
|
+
export declare function insertOrUpdateCacheValue(cn: EntityManager, data: CacheSetData, tracker: Tracker): Promise<CacheValue>;
|
|
6
|
+
export declare function getCacheValue({ cn, timeToIdleDays, appLog, siteName }: TextCacheSystemContext, cacheKey: string, tracker: Tracker): Promise<CacheValue | undefined>;
|
|
7
|
+
export declare function getDependencyKeys({ cn }: TextCacheSystemContext, cacheKey: string, tracker: Tracker): Promise<string[]>;
|
|
8
|
+
/**
|
|
9
|
+
* @returns the list of cache cacheKeys that were deleted
|
|
10
|
+
*/
|
|
11
|
+
export declare function deleteCacheValues(cn: EntityManager, options: {
|
|
12
|
+
dependencyKeys: string[];
|
|
13
|
+
}): Promise<string[]>;
|
|
14
|
+
/**
|
|
15
|
+
* @returns the number of cache identifiers that were deleted
|
|
16
|
+
*/
|
|
17
|
+
export declare function deleteUnusedCacheValues({ cn, timeToIdleDays, }: TextCacheSystemContext): Promise<number | undefined>;
|
|
18
|
+
export declare function clearCacheValues({ cn }: TextCacheSystemContext): Promise<void>;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearCacheValues = exports.deleteUnusedCacheValues = exports.deleteCacheValues = exports.getDependencyKeys = exports.getCacheValue = exports.insertOrUpdateCacheValue = void 0;
|
|
4
|
+
const data_formatters_lib_1 = require("@paroi/data-formatters-lib");
|
|
5
|
+
const anywhere_lib_1 = require("@paroicms/anywhere-lib");
|
|
6
|
+
const ddl_migration_1 = require("../db-init/ddl-migration");
|
|
7
|
+
async function insertOrUpdateCacheValue(cn, data, tracker) {
|
|
8
|
+
const result = await cn
|
|
9
|
+
.createQueryBuilder()
|
|
10
|
+
.insert()
|
|
11
|
+
.into("PaCache")
|
|
12
|
+
.values({
|
|
13
|
+
k: data.cacheKey,
|
|
14
|
+
val: data.value,
|
|
15
|
+
ts: () => "current_timestamp",
|
|
16
|
+
lastUseTs: () => "current_timestamp",
|
|
17
|
+
})
|
|
18
|
+
.orUpdate(["val", "ts", "lastUseTs"], ["k"])
|
|
19
|
+
.execute();
|
|
20
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCache", "write");
|
|
21
|
+
let newId = (0, data_formatters_lib_1.strValOrUndef)(result.identifiers[0].id, { varName: "PaCache.id" });
|
|
22
|
+
if (newId === undefined) {
|
|
23
|
+
const row = await cn
|
|
24
|
+
.createQueryBuilder()
|
|
25
|
+
.select("c.id", "id")
|
|
26
|
+
.from("PaCache", "c")
|
|
27
|
+
.where("c.k = :cacheKey", { cacheKey: data.cacheKey })
|
|
28
|
+
.getRawOne();
|
|
29
|
+
if (!row)
|
|
30
|
+
throw new Error(`unable to find cache row '${data.cacheKey}'`);
|
|
31
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCache", "read");
|
|
32
|
+
newId = (0, data_formatters_lib_1.strVal)(row.id);
|
|
33
|
+
}
|
|
34
|
+
await cn
|
|
35
|
+
.createQueryBuilder()
|
|
36
|
+
.insert()
|
|
37
|
+
.into("PaCacheDependency")
|
|
38
|
+
.values(data.dependencyKeys.map((depKey) => ({
|
|
39
|
+
cacheId: newId,
|
|
40
|
+
depKey,
|
|
41
|
+
})))
|
|
42
|
+
.execute();
|
|
43
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCacheDependency", "write");
|
|
44
|
+
const row = await cn
|
|
45
|
+
.createQueryBuilder()
|
|
46
|
+
.select("c.ts", "ts")
|
|
47
|
+
.from("PaCache", "c")
|
|
48
|
+
.where("c.id = :id", { id: newId })
|
|
49
|
+
.getRawOne();
|
|
50
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCacheDependency", "read");
|
|
51
|
+
if (!row)
|
|
52
|
+
throw new Error(`missing cache row: ${newId}`);
|
|
53
|
+
const lastModified = (0, data_formatters_lib_1.dateVal)(row.ts).toISOString();
|
|
54
|
+
return {
|
|
55
|
+
lastModified,
|
|
56
|
+
value: data.value,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
exports.insertOrUpdateCacheValue = insertOrUpdateCacheValue;
|
|
60
|
+
async function getCacheValue({ cn, timeToIdleDays, appLog, siteName }, cacheKey, tracker) {
|
|
61
|
+
const row = await cn
|
|
62
|
+
.createQueryBuilder()
|
|
63
|
+
.select("c.val", "val")
|
|
64
|
+
.addSelect("c.ts", "ts")
|
|
65
|
+
.addSelect("c.lastUseTs", "lastUseTs")
|
|
66
|
+
.from("PaCache", "c")
|
|
67
|
+
.where("c.k = :cacheKey", { cacheKey })
|
|
68
|
+
.getRawOne();
|
|
69
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCache", "read");
|
|
70
|
+
if (!row)
|
|
71
|
+
return;
|
|
72
|
+
const lastUseTs = (0, data_formatters_lib_1.dateVal)(row.lastUseTs);
|
|
73
|
+
if (timeToIdleDays !== undefined && !(0, anywhere_lib_1.isSameTimeUnit)(lastUseTs, "day")) {
|
|
74
|
+
appLog.debug(`[${siteName}] updating lastUseTs of cache: ${cacheKey}`);
|
|
75
|
+
await cn
|
|
76
|
+
.createQueryBuilder()
|
|
77
|
+
.update("PaCache")
|
|
78
|
+
.set({
|
|
79
|
+
lastUseTs: () => "current_timestamp",
|
|
80
|
+
})
|
|
81
|
+
.where("k = :cacheKey", { cacheKey })
|
|
82
|
+
.execute();
|
|
83
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCache", "write");
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
value: (0, data_formatters_lib_1.strVal)(row.val),
|
|
87
|
+
lastModified: (0, data_formatters_lib_1.dateVal)(row.ts).toISOString(),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
exports.getCacheValue = getCacheValue;
|
|
91
|
+
async function getDependencyKeys({ cn }, cacheKey, tracker) {
|
|
92
|
+
const rows = await cn
|
|
93
|
+
.createQueryBuilder()
|
|
94
|
+
.select("d.depKey", "depKey")
|
|
95
|
+
.from("PaCacheDependency", "d")
|
|
96
|
+
.innerJoin("PaCache", "c", "c.id = d.cacheId")
|
|
97
|
+
.where("c.k = :cacheKey", { cacheKey })
|
|
98
|
+
.getRawMany();
|
|
99
|
+
tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCacheDependency", "read");
|
|
100
|
+
return rows.map((row) => (0, data_formatters_lib_1.strVal)(row.depKey));
|
|
101
|
+
}
|
|
102
|
+
exports.getDependencyKeys = getDependencyKeys;
|
|
103
|
+
/**
|
|
104
|
+
* @returns the list of cache cacheKeys that were deleted
|
|
105
|
+
*/
|
|
106
|
+
async function deleteCacheValues(cn, options) {
|
|
107
|
+
const rows = await cn
|
|
108
|
+
.createQueryBuilder()
|
|
109
|
+
.select("c.id", "id")
|
|
110
|
+
.addSelect("c.k", "k")
|
|
111
|
+
.from("PaCache", "c")
|
|
112
|
+
.innerJoin("PaCacheDependency", "d", "d.cacheId = c.id")
|
|
113
|
+
.where("d.depKey in (:...dependencyKeys)", { dependencyKeys: options.dependencyKeys })
|
|
114
|
+
.getRawMany();
|
|
115
|
+
const cacheKeys = rows.map((row) => (0, data_formatters_lib_1.strVal)(row.k));
|
|
116
|
+
const cacheIds = rows.map((row) => (0, data_formatters_lib_1.strVal)(row.id));
|
|
117
|
+
await cn
|
|
118
|
+
.createQueryBuilder()
|
|
119
|
+
.delete()
|
|
120
|
+
.from("PaCache")
|
|
121
|
+
.where("id in (:...cacheIds)", { cacheIds: cacheIds })
|
|
122
|
+
.execute();
|
|
123
|
+
return cacheKeys;
|
|
124
|
+
}
|
|
125
|
+
exports.deleteCacheValues = deleteCacheValues;
|
|
126
|
+
/**
|
|
127
|
+
* @returns the number of cache identifiers that were deleted
|
|
128
|
+
*/
|
|
129
|
+
async function deleteUnusedCacheValues({ cn, timeToIdleDays, }) {
|
|
130
|
+
const result = await cn
|
|
131
|
+
.createQueryBuilder()
|
|
132
|
+
.delete()
|
|
133
|
+
.from("PaCache")
|
|
134
|
+
.where(`date(lastUseTs) < date(current_timestamp, '-${timeToIdleDays} day')`)
|
|
135
|
+
.execute();
|
|
136
|
+
return result.affected ?? undefined;
|
|
137
|
+
}
|
|
138
|
+
exports.deleteUnusedCacheValues = deleteUnusedCacheValues;
|
|
139
|
+
async function clearCacheValues({ cn }) {
|
|
140
|
+
await cn.createQueryBuilder().delete().from("PaCacheDependency").execute();
|
|
141
|
+
await cn.createQueryBuilder().delete().from("PaCache").execute();
|
|
142
|
+
}
|
|
143
|
+
exports.clearCacheValues = clearCacheValues;
|
|
144
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/internal/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface TextCacheSystemStorage {
|
|
2
|
+
type: "sqlite";
|
|
3
|
+
file: string;
|
|
4
|
+
}
|
|
5
|
+
export interface CacheValue {
|
|
6
|
+
value: string;
|
|
7
|
+
/**
|
|
8
|
+
* Timestamp as ISO string.
|
|
9
|
+
*/
|
|
10
|
+
lastModified: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CacheSetData {
|
|
13
|
+
cacheKey: string;
|
|
14
|
+
value: string;
|
|
15
|
+
dependencyKeys: string[];
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-types.js","sourceRoot":"","sources":["../src/public-types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@paroicms/server-text-cache-system",
|
|
3
|
+
"version": "0.11.0",
|
|
4
|
+
"description": "Cache system.",
|
|
5
|
+
"author": "Paroi Team",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"main": "dist/api.js",
|
|
8
|
+
"typings": "dist/api.d.ts",
|
|
9
|
+
"type": "commonjs",
|
|
10
|
+
"files": [
|
|
11
|
+
"ddl",
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"clear": "rimraf dist/*",
|
|
17
|
+
"dev": "tsc --watch --preserveWatchOutput",
|
|
18
|
+
"eslint": "eslint .",
|
|
19
|
+
"test": "vitest"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@paroi/async-lib": "^0.1.2",
|
|
23
|
+
"@paroi/data-formatters-lib": "^0.1.2",
|
|
24
|
+
"@paroicms/server-lib": "^0.14.0",
|
|
25
|
+
"@paroicms/anywhere-lib": "^0.53.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^20.10.5",
|
|
29
|
+
"rimraf": "^5.0.5",
|
|
30
|
+
"typescript": "^5.3.3",
|
|
31
|
+
"vitest": "^1.1.1"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"typeorm": "0.3"
|
|
35
|
+
}
|
|
36
|
+
}
|