@payloadcms/drizzle 4.0.0-internal.c7d5de4 → 4.0.0-internal.cc18726

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.
Files changed (118) hide show
  1. package/dist/createTableName.d.ts.map +1 -1
  2. package/dist/createTableName.js +2 -7
  3. package/dist/createTableName.js.map +1 -1
  4. package/dist/exports/postgres.d.ts +2 -0
  5. package/dist/exports/postgres.d.ts.map +1 -1
  6. package/dist/exports/postgres.js +2 -0
  7. package/dist/exports/postgres.js.map +1 -1
  8. package/dist/index.d.ts +3 -2
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +1 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/migrate.d.ts.map +1 -1
  13. package/dist/migrate.js +35 -13
  14. package/dist/migrate.js.map +1 -1
  15. package/dist/migrateDown.d.ts +2 -1
  16. package/dist/migrateDown.d.ts.map +1 -1
  17. package/dist/migrateDown.js +12 -2
  18. package/dist/migrateDown.js.map +1 -1
  19. package/dist/migrateFresh.d.ts +4 -2
  20. package/dist/migrateFresh.d.ts.map +1 -1
  21. package/dist/migrateFresh.js +21 -7
  22. package/dist/migrateFresh.js.map +1 -1
  23. package/dist/migrateRefresh.d.ts +2 -1
  24. package/dist/migrateRefresh.d.ts.map +1 -1
  25. package/dist/migrateRefresh.js +14 -3
  26. package/dist/migrateRefresh.js.map +1 -1
  27. package/dist/migrateReset.d.ts +2 -1
  28. package/dist/migrateReset.d.ts.map +1 -1
  29. package/dist/migrateReset.js +12 -2
  30. package/dist/migrateReset.js.map +1 -1
  31. package/dist/migrateStatus.d.ts +2 -1
  32. package/dist/migrateStatus.d.ts.map +1 -1
  33. package/dist/migrateStatus.js +11 -6
  34. package/dist/migrateStatus.js.map +1 -1
  35. package/dist/postgres/init.d.ts.map +1 -1
  36. package/dist/postgres/init.js +6 -0
  37. package/dist/postgres/init.js.map +1 -1
  38. package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
  39. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  40. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
  41. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
  42. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
  43. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
  44. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js +91 -0
  45. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js.map +1 -0
  46. package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
  47. package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
  48. package/dist/postgres/query/postgresUnaccent.js +40 -0
  49. package/dist/postgres/query/postgresUnaccent.js.map +1 -0
  50. package/dist/postgres/query/postgresUnaccent.spec.js +71 -0
  51. package/dist/postgres/query/postgresUnaccent.spec.js.map +1 -0
  52. package/dist/postgres/types.d.ts +13 -2
  53. package/dist/postgres/types.d.ts.map +1 -1
  54. package/dist/postgres/types.js.map +1 -1
  55. package/dist/queries/buildOperatorConstraint.d.ts +22 -0
  56. package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
  57. package/dist/queries/buildOperatorConstraint.js +63 -0
  58. package/dist/queries/buildOperatorConstraint.js.map +1 -0
  59. package/dist/queries/buildOperatorConstraint.spec.js +348 -0
  60. package/dist/queries/buildOperatorConstraint.spec.js.map +1 -0
  61. package/dist/queries/getTableColumnFromPath.d.ts +12 -3
  62. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  63. package/dist/queries/getTableColumnFromPath.js +50 -27
  64. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  65. package/dist/queries/operatorMap.d.ts +7 -3
  66. package/dist/queries/operatorMap.d.ts.map +1 -1
  67. package/dist/queries/operatorMap.js.map +1 -1
  68. package/dist/queries/parseParams.d.ts.map +1 -1
  69. package/dist/queries/parseParams.js +203 -8
  70. package/dist/queries/parseParams.js.map +1 -1
  71. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  72. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  73. package/dist/queries/resolveRelationshipPath.js +66 -0
  74. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  75. package/dist/queries/validateOperatorHandlers.d.ts +8 -0
  76. package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
  77. package/dist/queries/validateOperatorHandlers.js +30 -0
  78. package/dist/queries/validateOperatorHandlers.js.map +1 -0
  79. package/dist/queries/validateOperatorHandlers.spec.js +142 -0
  80. package/dist/queries/validateOperatorHandlers.spec.js.map +1 -0
  81. package/dist/schema/buildRawSchema.spec.js +290 -0
  82. package/dist/schema/buildRawSchema.spec.js.map +1 -0
  83. package/dist/schema/traverseFields.js +5 -5
  84. package/dist/schema/traverseFields.js.map +1 -1
  85. package/dist/types.d.ts +50 -2
  86. package/dist/types.d.ts.map +1 -1
  87. package/dist/types.js.map +1 -1
  88. package/dist/updateJobs.d.ts.map +1 -1
  89. package/dist/updateJobs.js +37 -0
  90. package/dist/updateJobs.js.map +1 -1
  91. package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
  92. package/dist/utilities/buildCreateMigration.js +12 -8
  93. package/dist/utilities/buildCreateMigration.js.map +1 -1
  94. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
  95. package/dist/utilities/buildForeignKeyName.js +3 -2
  96. package/dist/utilities/buildForeignKeyName.js.map +1 -1
  97. package/dist/utilities/buildIndexName.d.ts.map +1 -1
  98. package/dist/utilities/buildIndexName.js +3 -2
  99. package/dist/utilities/buildIndexName.js.map +1 -1
  100. package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
  101. package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
  102. package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
  103. package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
  104. package/dist/utilities/checkTruncatedIdentifiers.spec.js +301 -0
  105. package/dist/utilities/checkTruncatedIdentifiers.spec.js.map +1 -0
  106. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  107. package/dist/utilities/createSchemaGenerator.js +3 -0
  108. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  109. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
  110. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
  111. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  112. package/dist/utilities/validateIdentifierLength.d.ts +12 -0
  113. package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
  114. package/dist/utilities/validateIdentifierLength.js +18 -0
  115. package/dist/utilities/validateIdentifierLength.js.map +1 -0
  116. package/dist/utilities/validateIdentifierLength.spec.js +19 -0
  117. package/dist/utilities/validateIdentifierLength.spec.js.map +1 -0
  118. package/package.json +3 -3
