@paroicms/server-text-cache-system 1.2.3 → 1.3.1

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 (36) hide show
  1. package/ddl/text-cache.ddl.sql +31 -18
  2. package/dist/cache-system.d.ts +13 -7
  3. package/dist/cache-system.js +31 -10
  4. package/dist/cache-system.js.map +1 -1
  5. package/dist/db-init/db-init.d.ts +4 -3
  6. package/dist/db-init/db-init.js +38 -18
  7. package/dist/db-init/db-init.js.map +1 -1
  8. package/dist/db-init/ddl-migration.d.ts +2 -6
  9. package/dist/db-init/ddl-migration.js +15 -17
  10. package/dist/db-init/ddl-migration.js.map +1 -1
  11. package/dist/db-init/entities/PaTextCache.entity.d.ts +7 -0
  12. package/dist/{entities/PaCache.entity.js → db-init/entities/PaTextCache.entity.js} +21 -26
  13. package/dist/db-init/entities/PaTextCache.entity.js.map +1 -0
  14. package/dist/db-init/entities/PaTextCacheDependency.entity.d.ts +4 -0
  15. package/dist/{entities/PaCacheDependency.entity.js → db-init/entities/PaTextCacheDependency.entity.js} +11 -11
  16. package/dist/db-init/entities/PaTextCacheDependency.entity.js.map +1 -0
  17. package/dist/db-init/entities/PaTextCacheScheduledInvalidation.entity.d.ts +6 -0
  18. package/dist/db-init/entities/PaTextCacheScheduledInvalidation.entity.js +40 -0
  19. package/dist/db-init/entities/PaTextCacheScheduledInvalidation.entity.js.map +1 -0
  20. package/dist/internal/cache-system-context.d.ts +8 -4
  21. package/dist/internal/cache-system-context.js +8 -5
  22. package/dist/internal/cache-system-context.js.map +1 -1
  23. package/dist/internal/queries.d.ts +6 -6
  24. package/dist/internal/queries.js +48 -60
  25. package/dist/internal/queries.js.map +1 -1
  26. package/dist/internal/scheduled-invalidation-queries.d.ts +14 -0
  27. package/dist/internal/scheduled-invalidation-queries.js +75 -0
  28. package/dist/internal/scheduled-invalidation-queries.js.map +1 -0
  29. package/dist/internal/scheduler.d.ts +7 -0
  30. package/dist/internal/scheduler.js +93 -0
  31. package/dist/internal/scheduler.js.map +1 -0
  32. package/package.json +5 -5
  33. package/dist/entities/PaCache.entity.d.ts +0 -8
  34. package/dist/entities/PaCache.entity.js.map +0 -1
  35. package/dist/entities/PaCacheDependency.entity.d.ts +0 -4
  36. package/dist/entities/PaCacheDependency.entity.js.map +0 -1
@@ -1,31 +1,44 @@
1
1
  PRAGMA journal_mode = TRUNCATE;
2
2
  PRAGMA foreign_keys = 1;
3
3
 
