@payloadcms/drizzle 3.81.0-internal-debug.1a0f4d0 → 3.81.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +2 -1
- package/dist/create.js.map +1 -1
- package/dist/deleteMany.d.ts.map +1 -1
- package/dist/deleteMany.js +2 -0
- package/dist/deleteMany.js.map +1 -1
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +2 -0
- package/dist/deleteOne.js.map +1 -1
- package/dist/deleteVersions.d.ts.map +1 -1
- package/dist/deleteVersions.js +2 -0
- package/dist/deleteVersions.js.map +1 -1
- package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
- package/dist/queries/getTableColumnFromPath.js +28 -6
- package/dist/queries/getTableColumnFromPath.js.map +1 -1
- package/dist/types.d.ts +18 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/updateJobs.d.ts.map +1 -1
- package/dist/updateJobs.js +2 -1
- package/dist/updateJobs.js.map +1 -1
- package/dist/updateMany.d.ts.map +1 -1
- package/dist/updateMany.js +2 -1
- package/dist/updateMany.js.map +1 -1
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +2 -1
- package/dist/updateOne.js.map +1 -1
- package/dist/upsertRow/index.d.ts.map +1 -1
- package/dist/upsertRow/index.js +2 -0
- package/dist/upsertRow/index.js.map +1 -1
- package/dist/utilities/getPrimaryDb.d.ts +6 -0
- package/dist/utilities/getPrimaryDb.d.ts.map +1 -0
- package/dist/utilities/getPrimaryDb.js +10 -0
- package/dist/utilities/getPrimaryDb.js.map +1 -0
- package/dist/utilities/getTransaction.d.ts +3 -0
- package/dist/utilities/getTransaction.d.ts.map +1 -1
- package/dist/utilities/getTransaction.js +7 -0
- package/dist/utilities/getTransaction.js.map +1 -1
- package/dist/utilities/readAfterWrite.d.ts +17 -0
- package/dist/utilities/readAfterWrite.d.ts.map +1 -0
- package/dist/utilities/readAfterWrite.js +21 -0
- package/dist/utilities/readAfterWrite.js.map +1 -0
- package/package.json +3 -3
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
import { shouldReadFromPrimary } from './readAfterWrite.js';
|
|
1
2
|
/**
|
|
2
3
|
* Returns current db transaction instance from req or adapter.drizzle itself
|
|
3
4
|
*
|
|
4
5
|
* If a transaction session doesn't exist (e.g., it was already committed/rolled back),
|
|
5
6
|
* falls back to the default adapter.drizzle instance to prevent errors.
|
|
7
|
+
*
|
|
8
|
+
* When read replicas are configured and a write happened recently, returns the
|
|
9
|
+
* unwrapped primary to avoid replication-lag stale reads.
|
|
6
10
|
*/ export const getTransaction = async (adapter, req)=>{
|
|
7
11
|
if (!req?.transactionID) {
|
|
12
|
+
if (shouldReadFromPrimary(adapter)) {
|
|
13
|
+
return adapter.primaryDrizzle;
|
|
14
|
+
}
|
|
8
15
|
return adapter.drizzle;
|
|
9
16
|
}
|
|
10
17
|
return adapter.sessions[await req.transactionID]?.db || adapter.drizzle;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/getTransaction.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport type { DrizzleAdapter } from '../types.js'\n\n/**\n * Returns current db transaction instance from req or adapter.drizzle itself\n *\n * If a transaction session doesn't exist (e.g., it was already committed/rolled back),\n * falls back to the default adapter.drizzle instance to prevent errors.\n */\nexport const getTransaction = async <T extends DrizzleAdapter = DrizzleAdapter>(\n adapter: T,\n req?: Partial<PayloadRequest>,\n): Promise<T['drizzle']> => {\n if (!req?.transactionID) {\n return adapter.drizzle\n }\n\n return (adapter.sessions[await req.transactionID]?.db as T['drizzle']) || adapter.drizzle\n}\n"],"names":["getTransaction","adapter","req","transactionID","drizzle","sessions","db"],"mappings":"AAIA
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/getTransaction.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { shouldReadFromPrimary } from './readAfterWrite.js'\n\n/**\n * Returns current db transaction instance from req or adapter.drizzle itself\n *\n * If a transaction session doesn't exist (e.g., it was already committed/rolled back),\n * falls back to the default adapter.drizzle instance to prevent errors.\n *\n * When read replicas are configured and a write happened recently, returns the\n * unwrapped primary to avoid replication-lag stale reads.\n */\nexport const getTransaction = async <T extends DrizzleAdapter = DrizzleAdapter>(\n adapter: T,\n req?: Partial<PayloadRequest>,\n): Promise<T['drizzle']> => {\n if (!req?.transactionID) {\n if (shouldReadFromPrimary(adapter)) {\n return adapter.primaryDrizzle as T['drizzle']\n }\n return adapter.drizzle\n }\n\n return (adapter.sessions[await req.transactionID]?.db as T['drizzle']) || adapter.drizzle\n}\n"],"names":["shouldReadFromPrimary","getTransaction","adapter","req","transactionID","primaryDrizzle","drizzle","sessions","db"],"mappings":"AAIA,SAASA,qBAAqB,QAAQ,sBAAqB;AAE3D;;;;;;;;CAQC,GACD,OAAO,MAAMC,iBAAiB,OAC5BC,SACAC;IAEA,IAAI,CAACA,KAAKC,eAAe;QACvB,IAAIJ,sBAAsBE,UAAU;YAClC,OAAOA,QAAQG,cAAc;QAC/B;QACA,OAAOH,QAAQI,OAAO;IACxB;IAEA,OAAO,AAACJ,QAAQK,QAAQ,CAAC,MAAMJ,IAAIC,aAAa,CAAC,EAAEI,MAAuBN,QAAQI,OAAO;AAC3F,EAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DrizzleAdapter } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tracks the last write timestamp on the adapter so that reads within a
|
|
4
|
+
* configurable window after a write are routed to the primary instead of a
|
|
5
|
+
* read replica.
|
|
6
|
+
*
|
|
7
|
+
* This avoids stale-read issues caused by replication lag when application
|
|
8
|
+
* code writes then immediately reads (e.g. create → findByID).
|
|
9
|
+
*/
|
|
10
|
+
/** Call after any successful write to mark the adapter. */
|
|
11
|
+
export declare function markWrite(adapter: DrizzleAdapter): void;
|
|
12
|
+
/**
|
|
13
|
+
* Returns true when a recent write happened and reads should be routed to the
|
|
14
|
+
* primary to guarantee read-after-write consistency.
|
|
15
|
+
*/
|
|
16
|
+
export declare function shouldReadFromPrimary(adapter: DrizzleAdapter): boolean;
|
|
17
|
+
//# sourceMappingURL=readAfterWrite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readAfterWrite.d.ts","sourceRoot":"","sources":["../../src/utilities/readAfterWrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD;;;;;;;GAOG;AAEH,2DAA2D;AAC3D,wBAAgB,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAEvD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAKtE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks the last write timestamp on the adapter so that reads within a
|
|
3
|
+
* configurable window after a write are routed to the primary instead of a
|
|
4
|
+
* read replica.
|
|
5
|
+
*
|
|
6
|
+
* This avoids stale-read issues caused by replication lag when application
|
|
7
|
+
* code writes then immediately reads (e.g. create → findByID).
|
|
8
|
+
*/ /** Call after any successful write to mark the adapter. */ export function markWrite(adapter) {
|
|
9
|
+
adapter.lastWriteTimestamp = Date.now();
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Returns true when a recent write happened and reads should be routed to the
|
|
13
|
+
* primary to guarantee read-after-write consistency.
|
|
14
|
+
*/ export function shouldReadFromPrimary(adapter) {
|
|
15
|
+
if (!adapter.primaryDrizzle || !adapter.lastWriteTimestamp) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return Date.now() - adapter.lastWriteTimestamp < adapter.readReplicasAfterWriteInterval;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=readAfterWrite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/readAfterWrite.ts"],"sourcesContent":["import type { DrizzleAdapter } from '../types.js'\n\n/**\n * Tracks the last write timestamp on the adapter so that reads within a\n * configurable window after a write are routed to the primary instead of a\n * read replica.\n *\n * This avoids stale-read issues caused by replication lag when application\n * code writes then immediately reads (e.g. create → findByID).\n */\n\n/** Call after any successful write to mark the adapter. */\nexport function markWrite(adapter: DrizzleAdapter): void {\n adapter.lastWriteTimestamp = Date.now()\n}\n\n/**\n * Returns true when a recent write happened and reads should be routed to the\n * primary to guarantee read-after-write consistency.\n */\nexport function shouldReadFromPrimary(adapter: DrizzleAdapter): boolean {\n if (!adapter.primaryDrizzle || !adapter.lastWriteTimestamp) {\n return false\n }\n return Date.now() - adapter.lastWriteTimestamp < adapter.readReplicasAfterWriteInterval\n}\n"],"names":["markWrite","adapter","lastWriteTimestamp","Date","now","shouldReadFromPrimary","primaryDrizzle","readReplicasAfterWriteInterval"],"mappings":"AAEA;;;;;;;CAOC,GAED,yDAAyD,GACzD,OAAO,SAASA,UAAUC,OAAuB;IAC/CA,QAAQC,kBAAkB,GAAGC,KAAKC,GAAG;AACvC;AAEA;;;CAGC,GACD,OAAO,SAASC,sBAAsBJ,OAAuB;IAC3D,IAAI,CAACA,QAAQK,cAAc,IAAI,CAACL,QAAQC,kBAAkB,EAAE;QAC1D,OAAO;IACT;IACA,OAAOC,KAAKC,GAAG,KAAKH,QAAQC,kBAAkB,GAAGD,QAAQM,8BAA8B;AACzF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/drizzle",
|
|
3
|
-
"version": "3.81.0
|
|
3
|
+
"version": "3.81.0",
|
|
4
4
|
"description": "A library of shared functions used by different payload database adapters",
|
|
5
5
|
"homepage": "https://payloadcms.com",
|
|
6
6
|
"repository": {
|
|
@@ -60,10 +60,10 @@
|
|
|
60
60
|
"@types/pg": "8.10.2",
|
|
61
61
|
"@types/to-snake-case": "1.0.0",
|
|
62
62
|
"@payloadcms/eslint-config": "3.28.0",
|
|
63
|
-
"payload": "3.81.0
|
|
63
|
+
"payload": "3.81.0"
|
|
64
64
|
},
|
|
65
65
|
"peerDependencies": {
|
|
66
|
-
"payload": "3.81.0
|
|
66
|
+
"payload": "3.81.0"
|
|
67
67
|
},
|
|
68
68
|
"scripts": {
|
|
69
69
|
"build": "pnpm build:swc && pnpm build:types",
|