@@ -0,0 +1,71 @@
1
+ import { is, sql } from 'drizzle-orm';
2
+ import { PgUUID } from 'drizzle-orm/pg-core';
3
+ import { describe, expect, it } from 'vitest';
4
+ import { postgresUnaccent } from './postgresUnaccent.js';
5
+ describe('postgresUnaccent', ()=>{
6
+ it('returns a handler with the expected name and operators', ()=>{
7
+ const handler = postgresUnaccent();
8
+ expect(handler.name).toBe('postgres-unaccent');
9
+ expect(handler.operators).toEqual([
10
+ 'contains',
11
+ 'like',
12
+ 'not_like'
13
+ ]);
14
+ });
15
+ it('declares fieldTypes restricted to text and textarea', ()=>{
16
+ const handler = postgresUnaccent();
17
+ expect(handler.fieldTypes).toEqual([
18
+ 'text',
19
+ 'textarea'
20
+ ]);
21
+ });
22
+ it('declares requiredExtensions of unaccent', ()=>{
23
+ const handler = postgresUnaccent();
24
+ expect(handler.requiredExtensions).toEqual([
25
+ 'unaccent'
26
+ ]);
27
+ });
28
+ it('wraps the column and value in a parameterized unaccent(...) SQL expression', ()=>{
29
+ const handler = postgresUnaccent();
30
+ const column = sql`"title"`;
31
+ const result = handler.transformOperands({
32
+ adapter: {},
33
+ column,
34
+ field: {
35
+ name: 'title',
36
+ type: 'text'
37
+ },
38
+ originalOperator: 'contains',
39
+ path: 'title',
40
+ resolvedOperator: 'contains',
41
+ storage: 'column',
42
+ value: '%acido%'
43
+ });
44
+ expect(is(result.column, Object)).toBe(true);
45
+ expect(result.column.queryChunks[0].value[0]).toBe('unaccent(');
46
+ expect(result.column.queryChunks[1]).toBe(column);
47
+ expect(result.value.queryChunks[0].value[0]).toBe('unaccent(');
48
+ expect(result.value.queryChunks[1]).toBe('%acido%');
49
+ });
50
+ it('returns the operands unchanged when the column is a native PgUUID column', ()=>{
51
+ const handler = postgresUnaccent();
52
+ const uuidColumn = Object.create(PgUUID.prototype);
53
+ const result = handler.transformOperands({
54
+ adapter: {},
55
+ column: uuidColumn,
56
+ field: {
57
+ name: 'id',
58
+ type: 'text'
59
+ },
60
+ originalOperator: 'contains',
61
+ path: 'id',
62
+ resolvedOperator: 'contains',
63
+ storage: 'column',
64
+ value: '%acido%'
65
+ });
66
+ expect(result.column).toBe(uuidColumn);
67
+ expect(result.value).toBe('%acido%');
68
+ });
69
+ });
70
+
71
+ //# sourceMappingURL=postgresUnaccent.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/postgres/query/postgresUnaccent.spec.ts"],"sourcesContent":["import { is, sql } from 'drizzle-orm'\nimport { PgUUID } from 'drizzle-orm/pg-core'\nimport { describe, expect, it } from 'vitest'\n\nimport { postgresUnaccent } from './postgresUnaccent.js'\n\ndescribe('postgresUnaccent', () => {\n it('returns a handler with the expected name and operators', () => {\n const handler = postgresUnaccent()\n\n expect(handler.name).toBe('postgres-unaccent')\n expect(handler.operators).toEqual(['contains', 'like', 'not_like'])\n })\n\n it('declares fieldTypes restricted to text and textarea', () => {\n const handler = postgresUnaccent()\n\n expect(handler.fieldTypes).toEqual(['text', 'textarea'])\n })\n\n it('declares requiredExtensions of unaccent', () => {\n const handler = postgresUnaccent()\n\n expect(handler.requiredExtensions).toEqual(['unaccent'])\n })\n\n it('wraps the column and value in a parameterized unaccent(...) SQL expression', () => {\n const handler = postgresUnaccent()\n const column = sql`\"title\"`\n\n const result = handler.transformOperands({\n adapter: {} as any,\n column,\n field: { name: 'title', type: 'text' } as any,\n originalOperator: 'contains',\n path: 'title',\n resolvedOperator: 'contains',\n storage: 'column',\n value: '%acido%',\n })\n\n expect(is(result.column, Object)).toBe(true)\n expect((result.column as any).queryChunks[0].value[0]).toBe('unaccent(')\n expect((result.column as any).queryChunks[1]).toBe(column)\n\n expect((result.value as any).queryChunks[0].value[0]).toBe('unaccent(')\n expect((result.value as any).queryChunks[1]).toBe('%acido%')\n })\n\n it('returns the operands unchanged when the column is a native PgUUID column', () => {\n const handler = postgresUnaccent()\n const uuidColumn = Object.create(PgUUID.prototype)\n\n const result = handler.transformOperands({\n adapter: {} as any,\n column: uuidColumn,\n field: { name: 'id', type: 'text' } as any,\n originalOperator: 'contains',\n path: 'id',\n resolvedOperator: 'contains',\n storage: 'column',\n value: '%acido%',\n })\n\n expect(result.column).toBe(uuidColumn)\n expect(result.value).toBe('%acido%')\n })\n})\n"],"names":["is","sql","PgUUID","describe","expect","it","postgresUnaccent","handler","name","toBe","operators","toEqual","fieldTypes","requiredExtensions","column","result","transformOperands","adapter","field","type","originalOperator","path","resolvedOperator","storage","value","Object","queryChunks","uuidColumn","create","prototype"],"mappings":"AAAA,SAASA,EAAE,EAAEC,GAAG,QAAQ,cAAa;AACrC,SAASC,MAAM,QAAQ,sBAAqB;AAC5C,SAASC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,gBAAgB,QAAQ,wBAAuB;AAExDH,SAAS,oBAAoB;IAC3BE,GAAG,0DAA0D;QAC3D,MAAME,UAAUD;QAEhBF,OAAOG,QAAQC,IAAI,EAAEC,IAAI,CAAC;QAC1BL,OAAOG,QAAQG,SAAS,EAAEC,OAAO,CAAC;YAAC;YAAY;YAAQ;SAAW;IACpE;IAEAN,GAAG,uDAAuD;QACxD,MAAME,UAAUD;QAEhBF,OAAOG,QAAQK,UAAU,EAAED,OAAO,CAAC;YAAC;YAAQ;SAAW;IACzD;IAEAN,GAAG,2CAA2C;QAC5C,MAAME,UAAUD;QAEhBF,OAAOG,QAAQM,kBAAkB,EAAEF,OAAO,CAAC;YAAC;SAAW;IACzD;IAEAN,GAAG,8EAA8E;QAC/E,MAAME,UAAUD;QAChB,MAAMQ,SAASb,GAAG,CAAC,OAAO,CAAC;QAE3B,MAAMc,SAASR,QAAQS,iBAAiB,CAAC;YACvCC,SAAS,CAAC;YACVH;YACAI,OAAO;gBAAEV,MAAM;gBAASW,MAAM;YAAO;YACrCC,kBAAkB;YAClBC,MAAM;YACNC,kBAAkB;YAClBC,SAAS;YACTC,OAAO;QACT;QAEApB,OAAOJ,GAAGe,OAAOD,MAAM,EAAEW,SAAShB,IAAI,CAAC;QACvCL,OAAO,AAACW,OAAOD,MAAM,CAASY,WAAW,CAAC,EAAE,CAACF,KAAK,CAAC,EAAE,EAAEf,IAAI,CAAC;QAC5DL,OAAO,AAACW,OAAOD,MAAM,CAASY,WAAW,CAAC,EAAE,EAAEjB,IAAI,CAACK;QAEnDV,OAAO,AAACW,OAAOS,KAAK,CAASE,WAAW,CAAC,EAAE,CAACF,KAAK,CAAC,EAAE,EAAEf,IAAI,CAAC;QAC3DL,OAAO,AAACW,OAAOS,KAAK,CAASE,WAAW,CAAC,EAAE,EAAEjB,IAAI,CAAC;IACpD;IAEAJ,GAAG,4EAA4E;QAC7E,MAAME,UAAUD;QAChB,MAAMqB,aAAaF,OAAOG,MAAM,CAAC1B,OAAO2B,SAAS;QAEjD,MAAMd,SAASR,QAAQS,iBAAiB,CAAC;YACvCC,SAAS,CAAC;YACVH,QAAQa;YACRT,OAAO;gBAAEV,MAAM;gBAAMW,MAAM;YAAO;YAClCC,kBAAkB;YAClBC,MAAM;YACNC,kBAAkB;YAClBC,SAAS;YACTC,OAAO;QACT;QAEApB,OAAOW,OAAOD,MAAM,EAAEL,IAAI,CAACkB;QAC3BvB,OAAOW,OAAOS,KAAK,EAAEf,IAAI,CAAC;IAC5B;AACF"}
@@ -7,7 +7,7 @@ import type { SQLiteColumn } from 'drizzle-orm/sqlite-core';
7
7
  import type { Payload, PayloadRequest } from 'payload';