4
- drop index if exists PaCacheDependency_depK_index;
5
- drop table if exists PaCacheDependency;
6
- drop table if exists PaCache;
7
- drop table if exists PaDbMetadata;
8
-
9
- create table PaDbMetadata (
10
- dbSchema varchar(100) not null primary key,
11
- dbVersion integer not null
4
+ drop index if exists PaTextCacheScheduledInvalidation_eventK_idx;
5
+ drop table if exists PaTextCacheScheduledInvalidation;
6
+ drop index if exists PaTextCacheDependency_depK_idx;
7
+ drop table if exists PaTextCacheDependency;
8
+ drop table if exists PaTextCache;
9
+ drop table if exists PaMetadata;
10
+
11
+ create table PaMetadata (
12
+ dbSchema varchar(100) not null,
13
+ k varchar(100) not null,
14
+ val varchar(250) not null,
15
+ primary key (dbSchema, k)
12
16
  );
13
17
 
14
- insert into PaDbMetadata (dbSchema, dbVersion) values ('text-cache', 2);
18
+ insert into PaMetadata (dbSchema, k, val) values ('text-cache', 'dbSchemaVersion', '3');
15
19
 
16
- create table PaCache (
17
- id integer not null primary key autoincrement,
18
- ts timestamp not null default current_timestamp,
20
+ create table PaTextCache (
21
+ k varchar(250) not null primary key,
19
22
  resourceVersion varchar(100) not null,
20
- k varchar(250) not null unique,
21
23
  val text not null,
22
- lastUseTs timestamp not null default current_timestamp
24
+ modifiedAt timestamp not null default current_timestamp,
25
+ readAt timestamp not null default current_timestamp
23
26
  );
24
27
 
25
- create table PaCacheDependency (
26
- cacheId integer not null references PaCache (id) on delete cascade,
28
+ create table PaTextCacheDependency (
29
+ cacheK varchar(250) not null references PaTextCache (k) on delete cascade,
30
+ depK varchar(250) not null,
31
+ primary key (cacheK, depK)
32
+ );
33
+
34
+ create index PaTextCacheDependency_depK_idx on PaTextCacheDependency (depK);
35
+
36
+ create table PaTextCacheScheduledInvalidation (
37
+ eventK varchar(250) not null,
27
38
  depK varchar(250) not null,
28
- primary key (cacheId, depK)
39
+ scheduledAt timestamp not null,
40
+ scheduledSince timestamp not null default current_timestamp,
41
+ primary key (eventK, depK)
29
42
  );
30
43
 
31
- create index PaCacheDependency_depK_index on PaCacheDependency (depK);
44
+ create index PaTextCacheScheduledInvalidation_eventK_idx on PaTextCacheScheduledInvalidation (eventK);
@@ -1,7 +1,7 @@
1
1
  import type { AppLog, Tracker } from "@paroicms/server-lib";
2
2
  import type { CacheSetData, CacheValue, TextCacheSystemStorage } from "./public-types";
3
3
  export interface CreateTextCacheSystemOptions {
4
- siteName: string;
4
+ appVersion: string;
5
5
  storage: TextCacheSystemStorage;
6
6
  appLog: AppLog;
7
7
  /**
@@ -13,13 +13,19 @@ export interface TextCacheSystem {
13
13
  setCacheValue(data: CacheSetData, tracker: Tracker): Promise<CacheValue>;
14
14
  getCacheValue(cacheKey: string, tracker: Tracker): Promise<CacheValue | undefined>;
15
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[]>;
16
+ invalidate(dependencyKeys: string[]): Promise<void>;
17
+ scheduleInvalidation(eventKey: string, dependencyKeys: string[], scheduledAt: Date): Promise<void>;
18
+ cancelScheduledInvalidation(eventKey: string): Promise<void>;
20
19
  cleanUnusedValues(): Promise<void>;
20
+ invalidateAll(): Promise<void>;
21
21
  clearCache(): Promise<void>;
22
22
  close(): Promise<void>;
23
23
  }
24
- export declare function createTextCacheSystem(options: CreateTextCacheSystemOptions): Promise<TextCacheSystem>;
25
- export declare function createNoTextCacheSystem(): TextCacheSystem;
24
+ export declare function createTextCacheSystem(options: CreateTextCacheSystemOptions): Promise<{
25
+ textCache: TextCacheSystem;
26
+ isCleared: boolean;
27
+ }>;
28
+ export declare function createNoTextCacheSystem(): {
29
+ textCache: TextCacheSystem;
30
+ isCleared: boolean;
31
+ };
@@ -3,14 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createNoTextCacheSystem = exports.createTextCacheSystem = void 0;
4
4
  const cache_system_context_1 = require("./internal/cache-system-context");
5
5
  const queries_1 = require("./internal/queries");
6
+ const scheduled_invalidation_queries_1 = require("./internal/scheduled-invalidation-queries");
6
7
  async function createTextCacheSystem(options) {
7
- const context = await (0, cache_system_context_1.createTextCacheSystemContext)(options);
8
+ const { context, isCleared } = await (0, cache_system_context_1.createTextCacheSystemContext)(options);
8
9
  function checkStatus() {
9
10
  if (context.status !== "ready") {
10
11
  throw new Error(`TextCache is ${context.status}`);
11
12
  }
12
13
  }
13
- return {
14
+ const textCache = {
14
15
  async setCacheValue(data, tracker) {
15
16
  checkStatus();
16
17
  return await (0, queries_1.insertOrUpdateCacheValue)(context.cn, data, tracker);
@@ -19,7 +20,7 @@ async function createTextCacheSystem(options) {
19
20
  checkStatus();
20
21
  const value = await (0, queries_1.getCacheValue)(context, cacheKey, tracker);
21
22
  if (value !== undefined) {
22
- context.appLog.debug(`[${context.siteName}] found cache: ${cacheKey}`);
23
+ context.appLog.debug(`found cache: ${cacheKey}`);
23
24
  }
24
25
  return value;
25
26
  },
@@ -31,41 +32,61 @@ async function createTextCacheSystem(options) {
31
32
  checkStatus();
32
33
  const cacheKeys = await (0, queries_1.deleteCacheValues)(context.cn, { dependencyKeys });
33
34
  if (cacheKeys.length > 0) {
34
- context.appLog.debug(`[${context.siteName}] ${cacheKeys.length} invalidated cache: ${cacheKeys.join(", ")}`);
35
+ context.appLog.debug(`${cacheKeys.length} invalidated cache: ${cacheKeys.join(", ")}`);
35
36
  }
36
- return cacheKeys;
37
+ },
38
+ async scheduleInvalidation(eventKey, dependencyKeys, scheduledAt) {
39
+ checkStatus();
40
+ await (0, scheduled_invalidation_queries_1.setScheduledInvalidation)(context.cn, { eventKey, dependencyKeys, scheduledAt });
41
+ await context.scheduler.reset();
42
+ },
43
+ async cancelScheduledInvalidation(eventKey) {
44
+ checkStatus();
45
+ await (0, scheduled_invalidation_queries_1.deleteScheduledInvalidation)(context.cn, eventKey);
46
+ await context.scheduler.reset();
37
47
  },
38
48
  async cleanUnusedValues() {
39
49
  checkStatus();
40
50
  const count = await (0, queries_1.deleteUnusedCacheValues)(context);
41
51
  if (count !== undefined && count > 0) {
42
- context.appLog.debug(`[${context.siteName}] ${count} unused cache values were deleted`);
52
+ context.appLog.debug(`${count} unused cache values were deleted`);
43
53
  }
44
54
  },
55
+ async invalidateAll() {
56
+ checkStatus();
57
+ await (0, queries_1.invalidateAllCacheValues)(context);
58
+ context.appLog.debug("cache is fully invalidated");
59
+ },
45
60
  async clearCache() {
46
61
  checkStatus();
47
62
  await (0, queries_1.clearCacheValues)(context);
48
- context.appLog.debug(`[${context.siteName}] cache is cleared`);
63
+ context.appLog.debug("cache is cleared");
49
64
  },
50
65
  async close() {
51
66
  if (context.status === "destroyed")
52
67
  return;
53
68
  context.status = "destroyed";
54
- await context.mainCn.destroy();
69
+ await context.scheduler.stop();
70
+ await context.cn.destroy();
55
71
  },
56
72
  };
73
+ return { textCache, isCleared };
57
74
  }
58
75
  exports.createTextCacheSystem = createTextCacheSystem;
59
76
  function createNoTextCacheSystem() {
60
- return {
77
+ const textCache = {
61
78
  setCacheValue: (data) => Promise.resolve({ value: data.value }),
62
79
  getCacheValue: () => Promise.resolve(undefined),
63
80
  getDependencyKeys: () => Promise.resolve([]),
64
- invalidate: () => Promise.resolve([]),
81
+ invalidate: () => Promise.resolve(),
82
+ scheduleInvalidation: () => Promise.resolve(),
83
+ cancelScheduledInvalidation: () => Promise.resolve(),
65
84
  cleanUnusedValues: () => Promise.resolve(),
85
+ invalidateAll: () => Promise.resolve(),
66
86
  clearCache: () => Promise.resolve(),
67
87
  close: () => Promise.resolve(),
68
88
  };
89
+ return { textCache, isCleared: false };
69
90
  }
70
91
  exports.createNoTextCacheSystem = createNoTextCacheSystem;
71
92
  //# sourceMappingURL=cache-system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache-system.js","sourceRoot":"","sources":["../src/cache-system.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache-system.js","sourceRoot":"","sources":["../src/cache-system.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { type AppLog } from "@paroicms/server-lib";
2
2
  import type { DataSource } from "typeorm";
3
- export declare function createOrOpenMainCn({ sqliteFile, siteName, appLog, }: {
3
+ export declare function createOrOpenConnection({ sqliteFile, appVersion, appLog, }: {
4
4
  sqliteFile: string;
5
- siteName: string;
5
+ appVersion: string;
6
6
  appLog: AppLog;
7
7
  }): Promise<{
8
- mainCn: DataSource;
8
+ cn: DataSource;
9
9
  logNextQuery: (count?: number | undefined) => void;
10
+ isCleared: boolean;
10
11
  }>;
@@ -1,36 +1,56 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createOrOpenMainCn = void 0;
4
- const node_path_1 = require("node:path");
3
+ exports.createOrOpenConnection = void 0;
5
4
  const server_lib_1 = require("@paroicms/server-lib");
5
+ const node_path_1 = require("node:path");
6
6
  const constants_1 = require("../constants");
7
- const PaCache_entity_1 = require("../entities/PaCache.entity");
8
- const PaCacheDependency_entity_1 = require("../entities/PaCacheDependency.entity");
7
+ const queries_1 = require("../internal/queries");
9
8
  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,
9
+ const PaTextCache_entity_1 = require("./entities/PaTextCache.entity");
10
+ const PaTextCacheDependency_entity_1 = require("./entities/PaTextCacheDependency.entity");
11
+ async function createOrOpenConnection({ sqliteFile, appVersion, appLog, }) {
12
+ const { logNextQuery, typeOrmLogger } = (0, server_lib_1.createSqlLogger)({ appLog, dbSchemaName: ddl_migration_1.dbSchemaName });
13
+ const { cn, isNewDb, migrationReport } = await (0, server_lib_1.createOrOpenSqliteConnection)({
14
14
  canCreate: true,
15
15
  dbSchemaName: ddl_migration_1.dbSchemaName,
16
16
  sqliteFile,
17
17
  ddlFile: (0, node_path_1.join)(constants_1.packageDir, "ddl", "text-cache.ddl.sql"),
18
18
  migrateDb,
19
- entities: [PaCache_entity_1.PaCacheEntity, PaCacheDependency_entity_1.PaCacheDependencyEntity],
19
+ entities: [PaTextCache_entity_1.PaTextCacheEntity, PaTextCacheDependency_entity_1.PaTextCacheDependencyEntity],
20
20
  logger: typeOrmLogger,
21
21
  appLog,
22
22
  });
23
+ let isCleared = isNewDb || migrationReport.migrated;
24
+ const storedAppVersion = await (0, server_lib_1.getMetadataValue)(cn, { dbSchemaName: ddl_migration_1.dbSchemaName, key: "appVersion" });
25
+ if (storedAppVersion !== appVersion) {
26
+ if (!isCleared) {
27
+ await (0, queries_1.clearCacheValues)({ cn });
28
+ isCleared = true;
29
+ }
30
+ await (0, server_lib_1.setMetadataValue)(cn, { dbSchemaName: ddl_migration_1.dbSchemaName, key: "appVersion", value: appVersion });
31
+ if (storedAppVersion !== undefined) {
32
+ appLog.info(`Cleared text cache due to app version change from ${storedAppVersion} to ${appVersion}`);
33
+ }
34
+ }
23
35
  async function migrateDb(cn) {
24
- const dbVersion = await (0, ddl_migration_1.getDbVersion)(cn, { siteName });
25
- if (dbVersion !== ddl_migration_1.currentVariantsDbSchemaVersion) {
26
- await (0, ddl_migration_1.migrateMediasDb)(cn, {
27
- fromVersion: dbVersion,
28
- siteName,
29
- appLog,
30
- });
36
+ const dbVersion = await (0, server_lib_1.getMetadataDbSchemaVersion)(cn, { dbSchemaName: ddl_migration_1.dbSchemaName });
37
+ if (dbVersion === ddl_migration_1.currentDbSchemaVersion) {
38
+ return {
39
+ migrated: false,
40
+ schemaVersion: dbVersion,
41
+ };
31
42
  }
43
+ await (0, ddl_migration_1.migrateTextCacheDb)(cn, {
44
+ fromVersion: dbVersion,
45
+ appLog,
46
+ });
47
+ return {
48
+ migrated: true,
49
+ fromVersion: dbVersion,
50
+ schemaVersion: ddl_migration_1.currentDbSchemaVersion,
51
+ };
32
52
  }
33
- return { mainCn, logNextQuery };
53
+ return { cn, logNextQuery, isCleared };
34
54
  }
35
- exports.createOrOpenMainCn = createOrOpenMainCn;
55
+ exports.createOrOpenConnection = createOrOpenConnection;
36
56
  //# sourceMappingURL=db-init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../src/db-init/db-init.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AACjC,qDAAkG;AAElG,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,gBAAI,EAAC,sBAAU,EAAE,KAAK,EAAE,oBAAoB,CAAC;QACtD,SAAS;QACT,QAAQ,EAAE,CAAC,8BAAa,EAAE,kDAAuB,CAAC;QAClD,MAAM,EAAE,aAAa;QACrB,MAAM;KACP,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;AA/BD,gDA+BC"}
1
+ {"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../src/db-init/db-init.ts"],"names":[],"mappings":";;;AAAA,qDAQ8B;AAC9B,yCAAiC;AAEjC,4CAA0C;AAC1C,iDAAuD;AACvD,mDAA2F;AAC3F,sEAAkE;AAClE,0FAAsF;AAE/E,KAAK,UAAU,sBAAsB,CAAC,EAC3C,UAAU,EACV,UAAU,EACV,MAAM,GACqD;IAC3D,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,IAAA,4BAAe,EAAC,EAAE,MAAM,EAAE,YAAY,EAAZ,4BAAY,EAAE,CAAC,CAAC;IAElF,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,IAAA,yCAA4B,EAAC;QAC1E,SAAS,EAAE,IAAI;QACf,YAAY,EAAZ,4BAAY;QACZ,UAAU;QACV,OAAO,EAAE,IAAA,gBAAI,EAAC,sBAAU,EAAE,KAAK,EAAE,oBAAoB,CAAC;QACtD,SAAS;QACT,QAAQ,EAAE,CAAC,sCAAiB,EAAE,0DAA2B,CAAC;QAC1D,MAAM,EAAE,aAAa;QACrB,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,SAAS,GAAG,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC;IAEpD,MAAM,gBAAgB,GAAG,MAAM,IAAA,6BAAgB,EAAC,EAAE,EAAE,EAAE,YAAY,EAAZ,4BAAY,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IACzF,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAA,0BAAgB,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/B,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,MAAM,IAAA,6BAAgB,EAAC,EAAE,EAAE,EAAE,YAAY,EAAZ,4BAAY,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACnF,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CACT,qDAAqD,gBAAgB,OAAO,UAAU,EAAE,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,UAAU,SAAS,CAAC,EAAc;QACrC,MAAM,SAAS,GAAG,MAAM,IAAA,uCAA0B,EAAC,EAAE,EAAE,EAAE,YAAY,EAAZ,4BAAY,EAAE,CAAC,CAAC;QACzE,IAAI,SAAS,KAAK,sCAAsB,EAAE,CAAC;YACzC,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,aAAa,EAAE,SAAS;aACzB,CAAC;QACJ,CAAC;QACD,MAAM,IAAA,kCAAkB,EAAC,EAAE,EAAE;YAC3B,WAAW,EAAE,SAAS;YACtB,MAAM;SACP,CAAC,CAAC;QACH,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,SAAS;YACtB,aAAa,EAAE,sCAAsB;SACtC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC;AAtDD,wDAsDC"}
@@ -1,12 +1,8 @@
1
1
  import { type AppLog } from "@paroicms/server-lib";
2
2
  import type { DataSource } from "typeorm";
3
3
  export declare const dbSchemaName = "text-cache";
4
- export declare const currentVariantsDbSchemaVersion = 2;
5
- export declare function getDbVersion(cn: DataSource, { siteName }: {
6
- siteName: string;
7
- }): Promise<number>;
8
- export declare function migrateMediasDb(cn: DataSource, { fromVersion, siteName, appLog }: {
4
+ export declare const currentDbSchemaVersion = 3;
5
+ export declare function migrateTextCacheDb(cn: DataSource, { fromVersion, appLog }: {
9
6
  fromVersion: number;
10
- siteName: string;
11
7
  appLog: AppLog;
12
8
  }): Promise<void>;
@@ -1,32 +1,30 @@
1
1
  "use strict";
2
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");
3
+ exports.migrateTextCacheDb = exports.currentDbSchemaVersion = exports.dbSchemaName = void 0;
5
4
  const server_lib_1 = require("@paroicms/server-lib");
6
5
  const node_path_1 = require("node:path");
7
6
  const constants_1 = require("../constants");
8
7
  exports.dbSchemaName = "text-cache";
9
- exports.currentVariantsDbSchemaVersion = 2;
10
- async function getDbVersion(cn, { siteName }) {
11
- const [row] = await cn.query(`select dbVersion from PaDbMetadata where dbSchema = '${exports.dbSchemaName}'`);
12
- if (!row)
13
- throw new Error(`[${siteName}] missing dbSchema '${exports.dbSchemaName}' in database`);
14
- return (0, data_formatters_lib_1.nbVal)(row.dbVersion, { varName: "dbVersion" });
15
- }
16
- exports.getDbVersion = getDbVersion;
17
- async function migrateMediasDb(cn, { fromVersion, siteName, appLog }) {
18
- const toVersion = exports.currentVariantsDbSchemaVersion;
8
+ exports.currentDbSchemaVersion = 3;
9
+ async function migrateTextCacheDb(cn, { fromVersion, appLog }) {
10
+ const toVersion = exports.currentDbSchemaVersion;
19
11
  let currentVersion = fromVersion;
12
+ if (currentVersion <= 2) {
13
+ await cn.query("drop table if exists PaTextCacheScheduledInvalidation");
14
+ await cn.query("drop index if exists PaTextCacheDependency_depK_index");
15
+ await cn.query("drop table if exists PaTextCacheDependency");
16
+ await cn.query("drop table if exists PaTextCache");
17
+ }
20
18
  // We don't care losing cache data
21
19
  if (currentVersion < toVersion) {
22
- appLog.info(`[${siteName}] reset the text-cache database`);
20
+ appLog.info("reset the text-cache database");
23
21
  await (0, server_lib_1.executeDdl)(cn, (0, node_path_1.join)(constants_1.packageDir, "ddl", "text-cache.ddl.sql"));
24
- currentVersion = await getDbVersion(cn, { siteName });
22
+ currentVersion = await (0, server_lib_1.getMetadataDbSchemaVersion)(cn, { dbSchemaName: exports.dbSchemaName });
25
23
  }
26
24
  if (currentVersion !== toVersion) {
27
- throw new Error(`[${siteName}] version of ${exports.dbSchemaName} database should be '${toVersion}', but is '${currentVersion}'`);
25
+ throw new Error(`version of ${exports.dbSchemaName} database should be '${toVersion}', but is '${currentVersion}'`);
28
26
  }
29
- appLog.info(`[${siteName}] ${exports.dbSchemaName} database was migrated from ${fromVersion} to ${currentVersion}`);
27
+ appLog.info(`${exports.dbSchemaName} database was migrated from ${fromVersion} to ${currentVersion}`);
30
28
  }
31
- exports.migrateMediasDb = migrateMediasDb;
29
+ exports.migrateTextCacheDb = migrateTextCacheDb;
32
30
  //# sourceMappingURL=ddl-migration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ddl-migration.js","sourceRoot":"","sources":["../../src/db-init/ddl-migration.ts"],"names":[],"mappings":";;;AAAA,oEAAmD;AAEnD,qDAA+D;AAC/D,yCAAiC;AAEjC,4CAA0C;AAE7B,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,kCAAkC;IAClC,IAAI,cAAc,GAAG,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,iCAAiC,CAAC,CAAC;QAC3D,MAAM,IAAA,uBAAU,EAAC,EAAE,EAAE,IAAA,gBAAI,EAAC,sBAAU,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACpE,cAAc,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxD,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;AAtBD,0CAsBC"}
1
+ {"version":3,"file":"ddl-migration.js","sourceRoot":"","sources":["../../src/db-init/ddl-migration.ts"],"names":[],"mappings":";;;AAAA,qDAA2F;AAC3F,yCAAiC;AAEjC,4CAA0C;AAE7B,QAAA,YAAY,GAAG,YAAY,CAAC;AAC5B,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAEjC,KAAK,UAAU,kBAAkB,CACtC,EAAc,EACd,EAAE,WAAW,EAAE,MAAM,EAA2C;IAEhE,MAAM,SAAS,GAAG,8BAAsB,CAAC;IACzC,IAAI,cAAc,GAAG,WAAW,CAAC;IAEjC,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,EAAE,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACxE,MAAM,EAAE,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACxE,MAAM,EAAE,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC7D,MAAM,EAAE,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACrD,CAAC;IAED,kCAAkC;IAClC,IAAI,cAAc,GAAG,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC7C,MAAM,IAAA,uBAAU,EAAC,EAAE,EAAE,IAAA,gBAAI,EAAC,sBAAU,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACpE,cAAc,GAAG,MAAM,IAAA,uCAA0B,EAAC,EAAE,EAAE,EAAE,YAAY,EAAZ,oBAAY,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,cAAc,oBAAY,wBAAwB,SAAS,cAAc,cAAc,GAAG,CAC3F,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,oBAAY,+BAA+B,WAAW,OAAO,cAAc,EAAE,CAAC,CAAC;AAChG,CAAC;AA3BD,gDA2BC"}
@@ -0,0 +1,7 @@
1
+ export declare class PaTextCacheEntity {
2
+ k: string;
3
+ resourceVersion: string;
4
+ val: string;
5
+ modifiedAt: Date;
6
+ readAt: Date;
7
+ }
@@ -9,42 +9,37 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.PaCacheEntity = void 0;
12
+ exports.PaTextCacheEntity = void 0;
13
13
  const typeorm_1 = require("typeorm");
14
- let PaCacheEntity = class PaCacheEntity {
15
- id;
16
- ts;
17
- resourceVersion;
18
- lastUseTs;
14
+ let PaTextCacheEntity = class PaTextCacheEntity {
19
15
  k;
16
+ resourceVersion;
20
17
  val;
18
+ modifiedAt;
19
+ readAt;
21
20
  };
22
- exports.PaCacheEntity = PaCacheEntity;
21
+ exports.PaTextCacheEntity = PaTextCacheEntity;
23
22
  __decorate([
24
- (0, typeorm_1.PrimaryGeneratedColumn)(),
23
+ (0, typeorm_1.Column)({ primary: true }),
25
24
  __metadata("design:type", String)
26
- ], PaCacheEntity.prototype, "id", void 0);
27
- __decorate([
28
- (0, typeorm_1.Column)({ type: "datetime", default: () => "current_timestamp" }),
29
- __metadata("design:type", Date)
30
- ], PaCacheEntity.prototype, "ts", void 0);
25
+ ], PaTextCacheEntity.prototype, "k", void 0);
31
26
  __decorate([
32
27
  (0, typeorm_1.Column)(),
33
28
  __metadata("design:type", String)
34
- ], PaCacheEntity.prototype, "resourceVersion", void 0);
29
+ ], PaTextCacheEntity.prototype, "resourceVersion", void 0);
30
+ __decorate([
31
+ (0, typeorm_1.Column)({ type: "text" }),
32
+ __metadata("design:type", String)
33
+ ], PaTextCacheEntity.prototype, "val", void 0);
35
34
  __decorate([
36
35
  (0, typeorm_1.Column)({ type: "datetime", default: () => "current_timestamp" }),
37
36
  __metadata("design:type", Date)
38
- ], PaCacheEntity.prototype, "lastUseTs", void 0);
37
+ ], PaTextCacheEntity.prototype, "modifiedAt", void 0);
39
38
  __decorate([
40
- (0, typeorm_1.Column)(),
41
- __metadata("design:type", String)
42
- ], PaCacheEntity.prototype, "k", void 0);
43
- __decorate([
44
- (0, typeorm_1.Column)({ type: "text" }),
45
- __metadata("design:type", String)
46
- ], PaCacheEntity.prototype, "val", void 0);
47
- exports.PaCacheEntity = PaCacheEntity = __decorate([
48
- (0, typeorm_1.Entity)("PaCache")
49
- ], PaCacheEntity);
50
- //# sourceMappingURL=PaCache.entity.js.map
39
+ (0, typeorm_1.Column)({ type: "datetime", default: () => "current_timestamp" }),
40
+ __metadata("design:type", Date)
41
+ ], PaTextCacheEntity.prototype, "readAt", void 0);
42
+ exports.PaTextCacheEntity = PaTextCacheEntity = __decorate([
43
+ (0, typeorm_1.Entity)("PaTextCache")
44
+ ], PaTextCacheEntity);
45
+ //# sourceMappingURL=PaTextCache.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaTextCache.entity.js","sourceRoot":"","sources":["../../../src/db-init/entities/PaTextCache.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAyC;AAGlC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAE5B,CAAC,CAAU;IAGX,eAAe,CAAU;IAGzB,GAAG,CAAU;IAGb,UAAU,CAAQ;IAGlB,MAAM,CAAQ;CACf,CAAA;AAfY,8CAAiB;AAE5B;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;4CACf;AAGX;IADC,IAAA,gBAAM,GAAE;;0DACgB;AAGzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;8CACZ;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;8BACpD,IAAI;qDAAC;AAGlB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;8BACxD,IAAI;iDAAC;4BAdH,iBAAiB;IAD7B,IAAA,gBAAM,EAAC,aAAa,CAAC;GACT,iBAAiB,CAe7B"}
@@ -0,0 +1,4 @@
1
+ export declare class PaTextCacheDependencyEntity {
2
+ cacheK: string;
3
+ depK: string;
4
+ }
@@ -9,22 +9,22 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.PaCacheDependencyEntity = void 0;
12
+ exports.PaTextCacheDependencyEntity = void 0;
13
13
  const typeorm_1 = require("typeorm");
14
- let PaCacheDependencyEntity = class PaCacheDependencyEntity {
15
- cacheId;
14
+ let PaTextCacheDependencyEntity = class PaTextCacheDependencyEntity {
15
+ cacheK;
16
16
  depK;
17
17
  };
18
- exports.PaCacheDependencyEntity = PaCacheDependencyEntity;
18
+ exports.PaTextCacheDependencyEntity = PaTextCacheDependencyEntity;
19
19
  __decorate([
20
- (0, typeorm_1.Column)({ type: "integer", primary: true }),
20
+ (0, typeorm_1.Column)({ primary: true }),
21
21
  __metadata("design:type", String)
22
- ], PaCacheDependencyEntity.prototype, "cacheId", void 0);
22
+ ], PaTextCacheDependencyEntity.prototype, "cacheK", void 0);
23
23
  __decorate([
24
24
  (0, typeorm_1.Column)({ primary: true }),
25
25
  __metadata("design:type", String)
26
- ], PaCacheDependencyEntity.prototype, "depK", void 0);
27
- exports.PaCacheDependencyEntity = PaCacheDependencyEntity = __decorate([
28
- (0, typeorm_1.Entity)("PaCacheDependency")
29
- ], PaCacheDependencyEntity);
30
- //# sourceMappingURL=PaCacheDependency.entity.js.map
26
+ ], PaTextCacheDependencyEntity.prototype, "depK", void 0);
27
+ exports.PaTextCacheDependencyEntity = PaTextCacheDependencyEntity = __decorate([
28
+ (0, typeorm_1.Entity)("PaTextCacheDependency")
29
+ ], PaTextCacheDependencyEntity);
30
+ //# sourceMappingURL=PaTextCacheDependency.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaTextCacheDependency.entity.js","sourceRoot":"","sources":["../../../src/db-init/entities/PaTextCacheDependency.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAyC;AAGlC,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAEtC,MAAM,CAAU;IAGhB,IAAI,CAAU;CACf,CAAA;AANY,kEAA2B;AAEtC;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;2DACV;AAGhB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;yDACZ;sCALH,2BAA2B;IADvC,IAAA,gBAAM,EAAC,uBAAuB,CAAC;GACnB,2BAA2B,CAMvC"}
@@ -0,0 +1,6 @@
1
+ export declare class PaTextCacheScheduledInvalidationEntity {
2
+ eventK: string;
3
+ depK: string;
4
+ scheduledAt: Date;
5
+ scheduledSince: Date;
6
+ }
@@ -0,0 +1,40 @@
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.PaTextCacheScheduledInvalidationEntity = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ let PaTextCacheScheduledInvalidationEntity = class PaTextCacheScheduledInvalidationEntity {
15
+ eventK;
16
+ depK;
17
+ scheduledAt;
18
+ scheduledSince;
19
+ };
20
+ exports.PaTextCacheScheduledInvalidationEntity = PaTextCacheScheduledInvalidationEntity;
21
+ __decorate([
22
+ (0, typeorm_1.Column)({ primary: true }),
23
+ __metadata("design:type", String)
24
+ ], PaTextCacheScheduledInvalidationEntity.prototype, "eventK", void 0);
25
+ __decorate([
26
+ (0, typeorm_1.Column)({ primary: true }),
27
+ __metadata("design:type", String)
28
+ ], PaTextCacheScheduledInvalidationEntity.prototype, "depK", void 0);
29
+ __decorate([
30
+ (0, typeorm_1.Column)({ type: "datetime" }),
31
+ __metadata("design:type", Date)
32
+ ], PaTextCacheScheduledInvalidationEntity.prototype, "scheduledAt", void 0);
33
+ __decorate([
34
+ (0, typeorm_1.Column)({ type: "datetime", default: () => "current_timestamp" }),
35
+ __metadata("design:type", Date)
36
+ ], PaTextCacheScheduledInvalidationEntity.prototype, "scheduledSince", void 0);
37
+ exports.PaTextCacheScheduledInvalidationEntity = PaTextCacheScheduledInvalidationEntity = __decorate([
38
+ (0, typeorm_1.Entity)("PaTextCacheScheduledInvalidation")
39
+ ], PaTextCacheScheduledInvalidationEntity);
40
+ //# sourceMappingURL=PaTextCacheScheduledInvalidation.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaTextCacheScheduledInvalidation.entity.js","sourceRoot":"","sources":["../../../src/db-init/entities/PaTextCacheScheduledInvalidation.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAyC;AAGlC,IAAM,sCAAsC,GAA5C,MAAM,sCAAsC;IAEjD,MAAM,CAAU;IAGhB,IAAI,CAAU;IAGd,WAAW,CAAQ;IAGnB,cAAc,CAAQ;CACvB,CAAA;AAZY,wFAAsC;AAEjD;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;sEACV;AAGhB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;oEACZ;AAGd;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;8BACf,IAAI;2EAAC;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;8BAChD,IAAI;8EAAC;iDAXX,sCAAsC;IADlD,IAAA,gBAAM,EAAC,kCAAkC,CAAC;GAC9B,sCAAsC,CAYlD"}
@@ -1,14 +1,18 @@
1
1
  import type { AppLog } from "@paroicms/server-lib";
2
- import type { DataSource, EntityManager } from "typeorm";
2
+ import type { DataSource } from "typeorm";
3
3
  import type { CreateTextCacheSystemOptions } from "../cache-system";
4
4
  import type { TextCacheSystemStorage } from "../public-types";
5
+ import { type InvalidationScheduler } from "./scheduler";
5
6
  export interface TextCacheSystemContext extends CreateTextCacheSystemOptions {
6
7
  status: "ready" | "destroyed";
7
8
  appLog: AppLog;
8
- mainCn: DataSource;
9
- cn: EntityManager;
9
+ cn: DataSource;
10
10
  storage: TextCacheSystemStorage;
11
11
  logNextQuery: (count?: number) => void;
12
12
  timeToIdleDays?: number;
13
+ scheduler: InvalidationScheduler;
13
14
  }
14
- export declare function createTextCacheSystemContext(options: CreateTextCacheSystemOptions): Promise<TextCacheSystemContext>;
15
+ export declare function createTextCacheSystemContext(options: CreateTextCacheSystemOptions): Promise<{
16
+ context: TextCacheSystemContext;
17
+ isCleared: boolean;
18
+ }>;
@@ -3,20 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createTextCacheSystemContext = void 0;
4
4
  const anywhere_lib_1 = require("@paroicms/anywhere-lib");
5
5
  const db_init_1 = require("../db-init/db-init");
6
+ const scheduler_1 = require("./scheduler");
6
7
  async function createTextCacheSystemContext(options) {
7
- const { mainCn, logNextQuery } = await (0, db_init_1.createOrOpenMainCn)({
8
- siteName: options.siteName,
8
+ const { cn, logNextQuery, isCleared } = await (0, db_init_1.createOrOpenConnection)({
9
+ appVersion: options.appVersion,
9
10
  sqliteFile: options.storage.file,
10
11
  appLog: options.appLog,
11
12
  });
12
- return {
13
+ const context = {
13
14
  ...options,
14
15
  status: "ready",
15
- mainCn,
16
- cn: mainCn.manager,
16
+ cn,
17
17
  logNextQuery,
18
18
  timeToIdleDays: options.timeToIdle === undefined ? undefined : (0, anywhere_lib_1.parseTimeWithUnit)(options.timeToIdle).delay,
19
+ scheduler: undefined,
19
20
  };
21
+ context.scheduler = (0, scheduler_1.startScheduler)(context);
22
+ return { context, isCleared };
20
23
  }
21
24
  exports.createTextCacheSystemContext = createTextCacheSystemContext;
22
25
  //# sourceMappingURL=cache-system-context.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"cache-system-context.js","sourceRoot":"","sources":["../../src/internal/cache-system-context.ts"],"names":[],"mappings":";;;AAAA,yDAA2D;AAI3D,gDAA4D;AAE5D,2CAAyE;AAYlE,KAAK,UAAU,4BAA4B,CAChD,OAAqC;IAErC,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,gCAAsB,EAAC;QACnE,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG;QACd,GAAG,OAAO;QACV,MAAM,EAAE,OAAgC;QACxC,EAAE;QACF,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;QAC5F,SAAS,EAAE,SAAgB;KAC5B,CAAC;IAEF,OAAO,CAAC,SAAS,GAAG,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;IAE5C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC;AAtBD,oEAsBC"}
@@ -1,18 +1,18 @@
1
- import { type Tracker } from "@paroicms/server-lib";
2
- import type { EntityManager } from "typeorm";
1
+ import { type QueryBuilderConnection, type Tracker } from "@paroicms/server-lib";
3
2
  import type { CacheSetData, CacheValue } from "../public-types";
4
3
  import type { 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>;
4
+ export declare function insertOrUpdateCacheValue(cn: QueryBuilderConnection, data: CacheSetData, tracker: Tracker): Promise<CacheValue>;
5
+ export declare function getCacheValue({ cn, timeToIdleDays, appLog }: TextCacheSystemContext, cacheKey: string, tracker: Tracker): Promise<CacheValue | undefined>;
7
6
  export declare function getDependencyKeys({ cn }: TextCacheSystemContext, cacheKey: string, tracker: Tracker): Promise<string[]>;
8
7
  /**
9
8
  * @returns the list of cache cacheKeys that were deleted
10
9
  */
11
- export declare function deleteCacheValues(cn: EntityManager, options: {
10
+ export declare function deleteCacheValues(cn: QueryBuilderConnection, options: {
12
11
  dependencyKeys: string[];
13
12
  }): Promise<string[]>;
14
13
  /**
15
14
  * @returns the number of cache identifiers that were deleted
16
15
  */
17
16
  export declare function deleteUnusedCacheValues({ cn, timeToIdleDays, }: TextCacheSystemContext): Promise<number | undefined>;
18
- export declare function clearCacheValues({ cn }: TextCacheSystemContext): Promise<void>;
17
+ export declare function invalidateAllCacheValues({ cn, }: Pick<TextCacheSystemContext, "cn">): Promise<void>;
18
+ export declare function clearCacheValues({ cn }: Pick<TextCacheSystemContext, "cn">): Promise<void>;
@@ -1,89 +1,72 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.clearCacheValues = exports.deleteUnusedCacheValues = exports.deleteCacheValues = exports.getDependencyKeys = exports.getCacheValue = exports.insertOrUpdateCacheValue = void 0;
3
+ exports.clearCacheValues = exports.invalidateAllCacheValues = exports.deleteUnusedCacheValues = exports.deleteCacheValues = exports.getDependencyKeys = exports.getCacheValue = exports.insertOrUpdateCacheValue = void 0;
4
4
  const data_formatters_lib_1 = require("@paroi/data-formatters-lib");
5
5
  const anywhere_lib_1 = require("@paroicms/anywhere-lib");
6
6
  const server_lib_1 = require("@paroicms/server-lib");
7
7
  const ddl_migration_1 = require("../db-init/ddl-migration");
8
8
  async function insertOrUpdateCacheValue(cn, data, tracker) {
9
9
  const resourceVersion = (0, server_lib_1.generateResourceVersion)();
10
- const result = await cn
10
+ await cn
11
+ .createQueryBuilder()
12
+ .delete()
13
+ .from("PaTextCache")
14
+ .where("k = :k", { k: data.cacheKey })
15
+ .execute();
16
+ tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCache", "delete");
17
+ await cn
11
18
  .createQueryBuilder()
12
19
  .insert()
13
- .into("PaCache")
20
+ .into("PaTextCache")
14
21
  .values({
15
22
  k: data.cacheKey,
16
23
  val: data.value,
17
24
  resourceVersion,
18
- ts: () => "current_timestamp",
19
- lastUseTs: () => "current_timestamp",
25
+ modifiedAt: () => "current_timestamp",
26
+ readAt: () => "current_timestamp",
20
27
  })
21
- .orUpdate(["val", "resourceVersion", "ts", "lastUseTs"], ["k"])
22
28
  .execute();
23
- tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCache", "write");
24
- let newId = (0, data_formatters_lib_1.strValOrUndef)(result.identifiers[0].id, { varName: "PaCache.id" });
25
- if (newId === undefined) {
26
- const row = await cn
27
- .createQueryBuilder()
28
- .select("c.id", "id")
29
- .from("PaCache", "c")
30
- .where("c.k = :cacheKey", { cacheKey: data.cacheKey })
31
- .getRawOne();
32
- if (!row)
33
- throw new Error(`unable to find cache row '${data.cacheKey}'`);
34
- tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCache", "read");
35
- newId = (0, data_formatters_lib_1.strVal)(row.id);
36
- }
29
+ tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCache", "write");
37
30
  await cn
38
31
  .createQueryBuilder()
39
32
  .insert()
40
- .into("PaCacheDependency")
33
+ .into("PaTextCacheDependency")
41
34
  .values(data.dependencyKeys.map((depK) => ({
42
- cacheId: newId,
35
+ cacheK: data.cacheKey,
43
36
  depK,
44
37
  })))
45
38
  .execute();
46
- tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCacheDependency", "write");
47
- const row = await cn
48
- .createQueryBuilder()
49
- .select("c.ts", "ts")
50
- .from("PaCache", "c")
51
- .where("c.id = :id", { id: newId })
52
- .getRawOne();
53
- tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCacheDependency", "read");
54
- if (!row)
55
- throw new Error(`missing cache row: ${newId}`);
39
+ tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCacheDependency", "write");
56
40
  return {
57
41
  resourceVersion,
58
42
  value: data.value,
59
43
  };
60
44
  }
61
45
  exports.insertOrUpdateCacheValue = insertOrUpdateCacheValue;
62
- async function getCacheValue({ cn, timeToIdleDays, appLog, siteName }, cacheKey, tracker) {
46
+ async function getCacheValue({ cn, timeToIdleDays, appLog }, cacheKey, tracker) {
63
47
  const row = await cn
64
48
  .createQueryBuilder()
65
49
  .select("c.val", "val")
66
50
  .addSelect("c.resourceVersion", "resourceVersion")
67
- .addSelect("c.ts", "ts")
68
- .addSelect("c.lastUseTs", "lastUseTs")
69
- .from("PaCache", "c")
70
- .where("c.k = :cacheKey", { cacheKey })
51
+ .addSelect("c.readAt", "readAt")
52
+ .from("PaTextCache", "c")
53
+ .where("c.k = :k", { k: cacheKey })
71
54
  .getRawOne();
72
- tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCache", "read");
55
+ tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCache", "read");
73
56
  if (!row)
74
57
  return;
75
- const lastUseTs = (0, data_formatters_lib_1.dateVal)(row.lastUseTs);
76
- if (timeToIdleDays !== undefined && !(0, anywhere_lib_1.isSameTimeUnit)(lastUseTs, "day")) {
77
- appLog.debug(`[${siteName}] updating lastUseTs of cache: ${cacheKey}`);
58
+ const readAt = (0, data_formatters_lib_1.dateVal)(row.readAt);
59
+ if (timeToIdleDays !== undefined && !(0, anywhere_lib_1.isSameTimeUnit)(readAt, "day")) {
60
+ appLog.debug(`updating readAt of cache: ${cacheKey}`);
78
61
  await cn
79
62
  .createQueryBuilder()
80
- .update("PaCache")
63
+ .update("PaTextCache")
81
64
  .set({
82
- lastUseTs: () => "current_timestamp",
65
+ readAt: () => "current_timestamp",
83
66
  })
84
- .where("k = :cacheKey", { cacheKey })
67
+ .where("k = :k", { k: cacheKey })
85
68
  .execute();
86
- tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCache", "write");
69
+ tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCache", "write");
87
70
  }
88
71
  return {
89
72
  value: (0, data_formatters_lib_1.strVal)(row.val),
@@ -95,11 +78,11 @@ async function getDependencyKeys({ cn }, cacheKey, tracker) {
95
78
  const rows = await cn
96
79
  .createQueryBuilder()
97
80
  .select("d.depK", "depK")
98
- .from("PaCacheDependency", "d")
99
- .innerJoin("PaCache", "c", "c.id = d.cacheId")
100
- .where("c.k = :cacheKey", { cacheKey })
81
+ .from("PaTextCacheDependency", "d")
82
+ .innerJoin("PaTextCache", "c", "c.k = d.cacheK")
83
+ .where("c.k = :k", { k: cacheKey })
101
84
  .getRawMany();
102
- tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaCacheDependency", "read");
85
+ tracker.trackAccess(ddl_migration_1.dbSchemaName, "PaTextCacheDependency", "read");
103
86
  return rows.map((row) => (0, data_formatters_lib_1.strVal)(row.depK));
104
87
  }
105
88
  exports.getDependencyKeys = getDependencyKeys;
@@ -109,19 +92,17 @@ exports.getDependencyKeys = getDependencyKeys;
109
92
  async function deleteCacheValues(cn, options) {
110
93
  const rows = await cn
111
94
  .createQueryBuilder()
112
- .select("c.id", "id")
113
- .addSelect("c.k", "k")
114
- .from("PaCache", "c")
115
- .innerJoin("PaCacheDependency", "d", "d.cacheId = c.id")
95
+ .select("c.k", "k")
96
+ .from("PaTextCache", "c")
97
+ .innerJoin("PaTextCacheDependency", "d", "d.cacheK = c.k")
116
98
  .where("d.depK in (:...dependencyKeys)", { dependencyKeys: options.dependencyKeys })
117
99
  .getRawMany();
118
100
  const cacheKeys = rows.map((row) => (0, data_formatters_lib_1.strVal)(row.k));
119
- const cacheIds = rows.map((row) => (0, data_formatters_lib_1.strVal)(row.id));
120
101
  await cn
121
102
  .createQueryBuilder()
122
103
  .delete()
123
- .from("PaCache")
124
- .where("id in (:...cacheIds)", { cacheIds: cacheIds })
104
+ .from("PaTextCache")
105
+ .where("k in (:...cacheKeys)", { cacheKeys })
125
106
  .execute();
126
107
  return cacheKeys;
127
108
  }
@@ -130,18 +111,25 @@ exports.deleteCacheValues = deleteCacheValues;
130
111
  * @returns the number of cache identifiers that were deleted
131
112
  */
132
113
  async function deleteUnusedCacheValues({ cn, timeToIdleDays, }) {
114
+ if (timeToIdleDays === undefined)
115
+ return;
133
116
  const result = await cn
134
117
  .createQueryBuilder()
135
118
  .delete()
136
- .from("PaCache")
137
- .where(`date(lastUseTs) < date(current_timestamp, '-${timeToIdleDays} day')`)
119
+ .from("PaTextCache")
120
+ .where(`date(readAt) < date(current_timestamp, '-${timeToIdleDays} day')`)
138
121
  .execute();
139
122
  return result.affected ?? undefined;
140
123
  }
141
124
  exports.deleteUnusedCacheValues = deleteUnusedCacheValues;
125
+ async function invalidateAllCacheValues({ cn, }) {
126
+ await cn.createQueryBuilder().delete().from("PaTextCacheDependency").execute();
127
+ await cn.createQueryBuilder().delete().from("PaTextCache").execute();
128
+ }
129
+ exports.invalidateAllCacheValues = invalidateAllCacheValues;
142
130
  async function clearCacheValues({ cn }) {
143
- await cn.createQueryBuilder().delete().from("PaCacheDependency").execute();
144
- await cn.createQueryBuilder().delete().from("PaCache").execute();
131
+ await invalidateAllCacheValues({ cn });
132
+ await cn.createQueryBuilder().delete().from("PaTextCacheScheduledInvalidation").execute();
145
133
  }
146
134
  exports.clearCacheValues = clearCacheValues;
147
135
  //# sourceMappingURL=queries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/internal/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/internal/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { QueryBuilderConnection } from "@paroicms/server-lib";
2
+ import type { TextCacheSystemContext } from "./cache-system-context";
3
+ export declare function getNextScheduledDate({ cn, }: Pick<TextCacheSystemContext, "cn">): Promise<Date | undefined>;
4
+ export declare function getScheduledInvalidationEventsToFire({ cn, }: Pick<TextCacheSystemContext, "cn">): Promise<{
5
+ eventKey: string;
6
+ dependencyKeys: string[];
7
+ }[]>;
8
+ export declare function setScheduledInvalidation(cn: QueryBuilderConnection, options: {
9
+ eventKey: string;
10
+ dependencyKeys: string[];
11
+ scheduledAt: Date;
12
+ }): Promise<void>;
13
+ export declare function deleteScheduledInvalidation(cn: QueryBuilderConnection, eventKey: string): Promise<void>;
14
+ export declare function deleteScheduledInvalidations(cn: QueryBuilderConnection, eventKeys: string[]): Promise<void>;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteScheduledInvalidations = exports.deleteScheduledInvalidation = exports.setScheduledInvalidation = exports.getScheduledInvalidationEventsToFire = exports.getNextScheduledDate = void 0;
4
+ const data_formatters_lib_1 = require("@paroi/data-formatters-lib");
5
+ async function getNextScheduledDate({ cn, }) {
6
+ const row = await cn
7
+ .createQueryBuilder()
8
+ .select("s.scheduledAt", "scheduledAt")
9
+ .from("PaTextCacheScheduledInvalidation", "s")
10
+ .orderBy("s.scheduledAt")
11
+ .limit(1)
12
+ .getRawOne();
13
+ return row ? (0, data_formatters_lib_1.dateVal)(row.scheduledAt) : undefined;
14
+ }
15
+ exports.getNextScheduledDate = getNextScheduledDate;
16
+ async function getScheduledInvalidationEventsToFire({ cn, }) {
17
+ const rows = await cn
18
+ .createQueryBuilder()
19
+ .select("s.eventK", "eventK")
20
+ .addSelect("s.depK", "depK")
21
+ .from("PaTextCacheScheduledInvalidation", "s")
22
+ .where("s.scheduledAt <= current_timestamp")
23
+ .getRawMany();
24
+ const events = new Map();
25
+ for (const row of rows) {
26
+ const eventKey = (0, data_formatters_lib_1.strVal)(row.eventK);
27
+ const depKey = (0, data_formatters_lib_1.strVal)(row.depK);
28
+ const dependencyKeys = events.get(eventKey);
29
+ if (dependencyKeys) {
30
+ dependencyKeys.push(depKey);
31
+ }
32
+ else {
33
+ events.set(eventKey, [depKey]);
34
+ }
35
+ }
36
+ return Array.from(events.entries()).map(([eventKey, dependencyKeys]) => ({
37
+ eventKey,
38
+ dependencyKeys,
39
+ }));
40
+ }
41
+ exports.getScheduledInvalidationEventsToFire = getScheduledInvalidationEventsToFire;
42
+ async function setScheduledInvalidation(cn, options) {
43
+ await deleteScheduledInvalidation(cn, options.eventKey);
44
+ await cn
45
+ .createQueryBuilder()
46
+ .insert()
47
+ .into("PaTextCacheScheduledInvalidation")
48
+ .values(options.dependencyKeys.map((depK) => ({
49
+ eventK: options.eventKey,
50
+ depK,
51
+ scheduledAt: options.scheduledAt,
52
+ scheduledSince: () => "current_timestamp",
53
+ })))
54
+ .execute();
55
+ }
56
+ exports.setScheduledInvalidation = setScheduledInvalidation;
57
+ async function deleteScheduledInvalidation(cn, eventKey) {
58
+ await cn
59
+ .createQueryBuilder()
60
+ .delete()
61
+ .from("PaTextCacheScheduledInvalidation")
62
+ .where("eventK = :eventK", { eventK: eventKey })
63
+ .execute();
64
+ }
65
+ exports.deleteScheduledInvalidation = deleteScheduledInvalidation;
66
+ async function deleteScheduledInvalidations(cn, eventKeys) {
67
+ await cn
68
+ .createQueryBuilder()
69
+ .delete()
70
+ .from("PaTextCacheScheduledInvalidation")
71
+ .where("eventK in (:...eventKeys)", { eventKeys })
72
+ .execute();
73
+ }
74
+ exports.deleteScheduledInvalidations = deleteScheduledInvalidations;
75
+ //# sourceMappingURL=scheduled-invalidation-queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled-invalidation-queries.js","sourceRoot":"","sources":["../../src/internal/scheduled-invalidation-queries.ts"],"names":[],"mappings":";;;AAAA,oEAA6D;AAKtD,KAAK,UAAU,oBAAoB,CAAC,EACzC,EAAE,GACiC;IACnC,MAAM,GAAG,GAAG,MAAM,EAAE;SACjB,kBAAkB,EAAE;SACpB,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC;SACtC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC;SAC7C,OAAO,CAAC,eAAe,CAAC;SACxB,KAAK,CAAC,CAAC,CAAC;SACR,SAAS,EAAO,CAAC;IACpB,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,6BAAO,EAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAXD,oDAWC;AAEM,KAAK,UAAU,oCAAoC,CAAC,EACzD,EAAE,GACiC;IACnC,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,kBAAkB,EAAE;SACpB,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC;SAC5B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;SAC3B,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC;SAC7C,KAAK,CAAC,oCAAoC,CAAC;SAC3C,UAAU,EAAO,CAAC;IACrB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAA,4BAAM,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAA,4BAAM,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,QAAQ;QACR,cAAc;KACf,CAAC,CAAC,CAAC;AACN,CAAC;AAzBD,oFAyBC;AAEM,KAAK,UAAU,wBAAwB,CAC5C,EAA0B,EAC1B,OAA0E;IAE1E,MAAM,2BAA2B,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExD,MAAM,EAAE;SACL,kBAAkB,EAAE;SACpB,MAAM,EAAE;SACR,IAAI,CAAC,kCAAkC,CAAC;SACxC,MAAM,CACL,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,EAAE,OAAO,CAAC,QAAQ;QACxB,IAAI;QACJ,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,cAAc,EAAE,GAAG,EAAE,CAAC,mBAAmB;KAC1C,CAAC,CAAC,CACJ;SACA,OAAO,EAAE,CAAC;AACf,CAAC;AAnBD,4DAmBC;AAEM,KAAK,UAAU,2BAA2B,CAC/C,EAA0B,EAC1B,QAAgB;IAEhB,MAAM,EAAE;SACL,kBAAkB,EAAE;SACpB,MAAM,EAAE;SACR,IAAI,CAAC,kCAAkC,CAAC;SACxC,KAAK,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SAC/C,OAAO,EAAE,CAAC;AACf,CAAC;AAVD,kEAUC;AAEM,KAAK,UAAU,4BAA4B,CAChD,EAA0B,EAC1B,SAAmB;IAEnB,MAAM,EAAE;SACL,kBAAkB,EAAE;SACpB,MAAM,EAAE;SACR,IAAI,CAAC,kCAAkC,CAAC;SACxC,KAAK,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,CAAC;SACjD,OAAO,EAAE,CAAC;AACf,CAAC;AAVD,oEAUC"}
@@ -0,0 +1,7 @@
1
+ import type { TextCacheSystemContext } from "./cache-system-context";
2
+ export interface InvalidationScheduler {
3
+ reset(): Promise<void>;
4
+ stop(): Promise<void>;
5
+ }
6
+ export type SchedulerContext = Omit<TextCacheSystemContext, "scheduler">;
7
+ export declare function startScheduler(context: SchedulerContext): InvalidationScheduler;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startScheduler = void 0;
4
+ const async_lib_1 = require("@paroi/async-lib");
5
+ const queries_1 = require("./queries");
6
+ const scheduled_invalidation_queries_1 = require("./scheduled-invalidation-queries");
7
+ const MAX_DELAY_MS = 1000 * 60 * 60 * 24; // 1 day
8
+ function startScheduler(context) {
9
+ const variables = {
10
+ currentWait: undefined,
11
+ };
12
+ let promise = run(context, variables);
13
+ return {
14
+ async reset() {
15
+ if (variables.currentWait) {
16
+ variables.currentWait.cancel();
17
+ variables.currentWait = undefined;
18
+ }
19
+ await promise;
20
+ promise = run(context, variables);
21
+ },
22
+ async stop() {
23
+ if (variables.currentWait) {
24
+ variables.currentWait.cancel();
25
+ variables.currentWait = undefined;
26
+ }
27
+ await promise;
28
+ },
29
+ };
30
+ }
31
+ exports.startScheduler = startScheduler;
32
+ async function run(context, variables) {
33
+ let suspiciousDelayCount = 0;
34
+ let errorCount = 0;
35
+ while (1) {
36
+ try {
37
+ if (variables.currentWait) {
38
+ variables.currentWait.cancel();
39
+ variables.currentWait = undefined;
40
+ }
41
+ await processScheduledInvalidations(context);
42
+ const scheduledAt = await (0, scheduled_invalidation_queries_1.getNextScheduledDate)(context);
43
+ if (!scheduledAt)
44
+ break;
45
+ let delayMs = scheduledAt.getTime() - Date.now() + 500;
46
+ if (delayMs >= 0) {
47
+ suspiciousDelayCount = 0;
48
+ }
49
+ else if (++suspiciousDelayCount > 5) {
50
+ context.appLog.error(`Too many negative delays (${delayMs}ms), stop the scheduler`);
51
+ break;
52
+ }
53
+ if (delayMs < 500) {
54
+ delayMs = 500;
55
+ }
56
+ else if (delayMs > MAX_DELAY_MS) {
57
+ delayMs = MAX_DELAY_MS;
58
+ }
59
+ variables.currentWait = (0, async_lib_1.waitOrCancel)(delayMs);
60
+ const shouldStop = await variables.currentWait.promise;
61
+ variables.currentWait = undefined;
62
+ if (shouldStop)
63
+ break;
64
+ errorCount = 0;
65
+ }
66
+ catch (error) {
67
+ context.appLog.error("Invalidation scheduler failed", error);
68
+ if (++errorCount > 5) {
69
+ context.appLog.error("Too many errors, stop the scheduler");
70
+ break;
71
+ }
72
+ variables.currentWait = (0, async_lib_1.waitOrCancel)(1000 * 60 * 60 * 2); // next attempt in 2 hours
73
+ const shouldStop = await variables.currentWait.promise;
74
+ variables.currentWait = undefined;
75
+ if (shouldStop)
76
+ break;
77
+ }
78
+ }
79
+ }
80
+ async function processScheduledInvalidations(context) {
81
+ const events = await (0, scheduled_invalidation_queries_1.getScheduledInvalidationEventsToFire)(context);
82
+ if (events.length === 0)
83
+ return;
84
+ const eventKeys = events.map((e) => e.eventKey);
85
+ context.appLog.info(`Fire ${eventKeys.length} scheduled invalidation events: "${eventKeys.join('", "')}"`);
86
+ const dependencyKeys = events.flatMap((e) => e.dependencyKeys);
87
+ const cacheKeys = await (0, queries_1.deleteCacheValues)(context.cn, { dependencyKeys });
88
+ if (cacheKeys.length > 0) {
89
+ context.appLog.debug(`Deleted ${cacheKeys.length} invalidated cache: ${cacheKeys.join(", ")}`);
90
+ }
91
+ await (0, scheduled_invalidation_queries_1.deleteScheduledInvalidations)(context.cn, eventKeys);
92
+ }
93
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/internal/scheduler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paroicms/server-text-cache-system",
3
- "version": "1.2.3",
3
+ "version": "1.3.1",
4
4
  "description": "Cache system.",
5
5
  "keywords": [
6
6
  "paroicms",
@@ -28,10 +28,10 @@
28
28
  "eslint": "eslint ."
29
29
  },
30
30
  "dependencies": {
31
- "@paroi/async-lib": "~0.1.2",
32
- "@paroi/data-formatters-lib": "~0.1.2",
33
- "@paroicms/server-lib": "1.2.3",
34
- "@paroicms/anywhere-lib": "1.6.0"
31
+ "@paroi/async-lib": "~0.2.0",
32
+ "@paroi/data-formatters-lib": "~0.3.0",
33
+ "@paroicms/server-lib": "1.4.0",
34
+ "@paroicms/anywhere-lib": "1.7.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "~20.12.8",
@@ -1,8 +0,0 @@
1
- export declare class PaCacheEntity {
2
- id: string;
3
- ts: Date;
4
- resourceVersion: string;
5
- lastUseTs: Date;
6
- k: string;
7
- val: string;
8
- }
@@ -1 +0,0 @@
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,eAAe,CAAU;IAGzB,SAAS,CAAQ;IAGjB,CAAC,CAAU;IAGX,GAAG,CAAU;CACd,CAAA;AAlBY,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,GAAE;;sDACgB;AAGzB;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;wBAjBF,aAAa;IADzB,IAAA,gBAAM,EAAC,SAAS,CAAC;GACL,aAAa,CAkBzB"}
@@ -1,4 +0,0 @@
1
- export declare class PaCacheDependencyEntity {
2
- cacheId: string;
3
- depK: string;
4
- }
@@ -1 +0,0 @@
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,IAAI,CAAU;CACf,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;;qDACZ;kCALH,uBAAuB;IADnC,IAAA,gBAAM,EAAC,mBAAmB,CAAC;GACf,uBAAuB,CAMnC"}