@prisma/orm-family-sql 8.0.0-rc.11-dev.2 → 8.0.0-rc.11-dev.3
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/orm-client.mjs +39 -20
- package/dist/orm-client.mjs.map +1 -1
- package/package.json +17 -17
package/dist/orm-client.mjs
CHANGED
|
@@ -481,6 +481,13 @@ function stripHiddenMappedFields(contract, namespaceId, modelName, mapped, hidde
|
|
|
481
481
|
function mapStorageRowToModelFields(contract, namespaceId, modelName, row) {
|
|
482
482
|
const columnToField = getColumnToFieldMap(contract, namespaceId, modelName);
|
|
483
483
|
if (Object.keys(columnToField).length === 0) return { ...row };
|
|
484
|
+
return mapColumnNames(row, columnToField);
|
|
485
|
+
}
|
|
486
|
+
function createStorageRowMapper(contract, namespaceId, modelName) {
|
|
487
|
+
const columnToField = getColumnToFieldMap(contract, namespaceId, modelName);
|
|
488
|
+
return Object.keys(columnToField).length === 0 ? (row) => ({ ...row }) : (row) => mapColumnNames(row, columnToField);
|
|
489
|
+
}
|
|
490
|
+
function mapColumnNames(row, columnToField) {
|
|
484
491
|
const mapped = {};
|
|
485
492
|
for (const [columnName, value] of Object.entries(row)) mapped[columnToField[columnName] ?? columnName] = value;
|
|
486
493
|
return mapped;
|
|
@@ -1972,7 +1979,8 @@ function dispatchWithIncludes(options) {
|
|
|
1972
1979
|
mapped: polyInfo ? mapPolymorphicRow(contract, namespaceId, modelName, polyInfo, row, state.variantName) : mapStorageRowToModelFields(contract, namespaceId, modelName, row)
|
|
1973
1980
|
};
|
|
1974
1981
|
});
|
|
1975
|
-
|
|
1982
|
+
const bindings = /* @__PURE__ */ new WeakMap();
|
|
1983
|
+
for (const parent of parentRows) for (const include of state.includes) parent.mapped[include.relationName] = await decodeIncludePayload(contract, context, include, parent.raw[include.relationName], bindings);
|
|
1976
1984
|
for (const row of parentRows) yield blindCast(row.mapped);
|
|
1977
1985
|
};
|
|
1978
1986
|
return new AsyncIterableResult(generator());
|
|
@@ -2055,42 +2063,53 @@ function buildIdentityInFilter(contract, namespaceId, tableName, identityColumns
|
|
|
2055
2063
|
* each branch is dispatched to the row or scalar decoder per its
|
|
2056
2064
|
* declared shape (see `decodeCombineIncludePayload`).
|
|
2057
2065
|
*/
|
|
2058
|
-
async function decodeIncludePayload(contract, context, include, raw) {
|
|
2066
|
+
async function decodeIncludePayload(contract, context, include, raw, bindings) {
|
|
2059
2067
|
if (include.scalar) return Promise.resolve(decodeScalarIncludePayload(contract, context, include, include.scalar, raw));
|
|
2060
|
-
if (include.combine) return decodeCombineIncludePayload(contract, context, include, include.combine, raw);
|
|
2068
|
+
if (include.combine) return decodeCombineIncludePayload(contract, context, include, include.combine, raw, bindings);
|
|
2061
2069
|
const rawChildren = parseIncludedRows(include, raw);
|
|
2062
2070
|
const polyInfo = resolvePolymorphismInfo(contract, include.relatedNamespaceId, include.relatedModelName);
|
|
2063
|
-
const mapChildRow = polyInfo ? (childRow) => mapPolymorphicRow(contract, include.relatedNamespaceId, include.relatedModelName, polyInfo, childRow, include.nested.variantName) : (
|
|
2071
|
+
const mapChildRow = polyInfo ? (childRow) => mapPolymorphicRow(contract, include.relatedNamespaceId, include.relatedModelName, polyInfo, childRow, include.nested.variantName) : createStorageRowMapper(contract, include.relatedNamespaceId, include.relatedModelName);
|
|
2072
|
+
let columns = bindings.get(include);
|
|
2073
|
+
if (!columns) {
|
|
2074
|
+
columns = /* @__PURE__ */ new Map();
|
|
2075
|
+
bindings.set(include, columns);
|
|
2076
|
+
}
|
|
2064
2077
|
const mappedChildren = [];
|
|
2065
2078
|
for (const childRow of rawChildren) {
|
|
2066
|
-
const decodedChildRow =
|
|
2079
|
+
const decodedChildRow = decodeIncludedStorageRow(contract, context, include, childRow, columns);
|
|
2067
2080
|
const mapped = mapChildRow(decodedChildRow);
|
|
2068
|
-
for (const nestedInclude of include.nested.includes) mapped[nestedInclude.relationName] = await decodeIncludePayload(contract, context, nestedInclude, decodedChildRow[nestedInclude.relationName]);
|
|
2081
|
+
for (const nestedInclude of include.nested.includes) mapped[nestedInclude.relationName] = await decodeIncludePayload(contract, context, nestedInclude, decodedChildRow[nestedInclude.relationName], bindings);
|
|
2069
2082
|
mappedChildren.push(mapped);
|
|
2070
2083
|
}
|
|
2071
2084
|
return coerceSingleQueryIncludeResult(mappedChildren, include.cardinality);
|
|
2072
2085
|
}
|
|
2073
|
-
|
|
2086
|
+
function decodeIncludedStorageRow(contract, context, include, row, bindings) {
|
|
2074
2087
|
const decoded = {};
|
|
2075
2088
|
for (const [key, value] of Object.entries(row)) {
|
|
2076
2089
|
if (value === null || value === void 0) {
|
|
2077
2090
|
decoded[key] = value;
|
|
2078
2091
|
continue;
|
|
2079
2092
|
}
|
|
2080
|
-
|
|
2081
|
-
if (
|
|
2082
|
-
|
|
2083
|
-
|
|
2093
|
+
let binding = bindings.get(key);
|
|
2094
|
+
if (binding === void 0) {
|
|
2095
|
+
binding = resolveIncludedColumnBinding(contract, context, include, key);
|
|
2096
|
+
bindings.set(key, binding);
|
|
2084
2097
|
}
|
|
2085
|
-
|
|
2086
|
-
if (!codec) {
|
|
2087
|
-
decoded[key] = value;
|
|
2088
|
-
continue;
|
|
2089
|
-
}
|
|
2090
|
-
decoded[key] = await decodeIncludedColumnValue(ref, context.codecDescriptors.codecRefForColumn(include.relatedNamespaceId, ref.table, ref.column)?.codecId ?? ref.storageColumn.codecId, codec, value);
|
|
2098
|
+
decoded[key] = binding ? decodeIncludedColumnValue(binding.ref, binding.codecId, binding.codec, value) : value;
|
|
2091
2099
|
}
|
|
2092
2100
|
return decoded;
|
|
2093
2101
|
}
|
|
2102
|
+
function resolveIncludedColumnBinding(contract, context, include, key) {
|
|
2103
|
+
const ref = resolveIncludedColumnRef(contract, include, key);
|
|
2104
|
+
if (!ref) return null;
|
|
2105
|
+
const codec = context.contractCodecs.forColumn(include.relatedNamespaceId, ref.table, ref.column);
|
|
2106
|
+
if (!codec) return null;
|
|
2107
|
+
return {
|
|
2108
|
+
ref,
|
|
2109
|
+
codec,
|
|
2110
|
+
codecId: context.codecDescriptors.codecRefForColumn(include.relatedNamespaceId, ref.table, ref.column)?.codecId ?? ref.storageColumn.codecId
|
|
2111
|
+
};
|
|
2112
|
+
}
|
|
2094
2113
|
function resolveIncludedColumnRef(contract, include, key) {
|
|
2095
2114
|
const baseColumn = resolveStorageColumn(contract, include.relatedNamespaceId, include.relatedTableName, key);
|
|
2096
2115
|
if (baseColumn) return {
|
|
@@ -2115,7 +2134,7 @@ function resolveIncludedColumnRef(contract, include, key) {
|
|
|
2115
2134
|
function resolveStorageColumn(contract, namespaceId, tableName, columnName) {
|
|
2116
2135
|
return contract.storage.namespaces[namespaceId]?.entries.table?.[tableName]?.columns[columnName];
|
|
2117
2136
|
}
|
|
2118
|
-
|
|
2137
|
+
function decodeIncludedColumnValue(ref, codecId, codec, value) {
|
|
2119
2138
|
if (ref.storageColumn.many === true) {
|
|
2120
2139
|
if (!Array.isArray(value)) wrapIncludedDecodeFailure(/* @__PURE__ */ new TypeError(`expected an array from the driver for many-typed column, got ${typeof value}`), ref, codecId);
|
|
2121
2140
|
const decoded = [];
|
|
@@ -2169,7 +2188,7 @@ function wrapIncludedDecodeFailure(error, ref, codecId) {
|
|
|
2169
2188
|
* bug — `parseCombineEnvelope` throws loudly rather than papering over
|
|
2170
2189
|
* it with an empty shape.
|
|
2171
2190
|
*/
|
|
2172
|
-
async function decodeCombineIncludePayload(contract, context, include, branches, raw) {
|
|
2191
|
+
async function decodeCombineIncludePayload(contract, context, include, branches, raw, bindings) {
|
|
2173
2192
|
const parsed = parseCombineEnvelope(include, raw);
|
|
2174
2193
|
const result = {};
|
|
2175
2194
|
for (const [branchName, branch] of Object.entries(branches)) {
|
|
@@ -2179,7 +2198,7 @@ async function decodeCombineIncludePayload(contract, context, include, branches,
|
|
|
2179
2198
|
nested: branch.state,
|
|
2180
2199
|
scalar: void 0,
|
|
2181
2200
|
combine: void 0
|
|
2182
|
-
}, branchRaw);
|
|
2201
|
+
}, branchRaw, bindings);
|
|
2183
2202
|
else result[branchName] = decodeScalarIncludePayload(contract, context, include, branch.selector, branchRaw);
|
|
2184
2203
|
}
|
|
2185
2204
|
return result;
|