@payloadcms/drizzle 3.0.0-canary.483db21 → 3.0.0-canary.4eb1bfc
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/count.d.ts.map +1 -1
- package/dist/count.js +1 -1
- package/dist/count.js.map +1 -1
- package/dist/createGlobalVersion.d.ts +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +4 -2
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createTableName.d.ts.map +1 -1
- package/dist/createTableName.js +6 -2
- package/dist/createTableName.js.map +1 -1
- package/dist/createVersion.d.ts +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +22 -14
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +5 -3
- package/dist/deleteOne.js.map +1 -1
- package/dist/deleteVersions.js +1 -1
- package/dist/deleteVersions.js.map +1 -1
- package/dist/destroy.d.ts.map +1 -1
- package/dist/destroy.js +3 -1
- package/dist/destroy.js.map +1 -1
- package/dist/exports/postgres.d.ts +14 -0
- package/dist/exports/postgres.d.ts.map +1 -0
- package/dist/exports/postgres.js +15 -0
- package/dist/exports/postgres.js.map +1 -0
- package/dist/find/buildFindManyArgs.d.ts +13 -7
- package/dist/find/buildFindManyArgs.d.ts.map +1 -1
- package/dist/find/buildFindManyArgs.js +5 -1
- package/dist/find/buildFindManyArgs.js.map +1 -1
- package/dist/find/findMany.d.ts +1 -1
- package/dist/find/findMany.d.ts.map +1 -1
- package/dist/find/findMany.js +6 -3
- package/dist/find/findMany.js.map +1 -1
- package/dist/find/traverseFields.d.ts +7 -3
- package/dist/find/traverseFields.d.ts.map +1 -1
- package/dist/find/traverseFields.js +91 -16
- package/dist/find/traverseFields.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +2 -1
- package/dist/find.js.map +1 -1
- package/dist/findGlobalVersions.js +1 -1
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findMigrationDir.d.ts.map +1 -1
- package/dist/findMigrationDir.js +3 -1
- package/dist/findMigrationDir.js.map +1 -1
- package/dist/findOne.d.ts +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +2 -1
- package/dist/findOne.js.map +1 -1
- package/dist/findVersions.js +1 -1
- package/dist/findVersions.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/migrate.js +2 -7
- package/dist/migrate.js.map +1 -1
- package/dist/migrateDown.d.ts.map +1 -1
- package/dist/migrateDown.js +1 -1
- package/dist/migrateDown.js.map +1 -1
- package/dist/migrateFresh.d.ts.map +1 -1
- package/dist/migrateFresh.js +1 -0
- package/dist/migrateFresh.js.map +1 -1
- package/dist/migrateRefresh.d.ts.map +1 -1
- package/dist/migrateRefresh.js +2 -1
- package/dist/migrateRefresh.js.map +1 -1
- package/dist/migrateReset.d.ts.map +1 -1
- package/dist/migrateReset.js +4 -2
- package/dist/migrateReset.js.map +1 -1
- package/dist/migrateStatus.js +0 -1
- package/dist/migrateStatus.js.map +1 -1
- package/dist/postgres/countDistinct.d.ts +3 -0
- package/dist/postgres/countDistinct.d.ts.map +1 -0
- package/dist/postgres/countDistinct.js +24 -0
- package/dist/postgres/countDistinct.js.map +1 -0
- package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts +2 -0
- package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -0
- package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js +16 -0
- package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js.map +1 -0
- package/dist/postgres/createJSONQuery/formatJSONPathSegment.d.ts +2 -0
- package/dist/postgres/createJSONQuery/formatJSONPathSegment.d.ts.map +1 -0
- package/dist/postgres/createJSONQuery/formatJSONPathSegment.js +5 -0
- package/dist/postgres/createJSONQuery/formatJSONPathSegment.js.map +1 -0
- package/dist/postgres/createJSONQuery/index.d.ts +10 -0
- package/dist/postgres/createJSONQuery/index.d.ts.map +1 -0
- package/dist/postgres/createJSONQuery/index.js +54 -0
- package/dist/postgres/createJSONQuery/index.js.map +1 -0
- package/dist/postgres/createMigration.d.ts +3 -0
- package/dist/postgres/createMigration.d.ts.map +1 -0
- package/dist/postgres/createMigration.js +92 -0
- package/dist/postgres/createMigration.js.map +1 -0
- package/dist/postgres/defaultSnapshot.d.ts +3 -0
- package/dist/postgres/defaultSnapshot.d.ts.map +1 -0
- package/dist/postgres/defaultSnapshot.js +17 -0
- package/dist/postgres/defaultSnapshot.js.map +1 -0
- package/dist/postgres/deleteWhere.d.ts +3 -0
- package/dist/postgres/deleteWhere.d.ts.map +1 -0
- package/dist/postgres/deleteWhere.js +6 -0
- package/dist/postgres/deleteWhere.js.map +1 -0
- package/dist/postgres/dropDatabase.d.ts +3 -0
- package/dist/postgres/dropDatabase.d.ts.map +1 -0
- package/dist/postgres/dropDatabase.js +9 -0
- package/dist/postgres/dropDatabase.js.map +1 -0
- package/dist/postgres/execute.d.ts +3 -0
- package/dist/postgres/execute.d.ts.map +1 -0
- package/dist/postgres/execute.js +11 -0
- package/dist/postgres/execute.js.map +1 -0
- package/dist/postgres/getMigrationTemplate.d.ts +4 -0
- package/dist/postgres/getMigrationTemplate.d.ts.map +1 -0
- package/dist/postgres/getMigrationTemplate.js +13 -0
- package/dist/postgres/getMigrationTemplate.js.map +1 -0
- package/dist/postgres/init.d.ts +3 -0
- package/dist/postgres/init.d.ts.map +1 -0
- package/dist/postgres/init.js +104 -0
- package/dist/postgres/init.js.map +1 -0
- package/dist/postgres/insert.d.ts +3 -0
- package/dist/postgres/insert.d.ts.map +1 -0
- package/dist/postgres/insert.js +12 -0
- package/dist/postgres/insert.js.map +1 -0
- package/dist/postgres/requireDrizzleKit.d.ts +3 -0
- package/dist/postgres/requireDrizzleKit.d.ts.map +1 -0
- package/dist/postgres/requireDrizzleKit.js +5 -0
- package/dist/postgres/requireDrizzleKit.js.map +1 -0
- package/dist/postgres/schema/build.d.ts +40 -0
- package/dist/postgres/schema/build.d.ts.map +1 -0
- package/dist/postgres/schema/build.js +378 -0
- package/dist/postgres/schema/build.js.map +1 -0
- package/dist/postgres/schema/createIndex.d.ts +12 -0
- package/dist/postgres/schema/createIndex.d.ts.map +1 -0
- package/dist/postgres/schema/createIndex.js +20 -0
- package/dist/postgres/schema/createIndex.js.map +1 -0
- package/dist/postgres/schema/idToUUID.d.ts +3 -0
- package/dist/postgres/schema/idToUUID.d.ts.map +1 -0
- package/dist/postgres/schema/idToUUID.js +11 -0
- package/dist/postgres/schema/idToUUID.js.map +1 -0
- package/dist/postgres/schema/parentIDColumnMap.d.ts +4 -0
- package/dist/postgres/schema/parentIDColumnMap.d.ts.map +1 -0
- package/dist/postgres/schema/parentIDColumnMap.js +9 -0
- package/dist/postgres/schema/parentIDColumnMap.js.map +1 -0
- package/dist/postgres/schema/setColumnID.d.ts +11 -0
- package/dist/postgres/schema/setColumnID.d.ts.map +1 -0
- package/dist/postgres/schema/setColumnID.js +24 -0
- package/dist/postgres/schema/setColumnID.js.map +1 -0
- package/dist/postgres/schema/traverseFields.d.ts +40 -0
- package/dist/postgres/schema/traverseFields.d.ts.map +1 -0
- package/dist/postgres/schema/traverseFields.js +733 -0
- package/dist/postgres/schema/traverseFields.js.map +1 -0
- package/dist/postgres/schema/withDefault.d.ts +4 -0
- package/dist/postgres/schema/withDefault.d.ts.map +1 -0
- package/dist/postgres/schema/withDefault.js +12 -0
- package/dist/postgres/schema/withDefault.js.map +1 -0
- package/dist/postgres/types.d.ts +126 -0
- package/dist/postgres/types.d.ts.map +1 -0
- package/dist/postgres/types.js +3 -0
- package/dist/postgres/types.js.map +1 -0
- package/dist/queries/buildAndOrConditions.d.ts +1 -1
- package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
- package/dist/queries/buildAndOrConditions.js +2 -4
- package/dist/queries/buildAndOrConditions.js.map +1 -1
- package/dist/queries/buildOrderBy.d.ts +18 -0
- package/dist/queries/buildOrderBy.d.ts.map +1 -0
- package/dist/queries/buildOrderBy.js +52 -0
- package/dist/queries/buildOrderBy.js.map +1 -0
- package/dist/queries/buildQuery.d.ts +4 -4
- package/dist/queries/buildQuery.d.ts.map +1 -1
- package/dist/queries/buildQuery.js +12 -47
- package/dist/queries/buildQuery.js.map +1 -1
- package/dist/queries/getTableColumnFromPath.d.ts +8 -3
- package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
- package/dist/queries/getTableColumnFromPath.js +73 -23
- package/dist/queries/getTableColumnFromPath.js.map +1 -1
- package/dist/queries/operatorMap.d.ts.map +1 -1
- package/dist/queries/operatorMap.js.map +1 -1
- package/dist/queries/parseParams.d.ts +1 -1
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +52 -6
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queries/sanitizeQueryValue.d.ts +12 -1
- package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
- package/dist/queries/sanitizeQueryValue.js +77 -21
- package/dist/queries/sanitizeQueryValue.js.map +1 -1
- package/dist/queries/selectDistinct.d.ts +3 -4
- package/dist/queries/selectDistinct.d.ts.map +1 -1
- package/dist/queries/selectDistinct.js.map +1 -1
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +1 -2
- package/dist/queryDrafts.js.map +1 -1
- package/dist/transactions/beginTransaction.d.ts.map +1 -1
- package/dist/transactions/beginTransaction.js +5 -1
- package/dist/transactions/beginTransaction.js.map +1 -1
- package/dist/transactions/commitTransaction.d.ts.map +1 -1
- package/dist/transactions/commitTransaction.js +3 -1
- package/dist/transactions/commitTransaction.js.map +1 -1
- package/dist/transform/read/hasManyNumber.d.ts +2 -1
- package/dist/transform/read/hasManyNumber.d.ts.map +1 -1
- package/dist/transform/read/hasManyNumber.js +12 -2
- package/dist/transform/read/hasManyNumber.js.map +1 -1
- package/dist/transform/read/hasManyText.d.ts +2 -1
- package/dist/transform/read/hasManyText.d.ts.map +1 -1
- package/dist/transform/read/hasManyText.js +12 -2
- package/dist/transform/read/hasManyText.js.map +1 -1
- package/dist/transform/read/index.d.ts +3 -2
- package/dist/transform/read/index.d.ts.map +1 -1
- package/dist/transform/read/index.js +3 -2
- package/dist/transform/read/index.js.map +1 -1
- package/dist/transform/read/relationship.d.ts +2 -1
- package/dist/transform/read/relationship.d.ts.map +1 -1
- package/dist/transform/read/relationship.js +15 -6
- package/dist/transform/read/relationship.js.map +1 -1
- package/dist/transform/read/traverseFields.d.ts +10 -2
- package/dist/transform/read/traverseFields.d.ts.map +1 -1
- package/dist/transform/read/traverseFields.js +163 -55
- package/dist/transform/read/traverseFields.js.map +1 -1
- package/dist/transform/write/array.d.ts +6 -1
- package/dist/transform/write/array.d.ts.map +1 -1
- package/dist/transform/write/array.js +7 -3
- package/dist/transform/write/array.js.map +1 -1
- package/dist/transform/write/blocks.d.ts +8 -3
- package/dist/transform/write/blocks.d.ts.map +1 -1
- package/dist/transform/write/blocks.js +19 -7
- package/dist/transform/write/blocks.js.map +1 -1
- package/dist/transform/write/index.d.ts.map +1 -1
- package/dist/transform/write/index.js +1 -1
- package/dist/transform/write/index.js.map +1 -1
- package/dist/transform/write/relationships.d.ts.map +1 -1
- package/dist/transform/write/relationships.js +6 -2
- package/dist/transform/write/relationships.js.map +1 -1
- package/dist/transform/write/selects.d.ts.map +1 -1
- package/dist/transform/write/selects.js +1 -1
- package/dist/transform/write/selects.js.map +1 -1
- package/dist/transform/write/traverseFields.d.ts +6 -1
- package/dist/transform/write/traverseFields.d.ts.map +1 -1
- package/dist/transform/write/traverseFields.js +46 -17
- package/dist/transform/write/traverseFields.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +3 -2
- package/dist/update.js.map +1 -1
- package/dist/updateGlobalVersion.js +2 -2
- package/dist/updateGlobalVersion.js.map +1 -1
- package/dist/updateVersion.js +2 -2
- package/dist/updateVersion.js.map +1 -1
- package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
- package/dist/upsertRow/deleteExistingRowsByPath.js +6 -2
- package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
- package/dist/upsertRow/index.d.ts +1 -1
- package/dist/upsertRow/index.d.ts.map +1 -1
- package/dist/upsertRow/index.js +50 -12
- package/dist/upsertRow/index.js.map +1 -1
- package/dist/upsertRow/insertArrays.d.ts.map +1 -1
- package/dist/upsertRow/insertArrays.js +5 -2
- package/dist/upsertRow/insertArrays.js.map +1 -1
- package/dist/upsertRow/types.d.ts +8 -5
- package/dist/upsertRow/types.d.ts.map +1 -1
- package/dist/upsertRow/types.js.map +1 -1
- package/dist/utilities/createBlocksMap.d.ts.map +1 -1
- package/dist/utilities/createBlocksMap.js +4 -2
- package/dist/utilities/createBlocksMap.js.map +1 -1
- package/dist/utilities/createRelationshipMap.d.ts.map +1 -1
- package/dist/utilities/createRelationshipMap.js +3 -1
- package/dist/utilities/createRelationshipMap.js.map +1 -1
- package/dist/utilities/executeSchemaHooks.d.ts +24 -0
- package/dist/utilities/executeSchemaHooks.d.ts.map +1 -0
- package/dist/utilities/executeSchemaHooks.js +21 -0
- package/dist/utilities/executeSchemaHooks.js.map +1 -0
- package/dist/utilities/extendDrizzleTable.d.ts +19 -0
- package/dist/utilities/extendDrizzleTable.d.ts.map +1 -0
- package/dist/utilities/extendDrizzleTable.js +38 -0
- package/dist/utilities/extendDrizzleTable.js.map +1 -0
- package/dist/utilities/getCollectionIdType.d.ts +7 -0
- package/dist/utilities/getCollectionIdType.d.ts.map +1 -0
- package/dist/utilities/getCollectionIdType.js +11 -0
- package/dist/utilities/getCollectionIdType.js.map +1 -0
- package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
- package/dist/utilities/hasLocalesTable.js +12 -4
- package/dist/utilities/hasLocalesTable.js.map +1 -1
- package/dist/utilities/isPolymorphicRelationship.d.ts +6 -0
- package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -0
- package/dist/utilities/isPolymorphicRelationship.js +5 -0
- package/dist/utilities/isPolymorphicRelationship.js.map +1 -0
- package/package.json +16 -7
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import { and, isNotNull, isNull, ne, notInArray, or, sql } from 'drizzle-orm';
|
|
2
|
+
import { PgUUID } from 'drizzle-orm/pg-core';
|
|
2
3
|
import { QueryError } from 'payload';
|
|
3
4
|
import { validOperators } from 'payload/shared';
|
|
4
5
|
import { buildAndOrConditions } from './buildAndOrConditions.js';
|
|
5
6
|
import { getTableColumnFromPath } from './getTableColumnFromPath.js';
|
|
6
7
|
import { sanitizeQueryValue } from './sanitizeQueryValue.js';
|
|
7
|
-
export
|
|
8
|
+
export function parseParams({ adapter, fields, joins, locale, selectFields, tableName, where }) {
|
|
8
9
|
let result;
|
|
9
10
|
const constraints = [];
|
|
10
11
|
if (typeof where === 'object' && Object.keys(where).length > 0) {
|
|
@@ -19,7 +20,7 @@ export async function parseParams({ adapter, fields, joins, locale, selectFields
|
|
|
19
20
|
conditionOperator = or;
|
|
20
21
|
}
|
|
21
22
|
if (Array.isArray(condition)) {
|
|
22
|
-
const builtConditions =
|
|
23
|
+
const builtConditions = buildAndOrConditions({
|
|
23
24
|
adapter,
|
|
24
25
|
fields,
|
|
25
26
|
joins,
|
|
@@ -40,7 +41,7 @@ export async function parseParams({ adapter, fields, joins, locale, selectFields
|
|
|
40
41
|
for (let operator of Object.keys(pathOperators)){
|
|
41
42
|
if (validOperators.includes(operator)) {
|
|
42
43
|
const val = where[relationOrPath][operator];
|
|
43
|
-
const { columnName, constraints: queryConstraints, field, getNotNullColumnByValue, pathSegments, rawColumn, table } = getTableColumnFromPath({
|
|
44
|
+
const { columnName, columns, constraints: queryConstraints, field, getNotNullColumnByValue, pathSegments, rawColumn, table } = getTableColumnFromPath({
|
|
44
45
|
adapter,
|
|
45
46
|
collectionPath: relationOrPath,
|
|
46
47
|
fields,
|
|
@@ -91,7 +92,12 @@ export async function parseParams({ adapter, fields, joins, locale, selectFields
|
|
|
91
92
|
wildcard: ''
|
|
92
93
|
},
|
|
93
94
|
exists: {
|
|
94
|
-
operator: val === true ? 'is not null' : 'is null'
|
|
95
|
+
operator: val === true ? 'is not null' : 'is null',
|
|
96
|
+
wildcard: ''
|
|
97
|
+
},
|
|
98
|
+
in: {
|
|
99
|
+
operator: 'in',
|
|
100
|
+
wildcard: ''
|
|
95
101
|
},
|
|
96
102
|
like: {
|
|
97
103
|
operator: 'like',
|
|
@@ -100,11 +106,24 @@ export async function parseParams({ adapter, fields, joins, locale, selectFields
|
|
|
100
106
|
not_equals: {
|
|
101
107
|
operator: '<>',
|
|
102
108
|
wildcard: ''
|
|
109
|
+
},
|
|
110
|
+
not_in: {
|
|
111
|
+
operator: 'not in',
|
|
112
|
+
wildcard: ''
|
|
103
113
|
}
|
|
104
114
|
};
|
|
105
115
|
let formattedValue = val;
|
|
106
116
|
if (adapter.name === 'sqlite' && operator === 'equals' && !isNaN(val)) {
|
|
107
117
|
formattedValue = val;
|
|
118
|
+
} else if ([
|
|
119
|
+
'in',
|
|
120
|
+
'not_in'
|
|
121
|
+
].includes(operator) && Array.isArray(val)) {
|
|
122
|
+
if (adapter.name === 'sqlite') {
|
|
123
|
+
formattedValue = `(${val.map((v)=>`${v}`).join(',')})`;
|
|
124
|
+
} else {
|
|
125
|
+
formattedValue = `(${val.map((v)=>`'${v}'`).join(', ')})`;
|
|
126
|
+
}
|
|
108
127
|
} else {
|
|
109
128
|
formattedValue = `'${operatorKeys[operator].wildcard}${val}${operatorKeys[operator].wildcard}'`;
|
|
110
129
|
}
|
|
@@ -136,7 +155,9 @@ export async function parseParams({ adapter, fields, joins, locale, selectFields
|
|
|
136
155
|
}
|
|
137
156
|
const sanitizedQueryValue = sanitizeQueryValue({
|
|
138
157
|
adapter,
|
|
158
|
+
columns,
|
|
139
159
|
field,
|
|
160
|
+
isUUID: table?.[columnName] instanceof PgUUID,
|
|
140
161
|
operator,
|
|
141
162
|
relationOrPath,
|
|
142
163
|
val
|
|
@@ -144,7 +165,32 @@ export async function parseParams({ adapter, fields, joins, locale, selectFields
|
|
|
144
165
|
if (sanitizedQueryValue === null) {
|
|
145
166
|
break;
|
|
146
167
|
}
|
|
147
|
-
const { operator: queryOperator, value: queryValue } = sanitizedQueryValue;
|
|
168
|
+
const { columns: queryColumns, operator: queryOperator, value: queryValue } = sanitizedQueryValue;
|
|
169
|
+
// Handle polymorphic relationships by value
|
|
170
|
+
if (queryColumns) {
|
|
171
|
+
if (!queryColumns.length) {
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
let wrapOperator = or;
|
|
175
|
+
if (queryValue === null && [
|
|
176
|
+
'equals',
|
|
177
|
+
'not_equals'
|
|
178
|
+
].includes(operator)) {
|
|
179
|
+
if (operator === 'equals') {
|
|
180
|
+
wrapOperator = and;
|
|
181
|
+
}
|
|
182
|
+
constraints.push(wrapOperator(...queryColumns.map(({ rawColumn })=>operator === 'equals' ? isNull(rawColumn) : isNotNull(rawColumn))));
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
if ([
|
|
186
|
+
'not_equals',
|
|
187
|
+
'not_in'
|
|
188
|
+
].includes(operator)) {
|
|
189
|
+
wrapOperator = and;
|
|
190
|
+
}
|
|
191
|
+
constraints.push(wrapOperator(...queryColumns.map(({ rawColumn, value })=>adapter.operators[queryOperator](rawColumn, value))));
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
148
194
|
if (queryOperator === 'not_equals' && queryValue !== null) {
|
|
149
195
|
constraints.push(or(isNull(rawColumn || table[columnName]), /* eslint-disable @typescript-eslint/no-explicit-any */ ne(rawColumn || table[columnName], queryValue)));
|
|
150
196
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\nimport type { SQL } from 'drizzle-orm'\nimport type { Field, Operator, Where } from 'payload'\n\nimport { and, isNotNull, isNull, ne, notInArray, or, sql } from 'drizzle-orm'\nimport { QueryError } from 'payload'\nimport { validOperators } from 'payload/shared'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n fields: Field[]\n joins: BuildQueryJoinAliases\n locale: string\n selectFields: Record<string, GenericColumn>\n tableName: string\n where: Where\n}\n\nexport async function parseParams({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n tableName,\n where,\n}: Args): Promise<SQL> {\n let result: SQL\n const constraints: SQL[] = []\n\n if (typeof where === 'object' && Object.keys(where).length > 0) {\n // We need to determine if the whereKey is an AND, OR, or a schema path\n for (const relationOrPath of Object.keys(where)) {\n if (relationOrPath) {\n const condition = where[relationOrPath]\n let conditionOperator: typeof and | typeof or\n if (relationOrPath.toLowerCase() === 'and') {\n conditionOperator = and\n } else if (relationOrPath.toLowerCase() === 'or') {\n conditionOperator = or\n }\n if (Array.isArray(condition)) {\n const builtConditions = await buildAndOrConditions({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n tableName,\n where: condition,\n })\n if (builtConditions.length > 0) {\n result = conditionOperator(...builtConditions)\n }\n } else {\n // It's a path - and there can be multiple comparisons on a single path.\n // For example - title like 'test' and title not equal to 'tester'\n // So we need to loop on keys again here to handle each operator independently\n const pathOperators = where[relationOrPath]\n if (typeof pathOperators === 'object') {\n for (let operator of Object.keys(pathOperators)) {\n if (validOperators.includes(operator as Operator)) {\n const val = where[relationOrPath][operator]\n const {\n columnName,\n constraints: queryConstraints,\n field,\n getNotNullColumnByValue,\n pathSegments,\n rawColumn,\n table,\n } = getTableColumnFromPath({\n adapter,\n collectionPath: relationOrPath,\n fields,\n joins,\n locale,\n pathSegments: relationOrPath.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n value: val,\n })\n\n queryConstraints.forEach(({ columnName: col, table: constraintTable, value }) => {\n if (typeof value === 'string' && value.indexOf('%') > -1) {\n constraints.push(adapter.operators.like(constraintTable[col], value))\n } else {\n constraints.push(adapter.operators.equals(constraintTable[col], value))\n }\n })\n\n if (\n ['json', 'richText'].includes(field.type) &&\n Array.isArray(pathSegments) &&\n pathSegments.length > 1\n ) {\n const segments = pathSegments.slice(1)\n segments.unshift(table[columnName].name)\n\n if (field.type === 'richText') {\n // use the table name from the nearest join to handle blocks, arrays, etc. or use the tableName arg\n const jsonTable =\n joins.length === 0\n ? tableName\n : joins[joins.length - 1].table[\n Object.getOwnPropertySymbols(joins[joins.length - 1].table)[0]\n ]\n const jsonQuery = adapter.createJSONQuery({\n operator,\n pathSegments: segments,\n table: jsonTable,\n treatAsArray: ['children'],\n treatRootAsArray: true,\n value: val,\n })\n\n constraints.push(sql.raw(jsonQuery))\n break\n }\n\n const jsonQuery = adapter.convertPathToJSONTraversal(pathSegments)\n const operatorKeys = {\n contains: { operator: 'like', wildcard: '%' },\n equals: { operator: '=', wildcard: '' },\n exists: { operator: val === true ? 'is not null' : 'is null' },\n like: { operator: 'like', wildcard: '%' },\n not_equals: { operator: '<>', wildcard: '' },\n }\n\n let formattedValue = val\n if (adapter.name === 'sqlite' && operator === 'equals' && !isNaN(val)) {\n formattedValue = val\n } else {\n formattedValue = `'${operatorKeys[operator].wildcard}${val}${operatorKeys[operator].wildcard}'`\n }\n if (operator === 'exists') {\n formattedValue = ''\n }\n\n constraints.push(\n sql.raw(\n `${table[columnName].name}${jsonQuery} ${operatorKeys[operator].operator} ${formattedValue}`,\n ),\n )\n\n break\n }\n\n if (getNotNullColumnByValue) {\n const columnName = getNotNullColumnByValue(val)\n if (columnName) {\n constraints.push(isNotNull(table[columnName]))\n } else {\n throw new QueryError([{ path: relationOrPath }])\n }\n break\n }\n\n if (\n operator === 'like' &&\n (field.type === 'number' || table[columnName].columnType === 'PgUUID')\n ) {\n operator = 'equals'\n }\n\n if (operator === 'like') {\n constraints.push(\n and(\n ...val\n .split(' ')\n .map((word) => adapter.operators.like(table[columnName], `%${word}%`)),\n ),\n )\n break\n }\n\n const sanitizedQueryValue = sanitizeQueryValue({\n adapter,\n field,\n operator,\n relationOrPath,\n val,\n })\n\n if (sanitizedQueryValue === null) {\n break\n }\n\n const { operator: queryOperator, value: queryValue } = sanitizedQueryValue\n\n if (queryOperator === 'not_equals' && queryValue !== null) {\n constraints.push(\n or(\n isNull(rawColumn || table[columnName]),\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ne<any>(rawColumn || table[columnName], queryValue),\n ),\n )\n break\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n Array.isArray(queryValue) &&\n operator === 'not_in'\n ) {\n constraints.push(\n sql`(${notInArray(table[columnName], queryValue)} OR\n ${table[columnName]}\n IS\n NULL)`,\n )\n\n break\n }\n\n if (operator === 'equals' && queryValue === null) {\n constraints.push(isNull(rawColumn || table[columnName]))\n break\n }\n\n if (operator === 'not_equals' && queryValue === null) {\n constraints.push(isNotNull(rawColumn || table[columnName]))\n break\n }\n\n constraints.push(\n adapter.operators[queryOperator](rawColumn || table[columnName], queryValue),\n )\n }\n }\n }\n }\n }\n }\n }\n if (constraints.length > 0) {\n if (result) {\n result = and(result, ...constraints)\n } else {\n result = and(...constraints)\n }\n }\n if (constraints.length === 1 && !result) {\n ;[result] = constraints\n }\n\n return result\n}\n"],"names":["and","isNotNull","isNull","ne","notInArray","or","sql","QueryError","validOperators","buildAndOrConditions","getTableColumnFromPath","sanitizeQueryValue","parseParams","adapter","fields","joins","locale","selectFields","tableName","where","result","constraints","Object","keys","length","relationOrPath","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","pathOperators","operator","includes","val","columnName","queryConstraints","field","getNotNullColumnByValue","pathSegments","rawColumn","table","collectionPath","replace","split","value","forEach","col","constraintTable","indexOf","push","operators","like","equals","type","segments","slice","unshift","name","jsonTable","getOwnPropertySymbols","jsonQuery","createJSONQuery","treatAsArray","treatRootAsArray","raw","convertPathToJSONTraversal","operatorKeys","contains","wildcard","exists","not_equals","formattedValue","isNaN","path","columnType","map","word","sanitizedQueryValue","queryOperator","queryValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { Field, Operator, Where } from 'payload'\n\nimport { and, isNotNull, isNull, ne, notInArray, or, sql } from 'drizzle-orm'\nimport { PgUUID } from 'drizzle-orm/pg-core'\nimport { QueryError } from 'payload'\nimport { validOperators } from 'payload/shared'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n fields: Field[]\n joins: BuildQueryJoinAliases\n locale: string\n selectFields: Record<string, GenericColumn>\n tableName: string\n where: Where\n}\n\nexport function parseParams({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n tableName,\n where,\n}: Args): SQL {\n let result: SQL\n const constraints: SQL[] = []\n\n if (typeof where === 'object' && Object.keys(where).length > 0) {\n // We need to determine if the whereKey is an AND, OR, or a schema path\n for (const relationOrPath of Object.keys(where)) {\n if (relationOrPath) {\n const condition = where[relationOrPath]\n let conditionOperator: typeof and | typeof or\n if (relationOrPath.toLowerCase() === 'and') {\n conditionOperator = and\n } else if (relationOrPath.toLowerCase() === 'or') {\n conditionOperator = or\n }\n if (Array.isArray(condition)) {\n const builtConditions = buildAndOrConditions({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n tableName,\n where: condition,\n })\n if (builtConditions.length > 0) {\n result = conditionOperator(...builtConditions)\n }\n } else {\n // It's a path - and there can be multiple comparisons on a single path.\n // For example - title like 'test' and title not equal to 'tester'\n // So we need to loop on keys again here to handle each operator independently\n const pathOperators = where[relationOrPath]\n if (typeof pathOperators === 'object') {\n for (let operator of Object.keys(pathOperators)) {\n if (validOperators.includes(operator as Operator)) {\n const val = where[relationOrPath][operator]\n\n const {\n columnName,\n columns,\n constraints: queryConstraints,\n field,\n getNotNullColumnByValue,\n pathSegments,\n rawColumn,\n table,\n } = getTableColumnFromPath({\n adapter,\n collectionPath: relationOrPath,\n fields,\n joins,\n locale,\n pathSegments: relationOrPath.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n value: val,\n })\n\n queryConstraints.forEach(({ columnName: col, table: constraintTable, value }) => {\n if (typeof value === 'string' && value.indexOf('%') > -1) {\n constraints.push(adapter.operators.like(constraintTable[col], value))\n } else {\n constraints.push(adapter.operators.equals(constraintTable[col], value))\n }\n })\n\n if (\n ['json', 'richText'].includes(field.type) &&\n Array.isArray(pathSegments) &&\n pathSegments.length > 1\n ) {\n const segments = pathSegments.slice(1)\n segments.unshift(table[columnName].name)\n\n if (field.type === 'richText') {\n // use the table name from the nearest join to handle blocks, arrays, etc. or use the tableName arg\n const jsonTable =\n joins.length === 0\n ? tableName\n : joins[joins.length - 1].table[\n Object.getOwnPropertySymbols(joins[joins.length - 1].table)[0]\n ]\n const jsonQuery = adapter.createJSONQuery({\n operator,\n pathSegments: segments,\n table: jsonTable,\n treatAsArray: ['children'],\n treatRootAsArray: true,\n value: val,\n })\n\n constraints.push(sql.raw(jsonQuery))\n break\n }\n\n const jsonQuery = adapter.convertPathToJSONTraversal(pathSegments)\n const operatorKeys: Record<string, { operator: string; wildcard: string }> = {\n contains: { operator: 'like', wildcard: '%' },\n equals: { operator: '=', wildcard: '' },\n exists: { operator: val === true ? 'is not null' : 'is null', wildcard: '' },\n in: { operator: 'in', wildcard: '' },\n like: { operator: 'like', wildcard: '%' },\n not_equals: { operator: '<>', wildcard: '' },\n not_in: { operator: 'not in', wildcard: '' },\n }\n\n let formattedValue = val\n if (adapter.name === 'sqlite' && operator === 'equals' && !isNaN(val)) {\n formattedValue = val\n } else if (['in', 'not_in'].includes(operator) && Array.isArray(val)) {\n if (adapter.name === 'sqlite') {\n formattedValue = `(${val.map((v) => `${v}`).join(',')})`\n } else {\n formattedValue = `(${val.map((v) => `'${v}'`).join(', ')})`\n }\n } else {\n formattedValue = `'${operatorKeys[operator].wildcard}${val}${operatorKeys[operator].wildcard}'`\n }\n if (operator === 'exists') {\n formattedValue = ''\n }\n\n constraints.push(\n sql.raw(\n `${table[columnName].name}${jsonQuery} ${operatorKeys[operator].operator} ${formattedValue}`,\n ),\n )\n\n break\n }\n\n if (getNotNullColumnByValue) {\n const columnName = getNotNullColumnByValue(val)\n if (columnName) {\n constraints.push(isNotNull(table[columnName]))\n } else {\n throw new QueryError([{ path: relationOrPath }])\n }\n break\n }\n\n if (\n operator === 'like' &&\n (field.type === 'number' || table[columnName].columnType === 'PgUUID')\n ) {\n operator = 'equals'\n }\n\n if (operator === 'like') {\n constraints.push(\n and(\n ...val\n .split(' ')\n .map((word) => adapter.operators.like(table[columnName], `%${word}%`)),\n ),\n )\n break\n }\n\n const sanitizedQueryValue = sanitizeQueryValue({\n adapter,\n columns,\n field,\n isUUID: table?.[columnName] instanceof PgUUID,\n operator,\n relationOrPath,\n val,\n })\n\n if (sanitizedQueryValue === null) {\n break\n }\n\n const {\n columns: queryColumns,\n operator: queryOperator,\n value: queryValue,\n } = sanitizedQueryValue\n\n // Handle polymorphic relationships by value\n if (queryColumns) {\n if (!queryColumns.length) {\n break\n }\n\n let wrapOperator = or\n\n if (queryValue === null && ['equals', 'not_equals'].includes(operator)) {\n if (operator === 'equals') {\n wrapOperator = and\n }\n\n constraints.push(\n wrapOperator(\n ...queryColumns.map(({ rawColumn }) =>\n operator === 'equals' ? isNull(rawColumn) : isNotNull(rawColumn),\n ),\n ),\n )\n break\n }\n\n if (['not_equals', 'not_in'].includes(operator)) {\n wrapOperator = and\n }\n\n constraints.push(\n wrapOperator(\n ...queryColumns.map(({ rawColumn, value }) =>\n adapter.operators[queryOperator](rawColumn, value),\n ),\n ),\n )\n\n break\n }\n\n if (queryOperator === 'not_equals' && queryValue !== null) {\n constraints.push(\n or(\n isNull(rawColumn || table[columnName]),\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ne<any>(rawColumn || table[columnName], queryValue),\n ),\n )\n break\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n Array.isArray(queryValue) &&\n operator === 'not_in'\n ) {\n constraints.push(\n sql`(${notInArray(table[columnName], queryValue)} OR\n ${table[columnName]}\n IS\n NULL)`,\n )\n\n break\n }\n\n if (operator === 'equals' && queryValue === null) {\n constraints.push(isNull(rawColumn || table[columnName]))\n break\n }\n\n if (operator === 'not_equals' && queryValue === null) {\n constraints.push(isNotNull(rawColumn || table[columnName]))\n break\n }\n\n constraints.push(\n adapter.operators[queryOperator](rawColumn || table[columnName], queryValue),\n )\n }\n }\n }\n }\n }\n }\n }\n if (constraints.length > 0) {\n if (result) {\n result = and(result, ...constraints)\n } else {\n result = and(...constraints)\n }\n }\n if (constraints.length === 1 && !result) {\n ;[result] = constraints\n }\n\n return result\n}\n"],"names":["and","isNotNull","isNull","ne","notInArray","or","sql","PgUUID","QueryError","validOperators","buildAndOrConditions","getTableColumnFromPath","sanitizeQueryValue","parseParams","adapter","fields","joins","locale","selectFields","tableName","where","result","constraints","Object","keys","length","relationOrPath","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","pathOperators","operator","includes","val","columnName","columns","queryConstraints","field","getNotNullColumnByValue","pathSegments","rawColumn","table","collectionPath","replace","split","value","forEach","col","constraintTable","indexOf","push","operators","like","equals","type","segments","slice","unshift","name","jsonTable","getOwnPropertySymbols","jsonQuery","createJSONQuery","treatAsArray","treatRootAsArray","raw","convertPathToJSONTraversal","operatorKeys","contains","wildcard","exists","in","not_equals","not_in","formattedValue","isNaN","map","v","join","path","columnType","word","sanitizedQueryValue","isUUID","queryColumns","queryOperator","queryValue","wrapOperator"],"mappings":"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"}
|
|
@@ -1,13 +1,24 @@
|
|
|
1
|
+
import type { SQL } from 'drizzle-orm';
|
|
1
2
|
import { type Field, type TabAsField } from 'payload';
|
|
2
3
|
import type { DrizzleAdapter } from '../types.js';
|
|
3
4
|
type SanitizeQueryValueArgs = {
|
|
4
5
|
adapter: DrizzleAdapter;
|
|
6
|
+
columns?: {
|
|
7
|
+
idType: 'number' | 'text' | 'uuid';
|
|
8
|
+
rawColumn: SQL<unknown>;
|
|
9
|
+
}[];
|
|
5
10
|
field: Field | TabAsField;
|
|
11
|
+
isUUID: boolean;
|
|
6
12
|
operator: string;
|
|
7
13
|
relationOrPath: string;
|
|
8
14
|
val: any;
|
|
9
15
|
};
|
|
10
|
-
|
|
16
|
+
type SanitizedColumn = {
|
|
17
|
+
rawColumn: SQL<unknown>;
|
|
18
|
+
value: unknown;
|
|
19
|
+
};
|
|
20
|
+
export declare const sanitizeQueryValue: ({ adapter, columns, field, isUUID, operator: operatorArg, relationOrPath, val, }: SanitizeQueryValueArgs) => {
|
|
21
|
+
columns?: SanitizedColumn[];
|
|
11
22
|
operator: string;
|
|
12
23
|
value: unknown;
|
|
13
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizeQueryValue.d.ts","sourceRoot":"","sources":["../../src/queries/sanitizeQueryValue.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"sanitizeQueryValue.d.ts","sourceRoot":"","sources":["../../src/queries/sanitizeQueryValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAA4C,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAI/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAKjD,KAAK,sBAAsB,GAAG;IAC5B,OAAO,EAAE,cAAc,CAAA;IACvB,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;QAClC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KACxB,EAAE,CAAA;IACH,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,eAAO,MAAM,kBAAkB,qFAQ5B,sBAAsB,KAAG;IAC1B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;CAoMf,CAAA"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { APIError, createArrayFromCommaDelineated } from 'payload';
|
|
2
2
|
import { fieldAffectsData } from 'payload/shared';
|
|
3
|
-
|
|
3
|
+
import { validate as uuidValidate } from 'uuid';
|
|
4
|
+
import { getCollectionIdType } from '../utilities/getCollectionIdType.js';
|
|
5
|
+
import { isPolymorphicRelationship } from '../utilities/isPolymorphicRelationship.js';
|
|
6
|
+
export const sanitizeQueryValue = ({ adapter, columns, field, isUUID, operator: operatorArg, relationOrPath, val })=>{
|
|
4
7
|
let operator = operatorArg;
|
|
5
8
|
let formattedValue = val;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
let formattedColumns;
|
|
10
|
+
if (!fieldAffectsData(field)) {
|
|
11
|
+
return {
|
|
12
|
+
operator,
|
|
13
|
+
value: formattedValue
|
|
14
|
+
};
|
|
15
|
+
}
|
|
10
16
|
if ((field.type === 'relationship' || field.type === 'upload') && !relationOrPath.endsWith('relationTo') && Array.isArray(formattedValue)) {
|
|
11
17
|
const allPossibleIDTypes = [];
|
|
12
18
|
formattedValue.forEach((val)=>{
|
|
@@ -22,8 +28,12 @@ export const sanitizeQueryValue = ({ adapter, field, operator: operatorArg, rela
|
|
|
22
28
|
}
|
|
23
29
|
// Cast incoming values as proper searchable types
|
|
24
30
|
if (field.type === 'checkbox' && typeof val === 'string') {
|
|
25
|
-
if (val.toLowerCase() === 'true')
|
|
26
|
-
|
|
31
|
+
if (val.toLowerCase() === 'true') {
|
|
32
|
+
formattedValue = true;
|
|
33
|
+
}
|
|
34
|
+
if (val.toLowerCase() === 'false') {
|
|
35
|
+
formattedValue = false;
|
|
36
|
+
}
|
|
27
37
|
}
|
|
28
38
|
if ([
|
|
29
39
|
'all',
|
|
@@ -42,6 +52,14 @@ export const sanitizeQueryValue = ({ adapter, field, operator: operatorArg, rela
|
|
|
42
52
|
}
|
|
43
53
|
if (field.type === 'number' && typeof formattedValue === 'string') {
|
|
44
54
|
formattedValue = Number(val);
|
|
55
|
+
if (Number.isNaN(formattedValue)) {
|
|
56
|
+
formattedValue = null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (isUUID && typeof formattedValue === 'string') {
|
|
60
|
+
if (!uuidValidate(val)) {
|
|
61
|
+
formattedValue = null;
|
|
62
|
+
}
|
|
45
63
|
}
|
|
46
64
|
if (field.type === 'date' && operator !== 'exists') {
|
|
47
65
|
if (typeof val === 'string') {
|
|
@@ -52,7 +70,9 @@ export const sanitizeQueryValue = ({ adapter, field, operator: operatorArg, rela
|
|
|
52
70
|
value: undefined
|
|
53
71
|
};
|
|
54
72
|
}
|
|
55
|
-
} else if (typeof val === 'number')
|
|
73
|
+
} else if (typeof val === 'number') {
|
|
74
|
+
formattedValue = new Date(val).toISOString();
|
|
75
|
+
}
|
|
56
76
|
}
|
|
57
77
|
if (field.type === 'relationship' || field.type === 'upload') {
|
|
58
78
|
if (val === 'null') {
|
|
@@ -61,20 +81,55 @@ export const sanitizeQueryValue = ({ adapter, field, operator: operatorArg, rela
|
|
|
61
81
|
// convert the value to the idType of the relationship
|
|
62
82
|
let idType;
|
|
63
83
|
if (typeof field.relationTo === 'string') {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
serial: 'number',
|
|
69
|
-
text: 'text',
|
|
70
|
-
uuid: 'text'
|
|
71
|
-
};
|
|
72
|
-
idType = typeMap[mixedType];
|
|
84
|
+
idType = getCollectionIdType({
|
|
85
|
+
adapter,
|
|
86
|
+
collection: adapter.payload.collections[field.relationTo]
|
|
87
|
+
});
|
|
73
88
|
} else {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
89
|
+
if (isPolymorphicRelationship(val)) {
|
|
90
|
+
if (operator !== 'equals') {
|
|
91
|
+
throw new APIError(`Only 'equals' operator is supported for polymorphic relationship object notation. Given - ${operator}`);
|
|
92
|
+
}
|
|
93
|
+
idType = getCollectionIdType({
|
|
94
|
+
adapter,
|
|
95
|
+
collection: adapter.payload.collections[val.relationTo]
|
|
96
|
+
});
|
|
97
|
+
return {
|
|
98
|
+
operator,
|
|
99
|
+
value: idType === 'number' ? Number(val.value) : String(val.value)
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
formattedColumns = columns.map(({ idType, rawColumn })=>{
|
|
103
|
+
let formattedValue;
|
|
104
|
+
if (Array.isArray(val)) {
|
|
105
|
+
formattedValue = val.map((eachVal)=>{
|
|
106
|
+
let formattedValue;
|
|
107
|
+
if (idType === 'number') {
|
|
108
|
+
formattedValue = Number(eachVal);
|
|
109
|
+
if (Number.isNaN(formattedValue)) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
} else {
|
|
113
|
+
if (idType === 'uuid' && !uuidValidate(eachVal)) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
formattedValue = String(eachVal);
|
|
117
|
+
}
|
|
118
|
+
return formattedValue;
|
|
119
|
+
}).filter(Boolean);
|
|
120
|
+
} else if (idType === 'number') {
|
|
121
|
+
formattedValue = Number(val);
|
|
122
|
+
if (Number.isNaN(formattedValue)) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
} else {
|
|
126
|
+
formattedValue = String(val);
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
rawColumn,
|
|
130
|
+
value: formattedValue
|
|
131
|
+
};
|
|
132
|
+
}).filter(Boolean);
|
|
78
133
|
}
|
|
79
134
|
if (Array.isArray(formattedValue)) {
|
|
80
135
|
formattedValue = formattedValue.map((value)=>{
|
|
@@ -112,6 +167,7 @@ export const sanitizeQueryValue = ({ adapter, field, operator: operatorArg, rela
|
|
|
112
167
|
}
|
|
113
168
|
}
|
|
114
169
|
return {
|
|
170
|
+
columns: formattedColumns,
|
|
115
171
|
operator,
|
|
116
172
|
value: formattedValue
|
|
117
173
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/queries/sanitizeQueryValue.ts"],"sourcesContent":["import { APIError, type Field, type TabAsField, createArrayFromCommaDelineated } from 'payload'\nimport { fieldAffectsData } from 'payload/shared'\n\nimport type { DrizzleAdapter } from '../types.js'\n\ntype SanitizeQueryValueArgs = {\n adapter: DrizzleAdapter\n field: Field | TabAsField\n operator: string\n relationOrPath: string\n val: any\n}\n\nexport const sanitizeQueryValue = ({\n adapter,\n field,\n operator: operatorArg,\n relationOrPath,\n val,\n}: SanitizeQueryValueArgs): { operator: string; value: unknown } => {\n let operator = operatorArg\n let formattedValue = val\n\n if (!fieldAffectsData(field)) return { operator, value: formattedValue }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n !relationOrPath.endsWith('relationTo') &&\n Array.isArray(formattedValue)\n ) {\n const allPossibleIDTypes: (number | string)[] = []\n formattedValue.forEach((val) => {\n if (adapter.idType !== 'uuid' && typeof val === 'string') {\n allPossibleIDTypes.push(val, parseInt(val))\n } else if (typeof val === 'string') {\n allPossibleIDTypes.push(val)\n } else {\n allPossibleIDTypes.push(val, String(val))\n }\n })\n formattedValue = allPossibleIDTypes\n }\n\n // Cast incoming values as proper searchable types\n if (field.type === 'checkbox' && typeof val === 'string') {\n if (val.toLowerCase() === 'true') formattedValue = true\n if (val.toLowerCase() === 'false') formattedValue = false\n }\n\n if (['all', 'in', 'not_in'].includes(operator)) {\n if (typeof formattedValue === 'string') {\n formattedValue = createArrayFromCommaDelineated(formattedValue)\n\n if (field.type === 'number') {\n formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))\n }\n }\n\n if (!Array.isArray(formattedValue) || formattedValue.length === 0) {\n return null\n }\n }\n\n if (field.type === 'number' && typeof formattedValue === 'string') {\n formattedValue = Number(val)\n }\n\n if (field.type === 'date' && operator !== 'exists') {\n if (typeof val === 'string') {\n formattedValue = new Date(val).toISOString()\n if (Number.isNaN(Date.parse(formattedValue))) {\n return { operator, value: undefined }\n }\n } else if (typeof val === 'number') formattedValue = new Date(val).toISOString()\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (val === 'null') {\n formattedValue = null\n } else if (!(formattedValue === null || typeof formattedValue === 'boolean')) {\n // convert the value to the idType of the relationship\n let idType: 'number' | 'text'\n if (typeof field.relationTo === 'string') {\n const collection = adapter.payload.collections[field.relationTo]\n const mixedType: 'number' | 'serial' | 'text' | 'uuid' =\n collection.customIDType || adapter.idType\n const typeMap: Record<string, 'number' | 'text'> = {\n number: 'number',\n serial: 'number',\n text: 'text',\n uuid: 'text',\n }\n idType = typeMap[mixedType]\n } else {\n // LIMITATION: Only cast to the first relationTo id type,\n // otherwise we need to make the db cast which is inefficient\n const collection = adapter.payload.collections[field.relationTo[0]]\n idType = collection.customIDType || adapter.idType === 'uuid' ? 'text' : 'number'\n }\n if (Array.isArray(formattedValue)) {\n formattedValue = formattedValue.map((value) => {\n if (idType === 'number') {\n return Number(value)\n }\n if (idType === 'text') {\n return String(value)\n }\n return value\n })\n } else {\n if (idType === 'number') {\n formattedValue = Number(val)\n }\n if (idType === 'text') {\n formattedValue = String(val)\n }\n }\n }\n }\n\n if ('hasMany' in field && field.hasMany && operator === 'contains') {\n operator = 'equals'\n }\n\n if (operator === 'near' || operator === 'within' || operator === 'intersects') {\n throw new APIError(\n `Querying with '${operator}' is not supported with the postgres database adapter.`,\n )\n }\n\n if (operator === 'contains') {\n formattedValue = `%${formattedValue}%`\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n if (formattedValue === false) {\n operator = 'isNull'\n }\n }\n\n return { operator, value: formattedValue }\n}\n"],"names":["APIError","createArrayFromCommaDelineated","fieldAffectsData","sanitizeQueryValue","adapter","field","operator","operatorArg","relationOrPath","val","formattedValue","value","type","endsWith","Array","isArray","allPossibleIDTypes","forEach","idType","push","parseInt","String","toLowerCase","includes","map","arrayVal","parseFloat","length","Number","Date","toISOString","isNaN","parse","undefined","relationTo","collection","payload","collections","mixedType","customIDType","typeMap","number","serial","text","uuid","hasMany"],"mappings":"AAAA,SAASA,QAAQ,EAA+BC,8BAA8B,QAAQ,UAAS;AAC/F,SAASC,gBAAgB,QAAQ,iBAAgB;AAYjD,OAAO,MAAMC,qBAAqB,CAAC,EACjCC,OAAO,EACPC,KAAK,EACLC,UAAUC,WAAW,EACrBC,cAAc,EACdC,GAAG,EACoB;IACvB,IAAIH,WAAWC;IACf,IAAIG,iBAAiBD;IAErB,IAAI,CAACP,iBAAiBG,QAAQ,OAAO;QAAEC;QAAUK,OAAOD;IAAe;IAEvE,IACE,AAACL,CAAAA,MAAMO,IAAI,KAAK,kBAAkBP,MAAMO,IAAI,KAAK,QAAO,KACxD,CAACJ,eAAeK,QAAQ,CAAC,iBACzBC,MAAMC,OAAO,CAACL,iBACd;QACA,MAAMM,qBAA0C,EAAE;QAClDN,eAAeO,OAAO,CAAC,CAACR;YACtB,IAAIL,QAAQc,MAAM,KAAK,UAAU,OAAOT,QAAQ,UAAU;gBACxDO,mBAAmBG,IAAI,CAACV,KAAKW,SAASX;YACxC,OAAO,IAAI,OAAOA,QAAQ,UAAU;gBAClCO,mBAAmBG,IAAI,CAACV;YAC1B,OAAO;gBACLO,mBAAmBG,IAAI,CAACV,KAAKY,OAAOZ;YACtC;QACF;QACAC,iBAAiBM;IACnB;IAEA,kDAAkD;IAClD,IAAIX,MAAMO,IAAI,KAAK,cAAc,OAAOH,QAAQ,UAAU;QACxD,IAAIA,IAAIa,WAAW,OAAO,QAAQZ,iBAAiB;QACnD,IAAID,IAAIa,WAAW,OAAO,SAASZ,iBAAiB;IACtD;IAEA,IAAI;QAAC;QAAO;QAAM;KAAS,CAACa,QAAQ,CAACjB,WAAW;QAC9C,IAAI,OAAOI,mBAAmB,UAAU;YACtCA,iBAAiBT,+BAA+BS;YAEhD,IAAIL,MAAMO,IAAI,KAAK,UAAU;gBAC3BF,iBAAiBA,eAAec,GAAG,CAAC,CAACC,WAAaC,WAAWD;YAC/D;QACF;QAEA,IAAI,CAACX,MAAMC,OAAO,CAACL,mBAAmBA,eAAeiB,MAAM,KAAK,GAAG;YACjE,OAAO;QACT;IACF;IAEA,IAAItB,MAAMO,IAAI,KAAK,YAAY,OAAOF,mBAAmB,UAAU;QACjEA,iBAAiBkB,OAAOnB;IAC1B;IAEA,IAAIJ,MAAMO,IAAI,KAAK,UAAUN,aAAa,UAAU;QAClD,IAAI,OAAOG,QAAQ,UAAU;YAC3BC,iBAAiB,IAAImB,KAAKpB,KAAKqB,WAAW;YAC1C,IAAIF,OAAOG,KAAK,CAACF,KAAKG,KAAK,CAACtB,kBAAkB;gBAC5C,OAAO;oBAAEJ;oBAAUK,OAAOsB;gBAAU;YACtC;QACF,OAAO,IAAI,OAAOxB,QAAQ,UAAUC,iBAAiB,IAAImB,KAAKpB,KAAKqB,WAAW;IAChF;IAEA,IAAIzB,MAAMO,IAAI,KAAK,kBAAkBP,MAAMO,IAAI,KAAK,UAAU;QAC5D,IAAIH,QAAQ,QAAQ;YAClBC,iBAAiB;QACnB,OAAO,IAAI,CAAEA,CAAAA,mBAAmB,QAAQ,OAAOA,mBAAmB,SAAQ,GAAI;YAC5E,sDAAsD;YACtD,IAAIQ;YACJ,IAAI,OAAOb,MAAM6B,UAAU,KAAK,UAAU;gBACxC,MAAMC,aAAa/B,QAAQgC,OAAO,CAACC,WAAW,CAAChC,MAAM6B,UAAU,CAAC;gBAChE,MAAMI,YACJH,WAAWI,YAAY,IAAInC,QAAQc,MAAM;gBAC3C,MAAMsB,UAA6C;oBACjDC,QAAQ;oBACRC,QAAQ;oBACRC,MAAM;oBACNC,MAAM;gBACR;gBACA1B,SAASsB,OAAO,CAACF,UAAU;YAC7B,OAAO;gBACL,yDAAyD;gBACzD,6DAA6D;gBAC7D,MAAMH,aAAa/B,QAAQgC,OAAO,CAACC,WAAW,CAAChC,MAAM6B,UAAU,CAAC,EAAE,CAAC;gBACnEhB,SAASiB,WAAWI,YAAY,IAAInC,QAAQc,MAAM,KAAK,SAAS,SAAS;YAC3E;YACA,IAAIJ,MAAMC,OAAO,CAACL,iBAAiB;gBACjCA,iBAAiBA,eAAec,GAAG,CAAC,CAACb;oBACnC,IAAIO,WAAW,UAAU;wBACvB,OAAOU,OAAOjB;oBAChB;oBACA,IAAIO,WAAW,QAAQ;wBACrB,OAAOG,OAAOV;oBAChB;oBACA,OAAOA;gBACT;YACF,OAAO;gBACL,IAAIO,WAAW,UAAU;oBACvBR,iBAAiBkB,OAAOnB;gBAC1B;gBACA,IAAIS,WAAW,QAAQ;oBACrBR,iBAAiBW,OAAOZ;gBAC1B;YACF;QACF;IACF;IAEA,IAAI,aAAaJ,SAASA,MAAMwC,OAAO,IAAIvC,aAAa,YAAY;QAClEA,WAAW;IACb;IAEA,IAAIA,aAAa,UAAUA,aAAa,YAAYA,aAAa,cAAc;QAC7E,MAAM,IAAIN,SACR,CAAC,eAAe,EAAEM,SAAS,sDAAsD,CAAC;IAEtF;IAEA,IAAIA,aAAa,YAAY;QAC3BI,iBAAiB,CAAC,CAAC,EAAEA,eAAe,CAAC,CAAC;IACxC;IAEA,IAAIJ,aAAa,UAAU;QACzBI,iBAAiBA,mBAAmB,UAAUA,mBAAmB;QACjE,IAAIA,mBAAmB,OAAO;YAC5BJ,WAAW;QACb;IACF;IAEA,OAAO;QAAEA;QAAUK,OAAOD;IAAe;AAC3C,EAAC"}
|
|
1
|
+
{"version":3,"sources":["../../src/queries/sanitizeQueryValue.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\n\nimport { APIError, createArrayFromCommaDelineated, type Field, type TabAsField } from 'payload'\nimport { fieldAffectsData } from 'payload/shared'\nimport { validate as uuidValidate } from 'uuid'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { getCollectionIdType } from '../utilities/getCollectionIdType.js'\nimport { isPolymorphicRelationship } from '../utilities/isPolymorphicRelationship.js'\n\ntype SanitizeQueryValueArgs = {\n adapter: DrizzleAdapter\n columns?: {\n idType: 'number' | 'text' | 'uuid'\n rawColumn: SQL<unknown>\n }[]\n field: Field | TabAsField\n isUUID: boolean\n operator: string\n relationOrPath: string\n val: any\n}\n\ntype SanitizedColumn = {\n rawColumn: SQL<unknown>\n value: unknown\n}\n\nexport const sanitizeQueryValue = ({\n adapter,\n columns,\n field,\n isUUID,\n operator: operatorArg,\n relationOrPath,\n val,\n}: SanitizeQueryValueArgs): {\n columns?: SanitizedColumn[]\n operator: string\n value: unknown\n} => {\n let operator = operatorArg\n let formattedValue = val\n let formattedColumns: SanitizedColumn[]\n\n if (!fieldAffectsData(field)) {\n return { operator, value: formattedValue }\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n !relationOrPath.endsWith('relationTo') &&\n Array.isArray(formattedValue)\n ) {\n const allPossibleIDTypes: (number | string)[] = []\n formattedValue.forEach((val) => {\n if (adapter.idType !== 'uuid' && typeof val === 'string') {\n allPossibleIDTypes.push(val, parseInt(val))\n } else if (typeof val === 'string') {\n allPossibleIDTypes.push(val)\n } else {\n allPossibleIDTypes.push(val, String(val))\n }\n })\n formattedValue = allPossibleIDTypes\n }\n\n // Cast incoming values as proper searchable types\n if (field.type === 'checkbox' && typeof val === 'string') {\n if (val.toLowerCase() === 'true') {\n formattedValue = true\n }\n if (val.toLowerCase() === 'false') {\n formattedValue = false\n }\n }\n\n if (['all', 'in', 'not_in'].includes(operator)) {\n if (typeof formattedValue === 'string') {\n formattedValue = createArrayFromCommaDelineated(formattedValue)\n\n if (field.type === 'number') {\n formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))\n }\n }\n\n if (!Array.isArray(formattedValue) || formattedValue.length === 0) {\n return null\n }\n }\n\n if (field.type === 'number' && typeof formattedValue === 'string') {\n formattedValue = Number(val)\n\n if (Number.isNaN(formattedValue)) {\n formattedValue = null\n }\n }\n\n if (isUUID && typeof formattedValue === 'string') {\n if (!uuidValidate(val)) {\n formattedValue = null\n }\n }\n\n if (field.type === 'date' && operator !== 'exists') {\n if (typeof val === 'string') {\n formattedValue = new Date(val).toISOString()\n if (Number.isNaN(Date.parse(formattedValue))) {\n return { operator, value: undefined }\n }\n } else if (typeof val === 'number') {\n formattedValue = new Date(val).toISOString()\n }\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (val === 'null') {\n formattedValue = null\n } else if (!(formattedValue === null || typeof formattedValue === 'boolean')) {\n // convert the value to the idType of the relationship\n let idType: 'number' | 'text'\n if (typeof field.relationTo === 'string') {\n idType = getCollectionIdType({\n adapter,\n collection: adapter.payload.collections[field.relationTo],\n })\n } else {\n if (isPolymorphicRelationship(val)) {\n if (operator !== 'equals') {\n throw new APIError(\n `Only 'equals' operator is supported for polymorphic relationship object notation. Given - ${operator}`,\n )\n }\n idType = getCollectionIdType({\n adapter,\n collection: adapter.payload.collections[val.relationTo],\n })\n\n return {\n operator,\n value: idType === 'number' ? Number(val.value) : String(val.value),\n }\n }\n\n formattedColumns = columns\n .map(({ idType, rawColumn }) => {\n let formattedValue: number | number[] | string | string[]\n\n if (Array.isArray(val)) {\n formattedValue = val\n .map((eachVal) => {\n let formattedValue: number | string\n\n if (idType === 'number') {\n formattedValue = Number(eachVal)\n\n if (Number.isNaN(formattedValue)) {\n return null\n }\n } else {\n if (idType === 'uuid' && !uuidValidate(eachVal)) {\n return null\n }\n\n formattedValue = String(eachVal)\n }\n\n return formattedValue\n })\n .filter(Boolean) as number[] | string[]\n } else if (idType === 'number') {\n formattedValue = Number(val)\n\n if (Number.isNaN(formattedValue)) {\n return null\n }\n } else {\n formattedValue = String(val)\n }\n\n return {\n rawColumn,\n value: formattedValue,\n }\n })\n .filter(Boolean)\n }\n if (Array.isArray(formattedValue)) {\n formattedValue = formattedValue.map((value) => {\n if (idType === 'number') {\n return Number(value)\n }\n if (idType === 'text') {\n return String(value)\n }\n return value\n })\n } else {\n if (idType === 'number') {\n formattedValue = Number(val)\n }\n if (idType === 'text') {\n formattedValue = String(val)\n }\n }\n }\n }\n\n if ('hasMany' in field && field.hasMany && operator === 'contains') {\n operator = 'equals'\n }\n\n if (operator === 'near' || operator === 'within' || operator === 'intersects') {\n throw new APIError(\n `Querying with '${operator}' is not supported with the postgres database adapter.`,\n )\n }\n\n if (operator === 'contains') {\n formattedValue = `%${formattedValue}%`\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n if (formattedValue === false) {\n operator = 'isNull'\n }\n }\n\n return {\n columns: formattedColumns,\n operator,\n value: formattedValue,\n }\n}\n"],"names":["APIError","createArrayFromCommaDelineated","fieldAffectsData","validate","uuidValidate","getCollectionIdType","isPolymorphicRelationship","sanitizeQueryValue","adapter","columns","field","isUUID","operator","operatorArg","relationOrPath","val","formattedValue","formattedColumns","value","type","endsWith","Array","isArray","allPossibleIDTypes","forEach","idType","push","parseInt","String","toLowerCase","includes","map","arrayVal","parseFloat","length","Number","isNaN","Date","toISOString","parse","undefined","relationTo","collection","payload","collections","rawColumn","eachVal","filter","Boolean","hasMany"],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { QueryPromise, SQL } from 'drizzle-orm';
|
|
2
2
|
import type { ChainedMethods } from '../find/chainMethods.js';
|
|
3
|
-
import type { DrizzleAdapter, DrizzleTransaction } from '../types.js';
|
|
3
|
+
import type { DrizzleAdapter, DrizzleTransaction, GenericColumn } from '../types.js';
|
|
4
4
|
import type { BuildQueryJoinAliases } from './buildQuery.js';
|
|
5
|
-
import { type GenericColumn } from '../types.js';
|
|
6
5
|
type Args = {
|
|
7
6
|
adapter: DrizzleAdapter;
|
|
8
7
|
chainedMethods?: ChainedMethods;
|
|
@@ -15,8 +14,8 @@ type Args = {
|
|
|
15
14
|
/**
|
|
16
15
|
* Selects distinct records from a table only if there are joins that need to be used, otherwise return null
|
|
17
16
|
*/
|
|
18
|
-
export declare const selectDistinct: ({ adapter, chainedMethods, db, joins, selectFields, tableName, where, }: Args) => QueryPromise<
|
|
17
|
+
export declare const selectDistinct: ({ adapter, chainedMethods, db, joins, selectFields, tableName, where, }: Args) => QueryPromise<{
|
|
19
18
|
id: number | string;
|
|
20
|
-
}[]
|
|
19
|
+
}[] & Record<string, GenericColumn>>;
|
|
21
20
|
export {};
|
|
22
21
|
//# sourceMappingURL=selectDistinct.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectDistinct.d.ts","sourceRoot":"","sources":["../../src/queries/selectDistinct.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,
|
|
1
|
+
{"version":3,"file":"selectDistinct.d.ts","sourceRoot":"","sources":["../../src/queries/selectDistinct.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,aAAa,EAId,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAI5D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,KAAK,EAAE,qBAAqB,CAAA;IAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,GAAG,CAAA;CACX,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,4EAQxB,IAAI,KAAG,YAAY,CAAC;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAgC/E,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/queries/selectDistinct.ts"],"sourcesContent":["import type { QueryPromise, SQL } from 'drizzle-orm'\nimport type { SQLiteColumn } from 'drizzle-orm/sqlite-core'\n\nimport type { ChainedMethods } from '../find/chainMethods.js'\nimport type {\n DrizzleAdapter,\n DrizzleTransaction,\n GenericPgColumn,\n TransactionPg,\n TransactionSQLite,\n} from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { chainMethods } from '../find/chainMethods.js'\
|
|
1
|
+
{"version":3,"sources":["../../src/queries/selectDistinct.ts"],"sourcesContent":["import type { QueryPromise, SQL } from 'drizzle-orm'\nimport type { SQLiteColumn } from 'drizzle-orm/sqlite-core'\n\nimport type { ChainedMethods } from '../find/chainMethods.js'\nimport type {\n DrizzleAdapter,\n DrizzleTransaction,\n GenericColumn,\n GenericPgColumn,\n TransactionPg,\n TransactionSQLite,\n} from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { chainMethods } from '../find/chainMethods.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n chainedMethods?: ChainedMethods\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n joins: BuildQueryJoinAliases\n selectFields: Record<string, GenericColumn>\n tableName: string\n where: SQL\n}\n\n/**\n * Selects distinct records from a table only if there are joins that need to be used, otherwise return null\n */\nexport const selectDistinct = ({\n adapter,\n chainedMethods = [],\n db,\n joins,\n selectFields,\n tableName,\n where,\n}: Args): QueryPromise<{ id: number | string }[] & Record<string, GenericColumn>> => {\n if (Object.keys(joins).length > 0) {\n if (where) {\n chainedMethods.push({ args: [where], method: 'where' })\n }\n\n joins.forEach(({ condition, table }) => {\n chainedMethods.push({\n args: [table, condition],\n method: 'leftJoin',\n })\n })\n\n let query\n const table = adapter.tables[tableName]\n\n if (adapter.name === 'postgres') {\n query = (db as TransactionPg)\n .selectDistinct(selectFields as Record<string, GenericPgColumn>)\n .from(table)\n }\n if (adapter.name === 'sqlite') {\n query = (db as TransactionSQLite)\n .selectDistinct(selectFields as Record<string, SQLiteColumn>)\n .from(table)\n }\n\n return chainMethods({\n methods: chainedMethods,\n query,\n })\n }\n}\n"],"names":["chainMethods","selectDistinct","adapter","chainedMethods","db","joins","selectFields","tableName","where","Object","keys","length","push","args","method","forEach","condition","table","query","tables","name","from","methods"],"mappings":"AAcA,SAASA,YAAY,QAAQ,0BAAyB;AAYtD;;CAEC,GACD,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,OAAO,EACPC,iBAAiB,EAAE,EACnBC,EAAE,EACFC,KAAK,EACLC,YAAY,EACZC,SAAS,EACTC,KAAK,EACA;IACL,IAAIC,OAAOC,IAAI,CAACL,OAAOM,MAAM,GAAG,GAAG;QACjC,IAAIH,OAAO;YACTL,eAAeS,IAAI,CAAC;gBAAEC,MAAM;oBAACL;iBAAM;gBAAEM,QAAQ;YAAQ;QACvD;QAEAT,MAAMU,OAAO,CAAC,CAAC,EAAEC,SAAS,EAAEC,KAAK,EAAE;YACjCd,eAAeS,IAAI,CAAC;gBAClBC,MAAM;oBAACI;oBAAOD;iBAAU;gBACxBF,QAAQ;YACV;QACF;QAEA,IAAII;QACJ,MAAMD,QAAQf,QAAQiB,MAAM,CAACZ,UAAU;QAEvC,IAAIL,QAAQkB,IAAI,KAAK,YAAY;YAC/BF,QAAQ,AAACd,GACNH,cAAc,CAACK,cACfe,IAAI,CAACJ;QACV;QACA,IAAIf,QAAQkB,IAAI,KAAK,UAAU;YAC7BF,QAAQ,AAACd,GACNH,cAAc,CAACK,cACfe,IAAI,CAACJ;QACV;QAEA,OAAOjB,aAAa;YAClBsB,SAASnB;YACTe;QACF;IACF;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryDrafts.d.ts","sourceRoot":"","sources":["../src/queryDrafts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,WAAW,EAA6B,MAAM,SAAS,CAAA;AASrF,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"queryDrafts.d.ts","sourceRoot":"","sources":["../src/queryDrafts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,WAAW,EAA6B,MAAM,SAAS,CAAA;AASrF,eAAO,MAAM,WAAW,EAAE,WAsCzB,CAAA"}
|
package/dist/queryDrafts.js
CHANGED
|
@@ -4,7 +4,7 @@ import { findMany } from './find/findMany.js';
|
|
|
4
4
|
export const queryDrafts = async function queryDrafts({ collection, limit, locale, page = 1, pagination, req = {}, sort, where }) {
|
|
5
5
|
const collectionConfig = this.payload.collections[collection].config;
|
|
6
6
|
const tableName = this.tableNameMap.get(`_${toSnakeCase(collectionConfig.slug)}${this.versionsSuffix}`);
|
|
7
|
-
const fields = buildVersionCollectionFields(collectionConfig);
|
|
7
|
+
const fields = buildVersionCollectionFields(this.payload.config, collectionConfig);
|
|
8
8
|
const combinedWhere = combineQueries({
|
|
9
9
|
latest: {
|
|
10
10
|
equals: true
|
|
@@ -25,7 +25,6 @@ export const queryDrafts = async function queryDrafts({ collection, limit, local
|
|
|
25
25
|
return {
|
|
26
26
|
...result,
|
|
27
27
|
docs: result.docs.map((doc)=>{
|
|
28
|
-
// eslint-disable-next-line no-param-reassign
|
|
29
28
|
doc = {
|
|
30
29
|
id: doc.parent,
|
|
31
30
|
...doc.version,
|
package/dist/queryDrafts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/queryDrafts.ts"],"sourcesContent":["import type { PayloadRequest, QueryDrafts, SanitizedCollectionConfig } from 'payload'\n\nimport { buildVersionCollectionFields, combineQueries } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { findMany } from './find/findMany.js'\n\nexport const queryDrafts: QueryDrafts = async function queryDrafts(\n this: DrizzleAdapter,\n { collection, limit, locale, page = 1, pagination, req = {} as PayloadRequest, sort, where },\n) {\n const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config\n const tableName = this.tableNameMap.get(\n `_${toSnakeCase(collectionConfig.slug)}${this.versionsSuffix}`,\n )\n const fields = buildVersionCollectionFields(collectionConfig)\n\n const combinedWhere = combineQueries({ latest: { equals: true } }, where)\n\n const result = await findMany({\n adapter: this,\n fields,\n limit,\n locale,\n page,\n pagination,\n req,\n sort,\n tableName,\n where: combinedWhere,\n })\n\n return {\n ...result,\n docs: result.docs.map((doc) => {\n
|
|
1
|
+
{"version":3,"sources":["../src/queryDrafts.ts"],"sourcesContent":["import type { PayloadRequest, QueryDrafts, SanitizedCollectionConfig } from 'payload'\n\nimport { buildVersionCollectionFields, combineQueries } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { findMany } from './find/findMany.js'\n\nexport const queryDrafts: QueryDrafts = async function queryDrafts(\n this: DrizzleAdapter,\n { collection, limit, locale, page = 1, pagination, req = {} as PayloadRequest, sort, where },\n) {\n const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config\n const tableName = this.tableNameMap.get(\n `_${toSnakeCase(collectionConfig.slug)}${this.versionsSuffix}`,\n )\n const fields = buildVersionCollectionFields(this.payload.config, collectionConfig)\n\n const combinedWhere = combineQueries({ latest: { equals: true } }, where)\n\n const result = await findMany({\n adapter: this,\n fields,\n limit,\n locale,\n page,\n pagination,\n req,\n sort,\n tableName,\n where: combinedWhere,\n })\n\n return {\n ...result,\n docs: result.docs.map((doc) => {\n doc = {\n id: doc.parent,\n ...doc.version,\n createdAt: doc.createdAt,\n updatedAt: doc.updatedAt,\n }\n\n return doc\n }),\n }\n}\n"],"names":["buildVersionCollectionFields","combineQueries","toSnakeCase","findMany","queryDrafts","collection","limit","locale","page","pagination","req","sort","where","collectionConfig","payload","collections","config","tableName","tableNameMap","get","slug","versionsSuffix","fields","combinedWhere","latest","equals","result","adapter","docs","map","doc","id","parent","version","createdAt","updatedAt"],"mappings":"AAEA,SAASA,4BAA4B,EAAEC,cAAc,QAAQ,UAAS;AACtE,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,QAAQ,QAAQ,qBAAoB;AAE7C,OAAO,MAAMC,cAA2B,eAAeA,YAErD,EAAEC,UAAU,EAAEC,KAAK,EAAEC,MAAM,EAAEC,OAAO,CAAC,EAAEC,UAAU,EAAEC,MAAM,CAAC,CAAmB,EAAEC,IAAI,EAAEC,KAAK,EAAE;IAE5F,MAAMC,mBAA8C,IAAI,CAACC,OAAO,CAACC,WAAW,CAACV,WAAW,CAACW,MAAM;IAC/F,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CACrC,CAAC,CAAC,EAAEjB,YAAYW,iBAAiBO,IAAI,EAAE,EAAE,IAAI,CAACC,cAAc,CAAC,CAAC;IAEhE,MAAMC,SAAStB,6BAA6B,IAAI,CAACc,OAAO,CAACE,MAAM,EAAEH;IAEjE,MAAMU,gBAAgBtB,eAAe;QAAEuB,QAAQ;YAAEC,QAAQ;QAAK;IAAE,GAAGb;IAEnE,MAAMc,SAAS,MAAMvB,SAAS;QAC5BwB,SAAS,IAAI;QACbL;QACAhB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAM;QACAL,OAAOW;IACT;IAEA,OAAO;QACL,GAAGG,MAAM;QACTE,MAAMF,OAAOE,IAAI,CAACC,GAAG,CAAC,CAACC;YACrBA,MAAM;gBACJC,IAAID,IAAIE,MAAM;gBACd,GAAGF,IAAIG,OAAO;gBACdC,WAAWJ,IAAII,SAAS;gBACxBC,WAAWL,IAAIK,SAAS;YAC1B;YAEA,OAAOL;QACT;IACF;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"beginTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/beginTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM/C,eAAO,MAAM,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"beginTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/beginTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM/C,eAAO,MAAM,gBAAgB,EAAE,gBA2D9B,CAAA"}
|
|
@@ -24,6 +24,7 @@ export const beginTransaction = async function beginTransaction(options) {
|
|
|
24
24
|
return done;
|
|
25
25
|
};
|
|
26
26
|
reject = ()=>{
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
|
|
27
28
|
rej();
|
|
28
29
|
return done;
|
|
29
30
|
};
|
|
@@ -41,7 +42,10 @@ export const beginTransaction = async function beginTransaction(options) {
|
|
|
41
42
|
resolve
|
|
42
43
|
};
|
|
43
44
|
} catch (err) {
|
|
44
|
-
this.payload.logger.error(
|
|
45
|
+
this.payload.logger.error({
|
|
46
|
+
err,
|
|
47
|
+
msg: `Error: cannot begin transaction: ${err.message}`
|
|
48
|
+
});
|
|
45
49
|
process.exit(1);
|
|
46
50
|
}
|
|
47
51
|
return id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/transactions/beginTransaction.ts"],"sourcesContent":["import type { BeginTransaction } from 'payload'\n\nimport { v4 as uuid } from 'uuid'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\nexport const beginTransaction: BeginTransaction = async function beginTransaction(\n this: DrizzleAdapter,\n options: DrizzleAdapter['transactionOptions'],\n) {\n let id\n try {\n id = uuid()\n\n let reject: () => Promise<void>\n let resolve: () => Promise<void>\n let transaction: DrizzleTransaction\n\n let transactionReady: () => void\n\n // Await initialization here\n // Prevent race conditions where the adapter may be\n // re-initializing, and `this.drizzle` is potentially undefined\n await this.initializing\n\n // Drizzle only exposes a transactions API that is sufficient if you\n // can directly pass around the `tx` argument. But our operations are spread\n // over many files and we don't want to pass the `tx` around like that,\n // so instead, we \"lift\" up the `resolve` and `reject` methods\n // and will call them in our respective transaction methods\n const done = this.drizzle\n .transaction(async (tx) => {\n transaction = tx\n await new Promise<void>((res, rej) => {\n resolve = () => {\n res()\n return done\n }\n reject = () => {\n rej()\n return done\n }\n transactionReady()\n })\n }, options || this.transactionOptions)\n .catch(() => {\n // swallow\n })\n\n // Need to wait until the transaction is ready\n // before binding its `resolve` and `reject` methods below\n await new Promise<void>((resolve) => (transactionReady = resolve))\n\n this.sessions[id] = {\n db: transaction,\n reject,\n resolve,\n }\n } catch (err) {\n this.payload.logger.error(`Error: cannot begin transaction: ${err.message}
|
|
1
|
+
{"version":3,"sources":["../../src/transactions/beginTransaction.ts"],"sourcesContent":["import type { BeginTransaction } from 'payload'\n\nimport { v4 as uuid } from 'uuid'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\nexport const beginTransaction: BeginTransaction = async function beginTransaction(\n this: DrizzleAdapter,\n options: DrizzleAdapter['transactionOptions'],\n) {\n let id\n try {\n id = uuid()\n\n let reject: () => Promise<void>\n let resolve: () => Promise<void>\n let transaction: DrizzleTransaction\n\n let transactionReady: () => void\n\n // Await initialization here\n // Prevent race conditions where the adapter may be\n // re-initializing, and `this.drizzle` is potentially undefined\n await this.initializing\n\n // Drizzle only exposes a transactions API that is sufficient if you\n // can directly pass around the `tx` argument. But our operations are spread\n // over many files and we don't want to pass the `tx` around like that,\n // so instead, we \"lift\" up the `resolve` and `reject` methods\n // and will call them in our respective transaction methods\n const done = this.drizzle\n .transaction(async (tx) => {\n transaction = tx\n await new Promise<void>((res, rej) => {\n resolve = () => {\n res()\n return done\n }\n reject = () => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n rej()\n return done\n }\n transactionReady()\n })\n }, options || this.transactionOptions)\n .catch(() => {\n // swallow\n })\n\n // Need to wait until the transaction is ready\n // before binding its `resolve` and `reject` methods below\n await new Promise<void>((resolve) => (transactionReady = resolve))\n\n this.sessions[id] = {\n db: transaction,\n reject,\n resolve,\n }\n } catch (err) {\n this.payload.logger.error({ err, msg: `Error: cannot begin transaction: ${err.message}` })\n process.exit(1)\n }\n\n return id\n}\n"],"names":["v4","uuid","beginTransaction","options","id","reject","resolve","transaction","transactionReady","initializing","done","drizzle","tx","Promise","res","rej","transactionOptions","catch","sessions","db","err","payload","logger","error","msg","message","process","exit"],"mappings":"AAEA,SAASA,MAAMC,IAAI,QAAQ,OAAM;AAIjC,OAAO,MAAMC,mBAAqC,eAAeA,iBAE/DC,OAA6C;IAE7C,IAAIC;IACJ,IAAI;QACFA,KAAKH;QAEL,IAAII;QACJ,IAAIC;QACJ,IAAIC;QAEJ,IAAIC;QAEJ,4BAA4B;QAC5B,mDAAmD;QACnD,+DAA+D;QAC/D,MAAM,IAAI,CAACC,YAAY;QAEvB,oEAAoE;QACpE,4EAA4E;QAC5E,uEAAuE;QACvE,8DAA8D;QAC9D,2DAA2D;QAC3D,MAAMC,OAAO,IAAI,CAACC,OAAO,CACtBJ,WAAW,CAAC,OAAOK;YAClBL,cAAcK;YACd,MAAM,IAAIC,QAAc,CAACC,KAAKC;gBAC5BT,UAAU;oBACRQ;oBACA,OAAOJ;gBACT;gBACAL,SAAS;oBACP,2EAA2E;oBAC3EU;oBACA,OAAOL;gBACT;gBACAF;YACF;QACF,GAAGL,WAAW,IAAI,CAACa,kBAAkB,EACpCC,KAAK,CAAC;QACL,UAAU;QACZ;QAEF,8CAA8C;QAC9C,0DAA0D;QAC1D,MAAM,IAAIJ,QAAc,CAACP,UAAaE,mBAAmBF;QAEzD,IAAI,CAACY,QAAQ,CAACd,GAAG,GAAG;YAClBe,IAAIZ;YACJF;YACAC;QACF;IACF,EAAE,OAAOc,KAAK;QACZ,IAAI,CAACC,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;YAAEH;YAAKI,KAAK,CAAC,iCAAiC,EAAEJ,IAAIK,OAAO,CAAC,CAAC;QAAC;QACxFC,QAAQC,IAAI,CAAC;IACf;IAEA,OAAOvB;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/commitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/commitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD,eAAO,MAAM,iBAAiB,EAAE,iBAiB/B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/transactions/commitTransaction.ts"],"sourcesContent":["import type { CommitTransaction } from 'payload'\n\nexport const commitTransaction: CommitTransaction = async function commitTransaction(id) {\n if (id instanceof Promise) return\n\n // if the session was deleted it has already been aborted\n if (!this.sessions[id]) {\n return\n }\n\n try {\n await this.sessions[id].resolve()\n } catch (err: unknown) {\n await this.sessions[id].reject()\n }\n\n delete this.sessions[id]\n}\n"],"names":["commitTransaction","id","Promise","sessions","resolve","err","reject"],"mappings":"AAEA,OAAO,MAAMA,oBAAuC,eAAeA,kBAAkBC,EAAE;IACrF,IAAIA,cAAcC,SAAS;
|
|
1
|
+
{"version":3,"sources":["../../src/transactions/commitTransaction.ts"],"sourcesContent":["import type { CommitTransaction } from 'payload'\n\nexport const commitTransaction: CommitTransaction = async function commitTransaction(id) {\n if (id instanceof Promise) {\n return\n }\n\n // if the session was deleted it has already been aborted\n if (!this.sessions[id]) {\n return\n }\n\n try {\n await this.sessions[id].resolve()\n } catch (err: unknown) {\n await this.sessions[id].reject()\n }\n\n delete this.sessions[id]\n}\n"],"names":["commitTransaction","id","Promise","sessions","resolve","err","reject"],"mappings":"AAEA,OAAO,MAAMA,oBAAuC,eAAeA,kBAAkBC,EAAE;IACrF,IAAIA,cAAcC,SAAS;QACzB;IACF;IAEA,yDAAyD;IACzD,IAAI,CAAC,IAAI,CAACC,QAAQ,CAACF,GAAG,EAAE;QACtB;IACF;IAEA,IAAI;QACF,MAAM,IAAI,CAACE,QAAQ,CAACF,GAAG,CAACG,OAAO;IACjC,EAAE,OAAOC,KAAc;QACrB,MAAM,IAAI,CAACF,QAAQ,CAACF,GAAG,CAACK,MAAM;IAChC;IAEA,OAAO,IAAI,CAACH,QAAQ,CAACF,GAAG;AAC1B,EAAC"}
|
|
@@ -4,7 +4,8 @@ type Args = {
|
|
|
4
4
|
locale?: string;
|
|
5
5
|
numberRows: Record<string, unknown>[];
|
|
6
6
|
ref: Record<string, unknown>;
|
|
7
|
+
withinArrayOrBlockLocale?: string;
|
|
7
8
|
};
|
|
8
|
-
export declare const transformHasManyNumber: ({ field, locale, numberRows, ref }: Args) => void;
|
|
9
|
+
export declare const transformHasManyNumber: ({ field, locale, numberRows, ref, withinArrayOrBlockLocale, }: Args) => void;
|
|
9
10
|
export {};
|
|
10
11
|
//# sourceMappingURL=hasManyNumber.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasManyNumber.d.ts","sourceRoot":"","sources":["../../../src/transform/read/hasManyNumber.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hasManyNumber.d.ts","sourceRoot":"","sources":["../../../src/transform/read/hasManyNumber.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,WAAW,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACrC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,sBAAsB,kEAMhC,IAAI,SAoBN,CAAA"}
|