@payloadcms/drizzle 4.0.0-internal.293e026 → 4.0.0-internal.2f0d313
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/LICENSE.md +1 -1
- package/dist/createTableName.d.ts.map +1 -1
- package/dist/createTableName.js +2 -7
- package/dist/createTableName.js.map +1 -1
- package/dist/exports/postgres.d.ts +3 -0
- package/dist/exports/postgres.d.ts.map +1 -1
- package/dist/exports/postgres.js +3 -0
- package/dist/exports/postgres.js.map +1 -1
- package/dist/exports/sqlite.d.ts +1 -0
- package/dist/exports/sqlite.d.ts.map +1 -1
- package/dist/exports/sqlite.js +1 -0
- package/dist/exports/sqlite.js.map +1 -1
- package/dist/find/buildFindManyArgs.d.ts.map +1 -1
- package/dist/find/findMany.d.ts.map +1 -1
- package/dist/find/traverseFields.d.ts.map +1 -1
- package/dist/find/traverseFields.js +0 -1
- package/dist/find/traverseFields.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/postgres/createDatabase.d.ts.map +1 -1
- package/dist/postgres/createExtensions.d.ts.map +1 -1
- package/dist/postgres/createJSONQuery/index.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/localize-status/index.d.ts +11 -0
- package/dist/postgres/predefinedMigrations/localize-status/index.d.ts.map +1 -0
- package/dist/postgres/predefinedMigrations/localize-status/index.js +296 -0
- package/dist/postgres/predefinedMigrations/localize-status/index.js.map +1 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.d.ts +13 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.d.ts.map +1 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.js +51 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.js.map +1 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.d.ts +13 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.d.ts.map +1 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.js +54 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.js.map +1 -0
- package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/index.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/migrateRelationships.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/traverseFields.d.ts.map +1 -1
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js +91 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js.map +1 -0
- package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
- package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
- package/dist/postgres/query/postgresUnaccent.js +40 -0
- package/dist/postgres/query/postgresUnaccent.js.map +1 -0
- package/dist/postgres/query/postgresUnaccent.spec.js +71 -0
- package/dist/postgres/query/postgresUnaccent.spec.js.map +1 -0
- package/dist/postgres/schema/buildDrizzleTable.d.ts.map +1 -1
- package/dist/postgres/schema/geometryColumn.d.ts +2 -2
- package/dist/postgres/schema/geometryColumn.d.ts.map +1 -1
- package/dist/postgres/types.d.ts +13 -2
- package/dist/postgres/types.d.ts.map +1 -1
- package/dist/postgres/types.js.map +1 -1
- package/dist/queries/addJoinTable.d.ts +1 -1
- package/dist/queries/addJoinTable.d.ts.map +1 -1
- package/dist/queries/buildOperatorConstraint.d.ts +22 -0
- package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
- package/dist/queries/buildOperatorConstraint.js +63 -0
- package/dist/queries/buildOperatorConstraint.js.map +1 -0
- package/dist/queries/buildOperatorConstraint.spec.js +348 -0
- package/dist/queries/buildOperatorConstraint.spec.js.map +1 -0
- package/dist/queries/buildOrderBy.d.ts +1 -1
- package/dist/queries/buildOrderBy.d.ts.map +1 -1
- package/dist/queries/buildQuery.d.ts.map +1 -1
- package/dist/queries/getTableAlias.d.ts.map +1 -1
- package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
- package/dist/queries/operatorMap.d.ts +7 -3
- package/dist/queries/operatorMap.d.ts.map +1 -1
- package/dist/queries/operatorMap.js.map +1 -1
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +53 -6
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
- package/dist/queries/selectDistinct.d.ts.map +1 -1
- package/dist/queries/validateOperatorHandlers.d.ts +8 -0
- package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
- package/dist/queries/validateOperatorHandlers.js +30 -0
- package/dist/queries/validateOperatorHandlers.js.map +1 -0
- package/dist/queries/validateOperatorHandlers.spec.js +142 -0
- package/dist/queries/validateOperatorHandlers.spec.js.map +1 -0
- package/dist/schema/build.d.ts.map +1 -1
- package/dist/schema/build.js +5 -4
- package/dist/schema/build.js.map +1 -1
- package/dist/schema/buildDrizzleRelations.d.ts.map +1 -1
- package/dist/schema/buildRawSchema.d.ts.map +1 -1
- package/dist/schema/buildRawSchema.spec.js +230 -0
- package/dist/schema/buildRawSchema.spec.js.map +1 -0
- package/dist/schema/idToUUID.d.ts.map +1 -1
- package/dist/schema/traverseFields.d.ts.map +1 -1
- package/dist/schema/traverseFields.js +6 -5
- package/dist/schema/traverseFields.js.map +1 -1
- package/dist/schema/withDefault.d.ts.map +1 -1
- package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -1
- package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
- package/dist/sqlite/predefinedMigrations/localize-status/index.d.ts +28 -0
- package/dist/sqlite/predefinedMigrations/localize-status/index.d.ts.map +1 -0
- package/dist/sqlite/predefinedMigrations/localize-status/index.js +198 -0
- package/dist/sqlite/predefinedMigrations/localize-status/index.js.map +1 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.d.ts +12 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.d.ts.map +1 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.js +24 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.js.map +1 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.d.ts +12 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.d.ts.map +1 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.js +28 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.js.map +1 -0
- package/dist/transform/read/hasManyNumber.d.ts.map +1 -1
- package/dist/transform/read/hasManyText.d.ts.map +1 -1
- package/dist/transform/read/index.d.ts.map +1 -1
- package/dist/transform/read/relationship.d.ts.map +1 -1
- package/dist/transform/read/traverseFields.d.ts.map +1 -1
- package/dist/transform/write/array.d.ts.map +1 -1
- package/dist/transform/write/blocks.d.ts.map +1 -1
- package/dist/transform/write/index.d.ts.map +1 -1
- package/dist/transform/write/numbers.d.ts.map +1 -1
- package/dist/transform/write/relationships.d.ts.map +1 -1
- package/dist/transform/write/selects.d.ts.map +1 -1
- package/dist/transform/write/texts.d.ts.map +1 -1
- package/dist/transform/write/traverseFields.d.ts.map +1 -1
- package/dist/transform/write/traverseFields.js +0 -1
- package/dist/transform/write/traverseFields.js.map +1 -1
- package/dist/types.d.ts +50 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -3
- package/dist/types.js.map +1 -1
- package/dist/updateJobs.d.ts.map +1 -1
- package/dist/updateJobs.js +37 -0
- package/dist/updateJobs.js.map +1 -1
- package/dist/upsertRow/deleteExistingArrayRows.d.ts.map +1 -1
- package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
- package/dist/upsertRow/handleUpsertError.d.ts.map +1 -1
- package/dist/upsertRow/handleUpsertError.js +2 -1
- package/dist/upsertRow/handleUpsertError.js.map +1 -1
- package/dist/upsertRow/handleUpsertError.spec.js +42 -0
- package/dist/upsertRow/handleUpsertError.spec.js.map +1 -0
- package/dist/upsertRow/index.d.ts.map +1 -1
- package/dist/upsertRow/index.js +5 -2
- package/dist/upsertRow/index.js.map +1 -1
- package/dist/upsertRow/insertArrays.d.ts.map +1 -1
- package/dist/upsertRow/insertArrays.js +2 -1
- package/dist/upsertRow/insertArrays.js.map +1 -1
- package/dist/upsertRow/shouldUseOptimizedUpsertRow.d.ts.map +1 -1
- package/dist/utilities/appendPrefixToKeys.d.ts.map +1 -1
- package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
- package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
- package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
- package/dist/utilities/buildIndexName.d.ts.map +1 -1
- package/dist/utilities/createBlocksMap.d.ts.map +1 -1
- package/dist/utilities/createRelationshipMap.d.ts.map +1 -1
- package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
- package/dist/utilities/escapeSQLValue.d.ts.map +1 -1
- package/dist/utilities/executeSchemaHooks.d.ts.map +1 -1
- package/dist/utilities/extendDrizzleTable.d.ts.map +1 -1
- package/dist/utilities/getArrayRelationName.d.ts.map +1 -1
- package/dist/utilities/getCollectionIdType.d.ts.map +1 -1
- package/dist/utilities/getMigrationTemplate.d.ts.map +1 -1
- package/dist/utilities/getNameFromDrizzleTable.d.ts.map +1 -1
- package/dist/utilities/getPrimaryDb.d.ts +1 -1
- package/dist/utilities/getPrimaryDb.d.ts.map +1 -1
- package/dist/utilities/getTransaction.d.ts +1 -1
- package/dist/utilities/getTransaction.d.ts.map +1 -1
- package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
- package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -1
- package/dist/utilities/isUUIDType.d.ts.map +1 -1
- package/dist/utilities/json.d.ts.map +1 -1
- package/dist/utilities/migrationTableExists.d.ts.map +1 -1
- package/dist/utilities/parseError.d.ts.map +1 -1
- package/dist/utilities/pushDevSchema.d.ts.map +1 -1
- package/dist/utilities/rawConstraint.d.ts.map +1 -1
- package/dist/utilities/sanitizePathSegment.d.ts.map +1 -1
- package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
- package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
- package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
- package/dist/utilities/validateIdentifierLength.d.ts +7 -0
- package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
- package/dist/utilities/validateIdentifierLength.js +14 -0
- package/dist/utilities/validateIdentifierLength.js.map +1 -0
- package/dist/utilities/validateIdentifierLength.spec.js +19 -0
- package/dist/utilities/validateIdentifierLength.spec.js.map +1 -0
- package/package.json +3 -3
- package/dist/find/chainMethods.d.ts +0 -20
- package/dist/find/chainMethods.d.ts.map +0 -1
- package/dist/find/chainMethods.js +0 -16
- package/dist/find/chainMethods.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { FlattenedField, Operator, Sort, Where } from 'payload'\n\nimport { and, getTableName, isNotNull, isNull, ne, notInArray, or, sql } from 'drizzle-orm'\nimport { PgUUID } from 'drizzle-orm/pg-core'\nimport { APIError, QueryError } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { escapeSQLValue } from '../utilities/escapeSQLValue.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { isValidStringID } from '../utilities/isValidStringID.js'\nimport { DistinctSymbol } from '../utilities/rawConstraint.js'\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\nexport type QueryContext = { rawSort?: SQL; sort: Sort }\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n context: QueryContext\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized: boolean\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n where: Where\n}\n\nexport function parseParams({\n adapter,\n aliasTable,\n context,\n fields,\n joins,\n locale,\n parentIsLocalized,\n selectFields,\n selectLocale,\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 aliasTable,\n context,\n fields,\n joins,\n locale,\n parentIsLocalized,\n selectFields,\n selectLocale,\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 (validOperatorSet.has(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 aliasTable,\n collectionPath: relationOrPath,\n fields,\n joins,\n locale,\n parentIsLocalized,\n pathSegments: relationOrPath.replace(/__/g, '.').split('.'),\n selectFields,\n selectLocale,\n tableName,\n value: val,\n })\n\n const resolvedColumn =\n rawColumn ||\n (aliasTable && tableName === getNameFromDrizzleTable(table)\n ? aliasTable[columnName]\n : table[columnName])\n\n if (val === DistinctSymbol) {\n selectFields['_selected'] = resolvedColumn\n break\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 (field.type === 'blocks' && adapter.blocksAsJSON)) &&\n Array.isArray(pathSegments) &&\n pathSegments.length > 1\n ) {\n if (adapter.name === 'postgres') {\n const constraint = adapter.createJSONQuery({\n column: rawColumn || table[columnName],\n operator,\n pathSegments,\n value: val,\n })\n\n constraints.push(sql.raw(constraint))\n break\n }\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 not_like: { operator: 'not like', wildcard: '%' },\n }\n\n let formattedValue = val\n if (\n adapter.name === 'sqlite' &&\n operator === 'equals' &&\n (typeof val === 'number' || typeof val === 'boolean')\n ) {\n formattedValue = val\n } else if (['in', 'not_in'].includes(operator) && Array.isArray(val)) {\n formattedValue = `(${val.map((v) => `${escapeSQLValue(v)}`).join(',')})`\n } else {\n formattedValue = `'${operatorKeys[operator].wildcard}${escapeSQLValue(val)}${operatorKeys[operator].wildcard}'`\n }\n if (operator === 'exists') {\n formattedValue = ''\n }\n\n let jsonQuerySelector = `${table[columnName].name}${jsonQuery}`\n\n if (adapter.name === 'sqlite' && operator === 'not_like') {\n jsonQuerySelector = `COALESCE(${table[columnName].name}${jsonQuery}, '')`\n }\n\n const rawSQLQuery = `${jsonQuerySelector} ${operatorKeys[operator].operator} ${formattedValue}`\n\n constraints.push(sql.raw(rawSQLQuery))\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' ||\n field.type === 'relationship' ||\n field.type === 'upload' ||\n 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(resolvedColumn),\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ne<any>(resolvedColumn, queryValue),\n ),\n )\n break\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n Array.isArray(queryValue) &&\n queryOperator === '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(resolvedColumn))\n break\n }\n\n if (operator === 'not_equals' && queryValue === null) {\n constraints.push(isNotNull(resolvedColumn))\n break\n }\n\n if (field.type === 'point' && adapter.name === 'postgres') {\n switch (operator) {\n case 'intersects': {\n constraints.push(\n sql`ST_Intersects(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n case 'near': {\n const [lng, lat, maxDistance, minDistance] = queryValue as number[]\n const geoConstraints: SQL[] = []\n\n if (typeof maxDistance === 'number' && !Number.isNaN(maxDistance)) {\n geoConstraints.push(\n sql`ST_DWithin(${table[columnName]}::geography, ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)::geography, ${maxDistance})`,\n )\n }\n\n if (typeof minDistance === 'number' && !Number.isNaN(minDistance)) {\n geoConstraints.push(\n sql`ST_Distance(${table[columnName]}::geography, ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)::geography) >= ${minDistance}`,\n )\n }\n if (geoConstraints.length) {\n context.sort = relationOrPath\n context.rawSort = sql`${table[columnName]} <-> ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)`\n constraints.push(and(...geoConstraints))\n }\n break\n }\n\n case 'within': {\n constraints.push(\n sql`ST_Within(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n default:\n break\n }\n break\n }\n\n const orConditions: SQL<unknown>[] = []\n let resolvedQueryValue = queryValue\n if (\n operator === 'in' &&\n Array.isArray(queryValue) &&\n queryValue.some((v) => v === null)\n ) {\n orConditions.push(isNull(resolvedColumn))\n resolvedQueryValue = queryValue.filter((v) => v !== null)\n }\n\n if (\n operator === 'contains' &&\n Array.isArray(queryValue) &&\n 'hasMany' in field &&\n field.hasMany &&\n ['number', 'select', 'text'].includes(field.type)\n ) {\n // Create OR conditions for each value in the array\n orConditions.push(\n ...queryValue.map((val) =>\n adapter.operators[queryOperator](resolvedColumn, val),\n ),\n )\n // Set constraint to combine all OR conditions\n const constraint = orConditions.length > 0 ? or(...orConditions) : undefined\n if (constraint) {\n constraints.push(constraint)\n }\n break\n }\n\n let constraint = adapter.operators[queryOperator](\n resolvedColumn,\n resolvedQueryValue,\n )\n\n if (\n adapter.limitedBoundParameters &&\n (operator === 'in' || operator === 'not_in') &&\n relationOrPath === 'id' &&\n Array.isArray(queryValue)\n ) {\n let isInvalid = false\n for (const val of queryValue) {\n if (typeof val === 'number' || val === null) {\n continue\n }\n if (typeof val === 'string') {\n if (!isValidStringID(val)) {\n isInvalid = true\n break\n } else {\n continue\n }\n }\n isInvalid = true\n break\n }\n\n if (isInvalid) {\n throw new APIError(`Invalid ID value in ${JSON.stringify(queryValue)}`)\n }\n\n constraints.push(\n sql.raw(\n `\"${getTableName(resolvedColumn.table)}\".\"${resolvedColumn.name}\" ${operator === 'in' ? 'IN' : 'NOT IN'} (${queryValue\n .map((e) => {\n if (e === null) {\n return `NULL`\n }\n\n if (typeof e === 'number') {\n return e\n }\n\n return `'${e}'`\n })\n .join(',')})`,\n ),\n )\n break\n }\n\n if (orConditions.length) {\n orConditions.push(constraint)\n constraint = or(...orConditions)\n }\n constraints.push(constraint)\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","getTableName","isNotNull","isNull","ne","notInArray","or","sql","PgUUID","APIError","QueryError","validOperatorSet","escapeSQLValue","getNameFromDrizzleTable","isValidStringID","DistinctSymbol","buildAndOrConditions","getTableColumnFromPath","sanitizeQueryValue","parseParams","adapter","aliasTable","context","fields","joins","locale","parentIsLocalized","selectFields","selectLocale","tableName","where","result","constraints","Object","keys","length","relationOrPath","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","pathOperators","operator","has","val","columnName","columns","queryConstraints","field","getNotNullColumnByValue","pathSegments","rawColumn","table","collectionPath","replace","split","value","resolvedColumn","forEach","col","constraintTable","indexOf","push","operators","like","equals","includes","type","blocksAsJSON","name","constraint","createJSONQuery","column","raw","segments","slice","unshift","jsonTable","getOwnPropertySymbols","jsonQuery","treatAsArray","treatRootAsArray","convertPathToJSONTraversal","operatorKeys","contains","wildcard","exists","in","not_equals","not_in","not_like","formattedValue","map","v","join","jsonQuerySelector","rawSQLQuery","path","columnType","word","sanitizedQueryValue","isUUID","queryColumns","queryOperator","queryValue","wrapOperator","JSON","stringify","lng","lat","maxDistance","minDistance","geoConstraints","Number","isNaN","sort","rawSort","orConditions","resolvedQueryValue","some","filter","hasMany","undefined","limitedBoundParameters","isInvalid","e"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { FlattenedField, Operator, Sort, Where } from 'payload'\n\nimport { and, getTableName, isNotNull, isNull, notInArray, or, sql } from 'drizzle-orm'\nimport { PgUUID } from 'drizzle-orm/pg-core'\nimport { APIError, QueryError } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\nimport type { DrizzleResolvedOperator } from './operatorMap.js'\n\nimport { escapeSQLValue } from '../utilities/escapeSQLValue.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { isValidStringID } from '../utilities/isValidStringID.js'\nimport { DistinctSymbol } from '../utilities/rawConstraint.js'\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { buildOperatorConstraint } from './buildOperatorConstraint.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\nexport type QueryContext = { rawSort?: SQL; sort: Sort }\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n context: QueryContext\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized: boolean\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n where: Where\n}\n\nexport function parseParams({\n adapter,\n aliasTable,\n context,\n fields,\n joins,\n locale,\n parentIsLocalized,\n selectFields,\n selectLocale,\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 aliasTable,\n context,\n fields,\n joins,\n locale,\n parentIsLocalized,\n selectFields,\n selectLocale,\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 (validOperatorSet.has(operator as Operator)) {\n const val = where[relationOrPath][operator]\n const originalOperator = operator as 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 aliasTable,\n collectionPath: relationOrPath,\n fields,\n joins,\n locale,\n parentIsLocalized,\n pathSegments: relationOrPath.replace(/__/g, '.').split('.'),\n selectFields,\n selectLocale,\n tableName,\n value: val,\n })\n\n const resolvedColumn =\n rawColumn ||\n (aliasTable && tableName === getNameFromDrizzleTable(table)\n ? aliasTable[columnName]\n : table[columnName])\n\n if (val === DistinctSymbol) {\n selectFields['_selected'] = resolvedColumn\n break\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 (field.type === 'blocks' && adapter.blocksAsJSON)) &&\n Array.isArray(pathSegments) &&\n pathSegments.length > 1\n ) {\n if (adapter.name === 'postgres') {\n const constraint = adapter.createJSONQuery({\n column: rawColumn || table[columnName],\n operator,\n pathSegments,\n value: val,\n })\n\n constraints.push(sql.raw(constraint))\n break\n }\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 not_like: { operator: 'not like', wildcard: '%' },\n }\n\n let formattedValue = val\n if (\n adapter.name === 'sqlite' &&\n operator === 'equals' &&\n (typeof val === 'number' || typeof val === 'boolean')\n ) {\n formattedValue = val\n } else if (['in', 'not_in'].includes(operator) && Array.isArray(val)) {\n formattedValue = `(${val.map((v) => `${escapeSQLValue(v)}`).join(',')})`\n } else {\n formattedValue = `'${operatorKeys[operator].wildcard}${escapeSQLValue(val)}${operatorKeys[operator].wildcard}'`\n }\n if (operator === 'exists') {\n formattedValue = ''\n }\n\n let jsonQuerySelector = `${table[columnName].name}${jsonQuery}`\n\n if (adapter.name === 'sqlite' && operator === 'not_like') {\n jsonQuerySelector = `COALESCE(${table[columnName].name}${jsonQuery}, '')`\n }\n\n const rawSQLQuery = `${jsonQuerySelector} ${operatorKeys[operator].operator} ${formattedValue}`\n\n constraints.push(sql.raw(rawSQLQuery))\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' ||\n field.type === 'relationship' ||\n field.type === 'upload' ||\n table[columnName].columnType === 'PgUUID')\n ) {\n operator = 'equals'\n }\n\n if (operator === 'like') {\n constraints.push(\n and(\n ...val.split(' ').map((word) =>\n buildOperatorConstraint({\n adapter,\n column: table[columnName],\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: 'like',\n value: `%${word}%`,\n }),\n ),\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 buildOperatorConstraint({\n adapter,\n column: rawColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: queryOperator as DrizzleResolvedOperator,\n value,\n }),\n ),\n ),\n )\n\n break\n }\n\n if (queryOperator === 'not_equals' && queryValue !== null) {\n constraints.push(\n or(\n isNull(resolvedColumn),\n buildOperatorConstraint({\n adapter,\n column: resolvedColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: 'not_equals',\n value: queryValue,\n }),\n ),\n )\n break\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n Array.isArray(queryValue) &&\n queryOperator === '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(resolvedColumn))\n break\n }\n\n if (operator === 'not_equals' && queryValue === null) {\n constraints.push(isNotNull(resolvedColumn))\n break\n }\n\n if (field.type === 'point' && adapter.name === 'postgres') {\n switch (operator) {\n case 'intersects': {\n constraints.push(\n sql`ST_Intersects(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n case 'near': {\n const [lng, lat, maxDistance, minDistance] = queryValue as number[]\n const geoConstraints: SQL[] = []\n\n if (typeof maxDistance === 'number' && !Number.isNaN(maxDistance)) {\n geoConstraints.push(\n sql`ST_DWithin(${table[columnName]}::geography, ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)::geography, ${maxDistance})`,\n )\n }\n\n if (typeof minDistance === 'number' && !Number.isNaN(minDistance)) {\n geoConstraints.push(\n sql`ST_Distance(${table[columnName]}::geography, ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)::geography) >= ${minDistance}`,\n )\n }\n if (geoConstraints.length) {\n context.sort = relationOrPath\n context.rawSort = sql`${table[columnName]} <-> ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)`\n constraints.push(and(...geoConstraints))\n }\n break\n }\n\n case 'within': {\n constraints.push(\n sql`ST_Within(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n default:\n break\n }\n break\n }\n\n const orConditions: SQL<unknown>[] = []\n let resolvedQueryValue = queryValue\n if (\n operator === 'in' &&\n Array.isArray(queryValue) &&\n queryValue.some((v) => v === null)\n ) {\n orConditions.push(isNull(resolvedColumn))\n resolvedQueryValue = queryValue.filter((v) => v !== null)\n }\n\n if (\n operator === 'contains' &&\n Array.isArray(queryValue) &&\n 'hasMany' in field &&\n field.hasMany &&\n ['number', 'select', 'text'].includes(field.type)\n ) {\n // Create OR conditions for each value in the array\n orConditions.push(\n ...queryValue.map((val) =>\n buildOperatorConstraint({\n adapter,\n column: resolvedColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: queryOperator as DrizzleResolvedOperator,\n value: val,\n }),\n ),\n )\n // Set constraint to combine all OR conditions\n const constraint = orConditions.length > 0 ? or(...orConditions) : undefined\n if (constraint) {\n constraints.push(constraint)\n }\n break\n }\n\n let constraint = buildOperatorConstraint({\n adapter,\n column: resolvedColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: queryOperator as DrizzleResolvedOperator,\n value: resolvedQueryValue,\n })\n\n if (\n adapter.limitedBoundParameters &&\n (operator === 'in' || operator === 'not_in') &&\n relationOrPath === 'id' &&\n Array.isArray(queryValue)\n ) {\n let isInvalid = false\n for (const val of queryValue) {\n if (typeof val === 'number' || val === null) {\n continue\n }\n if (typeof val === 'string') {\n if (!isValidStringID(val)) {\n isInvalid = true\n break\n } else {\n continue\n }\n }\n isInvalid = true\n break\n }\n\n if (isInvalid) {\n throw new APIError(`Invalid ID value in ${JSON.stringify(queryValue)}`)\n }\n\n constraints.push(\n sql.raw(\n `\"${getTableName(resolvedColumn.table)}\".\"${resolvedColumn.name}\" ${operator === 'in' ? 'IN' : 'NOT IN'} (${queryValue\n .map((e) => {\n if (e === null) {\n return `NULL`\n }\n\n if (typeof e === 'number') {\n return e\n }\n\n return `'${e}'`\n })\n .join(',')})`,\n ),\n )\n break\n }\n\n if (orConditions.length) {\n orConditions.push(constraint)\n constraint = or(...orConditions)\n }\n constraints.push(constraint)\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","getTableName","isNotNull","isNull","notInArray","or","sql","PgUUID","APIError","QueryError","validOperatorSet","escapeSQLValue","getNameFromDrizzleTable","isValidStringID","DistinctSymbol","buildAndOrConditions","buildOperatorConstraint","getTableColumnFromPath","sanitizeQueryValue","parseParams","adapter","aliasTable","context","fields","joins","locale","parentIsLocalized","selectFields","selectLocale","tableName","where","result","constraints","Object","keys","length","relationOrPath","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","pathOperators","operator","has","val","originalOperator","columnName","columns","queryConstraints","field","getNotNullColumnByValue","pathSegments","rawColumn","table","collectionPath","replace","split","value","resolvedColumn","forEach","col","constraintTable","indexOf","push","operators","like","equals","includes","type","blocksAsJSON","name","constraint","createJSONQuery","column","raw","segments","slice","unshift","jsonTable","getOwnPropertySymbols","jsonQuery","treatAsArray","treatRootAsArray","convertPathToJSONTraversal","operatorKeys","contains","wildcard","exists","in","not_equals","not_in","not_like","formattedValue","map","v","join","jsonQuerySelector","rawSQLQuery","path","columnType","word","resolvedOperator","sanitizedQueryValue","isUUID","queryColumns","queryOperator","queryValue","wrapOperator","JSON","stringify","lng","lat","maxDistance","minDistance","geoConstraints","Number","isNaN","sort","rawSort","orConditions","resolvedQueryValue","some","filter","hasMany","undefined","limitedBoundParameters","isInvalid","e"],"mappings":"AAGA,SAASA,GAAG,EAAEC,YAAY,EAAEC,SAAS,EAAEC,MAAM,EAAEC,UAAU,EAAEC,EAAE,EAAEC,GAAG,QAAQ,cAAa;AACvF,SAASC,MAAM,QAAQ,sBAAqB;AAC5C,SAASC,QAAQ,EAAEC,UAAU,QAAQ,UAAS;AAC9C,SAASC,gBAAgB,QAAQ,iBAAgB;AAMjD,SAASC,cAAc,QAAQ,iCAAgC;AAC/D,SAASC,uBAAuB,QAAQ,0CAAyC;AACjF,SAASC,eAAe,QAAQ,kCAAiC;AACjE,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,uBAAuB,QAAQ,+BAA8B;AACtE,SAASC,sBAAsB,QAAQ,8BAA6B;AACpE,SAASC,kBAAkB,QAAQ,0BAAyB;AAkB5D,OAAO,SAASC,YAAY,EAC1BC,OAAO,EACPC,UAAU,EACVC,OAAO,EACPC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,iBAAiB,EACjBC,YAAY,EACZC,YAAY,EACZC,SAAS,EACTC,KAAK,EACA;IACL,IAAIC;IACJ,MAAMC,cAAqB,EAAE;IAE7B,IAAI,OAAOF,UAAU,YAAYG,OAAOC,IAAI,CAACJ,OAAOK,MAAM,GAAG,GAAG;QAC9D,uEAAuE;QACvE,KAAK,MAAMC,kBAAkBH,OAAOC,IAAI,CAACJ,OAAQ;YAC/C,IAAIM,gBAAgB;gBAClB,MAAMC,YAAYP,KAAK,CAACM,eAAe;gBACvC,IAAIE;gBACJ,IAAIF,eAAeG,WAAW,OAAO,OAAO;oBAC1CD,oBAAoBtC;gBACtB,OAAO,IAAIoC,eAAeG,WAAW,OAAO,MAAM;oBAChDD,oBAAoBjC;gBACtB;gBACA,IAAImC,MAAMC,OAAO,CAACJ,YAAY;oBAC5B,MAAMK,kBAAkB3B,qBAAqB;wBAC3CK;wBACAC;wBACAC;wBACAC;wBACAC;wBACAC;wBACAC;wBACAC;wBACAC;wBACAC;wBACAC,OAAOO;oBACT;oBACA,IAAIK,gBAAgBP,MAAM,GAAG,GAAG;wBAC9BJ,SAASO,qBAAqBI;oBAChC;gBACF,OAAO;oBACL,wEAAwE;oBACxE,kEAAkE;oBAClE,8EAA8E;oBAC9E,MAAMC,gBAAgBb,KAAK,CAACM,eAAe;oBAC3C,IAAI,OAAOO,kBAAkB,UAAU;wBACrC,KAAK,IAAIC,YAAYX,OAAOC,IAAI,CAACS,eAAgB;4BAC/C,IAAIjC,iBAAiBmC,GAAG,CAACD,WAAuB;gCAC9C,MAAME,MAAMhB,KAAK,CAACM,eAAe,CAACQ,SAAS;gCAC3C,MAAMG,mBAAmBH;gCAEzB,MAAM,EACJI,UAAU,EACVC,OAAO,EACPjB,aAAakB,gBAAgB,EAC7BC,KAAK,EACLC,uBAAuB,EACvBC,YAAY,EACZC,SAAS,EACTC,KAAK,EACN,GAAGtC,uBAAuB;oCACzBG;oCACAC;oCACAmC,gBAAgBpB;oCAChBb;oCACAC;oCACAC;oCACAC;oCACA2B,cAAcjB,eAAeqB,OAAO,CAAC,OAAO,KAAKC,KAAK,CAAC;oCACvD/B;oCACAC;oCACAC;oCACA8B,OAAOb;gCACT;gCAEA,MAAMc,iBACJN,aACCjC,CAAAA,cAAcQ,cAAcjB,wBAAwB2C,SACjDlC,UAAU,CAAC2B,WAAW,GACtBO,KAAK,CAACP,WAAW,AAAD;gCAEtB,IAAIF,QAAQhC,gBAAgB;oCAC1Ba,YAAY,CAAC,YAAY,GAAGiC;oCAC5B;gCACF;gCAEAV,iBAAiBW,OAAO,CAAC,CAAC,EAAEb,YAAYc,GAAG,EAAEP,OAAOQ,eAAe,EAAEJ,KAAK,EAAE;oCAC1E,IAAI,OAAOA,UAAU,YAAYA,MAAMK,OAAO,CAAC,OAAO,CAAC,GAAG;wCACxDhC,YAAYiC,IAAI,CAAC7C,QAAQ8C,SAAS,CAACC,IAAI,CAACJ,eAAe,CAACD,IAAI,EAAEH;oCAChE,OAAO;wCACL3B,YAAYiC,IAAI,CAAC7C,QAAQ8C,SAAS,CAACE,MAAM,CAACL,eAAe,CAACD,IAAI,EAAEH;oCAClE;gCACF;gCAEA,IACE,AAAC,CAAA;oCAAC;oCAAQ;iCAAW,CAACU,QAAQ,CAAClB,MAAMmB,IAAI,KACtCnB,MAAMmB,IAAI,KAAK,YAAYlD,QAAQmD,YAAY,KAClD/B,MAAMC,OAAO,CAACY,iBACdA,aAAalB,MAAM,GAAG,GACtB;oCACA,IAAIf,QAAQoD,IAAI,KAAK,YAAY;wCAC/B,MAAMC,aAAarD,QAAQsD,eAAe,CAAC;4CACzCC,QAAQrB,aAAaC,KAAK,CAACP,WAAW;4CACtCJ;4CACAS;4CACAM,OAAOb;wCACT;wCAEAd,YAAYiC,IAAI,CAAC3D,IAAIsE,GAAG,CAACH;wCACzB;oCACF;oCAEA,MAAMI,WAAWxB,aAAayB,KAAK,CAAC;oCACpCD,SAASE,OAAO,CAACxB,KAAK,CAACP,WAAW,CAACwB,IAAI;oCAEvC,IAAIrB,MAAMmB,IAAI,KAAK,YAAY;wCAC7B,mGAAmG;wCACnG,MAAMU,YACJxD,MAAMW,MAAM,KAAK,IACbN,YACAL,KAAK,CAACA,MAAMW,MAAM,GAAG,EAAE,CAACoB,KAAK,CAC3BtB,OAAOgD,qBAAqB,CAACzD,KAAK,CAACA,MAAMW,MAAM,GAAG,EAAE,CAACoB,KAAK,CAAC,CAAC,EAAE,CAC/D;wCACP,MAAM2B,YAAY9D,QAAQsD,eAAe,CAAC;4CACxC9B;4CACAS,cAAcwB;4CACdtB,OAAOyB;4CACPG,cAAc;gDAAC;6CAAW;4CAC1BC,kBAAkB;4CAClBzB,OAAOb;wCACT;wCAEAd,YAAYiC,IAAI,CAAC3D,IAAIsE,GAAG,CAACM;wCACzB;oCACF;oCAEA,MAAMA,YAAY9D,QAAQiE,0BAA0B,CAAChC;oCACrD,MAAMiC,eAAuE;wCAC3EC,UAAU;4CAAE3C,UAAU;4CAAQ4C,UAAU;wCAAI;wCAC5CpB,QAAQ;4CAAExB,UAAU;4CAAK4C,UAAU;wCAAG;wCACtCC,QAAQ;4CAAE7C,UAAUE,QAAQ,OAAO,gBAAgB;4CAAW0C,UAAU;wCAAG;wCAC3EE,IAAI;4CAAE9C,UAAU;4CAAM4C,UAAU;wCAAG;wCACnCrB,MAAM;4CAAEvB,UAAU;4CAAQ4C,UAAU;wCAAI;wCACxCG,YAAY;4CAAE/C,UAAU;4CAAM4C,UAAU;wCAAG;wCAC3CI,QAAQ;4CAAEhD,UAAU;4CAAU4C,UAAU;wCAAG;wCAC3CK,UAAU;4CAAEjD,UAAU;4CAAY4C,UAAU;wCAAI;oCAClD;oCAEA,IAAIM,iBAAiBhD;oCACrB,IACE1B,QAAQoD,IAAI,KAAK,YACjB5B,aAAa,YACZ,CAAA,OAAOE,QAAQ,YAAY,OAAOA,QAAQ,SAAQ,GACnD;wCACAgD,iBAAiBhD;oCACnB,OAAO,IAAI;wCAAC;wCAAM;qCAAS,CAACuB,QAAQ,CAACzB,aAAaJ,MAAMC,OAAO,CAACK,MAAM;wCACpEgD,iBAAiB,CAAC,CAAC,EAAEhD,IAAIiD,GAAG,CAAC,CAACC,IAAM,GAAGrF,eAAeqF,IAAI,EAAEC,IAAI,CAAC,KAAK,CAAC,CAAC;oCAC1E,OAAO;wCACLH,iBAAiB,CAAC,CAAC,EAAER,YAAY,CAAC1C,SAAS,CAAC4C,QAAQ,GAAG7E,eAAemC,OAAOwC,YAAY,CAAC1C,SAAS,CAAC4C,QAAQ,CAAC,CAAC,CAAC;oCACjH;oCACA,IAAI5C,aAAa,UAAU;wCACzBkD,iBAAiB;oCACnB;oCAEA,IAAII,oBAAoB,GAAG3C,KAAK,CAACP,WAAW,CAACwB,IAAI,GAAGU,WAAW;oCAE/D,IAAI9D,QAAQoD,IAAI,KAAK,YAAY5B,aAAa,YAAY;wCACxDsD,oBAAoB,CAAC,SAAS,EAAE3C,KAAK,CAACP,WAAW,CAACwB,IAAI,GAAGU,UAAU,KAAK,CAAC;oCAC3E;oCAEA,MAAMiB,cAAc,GAAGD,kBAAkB,CAAC,EAAEZ,YAAY,CAAC1C,SAAS,CAACA,QAAQ,CAAC,CAAC,EAAEkD,gBAAgB;oCAE/F9D,YAAYiC,IAAI,CAAC3D,IAAIsE,GAAG,CAACuB;oCAEzB;gCACF;gCAEA,IAAI/C,yBAAyB;oCAC3B,MAAMJ,aAAaI,wBAAwBN;oCAC3C,IAAIE,YAAY;wCACdhB,YAAYiC,IAAI,CAAC/D,UAAUqD,KAAK,CAACP,WAAW;oCAC9C,OAAO;wCACL,MAAM,IAAIvC,WAAW;4CAAC;gDAAE2F,MAAMhE;4CAAe;yCAAE;oCACjD;oCACA;gCACF;gCAEA,IACEQ,aAAa,UACZO,CAAAA,MAAMmB,IAAI,KAAK,YACdnB,MAAMmB,IAAI,KAAK,kBACfnB,MAAMmB,IAAI,KAAK,YACff,KAAK,CAACP,WAAW,CAACqD,UAAU,KAAK,QAAO,GAC1C;oCACAzD,WAAW;gCACb;gCAEA,IAAIA,aAAa,QAAQ;oCACvBZ,YAAYiC,IAAI,CACdjE,OACK8C,IAAIY,KAAK,CAAC,KAAKqC,GAAG,CAAC,CAACO,OACrBtF,wBAAwB;4CACtBI;4CACAuD,QAAQpB,KAAK,CAACP,WAAW;4CACzBG;4CACA1B;4CACAsB;4CACAqD,MAAMhE;4CACNmE,kBAAkB;4CAClB5C,OAAO,CAAC,CAAC,EAAE2C,KAAK,CAAC,CAAC;wCACpB;oCAIN;gCACF;gCAEA,MAAME,sBAAsBtF,mBAAmB;oCAC7CE;oCACA6B;oCACAE;oCACAsD,QAAQlD,OAAO,CAACP,WAAW,YAAYzC;oCACvCqC;oCACAR;oCACAU;gCACF;gCAEA,IAAI0D,wBAAwB,MAAM;oCAChC;gCACF;gCAEA,MAAM,EACJvD,SAASyD,YAAY,EACrB9D,UAAU+D,aAAa,EACvBhD,OAAOiD,UAAU,EAClB,GAAGJ;gCAEJ,4CAA4C;gCAC5C,IAAIE,cAAc;oCAChB,IAAI,CAACA,aAAavE,MAAM,EAAE;wCACxB;oCACF;oCAEA,IAAI0E,eAAexG;oCAEnB,IAAIuG,eAAe,QAAQ;wCAAC;wCAAU;qCAAa,CAACvC,QAAQ,CAACzB,WAAW;wCACtE,IAAIA,aAAa,UAAU;4CACzBiE,eAAe7G;wCACjB;wCAEAgC,YAAYiC,IAAI,CACd4C,gBACKH,aAAaX,GAAG,CAAC,CAAC,EAAEzC,SAAS,EAAE,GAChCV,aAAa,WAAWzC,OAAOmD,aAAapD,UAAUoD;wCAI5D;oCACF;oCAEA,IAAI;wCAAC;wCAAc;qCAAS,CAACe,QAAQ,CAACzB,WAAW;wCAC/CiE,eAAe7G;oCACjB;oCAEAgC,YAAYiC,IAAI,CACd4C,gBACKH,aAAaX,GAAG,CAAC,CAAC,EAAEzC,SAAS,EAAEK,KAAK,EAAE,GACvC3C,wBAAwB;4CACtBI;4CACAuD,QAAQrB;4CACRH;4CACA1B;4CACAsB;4CACAqD,MAAMhE;4CACNmE,kBAAkBI;4CAClBhD;wCACF;oCAKN;gCACF;gCAEA,IAAIgD,kBAAkB,gBAAgBC,eAAe,MAAM;oCACzD5E,YAAYiC,IAAI,CACd5D,GACEF,OAAOyD,iBACP5C,wBAAwB;wCACtBI;wCACAuD,QAAQf;wCACRT;wCACA1B;wCACAsB;wCACAqD,MAAMhE;wCACNmE,kBAAkB;wCAClB5C,OAAOiD;oCACT;oCAGJ;gCACF;gCAEA,IACE,AAACzD,CAAAA,MAAMmB,IAAI,KAAK,kBAAkBnB,MAAMmB,IAAI,KAAK,QAAO,KACxD9B,MAAMC,OAAO,CAACmE,eACdD,kBAAkB,UAClB;oCACA3E,YAAYiC,IAAI,CACd3D,GAAG,CAAC,CAAC,EAAEF,WAAWmD,KAAK,CAACP,WAAW,EAAE4D,YAAY;oBACjD,EAAErD,KAAK,CAACP,WAAW,CAAC;;yBAEf,CAAC;oCAGR;gCACF;gCAEA,IAAIJ,aAAa,YAAYgE,eAAe,MAAM;oCAChD5E,YAAYiC,IAAI,CAAC9D,OAAOyD;oCACxB;gCACF;gCAEA,IAAIhB,aAAa,gBAAgBgE,eAAe,MAAM;oCACpD5E,YAAYiC,IAAI,CAAC/D,UAAU0D;oCAC3B;gCACF;gCAEA,IAAIT,MAAMmB,IAAI,KAAK,WAAWlD,QAAQoD,IAAI,KAAK,YAAY;oCACzD,OAAQ5B;wCACN,KAAK;4CAAc;gDACjBZ,YAAYiC,IAAI,CACd3D,GAAG,CAAC,cAAc,EAAEiD,KAAK,CAACP,WAAW,CAAC,qBAAqB,EAAE8D,KAAKC,SAAS,CAACH,YAAY,EAAE,CAAC;gDAE7F;4CACF;wCAEA,KAAK;4CAAQ;gDACX,MAAM,CAACI,KAAKC,KAAKC,aAAaC,YAAY,GAAGP;gDAC7C,MAAMQ,iBAAwB,EAAE;gDAEhC,IAAI,OAAOF,gBAAgB,YAAY,CAACG,OAAOC,KAAK,CAACJ,cAAc;oDACjEE,eAAenD,IAAI,CACjB3D,GAAG,CAAC,WAAW,EAAEiD,KAAK,CAACP,WAAW,CAAC,qCAAqC,EAAEgE,IAAI,EAAE,EAAEC,IAAI,qBAAqB,EAAEC,YAAY,CAAC,CAAC;gDAE/H;gDAEA,IAAI,OAAOC,gBAAgB,YAAY,CAACE,OAAOC,KAAK,CAACH,cAAc;oDACjEC,eAAenD,IAAI,CACjB3D,GAAG,CAAC,YAAY,EAAEiD,KAAK,CAACP,WAAW,CAAC,qCAAqC,EAAEgE,IAAI,EAAE,EAAEC,IAAI,wBAAwB,EAAEE,YAAY,CAAC;gDAElI;gDACA,IAAIC,eAAejF,MAAM,EAAE;oDACzBb,QAAQiG,IAAI,GAAGnF;oDACfd,QAAQkG,OAAO,GAAGlH,GAAG,CAAC,EAAEiD,KAAK,CAACP,WAAW,CAAC,6BAA6B,EAAEgE,IAAI,EAAE,EAAEC,IAAI,QAAQ,CAAC;oDAC9FjF,YAAYiC,IAAI,CAACjE,OAAOoH;gDAC1B;gDACA;4CACF;wCAEA,KAAK;4CAAU;gDACbpF,YAAYiC,IAAI,CACd3D,GAAG,CAAC,UAAU,EAAEiD,KAAK,CAACP,WAAW,CAAC,qBAAqB,EAAE8D,KAAKC,SAAS,CAACH,YAAY,EAAE,CAAC;gDAEzF;4CACF;wCAEA;4CACE;oCACJ;oCACA;gCACF;gCAEA,MAAMa,eAA+B,EAAE;gCACvC,IAAIC,qBAAqBd;gCACzB,IACEhE,aAAa,QACbJ,MAAMC,OAAO,CAACmE,eACdA,WAAWe,IAAI,CAAC,CAAC3B,IAAMA,MAAM,OAC7B;oCACAyB,aAAaxD,IAAI,CAAC9D,OAAOyD;oCACzB8D,qBAAqBd,WAAWgB,MAAM,CAAC,CAAC5B,IAAMA,MAAM;gCACtD;gCAEA,IACEpD,aAAa,cACbJ,MAAMC,OAAO,CAACmE,eACd,aAAazD,SACbA,MAAM0E,OAAO,IACb;oCAAC;oCAAU;oCAAU;iCAAO,CAACxD,QAAQ,CAAClB,MAAMmB,IAAI,GAChD;oCACA,mDAAmD;oCACnDmD,aAAaxD,IAAI,IACZ2C,WAAWb,GAAG,CAAC,CAACjD,MACjB9B,wBAAwB;4CACtBI;4CACAuD,QAAQf;4CACRT;4CACA1B;4CACAsB;4CACAqD,MAAMhE;4CACNmE,kBAAkBI;4CAClBhD,OAAOb;wCACT;oCAGJ,8CAA8C;oCAC9C,MAAM2B,aAAagD,aAAatF,MAAM,GAAG,IAAI9B,MAAMoH,gBAAgBK;oCACnE,IAAIrD,YAAY;wCACdzC,YAAYiC,IAAI,CAACQ;oCACnB;oCACA;gCACF;gCAEA,IAAIA,aAAazD,wBAAwB;oCACvCI;oCACAuD,QAAQf;oCACRT;oCACA1B;oCACAsB;oCACAqD,MAAMhE;oCACNmE,kBAAkBI;oCAClBhD,OAAO+D;gCACT;gCAEA,IACEtG,QAAQ2G,sBAAsB,IAC7BnF,CAAAA,aAAa,QAAQA,aAAa,QAAO,KAC1CR,mBAAmB,QACnBI,MAAMC,OAAO,CAACmE,aACd;oCACA,IAAIoB,YAAY;oCAChB,KAAK,MAAMlF,OAAO8D,WAAY;wCAC5B,IAAI,OAAO9D,QAAQ,YAAYA,QAAQ,MAAM;4CAC3C;wCACF;wCACA,IAAI,OAAOA,QAAQ,UAAU;4CAC3B,IAAI,CAACjC,gBAAgBiC,MAAM;gDACzBkF,YAAY;gDACZ;4CACF,OAAO;gDACL;4CACF;wCACF;wCACAA,YAAY;wCACZ;oCACF;oCAEA,IAAIA,WAAW;wCACb,MAAM,IAAIxH,SAAS,CAAC,oBAAoB,EAAEsG,KAAKC,SAAS,CAACH,aAAa;oCACxE;oCAEA5E,YAAYiC,IAAI,CACd3D,IAAIsE,GAAG,CACL,CAAC,CAAC,EAAE3E,aAAa2D,eAAeL,KAAK,EAAE,GAAG,EAAEK,eAAeY,IAAI,CAAC,EAAE,EAAE5B,aAAa,OAAO,OAAO,SAAS,EAAE,EAAEgE,WACzGb,GAAG,CAAC,CAACkC;wCACJ,IAAIA,MAAM,MAAM;4CACd,OAAO,CAAC,IAAI,CAAC;wCACf;wCAEA,IAAI,OAAOA,MAAM,UAAU;4CACzB,OAAOA;wCACT;wCAEA,OAAO,CAAC,CAAC,EAAEA,EAAE,CAAC,CAAC;oCACjB,GACChC,IAAI,CAAC,KAAK,CAAC,CAAC;oCAGnB;gCACF;gCAEA,IAAIwB,aAAatF,MAAM,EAAE;oCACvBsF,aAAaxD,IAAI,CAACQ;oCAClBA,aAAapE,MAAMoH;gCACrB;gCACAzF,YAAYiC,IAAI,CAACQ;4BACnB;wBACF;oBACF;gBACF;YACF;QACF;IACF;IACA,IAAIzC,YAAYG,MAAM,GAAG,GAAG;QAC1B,IAAIJ,QAAQ;YACVA,SAAS/B,IAAI+B,WAAWC;QAC1B,OAAO;YACLD,SAAS/B,OAAOgC;QAClB;IACF;IACA,IAAIA,YAAYG,MAAM,KAAK,KAAK,CAACJ,QAAQ;;QACtC,CAACA,OAAO,GAAGC;IACd;IAEA,OAAOD;AACT"}
|
|
@@ -1 +1 @@
|
|
|
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;AAOjD,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,
|
|
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;AAOjD,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;CAuQf,CAAA"}
|
|
@@ -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;AACpD,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEzE,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,aAAa,EAEd,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAE5D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,YAAY,CAAA;KAAE,KAAK,YAAY,CAAA;IACvD,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,
|
|
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;AACpD,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEzE,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,aAAa,EAEd,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAE5D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,YAAY,CAAA;KAAE,KAAK,YAAY,CAAA;IACvD,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,2GAUxB,IAAI,KAAG,YAAY,CAAC;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAmC/E,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DrizzleOperatorHandler } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Validates operator-handler configuration before any request runs: rejects a handler that
|
|
4
|
+
* defines both `build` and `transformOperands`, and rejects two replacement handlers whose
|
|
5
|
+
* `operators` and `fieldTypes` both overlap for the same resolved operator.
|
|
6
|
+
*/
|
|
7
|
+
export declare const validateOperatorHandlers: (operatorHandlers: DrizzleOperatorHandler[]) => void;
|
|
8
|
+
//# sourceMappingURL=validateOperatorHandlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateOperatorHandlers.d.ts","sourceRoot":"","sources":["../../src/queries/validateOperatorHandlers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAqC,MAAM,aAAa,CAAA;AAc5F;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,qBAAsB,sBAAsB,EAAE,KAAG,IA+BrF,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { APIError } from 'payload';
|
|
2
|
+
const isReplacementHandler = (handler)=>typeof handler.build === 'function';
|
|
3
|
+
const fieldTypesOverlap = (a, b)=>!a.fieldTypes || !b.fieldTypes || a.fieldTypes.some((fieldType)=>b.fieldTypes.includes(fieldType));
|
|
4
|
+
/**
|
|
5
|
+
* Validates operator-handler configuration before any request runs: rejects a handler that
|
|
6
|
+
* defines both `build` and `transformOperands`, and rejects two replacement handlers whose
|
|
7
|
+
* `operators` and `fieldTypes` both overlap for the same resolved operator.
|
|
8
|
+
*/ export const validateOperatorHandlers = (operatorHandlers)=>{
|
|
9
|
+
for (const handler of operatorHandlers){
|
|
10
|
+
if (typeof handler.build === 'function' && typeof handler.transformOperands === 'function') {
|
|
11
|
+
throw new APIError(`Operator handler "${handler.name}" cannot define both "build" and "transformOperands". Use "transformOperands" to adjust operands, or "build" to replace the comparison entirely.`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const replacementHandlers = operatorHandlers.filter(isReplacementHandler);
|
|
15
|
+
for(let i = 0; i < replacementHandlers.length; i++){
|
|
16
|
+
for(let j = i + 1; j < replacementHandlers.length; j++){
|
|
17
|
+
const handlerA = replacementHandlers[i];
|
|
18
|
+
const handlerB = replacementHandlers[j];
|
|
19
|
+
const sharedOperators = handlerA.operators.filter((operator)=>handlerB.operators.includes(operator));
|
|
20
|
+
if (!sharedOperators.length) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (fieldTypesOverlap(handlerA, handlerB)) {
|
|
24
|
+
throw new APIError(`Operator handlers "${handlerA.name}" and "${handlerB.name}" both replace the "${sharedOperators.join('", "')}" operator for overlapping field types. Only one replacement handler may match a given resolved operator and field type.`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=validateOperatorHandlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/queries/validateOperatorHandlers.ts"],"sourcesContent":["import { APIError } from 'payload'\n\nimport type { DrizzleOperatorHandler, DrizzleOperatorReplacementHandler } from '../types.js'\n\nconst isReplacementHandler = (\n handler: DrizzleOperatorHandler,\n): handler is DrizzleOperatorReplacementHandler => typeof handler.build === 'function'\n\nconst fieldTypesOverlap = (\n a: DrizzleOperatorReplacementHandler,\n b: DrizzleOperatorReplacementHandler,\n): boolean =>\n !a.fieldTypes ||\n !b.fieldTypes ||\n a.fieldTypes.some((fieldType) => b.fieldTypes.includes(fieldType))\n\n/**\n * Validates operator-handler configuration before any request runs: rejects a handler that\n * defines both `build` and `transformOperands`, and rejects two replacement handlers whose\n * `operators` and `fieldTypes` both overlap for the same resolved operator.\n */\nexport const validateOperatorHandlers = (operatorHandlers: DrizzleOperatorHandler[]): void => {\n for (const handler of operatorHandlers) {\n if (typeof handler.build === 'function' && typeof handler.transformOperands === 'function') {\n throw new APIError(\n `Operator handler \"${handler.name}\" cannot define both \"build\" and \"transformOperands\". Use \"transformOperands\" to adjust operands, or \"build\" to replace the comparison entirely.`,\n )\n }\n }\n\n const replacementHandlers = operatorHandlers.filter(isReplacementHandler)\n\n for (let i = 0; i < replacementHandlers.length; i++) {\n for (let j = i + 1; j < replacementHandlers.length; j++) {\n const handlerA = replacementHandlers[i]\n const handlerB = replacementHandlers[j]\n\n const sharedOperators = handlerA.operators.filter((operator) =>\n handlerB.operators.includes(operator),\n )\n\n if (!sharedOperators.length) {\n continue\n }\n\n if (fieldTypesOverlap(handlerA, handlerB)) {\n throw new APIError(\n `Operator handlers \"${handlerA.name}\" and \"${handlerB.name}\" both replace the \"${sharedOperators.join('\", \"')}\" operator for overlapping field types. Only one replacement handler may match a given resolved operator and field type.`,\n )\n }\n }\n }\n}\n"],"names":["APIError","isReplacementHandler","handler","build","fieldTypesOverlap","a","b","fieldTypes","some","fieldType","includes","validateOperatorHandlers","operatorHandlers","transformOperands","name","replacementHandlers","filter","i","length","j","handlerA","handlerB","sharedOperators","operators","operator","join"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,UAAS;AAIlC,MAAMC,uBAAuB,CAC3BC,UACiD,OAAOA,QAAQC,KAAK,KAAK;AAE5E,MAAMC,oBAAoB,CACxBC,GACAC,IAEA,CAACD,EAAEE,UAAU,IACb,CAACD,EAAEC,UAAU,IACbF,EAAEE,UAAU,CAACC,IAAI,CAAC,CAACC,YAAcH,EAAEC,UAAU,CAACG,QAAQ,CAACD;AAEzD;;;;CAIC,GACD,OAAO,MAAME,2BAA2B,CAACC;IACvC,KAAK,MAAMV,WAAWU,iBAAkB;QACtC,IAAI,OAAOV,QAAQC,KAAK,KAAK,cAAc,OAAOD,QAAQW,iBAAiB,KAAK,YAAY;YAC1F,MAAM,IAAIb,SACR,CAAC,kBAAkB,EAAEE,QAAQY,IAAI,CAAC,gJAAgJ,CAAC;QAEvL;IACF;IAEA,MAAMC,sBAAsBH,iBAAiBI,MAAM,CAACf;IAEpD,IAAK,IAAIgB,IAAI,GAAGA,IAAIF,oBAAoBG,MAAM,EAAED,IAAK;QACnD,IAAK,IAAIE,IAAIF,IAAI,GAAGE,IAAIJ,oBAAoBG,MAAM,EAAEC,IAAK;YACvD,MAAMC,WAAWL,mBAAmB,CAACE,EAAE;YACvC,MAAMI,WAAWN,mBAAmB,CAACI,EAAE;YAEvC,MAAMG,kBAAkBF,SAASG,SAAS,CAACP,MAAM,CAAC,CAACQ,WACjDH,SAASE,SAAS,CAACb,QAAQ,CAACc;YAG9B,IAAI,CAACF,gBAAgBJ,MAAM,EAAE;gBAC3B;YACF;YAEA,IAAId,kBAAkBgB,UAAUC,WAAW;gBACzC,MAAM,IAAIrB,SACR,CAAC,mBAAmB,EAAEoB,SAASN,IAAI,CAAC,OAAO,EAAEO,SAASP,IAAI,CAAC,oBAAoB,EAAEQ,gBAAgBG,IAAI,CAAC,QAAQ,wHAAwH,CAAC;YAE3O;QACF;IACF;AACF,EAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { validateOperatorHandlers } from './validateOperatorHandlers.js';
|
|
3
|
+
const transformHandler = (overrides = {})=>({
|
|
4
|
+
name: 'transform',
|
|
5
|
+
operators: [
|
|
6
|
+
'contains'
|
|
7
|
+
],
|
|
8
|
+
transformOperands: ({ column, value })=>({
|
|
9
|
+
column,
|
|
10
|
+
value
|
|
11
|
+
}),
|
|
12
|
+
...overrides
|
|
13
|
+
});
|
|
14
|
+
const replacementHandler = (overrides = {})=>({
|
|
15
|
+
name: 'replace',
|
|
16
|
+
operators: [
|
|
17
|
+
'contains'
|
|
18
|
+
],
|
|
19
|
+
build: ()=>null,
|
|
20
|
+
...overrides
|
|
21
|
+
});
|
|
22
|
+
describe('validateOperatorHandlers', ()=>{
|
|
23
|
+
it('does not throw when zero handlers are configured', ()=>{
|
|
24
|
+
expect(()=>validateOperatorHandlers([])).not.toThrow();
|
|
25
|
+
});
|
|
26
|
+
it('does not throw for any number of non-conflicting operand-transform handlers', ()=>{
|
|
27
|
+
expect(()=>validateOperatorHandlers([
|
|
28
|
+
transformHandler({
|
|
29
|
+
name: 'a'
|
|
30
|
+
}),
|
|
31
|
+
transformHandler({
|
|
32
|
+
name: 'b'
|
|
33
|
+
}),
|
|
34
|
+
transformHandler({
|
|
35
|
+
name: 'c'
|
|
36
|
+
})
|
|
37
|
+
])).not.toThrow();
|
|
38
|
+
});
|
|
39
|
+
it('throws when two build handlers list the same resolved operator, naming both handlers and the operator', ()=>{
|
|
40
|
+
expect(()=>validateOperatorHandlers([
|
|
41
|
+
replacementHandler({
|
|
42
|
+
name: 'handler-a',
|
|
43
|
+
operators: [
|
|
44
|
+
'contains'
|
|
45
|
+
]
|
|
46
|
+
}),
|
|
47
|
+
replacementHandler({
|
|
48
|
+
name: 'handler-b',
|
|
49
|
+
operators: [
|
|
50
|
+
'contains'
|
|
51
|
+
]
|
|
52
|
+
})
|
|
53
|
+
])).toThrow(/handler-a/);
|
|
54
|
+
expect(()=>validateOperatorHandlers([
|
|
55
|
+
replacementHandler({
|
|
56
|
+
name: 'handler-a',
|
|
57
|
+
operators: [
|
|
58
|
+
'contains'
|
|
59
|
+
]
|
|
60
|
+
}),
|
|
61
|
+
replacementHandler({
|
|
62
|
+
name: 'handler-b',
|
|
63
|
+
operators: [
|
|
64
|
+
'contains'
|
|
65
|
+
]
|
|
66
|
+
})
|
|
67
|
+
])).toThrow(/handler-b/);
|
|
68
|
+
expect(()=>validateOperatorHandlers([
|
|
69
|
+
replacementHandler({
|
|
70
|
+
name: 'handler-a',
|
|
71
|
+
operators: [
|
|
72
|
+
'contains'
|
|
73
|
+
]
|
|
74
|
+
}),
|
|
75
|
+
replacementHandler({
|
|
76
|
+
name: 'handler-b',
|
|
77
|
+
operators: [
|
|
78
|
+
'contains'
|
|
79
|
+
]
|
|
80
|
+
})
|
|
81
|
+
])).toThrow(/contains/);
|
|
82
|
+
});
|
|
83
|
+
it('does not throw when two build handlers target the same operator but declare disjoint fieldTypes', ()=>{
|
|
84
|
+
expect(()=>validateOperatorHandlers([
|
|
85
|
+
replacementHandler({
|
|
86
|
+
name: 'text',
|
|
87
|
+
operators: [
|
|
88
|
+
'contains'
|
|
89
|
+
],
|
|
90
|
+
fieldTypes: [
|
|
91
|
+
'text'
|
|
92
|
+
]
|
|
93
|
+
}),
|
|
94
|
+
replacementHandler({
|
|
95
|
+
name: 'number',
|
|
96
|
+
operators: [
|
|
97
|
+
'contains'
|
|
98
|
+
],
|
|
99
|
+
fieldTypes: [
|
|
100
|
+
'number'
|
|
101
|
+
]
|
|
102
|
+
})
|
|
103
|
+
])).not.toThrow();
|
|
104
|
+
});
|
|
105
|
+
it('throws when two build handlers target the same operator and at least one declares no fieldTypes', ()=>{
|
|
106
|
+
expect(()=>validateOperatorHandlers([
|
|
107
|
+
replacementHandler({
|
|
108
|
+
name: 'unrestricted',
|
|
109
|
+
operators: [
|
|
110
|
+
'contains'
|
|
111
|
+
]
|
|
112
|
+
}),
|
|
113
|
+
replacementHandler({
|
|
114
|
+
name: 'text',
|
|
115
|
+
operators: [
|
|
116
|
+
'contains'
|
|
117
|
+
],
|
|
118
|
+
fieldTypes: [
|
|
119
|
+
'text'
|
|
120
|
+
]
|
|
121
|
+
})
|
|
122
|
+
])).toThrow();
|
|
123
|
+
});
|
|
124
|
+
it('throws when a handler object defines both build and transformOperands', ()=>{
|
|
125
|
+
const malformed = {
|
|
126
|
+
name: 'malformed',
|
|
127
|
+
operators: [
|
|
128
|
+
'contains'
|
|
129
|
+
],
|
|
130
|
+
build: ()=>null,
|
|
131
|
+
transformOperands: ({ column, value })=>({
|
|
132
|
+
column,
|
|
133
|
+
value
|
|
134
|
+
})
|
|
135
|
+
};
|
|
136
|
+
expect(()=>validateOperatorHandlers([
|
|
137
|
+
malformed
|
|
138
|
+
])).toThrow(/malformed/);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
//# sourceMappingURL=validateOperatorHandlers.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/queries/validateOperatorHandlers.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport type { DrizzleOperatorHandler } from '../types.js'\n\nimport { validateOperatorHandlers } from './validateOperatorHandlers.js'\n\nconst transformHandler = (\n overrides: Partial<DrizzleOperatorHandler> = {},\n): DrizzleOperatorHandler =>\n ({\n name: 'transform',\n operators: ['contains'],\n transformOperands: ({ column, value }) => ({ column, value }),\n ...overrides,\n }) as DrizzleOperatorHandler\n\nconst replacementHandler = (\n overrides: Partial<DrizzleOperatorHandler> = {},\n): DrizzleOperatorHandler =>\n ({\n name: 'replace',\n operators: ['contains'],\n build: () => null as any,\n ...overrides,\n }) as DrizzleOperatorHandler\n\ndescribe('validateOperatorHandlers', () => {\n it('does not throw when zero handlers are configured', () => {\n expect(() => validateOperatorHandlers([])).not.toThrow()\n })\n\n it('does not throw for any number of non-conflicting operand-transform handlers', () => {\n expect(() =>\n validateOperatorHandlers([\n transformHandler({ name: 'a' }),\n transformHandler({ name: 'b' }),\n transformHandler({ name: 'c' }),\n ]),\n ).not.toThrow()\n })\n\n it('throws when two build handlers list the same resolved operator, naming both handlers and the operator', () => {\n expect(() =>\n validateOperatorHandlers([\n replacementHandler({ name: 'handler-a', operators: ['contains'] }),\n replacementHandler({ name: 'handler-b', operators: ['contains'] }),\n ]),\n ).toThrow(/handler-a/)\n\n expect(() =>\n validateOperatorHandlers([\n replacementHandler({ name: 'handler-a', operators: ['contains'] }),\n replacementHandler({ name: 'handler-b', operators: ['contains'] }),\n ]),\n ).toThrow(/handler-b/)\n\n expect(() =>\n validateOperatorHandlers([\n replacementHandler({ name: 'handler-a', operators: ['contains'] }),\n replacementHandler({ name: 'handler-b', operators: ['contains'] }),\n ]),\n ).toThrow(/contains/)\n })\n\n it('does not throw when two build handlers target the same operator but declare disjoint fieldTypes', () => {\n expect(() =>\n validateOperatorHandlers([\n replacementHandler({ name: 'text', operators: ['contains'], fieldTypes: ['text'] }),\n replacementHandler({ name: 'number', operators: ['contains'], fieldTypes: ['number'] }),\n ]),\n ).not.toThrow()\n })\n\n it('throws when two build handlers target the same operator and at least one declares no fieldTypes', () => {\n expect(() =>\n validateOperatorHandlers([\n replacementHandler({ name: 'unrestricted', operators: ['contains'] }),\n replacementHandler({ name: 'text', operators: ['contains'], fieldTypes: ['text'] }),\n ]),\n ).toThrow()\n })\n\n it('throws when a handler object defines both build and transformOperands', () => {\n const malformed = {\n name: 'malformed',\n operators: ['contains'],\n build: () => null as any,\n transformOperands: ({ column, value }: any) => ({ column, value }),\n } as unknown as DrizzleOperatorHandler\n\n expect(() => validateOperatorHandlers([malformed])).toThrow(/malformed/)\n })\n})\n"],"names":["describe","expect","it","validateOperatorHandlers","transformHandler","overrides","name","operators","transformOperands","column","value","replacementHandler","build","not","toThrow","fieldTypes","malformed"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAI7C,SAASC,wBAAwB,QAAQ,gCAA+B;AAExE,MAAMC,mBAAmB,CACvBC,YAA6C,CAAC,CAAC,GAE9C,CAAA;QACCC,MAAM;QACNC,WAAW;YAAC;SAAW;QACvBC,mBAAmB,CAAC,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAM,CAAA;gBAAED;gBAAQC;YAAM,CAAA;QAC3D,GAAGL,SAAS;IACd,CAAA;AAEF,MAAMM,qBAAqB,CACzBN,YAA6C,CAAC,CAAC,GAE9C,CAAA;QACCC,MAAM;QACNC,WAAW;YAAC;SAAW;QACvBK,OAAO,IAAM;QACb,GAAGP,SAAS;IACd,CAAA;AAEFL,SAAS,4BAA4B;IACnCE,GAAG,oDAAoD;QACrDD,OAAO,IAAME,yBAAyB,EAAE,GAAGU,GAAG,CAACC,OAAO;IACxD;IAEAZ,GAAG,+EAA+E;QAChFD,OAAO,IACLE,yBAAyB;gBACvBC,iBAAiB;oBAAEE,MAAM;gBAAI;gBAC7BF,iBAAiB;oBAAEE,MAAM;gBAAI;gBAC7BF,iBAAiB;oBAAEE,MAAM;gBAAI;aAC9B,GACDO,GAAG,CAACC,OAAO;IACf;IAEAZ,GAAG,yGAAyG;QAC1GD,OAAO,IACLE,yBAAyB;gBACvBQ,mBAAmB;oBAAEL,MAAM;oBAAaC,WAAW;wBAAC;qBAAW;gBAAC;gBAChEI,mBAAmB;oBAAEL,MAAM;oBAAaC,WAAW;wBAAC;qBAAW;gBAAC;aACjE,GACDO,OAAO,CAAC;QAEVb,OAAO,IACLE,yBAAyB;gBACvBQ,mBAAmB;oBAAEL,MAAM;oBAAaC,WAAW;wBAAC;qBAAW;gBAAC;gBAChEI,mBAAmB;oBAAEL,MAAM;oBAAaC,WAAW;wBAAC;qBAAW;gBAAC;aACjE,GACDO,OAAO,CAAC;QAEVb,OAAO,IACLE,yBAAyB;gBACvBQ,mBAAmB;oBAAEL,MAAM;oBAAaC,WAAW;wBAAC;qBAAW;gBAAC;gBAChEI,mBAAmB;oBAAEL,MAAM;oBAAaC,WAAW;wBAAC;qBAAW;gBAAC;aACjE,GACDO,OAAO,CAAC;IACZ;IAEAZ,GAAG,mGAAmG;QACpGD,OAAO,IACLE,yBAAyB;gBACvBQ,mBAAmB;oBAAEL,MAAM;oBAAQC,WAAW;wBAAC;qBAAW;oBAAEQ,YAAY;wBAAC;qBAAO;gBAAC;gBACjFJ,mBAAmB;oBAAEL,MAAM;oBAAUC,WAAW;wBAAC;qBAAW;oBAAEQ,YAAY;wBAAC;qBAAS;gBAAC;aACtF,GACDF,GAAG,CAACC,OAAO;IACf;IAEAZ,GAAG,mGAAmG;QACpGD,OAAO,IACLE,yBAAyB;gBACvBQ,mBAAmB;oBAAEL,MAAM;oBAAgBC,WAAW;wBAAC;qBAAW;gBAAC;gBACnEI,mBAAmB;oBAAEL,MAAM;oBAAQC,WAAW;wBAAC;qBAAW;oBAAEQ,YAAY;wBAAC;qBAAO;gBAAC;aAClF,GACDD,OAAO;IACX;IAEAZ,GAAG,yEAAyE;QAC1E,MAAMc,YAAY;YAChBV,MAAM;YACNC,WAAW;gBAAC;aAAW;YACvBK,OAAO,IAAM;YACbJ,mBAAmB,CAAC,EAAEC,MAAM,EAAEC,KAAK,EAAO,GAAM,CAAA;oBAAED;oBAAQC;gBAAM,CAAA;QAClE;QAEAT,OAAO,IAAME,yBAAyB;gBAACa;aAAU,GAAGF,OAAO,CAAC;IAC9D;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/schema/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAKrE,OAAO,KAAK,EACV,cAAc,EACd,MAAM,EACN,SAAS,EACT,aAAa,EACb,QAAQ,EAGR,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/schema/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAKrE,OAAO,KAAK,EACV,cAAc,EACd,MAAM,EACN,SAAS,EACT,aAAa,EACb,QAAQ,EAGR,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAA;AASpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACvC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC/C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACtC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAA;IAC1C,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrC,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;IACnC,gBAAgB,EAAE,WAAW,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,UAAU,0XAsBpB,IAAI,KAAG,MAmsBT,CAAA"}
|
package/dist/schema/build.js
CHANGED
|
@@ -4,6 +4,7 @@ import { createTableName } from '../createTableName.js';
|
|
|
4
4
|
import { buildForeignKeyName } from '../utilities/buildForeignKeyName.js';
|
|
5
5
|
import { buildIndexName } from '../utilities/buildIndexName.js';
|
|
6
6
|
import { isUUIDType } from '../utilities/isUUIDType.js';
|
|
7
|
+
import { validateIdentifierLength } from '../utilities/validateIdentifierLength.js';
|
|
7
8
|
import { traverseFields } from './traverseFields.js';
|
|
8
9
|
export const buildTable = ({ adapter, baseColumns = {}, baseForeignKeys = {}, baseIndexes = {}, blocksTableNameMap, compoundIndexes, disableNotNull, disableRelsTableUnique = false, disableUnique = false, fields, parentIsLocalized, rootRelationships, rootRelationsToBuild, rootTableIDColType, rootTableName: incomingRootTableName, rootUniqueRelationships, setColumnID, tableName, timestamps, versions, withinLocalizedArrayOrBlock })=>{
|
|
9
10
|
const isRoot = !incomingRootTableName;
|
|
@@ -90,7 +91,7 @@ export const buildTable = ({ adapter, baseColumns = {}, baseForeignKeys = {}, ba
|
|
|
90
91
|
};
|
|
91
92
|
adapter.rawTables[tableName] = table;
|
|
92
93
|
if (hasLocalizedField || localizedRelations.size) {
|
|
93
|
-
const localeTableName = `${tableName}${adapter.localesSuffix}
|
|
94
|
+
const localeTableName = validateIdentifierLength(`${tableName}${adapter.localesSuffix}`);
|
|
94
95
|
adapter.rawTables[localeTableName] = localesTable;
|
|
95
96
|
localesColumns.id = {
|
|
96
97
|
name: 'id',
|
|
@@ -231,7 +232,7 @@ export const buildTable = ({ adapter, baseColumns = {}, baseForeignKeys = {}, ba
|
|
|
231
232
|
}
|
|
232
233
|
if (isRoot) {
|
|
233
234
|
if (hasManyTextField) {
|
|
234
|
-
const textsTableName = `${rootTableName}_texts
|
|
235
|
+
const textsTableName = validateIdentifierLength(`${rootTableName}_texts`);
|
|
235
236
|
adapter.rawTables[textsTableName] = textsTable;
|
|
236
237
|
const columns = {
|
|
237
238
|
id: {
|
|
@@ -343,7 +344,7 @@ export const buildTable = ({ adapter, baseColumns = {}, baseForeignKeys = {}, ba
|
|
|
343
344
|
};
|
|
344
345
|
}
|
|
345
346
|
if (hasManyNumberField) {
|
|
346
|
-
const numbersTableName = `${rootTableName}_numbers
|
|
347
|
+
const numbersTableName = validateIdentifierLength(`${rootTableName}_numbers`);
|
|
347
348
|
adapter.rawTables[numbersTableName] = numbersTable;
|
|
348
349
|
const columns = {
|
|
349
350
|
id: {
|
|
@@ -482,7 +483,7 @@ export const buildTable = ({ adapter, baseColumns = {}, baseForeignKeys = {}, ba
|
|
|
482
483
|
locale: true
|
|
483
484
|
};
|
|
484
485
|
}
|
|
485
|
-
const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}
|
|
486
|
+
const relationshipsTableName = validateIdentifierLength(`${tableName}${adapter.relationshipsSuffix}`);
|
|
486
487
|
const relationshipIndexes = {
|
|
487
488
|
order: {
|
|
488
489
|
name: buildIndexName({
|