@smartive/datocms-utils 3.0.0-next.7 → 3.0.0-next.8
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 +9 -9
- package/dist/cache-tags/index.js.map +1 -0
- package/dist/{cache → cache-tags}/provider/neon.d.ts +5 -5
- package/dist/{cache → cache-tags}/provider/neon.js +2 -2
- package/dist/cache-tags/provider/neon.js.map +1 -0
- package/dist/{cache → cache-tags}/provider/noop.d.ts +3 -3
- package/dist/{cache → cache-tags}/provider/noop.js +2 -2
- package/dist/cache-tags/provider/noop.js.map +1 -0
- package/dist/{cache → cache-tags}/provider/redis.d.ts +5 -5
- package/dist/{cache → cache-tags}/provider/redis.js +2 -2
- package/dist/cache-tags/provider/redis.js.map +1 -0
- package/dist/{cache → cache-tags}/types.d.ts +2 -2
- package/dist/{cache → cache-tags}/types.js.map +1 -1
- package/dist/cache-tags/utils.js.map +1 -0
- package/package.json +13 -13
- package/src/{cache → cache-tags}/provider/neon.ts +5 -5
- package/src/{cache → cache-tags}/provider/noop.ts +3 -3
- package/src/{cache → cache-tags}/provider/redis.ts +5 -5
- package/src/{cache → cache-tags}/types.ts +2 -2
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/provider/neon.js.map +0 -1
- package/dist/cache/provider/noop.js.map +0 -1
- package/dist/cache/provider/redis.js.map +0 -1
- package/dist/cache/utils.js.map +0 -1
- /package/dist/{cache → cache-tags}/index.d.ts +0 -0
- /package/dist/{cache → cache-tags}/index.js +0 -0
- /package/dist/{cache → cache-tags}/types.js +0 -0
- /package/dist/{cache → cache-tags}/utils.d.ts +0 -0
- /package/dist/{cache → cache-tags}/utils.js +0 -0
- /package/src/{cache → cache-tags}/index.ts +0 -0
- /package/src/{cache → cache-tags}/utils.ts +0 -0
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@ const tags = parseXCacheTagsResponseHeader('tag-a tag-2 other-tag');
|
|
|
53
53
|
|
|
54
54
|
#### Storage Providers
|
|
55
55
|
|
|
56
|
-
The package provides two storage backends for cache tags: **Neon (Postgres)** and **Redis**. Both implement the same `
|
|
56
|
+
The package provides two storage backends for cache tags: **Neon (Postgres)** and **Redis**. Both implement the same `DatoCacheTagsProvider` interface.
|
|
57
57
|
|
|
58
58
|
##### Neon (Postgres) Provider
|
|
59
59
|
|
|
@@ -80,9 +80,9 @@ npm install @neondatabase/serverless
|
|
|
80
80
|
3. Create and use the store:
|
|
81
81
|
|
|
82
82
|
```typescript
|
|
83
|
-
import {
|
|
83
|
+
import { NeonDatoCacheTagsProvider } from '@smartive/datocms-utils/cache-tags/neon';
|
|
84
84
|
|
|
85
|
-
const provider = new
|
|
85
|
+
const provider = new NeonDatoCacheTagsProvider({
|
|
86
86
|
connectionString: process.env.DATABASE_URL!,
|
|
87
87
|
table: 'query_cache_tags',
|
|
88
88
|
});
|
|
@@ -115,9 +115,9 @@ npm install ioredis
|
|
|
115
115
|
2. Create and use the provider:
|
|
116
116
|
|
|
117
117
|
```typescript
|
|
118
|
-
import {
|
|
118
|
+
import { RedisDatoCacheTagsProvider } from '@smartive/datocms-utils/cache-tags/redis';
|
|
119
119
|
|
|
120
|
-
const provider = new
|
|
120
|
+
const provider = new RedisDatoCacheTagsProvider({
|
|
121
121
|
url: process.env.REDIS_URL!,
|
|
122
122
|
keyPrefix: 'prod:', // Optional: namespace for multi-environment setups
|
|
123
123
|
});
|
|
@@ -142,7 +142,7 @@ REDIS_URL=redis://username:password@redis-host:6379
|
|
|
142
142
|
REDIS_URL=redis://localhost:6379
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
-
#### `
|
|
145
|
+
#### `DatoCacheTagsProvider` Interface
|
|
146
146
|
|
|
147
147
|
Both providers implement:
|
|
148
148
|
|
|
@@ -155,9 +155,9 @@ Both providers implement:
|
|
|
155
155
|
|
|
156
156
|
```typescript
|
|
157
157
|
import { generateQueryId, parseXCacheTagsResponseHeader } from '@smartive/datocms-utils/cache';
|
|
158
|
-
import {
|
|
158
|
+
import { RedisDatoCacheTagsProvider } from '@smartive/datocms-utils/cache-tags/redis';
|
|
159
159
|
|
|
160
|
-
const provider = new
|
|
160
|
+
const provider = new RedisDatoCacheTagsProvider({
|
|
161
161
|
url: process.env.REDIS_URL!,
|
|
162
162
|
keyPrefix: 'myapp:',
|
|
163
163
|
});
|
|
@@ -179,7 +179,7 @@ The package includes TypeScript types for DatoCMS webhooks and cache tags:
|
|
|
179
179
|
|
|
180
180
|
- `CacheTag`: A branded type for cache tags, ensuring type safety
|
|
181
181
|
- `CacheTagsInvalidateWebhook`: Type definition for DatoCMS cache tag invalidation webhook payloads
|
|
182
|
-
- `
|
|
182
|
+
- `DatoCacheTagsProvider`: Interface for cache tag storage implementations
|
|
183
183
|
|
|
184
184
|
## License
|
|
185
185
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache-tags/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type CacheTag, type
|
|
2
|
-
type
|
|
1
|
+
import { type CacheTag, type DatoCacheTagsProvider } from '../types.js';
|
|
2
|
+
type NeonDatoCacheTagsProviderConfig = {
|
|
3
3
|
/**
|
|
4
4
|
* Neon connection string. You can find it in the "Connection" tab of your Neon project dashboard.
|
|
5
5
|
* Has the format `postgresql://user:pass@host/db`
|
|
@@ -19,12 +19,12 @@ type NeonCacheTagsStoreConfig = {
|
|
|
19
19
|
readonly table: string;
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
|
-
* A `
|
|
22
|
+
* A `DatoCacheTagsProvider` implementation that uses Neon as the storage backend.
|
|
23
23
|
*/
|
|
24
|
-
export declare class
|
|
24
|
+
export declare class NeonDatoCacheTagsProvider implements DatoCacheTagsProvider {
|
|
25
25
|
private readonly sql;
|
|
26
26
|
private readonly table;
|
|
27
|
-
constructor({ connectionUrl, table }:
|
|
27
|
+
constructor({ connectionUrl, table }: NeonDatoCacheTagsProviderConfig);
|
|
28
28
|
storeQueryCacheTags(queryId: string, cacheTags: CacheTag[]): Promise<void>;
|
|
29
29
|
queriesReferencingCacheTags(cacheTags: CacheTag[]): Promise<string[]>;
|
|
30
30
|
deleteCacheTags(cacheTags: CacheTag[]): Promise<number>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { neon } from '@neondatabase/serverless';
|
|
2
2
|
/**
|
|
3
|
-
* A `
|
|
3
|
+
* A `DatoCacheTagsProvider` implementation that uses Neon as the storage backend.
|
|
4
4
|
*/
|
|
5
|
-
export class
|
|
5
|
+
export class NeonDatoCacheTagsProvider {
|
|
6
6
|
sql;
|
|
7
7
|
table;
|
|
8
8
|
constructor({ connectionUrl, table }) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"neon.js","sourceRoot":"","sources":["../../../src/cache-tags/provider/neon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAuBhD;;GAEG;AACH,MAAM,OAAO,yBAAyB;IACnB,GAAG,CAAC;IACJ,KAAK,CAAC;IAEvB,YAAY,EAAE,aAAa,EAAE,KAAK,EAAmC;QACnE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,SAAqB;QACrE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEzF,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,WAAW,YAAY,yBAAyB,EAAE,IAAI,CAAC,CAAC;IACxG,CAAC;IAEM,KAAK,CAAC,2BAA2B,CAAC,SAAqB;QAC5D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CACnC,iCAAiC,IAAI,CAAC,KAAK,wBAAwB,YAAY,GAAG,EAClF,SAAS,CACV,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,CAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YAC7C,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACrC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,SAAqB;QAChD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpE,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,wBAAwB,YAAY,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC3H,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { type CacheTag, type
|
|
1
|
+
import { type CacheTag, type DatoCacheTagsProvider } from '../types.js';
|
|
2
2
|
/**
|
|
3
|
-
* A `
|
|
3
|
+
* A `DatoCacheTagsProvider` implementation that does not perform any actual storage operations.
|
|
4
4
|
*
|
|
5
5
|
* _Note: This implementation is useful for testing purposes or when you want to disable caching without changing the code that interacts with the cache._
|
|
6
6
|
*/
|
|
7
|
-
export declare class
|
|
7
|
+
export declare class NoopDatoCacheTagsProvider implements DatoCacheTagsProvider {
|
|
8
8
|
storeQueryCacheTags(queryId: string, cacheTags: CacheTag[]): Promise<void>;
|
|
9
9
|
queriesReferencingCacheTags(cacheTags: CacheTag[]): Promise<string[]>;
|
|
10
10
|
deleteCacheTags(cacheTags: CacheTag[]): Promise<number>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A `
|
|
2
|
+
* A `DatoCacheTagsProvider` implementation that does not perform any actual storage operations.
|
|
3
3
|
*
|
|
4
4
|
* _Note: This implementation is useful for testing purposes or when you want to disable caching without changing the code that interacts with the cache._
|
|
5
5
|
*/
|
|
6
|
-
export class
|
|
6
|
+
export class NoopDatoCacheTagsProvider {
|
|
7
7
|
async storeQueryCacheTags(queryId, cacheTags) {
|
|
8
8
|
console.debug('-- storeQueryCacheTags called', { queryId, cacheTags });
|
|
9
9
|
return Promise.resolve();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noop.js","sourceRoot":"","sources":["../../../src/cache-tags/provider/noop.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IAC7B,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,SAAqB;QACrE,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAEvE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,2BAA2B,CAAC,SAAqB;QAC5D,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAEtE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,SAAqB;QAChD,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAE1D,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAE7C,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type CacheTag, type
|
|
2
|
-
type
|
|
1
|
+
import { type CacheTag, type DatoCacheTagsProvider } from '../types.js';
|
|
2
|
+
type RedisDatoCacheTagsProviderConfig = {
|
|
3
3
|
/**
|
|
4
4
|
* Redis connection string. For example, `redis://user:pass@host:port/db`.
|
|
5
5
|
*/
|
|
@@ -12,12 +12,12 @@ type RedisCacheTagsStoreConfig = {
|
|
|
12
12
|
readonly keyPrefix?: string;
|
|
13
13
|
};
|
|
14
14
|
/**
|
|
15
|
-
* A `
|
|
15
|
+
* A `DatoCacheTagsProvider` implementation that uses Redis as the storage backend.
|
|
16
16
|
*/
|
|
17
|
-
export declare class
|
|
17
|
+
export declare class RedisDatoCacheTagsProvider implements DatoCacheTagsProvider {
|
|
18
18
|
private readonly redis;
|
|
19
19
|
private readonly keyPrefix;
|
|
20
|
-
constructor({ connectionUrl, keyPrefix }:
|
|
20
|
+
constructor({ connectionUrl, keyPrefix }: RedisDatoCacheTagsProviderConfig);
|
|
21
21
|
storeQueryCacheTags(queryId: string, cacheTags: CacheTag[]): Promise<void>;
|
|
22
22
|
queriesReferencingCacheTags(cacheTags: CacheTag[]): Promise<string[]>;
|
|
23
23
|
deleteCacheTags(cacheTags: CacheTag[]): Promise<number>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Redis } from 'ioredis';
|
|
2
2
|
/**
|
|
3
|
-
* A `
|
|
3
|
+
* A `DatoCacheTagsProvider` implementation that uses Redis as the storage backend.
|
|
4
4
|
*/
|
|
5
|
-
export class
|
|
5
|
+
export class RedisDatoCacheTagsProvider {
|
|
6
6
|
redis;
|
|
7
7
|
keyPrefix;
|
|
8
8
|
constructor({ connectionUrl, keyPrefix }) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/cache-tags/provider/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAgBhC;;GAEG;AACH,MAAM,OAAO,0BAA0B;IACpB,KAAK,CAAC;IACN,SAAS,CAAC;IAE3B,YAAY,EAAE,aAAa,EAAE,SAAS,EAAoC;QACxE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,aAAa,EAAE;YACpC,oBAAoB,EAAE,CAAC;YACvB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,SAAqB;QACrE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEvC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,2BAA2B,CAAC,SAAqB;QAC5D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,SAAqB;QAChD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -24,9 +24,9 @@ export type CacheTagsInvalidateWebhook = {
|
|
|
24
24
|
};
|
|
25
25
|
};
|
|
26
26
|
/**
|
|
27
|
-
* Configuration object for creating a `
|
|
27
|
+
* Configuration object for creating a `DatoCacheTagsProvider` implementation.
|
|
28
28
|
*/
|
|
29
|
-
export interface
|
|
29
|
+
export interface DatoCacheTagsProvider {
|
|
30
30
|
/**
|
|
31
31
|
* Stores the cache tags of a query.
|
|
32
32
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cache/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cache-tags/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cache-tags/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,MAAsB,EAAE,EAAE,CACtE,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAe,CAAC,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAuB,QAAsB,EAAE,SAAsB,EAAU,EAAE;IAC9G,OAAO,UAAU,CAAC,MAAM,CAAC;SACtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SACvB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;SACvC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smartive/datocms-utils",
|
|
3
|
-
"version": "3.0.0-next.
|
|
3
|
+
"version": "3.0.0-next.8",
|
|
4
4
|
"description": "A set of utilities and helpers to work with DatoCMS in a Next.js project.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"source": "./src/index.ts",
|
|
@@ -9,21 +9,21 @@
|
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
10
10
|
"import": "./dist/index.js"
|
|
11
11
|
},
|
|
12
|
-
"./cache": {
|
|
13
|
-
"types": "./dist/cache/index.d.ts",
|
|
14
|
-
"import": "./dist/cache/index.js"
|
|
12
|
+
"./cache-tags": {
|
|
13
|
+
"types": "./dist/cache-tags/index.d.ts",
|
|
14
|
+
"import": "./dist/cache-tags/index.js"
|
|
15
15
|
},
|
|
16
|
-
"./cache/redis": {
|
|
17
|
-
"types": "./dist/cache/provider/redis.d.ts",
|
|
18
|
-
"import": "./dist/cache/provider/redis.js"
|
|
16
|
+
"./cache-tags/redis": {
|
|
17
|
+
"types": "./dist/cache-tags/provider/redis.d.ts",
|
|
18
|
+
"import": "./dist/cache-tags/provider/redis.js"
|
|
19
19
|
},
|
|
20
|
-
"./cache/neon": {
|
|
21
|
-
"types": "./dist/cache/provider/neon.d.ts",
|
|
22
|
-
"import": "./dist/cache/provider/neon.js"
|
|
20
|
+
"./cache-tags/neon": {
|
|
21
|
+
"types": "./dist/cache-tags/provider/neon.d.ts",
|
|
22
|
+
"import": "./dist/cache-tags/provider/neon.js"
|
|
23
23
|
},
|
|
24
|
-
"./cache/noop": {
|
|
25
|
-
"types": "./dist/cache/provider/noop.d.ts",
|
|
26
|
-
"import": "./dist/cache/provider/noop.js"
|
|
24
|
+
"./cache-tags/noop": {
|
|
25
|
+
"types": "./dist/cache-tags/provider/noop.d.ts",
|
|
26
|
+
"import": "./dist/cache-tags/provider/noop.js"
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
"files": [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { neon } from '@neondatabase/serverless';
|
|
2
|
-
import { type CacheTag, type
|
|
2
|
+
import { type CacheTag, type DatoCacheTagsProvider } from '../types.js';
|
|
3
3
|
|
|
4
|
-
type
|
|
4
|
+
type NeonDatoCacheTagsProviderConfig = {
|
|
5
5
|
/**
|
|
6
6
|
* Neon connection string. You can find it in the "Connection" tab of your Neon project dashboard.
|
|
7
7
|
* Has the format `postgresql://user:pass@host/db`
|
|
@@ -22,13 +22,13 @@ type NeonCacheTagsStoreConfig = {
|
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
* A `
|
|
25
|
+
* A `DatoCacheTagsProvider` implementation that uses Neon as the storage backend.
|
|
26
26
|
*/
|
|
27
|
-
export class
|
|
27
|
+
export class NeonDatoCacheTagsProvider implements DatoCacheTagsProvider {
|
|
28
28
|
private readonly sql;
|
|
29
29
|
private readonly table;
|
|
30
30
|
|
|
31
|
-
constructor({ connectionUrl, table }:
|
|
31
|
+
constructor({ connectionUrl, table }: NeonDatoCacheTagsProviderConfig) {
|
|
32
32
|
this.sql = neon(connectionUrl, { fullResults: true });
|
|
33
33
|
this.table = table;
|
|
34
34
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type CacheTag, type
|
|
1
|
+
import { type CacheTag, type DatoCacheTagsProvider } from '../types.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* A `
|
|
4
|
+
* A `DatoCacheTagsProvider` implementation that does not perform any actual storage operations.
|
|
5
5
|
*
|
|
6
6
|
* _Note: This implementation is useful for testing purposes or when you want to disable caching without changing the code that interacts with the cache._
|
|
7
7
|
*/
|
|
8
|
-
export class
|
|
8
|
+
export class NoopDatoCacheTagsProvider implements DatoCacheTagsProvider {
|
|
9
9
|
public async storeQueryCacheTags(queryId: string, cacheTags: CacheTag[]) {
|
|
10
10
|
console.debug('-- storeQueryCacheTags called', { queryId, cacheTags });
|
|
11
11
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Redis } from 'ioredis';
|
|
2
|
-
import { type CacheTag, type
|
|
2
|
+
import { type CacheTag, type DatoCacheTagsProvider } from '../types.js';
|
|
3
3
|
|
|
4
|
-
type
|
|
4
|
+
type RedisDatoCacheTagsProviderConfig = {
|
|
5
5
|
/**
|
|
6
6
|
* Redis connection string. For example, `redis://user:pass@host:port/db`.
|
|
7
7
|
*/
|
|
@@ -15,13 +15,13 @@ type RedisCacheTagsStoreConfig = {
|
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
* A `
|
|
18
|
+
* A `DatoCacheTagsProvider` implementation that uses Redis as the storage backend.
|
|
19
19
|
*/
|
|
20
|
-
export class
|
|
20
|
+
export class RedisDatoCacheTagsProvider implements DatoCacheTagsProvider {
|
|
21
21
|
private readonly redis;
|
|
22
22
|
private readonly keyPrefix;
|
|
23
23
|
|
|
24
|
-
constructor({ connectionUrl, keyPrefix }:
|
|
24
|
+
constructor({ connectionUrl, keyPrefix }: RedisDatoCacheTagsProviderConfig) {
|
|
25
25
|
this.redis = new Redis(connectionUrl, {
|
|
26
26
|
maxRetriesPerRequest: 3,
|
|
27
27
|
lazyConnect: true,
|
|
@@ -24,9 +24,9 @@ export type CacheTagsInvalidateWebhook = {
|
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
|
-
* Configuration object for creating a `
|
|
27
|
+
* Configuration object for creating a `DatoCacheTagsProvider` implementation.
|
|
28
28
|
*/
|
|
29
|
-
export interface
|
|
29
|
+
export interface DatoCacheTagsProvider {
|
|
30
30
|
/**
|
|
31
31
|
* Stores the cache tags of a query.
|
|
32
32
|
*
|
package/dist/cache/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"neon.js","sourceRoot":"","sources":["../../../src/cache/provider/neon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAuBhD;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACf,GAAG,CAAC;IACJ,KAAK,CAAC;IAEvB,YAAY,EAAE,aAAa,EAAE,KAAK,EAA4B;QAC5D,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,SAAqB;QACrE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEzF,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,WAAW,YAAY,yBAAyB,EAAE,IAAI,CAAC,CAAC;IACxG,CAAC;IAEM,KAAK,CAAC,2BAA2B,CAAC,SAAqB;QAC5D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CACnC,iCAAiC,IAAI,CAAC,KAAK,wBAAwB,YAAY,GAAG,EAClF,SAAS,CACV,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,CAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YAC7C,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACrC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,SAAqB;QAChD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpE,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,wBAAwB,YAAY,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC3H,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"noop.js","sourceRoot":"","sources":["../../../src/cache/provider/noop.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,qBAAqB;IACzB,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,SAAqB;QACrE,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAEvE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,2BAA2B,CAAC,SAAqB;QAC5D,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAEtE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,SAAqB;QAChD,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAE1D,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAE7C,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/cache/provider/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAgBhC;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAChB,KAAK,CAAC;IACN,SAAS,CAAC;IAE3B,YAAY,EAAE,aAAa,EAAE,SAAS,EAA6B;QACjE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,aAAa,EAAE;YACpC,oBAAoB,EAAE,CAAC;YACvB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,SAAqB;QACrE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEvC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,2BAA2B,CAAC,SAAqB;QAC5D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,SAAqB;QAChD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;CACF"}
|
package/dist/cache/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cache/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,MAAsB,EAAE,EAAE,CACtE,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAe,CAAC,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAuB,QAAsB,EAAE,SAAsB,EAAU,EAAE;IAC9G,OAAO,UAAU,CAAC,MAAM,CAAC;SACtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SACvB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;SACvC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC,CAAC"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|