@ronin/compiler 0.10.1-leo-ron-1083-experimental-208 → 0.10.1-leo-ron-1083-experimental-209
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.js +43 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
@@ -102,6 +102,9 @@ var expand = (obj) => {
|
|
102
102
|
return res;
|
103
103
|
}, {});
|
104
104
|
};
|
105
|
+
var getProperty = (obj, path) => {
|
106
|
+
return path.split(".").reduce((acc, key) => acc?.[key], obj);
|
107
|
+
};
|
105
108
|
var splitQuery = (query) => {
|
106
109
|
const queryType = Object.keys(query)[0];
|
107
110
|
const queryModel = Object.keys(query[queryType])[0];
|
@@ -939,9 +942,24 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query)
|
|
939
942
|
};
|
940
943
|
};
|
941
944
|
|
942
|
-
// src/
|
945
|
+
// src/utils/pagination.ts
|
943
946
|
var CURSOR_SEPARATOR = ",";
|
944
947
|
var CURSOR_NULL_PLACEHOLDER = "RONIN_NULL";
|
948
|
+
var generatePaginationCursor = (model, orderedBy, record) => {
|
949
|
+
const { ascending = [], descending = [] } = orderedBy || {};
|
950
|
+
const keys = [...ascending, ...descending];
|
951
|
+
if (keys.length === 0) keys.push("ronin.createdAt");
|
952
|
+
const cursors = keys.map((fieldSlug) => {
|
953
|
+
const property = getProperty(record, fieldSlug);
|
954
|
+
if (property === null || property === void 0) return CURSOR_NULL_PLACEHOLDER;
|
955
|
+
const { field } = getFieldFromModel(model, fieldSlug, "orderedBy");
|
956
|
+
if (field.type === "date") return new Date(property).getTime();
|
957
|
+
return property;
|
958
|
+
});
|
959
|
+
return cursors.map((cursor) => encodeURIComponent(String(cursor))).join(CURSOR_SEPARATOR);
|
960
|
+
};
|
961
|
+
|
962
|
+
// src/instructions/before-after.ts
|
945
963
|
var handleBeforeOrAfter = (model, statementParams, instructions) => {
|
946
964
|
if (!(instructions.before || instructions.after)) {
|
947
965
|
throw new RoninError({
|
@@ -1520,17 +1538,39 @@ var Transaction = class {
|
|
1520
1538
|
});
|
1521
1539
|
return relevantResults.map((result, index) => {
|
1522
1540
|
const query = this.queries.at(-index);
|
1523
|
-
const { queryModel } = splitQuery(query);
|
1541
|
+
const { queryModel, queryInstructions } = splitQuery(query);
|
1524
1542
|
const model = getModelBySlug(this.models, queryModel);
|
1525
1543
|
const single = queryModel !== model.pluralSlug;
|
1526
1544
|
if (single) {
|
1527
1545
|
return { record: this.formatRecord(model, result[0]) };
|
1528
1546
|
}
|
1529
|
-
|
1547
|
+
const pageSize = queryInstructions?.limitedTo;
|
1548
|
+
const output = {
|
1530
1549
|
records: result.map((resultItem) => {
|
1531
1550
|
return this.formatRecord(model, resultItem);
|
1532
1551
|
})
|
1533
1552
|
};
|
1553
|
+
if (pageSize && output.records.length > 0) {
|
1554
|
+
if (queryInstructions?.before || queryInstructions?.after) {
|
1555
|
+
const direction = queryInstructions?.before ? "moreAfter" : "moreBefore";
|
1556
|
+
const firstRecord = output.records[0];
|
1557
|
+
output[direction] = generatePaginationCursor(
|
1558
|
+
model,
|
1559
|
+
queryInstructions.orderedBy,
|
1560
|
+
firstRecord
|
1561
|
+
);
|
1562
|
+
}
|
1563
|
+
if (output.records.length > pageSize) {
|
1564
|
+
const direction = queryInstructions?.before ? "moreBefore" : "moreAfter";
|
1565
|
+
const lastRecord = output.records.pop();
|
1566
|
+
output[direction] = generatePaginationCursor(
|
1567
|
+
model,
|
1568
|
+
queryInstructions.orderedBy,
|
1569
|
+
lastRecord
|
1570
|
+
);
|
1571
|
+
}
|
1572
|
+
}
|
1573
|
+
return output;
|
1534
1574
|
});
|
1535
1575
|
}
|
1536
1576
|
};
|
package/package.json
CHANGED