@eienjs/adonisjs-api-query 1.0.1 → 1.1.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.
package/README.md CHANGED
@@ -7,8 +7,6 @@
7
7
  [![Build Status][badge-build]][build]
8
8
  [![Total Downloads][badge-downloads]][downloads]
9
9
 
10
- <!-- [![Build Status][badge-build]][build] -->
11
-
12
10
  > Easily build Lucid queries from API requests
13
11
 
14
12
  ## Introduction
@@ -100,7 +100,9 @@ var InvalidSortQuery = class _InvalidSortQuery extends InvalidQuery {
100
100
  export {
101
101
  SortDirection,
102
102
  InvalidDirection,
103
+ SortsCallback,
104
+ SortsField,
103
105
  AllowedSort,
104
106
  InvalidSortQuery
105
107
  };
106
- //# sourceMappingURL=chunk-HQN7LHVO.js.map
108
+ //# sourceMappingURL=chunk-3ITWUZL5.js.map
@@ -6,20 +6,6 @@ import {
6
6
  InvalidQuery
7
7
  } from "./chunk-XIRHVLVQ.js";
8
8
 
9
- // src/enums/filter_operator.ts
10
- var FilterOperator = {
11
- Dynamic: "",
12
- Equal: "=",
13
- LessThan: "<",
14
- GreaterThan: ">",
15
- LessThanOrEqual: "<=",
16
- GreaterThanOrEqual: ">=",
17
- NotEqual: "<>"
18
- };
19
-
20
- // src/allowed_filter.ts
21
- import { Collection } from "collect.js";
22
-
23
9
  // src/filters/filters_exact.ts
24
10
  import collect from "collect.js";
25
11
  var FiltersExact = class {
@@ -59,12 +45,13 @@ var FiltersExact = class {
59
45
  return query.model.$relationsDefinitions.has(firstRelationShip);
60
46
  }
61
47
  withRelationConstraint(query, value, property) {
62
- const [relation, relationProperty] = collect(property.split(".")).pipe((parts) => [
63
- parts.except([parts.last()]).implode("."),
64
- parts.last()
65
- ]);
48
+ const [relation, relationProperty] = collect(property.split(".")).pipe((parts) => {
49
+ const rProperty = parts.pop();
50
+ const rPath = parts.implode(".");
51
+ return [rPath, rProperty];
52
+ });
66
53
  void query.whereHas(relation, (subQuery) => {
67
- const columnName = this.qualifyColumn(query, relationProperty);
54
+ const columnName = this.qualifyColumn(subQuery, relationProperty);
68
55
  this.relationConstraints.push(columnName);
69
56
  this.handle(subQuery, value, columnName);
70
57
  });
@@ -138,6 +125,17 @@ var FiltersEndsWithStrict = class _FiltersEndsWithStrict extends FiltersPartial
138
125
  }
139
126
  };
140
127
 
128
+ // src/enums/filter_operator.ts
129
+ var FilterOperator = {
130
+ Dynamic: "",
131
+ Equal: "=",
132
+ LessThan: "<",
133
+ GreaterThan: ">",
134
+ LessThanOrEqual: "<=",
135
+ GreaterThanOrEqual: ">=",
136
+ NotEqual: "<>"
137
+ };
138
+
141
139
  // src/filters/filters_operator.ts
142
140
  var FiltersOperator = class extends FiltersExact {
143
141
  constructor($addRelationConstraint, $filterOperator, $boolean) {
@@ -206,6 +204,7 @@ var FiltersTrashed = class {
206
204
  };
207
205
 
208
206
  // src/allowed_filter.ts
207
+ import { Collection } from "collect.js";
209
208
  var AllowedFilter = class _AllowedFilter {
210
209
  static setFilterArrayValueDelimiter(delimiter) {
211
210
  if (delimiter) {
@@ -335,8 +334,15 @@ var InvalidFilterQuery = class _InvalidFilterQuery extends InvalidQuery {
335
334
  };
336
335
 
337
336
  export {
337
+ FiltersExact,
338
+ FiltersPartial,
339
+ FiltersBeginWithStrict,
340
+ FiltersCallback,
341
+ FiltersEndsWithStrict,
338
342
  FilterOperator,
343
+ FiltersOperator,
344
+ FiltersTrashed,
339
345
  AllowedFilter,
340
346
  InvalidFilterQuery
341
347
  };
342
- //# sourceMappingURL=chunk-AL3XCN3K.js.map
348
+ //# sourceMappingURL=chunk-54HNQTDY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/filters/filters_exact.ts","../src/filters/filters_partial.ts","../src/filters/filters_begin_with_strict.ts","../src/filters/filters_callback.ts","../src/filters/filters_ends_with_strict.ts","../src/enums/filter_operator.ts","../src/filters/filters_operator.ts","../src/filters/filters_trashed.ts","../src/allowed_filter.ts","../src/exceptions/invalid_filter_query.ts"],"sourcesContent":["import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { type ExtractModelRelations } from '@adonisjs/lucid/types/relations';\nimport collect, { type Collection } from 'collect.js';\nimport { type Filter } from '../types.js';\n\nexport class FiltersExact<Model extends LucidModel> implements Filter<Model> {\n protected relationConstraints: string[] = [];\n\n public constructor(protected addRelationConstraint = true) {}\n\n public handle(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n value: StrictValuesWithoutRaw | null,\n property: string,\n ): void {\n if (this.addRelationConstraint && this.isRelationProperty(query, property)) {\n this.withRelationConstraint(query, value, property);\n\n return;\n }\n\n if (Array.isArray(value)) {\n void query.whereIn(this.qualifyColumn(query, property), value);\n\n return;\n }\n\n if (value === null) {\n void query.whereNull(this.qualifyColumn(query, property));\n\n return;\n }\n\n void query.where(this.qualifyColumn(query, property), '=', value);\n }\n\n protected qualifyColumn(query: ModelQueryBuilderContract<Model, InstanceType<Model>>, column: string): string {\n if (column.includes('.')) {\n return column;\n }\n\n return `${query.model.table}.${query.model.$getColumn(column)?.columnName}`;\n }\n\n protected isRelationProperty(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n property: string,\n ): boolean {\n if (!property.includes('.')) {\n return false;\n }\n\n if (this.relationConstraints.includes(property)) {\n return false;\n }\n\n const firstRelationShip = property.split('.')[0];\n\n return query.model.$relationsDefinitions.has(firstRelationShip);\n }\n\n protected withRelationConstraint(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n value: StrictValuesWithoutRaw | null,\n property: string,\n ): void {\n const [relation, relationProperty] = collect(property.split('.')).pipe((parts: Collection<string>) => {\n const rProperty = parts.pop();\n const rPath = parts.implode('.');\n\n return [rPath as ExtractModelRelations<InstanceType<Model>>, rProperty];\n });\n\n void query.whereHas(relation, (subQuery: ModelQueryBuilderContract<Model>) => {\n const columnName = this.qualifyColumn(subQuery, relationProperty);\n this.relationConstraints.push(columnName);\n\n this.handle(subQuery, value, columnName);\n });\n }\n}\n","import { type DialectContract } from '@adonisjs/lucid/types/database';\nimport { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { type Filter } from '../types.js';\nimport { FiltersExact } from './filters_exact.js';\n\nexport class FiltersPartial<Model extends LucidModel> extends FiltersExact<Model> implements Filter<Model> {\n public handle(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n value: StrictValuesWithoutRaw | null,\n property: string,\n ): void {\n if (this.addRelationConstraint && this.isRelationProperty(query, property)) {\n this.withRelationConstraint(query, value, property);\n\n return;\n }\n\n if (Array.isArray(value)) {\n if (value.filter((item) => item.toString().length > 0).length === 0) {\n return;\n }\n\n void query.where((subQuery) => {\n for (const partialValue of value.filter((item) => item.toString().length > 0)) {\n const [innerSql, innerBindings] = this.getWhereRawParameters(\n partialValue,\n this.parsePropertyToColumn(subQuery, property),\n );\n void subQuery.orWhereRaw(innerSql, innerBindings);\n }\n });\n\n return;\n }\n\n const [sql, bindings] = this.getWhereRawParameters(value, this.parsePropertyToColumn(query, property));\n void query.whereRaw(sql, bindings);\n }\n\n protected parsePropertyToColumn(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n property: string,\n ): string {\n if (property.includes('.')) {\n return property;\n }\n\n return query.model.$getColumn(property)?.columnName ?? property;\n }\n\n protected getDatabaseDialect(query: ModelQueryBuilderContract<Model, InstanceType<Model>>): DialectContract['name'] {\n return query.client.dialect.name;\n }\n\n protected getWhereRawParameters(value: StrictValuesWithoutRaw | null, property: string): [string, string[]] {\n const resolvedValue = `${value}`.toLowerCase();\n\n return [`LOWER(??) LIKE ?`, [property, `%${FiltersPartial.escapeLike(resolvedValue)}%`]];\n }\n\n protected static escapeLike(value: string): string {\n return value\n .replaceAll('\\\\', '\\\\\\\\')\n .replaceAll('_', String.raw`\\\\_`)\n .replaceAll('%', String.raw`\\\\%`);\n }\n}\n","import { type LucidModel } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { type Filter } from '../types.js';\nimport { FiltersPartial } from './filters_partial.js';\n\nexport class FiltersBeginWithStrict<Model extends LucidModel> extends FiltersPartial<Model> implements Filter<Model> {\n protected getWhereRawParameters(value: StrictValuesWithoutRaw, property: string): [string, string[]] {\n return [`${property} LIKE ?`, [`${FiltersBeginWithStrict.escapeLike(value.toString())}%`]];\n }\n}\n","import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type Filter } from '../types.js';\n\nexport class FiltersCallback<Model extends LucidModel> implements Filter<Model> {\n public constructor(\n private callback: (query: ModelQueryBuilderContract<Model>, value: unknown, property: string) => void,\n ) {}\n\n public handle(query: ModelQueryBuilderContract<Model, InstanceType<Model>>, value: unknown, property: string): void {\n this.callback(query, value, property);\n }\n}\n","import { type LucidModel } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { type Filter } from '../types.js';\nimport { FiltersPartial } from './filters_partial.js';\n\nexport class FiltersEndsWithStrict<Model extends LucidModel> extends FiltersPartial<Model> implements Filter<Model> {\n protected getWhereRawParameters(value: StrictValuesWithoutRaw, property: string): [string, string[]] {\n return [`${property} LIKE ?`, [`%${FiltersEndsWithStrict.escapeLike(value.toString())}`]];\n }\n}\n","export const FilterOperator = {\n Dynamic: '',\n Equal: '=',\n LessThan: '<',\n GreaterThan: '>',\n LessThanOrEqual: '<=',\n GreaterThanOrEqual: '>=',\n NotEqual: '<>',\n} as const;\n\nexport type FilterOperator = (typeof FilterOperator)[keyof typeof FilterOperator];\n","import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { FilterOperator } from '../enums/filter_operator.js';\nimport { type Filter } from '../types.js';\nimport { substrReplace } from '../utils/helpers.js';\nimport { FiltersExact } from './filters_exact.js';\n\nexport class FiltersOperator<Model extends LucidModel> extends FiltersExact<Model> implements Filter<Model> {\n public constructor(\n protected $addRelationConstraint: boolean,\n protected $filterOperator: FilterOperator,\n protected $boolean: 'and' | 'or',\n ) {\n super($addRelationConstraint);\n }\n\n public handle(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n value: StrictValuesWithoutRaw,\n property: string,\n ): void {\n let filterOperator = this.$filterOperator;\n\n if (this.$addRelationConstraint && this.isRelationProperty(query, property)) {\n this.withRelationConstraint(query, value, property);\n\n return;\n }\n\n if (Array.isArray(value)) {\n const items = value;\n\n void query.where((subQuery) => {\n for (const item of items) {\n this.handle(subQuery, item, property);\n }\n });\n\n return;\n }\n\n if (filterOperator === FilterOperator.Dynamic) {\n filterOperator = this.getDynamicFilterOperator(value.toString());\n value = this.removeDynamicFilterOperatorFromValue(value.toString(), filterOperator);\n }\n\n if (this.$boolean === 'and') {\n void query.where(this.qualifyColumn(query, property), filterOperator, value);\n\n return;\n }\n\n void query.orWhere(this.qualifyColumn(query, property), filterOperator, value);\n }\n\n protected getDynamicFilterOperator(value: string): FilterOperator {\n let filterOperator: FilterOperator = FilterOperator.Equal;\n\n for (const filterOperatorCase of Object.values(FilterOperator)) {\n if (value.startsWith(filterOperatorCase) && filterOperatorCase !== FilterOperator.Dynamic) {\n filterOperator = filterOperatorCase;\n }\n }\n\n return filterOperator;\n }\n\n protected removeDynamicFilterOperatorFromValue(value: string, filterOperator: FilterOperator): string {\n if (value.includes(filterOperator)) {\n value = substrReplace(value, '', 0, filterOperator.length);\n }\n\n return value;\n }\n}\n","import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { type Filter } from '../types.js';\n\nexport class FiltersTrashed<Model extends LucidModel> implements Filter<Model> {\n public handle(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n value: StrictValuesWithoutRaw,\n _property: string,\n ): void {\n if (!('withTrashed' in query && 'onlyTrashed' in query)) {\n return;\n }\n\n const queryWithSoftDeletes = query as {\n withTrashed(): ModelQueryBuilderContract<Model>;\n onlyTrashed(): ModelQueryBuilderContract<Model>;\n };\n\n if (value === 'with') {\n void queryWithSoftDeletes.withTrashed();\n\n return;\n }\n\n if (value === 'only') {\n void queryWithSoftDeletes.onlyTrashed();\n }\n }\n}\n","import { type LucidModel, type ModelAttributes, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { Collection } from 'collect.js';\nimport { ApiQueryBuilderRequest } from './api_query_builder_request.js';\nimport { type FilterOperator } from './enums/filter_operator.js';\nimport { FiltersBeginWithStrict } from './filters/filters_begin_with_strict.js';\nimport { FiltersCallback } from './filters/filters_callback.js';\nimport { FiltersEndsWithStrict } from './filters/filters_ends_with_strict.js';\nimport { FiltersExact } from './filters/filters_exact.js';\nimport { FiltersOperator } from './filters/filters_operator.js';\nimport { FiltersPartial } from './filters/filters_partial.js';\nimport { FiltersTrashed } from './filters/filters_trashed.js';\nimport { type ExtractKeys, type Filter } from './types.js';\n\nexport class AllowedFilter<Model extends LucidModel> {\n public static setFilterArrayValueDelimiter(delimiter?: string): void {\n if (delimiter) {\n ApiQueryBuilderRequest.setFilterArrayValueDelimiter(delimiter);\n }\n }\n\n public static exact<Model extends LucidModel>(\n name: string,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n addRelationConstraint = true,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, new FiltersExact<Model>(addRelationConstraint), internalName);\n }\n\n public static partial<Model extends LucidModel>(\n name: string,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n addRelationConstraint = true,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, new FiltersPartial<Model>(addRelationConstraint), internalName);\n }\n\n public static beginsWithStrict<Model extends LucidModel>(\n name: string,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n addRelationConstraint = true,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, new FiltersBeginWithStrict<Model>(addRelationConstraint), internalName);\n }\n\n public static endsWithStrict<Model extends LucidModel>(\n name: string,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n addRelationConstraint = true,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, new FiltersEndsWithStrict<Model>(addRelationConstraint), internalName);\n }\n\n public static callback<Model extends LucidModel>(\n name: string,\n callback: (query: ModelQueryBuilderContract<Model>, value: unknown, property: string) => void,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, new FiltersCallback<Model>(callback), internalName);\n }\n\n public static trashed<Model extends LucidModel>(\n name = 'trashed',\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n ): AllowedFilter<Model> {\n return new AllowedFilter<Model>(name, new FiltersTrashed<Model>(), internalName);\n }\n\n public static custom<Model extends LucidModel>(\n name: string,\n filterClass: Filter<Model>,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, filterClass, internalName);\n }\n\n public static operator<Model extends LucidModel>(\n name: string,\n filterOperator: FilterOperator,\n boolean: 'and' | 'or' = 'and',\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n addRelationConstraint = true,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(\n name,\n new FiltersOperator<Model>(addRelationConstraint, filterOperator, boolean),\n internalName,\n );\n }\n\n protected name: string;\n\n protected filterClass: Filter<Model>;\n\n protected internalName: string;\n\n protected ignored: Collection<unknown>;\n\n protected default: unknown;\n\n protected $hasDefault = false;\n\n protected nullable = false;\n\n public constructor(\n name: string,\n filterClass: Filter<Model>,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n ) {\n this.name = name;\n this.filterClass = filterClass;\n this.ignored = new Collection();\n this.internalName = internalName ?? this.name;\n }\n\n public filter(query: ModelQueryBuilderContract<Model>, value: unknown): void {\n const valueToFilter = this.resolveValueForFiltering(value);\n if (!this.nullable && valueToFilter === null) {\n return;\n }\n\n this.filterClass.handle(query, valueToFilter, this.internalName);\n }\n\n public getFilterClass(): Filter<Model> {\n return this.filterClass;\n }\n\n public getName(): string {\n return this.name;\n }\n\n public isForFilter(filterName: string): boolean {\n return this.name === filterName;\n }\n\n public ignore(...values: unknown[]): this {\n this.ignored = this.ignored.merge(values).flatten();\n\n return this;\n }\n\n public getIgnored(): unknown[] {\n return this.ignored.toArray();\n }\n\n public getInternalName(): string {\n return this.internalName;\n }\n\n public setDefault(defaultValue: unknown): this {\n this.default = defaultValue;\n this.$hasDefault = true;\n\n if (defaultValue === null) {\n this.setNullable(true);\n }\n\n return this;\n }\n\n public getDefault(): unknown {\n return this.default;\n }\n\n public hasDefault(): boolean {\n return this.$hasDefault;\n }\n\n public setNullable(nullable = true): this {\n this.nullable = nullable;\n\n return this;\n }\n\n public unsetDefault(): this {\n this.$hasDefault = false;\n this.default = undefined;\n\n return this;\n }\n\n protected resolveValueForFiltering(value: unknown): StrictValuesWithoutRaw | null {\n if (Array.isArray(value)) {\n const remainingProperties = value.map((subValue) => this.resolveValueForFiltering(subValue));\n\n return remainingProperties.length === 0 ? null : (remainingProperties as StrictValuesWithoutRaw);\n }\n\n return this.ignored.contains(value) ? null : (value as StrictValuesWithoutRaw);\n }\n}\n","import { ResponseStatus } from '@adonisjs/core/http';\nimport { InvalidQuery } from './invalid_query.js';\n\nexport class InvalidFilterQuery extends InvalidQuery {\n public constructor(\n public readonly unknownFilters: string[],\n public readonly allowedFilters: string[],\n ) {\n const notAllowed = unknownFilters.join(', ');\n const allowed = allowedFilters.join(', ');\n const message = `Requested filter(s) \\`${notAllowed}\\` are not allowed. Allowed filter(s) are \\`${allowed}\\``;\n\n super(message, { status: ResponseStatus.BadRequest });\n }\n\n public static filtersNotAllowed(unknownFilters: string[], allowedFilters: string[]): InvalidFilterQuery {\n return new InvalidFilterQuery(unknownFilters, allowedFilters);\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,10 +2,6 @@ import {
2
2
  InvalidQuery
3
3
  } from "./chunk-XIRHVLVQ.js";
4
4
 
5
- // src/allowed_include.ts
6
- import app2 from "@adonisjs/core/services/app";
7
- import { Collection as Collection2 } from "collect.js";
8
-
9
5
  // src/includes/included_callback.ts
10
6
  var IncludedCallback = class {
11
7
  constructor(callback) {
@@ -81,6 +77,8 @@ var IncludedRelationship = class {
81
77
  };
82
78
 
83
79
  // src/allowed_include.ts
80
+ import app2 from "@adonisjs/core/services/app";
81
+ import { Collection as Collection2 } from "collect.js";
84
82
  var AllowedInclude = class _AllowedInclude {
85
83
  static relationship(name, internalName) {
86
84
  internalName = internalName ?? name;
@@ -153,7 +151,10 @@ var InvalidIncludeQuery = class _InvalidIncludeQuery extends InvalidQuery {
153
151
  };
154
152
 
155
153
  export {
154
+ IncludedCallback,
155
+ IncludedCount,
156
+ IncludedRelationship,
156
157
  AllowedInclude,
157
158
  InvalidIncludeQuery
158
159
  };
159
- //# sourceMappingURL=chunk-OS75QJZN.js.map
160
+ //# sourceMappingURL=chunk-IV3B5WO7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/includes/included_callback.ts","../src/includes/included_count.ts","../src/includes/included_relationship.ts","../src/allowed_include.ts","../src/exceptions/invalid_include_query.ts"],"sourcesContent":["import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type ExtractModelRelations, type ModelRelations } from '@adonisjs/lucid/types/relations';\nimport { type Include } from '../types.js';\n\nexport class IncludedCallback<ParentModel extends LucidModel, RelatedModel extends LucidModel>\n implements Include<ParentModel>\n{\n public constructor(\n public readonly callback: (\n query:\n | ModelRelations<RelatedModel, ParentModel>['builder']\n | ModelRelations<RelatedModel, ParentModel>['subQuery'],\n ) => void,\n ) {}\n\n public handle(query: ModelQueryBuilderContract<ParentModel, InstanceType<ParentModel>>, include: string): void {\n void query.preload(include as ExtractModelRelations<InstanceType<ParentModel>>, this.callback);\n }\n}\n","import app from '@adonisjs/core/services/app';\nimport { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type ExtractModelRelations } from '@adonisjs/lucid/types/relations';\nimport { type Include } from '../types.js';\n\nexport class IncludedCount<ParentModel extends LucidModel> implements Include<ParentModel> {\n public handle(query: ModelQueryBuilderContract<ParentModel, InstanceType<ParentModel>>, count: string): void {\n const suffix = app.config.get<string>('apiquery.countSuffix', 'Count');\n const relation = (count.endsWith(suffix) ? count.slice(0, -suffix.length) : count) as ExtractModelRelations<\n InstanceType<ParentModel>\n >;\n\n void query.withCount(relation);\n }\n}\n","import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type ExtractModelRelations, type ModelRelations } from '@adonisjs/lucid/types/relations';\nimport { Collection } from 'collect.js';\nimport { type Include } from '../types.js';\n\nexport class IncludedRelationship<ParentModel extends LucidModel> implements Include<ParentModel> {\n public static getIndividualRelationshipPathsFromInclude(include: string): Collection<string> {\n const originalInclude = new Collection(include.split('.'));\n\n return originalInclude.reduce((includes, relationship) => {\n const includesArray = includes ?? new Collection<string>();\n\n if (includesArray.isEmpty()) {\n return includesArray.push(relationship);\n }\n\n return includesArray.push(`${includes!.last()}.${relationship}`);\n }, new Collection<string>()) as Collection<string>;\n }\n\n public getRequestedFieldsForRelatedTable?: (relationship: string) => string[];\n\n public handle(query: ModelQueryBuilderContract<ParentModel, InstanceType<ParentModel>>, relationship: string): void {\n const relatedTables = relationship.split('.');\n\n if (relatedTables.length === 0) {\n return;\n }\n\n const [relation, ...rest] = relatedTables;\n\n if (!query.model.$hasRelation(relation)) {\n return;\n }\n\n void query.preload(relation as ExtractModelRelations<InstanceType<ParentModel>>, (subQuery) => {\n if (this.getRequestedFieldsForRelatedTable !== undefined) {\n const fields = this.getRequestedFieldsForRelatedTable(relation);\n if (fields.length > 0) {\n void subQuery.select(fields);\n }\n }\n\n this.buildNestedQuery(rest, subQuery, relation);\n });\n }\n\n private buildNestedQuery<SubParentModel extends LucidModel, SubRelatedModel extends LucidModel>(\n relatedTables: string[],\n subQuery:\n | ModelRelations<SubRelatedModel, SubParentModel>['builder']\n | ModelRelations<SubRelatedModel, SubParentModel>['subQuery'],\n parent = '',\n ): void {\n if (relatedTables.length === 0) {\n return;\n }\n\n const [relation, ...rest] = relatedTables;\n\n if (!subQuery.model.$hasRelation(relation)) {\n return;\n }\n\n void subQuery.preload(relation as ExtractModelRelations<InstanceType<SubRelatedModel>>, (nestedQuery) => {\n const fullRelationName = parent === '' ? relation : `${parent}.${relation}`;\n if (this.getRequestedFieldsForRelatedTable !== undefined) {\n const fields = this.getRequestedFieldsForRelatedTable(fullRelationName);\n if (fields.length > 0) {\n void nestedQuery.select(fields);\n }\n }\n\n this.buildNestedQuery(rest, nestedQuery, fullRelationName);\n });\n }\n}\n","import app from '@adonisjs/core/services/app';\nimport { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type ModelRelations } from '@adonisjs/lucid/types/relations';\nimport { Collection } from 'collect.js';\nimport { IncludedCallback } from './includes/included_callback.js';\nimport { IncludedCount } from './includes/included_count.js';\nimport { IncludedRelationship } from './includes/included_relationship.js';\nimport { type Include } from './types.js';\n\nexport class AllowedInclude<Model extends LucidModel> {\n public static relationship<ParentModel extends LucidModel>(\n name: string,\n internalName?: string,\n ): Collection<AllowedInclude<ParentModel>> {\n internalName = internalName ?? name;\n\n return IncludedRelationship.getIndividualRelationshipPathsFromInclude(internalName)\n .zip(IncludedRelationship.getIndividualRelationshipPathsFromInclude(name).toArray<string>())\n .reduce((includes, args) => {\n const [relationship, alias] = args;\n\n includes = includes!.push(\n new AllowedInclude<ParentModel>(alias, new IncludedRelationship<ParentModel>(), relationship),\n );\n\n if (!relationship.includes('.')) {\n const countSuffix = app.config.get<string>('apiquery.countSuffix', 'Count');\n for (const countAllowedInclude of AllowedInclude.count(\n `${alias}${countSuffix}`,\n `${relationship}${countSuffix}`,\n )) {\n includes = includes.push(countAllowedInclude);\n }\n }\n\n return includes;\n }, new Collection<AllowedInclude<ParentModel>>()) as Collection<AllowedInclude<ParentModel>>;\n }\n\n public static count<ParentModel extends LucidModel>(\n name: string,\n internalName?: string,\n ): Collection<AllowedInclude<ParentModel>> {\n return new Collection([new AllowedInclude<ParentModel>(name, new IncludedCount<ParentModel>(), internalName)]);\n }\n\n public static callback<ParentModel extends LucidModel, RelatedModel extends LucidModel>(\n name: string,\n callback: (\n query:\n | ModelRelations<RelatedModel, ParentModel>['builder']\n | ModelRelations<RelatedModel, ParentModel>['subQuery'],\n ) => void,\n internalName?: string,\n ): Collection<AllowedInclude<ParentModel>> {\n return new Collection([\n new AllowedInclude<ParentModel>(name, new IncludedCallback<ParentModel, RelatedModel>(callback), internalName),\n ]);\n }\n\n public static custom<ParentModel extends LucidModel>(\n name: string,\n includeClass: Include<ParentModel>,\n internalName?: string,\n ): Collection<AllowedInclude<ParentModel>> {\n return new Collection([new AllowedInclude<ParentModel>(name, includeClass, internalName)]);\n }\n\n protected internalName: string;\n\n protected name: string;\n\n protected includeClass: Include<Model>;\n\n public constructor(name: string, includeClass: Include<Model>, internalName?: string) {\n this.name = name;\n this.includeClass = includeClass;\n this.internalName = internalName ?? this.name;\n }\n\n public include(query: ModelQueryBuilderContract<Model>): void {\n // if ('getRequestedFieldsForRelatedTable' in this.includeClass) {\n // this.includeClass.getRequestedFieldsForRelatedTable = (relationship: string) => {\n // return query.getRequestedFieldsForRelatedTable(relationship);\n // };\n // }\n\n this.includeClass.handle(query, this.internalName);\n }\n\n public getName(): string {\n return this.name;\n }\n\n public isForInclude(includeName: string): boolean {\n return this.name === includeName;\n }\n}\n","import { ResponseStatus } from '@adonisjs/core/http';\nimport { InvalidQuery } from './invalid_query.js';\n\nexport class InvalidIncludeQuery extends InvalidQuery {\n public constructor(\n public readonly unknownIncludes: string[],\n public readonly allowedIncludes: string[],\n ) {\n const notAllowed = unknownIncludes.join(', ');\n let message = `Requested include(s) \\`${notAllowed}\\` are not allowed. `;\n\n if (allowedIncludes.length > 0) {\n const allowed = allowedIncludes.join(', ');\n message = `${message}Allowed include(s) are \\`${allowed}\\``;\n } else {\n message = `${message}There are no allowed includes`;\n }\n\n super(message, { status: ResponseStatus.BadRequest });\n }\n\n public static includesNotAllowed(unknownIncludes: string[], allowedIncludes: string[]): InvalidIncludeQuery {\n return new InvalidIncludeQuery(unknownIncludes, allowedIncludes);\n }\n}\n"],"mappings":"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","names":["app","Collection","app","Collection"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AllowedFilter,
3
3
  InvalidFilterQuery
4
- } from "./chunk-AL3XCN3K.js";
4
+ } from "./chunk-54HNQTDY.js";
5
5
  import "./chunk-MKQ3HMMA.js";
6
6
  import "./chunk-XIRHVLVQ.js";
7
7
 
@@ -52,4 +52,4 @@ var extendModelQueryBuilderWithFiltersQuery = function(builder, config) {
52
52
  export {
53
53
  extendModelQueryBuilderWithFiltersQuery
54
54
  };
55
- //# sourceMappingURL=filters_query-4E533ESM.js.map
55
+ //# sourceMappingURL=filters_query-LCFH2F2X.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AllowedInclude,
3
3
  InvalidIncludeQuery
4
- } from "./chunk-OS75QJZN.js";
4
+ } from "./chunk-IV3B5WO7.js";
5
5
  import "./chunk-XIRHVLVQ.js";
6
6
 
7
7
  // src/bindings/includes_query.ts
@@ -67,4 +67,4 @@ var extendModelQueryBuilderWithIncludesQuery = function(builder, config) {
67
67
  export {
68
68
  extendModelQueryBuilderWithIncludesQuery
69
69
  };
70
- //# sourceMappingURL=includes_query-2XNHHWJB.js.map
70
+ //# sourceMappingURL=includes_query-PVONWQMC.js.map
package/build/index.d.ts CHANGED
@@ -17,3 +17,15 @@ export { InvalidSortQuery } from './src/exceptions/invalid_sort_query.js';
17
17
  export { UnknownIncludedFieldsQuery } from './src/exceptions/unknown_included_fields_query.js';
18
18
  export { stubsRoot } from './stubs/main.js';
19
19
  export * from 'collect.js';
20
+ export { FiltersBeginWithStrict } from './src/filters/filters_begin_with_strict.js';
21
+ export { FiltersCallback } from './src/filters/filters_callback.js';
22
+ export { FiltersEndsWithStrict } from './src/filters/filters_ends_with_strict.js';
23
+ export { FiltersExact } from './src/filters/filters_exact.js';
24
+ export { FiltersOperator } from './src/filters/filters_operator.js';
25
+ export { FiltersPartial } from './src/filters/filters_partial.js';
26
+ export { FiltersTrashed } from './src/filters/filters_trashed.js';
27
+ export { IncludedCallback } from './src/includes/included_callback.js';
28
+ export { IncludedCount } from './src/includes/included_count.js';
29
+ export { IncludedRelationship } from './src/includes/included_relationship.js';
30
+ export { SortsCallback } from './src/sorts/sorts_callback.js';
31
+ export { SortsField } from './src/sorts/sorts_field.js';
package/build/index.js CHANGED
@@ -2,20 +2,32 @@ import {
2
2
  AllowedSort,
3
3
  InvalidDirection,
4
4
  InvalidSortQuery,
5
- SortDirection
6
- } from "./chunk-HQN7LHVO.js";
5
+ SortDirection,
6
+ SortsCallback,
7
+ SortsField
8
+ } from "./chunk-3ITWUZL5.js";
7
9
  import {
8
10
  AllowedFilter,
9
11
  FilterOperator,
12
+ FiltersBeginWithStrict,
13
+ FiltersCallback,
14
+ FiltersEndsWithStrict,
15
+ FiltersExact,
16
+ FiltersOperator,
17
+ FiltersPartial,
18
+ FiltersTrashed,
10
19
  InvalidFilterQuery
11
- } from "./chunk-AL3XCN3K.js";
20
+ } from "./chunk-54HNQTDY.js";
12
21
  import {
13
22
  ApiQueryBuilderRequest
14
23
  } from "./chunk-MKQ3HMMA.js";
15
24
  import {
16
25
  AllowedInclude,
26
+ IncludedCallback,
27
+ IncludedCount,
28
+ IncludedRelationship,
17
29
  InvalidIncludeQuery
18
- } from "./chunk-OS75QJZN.js";
30
+ } from "./chunk-IV3B5WO7.js";
19
31
  import {
20
32
  InvalidQuery
21
33
  } from "./chunk-XIRHVLVQ.js";
@@ -114,6 +126,16 @@ export {
114
126
  AllowedSort,
115
127
  ApiQueryBuilderRequest,
116
128
  FilterOperator,
129
+ FiltersBeginWithStrict,
130
+ FiltersCallback,
131
+ FiltersEndsWithStrict,
132
+ FiltersExact,
133
+ FiltersOperator,
134
+ FiltersPartial,
135
+ FiltersTrashed,
136
+ IncludedCallback,
137
+ IncludedCount,
138
+ IncludedRelationship,
117
139
  InvalidAppendQuery,
118
140
  InvalidDirection,
119
141
  InvalidFilterQuery,
@@ -122,6 +144,8 @@ export {
122
144
  InvalidQuery,
123
145
  InvalidSortQuery,
124
146
  SortDirection,
147
+ SortsCallback,
148
+ SortsField,
125
149
  UnknownIncludedFieldsQuery,
126
150
  configure,
127
151
  defineConfig,
@@ -1 +1 @@
1
- {"version":3,"sources":["../stubs/main.ts","../configure.ts","../src/define_config.ts","../src/exceptions/allowed_fields_must_be_called_before_allowed_includes.ts","../src/exceptions/invalid_append_query.ts","../src/exceptions/invalid_filter_value.ts","../src/exceptions/unknown_included_fields_query.ts","../index.ts"],"sourcesContent":["import path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport const stubsRoot = path.dirname(fileURLToPath(import.meta.url));\n","import type Configure from '@adonisjs/core/commands/configure';\nimport { stubsRoot } from './stubs/main.js';\n\nexport const configure = async (command: Configure): Promise<void> => {\n const codemods = await command.createCodemods();\n\n await codemods.updateRcFile((rcFile) => {\n rcFile.addProvider('@eienjs/adonisjs-api-query/api_query_provider');\n });\n\n await codemods.makeUsingStub(stubsRoot, 'config.stub', {});\n};\n","import { configProvider } from '@adonisjs/core';\nimport { type ConfigProvider } from '@adonisjs/core/types';\nimport { type ApiQueryConfig, type ResolvedApiQueryConfig } from './types.js';\n\nexport const defineConfig = function (config: ApiQueryConfig): ConfigProvider<ResolvedApiQueryConfig> {\n return configProvider.create(async (_) => {\n return {\n parameters: {\n include: config.parameters?.include ?? 'include',\n filter: config.parameters?.filter ?? 'filter',\n sort: config.parameters?.sort ?? 'sort',\n fields: config.parameters?.fields ?? 'fields',\n append: config.parameters?.append ?? 'append',\n },\n countSuffix: config.countSuffix ?? 'Count',\n existsSuffix: config.existsSuffix ?? 'Exists',\n disableInvalidFilterQueryException: config.disableInvalidFilterQueryException ?? false,\n disableInvalidSortQueryException: config.disableInvalidSortQueryException ?? false,\n disableInvalidIncludesQueryException: config.disableInvalidIncludesQueryException ?? false,\n convertRelationNamesToSnakeCasePlural: config.convertRelationNamesToSnakeCasePlural ?? false,\n convertRelationTableNameStrategy: config.convertRelationTableNameStrategy ?? false,\n convertFieldNamesToSnakeCase: config.convertFieldNamesToSnakeCase ?? false,\n };\n });\n};\n","import { Exception } from '@adonisjs/core/exceptions';\n\nexport class AllowedFieldsMustBeCalledBeforeAllowedIncludes extends Exception {\n public static readonly code: 'E_BAD_METHOD_CALL_EXCEPTION';\n\n public static readonly status: 500;\n\n public constructor() {\n super(\"The QueryBuilder's `allowedFields` method must be called before the `allowedIncludes` method\");\n }\n}\n","import { ResponseStatus } from '@adonisjs/core/http';\nimport { InvalidQuery } from './invalid_query.js';\n\nexport class InvalidAppendQuery extends InvalidQuery {\n public constructor(appendsNotAllowed: string[], allowedAppends: string[]) {\n const notAllowed = appendsNotAllowed.join(', ');\n const allowed = allowedAppends.join(', ');\n const message = `Requested append(s) \\`${notAllowed}\\` are not allowed. Allowed append(s) are \\`${allowed}\\``;\n\n super(message, { status: ResponseStatus.BadRequest });\n }\n\n public static appendsNotAllowed(appendsNotAllowed: string[], allowedAppends: string[]): InvalidAppendQuery {\n return new InvalidAppendQuery(appendsNotAllowed, allowedAppends);\n }\n}\n","import { Exception } from '@adonisjs/core/exceptions';\n\nexport class InvalidFilterValue extends Exception {\n public static make(value: unknown): InvalidFilterValue {\n return new InvalidFilterValue(`Filter value \\`${value}\\` is invalid`);\n }\n}\n","import { ResponseStatus } from '@adonisjs/core/http';\nimport { InvalidQuery } from './invalid_query.js';\n\nexport class UnknownIncludedFieldsQuery extends InvalidQuery {\n public readonly unknownFields: string[];\n\n public constructor(unknownFields: string[]) {\n const notAllowed = unknownFields.join(', ');\n const message = [\n `Requested field(s) \\`${notAllowed}\\` are not allowed (yet). `,\n \"If you want to allow these fields, please make sure to call the QueryBuilder's `allowedFields` method before the `allowedIncludes` method\",\n ].join('');\n\n super(message, { status: ResponseStatus.BadRequest });\n\n this.unknownFields = unknownFields;\n }\n}\n","export { configure } from './configure.js';\nexport { AllowedFilter } from './src/allowed_filter.js';\nexport { AllowedInclude } from './src/allowed_include.js';\nexport { AllowedSort } from './src/allowed_sort.js';\nexport { ApiQueryBuilderRequest } from './src/api_query_builder_request.js';\nexport { defineConfig } from './src/define_config.js';\nexport { FilterOperator } from './src/enums/filter_operator.js';\nexport { SortDirection } from './src/enums/sort_direction.js';\nexport { AllowedFieldsMustBeCalledBeforeAllowedIncludes } from './src/exceptions/allowed_fields_must_be_called_before_allowed_includes.js';\nexport { InvalidAppendQuery } from './src/exceptions/invalid_append_query.js';\nexport { InvalidDirection } from './src/exceptions/invalid_direction.js';\nexport { InvalidFilterQuery } from './src/exceptions/invalid_filter_query.js';\nexport { InvalidFilterValue } from './src/exceptions/invalid_filter_value.js';\nexport { InvalidIncludeQuery } from './src/exceptions/invalid_include_query.js';\nexport { InvalidQuery } from './src/exceptions/invalid_query.js';\nexport { InvalidSortQuery } from './src/exceptions/invalid_sort_query.js';\nexport { UnknownIncludedFieldsQuery } from './src/exceptions/unknown_included_fields_query.js';\nexport { stubsRoot } from './stubs/main.js';\nexport * from 'collect.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAEvB,IAAM,YAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;;;ACA7D,IAAM,YAAY,OAAO,YAAsC;AACpE,QAAM,WAAW,MAAM,QAAQ,eAAe;AAE9C,QAAM,SAAS,aAAa,CAAC,WAAW;AACtC,WAAO,YAAY,+CAA+C;AAAA,EACpE,CAAC;AAED,QAAM,SAAS,cAAc,WAAW,eAAe,CAAC,CAAC;AAC3D;;;ACXA,SAAS,sBAAsB;AAIxB,IAAM,eAAe,SAAU,QAAgE;AACpG,SAAO,eAAe,OAAO,OAAO,MAAM;AACxC,WAAO;AAAA,MACL,YAAY;AAAA,QACV,SAAS,OAAO,YAAY,WAAW;AAAA,QACvC,QAAQ,OAAO,YAAY,UAAU;AAAA,QACrC,MAAM,OAAO,YAAY,QAAQ;AAAA,QACjC,QAAQ,OAAO,YAAY,UAAU;AAAA,QACrC,QAAQ,OAAO,YAAY,UAAU;AAAA,MACvC;AAAA,MACA,aAAa,OAAO,eAAe;AAAA,MACnC,cAAc,OAAO,gBAAgB;AAAA,MACrC,oCAAoC,OAAO,sCAAsC;AAAA,MACjF,kCAAkC,OAAO,oCAAoC;AAAA,MAC7E,sCAAsC,OAAO,wCAAwC;AAAA,MACrF,uCAAuC,OAAO,yCAAyC;AAAA,MACvF,kCAAkC,OAAO,oCAAoC;AAAA,MAC7E,8BAA8B,OAAO,gCAAgC;AAAA,IACvE;AAAA,EACF,CAAC;AACH;;;ACxBA,SAAS,iBAAiB;AAEnB,IAAM,iDAAN,cAA6D,UAAU;AAAA,EAC5E,OAAuB;AAAA,EAEvB,OAAuB;AAAA,EAEhB,cAAc;AACnB,UAAM,8FAA8F;AAAA,EACtG;AACF;;;ACVA,SAAS,sBAAsB;AAGxB,IAAM,qBAAN,MAAM,4BAA2B,aAAa;AAAA,EAC5C,YAAY,mBAA6B,gBAA0B;AACxE,UAAM,aAAa,kBAAkB,KAAK,IAAI;AAC9C,UAAM,UAAU,eAAe,KAAK,IAAI;AACxC,UAAM,UAAU,yBAAyB,UAAU,+CAA+C,OAAO;AAEzG,UAAM,SAAS,EAAE,QAAQ,eAAe,WAAW,CAAC;AAAA,EACtD;AAAA,EAEA,OAAc,kBAAkB,mBAA6B,gBAA8C;AACzG,WAAO,IAAI,oBAAmB,mBAAmB,cAAc;AAAA,EACjE;AACF;;;ACfA,SAAS,aAAAA,kBAAiB;AAEnB,IAAM,qBAAN,MAAM,4BAA2BA,WAAU;AAAA,EAChD,OAAc,KAAK,OAAoC;AACrD,WAAO,IAAI,oBAAmB,kBAAkB,KAAK,eAAe;AAAA,EACtE;AACF;;;ACNA,SAAS,kBAAAC,uBAAsB;AAGxB,IAAM,6BAAN,cAAyC,aAAa;AAAA,EAC3C;AAAA,EAET,YAAY,eAAyB;AAC1C,UAAM,aAAa,cAAc,KAAK,IAAI;AAC1C,UAAM,UAAU;AAAA,MACd,wBAAwB,UAAU;AAAA,MAClC;AAAA,IACF,EAAE,KAAK,EAAE;AAET,UAAM,SAAS,EAAE,QAAQC,gBAAe,WAAW,CAAC;AAEpD,SAAK,gBAAgB;AAAA,EACvB;AACF;;;ACCA,cAAc;","names":["Exception","ResponseStatus","ResponseStatus"]}
1
+ {"version":3,"sources":["../stubs/main.ts","../configure.ts","../src/define_config.ts","../src/exceptions/allowed_fields_must_be_called_before_allowed_includes.ts","../src/exceptions/invalid_append_query.ts","../src/exceptions/invalid_filter_value.ts","../src/exceptions/unknown_included_fields_query.ts","../index.ts"],"sourcesContent":["import path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport const stubsRoot = path.dirname(fileURLToPath(import.meta.url));\n","import type Configure from '@adonisjs/core/commands/configure';\nimport { stubsRoot } from './stubs/main.js';\n\nexport const configure = async (command: Configure): Promise<void> => {\n const codemods = await command.createCodemods();\n\n await codemods.updateRcFile((rcFile) => {\n rcFile.addProvider('@eienjs/adonisjs-api-query/api_query_provider');\n });\n\n await codemods.makeUsingStub(stubsRoot, 'config.stub', {});\n};\n","import { configProvider } from '@adonisjs/core';\nimport { type ConfigProvider } from '@adonisjs/core/types';\nimport { type ApiQueryConfig, type ResolvedApiQueryConfig } from './types.js';\n\nexport const defineConfig = function (config: ApiQueryConfig): ConfigProvider<ResolvedApiQueryConfig> {\n return configProvider.create(async (_) => {\n return {\n parameters: {\n include: config.parameters?.include ?? 'include',\n filter: config.parameters?.filter ?? 'filter',\n sort: config.parameters?.sort ?? 'sort',\n fields: config.parameters?.fields ?? 'fields',\n append: config.parameters?.append ?? 'append',\n },\n countSuffix: config.countSuffix ?? 'Count',\n existsSuffix: config.existsSuffix ?? 'Exists',\n disableInvalidFilterQueryException: config.disableInvalidFilterQueryException ?? false,\n disableInvalidSortQueryException: config.disableInvalidSortQueryException ?? false,\n disableInvalidIncludesQueryException: config.disableInvalidIncludesQueryException ?? false,\n convertRelationNamesToSnakeCasePlural: config.convertRelationNamesToSnakeCasePlural ?? false,\n convertRelationTableNameStrategy: config.convertRelationTableNameStrategy ?? false,\n convertFieldNamesToSnakeCase: config.convertFieldNamesToSnakeCase ?? false,\n };\n });\n};\n","import { Exception } from '@adonisjs/core/exceptions';\n\nexport class AllowedFieldsMustBeCalledBeforeAllowedIncludes extends Exception {\n public static readonly code: 'E_BAD_METHOD_CALL_EXCEPTION';\n\n public static readonly status: 500;\n\n public constructor() {\n super(\"The QueryBuilder's `allowedFields` method must be called before the `allowedIncludes` method\");\n }\n}\n","import { ResponseStatus } from '@adonisjs/core/http';\nimport { InvalidQuery } from './invalid_query.js';\n\nexport class InvalidAppendQuery extends InvalidQuery {\n public constructor(appendsNotAllowed: string[], allowedAppends: string[]) {\n const notAllowed = appendsNotAllowed.join(', ');\n const allowed = allowedAppends.join(', ');\n const message = `Requested append(s) \\`${notAllowed}\\` are not allowed. Allowed append(s) are \\`${allowed}\\``;\n\n super(message, { status: ResponseStatus.BadRequest });\n }\n\n public static appendsNotAllowed(appendsNotAllowed: string[], allowedAppends: string[]): InvalidAppendQuery {\n return new InvalidAppendQuery(appendsNotAllowed, allowedAppends);\n }\n}\n","import { Exception } from '@adonisjs/core/exceptions';\n\nexport class InvalidFilterValue extends Exception {\n public static make(value: unknown): InvalidFilterValue {\n return new InvalidFilterValue(`Filter value \\`${value}\\` is invalid`);\n }\n}\n","import { ResponseStatus } from '@adonisjs/core/http';\nimport { InvalidQuery } from './invalid_query.js';\n\nexport class UnknownIncludedFieldsQuery extends InvalidQuery {\n public readonly unknownFields: string[];\n\n public constructor(unknownFields: string[]) {\n const notAllowed = unknownFields.join(', ');\n const message = [\n `Requested field(s) \\`${notAllowed}\\` are not allowed (yet). `,\n \"If you want to allow these fields, please make sure to call the QueryBuilder's `allowedFields` method before the `allowedIncludes` method\",\n ].join('');\n\n super(message, { status: ResponseStatus.BadRequest });\n\n this.unknownFields = unknownFields;\n }\n}\n","export { configure } from './configure.js';\nexport { AllowedFilter } from './src/allowed_filter.js';\nexport { AllowedInclude } from './src/allowed_include.js';\nexport { AllowedSort } from './src/allowed_sort.js';\nexport { ApiQueryBuilderRequest } from './src/api_query_builder_request.js';\nexport { defineConfig } from './src/define_config.js';\nexport { FilterOperator } from './src/enums/filter_operator.js';\nexport { SortDirection } from './src/enums/sort_direction.js';\nexport { AllowedFieldsMustBeCalledBeforeAllowedIncludes } from './src/exceptions/allowed_fields_must_be_called_before_allowed_includes.js';\nexport { InvalidAppendQuery } from './src/exceptions/invalid_append_query.js';\nexport { InvalidDirection } from './src/exceptions/invalid_direction.js';\nexport { InvalidFilterQuery } from './src/exceptions/invalid_filter_query.js';\nexport { InvalidFilterValue } from './src/exceptions/invalid_filter_value.js';\nexport { InvalidIncludeQuery } from './src/exceptions/invalid_include_query.js';\nexport { InvalidQuery } from './src/exceptions/invalid_query.js';\nexport { InvalidSortQuery } from './src/exceptions/invalid_sort_query.js';\nexport { UnknownIncludedFieldsQuery } from './src/exceptions/unknown_included_fields_query.js';\nexport { stubsRoot } from './stubs/main.js';\nexport * from 'collect.js';\n// Filters\nexport { FiltersBeginWithStrict } from './src/filters/filters_begin_with_strict.js';\nexport { FiltersCallback } from './src/filters/filters_callback.js';\nexport { FiltersEndsWithStrict } from './src/filters/filters_ends_with_strict.js';\nexport { FiltersExact } from './src/filters/filters_exact.js';\nexport { FiltersOperator } from './src/filters/filters_operator.js';\nexport { FiltersPartial } from './src/filters/filters_partial.js';\nexport { FiltersTrashed } from './src/filters/filters_trashed.js';\n// Includes\nexport { IncludedCallback } from './src/includes/included_callback.js';\nexport { IncludedCount } from './src/includes/included_count.js';\nexport { IncludedRelationship } from './src/includes/included_relationship.js';\n// Sorts\nexport { SortsCallback } from './src/sorts/sorts_callback.js';\nexport { SortsField } from './src/sorts/sorts_field.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAEvB,IAAM,YAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;;;ACA7D,IAAM,YAAY,OAAO,YAAsC;AACpE,QAAM,WAAW,MAAM,QAAQ,eAAe;AAE9C,QAAM,SAAS,aAAa,CAAC,WAAW;AACtC,WAAO,YAAY,+CAA+C;AAAA,EACpE,CAAC;AAED,QAAM,SAAS,cAAc,WAAW,eAAe,CAAC,CAAC;AAC3D;;;ACXA,SAAS,sBAAsB;AAIxB,IAAM,eAAe,SAAU,QAAgE;AACpG,SAAO,eAAe,OAAO,OAAO,MAAM;AACxC,WAAO;AAAA,MACL,YAAY;AAAA,QACV,SAAS,OAAO,YAAY,WAAW;AAAA,QACvC,QAAQ,OAAO,YAAY,UAAU;AAAA,QACrC,MAAM,OAAO,YAAY,QAAQ;AAAA,QACjC,QAAQ,OAAO,YAAY,UAAU;AAAA,QACrC,QAAQ,OAAO,YAAY,UAAU;AAAA,MACvC;AAAA,MACA,aAAa,OAAO,eAAe;AAAA,MACnC,cAAc,OAAO,gBAAgB;AAAA,MACrC,oCAAoC,OAAO,sCAAsC;AAAA,MACjF,kCAAkC,OAAO,oCAAoC;AAAA,MAC7E,sCAAsC,OAAO,wCAAwC;AAAA,MACrF,uCAAuC,OAAO,yCAAyC;AAAA,MACvF,kCAAkC,OAAO,oCAAoC;AAAA,MAC7E,8BAA8B,OAAO,gCAAgC;AAAA,IACvE;AAAA,EACF,CAAC;AACH;;;ACxBA,SAAS,iBAAiB;AAEnB,IAAM,iDAAN,cAA6D,UAAU;AAAA,EAC5E,OAAuB;AAAA,EAEvB,OAAuB;AAAA,EAEhB,cAAc;AACnB,UAAM,8FAA8F;AAAA,EACtG;AACF;;;ACVA,SAAS,sBAAsB;AAGxB,IAAM,qBAAN,MAAM,4BAA2B,aAAa;AAAA,EAC5C,YAAY,mBAA6B,gBAA0B;AACxE,UAAM,aAAa,kBAAkB,KAAK,IAAI;AAC9C,UAAM,UAAU,eAAe,KAAK,IAAI;AACxC,UAAM,UAAU,yBAAyB,UAAU,+CAA+C,OAAO;AAEzG,UAAM,SAAS,EAAE,QAAQ,eAAe,WAAW,CAAC;AAAA,EACtD;AAAA,EAEA,OAAc,kBAAkB,mBAA6B,gBAA8C;AACzG,WAAO,IAAI,oBAAmB,mBAAmB,cAAc;AAAA,EACjE;AACF;;;ACfA,SAAS,aAAAA,kBAAiB;AAEnB,IAAM,qBAAN,MAAM,4BAA2BA,WAAU;AAAA,EAChD,OAAc,KAAK,OAAoC;AACrD,WAAO,IAAI,oBAAmB,kBAAkB,KAAK,eAAe;AAAA,EACtE;AACF;;;ACNA,SAAS,kBAAAC,uBAAsB;AAGxB,IAAM,6BAAN,cAAyC,aAAa;AAAA,EAC3C;AAAA,EAET,YAAY,eAAyB;AAC1C,UAAM,aAAa,cAAc,KAAK,IAAI;AAC1C,UAAM,UAAU;AAAA,MACd,wBAAwB,UAAU;AAAA,MAClC;AAAA,IACF,EAAE,KAAK,EAAE;AAET,UAAM,SAAS,EAAE,QAAQC,gBAAe,WAAW,CAAC;AAEpD,SAAK,gBAAgB;AAAA,EACvB;AACF;;;ACCA,cAAc;","names":["Exception","ResponseStatus","ResponseStatus"]}
@@ -1 +1 @@
1
- {"inputs":{"stubs/main.ts":{"bytes":144,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true}],"format":"esm"},"configure.ts":{"bytes":423,"imports":[{"path":"stubs/main.ts","kind":"import-statement","original":"./stubs/main.js"}],"format":"esm"},"src/utils/helpers.ts":{"bytes":931,"imports":[],"format":"esm"},"src/api_query_builder_request.ts":{"bytes":6640,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./utils/helpers.js"}],"format":"esm"},"src/filters/filters_exact.ts":{"bytes":2526,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/filters/filters_partial.ts":{"bytes":2356,"imports":[{"path":"@adonisjs/lucid/types/database","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true},{"path":"src/filters/filters_exact.ts","kind":"import-statement","original":"./filters_exact.js"}],"format":"esm"},"src/filters/filters_begin_with_strict.ts":{"bytes":570,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true},{"path":"src/filters/filters_partial.ts","kind":"import-statement","original":"./filters_partial.js"}],"format":"esm"},"src/filters/filters_callback.ts":{"bytes":527,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/filters/filters_ends_with_strict.ts":{"bytes":568,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true},{"path":"src/filters/filters_partial.ts","kind":"import-statement","original":"./filters_partial.js"}],"format":"esm"},"src/enums/filter_operator.ts":{"bytes":265,"imports":[],"format":"esm"},"src/filters/filters_operator.ts":{"bytes":2380,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"src/enums/filter_operator.ts","kind":"import-statement","original":"../enums/filter_operator.js"},{"path":"../types.js","kind":"import-statement","external":true},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers.js"},{"path":"src/filters/filters_exact.ts","kind":"import-statement","original":"./filters_exact.js"}],"format":"esm"},"src/filters/filters_trashed.ts":{"bytes":885,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/allowed_filter.ts":{"bytes":6731,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/api_query_builder_request.ts","kind":"import-statement","original":"./api_query_builder_request.js"},{"path":"./enums/filter_operator.js","kind":"import-statement","external":true},{"path":"src/filters/filters_begin_with_strict.ts","kind":"import-statement","original":"./filters/filters_begin_with_strict.js"},{"path":"src/filters/filters_callback.ts","kind":"import-statement","original":"./filters/filters_callback.js"},{"path":"src/filters/filters_ends_with_strict.ts","kind":"import-statement","original":"./filters/filters_ends_with_strict.js"},{"path":"src/filters/filters_exact.ts","kind":"import-statement","original":"./filters/filters_exact.js"},{"path":"src/filters/filters_operator.ts","kind":"import-statement","original":"./filters/filters_operator.js"},{"path":"src/filters/filters_partial.ts","kind":"import-statement","original":"./filters/filters_partial.js"},{"path":"src/filters/filters_trashed.ts","kind":"import-statement","original":"./filters/filters_trashed.js"},{"path":"./types.js","kind":"import-statement","external":true}],"format":"esm"},"src/includes/included_callback.ts":{"bytes":809,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/includes/included_count.ts":{"bytes":742,"imports":[{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/includes/included_relationship.ts":{"bytes":2731,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/allowed_include.ts":{"bytes":3602,"imports":[{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/includes/included_callback.ts","kind":"import-statement","original":"./includes/included_callback.js"},{"path":"src/includes/included_count.ts","kind":"import-statement","original":"./includes/included_count.js"},{"path":"src/includes/included_relationship.ts","kind":"import-statement","original":"./includes/included_relationship.js"},{"path":"./types.js","kind":"import-statement","external":true}],"format":"esm"},"src/enums/sort_direction.ts":{"bytes":166,"imports":[],"format":"esm"},"src/exceptions/invalid_direction.ts":{"bytes":387,"imports":[{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"src/enums/sort_direction.ts","kind":"import-statement","original":"../enums/sort_direction.js"}],"format":"esm"},"src/sorts/sorts_callback.ts":{"bytes":551,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/sorts/sorts_field.ts":{"bytes":385,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/allowed_sort.ts":{"bytes":2724,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"src/enums/sort_direction.ts","kind":"import-statement","original":"./enums/sort_direction.js"},{"path":"src/exceptions/invalid_direction.ts","kind":"import-statement","original":"./exceptions/invalid_direction.js"},{"path":"src/sorts/sorts_callback.ts","kind":"import-statement","original":"./sorts/sorts_callback.js"},{"path":"src/sorts/sorts_field.ts","kind":"import-statement","original":"./sorts/sorts_field.js"},{"path":"./types.js","kind":"import-statement","external":true}],"format":"esm"},"src/define_config.ts":{"bytes":1326,"imports":[{"path":"@adonisjs/core","kind":"import-statement","external":true},{"path":"@adonisjs/core/types","kind":"import-statement","external":true},{"path":"./types.js","kind":"import-statement","external":true}],"format":"esm"},"src/exceptions/allowed_fields_must_be_called_before_allowed_includes.ts":{"bytes":376,"imports":[{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true}],"format":"esm"},"src/exceptions/invalid_query.ts":{"bytes":174,"imports":[{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true}],"format":"esm"},"src/exceptions/invalid_append_query.ts":{"bytes":706,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./invalid_query.js"}],"format":"esm"},"src/exceptions/invalid_filter_query.ts":{"bytes":739,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./invalid_query.js"}],"format":"esm"},"src/exceptions/invalid_filter_value.ts":{"bytes":248,"imports":[{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true}],"format":"esm"},"src/exceptions/invalid_include_query.ts":{"bytes":900,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./invalid_query.js"}],"format":"esm"},"src/exceptions/invalid_sort_query.ts":{"bytes":710,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./invalid_query.js"}],"format":"esm"},"src/exceptions/unknown_included_fields_query.ts":{"bytes":672,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./invalid_query.js"}],"format":"esm"},"index.ts":{"bytes":1315,"imports":[{"path":"configure.ts","kind":"import-statement","original":"./configure.js"},{"path":"src/allowed_filter.ts","kind":"import-statement","original":"./src/allowed_filter.js"},{"path":"src/allowed_include.ts","kind":"import-statement","original":"./src/allowed_include.js"},{"path":"src/allowed_sort.ts","kind":"import-statement","original":"./src/allowed_sort.js"},{"path":"src/api_query_builder_request.ts","kind":"import-statement","original":"./src/api_query_builder_request.js"},{"path":"src/define_config.ts","kind":"import-statement","original":"./src/define_config.js"},{"path":"src/enums/filter_operator.ts","kind":"import-statement","original":"./src/enums/filter_operator.js"},{"path":"src/enums/sort_direction.ts","kind":"import-statement","original":"./src/enums/sort_direction.js"},{"path":"src/exceptions/allowed_fields_must_be_called_before_allowed_includes.ts","kind":"import-statement","original":"./src/exceptions/allowed_fields_must_be_called_before_allowed_includes.js"},{"path":"src/exceptions/invalid_append_query.ts","kind":"import-statement","original":"./src/exceptions/invalid_append_query.js"},{"path":"src/exceptions/invalid_direction.ts","kind":"import-statement","original":"./src/exceptions/invalid_direction.js"},{"path":"src/exceptions/invalid_filter_query.ts","kind":"import-statement","original":"./src/exceptions/invalid_filter_query.js"},{"path":"src/exceptions/invalid_filter_value.ts","kind":"import-statement","original":"./src/exceptions/invalid_filter_value.js"},{"path":"src/exceptions/invalid_include_query.ts","kind":"import-statement","original":"./src/exceptions/invalid_include_query.js"},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./src/exceptions/invalid_query.js"},{"path":"src/exceptions/invalid_sort_query.ts","kind":"import-statement","original":"./src/exceptions/invalid_sort_query.js"},{"path":"src/exceptions/unknown_included_fields_query.ts","kind":"import-statement","original":"./src/exceptions/unknown_included_fields_query.js"},{"path":"stubs/main.ts","kind":"import-statement","original":"./stubs/main.js"},{"path":"collect.js","kind":"import-statement","external":true}],"format":"esm"},"src/bindings/api_query_request.ts":{"bytes":770,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"src/api_query_builder_request.ts","kind":"import-statement","original":"../api_query_builder_request.js"}],"format":"esm"},"src/bindings/sorts_query.ts":{"bytes":2829,"imports":[{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/allowed_sort.ts","kind":"import-statement","original":"../allowed_sort.js"},{"path":"src/exceptions/invalid_sort_query.ts","kind":"import-statement","original":"../exceptions/invalid_sort_query.js"},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/bindings/filters_query.ts":{"bytes":2528,"imports":[{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/allowed_filter.ts","kind":"import-statement","original":"../allowed_filter.js"},{"path":"src/exceptions/invalid_filter_query.ts","kind":"import-statement","original":"../exceptions/invalid_filter_query.js"},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/bindings/includes_query.ts":{"bytes":3412,"imports":[{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/allowed_include.ts","kind":"import-statement","original":"../allowed_include.js"},{"path":"src/exceptions/invalid_include_query.ts","kind":"import-statement","original":"../exceptions/invalid_include_query.js"},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"providers/api_query_provider.ts":{"bytes":4064,"imports":[{"path":"@adonisjs/core","kind":"import-statement","external":true},{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"@adonisjs/core/types","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"../src/allowed_filter.js","kind":"import-statement","external":true},{"path":"../src/allowed_include.js","kind":"import-statement","external":true},{"path":"../src/allowed_sort.js","kind":"import-statement","external":true},{"path":"../src/api_query_builder_request.js","kind":"import-statement","external":true},{"path":"../src/types.js","kind":"import-statement","external":true},{"path":"src/bindings/api_query_request.ts","kind":"dynamic-import","original":"../src/bindings/api_query_request.js"},{"path":"src/bindings/sorts_query.ts","kind":"dynamic-import","original":"../src/bindings/sorts_query.js"},{"path":"src/bindings/filters_query.ts","kind":"dynamic-import","original":"../src/bindings/filters_query.js"},{"path":"src/bindings/includes_query.ts","kind":"dynamic-import","original":"../src/bindings/includes_query.js"}],"format":"esm"},"src/types.ts":{"bytes":4261,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"build/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":7495},"build/index.js":{"imports":[{"path":"build/chunk-HQN7LHVO.js","kind":"import-statement"},{"path":"build/chunk-AL3XCN3K.js","kind":"import-statement"},{"path":"build/chunk-MKQ3HMMA.js","kind":"import-statement"},{"path":"build/chunk-OS75QJZN.js","kind":"import-statement"},{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true},{"path":"@adonisjs/core","kind":"import-statement","external":true},{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true}],"exports":["AllowedFieldsMustBeCalledBeforeAllowedIncludes","AllowedFilter","AllowedInclude","AllowedSort","ApiQueryBuilderRequest","FilterOperator","InvalidAppendQuery","InvalidDirection","InvalidFilterQuery","InvalidFilterValue","InvalidIncludeQuery","InvalidQuery","InvalidSortQuery","SortDirection","UnknownIncludedFieldsQuery","configure","defineConfig","stubsRoot"],"entryPoint":"index.ts","inputs":{"stubs/main.ts":{"bytesInOutput":134},"configure.ts":{"bytesInOutput":276},"index.ts":{"bytesInOutput":28},"src/define_config.ts":{"bytesInOutput":1118},"src/exceptions/allowed_fields_must_be_called_before_allowed_includes.ts":{"bytesInOutput":298},"src/exceptions/invalid_append_query.ts":{"bytesInOutput":599},"src/exceptions/invalid_filter_value.ts":{"bytesInOutput":247},"src/exceptions/unknown_included_fields_query.ts":{"bytesInOutput":593}},"bytes":4371},"build/providers/api_query_provider.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":4876},"build/providers/api_query_provider.js":{"imports":[{"path":"@adonisjs/core","kind":"import-statement","external":true},{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"build/api_query_request-QXOB4BN6.js","kind":"dynamic-import"},{"path":"build/sorts_query-LUETK3FD.js","kind":"dynamic-import"},{"path":"build/filters_query-4E533ESM.js","kind":"dynamic-import"},{"path":"build/includes_query-2XNHHWJB.js","kind":"dynamic-import"}],"exports":["default"],"entryPoint":"providers/api_query_provider.ts","inputs":{"providers/api_query_provider.ts":{"bytesInOutput":1261}},"bytes":1338},"build/src/types.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"build/src/types.js":{"imports":[],"exports":[],"entryPoint":"src/types.ts","inputs":{"src/types.ts":{"bytesInOutput":0}},"bytes":0},"build/api_query_request-QXOB4BN6.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1131},"build/api_query_request-QXOB4BN6.js":{"imports":[{"path":"build/chunk-MKQ3HMMA.js","kind":"import-statement"}],"exports":["extendModelQueryBuilderWithRequest"],"entryPoint":"src/bindings/api_query_request.ts","inputs":{"src/bindings/api_query_request.ts":{"bytesInOutput":348}},"bytes":499},"build/sorts_query-LUETK3FD.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":4447},"build/sorts_query-LUETK3FD.js":{"imports":[{"path":"build/chunk-HQN7LHVO.js","kind":"import-statement"},{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"collect.js","kind":"import-statement","external":true}],"exports":["extendModelQueryBuilderWithSortsQuery"],"entryPoint":"src/bindings/sorts_query.ts","inputs":{"src/bindings/sorts_query.ts":{"bytesInOutput":1877}},"bytes":2064},"build/chunk-HQN7LHVO.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":7217},"build/chunk-HQN7LHVO.js":{"imports":[{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true}],"exports":["AllowedSort","InvalidDirection","InvalidSortQuery","SortDirection"],"inputs":{"src/enums/sort_direction.ts":{"bytesInOutput":66},"src/exceptions/invalid_direction.ts":{"bytesInOutput":311},"src/sorts/sorts_callback.ts":{"bytesInOutput":187},"src/sorts/sorts_field.ts":{"bytesInOutput":135},"src/allowed_sort.ts":{"bytesInOutput":1415},"src/exceptions/invalid_sort_query.ts":{"bytesInOutput":634}},"bytes":3084},"build/filters_query-4E533ESM.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":3812},"build/filters_query-4E533ESM.js":{"imports":[{"path":"build/chunk-AL3XCN3K.js","kind":"import-statement"},{"path":"build/chunk-MKQ3HMMA.js","kind":"import-statement"},{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"collect.js","kind":"import-statement","external":true}],"exports":["extendModelQueryBuilderWithFiltersQuery"],"entryPoint":"src/bindings/filters_query.ts","inputs":{"src/bindings/filters_query.ts":{"bytesInOutput":1613}},"bytes":1838},"build/chunk-AL3XCN3K.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":25699},"build/chunk-AL3XCN3K.js":{"imports":[{"path":"build/chunk-MKQ3HMMA.js","kind":"import-statement"},{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"collect.js","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true}],"exports":["AllowedFilter","FilterOperator","InvalidFilterQuery"],"inputs":{"src/enums/filter_operator.ts":{"bytesInOutput":162},"src/allowed_filter.ts":{"bytesInOutput":3816},"src/filters/filters_exact.ts":{"bytesInOutput":1632},"src/filters/filters_partial.ts":{"bytesInOutput":1536},"src/filters/filters_begin_with_strict.ts":{"bytesInOutput":231},"src/filters/filters_callback.ts":{"bytesInOutput":175},"src/filters/filters_ends_with_strict.ts":{"bytesInOutput":228},"src/filters/filters_operator.ts":{"bytesInOutput":1750},"src/filters/filters_trashed.ts":{"bytesInOutput":371},"src/exceptions/invalid_filter_query.ts":{"bytesInOutput":671}},"bytes":11168},"build/chunk-MKQ3HMMA.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":12289},"build/chunk-MKQ3HMMA.js":{"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true}],"exports":["ApiQueryBuilderRequest","substrReplace"],"inputs":{"src/api_query_builder_request.ts":{"bytesInOutput":5775},"src/utils/helpers.ts":{"bytesInOutput":804}},"bytes":6732},"build/includes_query-2XNHHWJB.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":5167},"build/includes_query-2XNHHWJB.js":{"imports":[{"path":"build/chunk-OS75QJZN.js","kind":"import-statement"},{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"collect.js","kind":"import-statement","external":true}],"exports":["extendModelQueryBuilderWithIncludesQuery"],"entryPoint":"src/bindings/includes_query.ts","inputs":{"src/bindings/includes_query.ts":{"bytesInOutput":2315}},"bytes":2514},"build/chunk-OS75QJZN.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":12703},"build/chunk-OS75QJZN.js":{"imports":[{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true}],"exports":["AllowedInclude","InvalidIncludeQuery"],"inputs":{"src/allowed_include.ts":{"bytesInOutput":1841},"src/includes/included_callback.ts":{"bytesInOutput":173},"src/includes/included_count.ts":{"bytesInOutput":297},"src/includes/included_relationship.ts":{"bytesInOutput":1845},"src/exceptions/invalid_include_query.ts":{"bytesInOutput":835}},"bytes":5311},"build/chunk-XIRHVLVQ.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":383},"build/chunk-XIRHVLVQ.js":{"imports":[{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true}],"exports":["InvalidQuery"],"inputs":{"src/exceptions/invalid_query.ts":{"bytesInOutput":148}},"bytes":211}}}
1
+ {"inputs":{"stubs/main.ts":{"bytes":144,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true}],"format":"esm"},"configure.ts":{"bytes":423,"imports":[{"path":"stubs/main.ts","kind":"import-statement","original":"./stubs/main.js"}],"format":"esm"},"src/utils/helpers.ts":{"bytes":931,"imports":[],"format":"esm"},"src/api_query_builder_request.ts":{"bytes":6640,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./utils/helpers.js"}],"format":"esm"},"src/filters/filters_exact.ts":{"bytes":2571,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/filters/filters_partial.ts":{"bytes":2356,"imports":[{"path":"@adonisjs/lucid/types/database","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true},{"path":"src/filters/filters_exact.ts","kind":"import-statement","original":"./filters_exact.js"}],"format":"esm"},"src/filters/filters_begin_with_strict.ts":{"bytes":570,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true},{"path":"src/filters/filters_partial.ts","kind":"import-statement","original":"./filters_partial.js"}],"format":"esm"},"src/filters/filters_callback.ts":{"bytes":527,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/filters/filters_ends_with_strict.ts":{"bytes":568,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true},{"path":"src/filters/filters_partial.ts","kind":"import-statement","original":"./filters_partial.js"}],"format":"esm"},"src/enums/filter_operator.ts":{"bytes":265,"imports":[],"format":"esm"},"src/filters/filters_operator.ts":{"bytes":2380,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"src/enums/filter_operator.ts","kind":"import-statement","original":"../enums/filter_operator.js"},{"path":"../types.js","kind":"import-statement","external":true},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers.js"},{"path":"src/filters/filters_exact.ts","kind":"import-statement","original":"./filters_exact.js"}],"format":"esm"},"src/filters/filters_trashed.ts":{"bytes":885,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/allowed_filter.ts":{"bytes":6731,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/api_query_builder_request.ts","kind":"import-statement","original":"./api_query_builder_request.js"},{"path":"./enums/filter_operator.js","kind":"import-statement","external":true},{"path":"src/filters/filters_begin_with_strict.ts","kind":"import-statement","original":"./filters/filters_begin_with_strict.js"},{"path":"src/filters/filters_callback.ts","kind":"import-statement","original":"./filters/filters_callback.js"},{"path":"src/filters/filters_ends_with_strict.ts","kind":"import-statement","original":"./filters/filters_ends_with_strict.js"},{"path":"src/filters/filters_exact.ts","kind":"import-statement","original":"./filters/filters_exact.js"},{"path":"src/filters/filters_operator.ts","kind":"import-statement","original":"./filters/filters_operator.js"},{"path":"src/filters/filters_partial.ts","kind":"import-statement","original":"./filters/filters_partial.js"},{"path":"src/filters/filters_trashed.ts","kind":"import-statement","original":"./filters/filters_trashed.js"},{"path":"./types.js","kind":"import-statement","external":true}],"format":"esm"},"src/includes/included_callback.ts":{"bytes":809,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/includes/included_count.ts":{"bytes":742,"imports":[{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/includes/included_relationship.ts":{"bytes":2731,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/allowed_include.ts":{"bytes":3602,"imports":[{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/includes/included_callback.ts","kind":"import-statement","original":"./includes/included_callback.js"},{"path":"src/includes/included_count.ts","kind":"import-statement","original":"./includes/included_count.js"},{"path":"src/includes/included_relationship.ts","kind":"import-statement","original":"./includes/included_relationship.js"},{"path":"./types.js","kind":"import-statement","external":true}],"format":"esm"},"src/enums/sort_direction.ts":{"bytes":166,"imports":[],"format":"esm"},"src/exceptions/invalid_direction.ts":{"bytes":387,"imports":[{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"src/enums/sort_direction.ts","kind":"import-statement","original":"../enums/sort_direction.js"}],"format":"esm"},"src/sorts/sorts_callback.ts":{"bytes":551,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/sorts/sorts_field.ts":{"bytes":385,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/allowed_sort.ts":{"bytes":2724,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"src/enums/sort_direction.ts","kind":"import-statement","original":"./enums/sort_direction.js"},{"path":"src/exceptions/invalid_direction.ts","kind":"import-statement","original":"./exceptions/invalid_direction.js"},{"path":"src/sorts/sorts_callback.ts","kind":"import-statement","original":"./sorts/sorts_callback.js"},{"path":"src/sorts/sorts_field.ts","kind":"import-statement","original":"./sorts/sorts_field.js"},{"path":"./types.js","kind":"import-statement","external":true}],"format":"esm"},"src/define_config.ts":{"bytes":1326,"imports":[{"path":"@adonisjs/core","kind":"import-statement","external":true},{"path":"@adonisjs/core/types","kind":"import-statement","external":true},{"path":"./types.js","kind":"import-statement","external":true}],"format":"esm"},"src/exceptions/allowed_fields_must_be_called_before_allowed_includes.ts":{"bytes":376,"imports":[{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true}],"format":"esm"},"src/exceptions/invalid_query.ts":{"bytes":174,"imports":[{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true}],"format":"esm"},"src/exceptions/invalid_append_query.ts":{"bytes":706,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./invalid_query.js"}],"format":"esm"},"src/exceptions/invalid_filter_query.ts":{"bytes":739,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./invalid_query.js"}],"format":"esm"},"src/exceptions/invalid_filter_value.ts":{"bytes":248,"imports":[{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true}],"format":"esm"},"src/exceptions/invalid_include_query.ts":{"bytes":900,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./invalid_query.js"}],"format":"esm"},"src/exceptions/invalid_sort_query.ts":{"bytes":710,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./invalid_query.js"}],"format":"esm"},"src/exceptions/unknown_included_fields_query.ts":{"bytes":672,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./invalid_query.js"}],"format":"esm"},"index.ts":{"bytes":2188,"imports":[{"path":"configure.ts","kind":"import-statement","original":"./configure.js"},{"path":"src/allowed_filter.ts","kind":"import-statement","original":"./src/allowed_filter.js"},{"path":"src/allowed_include.ts","kind":"import-statement","original":"./src/allowed_include.js"},{"path":"src/allowed_sort.ts","kind":"import-statement","original":"./src/allowed_sort.js"},{"path":"src/api_query_builder_request.ts","kind":"import-statement","original":"./src/api_query_builder_request.js"},{"path":"src/define_config.ts","kind":"import-statement","original":"./src/define_config.js"},{"path":"src/enums/filter_operator.ts","kind":"import-statement","original":"./src/enums/filter_operator.js"},{"path":"src/enums/sort_direction.ts","kind":"import-statement","original":"./src/enums/sort_direction.js"},{"path":"src/exceptions/allowed_fields_must_be_called_before_allowed_includes.ts","kind":"import-statement","original":"./src/exceptions/allowed_fields_must_be_called_before_allowed_includes.js"},{"path":"src/exceptions/invalid_append_query.ts","kind":"import-statement","original":"./src/exceptions/invalid_append_query.js"},{"path":"src/exceptions/invalid_direction.ts","kind":"import-statement","original":"./src/exceptions/invalid_direction.js"},{"path":"src/exceptions/invalid_filter_query.ts","kind":"import-statement","original":"./src/exceptions/invalid_filter_query.js"},{"path":"src/exceptions/invalid_filter_value.ts","kind":"import-statement","original":"./src/exceptions/invalid_filter_value.js"},{"path":"src/exceptions/invalid_include_query.ts","kind":"import-statement","original":"./src/exceptions/invalid_include_query.js"},{"path":"src/exceptions/invalid_query.ts","kind":"import-statement","original":"./src/exceptions/invalid_query.js"},{"path":"src/exceptions/invalid_sort_query.ts","kind":"import-statement","original":"./src/exceptions/invalid_sort_query.js"},{"path":"src/exceptions/unknown_included_fields_query.ts","kind":"import-statement","original":"./src/exceptions/unknown_included_fields_query.js"},{"path":"stubs/main.ts","kind":"import-statement","original":"./stubs/main.js"},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/filters/filters_begin_with_strict.ts","kind":"import-statement","original":"./src/filters/filters_begin_with_strict.js"},{"path":"src/filters/filters_callback.ts","kind":"import-statement","original":"./src/filters/filters_callback.js"},{"path":"src/filters/filters_ends_with_strict.ts","kind":"import-statement","original":"./src/filters/filters_ends_with_strict.js"},{"path":"src/filters/filters_exact.ts","kind":"import-statement","original":"./src/filters/filters_exact.js"},{"path":"src/filters/filters_operator.ts","kind":"import-statement","original":"./src/filters/filters_operator.js"},{"path":"src/filters/filters_partial.ts","kind":"import-statement","original":"./src/filters/filters_partial.js"},{"path":"src/filters/filters_trashed.ts","kind":"import-statement","original":"./src/filters/filters_trashed.js"},{"path":"src/includes/included_callback.ts","kind":"import-statement","original":"./src/includes/included_callback.js"},{"path":"src/includes/included_count.ts","kind":"import-statement","original":"./src/includes/included_count.js"},{"path":"src/includes/included_relationship.ts","kind":"import-statement","original":"./src/includes/included_relationship.js"},{"path":"src/sorts/sorts_callback.ts","kind":"import-statement","original":"./src/sorts/sorts_callback.js"},{"path":"src/sorts/sorts_field.ts","kind":"import-statement","original":"./src/sorts/sorts_field.js"}],"format":"esm"},"src/bindings/api_query_request.ts":{"bytes":770,"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"src/api_query_builder_request.ts","kind":"import-statement","original":"../api_query_builder_request.js"}],"format":"esm"},"src/bindings/sorts_query.ts":{"bytes":2829,"imports":[{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/allowed_sort.ts","kind":"import-statement","original":"../allowed_sort.js"},{"path":"src/exceptions/invalid_sort_query.ts","kind":"import-statement","original":"../exceptions/invalid_sort_query.js"},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/bindings/filters_query.ts":{"bytes":2528,"imports":[{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/allowed_filter.ts","kind":"import-statement","original":"../allowed_filter.js"},{"path":"src/exceptions/invalid_filter_query.ts","kind":"import-statement","original":"../exceptions/invalid_filter_query.js"},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"src/bindings/includes_query.ts":{"bytes":3412,"imports":[{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"src/allowed_include.ts","kind":"import-statement","original":"../allowed_include.js"},{"path":"src/exceptions/invalid_include_query.ts","kind":"import-statement","original":"../exceptions/invalid_include_query.js"},{"path":"../types.js","kind":"import-statement","external":true}],"format":"esm"},"providers/api_query_provider.ts":{"bytes":4117,"imports":[{"path":"@adonisjs/core","kind":"import-statement","external":true},{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"@adonisjs/core/types","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/relations","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"../src/allowed_filter.js","kind":"import-statement","external":true},{"path":"../src/allowed_include.js","kind":"import-statement","external":true},{"path":"../src/allowed_sort.js","kind":"import-statement","external":true},{"path":"../src/api_query_builder_request.js","kind":"import-statement","external":true},{"path":"../src/types.js","kind":"import-statement","external":true},{"path":"src/bindings/api_query_request.ts","kind":"dynamic-import","original":"../src/bindings/api_query_request.js"},{"path":"src/bindings/sorts_query.ts","kind":"dynamic-import","original":"../src/bindings/sorts_query.js"},{"path":"src/bindings/filters_query.ts","kind":"dynamic-import","original":"../src/bindings/filters_query.js"},{"path":"src/bindings/includes_query.ts","kind":"dynamic-import","original":"../src/bindings/includes_query.js"}],"format":"esm"},"src/types.ts":{"bytes":4261,"imports":[{"path":"@adonisjs/lucid/types/model","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/types/querybuilder","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"build/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":8395},"build/index.js":{"imports":[{"path":"build/chunk-3ITWUZL5.js","kind":"import-statement"},{"path":"build/chunk-54HNQTDY.js","kind":"import-statement"},{"path":"build/chunk-MKQ3HMMA.js","kind":"import-statement"},{"path":"build/chunk-IV3B5WO7.js","kind":"import-statement"},{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true},{"path":"@adonisjs/core","kind":"import-statement","external":true},{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true}],"exports":["AllowedFieldsMustBeCalledBeforeAllowedIncludes","AllowedFilter","AllowedInclude","AllowedSort","ApiQueryBuilderRequest","FilterOperator","FiltersBeginWithStrict","FiltersCallback","FiltersEndsWithStrict","FiltersExact","FiltersOperator","FiltersPartial","FiltersTrashed","IncludedCallback","IncludedCount","IncludedRelationship","InvalidAppendQuery","InvalidDirection","InvalidFilterQuery","InvalidFilterValue","InvalidIncludeQuery","InvalidQuery","InvalidSortQuery","SortDirection","SortsCallback","SortsField","UnknownIncludedFieldsQuery","configure","defineConfig","stubsRoot"],"entryPoint":"index.ts","inputs":{"stubs/main.ts":{"bytesInOutput":134},"configure.ts":{"bytesInOutput":276},"index.ts":{"bytesInOutput":28},"src/define_config.ts":{"bytesInOutput":1118},"src/exceptions/allowed_fields_must_be_called_before_allowed_includes.ts":{"bytesInOutput":298},"src/exceptions/invalid_append_query.ts":{"bytesInOutput":599},"src/exceptions/invalid_filter_value.ts":{"bytesInOutput":247},"src/exceptions/unknown_included_fields_query.ts":{"bytesInOutput":593}},"bytes":4837},"build/providers/api_query_provider.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":4933},"build/providers/api_query_provider.js":{"imports":[{"path":"@adonisjs/core","kind":"import-statement","external":true},{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"@adonisjs/lucid/orm","kind":"import-statement","external":true},{"path":"build/api_query_request-QXOB4BN6.js","kind":"dynamic-import"},{"path":"build/sorts_query-NJTC5UXX.js","kind":"dynamic-import"},{"path":"build/filters_query-LCFH2F2X.js","kind":"dynamic-import"},{"path":"build/includes_query-PVONWQMC.js","kind":"dynamic-import"}],"exports":["default"],"entryPoint":"providers/api_query_provider.ts","inputs":{"providers/api_query_provider.ts":{"bytesInOutput":1261}},"bytes":1338},"build/src/types.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"build/src/types.js":{"imports":[],"exports":[],"entryPoint":"src/types.ts","inputs":{"src/types.ts":{"bytesInOutput":0}},"bytes":0},"build/api_query_request-QXOB4BN6.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1131},"build/api_query_request-QXOB4BN6.js":{"imports":[{"path":"build/chunk-MKQ3HMMA.js","kind":"import-statement"}],"exports":["extendModelQueryBuilderWithRequest"],"entryPoint":"src/bindings/api_query_request.ts","inputs":{"src/bindings/api_query_request.ts":{"bytesInOutput":348}},"bytes":499},"build/sorts_query-NJTC5UXX.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":4447},"build/sorts_query-NJTC5UXX.js":{"imports":[{"path":"build/chunk-3ITWUZL5.js","kind":"import-statement"},{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"collect.js","kind":"import-statement","external":true}],"exports":["extendModelQueryBuilderWithSortsQuery"],"entryPoint":"src/bindings/sorts_query.ts","inputs":{"src/bindings/sorts_query.ts":{"bytesInOutput":1877}},"bytes":2064},"build/chunk-3ITWUZL5.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":7217},"build/chunk-3ITWUZL5.js":{"imports":[{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true}],"exports":["AllowedSort","InvalidDirection","InvalidSortQuery","SortDirection","SortsCallback","SortsField"],"inputs":{"src/enums/sort_direction.ts":{"bytesInOutput":66},"src/exceptions/invalid_direction.ts":{"bytesInOutput":311},"src/sorts/sorts_callback.ts":{"bytesInOutput":187},"src/sorts/sorts_field.ts":{"bytesInOutput":135},"src/allowed_sort.ts":{"bytesInOutput":1415},"src/exceptions/invalid_sort_query.ts":{"bytesInOutput":634}},"bytes":3115},"build/filters_query-LCFH2F2X.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":3812},"build/filters_query-LCFH2F2X.js":{"imports":[{"path":"build/chunk-54HNQTDY.js","kind":"import-statement"},{"path":"build/chunk-MKQ3HMMA.js","kind":"import-statement"},{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"collect.js","kind":"import-statement","external":true}],"exports":["extendModelQueryBuilderWithFiltersQuery"],"entryPoint":"src/bindings/filters_query.ts","inputs":{"src/bindings/filters_query.ts":{"bytesInOutput":1613}},"bytes":1838},"build/chunk-54HNQTDY.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":25748},"build/chunk-54HNQTDY.js":{"imports":[{"path":"build/chunk-MKQ3HMMA.js","kind":"import-statement"},{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"collect.js","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true}],"exports":["AllowedFilter","FilterOperator","FiltersBeginWithStrict","FiltersCallback","FiltersEndsWithStrict","FiltersExact","FiltersOperator","FiltersPartial","FiltersTrashed","InvalidFilterQuery"],"inputs":{"src/filters/filters_exact.ts":{"bytesInOutput":1677},"src/filters/filters_partial.ts":{"bytesInOutput":1536},"src/filters/filters_begin_with_strict.ts":{"bytesInOutput":231},"src/filters/filters_callback.ts":{"bytesInOutput":175},"src/filters/filters_ends_with_strict.ts":{"bytesInOutput":228},"src/enums/filter_operator.ts":{"bytesInOutput":162},"src/filters/filters_operator.ts":{"bytesInOutput":1750},"src/filters/filters_trashed.ts":{"bytesInOutput":371},"src/allowed_filter.ts":{"bytesInOutput":3816},"src/exceptions/invalid_filter_query.ts":{"bytesInOutput":671}},"bytes":11328},"build/chunk-MKQ3HMMA.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":12289},"build/chunk-MKQ3HMMA.js":{"imports":[{"path":"@adonisjs/core/http","kind":"import-statement","external":true},{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true}],"exports":["ApiQueryBuilderRequest","substrReplace"],"inputs":{"src/api_query_builder_request.ts":{"bytesInOutput":5775},"src/utils/helpers.ts":{"bytesInOutput":804}},"bytes":6732},"build/includes_query-PVONWQMC.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":5167},"build/includes_query-PVONWQMC.js":{"imports":[{"path":"build/chunk-IV3B5WO7.js","kind":"import-statement"},{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"collect.js","kind":"import-statement","external":true}],"exports":["extendModelQueryBuilderWithIncludesQuery"],"entryPoint":"src/bindings/includes_query.ts","inputs":{"src/bindings/includes_query.ts":{"bytesInOutput":2315}},"bytes":2514},"build/chunk-IV3B5WO7.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":12701},"build/chunk-IV3B5WO7.js":{"imports":[{"path":"build/chunk-XIRHVLVQ.js","kind":"import-statement"},{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"@adonisjs/core/services/app","kind":"import-statement","external":true},{"path":"collect.js","kind":"import-statement","external":true},{"path":"@adonisjs/core/http","kind":"import-statement","external":true}],"exports":["AllowedInclude","IncludedCallback","IncludedCount","IncludedRelationship","InvalidIncludeQuery"],"inputs":{"src/includes/included_callback.ts":{"bytesInOutput":173},"src/includes/included_count.ts":{"bytesInOutput":297},"src/includes/included_relationship.ts":{"bytesInOutput":1845},"src/allowed_include.ts":{"bytesInOutput":1841},"src/exceptions/invalid_include_query.ts":{"bytesInOutput":835}},"bytes":5345},"build/chunk-XIRHVLVQ.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":383},"build/chunk-XIRHVLVQ.js":{"imports":[{"path":"@adonisjs/core/exceptions","kind":"import-statement","external":true}],"exports":["InvalidQuery"],"inputs":{"src/exceptions/invalid_query.ts":{"bytesInOutput":148}},"bytes":211}}}
@@ -34,8 +34,8 @@ declare module '@adonisjs/lucid/types/model' {
34
34
  allowedSorts(sorts: (AllowedSort<Model> | HintedString<SortUnionKeyParams<Model>>)[]): this;
35
35
  defaultSort(...sorts: (AllowedSort<Model> | HintedString<SortUnionKeyParams<Model>>)[]): this;
36
36
  defaultSort(sorts: (AllowedSort<Model> | HintedString<SortUnionKeyParams<Model>>)[]): this;
37
- allowedFilters(...filters: (AllowedFilter<Model> | ExtractKeys<ModelAttributes<InstanceType<Model>>>)[]): this;
38
- allowedFilters(filters: (AllowedFilter<Model> | ExtractKeys<ModelAttributes<InstanceType<Model>>>)[]): this;
37
+ allowedFilters(...filters: (AllowedFilter<Model> | HintedString<ExtractKeys<ModelAttributes<InstanceType<Model>>>>)[]): this;
38
+ allowedFilters(filters: (AllowedFilter<Model> | HintedString<ExtractKeys<ModelAttributes<InstanceType<Model>>>>)[]): this;
39
39
  allowedIncludes(...includes: (Collection<AllowedInclude<Model>> | HintedString<ExtractModelRelations<InstanceType<Model>>>)[]): this;
40
40
  allowedIncludes(includes: (Collection<AllowedInclude<Model>> | HintedString<ExtractModelRelations<InstanceType<Model>>>)[]): this;
41
41
  }
@@ -8,9 +8,9 @@ var ApiQueryProvider = class {
8
8
  }
9
9
  async boot() {
10
10
  const { extendModelQueryBuilderWithRequest } = await import("../api_query_request-QXOB4BN6.js");
11
- const { extendModelQueryBuilderWithSortsQuery } = await import("../sorts_query-LUETK3FD.js");
12
- const { extendModelQueryBuilderWithFiltersQuery } = await import("../filters_query-4E533ESM.js");
13
- const { extendModelQueryBuilderWithIncludesQuery } = await import("../includes_query-2XNHHWJB.js");
11
+ const { extendModelQueryBuilderWithSortsQuery } = await import("../sorts_query-NJTC5UXX.js");
12
+ const { extendModelQueryBuilderWithFiltersQuery } = await import("../filters_query-LCFH2F2X.js");
13
+ const { extendModelQueryBuilderWithIncludesQuery } = await import("../includes_query-PVONWQMC.js");
14
14
  const apiQueryConfigProvider = this.app.config.get("apiquery");
15
15
  const config = await configProvider.resolve(this.app, apiQueryConfigProvider);
16
16
  if (!config) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../providers/api_query_provider.ts"],"sourcesContent":["import { configProvider } from '@adonisjs/core';\nimport { RuntimeException } from '@adonisjs/core/exceptions';\nimport { type Request } from '@adonisjs/core/http';\nimport { type ApplicationService } from '@adonisjs/core/types';\nimport { ModelQueryBuilder } from '@adonisjs/lucid/orm';\nimport { type LucidModel } from '@adonisjs/lucid/types/model';\nimport { type ExtractModelRelations } from '@adonisjs/lucid/types/relations';\nimport { type Collection } from 'collect.js';\nimport { type AllowedFilter } from '../src/allowed_filter.js';\nimport { type AllowedInclude } from '../src/allowed_include.js';\nimport { type AllowedSort } from '../src/allowed_sort.js';\nimport { type ApiQueryBuilderRequest } from '../src/api_query_builder_request.js';\nimport {\n type ApiQueryConfig,\n type ExtractKeys,\n type HintedString,\n type ResolvedApiQueryConfig,\n type SortUnionKeyParams,\n} from '../src/types.js';\n\nexport default class ApiQueryProvider {\n public constructor(protected app: ApplicationService) {}\n\n public async boot(): Promise<void> {\n const { extendModelQueryBuilderWithRequest } = await import('../src/bindings/api_query_request.js');\n const { extendModelQueryBuilderWithSortsQuery } = await import('../src/bindings/sorts_query.js');\n const { extendModelQueryBuilderWithFiltersQuery } = await import('../src/bindings/filters_query.js');\n const { extendModelQueryBuilderWithIncludesQuery } = await import('../src/bindings/includes_query.js');\n const apiQueryConfigProvider = this.app.config.get<ApiQueryConfig>('apiquery');\n const config = await configProvider.resolve<ResolvedApiQueryConfig>(this.app, apiQueryConfigProvider);\n\n if (!config) {\n throw new RuntimeException(\n 'Invalid \"config/apiquery.ts\" file. Make sure you are using the \"defineConfig\" method',\n );\n }\n\n extendModelQueryBuilderWithRequest(ModelQueryBuilder);\n extendModelQueryBuilderWithSortsQuery(ModelQueryBuilder, config);\n extendModelQueryBuilderWithFiltersQuery(ModelQueryBuilder, config);\n extendModelQueryBuilderWithIncludesQuery(ModelQueryBuilder, config);\n }\n}\n\ndeclare module '@adonisjs/lucid/orm' {\n interface ModelQueryBuilder {\n withRequest(request: Request): this;\n $apiQueryBuilderRequest: ApiQueryBuilderRequest;\n\n allowedSorts(...sorts: (AllowedSort<LucidModel> | string)[]): this;\n allowedSorts(sorts: (AllowedSort<LucidModel> | string)[]): this;\n defaultSort(...sorts: (AllowedSort<LucidModel> | string)[]): this;\n defaultSort(sorts: (AllowedSort<LucidModel> | string)[]): this;\n\n allowedFilters(...filters: (AllowedFilter<LucidModel> | string)[]): this;\n allowedFilters(filters: (AllowedFilter<LucidModel> | string)[]): this;\n\n allowedIncludes(...includes: (Collection<AllowedInclude<LucidModel>> | string)[]): this;\n allowedIncludes(includes: (Collection<AllowedInclude<LucidModel>> | string)[]): this;\n }\n}\n\ndeclare module '@adonisjs/lucid/types/model' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface ModelQueryBuilderContract<Model extends LucidModel, Result = InstanceType<Model>> {\n withRequest(request: Request): this;\n\n allowedSorts(...sorts: (AllowedSort<Model> | HintedString<SortUnionKeyParams<Model>>)[]): this;\n allowedSorts(sorts: (AllowedSort<Model> | HintedString<SortUnionKeyParams<Model>>)[]): this;\n defaultSort(...sorts: (AllowedSort<Model> | HintedString<SortUnionKeyParams<Model>>)[]): this;\n defaultSort(sorts: (AllowedSort<Model> | HintedString<SortUnionKeyParams<Model>>)[]): this;\n\n allowedFilters(...filters: (AllowedFilter<Model> | ExtractKeys<ModelAttributes<InstanceType<Model>>>)[]): this;\n allowedFilters(filters: (AllowedFilter<Model> | ExtractKeys<ModelAttributes<InstanceType<Model>>>)[]): this;\n\n allowedIncludes(\n ...includes: (Collection<AllowedInclude<Model>> | HintedString<ExtractModelRelations<InstanceType<Model>>>)[]\n ): this;\n allowedIncludes(\n includes: (Collection<AllowedInclude<Model>> | HintedString<ExtractModelRelations<InstanceType<Model>>>)[],\n ): this;\n }\n}\n"],"mappings":";AAAA,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AAGjC,SAAS,yBAAyB;AAgBlC,IAAqB,mBAArB,MAAsC;AAAA,EAC7B,YAAsB,KAAyB;AAAzB;AAAA,EAA0B;AAAA,EAEvD,MAAa,OAAsB;AACjC,UAAM,EAAE,mCAAmC,IAAI,MAAM,OAAO,kCAAsC;AAClG,UAAM,EAAE,sCAAsC,IAAI,MAAM,OAAO,4BAAgC;AAC/F,UAAM,EAAE,wCAAwC,IAAI,MAAM,OAAO,8BAAkC;AACnG,UAAM,EAAE,yCAAyC,IAAI,MAAM,OAAO,+BAAmC;AACrG,UAAM,yBAAyB,KAAK,IAAI,OAAO,IAAoB,UAAU;AAC7E,UAAM,SAAS,MAAM,eAAe,QAAgC,KAAK,KAAK,sBAAsB;AAEpG,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,uCAAmC,iBAAiB;AACpD,0CAAsC,mBAAmB,MAAM;AAC/D,4CAAwC,mBAAmB,MAAM;AACjE,6CAAyC,mBAAmB,MAAM;AAAA,EACpE;AACF;","names":[]}
1
+ {"version":3,"sources":["../../providers/api_query_provider.ts"],"sourcesContent":["import { configProvider } from '@adonisjs/core';\nimport { RuntimeException } from '@adonisjs/core/exceptions';\nimport { type Request } from '@adonisjs/core/http';\nimport { type ApplicationService } from '@adonisjs/core/types';\nimport { ModelQueryBuilder } from '@adonisjs/lucid/orm';\nimport { type LucidModel } from '@adonisjs/lucid/types/model';\nimport { type ExtractModelRelations } from '@adonisjs/lucid/types/relations';\nimport { type Collection } from 'collect.js';\nimport { type AllowedFilter } from '../src/allowed_filter.js';\nimport { type AllowedInclude } from '../src/allowed_include.js';\nimport { type AllowedSort } from '../src/allowed_sort.js';\nimport { type ApiQueryBuilderRequest } from '../src/api_query_builder_request.js';\nimport {\n type ApiQueryConfig,\n type ExtractKeys,\n type HintedString,\n type ResolvedApiQueryConfig,\n type SortUnionKeyParams,\n} from '../src/types.js';\n\nexport default class ApiQueryProvider {\n public constructor(protected app: ApplicationService) {}\n\n public async boot(): Promise<void> {\n const { extendModelQueryBuilderWithRequest } = await import('../src/bindings/api_query_request.js');\n const { extendModelQueryBuilderWithSortsQuery } = await import('../src/bindings/sorts_query.js');\n const { extendModelQueryBuilderWithFiltersQuery } = await import('../src/bindings/filters_query.js');\n const { extendModelQueryBuilderWithIncludesQuery } = await import('../src/bindings/includes_query.js');\n const apiQueryConfigProvider = this.app.config.get<ApiQueryConfig>('apiquery');\n const config = await configProvider.resolve<ResolvedApiQueryConfig>(this.app, apiQueryConfigProvider);\n\n if (!config) {\n throw new RuntimeException(\n 'Invalid \"config/apiquery.ts\" file. Make sure you are using the \"defineConfig\" method',\n );\n }\n\n extendModelQueryBuilderWithRequest(ModelQueryBuilder);\n extendModelQueryBuilderWithSortsQuery(ModelQueryBuilder, config);\n extendModelQueryBuilderWithFiltersQuery(ModelQueryBuilder, config);\n extendModelQueryBuilderWithIncludesQuery(ModelQueryBuilder, config);\n }\n}\n\ndeclare module '@adonisjs/lucid/orm' {\n interface ModelQueryBuilder {\n withRequest(request: Request): this;\n $apiQueryBuilderRequest: ApiQueryBuilderRequest;\n\n allowedSorts(...sorts: (AllowedSort<LucidModel> | string)[]): this;\n allowedSorts(sorts: (AllowedSort<LucidModel> | string)[]): this;\n defaultSort(...sorts: (AllowedSort<LucidModel> | string)[]): this;\n defaultSort(sorts: (AllowedSort<LucidModel> | string)[]): this;\n\n allowedFilters(...filters: (AllowedFilter<LucidModel> | string)[]): this;\n allowedFilters(filters: (AllowedFilter<LucidModel> | string)[]): this;\n\n allowedIncludes(...includes: (Collection<AllowedInclude<LucidModel>> | string)[]): this;\n allowedIncludes(includes: (Collection<AllowedInclude<LucidModel>> | string)[]): this;\n }\n}\n\ndeclare module '@adonisjs/lucid/types/model' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface ModelQueryBuilderContract<Model extends LucidModel, Result = InstanceType<Model>> {\n withRequest(request: Request): this;\n\n allowedSorts(...sorts: (AllowedSort<Model> | HintedString<SortUnionKeyParams<Model>>)[]): this;\n allowedSorts(sorts: (AllowedSort<Model> | HintedString<SortUnionKeyParams<Model>>)[]): this;\n defaultSort(...sorts: (AllowedSort<Model> | HintedString<SortUnionKeyParams<Model>>)[]): this;\n defaultSort(sorts: (AllowedSort<Model> | HintedString<SortUnionKeyParams<Model>>)[]): this;\n\n allowedFilters(\n ...filters: (AllowedFilter<Model> | HintedString<ExtractKeys<ModelAttributes<InstanceType<Model>>>>)[]\n ): this;\n allowedFilters(\n filters: (AllowedFilter<Model> | HintedString<ExtractKeys<ModelAttributes<InstanceType<Model>>>>)[],\n ): this;\n\n allowedIncludes(\n ...includes: (Collection<AllowedInclude<Model>> | HintedString<ExtractModelRelations<InstanceType<Model>>>)[]\n ): this;\n allowedIncludes(\n includes: (Collection<AllowedInclude<Model>> | HintedString<ExtractModelRelations<InstanceType<Model>>>)[],\n ): this;\n }\n}\n"],"mappings":";AAAA,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AAGjC,SAAS,yBAAyB;AAgBlC,IAAqB,mBAArB,MAAsC;AAAA,EAC7B,YAAsB,KAAyB;AAAzB;AAAA,EAA0B;AAAA,EAEvD,MAAa,OAAsB;AACjC,UAAM,EAAE,mCAAmC,IAAI,MAAM,OAAO,kCAAsC;AAClG,UAAM,EAAE,sCAAsC,IAAI,MAAM,OAAO,4BAAgC;AAC/F,UAAM,EAAE,wCAAwC,IAAI,MAAM,OAAO,8BAAkC;AACnG,UAAM,EAAE,yCAAyC,IAAI,MAAM,OAAO,+BAAmC;AACrG,UAAM,yBAAyB,KAAK,IAAI,OAAO,IAAoB,UAAU;AAC7E,UAAM,SAAS,MAAM,eAAe,QAAgC,KAAK,KAAK,sBAAsB;AAEpG,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,uCAAmC,iBAAiB;AACpD,0CAAsC,mBAAmB,MAAM;AAC/D,4CAAwC,mBAAmB,MAAM;AACjE,6CAAyC,mBAAmB,MAAM;AAAA,EACpE;AACF;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AllowedSort,
3
3
  InvalidSortQuery
4
- } from "./chunk-HQN7LHVO.js";
4
+ } from "./chunk-3ITWUZL5.js";
5
5
  import "./chunk-XIRHVLVQ.js";
6
6
 
7
7
  // src/bindings/sorts_query.ts
@@ -60,4 +60,4 @@ var extendModelQueryBuilderWithSortsQuery = function(builder, config) {
60
60
  export {
61
61
  extendModelQueryBuilderWithSortsQuery
62
62
  };
63
- //# sourceMappingURL=sorts_query-LUETK3FD.js.map
63
+ //# sourceMappingURL=sorts_query-NJTC5UXX.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@eienjs/adonisjs-api-query",
3
3
  "description": "Easily build Lucid queries from API requests",
4
- "version": "1.0.1",
4
+ "version": "1.1.0",
5
5
  "type": "module",
6
6
  "module": "./build/index.js",
7
7
  "types": "./build/index.d.ts",
@@ -19,34 +19,34 @@
19
19
  "@adonisjs/assembler": "^7.8.2",
20
20
  "@adonisjs/core": "^6.17.2",
21
21
  "@adonisjs/lucid": "^21.6.0",
22
- "@commitlint/cli": "^19.8.0",
23
- "@commitlint/config-conventional": "^19.8.0",
24
- "@dpaskhin/unique": "^1.0.0",
22
+ "@commitlint/cli": "^19.8.1",
23
+ "@commitlint/config-conventional": "^19.8.1",
25
24
  "@japa/assert": "^4.0.1",
26
25
  "@japa/file-system": "^2.3.2",
27
26
  "@japa/runner": "^4.2.0",
28
- "@nodecfdi/eslint-config": "^3.0.0",
27
+ "@nodecfdi/eslint-config": "^3.2.1",
29
28
  "@nodecfdi/prettier-config": "^1.4.1",
30
29
  "@nodecfdi/tsconfig": "^1.7.4",
31
30
  "@poppinss/hooks": "^7.2.5",
32
- "@swc/core": "^1.11.8",
33
- "@types/luxon": "^3.4.2",
34
- "@types/node": "^22.13.9",
31
+ "@swc/core": "^1.11.24",
32
+ "@types/luxon": "^3.6.2",
33
+ "@types/node": "^22.15.17",
35
34
  "adonis-lucid-soft-deletes": "^2.1.0",
36
35
  "auto-changelog": "^2.5.0",
37
- "better-sqlite3": "^11.8.1",
36
+ "better-sqlite3": "^11.10.0",
38
37
  "c8": "^10.1.3",
39
38
  "del-cli": "^6.0.0",
40
- "eslint": "^9.22.0",
39
+ "enforce-unique": "^1.3.0",
40
+ "eslint": "^9.26.0",
41
41
  "husky": "^9.1.7",
42
42
  "is-in-ci": "^1.0.0",
43
- "luxon": "^3.5.0",
43
+ "luxon": "^3.6.1",
44
44
  "native-copyfiles": "^0.3.2",
45
45
  "np": "^10.2.0",
46
46
  "prettier": "^3.5.3",
47
47
  "ts-node-maintained": "^10.9.5",
48
48
  "tsup": "^8.4.0",
49
- "typescript": "~5.7.3"
49
+ "typescript": "^5.8.3"
50
50
  },
51
51
  "dependencies": {
52
52
  "collect.js": "^4.36.1"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/enums/filter_operator.ts","../src/allowed_filter.ts","../src/filters/filters_exact.ts","../src/filters/filters_partial.ts","../src/filters/filters_begin_with_strict.ts","../src/filters/filters_callback.ts","../src/filters/filters_ends_with_strict.ts","../src/filters/filters_operator.ts","../src/filters/filters_trashed.ts","../src/exceptions/invalid_filter_query.ts"],"sourcesContent":["export const FilterOperator = {\n Dynamic: '',\n Equal: '=',\n LessThan: '<',\n GreaterThan: '>',\n LessThanOrEqual: '<=',\n GreaterThanOrEqual: '>=',\n NotEqual: '<>',\n} as const;\n\nexport type FilterOperator = (typeof FilterOperator)[keyof typeof FilterOperator];\n","import { type LucidModel, type ModelAttributes, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { Collection } from 'collect.js';\nimport { ApiQueryBuilderRequest } from './api_query_builder_request.js';\nimport { type FilterOperator } from './enums/filter_operator.js';\nimport { FiltersBeginWithStrict } from './filters/filters_begin_with_strict.js';\nimport { FiltersCallback } from './filters/filters_callback.js';\nimport { FiltersEndsWithStrict } from './filters/filters_ends_with_strict.js';\nimport { FiltersExact } from './filters/filters_exact.js';\nimport { FiltersOperator } from './filters/filters_operator.js';\nimport { FiltersPartial } from './filters/filters_partial.js';\nimport { FiltersTrashed } from './filters/filters_trashed.js';\nimport { type ExtractKeys, type Filter } from './types.js';\n\nexport class AllowedFilter<Model extends LucidModel> {\n public static setFilterArrayValueDelimiter(delimiter?: string): void {\n if (delimiter) {\n ApiQueryBuilderRequest.setFilterArrayValueDelimiter(delimiter);\n }\n }\n\n public static exact<Model extends LucidModel>(\n name: string,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n addRelationConstraint = true,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, new FiltersExact<Model>(addRelationConstraint), internalName);\n }\n\n public static partial<Model extends LucidModel>(\n name: string,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n addRelationConstraint = true,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, new FiltersPartial<Model>(addRelationConstraint), internalName);\n }\n\n public static beginsWithStrict<Model extends LucidModel>(\n name: string,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n addRelationConstraint = true,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, new FiltersBeginWithStrict<Model>(addRelationConstraint), internalName);\n }\n\n public static endsWithStrict<Model extends LucidModel>(\n name: string,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n addRelationConstraint = true,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, new FiltersEndsWithStrict<Model>(addRelationConstraint), internalName);\n }\n\n public static callback<Model extends LucidModel>(\n name: string,\n callback: (query: ModelQueryBuilderContract<Model>, value: unknown, property: string) => void,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, new FiltersCallback<Model>(callback), internalName);\n }\n\n public static trashed<Model extends LucidModel>(\n name = 'trashed',\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n ): AllowedFilter<Model> {\n return new AllowedFilter<Model>(name, new FiltersTrashed<Model>(), internalName);\n }\n\n public static custom<Model extends LucidModel>(\n name: string,\n filterClass: Filter<Model>,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(name, filterClass, internalName);\n }\n\n public static operator<Model extends LucidModel>(\n name: string,\n filterOperator: FilterOperator,\n boolean: 'and' | 'or' = 'and',\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n addRelationConstraint = true,\n arrayValueDelimiter?: string,\n ): AllowedFilter<Model> {\n this.setFilterArrayValueDelimiter(arrayValueDelimiter);\n\n return new AllowedFilter<Model>(\n name,\n new FiltersOperator<Model>(addRelationConstraint, filterOperator, boolean),\n internalName,\n );\n }\n\n protected name: string;\n\n protected filterClass: Filter<Model>;\n\n protected internalName: string;\n\n protected ignored: Collection<unknown>;\n\n protected default: unknown;\n\n protected $hasDefault = false;\n\n protected nullable = false;\n\n public constructor(\n name: string,\n filterClass: Filter<Model>,\n internalName?: ExtractKeys<ModelAttributes<InstanceType<Model>>>,\n ) {\n this.name = name;\n this.filterClass = filterClass;\n this.ignored = new Collection();\n this.internalName = internalName ?? this.name;\n }\n\n public filter(query: ModelQueryBuilderContract<Model>, value: unknown): void {\n const valueToFilter = this.resolveValueForFiltering(value);\n if (!this.nullable && valueToFilter === null) {\n return;\n }\n\n this.filterClass.handle(query, valueToFilter, this.internalName);\n }\n\n public getFilterClass(): Filter<Model> {\n return this.filterClass;\n }\n\n public getName(): string {\n return this.name;\n }\n\n public isForFilter(filterName: string): boolean {\n return this.name === filterName;\n }\n\n public ignore(...values: unknown[]): this {\n this.ignored = this.ignored.merge(values).flatten();\n\n return this;\n }\n\n public getIgnored(): unknown[] {\n return this.ignored.toArray();\n }\n\n public getInternalName(): string {\n return this.internalName;\n }\n\n public setDefault(defaultValue: unknown): this {\n this.default = defaultValue;\n this.$hasDefault = true;\n\n if (defaultValue === null) {\n this.setNullable(true);\n }\n\n return this;\n }\n\n public getDefault(): unknown {\n return this.default;\n }\n\n public hasDefault(): boolean {\n return this.$hasDefault;\n }\n\n public setNullable(nullable = true): this {\n this.nullable = nullable;\n\n return this;\n }\n\n public unsetDefault(): this {\n this.$hasDefault = false;\n this.default = undefined;\n\n return this;\n }\n\n protected resolveValueForFiltering(value: unknown): StrictValuesWithoutRaw | null {\n if (Array.isArray(value)) {\n const remainingProperties = value.map((subValue) => this.resolveValueForFiltering(subValue));\n\n return remainingProperties.length === 0 ? null : (remainingProperties as StrictValuesWithoutRaw);\n }\n\n return this.ignored.contains(value) ? null : (value as StrictValuesWithoutRaw);\n }\n}\n","import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { type ExtractModelRelations } from '@adonisjs/lucid/types/relations';\nimport collect, { type Collection } from 'collect.js';\nimport { type Filter } from '../types.js';\n\nexport class FiltersExact<Model extends LucidModel> implements Filter<Model> {\n protected relationConstraints: string[] = [];\n\n public constructor(protected addRelationConstraint = true) {}\n\n public handle(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n value: StrictValuesWithoutRaw | null,\n property: string,\n ): void {\n if (this.addRelationConstraint && this.isRelationProperty(query, property)) {\n this.withRelationConstraint(query, value, property);\n\n return;\n }\n\n if (Array.isArray(value)) {\n void query.whereIn(this.qualifyColumn(query, property), value);\n\n return;\n }\n\n if (value === null) {\n void query.whereNull(this.qualifyColumn(query, property));\n\n return;\n }\n\n void query.where(this.qualifyColumn(query, property), '=', value);\n }\n\n protected qualifyColumn(query: ModelQueryBuilderContract<Model, InstanceType<Model>>, column: string): string {\n if (column.includes('.')) {\n return column;\n }\n\n return `${query.model.table}.${query.model.$getColumn(column)?.columnName}`;\n }\n\n protected isRelationProperty(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n property: string,\n ): boolean {\n if (!property.includes('.')) {\n return false;\n }\n\n if (this.relationConstraints.includes(property)) {\n return false;\n }\n\n const firstRelationShip = property.split('.')[0];\n\n return query.model.$relationsDefinitions.has(firstRelationShip);\n }\n\n protected withRelationConstraint(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n value: StrictValuesWithoutRaw | null,\n property: string,\n ): void {\n const [relation, relationProperty] = collect(property.split('.')).pipe((parts: Collection<string>) => [\n parts.except([parts.last()]).implode('.') as ExtractModelRelations<InstanceType<Model>>,\n parts.last(),\n ]);\n\n void query.whereHas(relation, (subQuery: ModelQueryBuilderContract<Model>) => {\n const columnName = this.qualifyColumn(query, relationProperty);\n this.relationConstraints.push(columnName);\n\n this.handle(subQuery, value, columnName);\n });\n }\n}\n","import { type DialectContract } from '@adonisjs/lucid/types/database';\nimport { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { type Filter } from '../types.js';\nimport { FiltersExact } from './filters_exact.js';\n\nexport class FiltersPartial<Model extends LucidModel> extends FiltersExact<Model> implements Filter<Model> {\n public handle(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n value: StrictValuesWithoutRaw | null,\n property: string,\n ): void {\n if (this.addRelationConstraint && this.isRelationProperty(query, property)) {\n this.withRelationConstraint(query, value, property);\n\n return;\n }\n\n if (Array.isArray(value)) {\n if (value.filter((item) => item.toString().length > 0).length === 0) {\n return;\n }\n\n void query.where((subQuery) => {\n for (const partialValue of value.filter((item) => item.toString().length > 0)) {\n const [innerSql, innerBindings] = this.getWhereRawParameters(\n partialValue,\n this.parsePropertyToColumn(subQuery, property),\n );\n void subQuery.orWhereRaw(innerSql, innerBindings);\n }\n });\n\n return;\n }\n\n const [sql, bindings] = this.getWhereRawParameters(value, this.parsePropertyToColumn(query, property));\n void query.whereRaw(sql, bindings);\n }\n\n protected parsePropertyToColumn(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n property: string,\n ): string {\n if (property.includes('.')) {\n return property;\n }\n\n return query.model.$getColumn(property)?.columnName ?? property;\n }\n\n protected getDatabaseDialect(query: ModelQueryBuilderContract<Model, InstanceType<Model>>): DialectContract['name'] {\n return query.client.dialect.name;\n }\n\n protected getWhereRawParameters(value: StrictValuesWithoutRaw | null, property: string): [string, string[]] {\n const resolvedValue = `${value}`.toLowerCase();\n\n return [`LOWER(??) LIKE ?`, [property, `%${FiltersPartial.escapeLike(resolvedValue)}%`]];\n }\n\n protected static escapeLike(value: string): string {\n return value\n .replaceAll('\\\\', '\\\\\\\\')\n .replaceAll('_', String.raw`\\\\_`)\n .replaceAll('%', String.raw`\\\\%`);\n }\n}\n","import { type LucidModel } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { type Filter } from '../types.js';\nimport { FiltersPartial } from './filters_partial.js';\n\nexport class FiltersBeginWithStrict<Model extends LucidModel> extends FiltersPartial<Model> implements Filter<Model> {\n protected getWhereRawParameters(value: StrictValuesWithoutRaw, property: string): [string, string[]] {\n return [`${property} LIKE ?`, [`${FiltersBeginWithStrict.escapeLike(value.toString())}%`]];\n }\n}\n","import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type Filter } from '../types.js';\n\nexport class FiltersCallback<Model extends LucidModel> implements Filter<Model> {\n public constructor(\n private callback: (query: ModelQueryBuilderContract<Model>, value: unknown, property: string) => void,\n ) {}\n\n public handle(query: ModelQueryBuilderContract<Model, InstanceType<Model>>, value: unknown, property: string): void {\n this.callback(query, value, property);\n }\n}\n","import { type LucidModel } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { type Filter } from '../types.js';\nimport { FiltersPartial } from './filters_partial.js';\n\nexport class FiltersEndsWithStrict<Model extends LucidModel> extends FiltersPartial<Model> implements Filter<Model> {\n protected getWhereRawParameters(value: StrictValuesWithoutRaw, property: string): [string, string[]] {\n return [`${property} LIKE ?`, [`%${FiltersEndsWithStrict.escapeLike(value.toString())}`]];\n }\n}\n","import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { FilterOperator } from '../enums/filter_operator.js';\nimport { type Filter } from '../types.js';\nimport { substrReplace } from '../utils/helpers.js';\nimport { FiltersExact } from './filters_exact.js';\n\nexport class FiltersOperator<Model extends LucidModel> extends FiltersExact<Model> implements Filter<Model> {\n public constructor(\n protected $addRelationConstraint: boolean,\n protected $filterOperator: FilterOperator,\n protected $boolean: 'and' | 'or',\n ) {\n super($addRelationConstraint);\n }\n\n public handle(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n value: StrictValuesWithoutRaw,\n property: string,\n ): void {\n let filterOperator = this.$filterOperator;\n\n if (this.$addRelationConstraint && this.isRelationProperty(query, property)) {\n this.withRelationConstraint(query, value, property);\n\n return;\n }\n\n if (Array.isArray(value)) {\n const items = value;\n\n void query.where((subQuery) => {\n for (const item of items) {\n this.handle(subQuery, item, property);\n }\n });\n\n return;\n }\n\n if (filterOperator === FilterOperator.Dynamic) {\n filterOperator = this.getDynamicFilterOperator(value.toString());\n value = this.removeDynamicFilterOperatorFromValue(value.toString(), filterOperator);\n }\n\n if (this.$boolean === 'and') {\n void query.where(this.qualifyColumn(query, property), filterOperator, value);\n\n return;\n }\n\n void query.orWhere(this.qualifyColumn(query, property), filterOperator, value);\n }\n\n protected getDynamicFilterOperator(value: string): FilterOperator {\n let filterOperator: FilterOperator = FilterOperator.Equal;\n\n for (const filterOperatorCase of Object.values(FilterOperator)) {\n if (value.startsWith(filterOperatorCase) && filterOperatorCase !== FilterOperator.Dynamic) {\n filterOperator = filterOperatorCase;\n }\n }\n\n return filterOperator;\n }\n\n protected removeDynamicFilterOperatorFromValue(value: string, filterOperator: FilterOperator): string {\n if (value.includes(filterOperator)) {\n value = substrReplace(value, '', 0, filterOperator.length);\n }\n\n return value;\n }\n}\n","import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type StrictValuesWithoutRaw } from '@adonisjs/lucid/types/querybuilder';\nimport { type Filter } from '../types.js';\n\nexport class FiltersTrashed<Model extends LucidModel> implements Filter<Model> {\n public handle(\n query: ModelQueryBuilderContract<Model, InstanceType<Model>>,\n value: StrictValuesWithoutRaw,\n _property: string,\n ): void {\n if (!('withTrashed' in query && 'onlyTrashed' in query)) {\n return;\n }\n\n const queryWithSoftDeletes = query as {\n withTrashed(): ModelQueryBuilderContract<Model>;\n onlyTrashed(): ModelQueryBuilderContract<Model>;\n };\n\n if (value === 'with') {\n void queryWithSoftDeletes.withTrashed();\n\n return;\n }\n\n if (value === 'only') {\n void queryWithSoftDeletes.onlyTrashed();\n }\n }\n}\n","import { ResponseStatus } from '@adonisjs/core/http';\nimport { InvalidQuery } from './invalid_query.js';\n\nexport class InvalidFilterQuery extends InvalidQuery {\n public constructor(\n public readonly unknownFilters: string[],\n public readonly allowedFilters: string[],\n ) {\n const notAllowed = unknownFilters.join(', ');\n const allowed = allowedFilters.join(', ');\n const message = `Requested filter(s) \\`${notAllowed}\\` are not allowed. Allowed filter(s) are \\`${allowed}\\``;\n\n super(message, { status: ResponseStatus.BadRequest });\n }\n\n public static filtersNotAllowed(unknownFilters: string[], allowedFilters: string[]): InvalidFilterQuery {\n return new InvalidFilterQuery(unknownFilters, allowedFilters);\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/allowed_include.ts","../src/includes/included_callback.ts","../src/includes/included_count.ts","../src/includes/included_relationship.ts","../src/exceptions/invalid_include_query.ts"],"sourcesContent":["import app from '@adonisjs/core/services/app';\nimport { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type ModelRelations } from '@adonisjs/lucid/types/relations';\nimport { Collection } from 'collect.js';\nimport { IncludedCallback } from './includes/included_callback.js';\nimport { IncludedCount } from './includes/included_count.js';\nimport { IncludedRelationship } from './includes/included_relationship.js';\nimport { type Include } from './types.js';\n\nexport class AllowedInclude<Model extends LucidModel> {\n public static relationship<ParentModel extends LucidModel>(\n name: string,\n internalName?: string,\n ): Collection<AllowedInclude<ParentModel>> {\n internalName = internalName ?? name;\n\n return IncludedRelationship.getIndividualRelationshipPathsFromInclude(internalName)\n .zip(IncludedRelationship.getIndividualRelationshipPathsFromInclude(name).toArray<string>())\n .reduce((includes, args) => {\n const [relationship, alias] = args;\n\n includes = includes!.push(\n new AllowedInclude<ParentModel>(alias, new IncludedRelationship<ParentModel>(), relationship),\n );\n\n if (!relationship.includes('.')) {\n const countSuffix = app.config.get<string>('apiquery.countSuffix', 'Count');\n for (const countAllowedInclude of AllowedInclude.count(\n `${alias}${countSuffix}`,\n `${relationship}${countSuffix}`,\n )) {\n includes = includes.push(countAllowedInclude);\n }\n }\n\n return includes;\n }, new Collection<AllowedInclude<ParentModel>>()) as Collection<AllowedInclude<ParentModel>>;\n }\n\n public static count<ParentModel extends LucidModel>(\n name: string,\n internalName?: string,\n ): Collection<AllowedInclude<ParentModel>> {\n return new Collection([new AllowedInclude<ParentModel>(name, new IncludedCount<ParentModel>(), internalName)]);\n }\n\n public static callback<ParentModel extends LucidModel, RelatedModel extends LucidModel>(\n name: string,\n callback: (\n query:\n | ModelRelations<RelatedModel, ParentModel>['builder']\n | ModelRelations<RelatedModel, ParentModel>['subQuery'],\n ) => void,\n internalName?: string,\n ): Collection<AllowedInclude<ParentModel>> {\n return new Collection([\n new AllowedInclude<ParentModel>(name, new IncludedCallback<ParentModel, RelatedModel>(callback), internalName),\n ]);\n }\n\n public static custom<ParentModel extends LucidModel>(\n name: string,\n includeClass: Include<ParentModel>,\n internalName?: string,\n ): Collection<AllowedInclude<ParentModel>> {\n return new Collection([new AllowedInclude<ParentModel>(name, includeClass, internalName)]);\n }\n\n protected internalName: string;\n\n protected name: string;\n\n protected includeClass: Include<Model>;\n\n public constructor(name: string, includeClass: Include<Model>, internalName?: string) {\n this.name = name;\n this.includeClass = includeClass;\n this.internalName = internalName ?? this.name;\n }\n\n public include(query: ModelQueryBuilderContract<Model>): void {\n // if ('getRequestedFieldsForRelatedTable' in this.includeClass) {\n // this.includeClass.getRequestedFieldsForRelatedTable = (relationship: string) => {\n // return query.getRequestedFieldsForRelatedTable(relationship);\n // };\n // }\n\n this.includeClass.handle(query, this.internalName);\n }\n\n public getName(): string {\n return this.name;\n }\n\n public isForInclude(includeName: string): boolean {\n return this.name === includeName;\n }\n}\n","import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type ExtractModelRelations, type ModelRelations } from '@adonisjs/lucid/types/relations';\nimport { type Include } from '../types.js';\n\nexport class IncludedCallback<ParentModel extends LucidModel, RelatedModel extends LucidModel>\n implements Include<ParentModel>\n{\n public constructor(\n public readonly callback: (\n query:\n | ModelRelations<RelatedModel, ParentModel>['builder']\n | ModelRelations<RelatedModel, ParentModel>['subQuery'],\n ) => void,\n ) {}\n\n public handle(query: ModelQueryBuilderContract<ParentModel, InstanceType<ParentModel>>, include: string): void {\n void query.preload(include as ExtractModelRelations<InstanceType<ParentModel>>, this.callback);\n }\n}\n","import app from '@adonisjs/core/services/app';\nimport { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type ExtractModelRelations } from '@adonisjs/lucid/types/relations';\nimport { type Include } from '../types.js';\n\nexport class IncludedCount<ParentModel extends LucidModel> implements Include<ParentModel> {\n public handle(query: ModelQueryBuilderContract<ParentModel, InstanceType<ParentModel>>, count: string): void {\n const suffix = app.config.get<string>('apiquery.countSuffix', 'Count');\n const relation = (count.endsWith(suffix) ? count.slice(0, -suffix.length) : count) as ExtractModelRelations<\n InstanceType<ParentModel>\n >;\n\n void query.withCount(relation);\n }\n}\n","import { type LucidModel, type ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';\nimport { type ExtractModelRelations, type ModelRelations } from '@adonisjs/lucid/types/relations';\nimport { Collection } from 'collect.js';\nimport { type Include } from '../types.js';\n\nexport class IncludedRelationship<ParentModel extends LucidModel> implements Include<ParentModel> {\n public static getIndividualRelationshipPathsFromInclude(include: string): Collection<string> {\n const originalInclude = new Collection(include.split('.'));\n\n return originalInclude.reduce((includes, relationship) => {\n const includesArray = includes ?? new Collection<string>();\n\n if (includesArray.isEmpty()) {\n return includesArray.push(relationship);\n }\n\n return includesArray.push(`${includes!.last()}.${relationship}`);\n }, new Collection<string>()) as Collection<string>;\n }\n\n public getRequestedFieldsForRelatedTable?: (relationship: string) => string[];\n\n public handle(query: ModelQueryBuilderContract<ParentModel, InstanceType<ParentModel>>, relationship: string): void {\n const relatedTables = relationship.split('.');\n\n if (relatedTables.length === 0) {\n return;\n }\n\n const [relation, ...rest] = relatedTables;\n\n if (!query.model.$hasRelation(relation)) {\n return;\n }\n\n void query.preload(relation as ExtractModelRelations<InstanceType<ParentModel>>, (subQuery) => {\n if (this.getRequestedFieldsForRelatedTable !== undefined) {\n const fields = this.getRequestedFieldsForRelatedTable(relation);\n if (fields.length > 0) {\n void subQuery.select(fields);\n }\n }\n\n this.buildNestedQuery(rest, subQuery, relation);\n });\n }\n\n private buildNestedQuery<SubParentModel extends LucidModel, SubRelatedModel extends LucidModel>(\n relatedTables: string[],\n subQuery:\n | ModelRelations<SubRelatedModel, SubParentModel>['builder']\n | ModelRelations<SubRelatedModel, SubParentModel>['subQuery'],\n parent = '',\n ): void {\n if (relatedTables.length === 0) {\n return;\n }\n\n const [relation, ...rest] = relatedTables;\n\n if (!subQuery.model.$hasRelation(relation)) {\n return;\n }\n\n void subQuery.preload(relation as ExtractModelRelations<InstanceType<SubRelatedModel>>, (nestedQuery) => {\n const fullRelationName = parent === '' ? relation : `${parent}.${relation}`;\n if (this.getRequestedFieldsForRelatedTable !== undefined) {\n const fields = this.getRequestedFieldsForRelatedTable(fullRelationName);\n if (fields.length > 0) {\n void nestedQuery.select(fields);\n }\n }\n\n this.buildNestedQuery(rest, nestedQuery, fullRelationName);\n });\n }\n}\n","import { ResponseStatus } from '@adonisjs/core/http';\nimport { InvalidQuery } from './invalid_query.js';\n\nexport class InvalidIncludeQuery extends InvalidQuery {\n public constructor(\n public readonly unknownIncludes: string[],\n public readonly allowedIncludes: string[],\n ) {\n const notAllowed = unknownIncludes.join(', ');\n let message = `Requested include(s) \\`${notAllowed}\\` are not allowed. `;\n\n if (allowedIncludes.length > 0) {\n const allowed = allowedIncludes.join(', ');\n message = `${message}Allowed include(s) are \\`${allowed}\\``;\n } else {\n message = `${message}There are no allowed includes`;\n }\n\n super(message, { status: ResponseStatus.BadRequest });\n }\n\n public static includesNotAllowed(unknownIncludes: string[], allowedIncludes: string[]): InvalidIncludeQuery {\n return new InvalidIncludeQuery(unknownIncludes, allowedIncludes);\n }\n}\n"],"mappings":"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","names":["app","Collection","app","Collection"]}