@dyrected/core 2.9.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4363,39 +4363,94 @@ function generateOpenApi(config) {
4363
4363
  post: {
4364
4364
  tags: [collectionTag],
4365
4365
  summary: `Aggregate ${labels.plural}`,
4366
- description: `Compute statistical aggregations (count, sum, avg, min, max) across ${labels.plural}.`,
4366
+ description: `Compute statistical aggregations (count, countDistinct, distinct, sum, avg, min, max, groupBy) across ${labels.plural}.`,
4367
+ parameters: [
4368
+ {
4369
+ name: "groupBy",
4370
+ in: "query",
4371
+ description: "Optional field name to compute aggregates grouped by distinct values",
4372
+ required: false,
4373
+ schema: { type: "string" }
4374
+ }
4375
+ ],
4367
4376
  requestBody: {
4368
4377
  required: true,
4369
4378
  content: {
4370
4379
  "application/json": {
4371
4380
  schema: {
4372
- type: "object",
4373
- additionalProperties: {
4374
- type: "object",
4375
- properties: {
4376
- count: { type: "string", example: "*" },
4377
- sum: { type: "string", description: "Field to sum" },
4378
- avg: { type: "string", description: "Field to average" },
4379
- min: { type: "string", description: "Field for minimum" },
4380
- max: { type: "string", description: "Field for maximum" },
4381
- cast: {
4382
- type: "string",
4383
- enum: [
4384
- "number",
4385
- "integer",
4386
- "float",
4387
- "boolean",
4388
- "date",
4389
- "string"
4390
- ]
4391
- },
4392
- where: {
4381
+ oneOf: [
4382
+ {
4383
+ type: "object",
4384
+ description: "Flat aggregate operations dictionary",
4385
+ additionalProperties: {
4393
4386
  type: "object",
4394
- description: "Per-aggregate filter condition",
4395
- additionalProperties: true
4387
+ properties: {
4388
+ count: { type: "string", example: "*" },
4389
+ countDistinct: { type: "string", description: "Field to count unique non-null values" },
4390
+ distinct: { type: "string", description: "Field to extract unique non-null values" },
4391
+ sum: { type: "string", description: "Field to sum" },
4392
+ avg: { type: "string", description: "Field to average" },
4393
+ min: { type: "string", description: "Field for minimum" },
4394
+ max: { type: "string", description: "Field for maximum" },
4395
+ cast: {
4396
+ type: "string",
4397
+ enum: [
4398
+ "number",
4399
+ "integer",
4400
+ "float",
4401
+ "boolean",
4402
+ "date",
4403
+ "string"
4404
+ ]
4405
+ },
4406
+ where: {
4407
+ type: "object",
4408
+ description: "Per-aggregate filter condition",
4409
+ additionalProperties: true
4410
+ }
4411
+ }
4396
4412
  }
4413
+ },
4414
+ {
4415
+ type: "object",
4416
+ description: "Grouped aggregate payload with explicit groupBy property",
4417
+ properties: {
4418
+ groupBy: { type: "string", description: "Field name to group aggregates by" },
4419
+ aggregates: {
4420
+ type: "object",
4421
+ additionalProperties: {
4422
+ type: "object",
4423
+ properties: {
4424
+ count: { type: "string", example: "*" },
4425
+ countDistinct: { type: "string", description: "Field to count unique non-null values" },
4426
+ distinct: { type: "string", description: "Field to extract unique non-null values" },
4427
+ sum: { type: "string", description: "Field to sum" },
4428
+ avg: { type: "string", description: "Field to average" },
4429
+ min: { type: "string", description: "Field for minimum" },
4430
+ max: { type: "string", description: "Field for maximum" },
4431
+ cast: {
4432
+ type: "string",
4433
+ enum: [
4434
+ "number",
4435
+ "integer",
4436
+ "float",
4437
+ "boolean",
4438
+ "date",
4439
+ "string"
4440
+ ]
4441
+ },
4442
+ where: {
4443
+ type: "object",
4444
+ description: "Per-aggregate filter condition",
4445
+ additionalProperties: true
4446
+ }
4447
+ }
4448
+ }
4449
+ }
4450
+ },
4451
+ required: ["aggregates"]
4397
4452
  }
4398
- }
4453
+ ]
4399
4454
  }
4400
4455
  }
4401
4456
  }
@@ -4406,11 +4461,36 @@ function generateOpenApi(config) {
4406
4461
  content: {
4407
4462
  "application/json": {
4408
4463
  schema: {
4409
- type: "object",
4410
- additionalProperties: {
4411
- type: "number",
4412
- nullable: true
4413
- }
4464
+ oneOf: [
4465
+ {
4466
+ type: "object",
4467
+ description: "Flat aggregate results map",
4468
+ additionalProperties: {
4469
+ oneOf: [
4470
+ { type: "number", nullable: true },
4471
+ { type: "array", items: { type: "string" } }
4472
+ ]
4473
+ }
4474
+ },
4475
+ {
4476
+ type: "object",
4477
+ description: "Grouped aggregate results breakdown",
4478
+ properties: {
4479
+ groups: {
4480
+ type: "object",
4481
+ additionalProperties: {
4482
+ type: "object",
4483
+ additionalProperties: {
4484
+ oneOf: [
4485
+ { type: "number", nullable: true },
4486
+ { type: "array", items: { type: "string" } }
4487
+ ]
4488
+ }
4489
+ }
4490
+ }
4491
+ }
4492
+ }
4493
+ ]
4414
4494
  }
4415
4495
  }
4416
4496
  }
package/dist/index.cjs CHANGED
@@ -2449,37 +2449,10 @@ var LIFECYCLE_EVENT_NAMES = [
2449
2449
 
2450
2450
  // src/types/views.ts
2451
2451
  function defineView(config) {
2452
- return {
2453
- slug: config.slug,
2454
- label: config.label,
2455
- icon: config.icon,
2456
- layout: config.layout ?? "table",
2457
- filter: config.filter,
2458
- groupBy: config.groupBy,
2459
- dateField: config.dateField,
2460
- startDateField: config.startDateField,
2461
- endDateField: config.endDateField,
2462
- columns: config.columns,
2463
- sort: config.sort,
2464
- actions: config.actions,
2465
- features: config.features,
2466
- actionOrder: config.actionOrder,
2467
- metrics: config.metrics,
2468
- access: config.access
2469
- };
2452
+ return config;
2470
2453
  }
2471
2454
  function defineAction(config) {
2472
- return {
2473
- name: config.name,
2474
- label: config.label,
2475
- icon: config.icon,
2476
- type: config.type ?? "row",
2477
- confirm: config.confirm,
2478
- fields: config.fields,
2479
- mutation: config.mutation,
2480
- handler: config.handler,
2481
- access: config.access
2482
- };
2455
+ return config;
2483
2456
  }
2484
2457
 
2485
2458
  // src/auth/token.ts
@@ -4298,7 +4271,7 @@ function normalizeConfig(config) {
4298
4271
  function assertNever(op, context) {
4299
4272
  throw new Error(`[dyrected/core] Unhandled where operator "${op}" in ${context}`);
4300
4273
  }
4301
- function parseSqlWhere(where, getJsonField, placeholder = "?", likeOperator = "LIKE") {
4274
+ function parseSqlWhere(where, getJsonField, placeholder = "?", likeOperator = placeholder === "pg" ? "ILIKE" : "LIKE") {
4302
4275
  const params = [];
4303
4276
  let pgIndex = 1;
4304
4277
  function next() {
@@ -4309,8 +4282,16 @@ function parseSqlWhere(where, getJsonField, placeholder = "?", likeOperator = "L
4309
4282
  }
4310
4283
  function buildOperator(field, value) {
4311
4284
  const c = col(field);
4285
+ const isJsonExtract = c.startsWith("data->>") || c.startsWith("json_extract(") || c.startsWith("JSON_UNQUOTE(");
4312
4286
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
4313
- params.push(typeof value === "boolean" ? String(value) : value);
4287
+ if (value === null) {
4288
+ return `${c} IS NULL`;
4289
+ }
4290
+ if (value === "" && placeholder === "pg") {
4291
+ params.push("");
4292
+ return `(${c})::text = ${next()}`;
4293
+ }
4294
+ params.push(typeof value === "boolean" && isJsonExtract ? String(value) : value);
4314
4295
  return `${c} = ${next()}`;
4315
4296
  }
4316
4297
  const entries = Object.entries(value);
@@ -4321,18 +4302,63 @@ function parseSqlWhere(where, getJsonField, placeholder = "?", likeOperator = "L
4321
4302
  return buildSingleOp(c, op, operand);
4322
4303
  }
4323
4304
  function buildSingleOp(c, op, operand) {
4305
+ const isJsonExtract = c.startsWith("data->>") || c.startsWith("json_extract(") || c.startsWith("JSON_UNQUOTE(");
4324
4306
  switch (op) {
4325
4307
  case "equals":
4326
- params.push(typeof operand === "boolean" ? String(operand) : operand);
4308
+ if (operand === null) {
4309
+ return `${c} IS NULL`;
4310
+ }
4311
+ if (operand === "" && placeholder === "pg") {
4312
+ params.push("");
4313
+ return `(${c})::text = ${next()}`;
4314
+ }
4315
+ if (typeof operand === "boolean") {
4316
+ if (placeholder === "?") {
4317
+ params.push(operand ? 1 : 0);
4318
+ } else if (isJsonExtract) {
4319
+ params.push(String(operand));
4320
+ } else {
4321
+ params.push(operand);
4322
+ }
4323
+ } else {
4324
+ params.push(operand);
4325
+ }
4327
4326
  return `${c} = ${next()}`;
4328
4327
  case "not_equals":
4329
- params.push(typeof operand === "boolean" ? String(operand) : operand);
4328
+ if (operand === null) {
4329
+ return `${c} IS NOT NULL`;
4330
+ }
4331
+ if (operand === "" && placeholder === "pg") {
4332
+ params.push("");
4333
+ return `(${c})::text != ${next()}`;
4334
+ }
4335
+ if (typeof operand === "boolean") {
4336
+ if (placeholder === "?") {
4337
+ params.push(operand ? 1 : 0);
4338
+ } else if (isJsonExtract) {
4339
+ params.push(String(operand));
4340
+ } else {
4341
+ params.push(operand);
4342
+ }
4343
+ } else {
4344
+ params.push(operand);
4345
+ }
4330
4346
  return `${c} != ${next()}`;
4331
4347
  case "in": {
4332
4348
  const vals = Array.isArray(operand) ? operand : [operand];
4333
4349
  if (vals.length === 0) return "1=0";
4334
4350
  const placeholders = vals.map((v) => {
4335
- params.push(typeof v === "boolean" ? String(v) : v);
4351
+ if (typeof v === "boolean") {
4352
+ if (placeholder === "?") {
4353
+ params.push(v ? 1 : 0);
4354
+ } else if (isJsonExtract) {
4355
+ params.push(String(v));
4356
+ } else {
4357
+ params.push(v);
4358
+ }
4359
+ } else {
4360
+ params.push(v);
4361
+ }
4336
4362
  return next();
4337
4363
  });
4338
4364
  return `${c} IN (${placeholders.join(", ")})`;
@@ -4341,7 +4367,7 @@ function parseSqlWhere(where, getJsonField, placeholder = "?", likeOperator = "L
4341
4367
  const vals = Array.isArray(operand) ? operand : [operand];
4342
4368
  if (vals.length === 0) return "1=1";
4343
4369
  const placeholders = vals.map((v) => {
4344
- params.push(typeof v === "boolean" ? String(v) : v);
4370
+ params.push(typeof v === "boolean" && isJsonExtract ? String(v) : v);
4345
4371
  return next();
4346
4372
  });
4347
4373
  return `${c} NOT IN (${placeholders.join(", ")})`;
@@ -4367,10 +4393,10 @@ function parseSqlWhere(where, getJsonField, placeholder = "?", likeOperator = "L
4367
4393
  case "contains":
4368
4394
  case "like":
4369
4395
  params.push(`%${operand}%`);
4370
- return `${c} ${likeOperator} ${next()}`;
4396
+ return placeholder === "pg" ? `(${c})::text ${likeOperator} ${next()}` : `${c} ${likeOperator} ${next()}`;
4371
4397
  case "starts_with":
4372
4398
  params.push(`${operand}%`);
4373
- return `${c} ${likeOperator} ${next()}`;
4399
+ return placeholder === "pg" ? `(${c})::text ${likeOperator} ${next()}` : `${c} ${likeOperator} ${next()}`;
4374
4400
  case "exists":
4375
4401
  return operand ? `${c} IS NOT NULL` : `${c} IS NULL`;
4376
4402
  default:
@@ -5151,39 +5177,94 @@ function generateOpenApi(config) {
5151
5177
  post: {
5152
5178
  tags: [collectionTag],
5153
5179
  summary: `Aggregate ${labels.plural}`,
5154
- description: `Compute statistical aggregations (count, sum, avg, min, max) across ${labels.plural}.`,
5180
+ description: `Compute statistical aggregations (count, countDistinct, distinct, sum, avg, min, max, groupBy) across ${labels.plural}.`,
5181
+ parameters: [
5182
+ {
5183
+ name: "groupBy",
5184
+ in: "query",
5185
+ description: "Optional field name to compute aggregates grouped by distinct values",
5186
+ required: false,
5187
+ schema: { type: "string" }
5188
+ }
5189
+ ],
5155
5190
  requestBody: {
5156
5191
  required: true,
5157
5192
  content: {
5158
5193
  "application/json": {
5159
5194
  schema: {
5160
- type: "object",
5161
- additionalProperties: {
5162
- type: "object",
5163
- properties: {
5164
- count: { type: "string", example: "*" },
5165
- sum: { type: "string", description: "Field to sum" },
5166
- avg: { type: "string", description: "Field to average" },
5167
- min: { type: "string", description: "Field for minimum" },
5168
- max: { type: "string", description: "Field for maximum" },
5169
- cast: {
5170
- type: "string",
5171
- enum: [
5172
- "number",
5173
- "integer",
5174
- "float",
5175
- "boolean",
5176
- "date",
5177
- "string"
5178
- ]
5179
- },
5180
- where: {
5195
+ oneOf: [
5196
+ {
5197
+ type: "object",
5198
+ description: "Flat aggregate operations dictionary",
5199
+ additionalProperties: {
5181
5200
  type: "object",
5182
- description: "Per-aggregate filter condition",
5183
- additionalProperties: true
5201
+ properties: {
5202
+ count: { type: "string", example: "*" },
5203
+ countDistinct: { type: "string", description: "Field to count unique non-null values" },
5204
+ distinct: { type: "string", description: "Field to extract unique non-null values" },
5205
+ sum: { type: "string", description: "Field to sum" },
5206
+ avg: { type: "string", description: "Field to average" },
5207
+ min: { type: "string", description: "Field for minimum" },
5208
+ max: { type: "string", description: "Field for maximum" },
5209
+ cast: {
5210
+ type: "string",
5211
+ enum: [
5212
+ "number",
5213
+ "integer",
5214
+ "float",
5215
+ "boolean",
5216
+ "date",
5217
+ "string"
5218
+ ]
5219
+ },
5220
+ where: {
5221
+ type: "object",
5222
+ description: "Per-aggregate filter condition",
5223
+ additionalProperties: true
5224
+ }
5225
+ }
5184
5226
  }
5227
+ },
5228
+ {
5229
+ type: "object",
5230
+ description: "Grouped aggregate payload with explicit groupBy property",
5231
+ properties: {
5232
+ groupBy: { type: "string", description: "Field name to group aggregates by" },
5233
+ aggregates: {
5234
+ type: "object",
5235
+ additionalProperties: {
5236
+ type: "object",
5237
+ properties: {
5238
+ count: { type: "string", example: "*" },
5239
+ countDistinct: { type: "string", description: "Field to count unique non-null values" },
5240
+ distinct: { type: "string", description: "Field to extract unique non-null values" },
5241
+ sum: { type: "string", description: "Field to sum" },
5242
+ avg: { type: "string", description: "Field to average" },
5243
+ min: { type: "string", description: "Field for minimum" },
5244
+ max: { type: "string", description: "Field for maximum" },
5245
+ cast: {
5246
+ type: "string",
5247
+ enum: [
5248
+ "number",
5249
+ "integer",
5250
+ "float",
5251
+ "boolean",
5252
+ "date",
5253
+ "string"
5254
+ ]
5255
+ },
5256
+ where: {
5257
+ type: "object",
5258
+ description: "Per-aggregate filter condition",
5259
+ additionalProperties: true
5260
+ }
5261
+ }
5262
+ }
5263
+ }
5264
+ },
5265
+ required: ["aggregates"]
5185
5266
  }
5186
- }
5267
+ ]
5187
5268
  }
5188
5269
  }
5189
5270
  }
@@ -5194,11 +5275,36 @@ function generateOpenApi(config) {
5194
5275
  content: {
5195
5276
  "application/json": {
5196
5277
  schema: {
5197
- type: "object",
5198
- additionalProperties: {
5199
- type: "number",
5200
- nullable: true
5201
- }
5278
+ oneOf: [
5279
+ {
5280
+ type: "object",
5281
+ description: "Flat aggregate results map",
5282
+ additionalProperties: {
5283
+ oneOf: [
5284
+ { type: "number", nullable: true },
5285
+ { type: "array", items: { type: "string" } }
5286
+ ]
5287
+ }
5288
+ },
5289
+ {
5290
+ type: "object",
5291
+ description: "Grouped aggregate results breakdown",
5292
+ properties: {
5293
+ groups: {
5294
+ type: "object",
5295
+ additionalProperties: {
5296
+ type: "object",
5297
+ additionalProperties: {
5298
+ oneOf: [
5299
+ { type: "number", nullable: true },
5300
+ { type: "array", items: { type: "string" } }
5301
+ ]
5302
+ }
5303
+ }
5304
+ }
5305
+ }
5306
+ }
5307
+ ]
5202
5308
  }
5203
5309
  }
5204
5310
  }
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, G as GlobalConfig, a as DeclarativeHookExpression, W as WorkflowConfig, b as AuthenticatedUser, c as WorkflowTransition, L as LifecycleEventName, d as LifecycleEvent, e as BaseDocument, H as HookRequestContext, f as DetailComputedOptions, g as ComputedHandler, h as DetailComputed, i as DetailCustomOptions, j as DetailCustom, k as DetailDividerOptions, l as DetailDivider, m as DisplayFieldOptions, n as DetailField, o as DetailItem, p as DetailGridOptions, q as DetailGrid, r as DetailRepeatOptions, s as DetailRepeat, t as DetailSectionOptions, u as DetailSection, v as DetailTabOptions, w as DetailTab, x as DetailTabsOptions, y as DetailTabs, z as DetailTextOptions, E as DetailText, I as DetailSchema, J as ArrayField, K as BlocksField, M as BooleanField, N as AuthConfig, O as AccessPolicyResolver, Q as DateField, R as DateTimeField, S as EmailField, T as IconField, U as ImageField, V as JoinField, X as JsonField, Y as MultiSelectField, Z as NumberField, _ as ObjectField, $ as RadioField, a0 as RelationshipField, a1 as RichTextField, a2 as RowField, a3 as SelectField, a4 as TextField, a5 as TextareaField, a6 as TimeField, a7 as UrlField } from './app-config-gEQJFvnN.cjs';
2
- export { a8 as AccessConfig, a9 as AccessFunction, aa as AccessFunctionArgs, ab as AccessResult, ac as AccessRule, ad as ActionConfig, ae as ActionContext, af as ActionType, ag as AdminAuthAccessResolution, ah as AdminAuthClaimMapping, ai as AdminAuthMember, aj as AdminAuthProvider, ak as AdminAuthProviderMembersConfig, al as AdminAuthProvisioningMode, am as AdminAuthResolveAccessArgs, an as AdminAuthResolvedIdentity, ao as AdminConfig, ap as AdminDashboardComponentSlots, aq as AdminIconName, ar as AggregateArgs, as as AggregateCastType, at as AggregateInput, au as AggregateOperation, av as AggregateResult, aw as BaseAdminAuthProvider, ax as BaseFieldAdmin, ay as BlockVariant, az as BooleanFieldAdmin, aA as BooleanFormat, aB as CharacterLimitFieldAdmin, aC as CharacterLimitFieldConfig, aD as CollectionAfterChangeHook, aE as CollectionAfterDeleteHook, aF as CollectionAfterReadHook, aG as CollectionAfterReadHookEntry, aH as CollectionAfterTransitionHook, aI as CollectionBeforeChangeHook, aJ as CollectionBeforeChangeHookEntry, aK as CollectionBeforeDeleteHook, aL as CollectionBeforeReadHook, aM as CollectionBeforeReadHookEntry, aN as CollectionBeforeTransitionHook, aO as CollectionListComponentSlots, aP as CountOperation, aQ as CustomAdminAuthProvider, aR as DatabaseAdapter, aS as DateFieldAdmin, aT as DateFormat, aU as DefineActionOptions, aV as DefineViewOptions, aW as DetailSpan, aX as DisplayTone, aY as DisplayVariant, aZ as DynamicOptionItem, a_ as DynamicOptionsConfig, a$ as DynamicOptionsResolver, b0 as DynamicOptionsResolverArgs, b1 as DyrectedLoggerConfig, b2 as DyrectedObservabilityConfig, b3 as EmailFieldAdmin, b4 as FieldAdminHooks, b5 as FieldAdminOnChangeHook, b6 as FieldAdminOnChangeHookArgs, b7 as FieldAdminOptionsHook, b8 as FieldAdminOptionsHookArgs, b9 as FieldAdminOptionsHookResult, ba as FieldAfterReadHook, bb as FieldAfterReadHookArgs, bc as FieldBase, bd as FieldBeforeChangeHook, be as FieldBeforeChangeHookArgs, bf as FieldHook, bg as FieldHooks, bh as FieldType, bi as FileData, bj as GlobalAfterChangeHook, bk as GlobalAfterReadHook, bl as GlobalAfterReadHookEntry, bm as GlobalBeforeChangeHook, bn as GlobalBeforeChangeHookEntry, bo as GlobalBeforeReadHook, bp as GlobalBeforeReadHookEntry, bq as HeadingLevel, br as HookFunction, bs as IconFieldAdmin, bt as ImageService, bu as InferAggregateResult, bv as JoinFieldAdmin, bw as JsonFieldAdmin, bx as JsonFormat, by as LIFECYCLE_EVENT_NAMES, bz as LifecycleEventHandler, bA as LinkFormat, bB as MetricColor, bC as MultiSelectFieldAdmin, bD as NamedAccessPolicy, bE as NumberFieldAdmin, bF as NumberFormat, bG as NumberLimitFieldAdmin, bH as NumberLimitFieldConfig, bI as NumericOperation, bJ as OIDCAdminAuthProvider, bK as OptionFormat, bL as PaginatedResult, bM as PublicAdminAuthProvider, bN as RadioFieldAdmin, bO as RateLimitConfig, bP as ReadonlyDatabaseAdapter, bQ as RichTextFeature, bR as RichTextFieldConfig, bS as SelectFieldAdmin, bT as StorageAdapter, bU as TextFieldAdmin, bV as TextFormat, bW as TextareaFieldAdmin, bX as TrustProxyConfig, bY as TypedField, bZ as UploadConfig, b_ as UrlFieldAdmin, b$ as UrlLinkValue, c0 as ViewActionFeatures, c1 as ViewConfig, c2 as ViewLayout, c3 as ViewMetric, c4 as ViewSubMetric, c5 as WordLimitFieldAdmin, c6 as WordLimitFieldConfig, c7 as WorkflowMetadata, c8 as WorkflowRole, c9 as WorkflowState, ca as WorkflowTransitionContext, cb as defineAction, cc as defineView } from './app-config-gEQJFvnN.cjs';
1
+ import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, G as GlobalConfig, a as DeclarativeHookExpression, W as WorkflowConfig, b as AuthenticatedUser, c as WorkflowTransition, L as LifecycleEventName, d as LifecycleEvent, e as BaseDocument, H as HookRequestContext, f as DetailComputedOptions, g as ComputedHandler, h as DetailComputed, i as DetailCustomOptions, j as DetailCustom, k as DetailDividerOptions, l as DetailDivider, m as DisplayFieldOptions, n as DetailField, o as DetailItem, p as DetailGridOptions, q as DetailGrid, r as DetailRepeatOptions, s as DetailRepeat, t as DetailSectionOptions, u as DetailSection, v as DetailTabOptions, w as DetailTab, x as DetailTabsOptions, y as DetailTabs, z as DetailTextOptions, E as DetailText, I as DetailSchema, J as ArrayField, K as BlocksField, M as BooleanField, N as AuthConfig, O as AccessPolicyResolver, Q as DateField, R as DateTimeField, S as EmailField, T as IconField, U as ImageField, V as JoinField, X as JsonField, Y as MultiSelectField, Z as NumberField, _ as ObjectField, $ as RadioField, a0 as RelationshipField, a1 as RichTextField, a2 as RowField, a3 as SelectField, a4 as TextField, a5 as TextareaField, a6 as TimeField, a7 as UrlField } from './app-config-DQhcrGDE.cjs';
2
+ export { a8 as AccessConfig, a9 as AccessFunction, aa as AccessFunctionArgs, ab as AccessResult, ac as AccessRule, ad as ActionConfig, ae as ActionContext, af as ActionType, ag as AdminAuthAccessResolution, ah as AdminAuthClaimMapping, ai as AdminAuthMember, aj as AdminAuthProvider, ak as AdminAuthProviderMembersConfig, al as AdminAuthProvisioningMode, am as AdminAuthResolveAccessArgs, an as AdminAuthResolvedIdentity, ao as AdminConfig, ap as AdminDashboardComponentSlots, aq as AdminIconName, ar as AggregateArgs, as as AggregateCastType, at as AggregateInput, au as AggregateOperation, av as AggregateResult, aw as BaseAdminAuthProvider, ax as BaseFieldAdmin, ay as BlockVariant, az as BooleanFieldAdmin, aA as BooleanFormat, aB as CharacterLimitFieldAdmin, aC as CharacterLimitFieldConfig, aD as CollectionAfterChangeHook, aE as CollectionAfterDeleteHook, aF as CollectionAfterReadHook, aG as CollectionAfterReadHookEntry, aH as CollectionAfterTransitionHook, aI as CollectionBeforeChangeHook, aJ as CollectionBeforeChangeHookEntry, aK as CollectionBeforeDeleteHook, aL as CollectionBeforeReadHook, aM as CollectionBeforeReadHookEntry, aN as CollectionBeforeTransitionHook, aO as CollectionListComponentSlots, aP as CountOperation, aQ as CustomAdminAuthProvider, aR as DatabaseAdapter, aS as DateFieldAdmin, aT as DateFormat, aU as DefineActionOptions, aV as DefineViewOptions, aW as DetailSpan, aX as DisplayTone, aY as DisplayVariant, aZ as DistinctCountOperation, a_ as DistinctValuesOperation, a$ as DynamicOptionItem, b0 as DynamicOptionsConfig, b1 as DynamicOptionsResolver, b2 as DynamicOptionsResolverArgs, b3 as DyrectedLoggerConfig, b4 as DyrectedObservabilityConfig, b5 as EmailFieldAdmin, b6 as FieldAdminHooks, b7 as FieldAdminOnChangeHook, b8 as FieldAdminOnChangeHookArgs, b9 as FieldAdminOptionsHook, ba as FieldAdminOptionsHookArgs, bb as FieldAdminOptionsHookResult, bc as FieldAfterReadHook, bd as FieldAfterReadHookArgs, be as FieldBase, bf as FieldBeforeChangeHook, bg as FieldBeforeChangeHookArgs, bh as FieldHook, bi as FieldHooks, bj as FieldType, bk as FileData, bl as GlobalAfterChangeHook, bm as GlobalAfterReadHook, bn as GlobalAfterReadHookEntry, bo as GlobalBeforeChangeHook, bp as GlobalBeforeChangeHookEntry, bq as GlobalBeforeReadHook, br as GlobalBeforeReadHookEntry, bs as HeadingLevel, bt as HookFunction, bu as IconFieldAdmin, bv as ImageService, bw as InferAggregateResult, bx as JoinFieldAdmin, by as JsonFieldAdmin, bz as JsonFormat, bA as LIFECYCLE_EVENT_NAMES, bB as LifecycleEventHandler, bC as LinkFormat, bD as MetricColor, bE as MultiSelectFieldAdmin, bF as NamedAccessPolicy, bG as NumberFieldAdmin, bH as NumberFormat, bI as NumberLimitFieldAdmin, bJ as NumberLimitFieldConfig, bK as NumericOperation, bL as OIDCAdminAuthProvider, bM as OptionFormat, bN as PaginatedResult, bO as PublicAdminAuthProvider, bP as RadioFieldAdmin, bQ as RateLimitConfig, bR as ReadonlyDatabaseAdapter, bS as RichTextFeature, bT as RichTextFieldConfig, bU as SelectFieldAdmin, bV as StorageAdapter, bW as TextFieldAdmin, bX as TextFormat, bY as TextareaFieldAdmin, bZ as TrustProxyConfig, b_ as TypedField, b$ as UploadConfig, c0 as UrlFieldAdmin, c1 as UrlLinkValue, c2 as ViewActionFeatures, c3 as ViewConfig, c4 as ViewLayout, c5 as ViewMetric, c6 as ViewSubMetric, c7 as WordLimitFieldAdmin, c8 as WordLimitFieldConfig, c9 as WorkflowMetadata, ca as WorkflowRole, cb as WorkflowState, cc as WorkflowTransitionContext, cd as defineAction, ce as defineView } from './app-config-DQhcrGDE.cjs';
3
3
  import jexl from 'jexl';
4
4
  import 'lucide-react';
5
5
  import 'pino';
@@ -159,7 +159,7 @@ interface SqlWhereResult {
159
159
  declare function parseSqlWhere(where: WhereClause, getJsonField: (field: string) => string, placeholder?: '?' | 'pg',
160
160
  /**
161
161
  * SQL keyword used for `contains`/`starts_with`. Postgres `LIKE` is
162
- * case-sensitive, so the Postgres adapter passes `'ILIKE'` to keep substring
162
+ * case-sensitive, so the Postgres adapter defaults to `'ILIKE'` to keep substring
163
163
  * matching case-insensitive like SQLite and MySQL.
164
164
  */
165
165
  likeOperator?: 'LIKE' | 'ILIKE'): SqlWhereResult;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, G as GlobalConfig, a as DeclarativeHookExpression, W as WorkflowConfig, b as AuthenticatedUser, c as WorkflowTransition, L as LifecycleEventName, d as LifecycleEvent, e as BaseDocument, H as HookRequestContext, f as DetailComputedOptions, g as ComputedHandler, h as DetailComputed, i as DetailCustomOptions, j as DetailCustom, k as DetailDividerOptions, l as DetailDivider, m as DisplayFieldOptions, n as DetailField, o as DetailItem, p as DetailGridOptions, q as DetailGrid, r as DetailRepeatOptions, s as DetailRepeat, t as DetailSectionOptions, u as DetailSection, v as DetailTabOptions, w as DetailTab, x as DetailTabsOptions, y as DetailTabs, z as DetailTextOptions, E as DetailText, I as DetailSchema, J as ArrayField, K as BlocksField, M as BooleanField, N as AuthConfig, O as AccessPolicyResolver, Q as DateField, R as DateTimeField, S as EmailField, T as IconField, U as ImageField, V as JoinField, X as JsonField, Y as MultiSelectField, Z as NumberField, _ as ObjectField, $ as RadioField, a0 as RelationshipField, a1 as RichTextField, a2 as RowField, a3 as SelectField, a4 as TextField, a5 as TextareaField, a6 as TimeField, a7 as UrlField } from './app-config-gEQJFvnN.js';
2
- export { a8 as AccessConfig, a9 as AccessFunction, aa as AccessFunctionArgs, ab as AccessResult, ac as AccessRule, ad as ActionConfig, ae as ActionContext, af as ActionType, ag as AdminAuthAccessResolution, ah as AdminAuthClaimMapping, ai as AdminAuthMember, aj as AdminAuthProvider, ak as AdminAuthProviderMembersConfig, al as AdminAuthProvisioningMode, am as AdminAuthResolveAccessArgs, an as AdminAuthResolvedIdentity, ao as AdminConfig, ap as AdminDashboardComponentSlots, aq as AdminIconName, ar as AggregateArgs, as as AggregateCastType, at as AggregateInput, au as AggregateOperation, av as AggregateResult, aw as BaseAdminAuthProvider, ax as BaseFieldAdmin, ay as BlockVariant, az as BooleanFieldAdmin, aA as BooleanFormat, aB as CharacterLimitFieldAdmin, aC as CharacterLimitFieldConfig, aD as CollectionAfterChangeHook, aE as CollectionAfterDeleteHook, aF as CollectionAfterReadHook, aG as CollectionAfterReadHookEntry, aH as CollectionAfterTransitionHook, aI as CollectionBeforeChangeHook, aJ as CollectionBeforeChangeHookEntry, aK as CollectionBeforeDeleteHook, aL as CollectionBeforeReadHook, aM as CollectionBeforeReadHookEntry, aN as CollectionBeforeTransitionHook, aO as CollectionListComponentSlots, aP as CountOperation, aQ as CustomAdminAuthProvider, aR as DatabaseAdapter, aS as DateFieldAdmin, aT as DateFormat, aU as DefineActionOptions, aV as DefineViewOptions, aW as DetailSpan, aX as DisplayTone, aY as DisplayVariant, aZ as DynamicOptionItem, a_ as DynamicOptionsConfig, a$ as DynamicOptionsResolver, b0 as DynamicOptionsResolverArgs, b1 as DyrectedLoggerConfig, b2 as DyrectedObservabilityConfig, b3 as EmailFieldAdmin, b4 as FieldAdminHooks, b5 as FieldAdminOnChangeHook, b6 as FieldAdminOnChangeHookArgs, b7 as FieldAdminOptionsHook, b8 as FieldAdminOptionsHookArgs, b9 as FieldAdminOptionsHookResult, ba as FieldAfterReadHook, bb as FieldAfterReadHookArgs, bc as FieldBase, bd as FieldBeforeChangeHook, be as FieldBeforeChangeHookArgs, bf as FieldHook, bg as FieldHooks, bh as FieldType, bi as FileData, bj as GlobalAfterChangeHook, bk as GlobalAfterReadHook, bl as GlobalAfterReadHookEntry, bm as GlobalBeforeChangeHook, bn as GlobalBeforeChangeHookEntry, bo as GlobalBeforeReadHook, bp as GlobalBeforeReadHookEntry, bq as HeadingLevel, br as HookFunction, bs as IconFieldAdmin, bt as ImageService, bu as InferAggregateResult, bv as JoinFieldAdmin, bw as JsonFieldAdmin, bx as JsonFormat, by as LIFECYCLE_EVENT_NAMES, bz as LifecycleEventHandler, bA as LinkFormat, bB as MetricColor, bC as MultiSelectFieldAdmin, bD as NamedAccessPolicy, bE as NumberFieldAdmin, bF as NumberFormat, bG as NumberLimitFieldAdmin, bH as NumberLimitFieldConfig, bI as NumericOperation, bJ as OIDCAdminAuthProvider, bK as OptionFormat, bL as PaginatedResult, bM as PublicAdminAuthProvider, bN as RadioFieldAdmin, bO as RateLimitConfig, bP as ReadonlyDatabaseAdapter, bQ as RichTextFeature, bR as RichTextFieldConfig, bS as SelectFieldAdmin, bT as StorageAdapter, bU as TextFieldAdmin, bV as TextFormat, bW as TextareaFieldAdmin, bX as TrustProxyConfig, bY as TypedField, bZ as UploadConfig, b_ as UrlFieldAdmin, b$ as UrlLinkValue, c0 as ViewActionFeatures, c1 as ViewConfig, c2 as ViewLayout, c3 as ViewMetric, c4 as ViewSubMetric, c5 as WordLimitFieldAdmin, c6 as WordLimitFieldConfig, c7 as WorkflowMetadata, c8 as WorkflowRole, c9 as WorkflowState, ca as WorkflowTransitionContext, cb as defineAction, cc as defineView } from './app-config-gEQJFvnN.js';
1
+ import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, G as GlobalConfig, a as DeclarativeHookExpression, W as WorkflowConfig, b as AuthenticatedUser, c as WorkflowTransition, L as LifecycleEventName, d as LifecycleEvent, e as BaseDocument, H as HookRequestContext, f as DetailComputedOptions, g as ComputedHandler, h as DetailComputed, i as DetailCustomOptions, j as DetailCustom, k as DetailDividerOptions, l as DetailDivider, m as DisplayFieldOptions, n as DetailField, o as DetailItem, p as DetailGridOptions, q as DetailGrid, r as DetailRepeatOptions, s as DetailRepeat, t as DetailSectionOptions, u as DetailSection, v as DetailTabOptions, w as DetailTab, x as DetailTabsOptions, y as DetailTabs, z as DetailTextOptions, E as DetailText, I as DetailSchema, J as ArrayField, K as BlocksField, M as BooleanField, N as AuthConfig, O as AccessPolicyResolver, Q as DateField, R as DateTimeField, S as EmailField, T as IconField, U as ImageField, V as JoinField, X as JsonField, Y as MultiSelectField, Z as NumberField, _ as ObjectField, $ as RadioField, a0 as RelationshipField, a1 as RichTextField, a2 as RowField, a3 as SelectField, a4 as TextField, a5 as TextareaField, a6 as TimeField, a7 as UrlField } from './app-config-DQhcrGDE.js';
2
+ export { a8 as AccessConfig, a9 as AccessFunction, aa as AccessFunctionArgs, ab as AccessResult, ac as AccessRule, ad as ActionConfig, ae as ActionContext, af as ActionType, ag as AdminAuthAccessResolution, ah as AdminAuthClaimMapping, ai as AdminAuthMember, aj as AdminAuthProvider, ak as AdminAuthProviderMembersConfig, al as AdminAuthProvisioningMode, am as AdminAuthResolveAccessArgs, an as AdminAuthResolvedIdentity, ao as AdminConfig, ap as AdminDashboardComponentSlots, aq as AdminIconName, ar as AggregateArgs, as as AggregateCastType, at as AggregateInput, au as AggregateOperation, av as AggregateResult, aw as BaseAdminAuthProvider, ax as BaseFieldAdmin, ay as BlockVariant, az as BooleanFieldAdmin, aA as BooleanFormat, aB as CharacterLimitFieldAdmin, aC as CharacterLimitFieldConfig, aD as CollectionAfterChangeHook, aE as CollectionAfterDeleteHook, aF as CollectionAfterReadHook, aG as CollectionAfterReadHookEntry, aH as CollectionAfterTransitionHook, aI as CollectionBeforeChangeHook, aJ as CollectionBeforeChangeHookEntry, aK as CollectionBeforeDeleteHook, aL as CollectionBeforeReadHook, aM as CollectionBeforeReadHookEntry, aN as CollectionBeforeTransitionHook, aO as CollectionListComponentSlots, aP as CountOperation, aQ as CustomAdminAuthProvider, aR as DatabaseAdapter, aS as DateFieldAdmin, aT as DateFormat, aU as DefineActionOptions, aV as DefineViewOptions, aW as DetailSpan, aX as DisplayTone, aY as DisplayVariant, aZ as DistinctCountOperation, a_ as DistinctValuesOperation, a$ as DynamicOptionItem, b0 as DynamicOptionsConfig, b1 as DynamicOptionsResolver, b2 as DynamicOptionsResolverArgs, b3 as DyrectedLoggerConfig, b4 as DyrectedObservabilityConfig, b5 as EmailFieldAdmin, b6 as FieldAdminHooks, b7 as FieldAdminOnChangeHook, b8 as FieldAdminOnChangeHookArgs, b9 as FieldAdminOptionsHook, ba as FieldAdminOptionsHookArgs, bb as FieldAdminOptionsHookResult, bc as FieldAfterReadHook, bd as FieldAfterReadHookArgs, be as FieldBase, bf as FieldBeforeChangeHook, bg as FieldBeforeChangeHookArgs, bh as FieldHook, bi as FieldHooks, bj as FieldType, bk as FileData, bl as GlobalAfterChangeHook, bm as GlobalAfterReadHook, bn as GlobalAfterReadHookEntry, bo as GlobalBeforeChangeHook, bp as GlobalBeforeChangeHookEntry, bq as GlobalBeforeReadHook, br as GlobalBeforeReadHookEntry, bs as HeadingLevel, bt as HookFunction, bu as IconFieldAdmin, bv as ImageService, bw as InferAggregateResult, bx as JoinFieldAdmin, by as JsonFieldAdmin, bz as JsonFormat, bA as LIFECYCLE_EVENT_NAMES, bB as LifecycleEventHandler, bC as LinkFormat, bD as MetricColor, bE as MultiSelectFieldAdmin, bF as NamedAccessPolicy, bG as NumberFieldAdmin, bH as NumberFormat, bI as NumberLimitFieldAdmin, bJ as NumberLimitFieldConfig, bK as NumericOperation, bL as OIDCAdminAuthProvider, bM as OptionFormat, bN as PaginatedResult, bO as PublicAdminAuthProvider, bP as RadioFieldAdmin, bQ as RateLimitConfig, bR as ReadonlyDatabaseAdapter, bS as RichTextFeature, bT as RichTextFieldConfig, bU as SelectFieldAdmin, bV as StorageAdapter, bW as TextFieldAdmin, bX as TextFormat, bY as TextareaFieldAdmin, bZ as TrustProxyConfig, b_ as TypedField, b$ as UploadConfig, c0 as UrlFieldAdmin, c1 as UrlLinkValue, c2 as ViewActionFeatures, c3 as ViewConfig, c4 as ViewLayout, c5 as ViewMetric, c6 as ViewSubMetric, c7 as WordLimitFieldAdmin, c8 as WordLimitFieldConfig, c9 as WorkflowMetadata, ca as WorkflowRole, cb as WorkflowState, cc as WorkflowTransitionContext, cd as defineAction, ce as defineView } from './app-config-DQhcrGDE.js';
3
3
  import jexl from 'jexl';
4
4
  import 'lucide-react';
5
5
  import 'pino';
@@ -159,7 +159,7 @@ interface SqlWhereResult {
159
159
  declare function parseSqlWhere(where: WhereClause, getJsonField: (field: string) => string, placeholder?: '?' | 'pg',
160
160
  /**
161
161
  * SQL keyword used for `contains`/`starts_with`. Postgres `LIKE` is
162
- * case-sensitive, so the Postgres adapter passes `'ILIKE'` to keep substring
162
+ * case-sensitive, so the Postgres adapter defaults to `'ILIKE'` to keep substring
163
163
  * matching case-insensitive like SQLite and MySQL.
164
164
  */
165
165
  likeOperator?: 'LIKE' | 'ILIKE'): SqlWhereResult;