nicot 1.1.9 → 1.1.11

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.
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPaginatedResult = exports.extractValueFromOrderByKey = void 0;
7
+ const typeorm_1 = require("typeorm");
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const superjson_1 = __importDefault(require("superjson"));
10
+ function getValueFromOrderBy(orderBy) {
11
+ return typeof orderBy === 'string' ? orderBy : orderBy.order;
12
+ }
13
+ function getOperator(type, orderBy) {
14
+ const value = getValueFromOrderBy(orderBy);
15
+ const isBackwards = (type === 'prev') !== (value === 'DESC');
16
+ return isBackwards ? '<' : '>';
17
+ }
18
+ function getReversedTypeormOrderBy(orderBy) {
19
+ if (typeof orderBy === 'string') {
20
+ return {
21
+ order: orderBy === 'ASC' ? 'DESC' : 'ASC',
22
+ nulls: undefined,
23
+ };
24
+ }
25
+ return {
26
+ order: orderBy.order === 'ASC' ? 'DESC' : 'ASC',
27
+ nulls: orderBy.nulls
28
+ ? orderBy.nulls === 'NULLS FIRST'
29
+ ? 'NULLS LAST'
30
+ : 'NULLS FIRST'
31
+ : undefined,
32
+ };
33
+ }
34
+ function reverseQueryOrderBy(qb) {
35
+ const orderBys = getTypeormOrderBy(qb);
36
+ orderBys.forEach(({ key, direction }, i) => {
37
+ const reversed = getReversedTypeormOrderBy(direction);
38
+ if (i === 0) {
39
+ qb.orderBy(key, reversed.order, reversed.nulls);
40
+ }
41
+ else {
42
+ qb.addOrderBy(key, reversed.order, reversed.nulls);
43
+ }
44
+ });
45
+ }
46
+ function getTypeormOrderBy(qb) {
47
+ const orderBy = qb.expressionMap.allOrderBys;
48
+ const orderByEntrys = Object.entries(orderBy);
49
+ return orderByEntrys.map(([key, value]) => ({
50
+ key,
51
+ direction: value,
52
+ }));
53
+ }
54
+ function extractValueFromOrderByKey(obj, key, entityAliasName) {
55
+ const getField = (obj, key) => {
56
+ const value = obj[key];
57
+ if (!value)
58
+ return undefined;
59
+ if (Array.isArray(value)) {
60
+ if (!value.length) {
61
+ return undefined;
62
+ }
63
+ return value[value.length - 1];
64
+ }
65
+ return value;
66
+ };
67
+ const [alias, field] = key.split('.');
68
+ if (alias === entityAliasName) {
69
+ return getField(obj, field);
70
+ }
71
+ const aliasParts = alias.split('_');
72
+ if (aliasParts.length === 1) {
73
+ const value = getField(obj, alias);
74
+ if (!value)
75
+ return undefined;
76
+ return getField(value, field);
77
+ }
78
+ const value = getField(obj, aliasParts[0]);
79
+ if (!value)
80
+ return undefined;
81
+ return extractValueFromOrderByKey(value, `${aliasParts.slice(1).join('_')}.${field}`);
82
+ }
83
+ exports.extractValueFromOrderByKey = extractValueFromOrderByKey;
84
+ function encodeBase64Url(str) {
85
+ return Buffer.from(str)
86
+ .toString('base64')
87
+ .replace(/\+/g, '-')
88
+ .replace(/\//g, '_')
89
+ .replace(/=+$/, '');
90
+ }
91
+ function decodeBase64Url(str) {
92
+ str = str.replace(/-/g, '+').replace(/_/g, '/');
93
+ while (str.length % 4)
94
+ str += '=';
95
+ return Buffer.from(str, 'base64').toString();
96
+ }
97
+ async function getPaginatedResult(qb, entityAliasName, take, cursor) {
98
+ const orderBys = getTypeormOrderBy(qb);
99
+ qb.take(take + 1);
100
+ let type = 'next';
101
+ if (cursor) {
102
+ // cursor is base64url encoded string
103
+ const data = superjson_1.default.parse(decodeBase64Url(cursor));
104
+ type = data.type;
105
+ const keys = Object.keys(data.payload).filter((k) => qb.expressionMap.orderBys[k]);
106
+ if (keys.length) {
107
+ const staircasedKeys = keys.map((key, i) => lodash_1.default.range(i + 1).map((j) => keys[j]));
108
+ const cursorKey = (key) => `_cursor_${key.replace(/\./g, '__')}`;
109
+ qb.andWhere(new typeorm_1.Brackets((sqb) => {
110
+ const brackets = staircasedKeys.map((keys, i) => new typeorm_1.Brackets((ssqb) => {
111
+ const expressions = keys.map((key, j) => {
112
+ const paramKey = cursorKey(key);
113
+ const operator = j === keys.length - 1
114
+ ? `${getOperator(data.type, qb.expressionMap.orderBys[key])}`
115
+ : '=';
116
+ return `${key} ${operator} :${paramKey}`;
117
+ });
118
+ const [firstExpression, ...restExpressions] = expressions;
119
+ ssqb.where(firstExpression);
120
+ restExpressions.forEach((expression) => ssqb.andWhere(expression));
121
+ }));
122
+ const [firstBrackets, ...restBrackets] = brackets;
123
+ sqb.where(firstBrackets);
124
+ restBrackets.forEach((brackets) => sqb.orWhere(brackets));
125
+ })).setParameters(lodash_1.default.mapKeys(data.payload, (_, key) => cursorKey(key)));
126
+ }
127
+ if (data.type === 'prev') {
128
+ reverseQueryOrderBy(qb);
129
+ }
130
+ }
131
+ const data = await qb.getMany();
132
+ const enough = data.length > take;
133
+ const hasNext = enough || type === 'prev';
134
+ const hasPrev = cursor && (enough || type === 'next');
135
+ if (enough) {
136
+ data.pop();
137
+ }
138
+ if (type === 'prev') {
139
+ data.reverse();
140
+ }
141
+ const generateCursor = (type, data) => {
142
+ const targetObject = type === 'prev' ? data[0] : data[data.length - 1];
143
+ const payload = Object.fromEntries(orderBys.map(({ key }) => {
144
+ const value = extractValueFromOrderByKey(targetObject, key, entityAliasName);
145
+ return [key, value];
146
+ }));
147
+ return encodeBase64Url(superjson_1.default.stringify({ type, payload }));
148
+ };
149
+ return {
150
+ data,
151
+ paginatedResult: {
152
+ nextCursor: hasNext ? generateCursor('next', data) : undefined,
153
+ previousCursor: hasPrev ? generateCursor('prev', data) : undefined,
154
+ },
155
+ };
156
+ }
157
+ exports.getPaginatedResult = getPaginatedResult;
158
+ //# sourceMappingURL=cursor-pagination-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-pagination-utils.js","sourceRoot":"","sources":["../../../src/utility/cursor-pagination-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nicot",
3
3
  "description": "Nest.js interacting with class-validator + OpenAPI + TypeORM for Nest.js Restful API development.",
4
- "version": "1.1.9",
4
+ "version": "1.1.11",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "scripts": {
@@ -12,15 +12,15 @@
12
12
  },
13
13
  "repository": {
14
14
  "type": "git",
15
- "url": "https://code.mycard.moe/3rdeye/nicot.git"
15
+ "url": "https://github.com/purerosefallen/nicot.git"
16
16
  },
17
17
  "author": "Nanahira <nanahira@momobako.com>",
18
18
  "license": "MIT",
19
19
  "keywords": [],
20
20
  "bugs": {
21
- "url": "https://code.mycard.moe/3rdeye/nicot/issues"
21
+ "url": "https://github.com/purerosefallen/nicot/issues"
22
22
  },
23
- "homepage": "https://code.mycard.moe/3rdeye/nicot",
23
+ "homepage": "https://github.com/purerosefallen/nicot",
24
24
  "jest": {
25
25
  "moduleFileExtensions": [
26
26
  "js",
@@ -61,15 +61,17 @@
61
61
  "typescript": "^4.7.4"
62
62
  },
63
63
  "peerDependencies": {
64
- "@nestjs/common": "^9.4.0 || ^10.0.0 || ^11.0.14",
65
- "@nestjs/swagger": "^7.1.8 || ^6.3.0 || ^11.1.1",
64
+ "@nestjs/common": "^11.0.0 || ^9.4.0 || ^10.0.0",
65
+ "@nestjs/config": "^4.0.0 || ^3.0.0",
66
+ "@nestjs/swagger": "^11.0.0 || ^7.1.8 || ^6.3.0",
66
67
  "class-transformer": "^0.5.1",
67
68
  "class-validator": "^0.14.0",
68
69
  "typeorm": "^0.3.16"
69
70
  },
70
71
  "dependencies": {
71
72
  "lodash": "^4.17.21",
72
- "nesties": "^1.1.1",
73
+ "nesties": "^1.1.2",
74
+ "superjson": "1.13.3",
73
75
  "typed-reflector": "^1.0.11"
74
76
  }
75
77
  }