grafeo-ogm 2.4.7 → 2.5.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/CHANGELOG.md +126 -0
- package/README.md +95 -35
- package/dist/cjs/cli/commands/db-push.d.ts.map +1 -1
- package/dist/cjs/cli/commands/db-push.js +74 -8
- package/dist/cjs/cli/commands/db-push.js.map +1 -1
- package/dist/cjs/cli/commands/db-seed.d.ts.map +1 -1
- package/dist/cjs/cli/commands/db-seed.js +10 -1
- package/dist/cjs/cli/commands/db-seed.js.map +1 -1
- package/dist/cjs/cli/introspect.d.ts +2 -2
- package/dist/cjs/cli/introspect.d.ts.map +1 -1
- package/dist/cjs/cli/introspect.js +44 -2
- package/dist/cjs/cli/introspect.js.map +1 -1
- package/dist/cjs/cli/push-planner.d.ts +57 -2
- package/dist/cjs/cli/push-planner.d.ts.map +1 -1
- package/dist/cjs/cli/push-planner.js +161 -3
- package/dist/cjs/cli/push-planner.js.map +1 -1
- package/dist/cjs/compilers/fulltext.compiler.d.ts.map +1 -1
- package/dist/cjs/compilers/fulltext.compiler.js +5 -1
- package/dist/cjs/compilers/fulltext.compiler.js.map +1 -1
- package/dist/cjs/compilers/mutation.compiler.d.ts +107 -1
- package/dist/cjs/compilers/mutation.compiler.d.ts.map +1 -1
- package/dist/cjs/compilers/mutation.compiler.js +695 -422
- package/dist/cjs/compilers/mutation.compiler.js.map +1 -1
- package/dist/cjs/compilers/select-normalizer.d.ts.map +1 -1
- package/dist/cjs/compilers/select-normalizer.js +12 -1
- package/dist/cjs/compilers/select-normalizer.js.map +1 -1
- package/dist/cjs/compilers/selection.compiler.d.ts +56 -0
- package/dist/cjs/compilers/selection.compiler.d.ts.map +1 -1
- package/dist/cjs/compilers/selection.compiler.js +271 -29
- package/dist/cjs/compilers/selection.compiler.js.map +1 -1
- package/dist/cjs/compilers/where.compiler.d.ts.map +1 -1
- package/dist/cjs/compilers/where.compiler.js +36 -15
- package/dist/cjs/compilers/where.compiler.js.map +1 -1
- package/dist/cjs/execution/executor.d.ts +34 -9
- package/dist/cjs/execution/executor.d.ts.map +1 -1
- package/dist/cjs/execution/executor.js +42 -5
- package/dist/cjs/execution/executor.js.map +1 -1
- package/dist/cjs/execution/result-mapper.d.ts.map +1 -1
- package/dist/cjs/execution/result-mapper.js +4 -2
- package/dist/cjs/execution/result-mapper.js.map +1 -1
- package/dist/cjs/generator/generate-types.d.ts.map +1 -1
- package/dist/cjs/generator/generate-types.js +76 -0
- package/dist/cjs/generator/generate-types.js.map +1 -1
- package/dist/cjs/generator/type-emitters/aggregation-emitter.d.ts.map +1 -1
- package/dist/cjs/generator/type-emitters/aggregation-emitter.js +19 -7
- package/dist/cjs/generator/type-emitters/aggregation-emitter.js.map +1 -1
- package/dist/cjs/generator/type-emitters/input-emitter.js +13 -4
- package/dist/cjs/generator/type-emitters/input-emitter.js.map +1 -1
- package/dist/cjs/generator/type-emitters/model-map-emitter.d.ts +1 -0
- package/dist/cjs/generator/type-emitters/model-map-emitter.d.ts.map +1 -1
- package/dist/cjs/generator/type-emitters/model-map-emitter.js +5 -20
- package/dist/cjs/generator/type-emitters/model-map-emitter.js.map +1 -1
- package/dist/cjs/generator/type-emitters/node-type-emitter.d.ts +3 -0
- package/dist/cjs/generator/type-emitters/node-type-emitter.d.ts.map +1 -1
- package/dist/cjs/generator/type-emitters/node-type-emitter.js +6 -11
- package/dist/cjs/generator/type-emitters/node-type-emitter.js.map +1 -1
- package/dist/cjs/generator/type-emitters/select-fields-emitter.js +21 -2
- package/dist/cjs/generator/type-emitters/select-fields-emitter.js.map +1 -1
- package/dist/cjs/generator/type-emitters/where-emitter.js +19 -3
- package/dist/cjs/generator/type-emitters/where-emitter.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/interface-model.d.ts +12 -0
- package/dist/cjs/interface-model.d.ts.map +1 -1
- package/dist/cjs/interface-model.js +27 -13
- package/dist/cjs/interface-model.js.map +1 -1
- package/dist/cjs/model.d.ts.map +1 -1
- package/dist/cjs/model.js +12 -0
- package/dist/cjs/model.js.map +1 -1
- package/dist/cjs/ogm.d.ts +22 -2
- package/dist/cjs/ogm.d.ts.map +1 -1
- package/dist/cjs/ogm.js +42 -5
- package/dist/cjs/ogm.js.map +1 -1
- package/dist/cjs/policy/nested-writes.d.ts.map +1 -1
- package/dist/cjs/policy/nested-writes.js +40 -20
- package/dist/cjs/policy/nested-writes.js.map +1 -1
- package/dist/cjs/schema/parser.d.ts.map +1 -1
- package/dist/cjs/schema/parser.js +94 -16
- package/dist/cjs/schema/parser.js.map +1 -1
- package/dist/cjs/schema/types.d.ts +1 -1
- package/dist/cjs/schema/types.d.ts.map +1 -1
- package/dist/cjs/subgraph/subgraph-operations.d.ts.map +1 -1
- package/dist/cjs/subgraph/subgraph-operations.js +71 -6
- package/dist/cjs/subgraph/subgraph-operations.js.map +1 -1
- package/dist/cjs/subgraph/types.d.ts +14 -0
- package/dist/cjs/subgraph/types.d.ts.map +1 -1
- package/dist/cjs/testing/cypher-assert.d.ts +19 -1
- package/dist/cjs/testing/cypher-assert.d.ts.map +1 -1
- package/dist/cjs/testing/cypher-assert.js +217 -13
- package/dist/cjs/testing/cypher-assert.js.map +1 -1
- package/dist/cjs/testing/neo4j-record-factory.d.ts +29 -2
- package/dist/cjs/testing/neo4j-record-factory.d.ts.map +1 -1
- package/dist/cjs/testing/neo4j-record-factory.js +93 -3
- package/dist/cjs/testing/neo4j-record-factory.js.map +1 -1
- package/dist/cjs/utils/cypher-field-projection.d.ts +31 -3
- package/dist/cjs/utils/cypher-field-projection.d.ts.map +1 -1
- package/dist/cjs/utils/cypher-field-projection.js +59 -7
- package/dist/cjs/utils/cypher-field-projection.js.map +1 -1
- package/dist/cjs/utils/write-coercion.d.ts +18 -0
- package/dist/cjs/utils/write-coercion.d.ts.map +1 -1
- package/dist/cjs/utils/write-coercion.js +74 -1
- package/dist/cjs/utils/write-coercion.js.map +1 -1
- package/dist/esm/cli/commands/db-push.d.ts.map +1 -1
- package/dist/esm/cli/commands/db-push.js +74 -8
- package/dist/esm/cli/commands/db-push.js.map +1 -1
- package/dist/esm/cli/commands/db-seed.d.ts.map +1 -1
- package/dist/esm/cli/commands/db-seed.js +10 -1
- package/dist/esm/cli/commands/db-seed.js.map +1 -1
- package/dist/esm/cli/introspect.d.ts +2 -2
- package/dist/esm/cli/introspect.d.ts.map +1 -1
- package/dist/esm/cli/introspect.js +44 -2
- package/dist/esm/cli/introspect.js.map +1 -1
- package/dist/esm/cli/push-planner.d.ts +57 -2
- package/dist/esm/cli/push-planner.d.ts.map +1 -1
- package/dist/esm/cli/push-planner.js +162 -4
- package/dist/esm/cli/push-planner.js.map +1 -1
- package/dist/esm/compilers/fulltext.compiler.d.ts.map +1 -1
- package/dist/esm/compilers/fulltext.compiler.js +5 -1
- package/dist/esm/compilers/fulltext.compiler.js.map +1 -1
- package/dist/esm/compilers/mutation.compiler.d.ts +107 -1
- package/dist/esm/compilers/mutation.compiler.d.ts.map +1 -1
- package/dist/esm/compilers/mutation.compiler.js +692 -422
- package/dist/esm/compilers/mutation.compiler.js.map +1 -1
- package/dist/esm/compilers/select-normalizer.d.ts.map +1 -1
- package/dist/esm/compilers/select-normalizer.js +12 -1
- package/dist/esm/compilers/select-normalizer.js.map +1 -1
- package/dist/esm/compilers/selection.compiler.d.ts +56 -0
- package/dist/esm/compilers/selection.compiler.d.ts.map +1 -1
- package/dist/esm/compilers/selection.compiler.js +273 -31
- package/dist/esm/compilers/selection.compiler.js.map +1 -1
- package/dist/esm/compilers/where.compiler.d.ts.map +1 -1
- package/dist/esm/compilers/where.compiler.js +37 -16
- package/dist/esm/compilers/where.compiler.js.map +1 -1
- package/dist/esm/execution/executor.d.ts +34 -9
- package/dist/esm/execution/executor.d.ts.map +1 -1
- package/dist/esm/execution/executor.js +41 -5
- package/dist/esm/execution/executor.js.map +1 -1
- package/dist/esm/execution/result-mapper.d.ts.map +1 -1
- package/dist/esm/execution/result-mapper.js +4 -2
- package/dist/esm/execution/result-mapper.js.map +1 -1
- package/dist/esm/generator/generate-types.d.ts.map +1 -1
- package/dist/esm/generator/generate-types.js +76 -0
- package/dist/esm/generator/generate-types.js.map +1 -1
- package/dist/esm/generator/type-emitters/aggregation-emitter.d.ts.map +1 -1
- package/dist/esm/generator/type-emitters/aggregation-emitter.js +19 -7
- package/dist/esm/generator/type-emitters/aggregation-emitter.js.map +1 -1
- package/dist/esm/generator/type-emitters/input-emitter.js +13 -4
- package/dist/esm/generator/type-emitters/input-emitter.js.map +1 -1
- package/dist/esm/generator/type-emitters/model-map-emitter.d.ts +1 -0
- package/dist/esm/generator/type-emitters/model-map-emitter.d.ts.map +1 -1
- package/dist/esm/generator/type-emitters/model-map-emitter.js +5 -20
- package/dist/esm/generator/type-emitters/model-map-emitter.js.map +1 -1
- package/dist/esm/generator/type-emitters/node-type-emitter.d.ts +3 -0
- package/dist/esm/generator/type-emitters/node-type-emitter.d.ts.map +1 -1
- package/dist/esm/generator/type-emitters/node-type-emitter.js +6 -11
- package/dist/esm/generator/type-emitters/node-type-emitter.js.map +1 -1
- package/dist/esm/generator/type-emitters/select-fields-emitter.js +21 -2
- package/dist/esm/generator/type-emitters/select-fields-emitter.js.map +1 -1
- package/dist/esm/generator/type-emitters/where-emitter.js +19 -3
- package/dist/esm/generator/type-emitters/where-emitter.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/interface-model.d.ts +12 -0
- package/dist/esm/interface-model.d.ts.map +1 -1
- package/dist/esm/interface-model.js +27 -13
- package/dist/esm/interface-model.js.map +1 -1
- package/dist/esm/model.d.ts.map +1 -1
- package/dist/esm/model.js +12 -0
- package/dist/esm/model.js.map +1 -1
- package/dist/esm/ogm.d.ts +22 -2
- package/dist/esm/ogm.d.ts.map +1 -1
- package/dist/esm/ogm.js +43 -6
- package/dist/esm/ogm.js.map +1 -1
- package/dist/esm/policy/nested-writes.d.ts.map +1 -1
- package/dist/esm/policy/nested-writes.js +40 -20
- package/dist/esm/policy/nested-writes.js.map +1 -1
- package/dist/esm/schema/parser.d.ts.map +1 -1
- package/dist/esm/schema/parser.js +94 -16
- package/dist/esm/schema/parser.js.map +1 -1
- package/dist/esm/schema/types.d.ts +1 -1
- package/dist/esm/schema/types.d.ts.map +1 -1
- package/dist/esm/subgraph/subgraph-operations.d.ts.map +1 -1
- package/dist/esm/subgraph/subgraph-operations.js +71 -6
- package/dist/esm/subgraph/subgraph-operations.js.map +1 -1
- package/dist/esm/subgraph/types.d.ts +14 -0
- package/dist/esm/subgraph/types.d.ts.map +1 -1
- package/dist/esm/testing/cypher-assert.d.ts +19 -1
- package/dist/esm/testing/cypher-assert.d.ts.map +1 -1
- package/dist/esm/testing/cypher-assert.js +217 -13
- package/dist/esm/testing/cypher-assert.js.map +1 -1
- package/dist/esm/testing/neo4j-record-factory.d.ts +29 -2
- package/dist/esm/testing/neo4j-record-factory.d.ts.map +1 -1
- package/dist/esm/testing/neo4j-record-factory.js +93 -3
- package/dist/esm/testing/neo4j-record-factory.js.map +1 -1
- package/dist/esm/utils/cypher-field-projection.d.ts +31 -3
- package/dist/esm/utils/cypher-field-projection.d.ts.map +1 -1
- package/dist/esm/utils/cypher-field-projection.js +58 -7
- package/dist/esm/utils/cypher-field-projection.js.map +1 -1
- package/dist/esm/utils/write-coercion.d.ts +18 -0
- package/dist/esm/utils/write-coercion.d.ts.map +1 -1
- package/dist/esm/utils/write-coercion.js +73 -1
- package/dist/esm/utils/write-coercion.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,6 +5,47 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Neo4jRecordFactory = void 0;
|
|
7
7
|
const neo4j_driver_1 = __importDefault(require("neo4j-driver"));
|
|
8
|
+
/**
|
|
9
|
+
* ISO-8601 date-time as Neo4j's `datetime()` accepts it: a date, an
|
|
10
|
+
* optional time with up to nine fractional digits, an optional offset
|
|
11
|
+
* (`Z`, `±HH`, `±HHMM`, `±HH:MM`) and an optional `[Area/City]` zone id.
|
|
12
|
+
*/
|
|
13
|
+
const ISO_DATE_TIME = /^([+-]?\d{4,})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2})(?::(\d{2})(?:[.,](\d{1,9}))?)?)?(Z|[+-]\d{2}(?::?\d{2})?)?(?:\[([^\]]+)\])?$/i;
|
|
14
|
+
function parseOffsetSeconds(offset) {
|
|
15
|
+
if (offset.toUpperCase() === 'Z')
|
|
16
|
+
return 0;
|
|
17
|
+
const sign = offset[0] === '-' ? -1 : 1;
|
|
18
|
+
const digits = offset.slice(1).replace(':', '');
|
|
19
|
+
const hours = Number(digits.slice(0, 2));
|
|
20
|
+
const minutes = digits.length > 2 ? Number(digits.slice(2, 4)) : 0;
|
|
21
|
+
return sign * (hours * 3600 + minutes * 60);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Offset of `timeZone` at the given wall-clock time, in seconds. Two passes
|
|
25
|
+
* so a wall time near a DST transition lands on the offset in force then.
|
|
26
|
+
*/
|
|
27
|
+
function zoneOffsetSeconds(timeZone, wallClockAsUtcMs) {
|
|
28
|
+
const fmt = new Intl.DateTimeFormat('en-US', {
|
|
29
|
+
timeZone,
|
|
30
|
+
hourCycle: 'h23',
|
|
31
|
+
year: 'numeric',
|
|
32
|
+
month: '2-digit',
|
|
33
|
+
day: '2-digit',
|
|
34
|
+
hour: '2-digit',
|
|
35
|
+
minute: '2-digit',
|
|
36
|
+
second: '2-digit',
|
|
37
|
+
});
|
|
38
|
+
const offsetAt = (instantMs) => {
|
|
39
|
+
const p = {};
|
|
40
|
+
for (const part of fmt.formatToParts(new Date(instantMs)))
|
|
41
|
+
if (part.type !== 'literal')
|
|
42
|
+
p[part.type] = Number(part.value);
|
|
43
|
+
const asUtc = Date.UTC(p.year, p.month - 1, p.day, p.hour, p.minute, p.second);
|
|
44
|
+
return Math.round((asUtc - Math.floor(instantMs / 1000) * 1000) / 1000);
|
|
45
|
+
};
|
|
46
|
+
const first = offsetAt(wallClockAsUtcMs);
|
|
47
|
+
return offsetAt(wallClockAsUtcMs - first * 1000);
|
|
48
|
+
}
|
|
8
49
|
/**
|
|
9
50
|
* Factory for creating mock Neo4j Record objects for testing.
|
|
10
51
|
*/
|
|
@@ -26,17 +67,66 @@ class Neo4jRecordFactory {
|
|
|
26
67
|
return neo4j_driver_1.default.int(value);
|
|
27
68
|
}
|
|
28
69
|
/**
|
|
29
|
-
* Create a Neo4j DateTime value from an ISO string
|
|
70
|
+
* Create a Neo4j DateTime value from an ISO string, as the driver would
|
|
71
|
+
* return `datetime(isoString)`: the wall-clock fields and the offset are
|
|
72
|
+
* kept as written (`10:00+02:00` stays `10:00+02:00`), all nine fractional
|
|
73
|
+
* digits are kept, and a `[Area/City]` zone id is carried over.
|
|
74
|
+
*
|
|
75
|
+
* Field values are plain numbers (what the driver returns with
|
|
76
|
+
* `disableLosslessIntegers`), so `toString()` matches the driver's.
|
|
77
|
+
*
|
|
78
|
+
* A string with neither an offset nor a zone id is read as UTC, as Neo4j
|
|
79
|
+
* reads it with its default zone.
|
|
80
|
+
*
|
|
81
|
+
* Before v2.4.8 the value was converted to UTC with the offset dropped
|
|
82
|
+
* and the fraction cut to milliseconds; before v2.5.0 an offset-less
|
|
83
|
+
* string was read in the machine's local zone.
|
|
30
84
|
*/
|
|
31
85
|
static dateTime(isoString) {
|
|
86
|
+
const m = ISO_DATE_TIME.exec(isoString.trim());
|
|
87
|
+
// A non-ISO string `Date` understands (e.g. RFC 2822) keeps the
|
|
88
|
+
// pre-v2.5.0 parse.
|
|
89
|
+
if (!m)
|
|
90
|
+
return Neo4jRecordFactory.legacyDateTime(isoString);
|
|
91
|
+
const [, y, mo, d, h, mi, s, frac, offset, zoneId] = m;
|
|
92
|
+
const year = Number(y);
|
|
93
|
+
const month = Number(mo);
|
|
94
|
+
const day = Number(d);
|
|
95
|
+
const hour = Number(h ?? 0);
|
|
96
|
+
const minute = Number(mi ?? 0);
|
|
97
|
+
const second = Number(s ?? 0);
|
|
98
|
+
const nanosecond = frac ? Number(frac.padEnd(9, '0')) : 0;
|
|
99
|
+
const offsetSeconds = offset !== undefined
|
|
100
|
+
? parseOffsetSeconds(offset)
|
|
101
|
+
: zoneId !== undefined
|
|
102
|
+
? zoneOffsetSeconds(zoneId, Date.UTC(year, month - 1, day, hour, minute, second))
|
|
103
|
+
: 0;
|
|
104
|
+
return new neo4j_driver_1.default.types.DateTime(year, month, day, hour, minute, second, nanosecond, offsetSeconds, zoneId);
|
|
105
|
+
}
|
|
106
|
+
/** The pre-v2.5.0 parse: through `Date`, in UTC, millisecond precision. */
|
|
107
|
+
static legacyDateTime(isoString) {
|
|
32
108
|
const d = new Date(isoString);
|
|
109
|
+
// An Invalid Date used to reach the driver as NaN fields and fail there
|
|
110
|
+
// with an unrelated message.
|
|
111
|
+
if (Number.isNaN(d.getTime()))
|
|
112
|
+
throw new TypeError(`Neo4jRecordFactory.dateTime: '${isoString}' is not an ISO-8601 date-time`);
|
|
33
113
|
return new neo4j_driver_1.default.types.DateTime(d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds() * 1000000, 0);
|
|
34
114
|
}
|
|
35
115
|
/**
|
|
36
116
|
* Create a mock Neo4j Node.
|
|
117
|
+
*
|
|
118
|
+
* `properties` are stored as given. The driver returns an Int property as
|
|
119
|
+
* an Integer, so pass `Neo4jRecordFactory.integer(n)` where a test needs
|
|
120
|
+
* that; a JS number is never converted, because it may stand for a Float.
|
|
121
|
+
*
|
|
122
|
+
* `options.identity` and `options.elementId` (v2.5.0) give mock nodes
|
|
123
|
+
* distinct ids; without them every node has identity 0 and elementId "0".
|
|
124
|
+
* A given identity alone yields elementId `String(identity)`, as the
|
|
125
|
+
* driver does for a 4.x server.
|
|
37
126
|
*/
|
|
38
|
-
static node(labels, properties) {
|
|
39
|
-
|
|
127
|
+
static node(labels, properties, options = {}) {
|
|
128
|
+
const identity = neo4j_driver_1.default.int(options.identity ?? 0);
|
|
129
|
+
return new neo4j_driver_1.default.types.Node(identity, labels, properties, options.elementId ?? identity.toString());
|
|
40
130
|
}
|
|
41
131
|
}
|
|
42
132
|
exports.Neo4jRecordFactory = Neo4jRecordFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neo4j-record-factory.js","sourceRoot":"","sources":["../../../src/testing/neo4j-record-factory.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqE;AAErE;;GAEG;AACH,MAAa,kBAAkB;IAC7B;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,IAA6B;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,IAAI,sBAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAA2B,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,sBAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"neo4j-record-factory.js","sourceRoot":"","sources":["../../../src/testing/neo4j-record-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,13 @@ import type { PropertyDefinition } from '../schema/types';
|
|
|
14
14
|
* Works on every Neo4j 5.x (unlike `OPTIONAL CALL`, 5.24+) and still lets
|
|
15
15
|
* the statement return extra columns (unlike `COLLECT { }`).
|
|
16
16
|
*/
|
|
17
|
-
export declare function buildCypherFieldCall(statement: string, nodeVar: string, columnName: string
|
|
17
|
+
export declare function buildCypherFieldCall(statement: string, nodeVar: string, columnName: string,
|
|
18
|
+
/**
|
|
19
|
+
* v2.4.8 — run the statement only for nodes carrying this label (an
|
|
20
|
+
* implementer's field selected through an inline fragment on an
|
|
21
|
+
* abstract type). Other rows still keep their row, with `null`.
|
|
22
|
+
*/
|
|
23
|
+
guardLabel?: string): string;
|
|
18
24
|
/**
|
|
19
25
|
* Builds an inline `head(COLLECT { ... })` subquery expression for a
|
|
20
26
|
* `@cypher` scalar field. Used inside contexts where a CALL prelude cannot
|
|
@@ -30,7 +36,24 @@ export declare function buildCypherFieldCall(statement: string, nodeVar: string,
|
|
|
30
36
|
* `head(...)` extracts the first (and typically only) returned row; this
|
|
31
37
|
* matches the top-level CALL+WITH path which projects a single value.
|
|
32
38
|
*/
|
|
33
|
-
export declare function buildInlineCypherFieldExpr(statement: string, nodeVar: string
|
|
39
|
+
export declare function buildInlineCypherFieldExpr(statement: string, nodeVar: string,
|
|
40
|
+
/**
|
|
41
|
+
* `Type.field`, for the error raised when the statement aggregates.
|
|
42
|
+
* v2.4.8 — optional so ad-hoc callers keep compiling.
|
|
43
|
+
*/
|
|
44
|
+
fieldLabel?: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Refuse an aggregating `@cypher` statement where it would be projected
|
|
47
|
+
* inline (v2.4.8). Neo4j 5 rejects ANY aggregating subquery expression
|
|
48
|
+
* nested inside a projection that also references outer variables —
|
|
49
|
+
* "Aggregation column contains implicit grouping expressions" — and fails
|
|
50
|
+
* the whole query. Verified on 5.26 for `head(COLLECT { ... })`, an inner
|
|
51
|
+
* `CALL { }`, `CALL (this) { }`, `WITH count(x) AS c` and a COLLECT in
|
|
52
|
+
* place of the pattern comprehension: none parse. Pre-2.4.8 the query
|
|
53
|
+
* reached the server and failed with that opaque error; the top-level
|
|
54
|
+
* CALL-prelude projection is unaffected and keeps working.
|
|
55
|
+
*/
|
|
56
|
+
export declare function assertInlineableCypherField(fieldLabel: string, statement: string): void;
|
|
34
57
|
/**
|
|
35
58
|
* Resolver for `@cypher` scalar fields referenced inside a single Cypher
|
|
36
59
|
* "scope" — that is, the contiguous sequence of `WITH`-bound vars at one
|
|
@@ -77,7 +100,12 @@ export declare class CypherFieldScope {
|
|
|
77
100
|
* The same `fieldName` registered twice returns the same alias and DOES
|
|
78
101
|
* NOT emit a duplicate prelude.
|
|
79
102
|
*/
|
|
80
|
-
register(fieldName: string, propDef: PropertyDefinition
|
|
103
|
+
register(fieldName: string, propDef: PropertyDefinition,
|
|
104
|
+
/**
|
|
105
|
+
* v2.4.8 — project only for nodes with this label (see
|
|
106
|
+
* `buildCypherFieldCall`); keyed and aliased separately per label.
|
|
107
|
+
*/
|
|
108
|
+
guardLabel?: string): string;
|
|
81
109
|
/** Whether any prelude has been registered. */
|
|
82
110
|
hasAny(): boolean;
|
|
83
111
|
/** Emit all the prelude lines (`CALL { ... }` + `WITH ...` pairs). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cypher-field-projection.d.ts","sourceRoot":"","sources":["../../../src/utils/cypher-field-projection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cypher-field-projection.d.ts","sourceRoot":"","sources":["../../../src/utils/cypher-field-projection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM;AAClB;;;;GAIG;AACH,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAgBR;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM;AACf;;;GAGG;AACH,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAIR;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,IAAI,CAQN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAgB;IAWzB,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc;IAfjC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;;IAG7C,sEAAsE;IACrD,OAAO,EAAE,MAAM;IAChC,2DAA2D;IAC1C,YAAY,GAAE,aAAa,CAAC,MAAM,CAAM;IACzD,4DAA4D;IAC3C,cAAc,GAAE,MAAe;IAKlD;;;;;;OAMG;IACH,QAAQ,CACN,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kBAAkB;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM;IA6CT,+CAA+C;IAC/C,MAAM,IAAI,OAAO;IAIjB,sEAAsE;IACtE,IAAI,IAAI,MAAM,EAAE;IAIhB,wDAAwD;IACxD,OAAO,IAAI,MAAM,EAAE;IAInB,0CAA0C;IAC1C,UAAU,IAAI,MAAM;CAGrB"}
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CypherFieldScope = void 0;
|
|
4
4
|
exports.buildCypherFieldCall = buildCypherFieldCall;
|
|
5
5
|
exports.buildInlineCypherFieldExpr = buildInlineCypherFieldExpr;
|
|
6
|
+
exports.assertInlineableCypherField = assertInlineableCypherField;
|
|
7
|
+
const errors_1 = require("../errors");
|
|
6
8
|
const validation_1 = require("./validation");
|
|
7
9
|
/**
|
|
8
10
|
* Builds the `CALL { ... }` subquery that projects a `@cypher` field (used
|
|
@@ -19,11 +21,20 @@ const validation_1 = require("./validation");
|
|
|
19
21
|
* Works on every Neo4j 5.x (unlike `OPTIONAL CALL`, 5.24+) and still lets
|
|
20
22
|
* the statement return extra columns (unlike `COLLECT { }`).
|
|
21
23
|
*/
|
|
22
|
-
function buildCypherFieldCall(statement, nodeVar, columnName
|
|
24
|
+
function buildCypherFieldCall(statement, nodeVar, columnName,
|
|
25
|
+
/**
|
|
26
|
+
* v2.4.8 — run the statement only for nodes carrying this label (an
|
|
27
|
+
* implementer's field selected through an inline fragment on an
|
|
28
|
+
* abstract type). Other rows still keep their row, with `null`.
|
|
29
|
+
*/
|
|
30
|
+
guardLabel) {
|
|
23
31
|
const col = (0, validation_1.escapeIdentifier)(columnName);
|
|
24
32
|
return [
|
|
25
33
|
`CALL {`,
|
|
26
34
|
` WITH ${nodeVar}`,
|
|
35
|
+
...(guardLabel !== undefined
|
|
36
|
+
? [` WITH ${nodeVar} WHERE ${nodeVar}:${(0, validation_1.escapeIdentifier)(guardLabel)}`]
|
|
37
|
+
: []),
|
|
27
38
|
` CALL {`,
|
|
28
39
|
` WITH ${nodeVar}`,
|
|
29
40
|
` WITH ${nodeVar} AS this`,
|
|
@@ -48,9 +59,40 @@ function buildCypherFieldCall(statement, nodeVar, columnName) {
|
|
|
48
59
|
* `head(...)` extracts the first (and typically only) returned row; this
|
|
49
60
|
* matches the top-level CALL+WITH path which projects a single value.
|
|
50
61
|
*/
|
|
51
|
-
function buildInlineCypherFieldExpr(statement, nodeVar
|
|
62
|
+
function buildInlineCypherFieldExpr(statement, nodeVar,
|
|
63
|
+
/**
|
|
64
|
+
* `Type.field`, for the error raised when the statement aggregates.
|
|
65
|
+
* v2.4.8 — optional so ad-hoc callers keep compiling.
|
|
66
|
+
*/
|
|
67
|
+
fieldLabel) {
|
|
68
|
+
if (fieldLabel !== undefined)
|
|
69
|
+
assertInlineableCypherField(fieldLabel, statement);
|
|
52
70
|
return `head(COLLECT { WITH ${nodeVar} AS this\n ${statement}\n})`;
|
|
53
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Cypher's aggregating functions, as a call (`count(`, not the `COUNT {`
|
|
74
|
+
* subquery expression, which does not aggregate the enclosing query).
|
|
75
|
+
*/
|
|
76
|
+
const AGGREGATING_CALL = /\b(?:avg|collect|count|max|min|percentileCont|percentileDisc|stDev|stDevP|sum)\s*\(/i;
|
|
77
|
+
/**
|
|
78
|
+
* Refuse an aggregating `@cypher` statement where it would be projected
|
|
79
|
+
* inline (v2.4.8). Neo4j 5 rejects ANY aggregating subquery expression
|
|
80
|
+
* nested inside a projection that also references outer variables —
|
|
81
|
+
* "Aggregation column contains implicit grouping expressions" — and fails
|
|
82
|
+
* the whole query. Verified on 5.26 for `head(COLLECT { ... })`, an inner
|
|
83
|
+
* `CALL { }`, `CALL (this) { }`, `WITH count(x) AS c` and a COLLECT in
|
|
84
|
+
* place of the pattern comprehension: none parse. Pre-2.4.8 the query
|
|
85
|
+
* reached the server and failed with that opaque error; the top-level
|
|
86
|
+
* CALL-prelude projection is unaffected and keeps working.
|
|
87
|
+
*/
|
|
88
|
+
function assertInlineableCypherField(fieldLabel, statement) {
|
|
89
|
+
if (!AGGREGATING_CALL.test(statement))
|
|
90
|
+
return;
|
|
91
|
+
throw new errors_1.OGMError(`@cypher field "${fieldLabel}" aggregates in its statement, so it can only be selected at the top level of a query. ` +
|
|
92
|
+
`Neo4j 5 rejects aggregating subqueries nested inside a projection ("Aggregation column contains implicit grouping expressions"), ` +
|
|
93
|
+
`which is how a @cypher field selected through a relationship is projected. Select it on its own model instead, ` +
|
|
94
|
+
`or rewrite the statement without an aggregating function.`);
|
|
95
|
+
}
|
|
54
96
|
/**
|
|
55
97
|
* Resolver for `@cypher` scalar fields referenced inside a single Cypher
|
|
56
98
|
* "scope" — that is, the contiguous sequence of `WITH`-bound vars at one
|
|
@@ -96,23 +138,33 @@ class CypherFieldScope {
|
|
|
96
138
|
* The same `fieldName` registered twice returns the same alias and DOES
|
|
97
139
|
* NOT emit a duplicate prelude.
|
|
98
140
|
*/
|
|
99
|
-
register(fieldName, propDef
|
|
141
|
+
register(fieldName, propDef,
|
|
142
|
+
/**
|
|
143
|
+
* v2.4.8 — project only for nodes with this label (see
|
|
144
|
+
* `buildCypherFieldCall`); keyed and aliased separately per label.
|
|
145
|
+
*/
|
|
146
|
+
guardLabel) {
|
|
100
147
|
(0, validation_1.assertSafeIdentifier)(fieldName, '@cypher field');
|
|
101
|
-
|
|
148
|
+
if (guardLabel !== undefined)
|
|
149
|
+
(0, validation_1.assertSafeIdentifier)(guardLabel, '@cypher guard label');
|
|
150
|
+
const key = guardLabel === undefined ? fieldName : `${guardLabel}:${fieldName}`;
|
|
151
|
+
const cached = this.aliases.get(key);
|
|
102
152
|
if (cached)
|
|
103
153
|
return cached;
|
|
104
154
|
if (!propDef.cypherStatement)
|
|
105
155
|
throw new Error(`Internal: register() called for "${fieldName}" without cypherStatement.`);
|
|
106
156
|
const columnName = propDef.cypherColumnName ?? fieldName;
|
|
107
157
|
(0, validation_1.assertSafeIdentifier)(columnName, '@cypher columnName');
|
|
108
|
-
const alias =
|
|
158
|
+
const alias = guardLabel === undefined
|
|
159
|
+
? `${this.aliasNamespace}_${this.nodeVar}_${fieldName}`
|
|
160
|
+
: `${this.aliasNamespace}_${this.nodeVar}_${guardLabel}_${fieldName}`;
|
|
109
161
|
(0, validation_1.assertSafeIdentifier)(alias, '@cypher alias');
|
|
110
162
|
const carry = [...this.preserveVars, ...this.carriedAliases];
|
|
111
163
|
const carryStr = carry.length ? `, ${carry.join(', ')}` : '';
|
|
112
|
-
this.callLines.push(buildCypherFieldCall(propDef.cypherStatement, this.nodeVar, columnName));
|
|
164
|
+
this.callLines.push(buildCypherFieldCall(propDef.cypherStatement, this.nodeVar, columnName, guardLabel));
|
|
113
165
|
this.callLines.push(`WITH ${this.nodeVar}${carryStr}, ${(0, validation_1.escapeIdentifier)(columnName)} AS ${alias}`);
|
|
114
166
|
this.carriedAliases.push(alias);
|
|
115
|
-
this.aliases.set(
|
|
167
|
+
this.aliases.set(key, alias);
|
|
116
168
|
return alias;
|
|
117
169
|
}
|
|
118
170
|
/** Whether any prelude has been registered. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cypher-field-projection.js","sourceRoot":"","sources":["../../../src/utils/cypher-field-projection.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"cypher-field-projection.js","sourceRoot":"","sources":["../../../src/utils/cypher-field-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,6 +50,24 @@ export declare function wrapListItemExpr(expr: string, values: unknown[], propDe
|
|
|
50
50
|
* wrap their list param element-wise.
|
|
51
51
|
*/
|
|
52
52
|
export declare function wrapWhereParam(paramRef: string, value: unknown, propDef: PropertyDefinition | undefined, suffix: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Coerce a WHERE value to the representation the stored property has
|
|
55
|
+
* (v2.4.8), for comparison-shaped operators (`_IN` / `_NOT_IN`
|
|
56
|
+
* element-wise):
|
|
57
|
+
*
|
|
58
|
+
* - `Int` / `BigInt`: integer strings (the generated BigInt input type)
|
|
59
|
+
* and `bigint`s become a Neo4j Integer via the write coercion. A String
|
|
60
|
+
* or a raw bigint never equals the stored Long, so pre-2.4.8 these
|
|
61
|
+
* filters silently matched nothing. JS numbers stay as they are: Neo4j
|
|
62
|
+
* compares a Float and a Long numerically, and unit-level params keep
|
|
63
|
+
* their shape.
|
|
64
|
+
* - `DateTime`: a JS `Date` becomes its ISO string, which `wrapWhereParam`
|
|
65
|
+
* then wraps in `datetime()`. Pre-2.4.8 a `Date` was bound raw and never
|
|
66
|
+
* matched.
|
|
67
|
+
*
|
|
68
|
+
* Every other value passes through unchanged.
|
|
69
|
+
*/
|
|
70
|
+
export declare function coerceWhereValue(value: unknown, propDef: PropertyDefinition | undefined, suffix: string): unknown;
|
|
53
71
|
/**
|
|
54
72
|
* Materialize a parsed `@default` into a driver-ready bound value. The
|
|
55
73
|
* parser stores every default as a string (`'true'`, `'5'`, `'WELCOME'`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-coercion.d.ts","sourceRoot":"","sources":["../../../src/utils/write-coercion.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAkI1D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,kBAAkB,GAAG,SAAS,GACtC,OAAO,CAWT;AAqCD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,kBAAkB,GAAG,SAAS,GACtC,MAAM,CAWR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,EAAE,kBAAkB,GAAG,SAAS,GACtC,MAAM,CAwBR;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,kBAAkB,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,GACb,MAAM,
|
|
1
|
+
{"version":3,"file":"write-coercion.d.ts","sourceRoot":"","sources":["../../../src/utils/write-coercion.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAkI1D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,kBAAkB,GAAG,SAAS,GACtC,OAAO,CAWT;AAqCD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,kBAAkB,GAAG,SAAS,GACtC,MAAM,CAWR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,EAAE,kBAAkB,GAAG,SAAS,GACtC,MAAM,CAwBR;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,kBAAkB,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,GACb,MAAM,CA8BR;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,kBAAkB,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,GACb,OAAO,CAWT;AAqBD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAQ7E"}
|
|
@@ -4,6 +4,7 @@ exports.coerceWriteValue = coerceWriteValue;
|
|
|
4
4
|
exports.wrapWriteExpr = wrapWriteExpr;
|
|
5
5
|
exports.wrapListItemExpr = wrapListItemExpr;
|
|
6
6
|
exports.wrapWhereParam = wrapWhereParam;
|
|
7
|
+
exports.coerceWhereValue = coerceWhereValue;
|
|
7
8
|
exports.resolveDefaultWriteValue = resolveDefaultWriteValue;
|
|
8
9
|
const neo4j_driver_1 = require("neo4j-driver");
|
|
9
10
|
const errors_1 = require("../errors");
|
|
@@ -245,6 +246,28 @@ function wrapWhereParam(paramRef, value, propDef, suffix) {
|
|
|
245
246
|
return paramRef;
|
|
246
247
|
if (!COMPARABLE_SUFFIXES.has(suffix))
|
|
247
248
|
return paramRef;
|
|
249
|
+
// v2.4.8 — a LIST field is compared as a whole list (equality / `_NOT`)
|
|
250
|
+
// or against a list of lists (`_IN` / `_NOT_IN`). Its stored elements
|
|
251
|
+
// are native temporals, so each element of the param must be wrapped;
|
|
252
|
+
// pre-2.4.8 only `_IN` on a scalar field was, so `seenAt: ['2024-…']`
|
|
253
|
+
// compared datetimes with strings and never matched.
|
|
254
|
+
if (propDef.isArray) {
|
|
255
|
+
if (!Array.isArray(value))
|
|
256
|
+
return paramRef;
|
|
257
|
+
if (suffix === '_IN' || suffix === '_NOT_IN') {
|
|
258
|
+
const flattened = value
|
|
259
|
+
.filter((v) => Array.isArray(v))
|
|
260
|
+
.flat();
|
|
261
|
+
if (!decideElementsWrap(flattened, ctor, propDef))
|
|
262
|
+
return paramRef;
|
|
263
|
+
return `[wc_l IN ${paramRef} | [wc_t IN wc_l | ${ctor.fn}(wc_t)]]`;
|
|
264
|
+
}
|
|
265
|
+
if (suffix !== '' && suffix !== '_NOT')
|
|
266
|
+
return paramRef;
|
|
267
|
+
if (!decideElementsWrap(value, ctor, propDef))
|
|
268
|
+
return paramRef;
|
|
269
|
+
return `[wc_t IN ${paramRef} | ${ctor.fn}(wc_t)]`;
|
|
270
|
+
}
|
|
248
271
|
if (suffix === '_IN' || suffix === '_NOT_IN') {
|
|
249
272
|
if (!Array.isArray(value))
|
|
250
273
|
return paramRef;
|
|
@@ -256,6 +279,49 @@ function wrapWhereParam(paramRef, value, propDef, suffix) {
|
|
|
256
279
|
return paramRef;
|
|
257
280
|
return `${ctor.fn}(${paramRef})`;
|
|
258
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* Coerce a WHERE value to the representation the stored property has
|
|
284
|
+
* (v2.4.8), for comparison-shaped operators (`_IN` / `_NOT_IN`
|
|
285
|
+
* element-wise):
|
|
286
|
+
*
|
|
287
|
+
* - `Int` / `BigInt`: integer strings (the generated BigInt input type)
|
|
288
|
+
* and `bigint`s become a Neo4j Integer via the write coercion. A String
|
|
289
|
+
* or a raw bigint never equals the stored Long, so pre-2.4.8 these
|
|
290
|
+
* filters silently matched nothing. JS numbers stay as they are: Neo4j
|
|
291
|
+
* compares a Float and a Long numerically, and unit-level params keep
|
|
292
|
+
* their shape.
|
|
293
|
+
* - `DateTime`: a JS `Date` becomes its ISO string, which `wrapWhereParam`
|
|
294
|
+
* then wraps in `datetime()`. Pre-2.4.8 a `Date` was bound raw and never
|
|
295
|
+
* matched.
|
|
296
|
+
*
|
|
297
|
+
* Every other value passes through unchanged.
|
|
298
|
+
*/
|
|
299
|
+
function coerceWhereValue(value, propDef, suffix) {
|
|
300
|
+
if (propDef === undefined || value === null || value === undefined)
|
|
301
|
+
return value;
|
|
302
|
+
if (!COMPARABLE_SUFFIXES.has(suffix))
|
|
303
|
+
return value;
|
|
304
|
+
const elementWise = suffix === '_IN' || suffix === '_NOT_IN' || propDef.isArray;
|
|
305
|
+
if (elementWise)
|
|
306
|
+
return Array.isArray(value)
|
|
307
|
+
? value.map((element) => coerceWhereElement(element, propDef))
|
|
308
|
+
: value;
|
|
309
|
+
return coerceWhereElement(value, propDef);
|
|
310
|
+
}
|
|
311
|
+
function coerceWhereElement(value, propDef) {
|
|
312
|
+
if (value === null || value === undefined)
|
|
313
|
+
return value;
|
|
314
|
+
if (INTEGER_SCALAR_TYPES.has(propDef.type))
|
|
315
|
+
return typeof value === 'string' || typeof value === 'bigint'
|
|
316
|
+
? coerceIntegerElement(value, propDef)
|
|
317
|
+
: value;
|
|
318
|
+
if (propDef.type === 'DateTime' && value instanceof Date) {
|
|
319
|
+
if (Number.isNaN(value.getTime()))
|
|
320
|
+
throw new errors_1.OGMError(`Invalid Date given for DateTime field "${propDef.name}" in a where filter.`);
|
|
321
|
+
return value.toISOString();
|
|
322
|
+
}
|
|
323
|
+
return value;
|
|
324
|
+
}
|
|
259
325
|
/**
|
|
260
326
|
* Materialize a parsed `@default` into a driver-ready bound value. The
|
|
261
327
|
* parser stores every default as a string (`'true'`, `'5'`, `'WELCOME'`);
|
|
@@ -268,6 +334,13 @@ function resolveDefaultWriteValue(propDef) {
|
|
|
268
334
|
const raw = propDef.defaultValue;
|
|
269
335
|
if (raw === undefined)
|
|
270
336
|
return undefined;
|
|
337
|
+
// List defaults (parsed element-wise since after v2.4.7) convert each
|
|
338
|
+
// element the same way.
|
|
339
|
+
if (Array.isArray(raw))
|
|
340
|
+
return raw.map((el) => convertDefaultScalar(el, propDef));
|
|
341
|
+
return convertDefaultScalar(raw, propDef);
|
|
342
|
+
}
|
|
343
|
+
function convertDefaultScalar(raw, propDef) {
|
|
271
344
|
switch (propDef.type) {
|
|
272
345
|
case 'Boolean':
|
|
273
346
|
return raw === 'true';
|
|
@@ -275,7 +348,7 @@ function resolveDefaultWriteValue(propDef) {
|
|
|
275
348
|
return Number(raw);
|
|
276
349
|
case 'Int':
|
|
277
350
|
case 'BigInt':
|
|
278
|
-
return
|
|
351
|
+
return coerceIntegerElement(raw, propDef);
|
|
279
352
|
default:
|
|
280
353
|
return raw;
|
|
281
354
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-coercion.js","sourceRoot":"","sources":["../../../src/utils/write-coercion.ts"],"names":[],"mappings":";;AAwJA,4CAcC;AAiDD,sCAeC;AASD,4CA4BC;AAUD,
|
|
1
|
+
{"version":3,"file":"write-coercion.js","sourceRoot":"","sources":["../../../src/utils/write-coercion.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-push.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/db-push.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"db-push.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/db-push.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAyNtC,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAkF1E"}
|