8
8
  import type { ClientConfig, QueryResult } from 'pg';
9
9
  import type { extendDrizzleTable, Operators } from '../index.js';
10
- import type { BuildQueryJoinAliases, DrizzleAdapter, TransactionPg } from '../types.js';
10
+ import type { BuildQueryJoinAliases, DrizzleAdapter, DrizzleOperatorHandler, TransactionPg } from '../types.js';
11
11
  export type BaseExtraConfig = Record<string, (cols: GenericColumns) => ForeignKeyBuilder | IndexBuilder | UniqueConstraintBuilder>;
12
12
  export type RelationMap = Map<string, {
13
13
  localized: boolean;
@@ -80,6 +80,16 @@ type PostgresSchemaHookArgs = {
80
80
  schema: PostgresSchema;
81
81
  };
82
82
  export type PostgresSchemaHook = (args: PostgresSchemaHookArgs) => PostgresSchema | Promise<PostgresSchema>;
83
+ export type PostgresOperatorHandler = {
84
+ /**
85
+ * Postgres extensions that must be installed in the database for this handler to be usable.
86
+ * Checked once, against the database, when the adapter connects.
87
+ */
88
+ requiredExtensions?: string[];
89
+ } & DrizzleOperatorHandler;
90
+ export type PostgresQueryConfig = {
91
+ operatorHandlers?: PostgresOperatorHandler[];
92
+ };
83
93
  export type BasePostgresAdapter = {
84
94
  afterSchemaInit: PostgresSchemaHook[];
85
95
  beforeSchemaInit: PostgresSchemaHook[];
@@ -104,6 +114,7 @@ export type BasePostgresAdapter = {
104
114
  insert: Insert;
105
115
  localesSuffix?: string;
106
116
  logger: DrizzleConfig['logger'];
117
+ operatorHandlers: PostgresOperatorHandler[];
107
118
  operators: Operators;
108
119
  pgSchema: Schema;
109
120
  poolOptions?: ClientConfig;
@@ -131,7 +142,7 @@ export type BasePostgresAdapter = {
131
142
  tablesFilter?: string[];
132
143
  versionsSuffix?: string;
133
144
  } & PostgresDrizzleAdapter;
134
- export type PostgresDrizzleAdapter = Omit<DrizzleAdapter, 'countDistinct' | 'deleteWhere' | 'drizzle' | 'dropDatabase' | 'execute' | 'insert' | 'operators' | 'relations'>;
145
+ export type PostgresDrizzleAdapter = Omit<DrizzleAdapter, 'countDistinct' | 'deleteWhere' | 'drizzle' | 'dropDatabase' | 'execute' | 'insert' | 'operatorHandlers' | 'operators' | 'relations'>;
135
146
  export type IDType = 'integer' | 'numeric' | 'uuid' | 'varchar';
136
147
  export type MigrateUpArgs = {
137
148
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/postgres/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/postgres/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,QAAQ,EACR,SAAS,EACT,GAAG,EACJ,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,MAAM,EACN,gCAAgC,EAChC,QAAQ,EACR,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAA;AAEnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,aAAa,EACd,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,eAAe,GAAG,MAAM,CAClC,MAAM,EACN,CAAC,IAAI,EAAE,cAAc,KAAK,iBAAiB,GAAG,YAAY,GAAG,uBAAuB,CACrF,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,CAC3B,MAAM,EACN;IACE,SAAS,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;CACrB,CACF,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,CAClC,gBAAgB,CAAC,cAAc,EAAE,MAAM,CAAC,EACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACxB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,kBAAkB,CAAC;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAA;AAEvD,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAEjF,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAEhE,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE;IACjC,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;IAC1C,EAAE,EAAE,UAAU,GAAG,aAAa,CAAA;IAC9B,KAAK,EAAE,qBAAqB,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,GAAG,CAAA;CACX,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAErB,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE;IAC/B,EAAE,EAAE,UAAU,GAAG,aAAa,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,GAAG,CAAA;CACX,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEnB,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEpF,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;IAC9B,EAAE,CAAC,EAAE,UAAU,GAAG,aAAa,CAAA;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;CACnB,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAE7C,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE;IAC1B,EAAE,EAAE,UAAU,GAAG,aAAa,CAAA;IAC9B,kBAAkB,CAAC,EAAE,gCAAgC,CAAC,GAAG,CAAC,CAAA;IAC1D,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CAC5D,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;AAExC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,EAAE;IACnC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAEtB,KAAK,MAAM,GACP;IACE,IAAI,EAAE,OAAO,MAAM,CAAA;IACnB,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;CACzB,GACD,QAAQ,CAAA;AAEZ,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;CAChD,CAAA;AAED,KAAK,sBAAsB,GAAG;IAC5B,OAAO,EAAE,sBAAsB,CAAA;IAC/B,WAAW,EAAE,OAAO,kBAAkB,CAAA;IACtC,MAAM,EAAE,cAAc,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,IAAI,EAAE,sBAAsB,KACzB,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;AAE7C,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC9B,GAAG,sBAAsB,CAAA;AAE1B,MAAM,MAAM,mBAAmB,GAAG;IAChC,gBAAgB,CAAC,EAAE,uBAAuB,EAAE,CAAA;CAC7C,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,EAAE,kBAAkB,EAAE,CAAA;IACrC,gBAAgB,EAAE,kBAAkB,EAAE,CAAA;IACtC,aAAa,EAAE,aAAa,CAAA;IAC5B,cAAc,EAAE,cAAc,CAAA;IAC9B,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,sBAAsB,EAAE,mBAAmB,CAAA;IAC3C,WAAW,EAAE,WAAW,CAAA;IACxB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,OAAO,EAAE,UAAU,CAAA;IACnB,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAClC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACxD,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC/B,gBAAgB,EAAE,uBAAuB,EAAE,CAAA;IAC3C,SAAS,EAAE,SAAS,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,YAAY,CAAA;IAC1B,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAI,EAAE,MAAM,CAAA;QACZ,EAAE,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAC3C,EAAE,CAAA;IACH,IAAI,EAAE,OAAO,CAAA;IACb,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC1C,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,mBAAmB,EAAE,MAAM,IAAI,CAAA;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE;QACR,CAAC,EAAE,EAAE,MAAM,GAAG;YACZ,EAAE,EAAE,UAAU,GAAG,aAAa,CAAA;YAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;YAC3B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;SAC7B,CAAA;KACF,CAAA;IACD,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACpC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,GAAG,sBAAsB,CAAA;AAE1B,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,cAAc,EACZ,eAAe,GACf,aAAa,GACb,SAAS,GACT,cAAc,GACd,SAAS,GACT,QAAQ,GACR,kBAAkB,GAClB,WAAW,GACX,WAAW,CACd,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;AAE/D,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;;;;;;OAUG;IACH,EAAE,EAAE,UAAU,CAAA;IACd;;;;;;;;;;;OAWG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;OAEG;IACH,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;;;;;OAUG;IACH,EAAE,EAAE,UAAU,CAAA;IACd;;;;;;;;;;;OAWG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;OAEG;IACH,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/postgres/types.ts"],"sourcesContent":["import type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type {\n ColumnBaseConfig,\n ColumnDataType,\n DrizzleConfig,\n Relation,\n Relations,\n SQL,\n} from 'drizzle-orm'\nimport type { NodePgDatabase } from 'drizzle-orm/node-postgres'\nimport type {\n ForeignKeyBuilder,\n IndexBuilder,\n PgColumn,\n PgEnum,\n pgEnum,\n PgInsertOnConflictDoUpdateConfig,\n PgSchema,\n PgTableWithColumns,\n UniqueConstraintBuilder,\n} from 'drizzle-orm/pg-core'\nimport type { PgTableFn } from 'drizzle-orm/pg-core/table'\nimport type { SQLiteColumn } from 'drizzle-orm/sqlite-core'\nimport type { Payload, PayloadRequest } from 'payload'\nimport type { ClientConfig, QueryResult } from 'pg'\n\nimport type { extendDrizzleTable, Operators } from '../index.js'\nimport type { BuildQueryJoinAliases, DrizzleAdapter, TransactionPg } from '../types.js'\n\nexport type BaseExtraConfig = Record<\n string,\n (cols: GenericColumns) => ForeignKeyBuilder | IndexBuilder | UniqueConstraintBuilder\n>\n\nexport type RelationMap = Map<\n string,\n {\n localized: boolean\n relationName?: string\n target: string\n type: 'many' | 'one'\n }\n>\n\nexport type GenericColumn = PgColumn<\n ColumnBaseConfig<ColumnDataType, string>,\n Record<string, unknown>\n>\n\nexport type GenericColumns = {\n [x: string]: GenericColumn\n}\n\nexport type GenericTable = PgTableWithColumns<{\n columns: GenericColumns\n dialect: string\n name: string\n schema: string\n}>\n\nexport type GenericEnum = PgEnum<[string, ...string[]]>\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type PostgresDB = NodePgDatabase<Record<string, unknown>>\n\nexport type CountDistinct = (args: {\n column?: PgColumn<any> | SQLiteColumn<any>\n db: PostgresDB | TransactionPg\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: PostgresDB | TransactionPg\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: BasePostgresAdapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: PostgresDB | TransactionPg\n drizzle?: PostgresDB\n raw?: string\n sql?: SQL<unknown>\n}) => Promise<QueryResult<Record<string, T>>>\n\nexport type Insert = (args: {\n db: PostgresDB | TransactionPg\n onConflictDoUpdate?: PgInsertOnConflictDoUpdateConfig<any>\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\nexport type CreateDatabase = (args?: {\n /**\n * Name of a database, defaults to the current one\n */\n name?: string\n /**\n * Schema to create in addition to 'public'. Defaults from adapter.schemaName if exists.\n */\n schemaName?: string\n}) => Promise<boolean>\n\ntype Schema =\n | {\n enum: typeof pgEnum\n table: PgTableFn<string>\n }\n | PgSchema\n\ntype PostgresSchema = {\n enums: Record<string, GenericEnum>\n relations: Record<string, GenericRelation>\n tables: Record<string, PgTableWithColumns<any>>\n}\n\ntype PostgresSchemaHookArgs = {\n adapter: PostgresDrizzleAdapter\n extendTable: typeof extendDrizzleTable\n schema: PostgresSchema\n}\n\nexport type PostgresSchemaHook = (\n args: PostgresSchemaHookArgs,\n) => PostgresSchema | Promise<PostgresSchema>\n\nexport type BasePostgresAdapter = {\n afterSchemaInit: PostgresSchemaHook[]\n beforeSchemaInit: PostgresSchemaHook[]\n countDistinct: CountDistinct\n createDatabase: CreateDatabase\n createExtensions: () => Promise<void>\n defaultDrizzleSnapshot: DrizzleSnapshotJSON\n deleteWhere: DeleteWhere\n disableCreateDatabase: boolean\n drizzle: PostgresDB\n dropDatabase: DropDatabase\n enums: Record<string, GenericEnum>\n execute: Execute<unknown>\n extensions: Record<string, boolean>\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n idType: 'serial' | 'uuid' | 'uuidv7'\n initializing: Promise<void>\n insert: Insert\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n operators: Operators\n pgSchema: Schema\n poolOptions?: ClientConfig\n prodMigrations?: {\n down: (args: MigrateDownArgs) => Promise<void>\n name: string\n up: (args: MigrateUpArgs) => Promise<void>\n }[]\n push: boolean\n readReplicaOptions?: string[]\n rejectInitializing: () => void\n relations: Record<string, GenericRelation>\n relationshipsSuffix?: string\n resolveInitializing: () => void\n schemaName?: string\n sessions: {\n [id: string]: {\n db: PostgresDB | TransactionPg\n reject: () => Promise<void>\n resolve: () => Promise<void>\n }\n }\n tableNameMap: Map<string, string>\n tables: Record<string, GenericTable>\n tablesFilter?: string[]\n versionsSuffix?: string\n} & PostgresDrizzleAdapter\n\nexport type PostgresDrizzleAdapter = Omit<\n DrizzleAdapter,\n | 'countDistinct'\n | 'deleteWhere'\n | 'drizzle'\n | 'dropDatabase'\n | 'execute'\n | 'insert'\n | 'operators'\n | 'relations'\n>\n\nexport type IDType = 'integer' | 'numeric' | 'uuid' | 'varchar'\n\nexport type MigrateUpArgs = {\n /**\n * The Postgres Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const { rows: posts } = await db.execute(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: PostgresDB\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n\nexport type MigrateDownArgs = {\n /**\n * The Postgres Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateDownArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const { rows: posts } = await db.execute(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: PostgresDB\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateDownArgs } from '@payloadcms/db-postgres'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n"],"names":[],"mappings":"AAoOA,WA8BC"}
1
+ {"version":3,"sources":["../../src/postgres/types.ts"],"sourcesContent":["import type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type {\n ColumnBaseConfig,\n ColumnDataType,\n DrizzleConfig,\n Relation,\n Relations,\n SQL,\n} from 'drizzle-orm'\nimport type { NodePgDatabase } from 'drizzle-orm/node-postgres'\nimport type {\n ForeignKeyBuilder,\n IndexBuilder,\n PgColumn,\n PgEnum,\n pgEnum,\n PgInsertOnConflictDoUpdateConfig,\n PgSchema,\n PgTableWithColumns,\n UniqueConstraintBuilder,\n} from 'drizzle-orm/pg-core'\nimport type { PgTableFn } from 'drizzle-orm/pg-core/table'\nimport type { SQLiteColumn } from 'drizzle-orm/sqlite-core'\nimport type { Payload, PayloadRequest } from 'payload'\nimport type { ClientConfig, QueryResult } from 'pg'\n\nimport type { extendDrizzleTable, Operators } from '../index.js'\nimport type {\n BuildQueryJoinAliases,\n DrizzleAdapter,\n DrizzleOperatorHandler,\n TransactionPg,\n} from '../types.js'\n\nexport type BaseExtraConfig = Record<\n string,\n (cols: GenericColumns) => ForeignKeyBuilder | IndexBuilder | UniqueConstraintBuilder\n>\n\nexport type RelationMap = Map<\n string,\n {\n localized: boolean\n relationName?: string\n target: string\n type: 'many' | 'one'\n }\n>\n\nexport type GenericColumn = PgColumn<\n ColumnBaseConfig<ColumnDataType, string>,\n Record<string, unknown>\n>\n\nexport type GenericColumns = {\n [x: string]: GenericColumn\n}\n\nexport type GenericTable = PgTableWithColumns<{\n columns: GenericColumns\n dialect: string\n name: string\n schema: string\n}>\n\nexport type GenericEnum = PgEnum<[string, ...string[]]>\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type PostgresDB = NodePgDatabase<Record<string, unknown>>\n\nexport type CountDistinct = (args: {\n column?: PgColumn<any> | SQLiteColumn<any>\n db: PostgresDB | TransactionPg\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: PostgresDB | TransactionPg\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: BasePostgresAdapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: PostgresDB | TransactionPg\n drizzle?: PostgresDB\n raw?: string\n sql?: SQL<unknown>\n}) => Promise<QueryResult<Record<string, T>>>\n\nexport type Insert = (args: {\n db: PostgresDB | TransactionPg\n onConflictDoUpdate?: PgInsertOnConflictDoUpdateConfig<any>\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\nexport type CreateDatabase = (args?: {\n /**\n * Name of a database, defaults to the current one\n */\n name?: string\n /**\n * Schema to create in addition to 'public'. Defaults from adapter.schemaName if exists.\n */\n schemaName?: string\n}) => Promise<boolean>\n\ntype Schema =\n | {\n enum: typeof pgEnum\n table: PgTableFn<string>\n }\n | PgSchema\n\ntype PostgresSchema = {\n enums: Record<string, GenericEnum>\n relations: Record<string, GenericRelation>\n tables: Record<string, PgTableWithColumns<any>>\n}\n\ntype PostgresSchemaHookArgs = {\n adapter: PostgresDrizzleAdapter\n extendTable: typeof extendDrizzleTable\n schema: PostgresSchema\n}\n\nexport type PostgresSchemaHook = (\n args: PostgresSchemaHookArgs,\n) => PostgresSchema | Promise<PostgresSchema>\n\nexport type PostgresOperatorHandler = {\n /**\n * Postgres extensions that must be installed in the database for this handler to be usable.\n * Checked once, against the database, when the adapter connects.\n */\n requiredExtensions?: string[]\n} & DrizzleOperatorHandler\n\nexport type PostgresQueryConfig = {\n operatorHandlers?: PostgresOperatorHandler[]\n}\n\nexport type BasePostgresAdapter = {\n afterSchemaInit: PostgresSchemaHook[]\n beforeSchemaInit: PostgresSchemaHook[]\n countDistinct: CountDistinct\n createDatabase: CreateDatabase\n createExtensions: () => Promise<void>\n defaultDrizzleSnapshot: DrizzleSnapshotJSON\n deleteWhere: DeleteWhere\n disableCreateDatabase: boolean\n drizzle: PostgresDB\n dropDatabase: DropDatabase\n enums: Record<string, GenericEnum>\n execute: Execute<unknown>\n extensions: Record<string, boolean>\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n idType: 'serial' | 'uuid' | 'uuidv7'\n initializing: Promise<void>\n insert: Insert\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n operatorHandlers: PostgresOperatorHandler[]\n operators: Operators\n pgSchema: Schema\n poolOptions?: ClientConfig\n prodMigrations?: {\n down: (args: MigrateDownArgs) => Promise<void>\n name: string\n up: (args: MigrateUpArgs) => Promise<void>\n }[]\n push: boolean\n readReplicaOptions?: string[]\n rejectInitializing: () => void\n relations: Record<string, GenericRelation>\n relationshipsSuffix?: string\n resolveInitializing: () => void\n schemaName?: string\n sessions: {\n [id: string]: {\n db: PostgresDB | TransactionPg\n reject: () => Promise<void>\n resolve: () => Promise<void>\n }\n }\n tableNameMap: Map<string, string>\n tables: Record<string, GenericTable>\n tablesFilter?: string[]\n versionsSuffix?: string\n} & PostgresDrizzleAdapter\n\nexport type PostgresDrizzleAdapter = Omit<\n DrizzleAdapter,\n | 'countDistinct'\n | 'deleteWhere'\n | 'drizzle'\n | 'dropDatabase'\n | 'execute'\n | 'insert'\n | 'operatorHandlers'\n | 'operators'\n | 'relations'\n>\n\nexport type IDType = 'integer' | 'numeric' | 'uuid' | 'varchar'\n\nexport type MigrateUpArgs = {\n /**\n * The Postgres Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const { rows: posts } = await db.execute(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: PostgresDB\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n\nexport type MigrateDownArgs = {\n /**\n * The Postgres Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateDownArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const { rows: posts } = await db.execute(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: PostgresDB\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateDownArgs } from '@payloadcms/db-postgres'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n"],"names":[],"mappings":"AAuPA,WA8BC"}
@@ -0,0 +1,22 @@
1
+ import type { Column, SQL } from 'drizzle-orm';
2
+ import type { FlattenedField, Operator } from 'payload';
3
+ import type { DrizzleAdapter } from '../types.js';
4
+ import type { DrizzleResolvedOperator } from './operatorMap.js';
5
+ type Args = {
6
+ adapter: DrizzleAdapter;
7
+ column: Column | SQL;
8
+ field: FlattenedField;
9
+ locale?: string;
10
+ originalOperator: Operator;
11
+ path: string;
12
+ resolvedOperator: DrizzleResolvedOperator;
13
+ value: unknown;
14
+ };
15
+ /**
16
+ * Builds the final, user-facing SQL comparison for one query leaf: applies every matching
17
+ * operand-transform handler in configuration order, then either calls the single matching
18
+ * replacement handler or falls back to `adapter.operators[resolvedOperator]`.
19
+ */
20
+ export declare const buildOperatorConstraint: (args: Args) => SQL;
21
+ export {};
22
+ //# sourceMappingURL=buildOperatorConstraint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildOperatorConstraint.d.ts","sourceRoot":"","sources":["../../src/queries/buildOperatorConstraint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvD,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAE/D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;IACpB,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,QAAQ,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE,uBAAuB,CAAA;IACzC,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAsBD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,SAAU,IAAI,KAAG,GAuDpD,CAAA"}
@@ -0,0 +1,63 @@
1
+ import { APIError } from 'payload';
2
+ const isTransformHandler = (handler)=>typeof handler.transformOperands === 'function';
3
+ const isReplacementHandler = (handler)=>typeof handler.build === 'function';
4
+ const handlerMatches = (handler, args)=>{
5
+ if (!handler.operators.includes(args.resolvedOperator)) {
6
+ return false;
7
+ }
8
+ if (handler.fieldTypes && !handler.fieldTypes.includes(args.field.type)) {
9
+ return false;
10
+ }
11
+ return true;
12
+ };
13
+ /**
14
+ * Builds the final, user-facing SQL comparison for one query leaf: applies every matching
15
+ * operand-transform handler in configuration order, then either calls the single matching
16
+ * replacement handler or falls back to `adapter.operators[resolvedOperator]`.
17
+ */ export const buildOperatorConstraint = (args)=>{
18
+ const { adapter, field, locale, originalOperator, path, resolvedOperator } = args;
19
+ const matchingHandlers = (adapter.operatorHandlers ?? []).filter((handler)=>handlerMatches(handler, args));
20
+ const context = {
21
+ adapter,
22
+ column: args.column,
23
+ field,
24
+ locale,
25
+ originalOperator,
26
+ path,
27
+ resolvedOperator,
28
+ storage: 'column',
29
+ value: args.value
30
+ };
31
+ for (const handler of matchingHandlers.filter(isTransformHandler)){
32
+ let result;
33
+ try {
34
+ result = handler.transformOperands({
35
+ ...context
36
+ });
37
+ } catch (error) {
38
+ throw new Error(`Operator handler "${handler.name}" threw while transforming operands for the "${resolvedOperator}" operator at path "${path}".`, {
39
+ cause: error
40
+ });
41
+ }
42
+ if (!result || typeof result !== 'object' || !('column' in result) || !('value' in result)) {
43
+ throw new APIError(`Operator handler "${handler.name}" returned an invalid operand transform for the "${resolvedOperator}" operator at path "${path}". Expected an object with "column" and "value" properties.`);
44
+ }
45
+ context.column = result.column;
46
+ context.value = result.value;
47
+ }
48
+ const replacementHandler = matchingHandlers.find(isReplacementHandler);
49
+ if (replacementHandler) {
50
+ try {
51
+ return replacementHandler.build({
52
+ ...context
53
+ });
54
+ } catch (error) {
55
+ throw new Error(`Operator handler "${replacementHandler.name}" threw while building the "${resolvedOperator}" comparison at path "${path}".`, {
56
+ cause: error
57
+ });
58
+ }
59
+ }
60
+ return adapter.operators[resolvedOperator](context.column, context.value);
61
+ };
62
+
63
+ //# sourceMappingURL=buildOperatorConstraint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/queries/buildOperatorConstraint.ts"],"sourcesContent":["import type { Column, SQL } from 'drizzle-orm'\nimport type { FlattenedField, Operator } from 'payload'\n\nimport { APIError } from 'payload'\n\nimport type {\n DrizzleAdapter,\n DrizzleOperandTransformHandler,\n DrizzleOperatorHandler,\n DrizzleOperatorHandlerContext,\n DrizzleOperatorReplacementHandler,\n} from '../types.js'\nimport type { DrizzleResolvedOperator } from './operatorMap.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n column: Column | SQL\n field: FlattenedField\n locale?: string\n originalOperator: Operator\n path: string\n resolvedOperator: DrizzleResolvedOperator\n value: unknown\n}\n\nconst isTransformHandler = (\n handler: DrizzleOperatorHandler,\n): handler is DrizzleOperandTransformHandler => typeof handler.transformOperands === 'function'\n\nconst isReplacementHandler = (\n handler: DrizzleOperatorHandler,\n): handler is DrizzleOperatorReplacementHandler => typeof handler.build === 'function'\n\nconst handlerMatches = (handler: DrizzleOperatorHandler, args: Args): boolean => {\n if (!handler.operators.includes(args.resolvedOperator)) {\n return false\n }\n\n if (handler.fieldTypes && !handler.fieldTypes.includes(args.field.type)) {\n return false\n }\n\n return true\n}\n\n/**\n * Builds the final, user-facing SQL comparison for one query leaf: applies every matching\n * operand-transform handler in configuration order, then either calls the single matching\n * replacement handler or falls back to `adapter.operators[resolvedOperator]`.\n */\nexport const buildOperatorConstraint = (args: Args): SQL => {\n const { adapter, field, locale, originalOperator, path, resolvedOperator } = args\n\n const matchingHandlers = (adapter.operatorHandlers ?? []).filter((handler) =>\n handlerMatches(handler, args),\n )\n\n const context: DrizzleOperatorHandlerContext = {\n adapter,\n column: args.column,\n field,\n locale,\n originalOperator,\n path,\n resolvedOperator,\n storage: 'column',\n value: args.value,\n }\n\n for (const handler of matchingHandlers.filter(isTransformHandler)) {\n let result: { column: Column | SQL; value: unknown }\n\n try {\n result = handler.transformOperands({ ...context })\n } catch (error) {\n throw new Error(\n `Operator handler \"${handler.name}\" threw while transforming operands for the \"${resolvedOperator}\" operator at path \"${path}\".`,\n { cause: error },\n )\n }\n\n if (!result || typeof result !== 'object' || !('column' in result) || !('value' in result)) {\n throw new APIError(\n `Operator handler \"${handler.name}\" returned an invalid operand transform for the \"${resolvedOperator}\" operator at path \"${path}\". Expected an object with \"column\" and \"value\" properties.`,\n )\n }\n\n context.column = result.column\n context.value = result.value\n }\n\n const replacementHandler = matchingHandlers.find(isReplacementHandler)\n\n if (replacementHandler) {\n try {\n return replacementHandler.build({ ...context })\n } catch (error) {\n throw new Error(\n `Operator handler \"${replacementHandler.name}\" threw while building the \"${resolvedOperator}\" comparison at path \"${path}\".`,\n { cause: error },\n )\n }\n }\n\n return adapter.operators[resolvedOperator](context.column, context.value)\n}\n"],"names":["APIError","isTransformHandler","handler","transformOperands","isReplacementHandler","build","handlerMatches","args","operators","includes","resolvedOperator","fieldTypes","field","type","buildOperatorConstraint","adapter","locale","originalOperator","path","matchingHandlers","operatorHandlers","filter","context","column","storage","value","result","error","Error","name","cause","replacementHandler","find"],"mappings":"AAGA,SAASA,QAAQ,QAAQ,UAAS;AAsBlC,MAAMC,qBAAqB,CACzBC,UAC8C,OAAOA,QAAQC,iBAAiB,KAAK;AAErF,MAAMC,uBAAuB,CAC3BF,UACiD,OAAOA,QAAQG,KAAK,KAAK;AAE5E,MAAMC,iBAAiB,CAACJ,SAAiCK;IACvD,IAAI,CAACL,QAAQM,SAAS,CAACC,QAAQ,CAACF,KAAKG,gBAAgB,GAAG;QACtD,OAAO;IACT;IAEA,IAAIR,QAAQS,UAAU,IAAI,CAACT,QAAQS,UAAU,CAACF,QAAQ,CAACF,KAAKK,KAAK,CAACC,IAAI,GAAG;QACvE,OAAO;IACT;IAEA,OAAO;AACT;AAEA;;;;CAIC,GACD,OAAO,MAAMC,0BAA0B,CAACP;IACtC,MAAM,EAAEQ,OAAO,EAAEH,KAAK,EAAEI,MAAM,EAAEC,gBAAgB,EAAEC,IAAI,EAAER,gBAAgB,EAAE,GAAGH;IAE7E,MAAMY,mBAAmB,AAACJ,CAAAA,QAAQK,gBAAgB,IAAI,EAAE,AAAD,EAAGC,MAAM,CAAC,CAACnB,UAChEI,eAAeJ,SAASK;IAG1B,MAAMe,UAAyC;QAC7CP;QACAQ,QAAQhB,KAAKgB,MAAM;QACnBX;QACAI;QACAC;QACAC;QACAR;QACAc,SAAS;QACTC,OAAOlB,KAAKkB,KAAK;IACnB;IAEA,KAAK,MAAMvB,WAAWiB,iBAAiBE,MAAM,CAACpB,oBAAqB;QACjE,IAAIyB;QAEJ,IAAI;YACFA,SAASxB,QAAQC,iBAAiB,CAAC;gBAAE,GAAGmB,OAAO;YAAC;QAClD,EAAE,OAAOK,OAAO;YACd,MAAM,IAAIC,MACR,CAAC,kBAAkB,EAAE1B,QAAQ2B,IAAI,CAAC,6CAA6C,EAAEnB,iBAAiB,oBAAoB,EAAEQ,KAAK,EAAE,CAAC,EAChI;gBAAEY,OAAOH;YAAM;QAEnB;QAEA,IAAI,CAACD,UAAU,OAAOA,WAAW,YAAY,CAAE,CAAA,YAAYA,MAAK,KAAM,CAAE,CAAA,WAAWA,MAAK,GAAI;YAC1F,MAAM,IAAI1B,SACR,CAAC,kBAAkB,EAAEE,QAAQ2B,IAAI,CAAC,iDAAiD,EAAEnB,iBAAiB,oBAAoB,EAAEQ,KAAK,2DAA2D,CAAC;QAEjM;QAEAI,QAAQC,MAAM,GAAGG,OAAOH,MAAM;QAC9BD,QAAQG,KAAK,GAAGC,OAAOD,KAAK;IAC9B;IAEA,MAAMM,qBAAqBZ,iBAAiBa,IAAI,CAAC5B;IAEjD,IAAI2B,oBAAoB;QACtB,IAAI;YACF,OAAOA,mBAAmB1B,KAAK,CAAC;gBAAE,GAAGiB,OAAO;YAAC;QAC/C,EAAE,OAAOK,OAAO;YACd,MAAM,IAAIC,MACR,CAAC,kBAAkB,EAAEG,mBAAmBF,IAAI,CAAC,4BAA4B,EAAEnB,iBAAiB,sBAAsB,EAAEQ,KAAK,EAAE,CAAC,EAC5H;gBAAEY,OAAOH;YAAM;QAEnB;IACF;IAEA,OAAOZ,QAAQP,SAAS,CAACE,iBAAiB,CAACY,QAAQC,MAAM,EAAED,QAAQG,KAAK;AAC1E,EAAC"}
@@ -0,0 +1,348 @@
1
+ import { sql } from 'drizzle-orm';
2
+ import { describe, expect, it, vi } from 'vitest';
3
+ import { buildOperatorConstraint } from './buildOperatorConstraint.js';
4
+ const textField = {
5
+ name: 'title',
6
+ type: 'text'
7
+ };
8
+ const numberField = {
9
+ name: 'age',
10
+ type: 'number'
11
+ };
12
+ describe('buildOperatorConstraint', ()=>{
13
+ it('calls the default operator unchanged when no handlers are configured', ()=>{
14
+ const sentinel = sql`sentinel`;
15
+ const containsOperator = vi.fn().mockReturnValue(sentinel);
16
+ const adapter = {
17
+ operatorHandlers: [],
18
+ operators: {
19
+ contains: containsOperator
20
+ }
21
+ };
22
+ const column = 'col';
23
+ const result = buildOperatorConstraint({
24
+ adapter,
25
+ column,
26
+ field: textField,
27
+ originalOperator: 'contains',
28
+ path: 'title',
29
+ resolvedOperator: 'contains',
30
+ value: 'acido'
31
+ });
32
+ expect(containsOperator).toHaveBeenCalledWith(column, 'acido');
33
+ expect(result).toBe(sentinel);
34
+ });
35
+ it('applies operand-transform handlers in configuration order before the default operator runs', ()=>{
36
+ const calls = [];
37
+ const containsOperator = vi.fn(()=>sql`result`);
38
+ const handlerA = {
39
+ name: 'handler-a',
40
+ operators: [
41
+ 'contains'
42
+ ],
43
+ transformOperands: ({ column, value })=>{
44
+ calls.push('a');
45
+ return {
46
+ column: `${column}-a`,
47
+ value: `${value}-a`
48
+ };
49
+ }
50
+ };
51
+ const handlerB = {
52
+ name: 'handler-b',
53
+ operators: [
54
+ 'contains'
55
+ ],
56
+ transformOperands: ({ column, value })=>{
57
+ calls.push('b');
58
+ return {
59
+ column: `${column}-b`,
60
+ value: `${value}-b`
61
+ };
62
+ }
63
+ };
64
+ const adapter = {
65
+ operatorHandlers: [
66
+ handlerA,
67
+ handlerB
68
+ ],
69
+ operators: {
70
+ contains: containsOperator
71
+ }
72
+ };
73
+ buildOperatorConstraint({
74
+ adapter,
75
+ column: 'base-column',
76
+ field: textField,
77
+ originalOperator: 'contains',
78
+ path: 'title',
79
+ resolvedOperator: 'contains',
80
+ value: 'acido'
81
+ });
82
+ expect(calls).toEqual([
83
+ 'a',
84
+ 'b'
85
+ ]);
86
+ expect(containsOperator).toHaveBeenCalledWith('base-column-a-b', 'acido-a-b');
87
+ });
88
+ it('skips a handler whose operators list excludes the resolved operator', ()=>{
89
+ const transformOperands = vi.fn(({ column, value })=>({
90
+ column,
91
+ value
92
+ }));
93
+ const adapter = {
94
+ operatorHandlers: [
95
+ {
96
+ name: 'like-only',
97
+ operators: [
98
+ 'like'
99
+ ],
100
+ transformOperands
101
+ }
102
+ ],
103
+ operators: {
104
+ contains: vi.fn(()=>sql`result`)
105
+ }
106
+ };
107
+ buildOperatorConstraint({
108
+ adapter,
109
+ column: 'col',
110
+ field: textField,
111
+ originalOperator: 'contains',
112
+ path: 'title',
113
+ resolvedOperator: 'contains',
114
+ value: 'acido'
115
+ });
116
+ expect(transformOperands).not.toHaveBeenCalled();
117
+ });
118
+ it("skips a handler whose fieldTypes excludes the field's type even when operators matches", ()=>{
119
+ const transformOperands = vi.fn(({ column, value })=>({
120
+ column,
121
+ value
122
+ }));
123
+ const adapter = {
124
+ operatorHandlers: [
125
+ {
126
+ name: 'text-only',
127
+ operators: [
128
+ 'contains'
129
+ ],
130
+ fieldTypes: [
131
+ 'text'
132
+ ],
133
+ transformOperands
134
+ }
135
+ ],
136
+ operators: {
137
+ contains: vi.fn(()=>sql`result`)
138
+ }
139
+ };
140
+ buildOperatorConstraint({
141
+ adapter,
142
+ column: 'col',
143
+ field: numberField,
144
+ originalOperator: 'contains',
145
+ path: 'age',
146
+ resolvedOperator: 'contains',
147
+ value: 5
148
+ });
149
+ expect(transformOperands).not.toHaveBeenCalled();
150
+ });
151
+ it('runs a handler with no fieldTypes for every field type', ()=>{
152
+ const transformOperands = vi.fn(({ column, value })=>({
153
+ column,
154
+ value
155
+ }));
156
+ const adapter = {
157
+ operatorHandlers: [
158
+ {
159
+ name: 'universal',
160
+ operators: [
161
+ 'contains'
162
+ ],
163
+ transformOperands
164
+ }
165
+ ],
166
+ operators: {
167
+ contains: vi.fn(()=>sql`result`)
168
+ }
169
+ };
170
+ buildOperatorConstraint({
171
+ adapter,
172
+ column: 'col',
173
+ field: numberField,
174
+ originalOperator: 'contains',
175
+ path: 'age',
176
+ resolvedOperator: 'contains',
177
+ value: 5
178
+ });
179
+ expect(transformOperands).toHaveBeenCalled();
180
+ });
181
+ it('gives a single matching replacement handler the operands after every transform has run, and uses its result instead of the default operator', ()=>{
182
+ const containsOperator = vi.fn();
183
+ const sentinel = sql`replacement`;
184
+ const build = vi.fn().mockReturnValue(sentinel);
185
+ const transformOperands = vi.fn(({ column, value })=>({
186
+ column: `${column}-t`,
187
+ value: `${value}-t`
188
+ }));
189
+ const adapter = {
190
+ operatorHandlers: [
191
+ {
192
+ name: 'transform',
193
+ operators: [
194
+ 'contains'
195
+ ],
196
+ transformOperands
197
+ },
198
+ {
199
+ name: 'replace',
200
+ operators: [
201
+ 'contains'
202
+ ],
203
+ build
204
+ }
205
+ ],
206
+ operators: {
207
+ contains: containsOperator
208
+ }
209
+ };
210
+ const result = buildOperatorConstraint({
211
+ adapter,
212
+ column: 'col',
213
+ field: textField,
214
+ originalOperator: 'contains',
215
+ path: 'title',
216
+ resolvedOperator: 'contains',
217
+ value: 'acido'
218
+ });
219
+ expect(build).toHaveBeenCalledWith(expect.objectContaining({
220
+ column: 'col-t',
221
+ value: 'acido-t'
222
+ }));
223
+ expect(containsOperator).not.toHaveBeenCalled();
224
+ expect(result).toBe(sentinel);
225
+ });
226
+ it('passes originalOperator, resolvedOperator, field, path, and locale to handlers', ()=>{
227
+ let capturedContext;
228
+ const transformOperands = vi.fn((context)=>{
229
+ capturedContext = context;
230
+ return {
231
+ column: context.column,
232
+ value: context.value
233
+ };
234
+ });
235
+ const adapter = {
236
+ operatorHandlers: [
237
+ {
238
+ name: 'observe',
239
+ operators: [
240
+ 'like'
241
+ ],
242
+ transformOperands
243
+ }
244
+ ],
245
+ operators: {
246
+ like: vi.fn(()=>sql`result`)
247
+ }
248
+ };
249
+ buildOperatorConstraint({
250
+ adapter,
251
+ column: 'col',
252
+ field: textField,
253
+ locale: 'es',
254
+ originalOperator: 'like',
255
+ path: 'title',
256
+ resolvedOperator: 'like',
257
+ value: '%nino%'
258
+ });
259
+ expect(capturedContext).toMatchObject({
260
+ field: textField,
261
+ locale: 'es',
262
+ originalOperator: 'like',
263
+ path: 'title',
264
+ resolvedOperator: 'like'
265
+ });
266
+ });
267
+ it('wraps a handler error with the handler name, path, and resolved operator, retaining the original error as the cause', ()=>{
268
+ const originalError = new Error('boom');
269
+ const transformOperands = vi.fn(()=>{
270
+ throw originalError;
271
+ });
272
+ const adapter = {
273
+ operatorHandlers: [
274
+ {
275
+ name: 'explode',
276
+ operators: [
277
+ 'contains'
278
+ ],
279
+ transformOperands
280
+ }
281
+ ],
282
+ operators: {
283
+ contains: vi.fn()
284
+ }
285
+ };
286
+ let thrown;
287
+ try {
288
+ buildOperatorConstraint({
289
+ adapter,
290
+ column: 'col',
291
+ field: textField,
292
+ originalOperator: 'contains',
293
+ path: 'title',
294
+ resolvedOperator: 'contains',
295
+ value: 'acido'
296
+ });
297
+ } catch (error) {
298
+ thrown = error;
299
+ }
300
+ expect(thrown).toBeInstanceOf(Error);
301
+ const error = thrown;
302
+ expect(error.message).toContain('explode');
303
+ expect(error.message).toContain('title');
304
+ expect(error.message).toContain('contains');
305
+ expect(error.cause).toBe(originalError);
306
+ });
307
+ it('throws a configuration error when a transform handler returns operands missing column or value, before any default operator or replacement runs', ()=>{
308
+ const transformOperands = vi.fn().mockReturnValue({
309
+ column: 'only-column'
310
+ });
311
+ const containsOperator = vi.fn();
312
+ const build = vi.fn();
313
+ const adapter = {
314
+ operatorHandlers: [
315
+ {
316
+ name: 'broken',
317
+ operators: [
318
+ 'contains'
319
+ ],
320
+ transformOperands
321
+ },
322
+ {
323
+ name: 'replace',
324
+ operators: [
325
+ 'contains'
326
+ ],
327
+ build
328
+ }
329
+ ],
330
+ operators: {
331
+ contains: containsOperator
332
+ }
333
+ };
334
+ expect(()=>buildOperatorConstraint({
335
+ adapter,
336
+ column: 'col',
337
+ field: textField,
338
+ originalOperator: 'contains',
339
+ path: 'title',
340
+ resolvedOperator: 'contains',
341
+ value: 'acido'
342
+ })).toThrow(/broken/);
343
+ expect(containsOperator).not.toHaveBeenCalled();
344
+ expect(build).not.toHaveBeenCalled();
345
+ });
346
+ });
347
+
348
+ //# sourceMappingURL=buildOperatorConstraint.spec.js.map