ugly-app 0.1.163 → 0.1.164
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/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/server/PostgresFilter.d.ts.map +1 -1
- package/dist/server/PostgresFilter.js +22 -7
- package/dist/server/PostgresFilter.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/version.ts +1 -1
- package/src/server/PostgresFilter.ts +23 -7
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.164";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresFilter.d.ts","sourceRoot":"","sources":["../../src/server/PostgresFilter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"PostgresFilter.d.ts","sourceRoot":"","sources":["../../src/server/PostgresFilter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAiCD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAmGjF;AAED,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAOlE"}
|
|
@@ -7,6 +7,15 @@
|
|
|
7
7
|
*/
|
|
8
8
|
/** Fields stored as top-level columns rather than inside the JSONB data column. */
|
|
9
9
|
const TOP_LEVEL_COLUMNS = new Set(['_id', 'created', 'updated', 'version']);
|
|
10
|
+
/** Top-level columns that store timestamps (TIMESTAMPTZ). Numeric values must be converted to Date. */
|
|
11
|
+
const TIMESTAMP_COLUMNS = new Set(['created', 'updated']);
|
|
12
|
+
/** Convert a value to a Date if it's a numeric epoch for a timestamp column. */
|
|
13
|
+
function coerceTimestamp(field, value) {
|
|
14
|
+
if (TIMESTAMP_COLUMNS.has(field) && typeof value === 'number') {
|
|
15
|
+
return new Date(value);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
10
19
|
/** Build the JSONB accessor for a field path. Last segment uses ->> (text extraction). */
|
|
11
20
|
function jsonbPath(field, asText = true) {
|
|
12
21
|
if (TOP_LEVEL_COLUMNS.has(field))
|
|
@@ -50,7 +59,7 @@ export function translateFilter(filter) {
|
|
|
50
59
|
const acc = jsonbPath(field);
|
|
51
60
|
const cast = TOP_LEVEL_COLUMNS.has(field) ? acc : `(${acc})::numeric`;
|
|
52
61
|
clauses.push(`${cast} > $${paramIdx}`);
|
|
53
|
-
values.push(operand);
|
|
62
|
+
values.push(coerceTimestamp(field, operand));
|
|
54
63
|
paramIdx++;
|
|
55
64
|
break;
|
|
56
65
|
}
|
|
@@ -58,7 +67,7 @@ export function translateFilter(filter) {
|
|
|
58
67
|
const acc = jsonbPath(field);
|
|
59
68
|
const cast = TOP_LEVEL_COLUMNS.has(field) ? acc : `(${acc})::numeric`;
|
|
60
69
|
clauses.push(`${cast} >= $${paramIdx}`);
|
|
61
|
-
values.push(operand);
|
|
70
|
+
values.push(coerceTimestamp(field, operand));
|
|
62
71
|
paramIdx++;
|
|
63
72
|
break;
|
|
64
73
|
}
|
|
@@ -66,7 +75,7 @@ export function translateFilter(filter) {
|
|
|
66
75
|
const acc = jsonbPath(field);
|
|
67
76
|
const cast = TOP_LEVEL_COLUMNS.has(field) ? acc : `(${acc})::numeric`;
|
|
68
77
|
clauses.push(`${cast} < $${paramIdx}`);
|
|
69
|
-
values.push(operand);
|
|
78
|
+
values.push(coerceTimestamp(field, operand));
|
|
70
79
|
paramIdx++;
|
|
71
80
|
break;
|
|
72
81
|
}
|
|
@@ -74,13 +83,13 @@ export function translateFilter(filter) {
|
|
|
74
83
|
const acc = jsonbPath(field);
|
|
75
84
|
const cast = TOP_LEVEL_COLUMNS.has(field) ? acc : `(${acc})::numeric`;
|
|
76
85
|
clauses.push(`${cast} <= $${paramIdx}`);
|
|
77
|
-
values.push(operand);
|
|
86
|
+
values.push(coerceTimestamp(field, operand));
|
|
78
87
|
paramIdx++;
|
|
79
88
|
break;
|
|
80
89
|
}
|
|
81
90
|
case '$ne':
|
|
82
91
|
clauses.push(`${jsonbPath(field)} != $${paramIdx}`);
|
|
83
|
-
values.push(operand);
|
|
92
|
+
values.push(coerceTimestamp(field, operand));
|
|
84
93
|
paramIdx++;
|
|
85
94
|
break;
|
|
86
95
|
case '$exists':
|
|
@@ -100,8 +109,14 @@ export function translateFilter(filter) {
|
|
|
100
109
|
clauses.push(`${jsonbPath(field, false)} IS NULL OR ${jsonbPath(field)} = 'null'`);
|
|
101
110
|
}
|
|
102
111
|
else if (typeof value === 'number') {
|
|
103
|
-
|
|
104
|
-
|
|
112
|
+
if (TIMESTAMP_COLUMNS.has(field)) {
|
|
113
|
+
clauses.push(`${jsonbPath(field)} = $${paramIdx}`);
|
|
114
|
+
values.push(new Date(value));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
clauses.push(`(${jsonbPath(field)})::numeric = $${paramIdx}`);
|
|
118
|
+
values.push(value);
|
|
119
|
+
}
|
|
105
120
|
paramIdx++;
|
|
106
121
|
}
|
|
107
122
|
else if (typeof value === 'boolean') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresFilter.js","sourceRoot":"","sources":["../../src/server/PostgresFilter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PostgresFilter.js","sourceRoot":"","sources":["../../src/server/PostgresFilter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.164";
|
|
@@ -14,6 +14,17 @@ export interface TranslatedFilter {
|
|
|
14
14
|
/** Fields stored as top-level columns rather than inside the JSONB data column. */
|
|
15
15
|
const TOP_LEVEL_COLUMNS = new Set(['_id', 'created', 'updated', 'version']);
|
|
16
16
|
|
|
17
|
+
/** Top-level columns that store timestamps (TIMESTAMPTZ). Numeric values must be converted to Date. */
|
|
18
|
+
const TIMESTAMP_COLUMNS = new Set(['created', 'updated']);
|
|
19
|
+
|
|
20
|
+
/** Convert a value to a Date if it's a numeric epoch for a timestamp column. */
|
|
21
|
+
function coerceTimestamp(field: string, value: unknown): unknown {
|
|
22
|
+
if (TIMESTAMP_COLUMNS.has(field) && typeof value === 'number') {
|
|
23
|
+
return new Date(value);
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
|
|
17
28
|
/** Build the JSONB accessor for a field path. Last segment uses ->> (text extraction). */
|
|
18
29
|
function jsonbPath(field: string, asText = true): string {
|
|
19
30
|
if (TOP_LEVEL_COLUMNS.has(field)) return `"${field}"`;
|
|
@@ -58,7 +69,7 @@ export function translateFilter(filter: Record<string, unknown>): TranslatedFilt
|
|
|
58
69
|
const acc = jsonbPath(field);
|
|
59
70
|
const cast = TOP_LEVEL_COLUMNS.has(field) ? acc : `(${acc})::numeric`;
|
|
60
71
|
clauses.push(`${cast} > $${paramIdx}`);
|
|
61
|
-
values.push(operand);
|
|
72
|
+
values.push(coerceTimestamp(field, operand));
|
|
62
73
|
paramIdx++;
|
|
63
74
|
break;
|
|
64
75
|
}
|
|
@@ -66,7 +77,7 @@ export function translateFilter(filter: Record<string, unknown>): TranslatedFilt
|
|
|
66
77
|
const acc = jsonbPath(field);
|
|
67
78
|
const cast = TOP_LEVEL_COLUMNS.has(field) ? acc : `(${acc})::numeric`;
|
|
68
79
|
clauses.push(`${cast} >= $${paramIdx}`);
|
|
69
|
-
values.push(operand);
|
|
80
|
+
values.push(coerceTimestamp(field, operand));
|
|
70
81
|
paramIdx++;
|
|
71
82
|
break;
|
|
72
83
|
}
|
|
@@ -74,7 +85,7 @@ export function translateFilter(filter: Record<string, unknown>): TranslatedFilt
|
|
|
74
85
|
const acc = jsonbPath(field);
|
|
75
86
|
const cast = TOP_LEVEL_COLUMNS.has(field) ? acc : `(${acc})::numeric`;
|
|
76
87
|
clauses.push(`${cast} < $${paramIdx}`);
|
|
77
|
-
values.push(operand);
|
|
88
|
+
values.push(coerceTimestamp(field, operand));
|
|
78
89
|
paramIdx++;
|
|
79
90
|
break;
|
|
80
91
|
}
|
|
@@ -82,13 +93,13 @@ export function translateFilter(filter: Record<string, unknown>): TranslatedFilt
|
|
|
82
93
|
const acc = jsonbPath(field);
|
|
83
94
|
const cast = TOP_LEVEL_COLUMNS.has(field) ? acc : `(${acc})::numeric`;
|
|
84
95
|
clauses.push(`${cast} <= $${paramIdx}`);
|
|
85
|
-
values.push(operand);
|
|
96
|
+
values.push(coerceTimestamp(field, operand));
|
|
86
97
|
paramIdx++;
|
|
87
98
|
break;
|
|
88
99
|
}
|
|
89
100
|
case '$ne':
|
|
90
101
|
clauses.push(`${jsonbPath(field)} != $${paramIdx}`);
|
|
91
|
-
values.push(operand);
|
|
102
|
+
values.push(coerceTimestamp(field, operand));
|
|
92
103
|
paramIdx++;
|
|
93
104
|
break;
|
|
94
105
|
case '$exists':
|
|
@@ -105,8 +116,13 @@ export function translateFilter(filter: Record<string, unknown>): TranslatedFilt
|
|
|
105
116
|
} else if (value === null) {
|
|
106
117
|
clauses.push(`${jsonbPath(field, false)} IS NULL OR ${jsonbPath(field)} = 'null'`);
|
|
107
118
|
} else if (typeof value === 'number') {
|
|
108
|
-
|
|
109
|
-
|
|
119
|
+
if (TIMESTAMP_COLUMNS.has(field)) {
|
|
120
|
+
clauses.push(`${jsonbPath(field)} = $${paramIdx}`);
|
|
121
|
+
values.push(new Date(value));
|
|
122
|
+
} else {
|
|
123
|
+
clauses.push(`(${jsonbPath(field)})::numeric = $${paramIdx}`);
|
|
124
|
+
values.push(value);
|
|
125
|
+
}
|
|
110
126
|
paramIdx++;
|
|
111
127
|
} else if (typeof value === 'boolean') {
|
|
112
128
|
clauses.push(`(${jsonbPath(field)})::boolean = $${paramIdx}`);
|