@memberjunction/record-set-processor-base 5.47.0 → 5.48.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.
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview List source — yields the members of an `MJ: Lists` record (read from `MJ: List
|
|
3
|
-
* Details`) in
|
|
3
|
+
* Details`) in keyset-paginated batches (seek over `ListDetail.ID`, O(log N) per page at any
|
|
4
|
+
* depth). List Details already store a composite-key-safe `RecordID`.
|
|
4
5
|
* @module @memberjunction/record-set-processor-base
|
|
5
6
|
*/
|
|
6
7
|
import { IMetadataProvider, UserInfo } from '@memberjunction/core';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listSource.d.ts","sourceRoot":"","sources":["../../src/sources/listSource.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"listSource.d.ts","sourceRoot":"","sources":["../../src/sources/listSource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAgB,iBAAiB,EAAW,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAa,MAAM,UAAU,CAAC;AAEjE,iEAAiE;AACjE,qBAAa,UAAW,YAAW,gBAAgB;IAInC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAE1B,mEAAmE;gBACtC,MAAM,EAAE,MAAM;IAEpC,QAAQ,IAAI,gBAAgB;YAIrB,eAAe;IAuBhB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;CAoC3J"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview List source — yields the members of an `MJ: Lists` record (read from `MJ: List
|
|
3
|
-
* Details`) in
|
|
3
|
+
* Details`) in keyset-paginated batches (seek over `ListDetail.ID`, O(log N) per page at any
|
|
4
|
+
* depth). List Details already store a composite-key-safe `RecordID`.
|
|
4
5
|
* @module @memberjunction/record-set-processor-base
|
|
5
6
|
*/
|
|
6
|
-
import { RunView } from '@memberjunction/core';
|
|
7
|
+
import { CompositeKey, RunView } from '@memberjunction/core';
|
|
7
8
|
/** A source backed by a List (its members, via List Details). */
|
|
8
9
|
export class ListSource {
|
|
9
10
|
/** @param listID - The `MJ: Lists` ID whose members to iterate. */
|
|
@@ -37,25 +38,35 @@ export class ListSource {
|
|
|
37
38
|
}
|
|
38
39
|
async NextBatch(cursor, batchSize, contextUser, _provider) {
|
|
39
40
|
const entityID = await this.resolveEntityID(contextUser);
|
|
40
|
-
const offset = cursor?.Offset ?? 0;
|
|
41
41
|
const rv = new RunView();
|
|
42
|
+
// Keyset (seek) pagination over ListDetail.ID (single uniqueidentifier
|
|
43
|
+
// PK). A legacy Offset cursor — persisted by a run started before this
|
|
44
|
+
// change — is honored for its one resume batch, then the returned
|
|
45
|
+
// cursor converts to keyset. BypassCache matches the other sweep
|
|
46
|
+
// sources: single-use pages should never pollute the local cache.
|
|
47
|
+
const legacyOffset = cursor?.Key == null && (cursor?.Offset ?? 0) > 0 ? cursor.Offset : undefined;
|
|
42
48
|
const result = await rv.RunView({
|
|
43
49
|
EntityName: 'MJ: List Details',
|
|
44
50
|
ExtraFilter: `ListID='${this.listID}'`,
|
|
45
|
-
Fields: ['RecordID'],
|
|
51
|
+
Fields: ['ID', 'RecordID'],
|
|
46
52
|
OrderBy: 'ID',
|
|
47
53
|
ResultType: 'simple',
|
|
48
|
-
StartRow: offset,
|
|
49
54
|
MaxRows: batchSize,
|
|
55
|
+
BypassCache: true,
|
|
56
|
+
...(legacyOffset != null
|
|
57
|
+
? { StartRow: legacyOffset }
|
|
58
|
+
: { AfterKey: cursor?.Key != null ? CompositeKey.FromKeyValuePair('ID', cursor.Key) : undefined }),
|
|
50
59
|
}, contextUser);
|
|
51
60
|
if (!result.Success) {
|
|
52
61
|
throw new Error(`ListSource: failed loading members for list '${this.listID}': ${result.ErrorMessage}`);
|
|
53
62
|
}
|
|
54
63
|
const rows = (result.Results ?? []);
|
|
55
64
|
const records = rows.map((row) => ({ EntityID: entityID, RecordID: String(row.RecordID) }));
|
|
65
|
+
const lastRowId = rows.length > 0 ? rows[rows.length - 1].ID : undefined;
|
|
66
|
+
const lastId = lastRowId != null ? String(lastRowId) : cursor?.Key;
|
|
56
67
|
return {
|
|
57
68
|
Records: records,
|
|
58
|
-
NextCursor: { Offset:
|
|
69
|
+
NextCursor: lastId != null ? { Key: lastId } : { Offset: (legacyOffset ?? 0) + records.length },
|
|
59
70
|
Exhausted: records.length < batchSize,
|
|
60
71
|
TotalRowCount: result.TotalRowCount,
|
|
61
72
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listSource.js","sourceRoot":"","sources":["../../src/sources/listSource.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"listSource.js","sourceRoot":"","sources":["../../src/sources/listSource.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/record-set-processor-base",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.48.0",
|
|
5
5
|
"description": "MemberJunction: Record Set Processor Base - interfaces, types, and source adapters for batched, resumable record-set processing. Client-safe.",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"author": "MemberJunction.com",
|
|
18
18
|
"license": "ISC",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@memberjunction/core": "5.
|
|
21
|
-
"@memberjunction/global": "5.
|
|
20
|
+
"@memberjunction/core": "5.48.0",
|
|
21
|
+
"@memberjunction/global": "5.48.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/node": "24.10.11",
|