@smartive/datocms-utils 1.6.0 → 2.1.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/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
- # [1.6.0](https://github.com/smartive/datocms-utils/compare/v1.5.0...v1.6.0) (2025-02-07)
1
+ # [2.1.0](https://github.com/smartive/datocms-utils/compare/v2.0.0...v2.1.0) (2025-04-09)
2
2
 
3
3
 
4
4
  ### Features
5
5
 
6
- * add getTelLink utility ([#61](https://github.com/smartive/datocms-utils/issues/61)) ([31044d9](https://github.com/smartive/datocms-utils/commit/31044d91f9d47736a2ca254501eb5d11dc6998a8))
6
+ * add parameterization to all queries ([#89](https://github.com/smartive/datocms-utils/issues/89)) ([66299d1](https://github.com/smartive/datocms-utils/commit/66299d1a633c8b256abc927be37981de54edc464))
@@ -21,22 +21,27 @@ export declare const generateQueryId: <TVariables = unknown>(document: DocumentN
21
21
  *
22
22
  * @param {string} queryId Unique query ID
23
23
  * @param {CacheTag[]} cacheTags Array of cache tags
24
+ * @param {string} tableId Database table ID
24
25
  */
25
- export declare const storeQueryCacheTags: (queryId: string, cacheTags: CacheTag[]) => Promise<void>;
26
+ export declare const storeQueryCacheTags: (queryId: string, cacheTags: CacheTag[], tableId: string) => Promise<void>;
26
27
  /**
27
28
  * Retrieves the queries that reference cache tags.
28
29
  *
29
30
  * @param {CacheTag[]} cacheTags Array of cache tags
31
+ * @param {string} tableId Database table ID
30
32
  * @returns Array of query IDs
31
33
  */
32
- export declare const queriesReferencingCacheTags: (cacheTags: CacheTag[]) => Promise<string[]>;
34
+ export declare const queriesReferencingCacheTags: (cacheTags: CacheTag[], tableId: string) => Promise<string[]>;
33
35
  /**
34
36
  * Deletes the cache tags of a query from the database.
35
37
  *
36
38
  * @param {string} queryId Unique query ID
39
+ * @param {string} tableId Database table ID
37
40
  */
38
- export declare const deleteQueries: (queryIds: string[]) => Promise<void>;
41
+ export declare const deleteQueries: (queryIds: string[], tableId: string) => Promise<void>;
39
42
  /**
40
43
  * Wipes out all cache tags from the database.
44
+ *
45
+ * @param {string} tableId Database table ID
41
46
  */
42
- export declare function truncateCacheTags(): Promise<void>;
47
+ export declare function truncateCacheTags(tableId: string): Promise<void>;
@@ -32,41 +32,50 @@ export const generateQueryId = (document, variables) => {
32
32
  *
33
33
  * @param {string} queryId Unique query ID
34
34
  * @param {CacheTag[]} cacheTags Array of cache tags
35
+ * @param {string} tableId Database table ID
35
36
  */
36
- export const storeQueryCacheTags = async (queryId, cacheTags) => {
37
+ export const storeQueryCacheTags = async (queryId, cacheTags, tableId) => {
37
38
  if (!cacheTags?.length) {
38
39
  return;
39
40
  }
40
- await sql.query(`INSERT INTO query_cache_tags VALUES ${cacheTags.map((cacheTag) => `('${queryId}', '${cacheTag}')`).join()} ON CONFLICT DO NOTHING`);
41
+ const tags = cacheTags.flatMap((_, i) => [queryId, cacheTags[i]]);
42
+ const placeholders = cacheTags.map((_, i) => `($${2 * i + 1}, $${2 * i + 2})`).join(',');
43
+ await sql.query(`INSERT INTO ${tableId} VALUES ${placeholders} ON CONFLICT DO NOTHING`, tags);
41
44
  };
42
45
  /**
43
46
  * Retrieves the queries that reference cache tags.
44
47
  *
45
48
  * @param {CacheTag[]} cacheTags Array of cache tags
49
+ * @param {string} tableId Database table ID
46
50
  * @returns Array of query IDs
47
51
  */
48
- export const queriesReferencingCacheTags = async (cacheTags) => {
52
+ export const queriesReferencingCacheTags = async (cacheTags, tableId) => {
49
53
  if (!cacheTags?.length) {
50
54
  return [];
51
55
  }
52
- const { rows } = await sql.query(`SELECT DISTINCT query_id FROM query_cache_tags WHERE cache_tag IN (${cacheTags.map((cacheTag) => `'${cacheTag}'`).join(', ')})`);
56
+ const placeholders = cacheTags.map((_, i) => `$${i + 1}`).join(',');
57
+ const { rows } = await sql.query(`SELECT DISTINCT query_id FROM ${tableId} WHERE cache_tag IN (${placeholders})`, cacheTags);
53
58
  return rows.map((row) => row.query_id);
54
59
  };
55
60
  /**
56
61
  * Deletes the cache tags of a query from the database.
57
62
  *
58
63
  * @param {string} queryId Unique query ID
64
+ * @param {string} tableId Database table ID
59
65
  */
60
- export const deleteQueries = async (queryIds) => {
66
+ export const deleteQueries = async (queryIds, tableId) => {
61
67
  if (!queryIds?.length) {
62
68
  return;
63
69
  }
64
- await sql.query(`DELETE FROM query_cache_tags WHERE query_id IN (${queryIds.map((id) => `'${id}'`).join(', ')})`);
70
+ const placeholders = queryIds.map((_, i) => `$${i + 1}`).join(',');
71
+ await sql.query(`DELETE FROM ${tableId} WHERE query_id IN (${placeholders})`, queryIds);
65
72
  };
66
73
  /**
67
74
  * Wipes out all cache tags from the database.
75
+ *
76
+ * @param {string} tableId Database table ID
68
77
  */
69
- export async function truncateCacheTags() {
70
- await sql.query('DELETE FROM query_cache_tags');
78
+ export async function truncateCacheTags(tableId) {
79
+ await sql.query(`DELETE FROM ${tableId}`);
71
80
  }
72
81
  //# sourceMappingURL=cache-tags.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache-tags.js","sourceRoot":"","sources":["../src/cache-tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAgB,KAAK,EAAE,MAAM,SAAS,CAAC;AAG9C;;;;;;GAMG;AAEH,MAAM,UAAU,6BAA6B,CAAC,MAAsB;IAClE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAe,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;GAMG;AAEH,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;AAEF;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,OAAe,EAAE,SAAqB,EAAE,EAAE;IAClF,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,MAAM,GAAG,CAAC,KAAK,CACb,uCAAuC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,OAAO,OAAO,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,yBAAyB,CACpI,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAAE,SAAqB,EAAqB,EAAE;IAC5F,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAqC,MAAM,GAAG,CAAC,KAAK,CAChE,sEAAsE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjI,CAAC;IAEF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF;;;;GAIG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,QAAkB,EAAE,EAAE;IACxD,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IACD,MAAM,GAAG,CAAC,KAAK,CAAC,mDAAmD,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpH,CAAC,CAAC;AAEF;;GAEG;AAEH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"cache-tags.js","sourceRoot":"","sources":["../src/cache-tags.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartive/datocms-utils",
3
- "version": "1.6.0",
3
+ "version": "2.1.0",
4
4
  "description": "A set of utilities and helpers to work with DatoCMS in a Next.js project.",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/index.js",
package/src/cache-tags.ts CHANGED
@@ -39,31 +39,38 @@ export const generateQueryId = <TVariables = unknown>(document: DocumentNode, va
39
39
  *
40
40
  * @param {string} queryId Unique query ID
41
41
  * @param {CacheTag[]} cacheTags Array of cache tags
42
+ * @param {string} tableId Database table ID
42
43
  */
43
44
 
44
- export const storeQueryCacheTags = async (queryId: string, cacheTags: CacheTag[]) => {
45
+ export const storeQueryCacheTags = async (queryId: string, cacheTags: CacheTag[], tableId: string) => {
45
46
  if (!cacheTags?.length) {
46
47
  return;
47
48
  }
48
49
 
49
- await sql.query(
50
- `INSERT INTO query_cache_tags VALUES ${cacheTags.map((cacheTag) => `('${queryId}', '${cacheTag}')`).join()} ON CONFLICT DO NOTHING`,
51
- );
50
+ const tags = cacheTags.flatMap((_, i) => [queryId, cacheTags[i]]);
51
+ const placeholders = cacheTags.map((_, i) => `($${2 * i + 1}, $${2 * i + 2})`).join(',');
52
+
53
+ await sql.query(`INSERT INTO ${tableId} VALUES ${placeholders} ON CONFLICT DO NOTHING`, tags);
52
54
  };
53
55
 
54
56
  /**
55
57
  * Retrieves the queries that reference cache tags.
56
58
  *
57
59
  * @param {CacheTag[]} cacheTags Array of cache tags
60
+ * @param {string} tableId Database table ID
58
61
  * @returns Array of query IDs
59
62
  */
60
63
 
61
- export const queriesReferencingCacheTags = async (cacheTags: CacheTag[]): Promise<string[]> => {
64
+ export const queriesReferencingCacheTags = async (cacheTags: CacheTag[], tableId: string): Promise<string[]> => {
62
65
  if (!cacheTags?.length) {
63
66
  return [];
64
67
  }
68
+
69
+ const placeholders = cacheTags.map((_, i) => `$${i + 1}`).join(',');
70
+
65
71
  const { rows }: { rows: { query_id: string }[] } = await sql.query(
66
- `SELECT DISTINCT query_id FROM query_cache_tags WHERE cache_tag IN (${cacheTags.map((cacheTag) => `'${cacheTag}'`).join(', ')})`,
72
+ `SELECT DISTINCT query_id FROM ${tableId} WHERE cache_tag IN (${placeholders})`,
73
+ cacheTags,
67
74
  );
68
75
 
69
76
  return rows.map((row) => row.query_id);
@@ -73,19 +80,24 @@ export const queriesReferencingCacheTags = async (cacheTags: CacheTag[]): Promis
73
80
  * Deletes the cache tags of a query from the database.
74
81
  *
75
82
  * @param {string} queryId Unique query ID
83
+ * @param {string} tableId Database table ID
76
84
  */
77
85
 
78
- export const deleteQueries = async (queryIds: string[]) => {
86
+ export const deleteQueries = async (queryIds: string[], tableId: string) => {
79
87
  if (!queryIds?.length) {
80
88
  return;
81
89
  }
82
- await sql.query(`DELETE FROM query_cache_tags WHERE query_id IN (${queryIds.map((id) => `'${id}'`).join(', ')})`);
90
+ const placeholders = queryIds.map((_, i) => `$${i + 1}`).join(',');
91
+
92
+ await sql.query(`DELETE FROM ${tableId} WHERE query_id IN (${placeholders})`, queryIds);
83
93
  };
84
94
 
85
95
  /**
86
96
  * Wipes out all cache tags from the database.
97
+ *
98
+ * @param {string} tableId Database table ID
87
99
  */
88
100
 
89
- export async function truncateCacheTags() {
90
- await sql.query('DELETE FROM query_cache_tags');
101
+ export async function truncateCacheTags(tableId: string) {
102
+ await sql.query(`DELETE FROM ${tableId}`);
91
103
  }