ng-qubee 3.0.0 → 3.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"ng-qubee.mjs","sources":["../../../src/lib/errors/key-not-found.error.ts","../../../src/lib/models/paginated-collection.ts","../../../src/lib/enums/driver.enum.ts","../../../src/lib/models/response-options.ts","../../../src/lib/errors/unsupported-field-selection.error.ts","../../../src/lib/errors/unsupported-filter.error.ts","../../../src/lib/errors/unsupported-filter-operator.error.ts","../../../src/lib/errors/unsupported-includes.error.ts","../../../src/lib/errors/unsupported-search.error.ts","../../../src/lib/errors/unsupported-select.error.ts","../../../src/lib/errors/unsupported-sort.error.ts","../../../src/lib/models/query-builder-options.ts","../../../src/lib/errors/invalid-limit.error.ts","../../../src/lib/errors/invalid-resource-name.error.ts","../../../src/lib/errors/invalid-page-number.error.ts","../../../src/lib/services/nest.service.ts","../../../src/lib/services/ng-qubee.service.ts","../../../src/lib/services/pagination.service.ts","../../../src/lib/strategies/laravel-request.strategy.ts","../../../src/lib/strategies/laravel-response.strategy.ts","../../../src/lib/enums/sort.enum.ts","../../../src/lib/strategies/nestjs-request.strategy.ts","../../../src/lib/strategies/nestjs-response.strategy.ts","../../../src/lib/errors/unselectable-model.error.ts","../../../src/lib/strategies/spatie-request.strategy.ts","../../../src/lib/strategies/spatie-response.strategy.ts","../../../src/lib/ng-qubee.module.ts","../../../src/lib/provide-ngqubee.ts","../../../src/lib/enums/filter-operator.enum.ts","../../../src/public-api.ts","../../../src/ng-qubee.ts"],"sourcesContent":["export class KeyNotFoundError extends Error {\n constructor(key: string) {\n super(`Cannot find the key ${key} inside the collection item: does it really exists?`);\n }\n}","import { KeyNotFoundError } from \"../errors/key-not-found.error\";\nimport { INormalized } from \"../interfaces/normalized.interface\";\nimport { IPaginatedObject } from \"../interfaces/paginated-object.interface\";\n\nexport class PaginatedCollection<T extends IPaginatedObject> {\n constructor(\n public data: T[],\n public readonly page: number,\n public readonly from?: number,\n public readonly to?: number,\n public readonly total?: number,\n public readonly perPage?: number,\n public readonly prevPageUrl?: string,\n public readonly nextPageUrl?: string,\n public readonly lastPage?: number,\n public readonly firstPageUrl?: string,\n public readonly lastPageUrl?: string\n ) {\n //\n }\n\n /**\n * Normalize the collection to a paginated list of ids for state-managed applications.\n * \n * This method returns a single key object, where the key is the page number and the associated value is\n * an array of ids. Each id is fetched by the collection items, looking up for the \"id\" key. If an id is supplied\n * to this method, it will be used instead of the default \"id\" key.\n * \n * Please note that in case the key doesn't exist in the collection's item, a KeyNotFoundError is thrown\n * \n * @param k A key to use instead of the default \"id\": this will be searched inside each element of the collection\n * @returns []\n * @throws KeyNotFoundItem\n */\n public normalize(id?: string): INormalized {\n return {\n [this.page]: this.data.reduce((ids: number[], value: T) => {\n if (id && id in value) {\n ids.push(value[id]);\n } else if (value.hasOwnProperty('id')) {\n ids.push(value['id']);\n } else {\n throw new KeyNotFoundError(id || 'id');\n }\n\n return ids;\n }, [])\n }\n }\n}","/**\n * Enum representing the available pagination driver types\n *\n * Each driver encapsulates the full format knowledge for both\n * request building (URI generation) and response parsing.\n */\nexport enum DriverEnum {\n LARAVEL = 'laravel',\n NESTJS = 'nestjs',\n SPATIE = 'spatie'\n}\n","import { IPaginationConfig } from '../interfaces/pagination-config.interface';\n\n/**\n * Resolved response field key names with defaults applied\n *\n * Maps logical pagination concepts to the actual key names\n * used in the API response. Unset values fall back to Laravel defaults.\n *\n * For NestJS responses, use dot-notation paths:\n * ```typescript\n * new ResponseOptions({\n * currentPage: 'meta.currentPage',\n * total: 'meta.totalItems'\n * });\n * ```\n */\nexport class ResponseOptions {\n public readonly currentPage: string;\n public readonly data: string;\n public readonly firstPageUrl: string;\n public readonly from: string;\n public readonly lastPage: string;\n public readonly lastPageUrl: string;\n public readonly nextPageUrl: string;\n public readonly path: string;\n public readonly perPage: string;\n public readonly prevPageUrl: string;\n public readonly to: string;\n public readonly total: string;\n\n constructor(options: IPaginationConfig) {\n this.currentPage = options.currentPage || 'current_page';\n this.data = options.data || 'data';\n this.firstPageUrl = options.firstPageUrl || 'first_page_url';\n this.from = options.from || 'from';\n this.lastPage = options.lastPage || 'last_page';\n this.lastPageUrl = options.lastPageUrl || 'last_page_url';\n this.nextPageUrl = options.nextPageUrl || 'next_page_url';\n this.path = options.path || 'path';\n this.perPage = options.perPage || 'per_page';\n this.prevPageUrl = options.prevPageUrl || 'prev_page_url';\n this.to = options.to || 'to';\n this.total = options.total || 'total';\n }\n}\n\n/**\n * Pre-configured ResponseOptions for the NestJS driver\n *\n * Uses dot-notation paths to access nested values in the NestJS response format.\n */\nexport class NestjsResponseOptions extends ResponseOptions {\n constructor(options: IPaginationConfig) {\n super({\n currentPage: options.currentPage || 'meta.currentPage',\n data: options.data || 'data',\n firstPageUrl: options.firstPageUrl || 'links.first',\n from: options.from || 'meta.from',\n lastPage: options.lastPage || 'meta.totalPages',\n lastPageUrl: options.lastPageUrl || 'links.last',\n nextPageUrl: options.nextPageUrl || 'links.next',\n path: options.path || 'path',\n perPage: options.perPage || 'meta.itemsPerPage',\n prevPageUrl: options.prevPageUrl || 'links.previous',\n to: options.to || 'meta.to',\n total: options.total || 'meta.totalItems'\n });\n }\n}\n","/**\n * Error thrown when per-model field selection is attempted with a driver that does not support it\n *\n * Per-model field selection is only supported by the Spatie driver.\n * Use `addSelect()` for NestJS flat field selection.\n */\nexport class UnsupportedFieldSelectionError extends Error {\n constructor() {\n super('Per-model field selection is only supported by the Spatie driver. Use addSelect() for NestJS.');\n this.name = 'UnsupportedFieldSelectionError';\n }\n}\n","/**\n * Error thrown when filters are attempted with a driver that does not support them\n *\n * Filters are only supported by the Spatie and NestJS drivers.\n */\nexport class UnsupportedFilterError extends Error {\n constructor() {\n super('Filters are only supported by the Spatie and NestJS drivers.');\n this.name = 'UnsupportedFilterError';\n }\n}\n","/**\n * Error thrown when filter operators are attempted with a driver that does not support them\n *\n * Filter operators are only supported by the NestJS driver.\n * Use `addFilter()` for Spatie implicit equality filters.\n */\nexport class UnsupportedFilterOperatorError extends Error {\n constructor() {\n super('Filter operators are only supported by the NestJS driver. Use addFilter() for Spatie.');\n this.name = 'UnsupportedFilterOperatorError';\n }\n}\n","/**\n * Error thrown when includes are attempted with a driver that does not support them\n *\n * Includes are only supported by the Spatie driver.\n */\nexport class UnsupportedIncludesError extends Error {\n constructor() {\n super('Includes are only supported by the Spatie driver.');\n this.name = 'UnsupportedIncludesError';\n }\n}\n","/**\n * Error thrown when search is attempted with a driver that does not support it\n *\n * Search is only supported by the NestJS driver.\n */\nexport class UnsupportedSearchError extends Error {\n constructor() {\n super('Search is only supported by the NestJS driver.');\n this.name = 'UnsupportedSearchError';\n }\n}\n","/**\n * Error thrown when flat field selection is attempted with a driver that does not support it\n *\n * Flat field selection is only supported by the NestJS driver.\n * Use `addFields()` for Spatie per-model field selection.\n */\nexport class UnsupportedSelectError extends Error {\n constructor() {\n super('Flat field selection is only supported by the NestJS driver. Use addFields() for Spatie.');\n this.name = 'UnsupportedSelectError';\n }\n}\n","/**\n * Error thrown when sorts are attempted with a driver that does not support them\n *\n * Sorts are only supported by the Spatie and NestJS drivers.\n */\nexport class UnsupportedSortError extends Error {\n constructor() {\n super('Sorts are only supported by the Spatie and NestJS drivers.');\n this.name = 'UnsupportedSortError';\n }\n}\n","import { IQueryBuilderConfig } from '../interfaces/query-builder-config.interface';\n\n/**\n * Resolved query parameter key names with defaults applied\n *\n * Maps logical query concepts to the actual query parameter names\n * used in the generated URI. Unset values fall back to defaults.\n */\nexport class QueryBuilderOptions {\n public readonly appends: string;\n public readonly fields: string;\n public readonly filters: string;\n public readonly includes: string;\n public readonly limit: string;\n public readonly page: string;\n public readonly search: string;\n public readonly select: string;\n public readonly sort: string;\n public readonly sortBy: string;\n\n constructor(options: IQueryBuilderConfig) {\n this.appends = options.appends || 'append';\n this.fields = options.fields || 'fields';\n this.filters = options.filters || 'filter';\n this.includes = options.includes || 'include';\n this.limit = options.limit || 'limit';\n this.page = options.page || 'page';\n this.search = options.search || 'search';\n this.select = options.select || 'select';\n this.sort = options.sort || 'sort';\n this.sortBy = options.sortBy || 'sortBy';\n }\n}\n","export class InvalidLimitError extends Error {\n constructor(limit: number) {\n super(\n `Invalid limit value: Limit must be a positive integer greater than 0. Received: ${limit}`\n );\n this.name = 'InvalidLimitError';\n }\n}\n","/**\n * Error thrown when an invalid resource name is provided\n *\n * Resource name must be a non-empty string.\n */\nexport class InvalidResourceNameError extends Error {\n constructor(resource: string | null | undefined) {\n super(\n `Invalid resource name: Resource name must be a non-empty string. Received: ${JSON.stringify(resource)}`\n );\n this.name = 'InvalidResourceNameError';\n }\n}\n","export class InvalidPageNumberError extends Error {\n constructor(page: number) {\n super(\n `Invalid page number: Page must be a positive integer greater than 0. Received: ${page}`\n );\n this.name = 'InvalidPageNumberError';\n }\n}\n","import { Injectable, Signal, WritableSignal, computed, signal } from '@angular/core';\n\nimport { InvalidLimitError } from '../errors/invalid-limit.error';\nimport { InvalidResourceNameError } from '../errors/invalid-resource-name.error';\nimport { InvalidPageNumberError } from '../errors/invalid-page-number.error';\nimport { IFields } from '../interfaces/fields.interface';\nimport { IFilters } from '../interfaces/filters.interface';\nimport { IOperatorFilter } from '../interfaces/operator-filter.interface';\nimport { IQueryBuilderState } from '../interfaces/query-builder-state.interface';\nimport { ISort } from '../interfaces/sort.interface';\n\nconst INITIAL_STATE: IQueryBuilderState = {\n baseUrl: '',\n fields: {},\n filters: {},\n includes: [],\n limit: 15,\n operatorFilters: [],\n page: 1,\n resource: '',\n search: '',\n select: [],\n sorts: []\n};\n\n@Injectable()\nexport class NestService {\n\n /**\n * Private writable signal that holds the Query Builder state\n *\n * @type {IQueryBuilderState}\n */\n private _nest: WritableSignal<IQueryBuilderState> = signal(this._clone(INITIAL_STATE));\n\n /**\n * A computed signal that makes readonly the writable signal _nest\n *\n * @type {Signal<IQueryBuilderState>}\n */\n public nest: Signal<IQueryBuilderState> = computed(() => this._clone(this._nest()));\n\n constructor() {\n // Nothing to see here\n }\n\n /**\n * Set the base URL for the API\n *\n * @param {string} baseUrl - The base URL to prepend to generated URIs\n * @example\n * service.baseUrl = 'https://api.example.com';\n */\n set baseUrl(baseUrl: string) {\n this._nest.update(nest => ({\n ...nest,\n baseUrl\n }));\n }\n\n /**\n * Set the limit for paginated results\n * Must be a positive integer greater than 0\n *\n * @param {number} limit - The number of items per page\n * @throws {InvalidLimitError} If limit is not a positive integer\n * @example\n * service.limit = 25;\n */\n set limit(limit: number) {\n this._validateLimit(limit);\n this._nest.update(nest => ({\n ...nest,\n limit\n }));\n }\n\n /**\n * Set the page number for pagination\n * Must be a positive integer greater than 0\n *\n * @param {number} page - The page number to fetch\n * @throws {InvalidPageNumberError} If page is not a positive integer\n * @example\n * service.page = 2;\n */\n set page(page: number) {\n this._validatePageNumber(page);\n this._nest.update(nest => ({\n ...nest,\n page\n }));\n }\n\n /**\n * Set the resource name for the query\n * Must be a non-empty string\n *\n * @param {string} resource - The API resource name (e.g., 'users', 'posts')\n * @throws {InvalidResourceNameError} If resource is not a non-empty string\n * @example\n * service.resource = 'users';\n */\n set resource(resource: string) {\n this._validateResourceName(resource);\n this._nest.update(nest => ({\n ...nest,\n resource\n }));\n }\n\n private _clone<T>(obj: T): T {\n return JSON.parse( JSON.stringify(obj) );\n }\n\n /**\n * Validates that the limit is a positive integer\n *\n * @param {number} limit - The limit value to validate\n * @throws {InvalidLimitError} If limit is not a positive integer\n * @private\n */\n private _validateLimit(limit: number): void {\n if (!Number.isInteger(limit) || limit < 1) {\n throw new InvalidLimitError(limit);\n }\n }\n\n /**\n * Validates that the page number is a positive integer\n *\n * @param {number} page - The page number to validate\n * @throws {InvalidPageNumberError} If page is not a positive integer\n * @private\n */\n private _validatePageNumber(page: number): void {\n if (!Number.isInteger(page) || page < 1) {\n throw new InvalidPageNumberError(page);\n }\n }\n\n /**\n * Validates that the resource name is a non-empty string\n *\n * @param {string} resource - The resource name to validate\n * @throws {InvalidResourceNameError} If resource is not a non-empty string\n * @private\n */\n private _validateResourceName(resource: string): void {\n if (!resource || typeof resource !== 'string' || resource.trim().length === 0) {\n throw new InvalidResourceNameError(resource);\n }\n }\n\n /**\n * Add selectable fields for the given model to the request\n * Automatically prevents duplicate fields for each model\n *\n * @param {IFields} fields - Object mapping model names to arrays of field names\n * @return {void}\n * @example\n * service.addFields({ users: ['id', 'email', 'username'] });\n * service.addFields({ posts: ['title', 'content'] });\n */\n public addFields(fields: IFields): void {\n this._nest.update(nest => {\n const mergedFields = { ...nest.fields };\n\n Object.keys(fields).forEach(model => {\n const existingFields = mergedFields[model] || [];\n const newFields = fields[model];\n\n // Use Set to prevent duplicates\n const uniqueFields = Array.from(new Set([...existingFields, ...newFields]));\n mergedFields[model] = uniqueFields;\n });\n\n return {\n ...nest,\n fields: mergedFields\n };\n });\n }\n\n /**\n * Add filters to the request\n * Automatically prevents duplicate filter values for each filter key\n *\n * @param {IFilters} filters - Object mapping filter keys to arrays of values\n * @return {void}\n * @example\n * service.addFilters({ id: [1, 2, 3] });\n * service.addFilters({ status: ['active', 'pending'] });\n */\n public addFilters(filters: IFilters): void {\n this._nest.update(nest => {\n const mergedFilters = { ...nest.filters };\n\n Object.keys(filters).forEach(key => {\n const existingValues = mergedFilters[key] || [];\n const newValues = filters[key];\n\n // Use Set to prevent duplicates\n const uniqueValues = Array.from(new Set([...existingValues, ...newValues]));\n mergedFilters[key] = uniqueValues;\n });\n\n return {\n ...nest,\n filters: mergedFilters\n };\n });\n }\n\n /**\n * Add resources to include with the request\n * Automatically prevents duplicate includes\n *\n * @param {string[]} includes - Array of resource names to include in the response\n * @return {void}\n * @example\n * service.addIncludes(['profile', 'posts']);\n * service.addIncludes(['comments']);\n */\n public addIncludes(includes: string[]): void {\n this._nest.update(nest => {\n // Use Set to prevent duplicates\n const uniqueIncludes = Array.from(new Set([...nest.includes, ...includes]));\n\n return {\n ...nest,\n includes: uniqueIncludes\n };\n });\n }\n\n /**\n * Add filters with explicit operators (NestJS only)\n * Automatically prevents duplicate operator filters for the same field + operator combination\n *\n * @param {IOperatorFilter[]} filters - Array of operator filter configurations\n * @return {void}\n * @example\n * import { FilterOperatorEnum } from 'ng-qubee';\n * service.addOperatorFilters([{ field: 'age', operator: FilterOperatorEnum.GTE, values: [18] }]);\n */\n public addOperatorFilters(filters: IOperatorFilter[]): void {\n this._nest.update(nest => {\n const merged = [...nest.operatorFilters];\n\n filters.forEach(newFilter => {\n const existingIdx = merged.findIndex(\n f => f.field === newFilter.field && f.operator === newFilter.operator\n );\n\n if (existingIdx > -1) {\n const existingValues = merged[existingIdx].values;\n merged[existingIdx] = {\n ...merged[existingIdx],\n values: Array.from(new Set([...existingValues, ...newFilter.values]))\n };\n } else {\n merged.push({ ...newFilter });\n }\n });\n\n return {\n ...nest,\n operatorFilters: merged\n };\n });\n }\n\n /**\n * Add flat field selection columns (NestJS only)\n * Automatically prevents duplicate select fields\n *\n * @param {string[]} fields - Array of column names to select\n * @return {void}\n * @example\n * service.addSelect(['id', 'name', 'email']);\n */\n public addSelect(fields: string[]): void {\n this._nest.update(nest => {\n const uniqueSelect = Array.from(new Set([...nest.select, ...fields]));\n\n return {\n ...nest,\n select: uniqueSelect\n };\n });\n }\n\n /**\n * Add a field that should be used for sorting data\n *\n * @param {ISort} sort - Sort configuration with field name and order (ASC/DESC)\n * @return {void}\n * @example\n * import { SortEnum } from 'ng-qubee';\n * service.addSort({ field: 'created_at', order: SortEnum.DESC });\n * service.addSort({ field: 'name', order: SortEnum.ASC });\n */\n public addSort(sort: ISort): void {\n this._nest.update(nest => ({\n ...nest,\n sorts: [...nest.sorts, sort]\n }));\n }\n\n /**\n * Remove fields for the given model\n * Uses deep cloning to prevent mutations to the original state\n *\n * @param {IFields} fields - Object mapping model names to arrays of field names to remove\n * @return {void}\n * @example\n * service.deleteFields({ users: ['email'] });\n * service.deleteFields({ posts: ['content', 'body'] });\n */\n public deleteFields(fields: IFields): void {\n // Deep clone the fields object to prevent mutations\n const f = this._clone(this._nest().fields);\n\n Object.keys(fields).forEach(k => {\n if (!(k in f)) {\n return;\n }\n\n f[k] = f[k].filter(v => !fields[k].includes(v));\n });\n\n this._nest.update(nest => ({\n ...nest,\n fields: f\n }));\n }\n\n /**\n * Remove filters from the request\n * Uses deep cloning to prevent mutations to the original state\n *\n * @param {...string[]} filters - Filter keys to remove\n * @return {void}\n * @example\n * service.deleteFilters('id');\n * service.deleteFilters('status', 'type');\n */\n public deleteFilters(...filters: string[]): void {\n // Deep clone the filters object to prevent mutations\n const f = this._clone(this._nest().filters);\n\n filters.forEach(k => delete f[k]);\n\n this._nest.update(nest => ({\n ...nest,\n filters: f\n }));\n }\n\n /**\n * Remove includes from the request\n *\n * @param {...string[]} includes - Include names to remove\n * @return {void}\n * @example\n * service.deleteIncludes('profile');\n * service.deleteIncludes('posts', 'comments');\n */\n public deleteIncludes(...includes: string[]): void {\n this._nest.update(nest => ({\n ...nest,\n includes: nest.includes.filter(v => !includes.includes(v))\n }));\n }\n\n /**\n * Remove operator filters by field name (NestJS only)\n *\n * @param {...string[]} fields - Field names of operator filters to remove\n * @return {void}\n * @example\n * service.deleteOperatorFilters('age');\n * service.deleteOperatorFilters('price', 'quantity');\n */\n public deleteOperatorFilters(...fields: string[]): void {\n this._nest.update(nest => ({\n ...nest,\n operatorFilters: nest.operatorFilters.filter(f => !fields.includes(f.field))\n }));\n }\n\n /**\n * Remove the search term from the state (NestJS only)\n *\n * @return {void}\n * @example\n * service.deleteSearch();\n */\n public deleteSearch(): void {\n this._nest.update(nest => ({\n ...nest,\n search: ''\n }));\n }\n\n /**\n * Remove flat field selections from the state (NestJS only)\n *\n * @param {...string[]} fields - Field names to remove from selection\n * @return {void}\n * @example\n * service.deleteSelect('email');\n * service.deleteSelect('name', 'email');\n */\n public deleteSelect(...fields: string[]): void {\n this._nest.update(nest => ({\n ...nest,\n select: nest.select.filter(f => !fields.includes(f))\n }));\n }\n\n /**\n * Remove sorts from the request by field name\n *\n * @param {...string[]} sorts - Field names of sorts to remove\n * @return {void}\n * @example\n * service.deleteSorts('created_at');\n * service.deleteSorts('name', 'created_at');\n */\n public deleteSorts(...sorts: string[]): void {\n const s = [...this._nest().sorts];\n\n sorts.forEach(field => {\n const p = s.findIndex(sort => sort.field === field);\n\n if (p > -1) {\n s.splice(p, 1);\n }\n });\n\n this._nest.update(nest => ({\n ...nest,\n sorts: s\n }));\n }\n\n /**\n * Set the full-text search term (NestJS only)\n *\n * @param {string} search - The search term\n * @return {void}\n * @example\n * service.setSearch('john doe');\n */\n public setSearch(search: string): void {\n this._nest.update(nest => ({\n ...nest,\n search\n }));\n }\n\n /**\n * Reset the query builder state to initial values\n * Clears all fields, filters, includes, sorts, and resets pagination\n *\n * @return {void}\n * @example\n * service.reset();\n */\n public reset(): void {\n this._nest.update(_ => this._clone(INITIAL_STATE));\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { BehaviorSubject, Observable, filter, throwError } from 'rxjs';\n\n// Enums\nimport { DriverEnum } from '../enums/driver.enum';\nimport { FilterOperatorEnum } from '../enums/filter-operator.enum';\nimport { SortEnum } from '../enums/sort.enum';\n\n// Errors\nimport { UnsupportedFieldSelectionError } from '../errors/unsupported-field-selection.error';\nimport { UnsupportedFilterError } from '../errors/unsupported-filter.error';\nimport { UnsupportedFilterOperatorError } from '../errors/unsupported-filter-operator.error';\nimport { UnsupportedIncludesError } from '../errors/unsupported-includes.error';\nimport { UnsupportedSearchError } from '../errors/unsupported-search.error';\nimport { UnsupportedSelectError } from '../errors/unsupported-select.error';\nimport { UnsupportedSortError } from '../errors/unsupported-sort.error';\n\n// Interfaces\nimport { IFields } from '../interfaces/fields.interface';\nimport { IQueryBuilderConfig } from '../interfaces/query-builder-config.interface';\nimport { IRequestStrategy } from '../interfaces/request-strategy.interface';\n\n// Models\nimport { QueryBuilderOptions } from '../models/query-builder-options';\n\n// Services\nimport { NestService } from './nest.service';\n\n@Injectable()\nexport class NgQubeeService {\n\n /**\n * The active pagination driver\n */\n private _driver: DriverEnum;\n\n /**\n * Resolved query parameter key name options\n */\n private _options: QueryBuilderOptions;\n\n /**\n * The request strategy that builds URIs for the active driver\n */\n private _requestStrategy: IRequestStrategy;\n\n /**\n * Internal BehaviorSubject that holds the latest generated URI\n */\n private _uri$: BehaviorSubject<string> = new BehaviorSubject('');\n\n /**\n * Observable that emits non-empty generated URIs\n */\n public uri$: Observable<string> = this._uri$.asObservable().pipe(\n filter(uri => !!uri)\n );\n\n constructor(\n private _nestService: NestService,\n @Inject('REQUEST_STRATEGY') requestStrategy: IRequestStrategy,\n @Inject('DRIVER') driver: DriverEnum,\n @Inject('QUERY_PARAMS_CONFIG') @Optional() options: IQueryBuilderConfig = {}\n ) {\n this._driver = driver;\n this._options = new QueryBuilderOptions(options);\n this._requestStrategy = requestStrategy;\n }\n\n /**\n * Assert that the active driver is one of the allowed drivers\n *\n * @param allowed - The allowed drivers\n * @param error - The error to throw if the driver is not allowed\n * @throws The provided error if the active driver is not in the allowed list\n */\n private _assertDriver(allowed: DriverEnum[], error: Error): void {\n if (!allowed.includes(this._driver)) {\n throw error;\n }\n }\n\n /**\n * Add fields to the select statement for the given model (Spatie only)\n *\n * @param model - Model that holds the fields\n * @param fields - Fields to select\n * @returns {this}\n * @throws {UnsupportedFieldSelectionError} If the active driver does not support per-model field selection\n */\n public addFields(model: string, fields: string[]): this {\n this._assertDriver([DriverEnum.SPATIE], new UnsupportedFieldSelectionError());\n\n if (!fields.length) {\n return this;\n }\n\n this._nestService.addFields({ [model]: fields });\n\n return this;\n }\n\n /**\n * Add a filter with the given value(s) (Spatie and NestJS only)\n *\n * Produces: `filter[field]=value` (Spatie) or `filter.field=value` (NestJS)\n *\n * @param {string} field - Name of the field to filter\n * @param {(string | number | boolean)[]} values - The needle(s)\n * @returns {this}\n * @throws {UnsupportedFilterError} If the active driver does not support filters\n */\n public addFilter(field: string, ...values: (string | number | boolean)[]): this {\n this._assertDriver([DriverEnum.SPATIE, DriverEnum.NESTJS], new UnsupportedFilterError());\n\n if (!values.length) {\n return this;\n }\n\n this._nestService.addFilters({\n [field]: values\n });\n\n return this;\n }\n\n /**\n * Add a filter with an explicit operator (NestJS only)\n *\n * Produces: `filter.field=$operator:value`\n *\n * @param {string} field - Name of the field to filter\n * @param {FilterOperatorEnum} operator - The filter operator to apply\n * @param {(string | number | boolean)[]} values - The value(s) for the filter\n * @returns {this}\n * @throws {UnsupportedFilterOperatorError} If the active driver does not support filter operators\n */\n public addFilterOperator(field: string, operator: FilterOperatorEnum, ...values: (string | number | boolean)[]): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedFilterOperatorError());\n\n if (!values.length) {\n return this;\n }\n\n this._nestService.addOperatorFilters([{ field, operator, values }]);\n\n return this;\n }\n\n /**\n * Add related entities to include in the request (Spatie only)\n *\n * @param {string[]} models - Models to include\n * @returns {this}\n * @throws {UnsupportedIncludesError} If the active driver does not support includes\n */\n public addIncludes(...models: string[]): this {\n this._assertDriver([DriverEnum.SPATIE], new UnsupportedIncludesError());\n\n if (!models.length) {\n return this;\n }\n\n this._nestService.addIncludes(models);\n\n return this;\n }\n\n /**\n * Add flat field selection (NestJS only)\n *\n * Produces: `select=col1,col2`\n *\n * @param {string[]} fields - Fields to select\n * @returns {this}\n * @throws {UnsupportedSelectError} If the active driver does not support flat field selection\n */\n public addSelect(...fields: string[]): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedSelectError());\n\n if (!fields.length) {\n return this;\n }\n\n this._nestService.addSelect(fields);\n\n return this;\n }\n\n /**\n * Add a field with a sort criteria (Spatie and NestJS only)\n *\n * @param field - Field to use for sorting\n * @param {SortEnum} order - A value from the SortEnum enumeration\n * @returns {this}\n * @throws {UnsupportedSortError} If the active driver does not support sorts\n */\n public addSort(field: string, order: SortEnum): this {\n this._assertDriver([DriverEnum.SPATIE, DriverEnum.NESTJS], new UnsupportedSortError());\n\n this._nestService.addSort({\n field,\n order\n });\n\n return this;\n }\n\n /**\n * Delete selected fields for the given models in the current query builder state (Spatie only)\n *\n * ```\n * ngQubeeService.deleteFields({\n * users: ['email', 'password'],\n * address: ['zipcode']\n * });\n * ```\n *\n * @param {IFields} fields - Object mapping model names to field arrays to remove\n * @returns {this}\n * @throws {UnsupportedFieldSelectionError} If the active driver does not support per-model field selection\n */\n public deleteFields(fields: IFields): this {\n this._assertDriver([DriverEnum.SPATIE], new UnsupportedFieldSelectionError());\n this._nestService.deleteFields(fields);\n\n return this;\n }\n\n /**\n * Delete selected fields for the given model in the current query builder state (Spatie only)\n *\n * ```\n * ngQubeeService.deleteFieldsByModel('users', 'email', 'password');\n * ```\n *\n * @param model - Model that holds the fields\n * @param {string[]} fields - Fields to delete from the state\n * @returns {this}\n * @throws {UnsupportedFieldSelectionError} If the active driver does not support per-model field selection\n */\n public deleteFieldsByModel(model: string, ...fields: string[]): this {\n this._assertDriver([DriverEnum.SPATIE], new UnsupportedFieldSelectionError());\n\n if (!fields.length) {\n return this;\n }\n\n this._nestService.deleteFields({\n [model]: fields\n });\n\n return this;\n }\n\n /**\n * Remove given filters from the query builder state (Spatie and NestJS only)\n *\n * @param {string[]} filters - Filters to remove\n * @returns {this}\n * @throws {UnsupportedFilterError} If the active driver does not support filters\n */\n public deleteFilters(...filters: string[]): this {\n this._assertDriver([DriverEnum.SPATIE, DriverEnum.NESTJS], new UnsupportedFilterError());\n\n if (!filters.length) {\n return this;\n }\n\n this._nestService.deleteFilters(...filters);\n\n return this;\n }\n\n /**\n * Remove selected related models from the query builder state (Spatie only)\n *\n * @param {string[]} includes - Models to remove\n * @returns {this}\n * @throws {UnsupportedIncludesError} If the active driver does not support includes\n */\n public deleteIncludes(...includes: string[]): this {\n this._assertDriver([DriverEnum.SPATIE], new UnsupportedIncludesError());\n\n if (!includes.length) {\n return this;\n }\n\n this._nestService.deleteIncludes(...includes);\n\n return this;\n }\n\n /**\n * Remove operator filters by field name (NestJS only)\n *\n * @param {string[]} fields - Field names of operator filters to remove\n * @returns {this}\n * @throws {UnsupportedFilterOperatorError} If the active driver does not support filter operators\n */\n public deleteOperatorFilters(...fields: string[]): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedFilterOperatorError());\n\n if (!fields.length) {\n return this;\n }\n\n this._nestService.deleteOperatorFilters(...fields);\n\n return this;\n }\n\n /**\n * Remove search term from the query builder state (NestJS only)\n *\n * @returns {this}\n * @throws {UnsupportedSearchError} If the active driver does not support search\n */\n public deleteSearch(): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedSearchError());\n this._nestService.deleteSearch();\n\n return this;\n }\n\n /**\n * Remove flat field selections from the query builder state (NestJS only)\n *\n * @param {string[]} fields - Fields to remove from selection\n * @returns {this}\n * @throws {UnsupportedSelectError} If the active driver does not support flat field selection\n */\n public deleteSelect(...fields: string[]): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedSelectError());\n\n if (!fields.length) {\n return this;\n }\n\n this._nestService.deleteSelect(...fields);\n\n return this;\n }\n\n /**\n * Remove sort rules from the query builder state (Spatie and NestJS only)\n *\n * @param sorts - Fields used for sorting to remove\n * @returns {this}\n * @throws {UnsupportedSortError} If the active driver does not support sorts\n */\n public deleteSorts(...sorts: string[]): this {\n this._assertDriver([DriverEnum.SPATIE, DriverEnum.NESTJS], new UnsupportedSortError());\n this._nestService.deleteSorts(...sorts);\n\n return this;\n }\n\n /**\n * Generate a URI accordingly to the given data and active driver\n *\n * @returns {Observable<string>} An observable that emits the generated URI\n */\n public generateUri(): Observable<string> {\n try {\n this._uri$.next(this._requestStrategy.buildUri(this._nestService.nest(), this._options));\n return this.uri$;\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n /**\n * Clear the current state and reset the Query Builder to a fresh, clean condition\n *\n * @returns {this}\n */\n public reset(): this {\n this._nestService.reset();\n\n return this;\n }\n\n /**\n * Set the base URL to use for composing the address\n *\n * @param {string} baseUrl - The base URL\n * @returns {this}\n */\n public setBaseUrl(baseUrl: string): this {\n this._nestService.baseUrl = baseUrl;\n\n return this;\n }\n\n /**\n * Set the items per page number\n *\n * @param limit - Number of items per page\n * @returns {this}\n */\n public setLimit(limit: number): this {\n this._nestService.limit = limit;\n\n return this;\n }\n\n /**\n * Set the page that the backend will use to paginate the result set\n *\n * @param page - Page number\n * @returns {this}\n */\n public setPage(page: number): this {\n this._nestService.page = page;\n\n return this;\n }\n\n /**\n * Set the API resource to run the query against\n *\n * @param {string} resource - Resource name (e.g. 'users' produces /users)\n * @returns {this}\n */\n public setResource(resource: string): this {\n this._nestService.resource = resource;\n\n return this;\n }\n\n /**\n * Set the search term for full-text search (NestJS only)\n *\n * Produces: `search=term`\n *\n * @param {string} search - The search term\n * @returns {this}\n * @throws {UnsupportedSearchError} If the active driver does not support search\n */\n public setSearch(search: string): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedSearchError());\n this._nestService.setSearch(search);\n\n return this;\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\n\nimport { IPaginatedObject } from '../interfaces/paginated-object.interface';\nimport { IPaginationConfig } from '../interfaces/pagination-config.interface';\nimport { IResponseStrategy } from '../interfaces/response-strategy.interface';\nimport { PaginatedCollection } from '../models/paginated-collection';\nimport { ResponseOptions } from '../models/response-options';\n\n@Injectable()\nexport class PaginationService {\n\n /**\n * Resolved response key name options\n */\n private _options: ResponseOptions;\n\n /**\n * The response strategy that parses responses for the active driver\n */\n private _responseStrategy: IResponseStrategy;\n\n constructor(\n @Inject('RESPONSE_STRATEGY') responseStrategy: IResponseStrategy,\n @Inject('RESPONSE_OPTIONS') @Optional() options: IPaginationConfig = {}\n ) {\n this._options = new ResponseOptions(options);\n this._responseStrategy = responseStrategy;\n }\n\n /**\n * Transform a raw API response into a typed PaginatedCollection\n *\n * Delegates to the active driver's response strategy for parsing.\n *\n * @param response - The raw API response object\n * @returns A typed PaginatedCollection instance\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public paginate<T extends IPaginatedObject>(response: { [key: string]: any }): PaginatedCollection<T> {\n return this._responseStrategy.paginate<T>(response, this._options);\n }\n}\n","import { IQueryBuilderState } from '../interfaces/query-builder-state.interface';\nimport { IRequestStrategy } from '../interfaces/request-strategy.interface';\nimport { QueryBuilderOptions } from '../models/query-builder-options';\n\n/**\n * Request strategy for the Laravel (pagination-only) driver\n *\n * Generates simple pagination URIs:\n * - `/{resource}?limit=N&page=N`\n *\n * Filters, sorts, fields, includes, search, and select in state are ignored.\n */\nexport class LaravelRequestStrategy implements IRequestStrategy {\n\n /**\n * Build a pagination-only URI from the given state\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The composed URI string\n * @throws Error if resource is not set\n */\n public buildUri(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!state.resource) {\n throw new Error('Set the resource property BEFORE calling the url() / get() methods');\n }\n\n const base = state.baseUrl ? `${state.baseUrl}/${state.resource}` : `/${state.resource}`;\n\n return `${base}?${options.limit}=${state.limit}&${options.page}=${state.page}`;\n }\n}\n","import { IPaginatedObject } from '../interfaces/paginated-object.interface';\nimport { IResponseStrategy } from '../interfaces/response-strategy.interface';\nimport { PaginatedCollection } from '../models/paginated-collection';\nimport { ResponseOptions } from '../models/response-options';\n\n/**\n * Response strategy for the Laravel (pagination-only) driver\n *\n * Parses flat Laravel pagination responses:\n * ```json\n * {\n * \"data\": [...],\n * \"current_page\": 1,\n * \"total\": 100,\n * \"per_page\": 15,\n * \"from\": 1,\n * \"to\": 15,\n * ...\n * }\n * ```\n */\nexport class LaravelResponseStrategy implements IResponseStrategy {\n\n /**\n * Parse a flat Laravel pagination response into a PaginatedCollection\n *\n * @param response - The raw API response object\n * @param options - The response key name configuration\n * @returns A typed PaginatedCollection instance\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public paginate<T extends IPaginatedObject>(response: Record<string, any>, options: ResponseOptions): PaginatedCollection<T> {\n return new PaginatedCollection(\n response[options.data],\n response[options.currentPage],\n response[options.from],\n response[options.to],\n response[options.total],\n response[options.perPage],\n response[options.prevPageUrl],\n response[options.nextPageUrl],\n response[options.lastPage],\n response[options.firstPageUrl],\n response[options.lastPageUrl]\n );\n }\n}\n","export enum SortEnum {\n ASC = 'asc',\n DESC = 'desc'\n}","import { SortEnum } from '../enums/sort.enum';\nimport { IOperatorFilter } from '../interfaces/operator-filter.interface';\nimport { IQueryBuilderState } from '../interfaces/query-builder-state.interface';\nimport { IRequestStrategy } from '../interfaces/request-strategy.interface';\nimport { QueryBuilderOptions } from '../models/query-builder-options';\n\n/**\n * Request strategy for the NestJS (nestjs-paginate) driver\n *\n * Generates URIs in the NestJS paginate format:\n * - Simple filters: `filter.field=value`\n * - Operator filters: `filter.field=$operator:value`\n * - Sorts: `sortBy=field1:DESC,field2:ASC`\n * - Select: `select=col1,col2`\n * - Search: `search=term`\n * - Pagination: `limit=N&page=N`\n *\n * @see https://github.com/ppetzold/nestjs-paginate\n */\nexport class NestjsRequestStrategy implements IRequestStrategy {\n\n /**\n * Accumulator for composing the URI string\n */\n private _uri = '';\n\n /**\n * Build a URI string from the given state using the NestJS paginate format\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The composed URI string\n * @throws Error if model is not set\n */\n public buildUri(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!state.resource) {\n throw new Error('Set the resource property BEFORE adding filters or calling the url() / get() methods');\n }\n\n this._uri = '';\n\n this._parseFilters(state, options);\n this._parseOperatorFilters(state, options);\n this._parseSort(state, options);\n this._parseSelect(state, options);\n this._parseSearch(state, options);\n this._parseLimit(state, options);\n this._parsePage(state, options);\n\n return this._uri;\n }\n\n /**\n * Parse and append simple filter parameters\n *\n * Generates: `filter.field=value1,value2` for each filter\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseFilters(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n const keys = Object.keys(state.filters);\n\n if (!keys.length) {\n return;\n }\n\n keys.forEach(key => {\n const values = state.filters[key].join(',');\n const param = `${this._prepend(state)}${options.filters}.${key}=${values}`;\n this._uri += param;\n });\n }\n\n /**\n * Parse and append the limit parameter\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseLimit(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n const param = `${this._prepend(state)}${options.limit}=${state.limit}`;\n this._uri += param;\n }\n\n /**\n * Parse and append operator filter parameters\n *\n * Groups operator filters by field and generates:\n * - Single value: `filter.field=$operator:value`\n * - Multiple values ($in, $btw): `filter.field=$operator:val1,val2`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseOperatorFilters(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n if (!state.operatorFilters.length) {\n return;\n }\n\n state.operatorFilters.forEach((opFilter: IOperatorFilter) => {\n const values = opFilter.values.join(',');\n const param = `${this._prepend(state)}${options.filters}.${opFilter.field}=${opFilter.operator}:${values}`;\n this._uri += param;\n });\n }\n\n /**\n * Parse and append the page parameter\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parsePage(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n const param = `${this._prepend(state)}${options.page}=${state.page}`;\n this._uri += param;\n }\n\n /**\n * Parse and append the search parameter\n *\n * Generates: `search=term`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseSearch(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n if (!state.search) {\n return;\n }\n\n const param = `${this._prepend(state)}${options.search}=${state.search}`;\n this._uri += param;\n }\n\n /**\n * Parse and append the select parameter\n *\n * Generates: `select=col1,col2`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseSelect(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n if (!state.select.length) {\n return;\n }\n\n const param = `${this._prepend(state)}${options.select}=${state.select.join(',')}`;\n this._uri += param;\n }\n\n /**\n * Parse and append sort parameters\n *\n * Generates: `sortBy=field1:DESC,field2:ASC`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseSort(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n if (!state.sorts.length) {\n return;\n }\n\n const sortPairs = state.sorts.map(sort =>\n `${sort.field}:${sort.order === SortEnum.DESC ? 'DESC' : 'ASC'}`\n );\n\n const param = `${this._prepend(state)}${options.sortBy}=${sortPairs.join(',')}`;\n this._uri += param;\n }\n\n /**\n * Determine the appropriate URI prefix based on the current accumulator state\n *\n * Returns the full base path with `?` for the first parameter,\n * or `&` for subsequent parameters.\n *\n * @param state - The current query builder state\n * @returns The prefix string to prepend to the next parameter\n */\n private _prepend(state: IQueryBuilderState): string {\n if (this._uri) {\n return '&';\n }\n\n return state.baseUrl ? `${state.baseUrl}/${state.resource}?` : `/${state.resource}?`;\n }\n}\n","import { IPaginatedObject } from '../interfaces/paginated-object.interface';\nimport { IResponseStrategy } from '../interfaces/response-strategy.interface';\nimport { PaginatedCollection } from '../models/paginated-collection';\nimport { ResponseOptions } from '../models/response-options';\n\n/**\n * Response strategy for the NestJS (nestjs-paginate) driver\n *\n * Parses nested NestJS pagination responses:\n * ```json\n * {\n * \"data\": [...],\n * \"meta\": {\n * \"currentPage\": 1,\n * \"totalItems\": 100,\n * \"itemsPerPage\": 10,\n * \"totalPages\": 10\n * },\n * \"links\": {\n * \"first\": \"url\",\n * \"previous\": \"url\",\n * \"next\": \"url\",\n * \"last\": \"url\",\n * \"current\": \"url\"\n * }\n * }\n * ```\n *\n * @see https://github.com/ppetzold/nestjs-paginate\n */\nexport class NestjsResponseStrategy implements IResponseStrategy {\n\n /**\n * Parse a nested NestJS pagination response into a PaginatedCollection\n *\n * Supports dot-notation key paths for accessing nested values.\n * Computes `from` and `to` from `currentPage` and `itemsPerPage` when\n * they are not directly available in the response.\n *\n * @param response - The raw API response object\n * @param options - The response key name configuration\n * @returns A typed PaginatedCollection instance\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public paginate<T extends IPaginatedObject>(response: Record<string, any>, options: ResponseOptions): PaginatedCollection<T> {\n const data = this._resolve(response, options.data) as T[];\n const currentPage = this._resolve(response, options.currentPage) as number;\n const total = this._resolve(response, options.total) as number | undefined;\n const perPage = this._resolve(response, options.perPage) as number | undefined;\n const lastPage = this._resolve(response, options.lastPage) as number | undefined;\n\n // Compute from/to if not directly available\n const from = this._resolveFrom(response, options, currentPage, perPage);\n const to = this._resolveTo(response, options, currentPage, perPage, total);\n\n const prevPageUrl = this._resolve(response, options.prevPageUrl) as string | undefined;\n const nextPageUrl = this._resolve(response, options.nextPageUrl) as string | undefined;\n const firstPageUrl = this._resolve(response, options.firstPageUrl) as string | undefined;\n const lastPageUrl = this._resolve(response, options.lastPageUrl) as string | undefined;\n\n return new PaginatedCollection(\n data,\n currentPage,\n from,\n to,\n total,\n perPage,\n prevPageUrl,\n nextPageUrl,\n lastPage,\n firstPageUrl,\n lastPageUrl\n );\n }\n\n /**\n * Resolve a value from a response object using a dot-notation path\n *\n * Supports both flat keys ('data') and nested paths ('meta.currentPage').\n *\n * @param response - The raw response object\n * @param path - The dot-notation path to resolve\n * @returns The resolved value, or undefined if not found\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _resolve(response: Record<string, any>, path: string): unknown {\n return path.split('.').reduce((obj, key) => obj?.[key], response);\n }\n\n /**\n * Resolve the \"from\" index value\n *\n * If the path resolves to a value in the response, use it.\n * Otherwise, compute it from currentPage and perPage:\n * `(currentPage - 1) * perPage + 1`\n *\n * @param response - The raw response object\n * @param options - The response key name configuration\n * @param currentPage - The current page number\n * @param perPage - The number of items per page\n * @returns The computed \"from\" index\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _resolveFrom(response: Record<string, any>, options: ResponseOptions, currentPage: number, perPage?: number): number | undefined {\n const direct = this._resolve(response, options.from);\n\n if (direct !== undefined) {\n return direct as number;\n }\n\n if (currentPage && perPage) {\n return (currentPage - 1) * perPage + 1;\n }\n\n return undefined;\n }\n\n /**\n * Resolve the \"to\" index value\n *\n * If the path resolves to a value in the response, use it.\n * Otherwise, compute it from currentPage, perPage, and total:\n * `Math.min(currentPage * perPage, total)`\n *\n * @param response - The raw response object\n * @param options - The response key name configuration\n * @param currentPage - The current page number\n * @param perPage - The number of items per page\n * @param total - The total number of items\n * @returns The computed \"to\" index\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _resolveTo(response: Record<string, any>, options: ResponseOptions, currentPage: number, perPage?: number, total?: number): number | undefined {\n const direct = this._resolve(response, options.to);\n\n if (direct !== undefined) {\n return direct as number;\n }\n\n if (currentPage && perPage && total) {\n return Math.min(currentPage * perPage, total);\n }\n\n return undefined;\n }\n}\n","export class UnselectableModelError extends Error {\n constructor(model: string) {\n super(`Unselectable Model: the selected model (${model}) is not present neither in the \"model\" property, nor in the includes object.`);\n }\n}","import * as qs from 'qs';\n\nimport { SortEnum } from '../enums/sort.enum';\nimport { UnselectableModelError } from '../errors/unselectable-model.error';\nimport { IQueryBuilderState } from '../interfaces/query-builder-state.interface';\nimport { IRequestStrategy } from '../interfaces/request-strategy.interface';\nimport { QueryBuilderOptions } from '../models/query-builder-options';\n\n/**\n * Request strategy for the Spatie Query Builder driver\n *\n * Generates URIs in the Spatie format:\n * - Fields: `fields[model]=col1,col2`\n * - Filters: `filter[field]=value`\n * - Includes: `include=model1,model2`\n * - Sorts: `sort=-field1,field2` (- prefix = DESC)\n * - Pagination: `limit=N&page=N`\n *\n * @see https://spatie.be/docs/laravel-query-builder\n */\nexport class SpatieRequestStrategy implements IRequestStrategy {\n\n /**\n * Accumulator for composing the URI string\n */\n private _uri = '';\n\n /**\n * Build a URI string from the given state using the Spatie format\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The composed URI string\n * @throws Error if resource is not set\n */\n public buildUri(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!state.resource) {\n throw new Error('Set the resource property BEFORE adding filters or calling the url() / get() methods');\n }\n\n this._uri = '';\n\n this._parseIncludes(state, options);\n this._parseFields(state, options);\n this._parseFilters(state, options);\n this._parseLimit(state, options);\n this._parsePage(state, options);\n this._parseSort(state, options);\n\n return this._uri;\n }\n\n /**\n * Parse and append field selection parameters\n *\n * Validates that each field model exists either as the main resource\n * or in the includes list. Fields are grouped by model in bracket notation.\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated field selection parameter string\n * @throws Error if resource is required but not set\n * @throws UnselectableModelError if a field model is not in resource or includes\n */\n private _parseFields(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!Object.keys(state.fields).length) {\n return this._uri;\n }\n\n if (!state.resource) {\n throw new Error('While selecting fields, the -> resource <- is required');\n }\n\n if (!(state.resource in state.fields)) {\n throw new Error(`Key ${state.resource} is missing in the fields object`);\n }\n\n const f: Record<string, string> = {};\n\n for (const k in state.fields) {\n if (state.fields.hasOwnProperty(k)) {\n if (k !== state.resource && !state.includes.includes(k)) {\n throw new UnselectableModelError(k);\n }\n\n Object.assign(f, { [`${options.fields}[${k}]`]: state.fields[k].join(',') });\n }\n }\n\n const param = `${this._prepend(state)}${qs.stringify(f, { encode: false })}`;\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append filter parameters\n *\n * Generates filter parameters in bracket notation: `filter[key]=value1,value2`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated filter parameter string\n */\n private _parseFilters(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n const keys = Object.keys(state.filters);\n\n if (!keys.length) {\n return this._uri;\n }\n\n const f = {\n [`${options.filters}`]: keys.reduce((acc: Record<string, string>, key: string) => {\n return Object.assign(acc, { [key]: state.filters[key].join(',') });\n }, {})\n };\n const param = `${this._prepend(state)}${qs.stringify(f, { encode: false })}`;\n\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append include parameters\n *\n * Generates: `include=model1,model2`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated include parameter string\n */\n private _parseIncludes(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!state.includes.length) {\n return this._uri;\n }\n\n const param = `${this._prepend(state)}${options.includes}=${state.includes}`;\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append the limit parameter\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated limit parameter string\n */\n private _parseLimit(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n const param = `${this._prepend(state)}${options.limit}=${state.limit}`;\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append the page parameter\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated page parameter string\n */\n private _parsePage(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n const param = `${this._prepend(state)}${options.page}=${state.page}`;\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append sort parameters\n *\n * Generates: `sort=-field1,field2` where `-` prefix indicates DESC order\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated sort parameter string\n */\n private _parseSort(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n let param = '';\n\n if (!state.sorts.length) {\n return param;\n }\n\n param = `${this._prepend(state)}${options.sort}=`;\n\n state.sorts.forEach((sort, idx) => {\n param += `${sort.order === SortEnum.DESC ? '-' : ''}${sort.field}`;\n\n if (idx < state.sorts.length - 1) {\n param += ',';\n }\n });\n\n this._uri += param;\n\n return param;\n }\n\n /**\n * Determine the appropriate URI prefix based on the current accumulator state\n *\n * Returns the full base path with `?` for the first parameter,\n * or `&` for subsequent parameters.\n *\n * @param state - The current query builder state\n * @returns The prefix string to prepend to the next parameter\n */\n private _prepend(state: IQueryBuilderState): string {\n if (this._uri) {\n return '&';\n }\n\n return state.baseUrl ? `${state.baseUrl}/${state.resource}?` : `/${state.resource}?`;\n }\n}\n","import { IPaginatedObject } from '../interfaces/paginated-object.interface';\nimport { IResponseStrategy } from '../interfaces/response-strategy.interface';\nimport { PaginatedCollection } from '../models/paginated-collection';\nimport { ResponseOptions } from '../models/response-options';\n\n/**\n * Response strategy for the Spatie Query Builder driver\n *\n * Parses flat Laravel pagination responses:\n * ```json\n * {\n * \"data\": [...],\n * \"current_page\": 1,\n * \"total\": 100,\n * \"per_page\": 15,\n * \"from\": 1,\n * \"to\": 15,\n * ...\n * }\n * ```\n *\n * @see https://spatie.be/docs/laravel-query-builder\n */\nexport class SpatieResponseStrategy implements IResponseStrategy {\n\n /**\n * Parse a flat Laravel pagination response into a PaginatedCollection\n *\n * @param response - The raw API response object\n * @param options - The response key name configuration\n * @returns A typed PaginatedCollection instance\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public paginate<T extends IPaginatedObject>(response: Record<string, any>, options: ResponseOptions): PaginatedCollection<T> {\n return new PaginatedCollection(\n response[options.data],\n response[options.currentPage],\n response[options.from],\n response[options.to],\n response[options.total],\n response[options.perPage],\n response[options.prevPageUrl],\n response[options.nextPageUrl],\n response[options.lastPage],\n response[options.firstPageUrl],\n response[options.lastPageUrl]\n );\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DriverEnum } from './enums/driver.enum';\nimport { IConfig } from './interfaces/config.interface';\nimport { IRequestStrategy } from './interfaces/request-strategy.interface';\nimport { IResponseStrategy } from './interfaces/response-strategy.interface';\nimport { NestjsResponseOptions } from './models/response-options';\nimport { NgQubeeService } from './services/ng-qubee.service';\nimport { NestService } from './services/nest.service';\nimport { PaginationService } from './services/pagination.service';\nimport { LaravelRequestStrategy } from './strategies/laravel-request.strategy';\nimport { LaravelResponseStrategy } from './strategies/laravel-response.strategy';\nimport { NestjsRequestStrategy } from './strategies/nestjs-request.strategy';\nimport { NestjsResponseStrategy } from './strategies/nestjs-response.strategy';\nimport { SpatieRequestStrategy } from './strategies/spatie-request.strategy';\nimport { SpatieResponseStrategy } from './strategies/spatie-response.strategy';\n\n/**\n * Resolve the request strategy instance for the given driver\n *\n * @param driver - The pagination driver\n * @returns The corresponding request strategy\n */\nfunction resolveRequestStrategy(driver: DriverEnum): IRequestStrategy {\n switch (driver) {\n case DriverEnum.NESTJS:\n return new NestjsRequestStrategy();\n case DriverEnum.SPATIE:\n return new SpatieRequestStrategy();\n case DriverEnum.LARAVEL:\n return new LaravelRequestStrategy();\n }\n}\n\n/**\n * Resolve the response strategy instance for the given driver\n *\n * @param driver - The pagination driver\n * @returns The corresponding response strategy\n */\nfunction resolveResponseStrategy(driver: DriverEnum): IResponseStrategy {\n switch (driver) {\n case DriverEnum.NESTJS:\n return new NestjsResponseStrategy();\n case DriverEnum.SPATIE:\n return new SpatieResponseStrategy();\n case DriverEnum.LARAVEL:\n return new LaravelResponseStrategy();\n }\n}\n\n// @dynamic\n@NgModule({})\nexport class NgQubeeModule {\n\n /**\n * Configure NgQubee for the root module\n *\n * @param config - Configuration object with driver, and optional request and response settings\n * @returns Module with providers configured for the specified driver\n */\n public static forRoot(config: IConfig): ModuleWithProviders<NgQubeeModule> {\n const driver = config.driver;\n\n const requestStrategy = resolveRequestStrategy(driver);\n const responseStrategy = resolveResponseStrategy(driver);\n\n return {\n ngModule: NgQubeeModule,\n providers: [\n NestService,\n {\n deps: [NestService],\n provide: NgQubeeService,\n useFactory: (nestService: NestService) =>\n new NgQubeeService(\n nestService,\n requestStrategy,\n driver,\n Object.assign({}, config.request)\n )\n },\n {\n provide: PaginationService,\n useFactory: () => {\n const responseConfig = Object.assign({}, config.response);\n\n return driver === DriverEnum.NESTJS\n ? new PaginationService(responseStrategy, new NestjsResponseOptions(responseConfig))\n : new PaginationService(responseStrategy, responseConfig);\n }\n }\n ]\n };\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { DriverEnum } from './enums/driver.enum';\nimport { IConfig } from './interfaces/config.interface';\nimport { IRequestStrategy } from './interfaces/request-strategy.interface';\nimport { IResponseStrategy } from './interfaces/response-strategy.interface';\nimport { NestjsResponseOptions } from './models/response-options';\nimport { NgQubeeService } from './services/ng-qubee.service';\nimport { NestService } from './services/nest.service';\nimport { PaginationService } from './services/pagination.service';\nimport { LaravelRequestStrategy } from './strategies/laravel-request.strategy';\nimport { LaravelResponseStrategy } from './strategies/laravel-response.strategy';\nimport { NestjsRequestStrategy } from './strategies/nestjs-request.strategy';\nimport { NestjsResponseStrategy } from './strategies/nestjs-response.strategy';\nimport { SpatieRequestStrategy } from './strategies/spatie-request.strategy';\nimport { SpatieResponseStrategy } from './strategies/spatie-response.strategy';\n\n/**\n * Resolve the request strategy instance for the given driver\n *\n * @param driver - The pagination driver\n * @returns The corresponding request strategy\n */\nfunction resolveRequestStrategy(driver: DriverEnum): IRequestStrategy {\n switch (driver) {\n case DriverEnum.NESTJS:\n return new NestjsRequestStrategy();\n case DriverEnum.SPATIE:\n return new SpatieRequestStrategy();\n case DriverEnum.LARAVEL:\n return new LaravelRequestStrategy();\n }\n}\n\n/**\n * Resolve the response strategy instance for the given driver\n *\n * @param driver - The pagination driver\n * @returns The corresponding response strategy\n */\nfunction resolveResponseStrategy(driver: DriverEnum): IResponseStrategy {\n switch (driver) {\n case DriverEnum.NESTJS:\n return new NestjsResponseStrategy();\n case DriverEnum.SPATIE:\n return new SpatieResponseStrategy();\n case DriverEnum.LARAVEL:\n return new LaravelResponseStrategy();\n }\n}\n\n/**\n * Sets up providers necessary to enable `NgQubee` functionality for the application.\n *\n * @usageNotes\n *\n * Basic example with the Laravel driver:\n * ```\n * bootstrapApplication(AppComponent, {\n * providers: [provideNgQubee({ driver: DriverEnum.LARAVEL })]\n * });\n * ```\n *\n * Spatie driver example:\n * ```\n * import { DriverEnum } from 'ng-qubee';\n *\n * bootstrapApplication(AppComponent, {\n * providers: [provideNgQubee({ driver: DriverEnum.SPATIE })]\n * });\n * ```\n *\n * NestJS driver example:\n * ```\n * import { DriverEnum } from 'ng-qubee';\n *\n * bootstrapApplication(AppComponent, {\n * providers: [provideNgQubee({ driver: DriverEnum.NESTJS })]\n * });\n * ```\n *\n * @publicApi\n * @param config - Configuration object compliant to the IConfig interface\n * @returns A set of providers to setup NgQubee\n */\nexport function provideNgQubee(config: IConfig): EnvironmentProviders {\n const driver = config.driver;\n const requestStrategy = resolveRequestStrategy(driver);\n const responseStrategy = resolveResponseStrategy(driver);\n\n return makeEnvironmentProviders([\n {\n provide: NestService,\n useClass: NestService\n },\n {\n deps: [NestService],\n provide: NgQubeeService,\n useFactory: (nestService: NestService) =>\n new NgQubeeService(\n nestService,\n requestStrategy,\n driver,\n Object.assign({}, config.request)\n )\n },\n {\n provide: PaginationService,\n useFactory: () => {\n const responseConfig = Object.assign({}, config.response);\n\n return driver === DriverEnum.NESTJS\n ? new PaginationService(responseStrategy, new NestjsResponseOptions(responseConfig))\n : new PaginationService(responseStrategy, responseConfig);\n }\n }\n ]);\n}\n","/**\n * Enum representing the available filter operators for the NestJS driver\n *\n * These operators map to the nestjs-paginate filter syntax:\n * `filter.field=$operator:value`\n *\n * @see https://github.com/ppetzold/nestjs-paginate\n */\nexport enum FilterOperatorEnum {\n BTW = '$btw',\n CONTAINS = '$contains',\n EQ = '$eq',\n GT = '$gt',\n GTE = '$gte',\n ILIKE = '$ilike',\n IN = '$in',\n LT = '$lt',\n LTE = '$lte',\n NOT = '$not',\n NULL = '$null',\n SW = '$sw'\n}\n","/*\n * Public API Surface of angular-query-builder\n */\n\nexport * from './lib/models/paginated-collection';\nexport * from './lib/ng-qubee.module';\nexport * from './lib/provide-ngqubee';\nexport * from './lib/services/ng-qubee.service';\nexport * from './lib/services/pagination.service';\n\n// Enums\nexport * from './lib/enums/driver.enum';\nexport * from './lib/enums/filter-operator.enum';\nexport * from './lib/enums/sort.enum';\n\n// Error classes\nexport * from './lib/errors/invalid-limit.error';\nexport * from './lib/errors/invalid-page-number.error';\nexport * from './lib/errors/invalid-resource-name.error';\nexport * from './lib/errors/key-not-found.error';\nexport * from './lib/errors/unselectable-model.error';\nexport * from './lib/errors/unsupported-field-selection.error';\nexport * from './lib/errors/unsupported-filter.error';\nexport * from './lib/errors/unsupported-filter-operator.error';\nexport * from './lib/errors/unsupported-includes.error';\nexport * from './lib/errors/unsupported-search.error';\nexport * from './lib/errors/unsupported-select.error';\nexport * from './lib/errors/unsupported-sort.error';\n\n// Interfaces\nexport * from './lib/interfaces/config.interface';\nexport * from './lib/interfaces/fields.interface';\nexport * from './lib/interfaces/filters.interface';\nexport * from './lib/interfaces/nest-state.interface';\nexport * from './lib/interfaces/operator-filter.interface';\nexport * from './lib/interfaces/page.interface';\nexport * from './lib/interfaces/paginated-object.interface';\nexport * from './lib/interfaces/pagination-config.interface';\nexport * from './lib/interfaces/query-builder-config.interface';\nexport * from './lib/interfaces/query-builder-state.interface';\nexport * from './lib/interfaces/request-strategy.interface';\nexport * from './lib/interfaces/response-strategy.interface';\nexport * from './lib/interfaces/sort.interface';\n\n// Strategies\nexport * from './lib/strategies/laravel-request.strategy';\nexport * from './lib/strategies/laravel-response.strategy';\nexport * from './lib/strategies/nestjs-request.strategy';\nexport * from './lib/strategies/nestjs-response.strategy';\nexport * from './lib/strategies/spatie-request.strategy';\nexport * from './lib/strategies/spatie-response.strategy';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NestService","resolveRequestStrategy","resolveResponseStrategy"],"mappings":";;;;;AAAM,MAAO,gBAAiB,SAAQ,KAAK,CAAA;AACvC,IAAA,WAAA,CAAY,GAAW,EAAA;AACnB,QAAA,KAAK,CAAC,CAAA,oBAAA,EAAuB,GAAG,CAAA,mDAAA,CAAqD,CAAC;IAC1F;AACH;;MCAY,mBAAmB,CAAA;AAEjB,IAAA,IAAA;AACS,IAAA,IAAA;AACA,IAAA,IAAA;AACA,IAAA,EAAA;AACA,IAAA,KAAA;AACA,IAAA,OAAA;AACA,IAAA,WAAA;AACA,IAAA,WAAA;AACA,IAAA,QAAA;AACA,IAAA,YAAA;AACA,IAAA,WAAA;IAXpB,WAAA,CACW,IAAS,EACA,IAAY,EACZ,IAAa,EACb,EAAW,EACX,KAAc,EACd,OAAgB,EAChB,WAAoB,EACpB,WAAoB,EACpB,QAAiB,EACjB,YAAqB,EACrB,WAAoB,EAAA;QAV7B,IAAA,CAAA,IAAI,GAAJ,IAAI;QACK,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,WAAW,GAAX,WAAW;;IAG/B;AAEA;;;;;;;;;;;;AAYG;AACI,IAAA,SAAS,CAAC,EAAW,EAAA;QACxB,OAAO;AACH,YAAA,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAa,EAAE,KAAQ,KAAI;AACtD,gBAAA,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE;oBACnB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvB;AAAO,qBAAA,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;oBACnC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzB;qBAAO;AACH,oBAAA,MAAM,IAAI,gBAAgB,CAAC,EAAE,IAAI,IAAI,CAAC;gBAC1C;AAEA,gBAAA,OAAO,GAAG;YACd,CAAC,EAAE,EAAE;SACR;IACL;AACH;;ACjDD;;;;;AAKG;IACS;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAJW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;ACJtB;;;;;;;;;;;;;AAaG;MACU,eAAe,CAAA;AACR,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,YAAY;AACZ,IAAA,IAAI;AACJ,IAAA,QAAQ;AACR,IAAA,WAAW;AACX,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,OAAO;AACP,IAAA,WAAW;AACX,IAAA,EAAE;AACF,IAAA,KAAK;AAErB,IAAA,WAAA,CAAY,OAA0B,EAAA;QAClC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,cAAc;QACxD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM;QAClC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,gBAAgB;QAC5D,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM;QAClC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW;QAC/C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe;QACzD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe;QACzD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU;QAC5C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe;QACzD,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI;QAC5B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO;IACzC;AACH;AAED;;;;AAIG;AACG,MAAO,qBAAsB,SAAQ,eAAe,CAAA;AACtD,IAAA,WAAA,CAAY,OAA0B,EAAA;AAClC,QAAA,KAAK,CAAC;AACF,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,kBAAkB;AACtD,YAAA,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,MAAM;AAC5B,YAAA,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,aAAa;AACnD,YAAA,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW;AACjC,YAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,iBAAiB;AAC/C,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,YAAY;AAChD,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,YAAY;AAChD,YAAA,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,MAAM;AAC5B,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,mBAAmB;AAC/C,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,gBAAgB;AACpD,YAAA,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,SAAS;AAC3B,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI;AAC3B,SAAA,CAAC;IACN;AACH;;ACpED;;;;;AAKG;AACG,MAAO,8BAA+B,SAAQ,KAAK,CAAA;AACvD,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,+FAA+F,CAAC;AACtG,QAAA,IAAI,CAAC,IAAI,GAAG,gCAAgC;IAC9C;AACD;;ACXD;;;;AAIG;AACG,MAAO,sBAAuB,SAAQ,KAAK,CAAA;AAC/C,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,8DAA8D,CAAC;AACrE,QAAA,IAAI,CAAC,IAAI,GAAG,wBAAwB;IACtC;AACD;;ACVD;;;;;AAKG;AACG,MAAO,8BAA+B,SAAQ,KAAK,CAAA;AACvD,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,uFAAuF,CAAC;AAC9F,QAAA,IAAI,CAAC,IAAI,GAAG,gCAAgC;IAC9C;AACD;;ACXD;;;;AAIG;AACG,MAAO,wBAAyB,SAAQ,KAAK,CAAA;AACjD,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,mDAAmD,CAAC;AAC1D,QAAA,IAAI,CAAC,IAAI,GAAG,0BAA0B;IACxC;AACD;;ACVD;;;;AAIG;AACG,MAAO,sBAAuB,SAAQ,KAAK,CAAA;AAC/C,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,gDAAgD,CAAC;AACvD,QAAA,IAAI,CAAC,IAAI,GAAG,wBAAwB;IACtC;AACD;;ACVD;;;;;AAKG;AACG,MAAO,sBAAuB,SAAQ,KAAK,CAAA;AAC/C,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,0FAA0F,CAAC;AACjG,QAAA,IAAI,CAAC,IAAI,GAAG,wBAAwB;IACtC;AACD;;ACXD;;;;AAIG;AACG,MAAO,oBAAqB,SAAQ,KAAK,CAAA;AAC7C,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,4DAA4D,CAAC;AACnE,QAAA,IAAI,CAAC,IAAI,GAAG,sBAAsB;IACpC;AACD;;ACRD;;;;;AAKG;MACU,mBAAmB,CAAA;AACZ,IAAA,OAAO;AACP,IAAA,MAAM;AACN,IAAA,OAAO;AACP,IAAA,QAAQ;AACR,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,MAAM;AACN,IAAA,MAAM;AACN,IAAA,IAAI;AACJ,IAAA,MAAM;AAEtB,IAAA,WAAA,CAAY,OAA4B,EAAA;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ;QAC1C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ;QAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,SAAS;QAC7C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO;QACrC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM;QAClC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ;QACxC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ;QACxC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM;QAClC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ;IAC5C;AACH;;AChCK,MAAO,iBAAkB,SAAQ,KAAK,CAAA;AAC1C,IAAA,WAAA,CAAY,KAAa,EAAA;AACvB,QAAA,KAAK,CACH,CAAA,gFAAA,EAAmF,KAAK,CAAA,CAAE,CAC3F;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,mBAAmB;IACjC;AACD;;ACPD;;;;AAIG;AACG,MAAO,wBAAyB,SAAQ,KAAK,CAAA;AACjD,IAAA,WAAA,CAAY,QAAmC,EAAA;QAC7C,KAAK,CACH,CAAA,2EAAA,EAA8E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,CAAE,CACzG;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,0BAA0B;IACxC;AACD;;ACZK,MAAO,sBAAuB,SAAQ,KAAK,CAAA;AAC/C,IAAA,WAAA,CAAY,IAAY,EAAA;AACtB,QAAA,KAAK,CACH,CAAA,+EAAA,EAAkF,IAAI,CAAA,CAAE,CACzF;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,wBAAwB;IACtC;AACD;;ACID,MAAM,aAAa,GAAuB;AACxC,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,eAAe,EAAE,EAAE;AACnB,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,KAAK,EAAE;CACR;MAGY,WAAW,CAAA;AAEtB;;;;AAIG;IACK,KAAK,GAAuC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEtF;;;;AAIG;AACI,IAAA,IAAI,GAA+B,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,gDAAC;AAEnF,IAAA,WAAA,GAAA;;IAEA;AAEA;;;;;;AAMG;IACH,IAAI,OAAO,CAAC,OAAe,EAAA;QACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;YACP;AACD,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;;;AAQG;IACH,IAAI,KAAK,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;YACP;AACD,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;;;AAQG;IACH,IAAI,IAAI,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;YACP;AACD,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;;;AAQG;IACH,IAAI,QAAQ,CAAC,QAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;YACP;AACD,SAAA,CAAC,CAAC;IACL;AAEQ,IAAA,MAAM,CAAI,GAAM,EAAA;QACtB,OAAO,IAAI,CAAC,KAAK,CAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAE;IAC1C;AAEA;;;;;;AAMG;AACK,IAAA,cAAc,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;AACzC,YAAA,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC;QACpC;IACF;AAEA;;;;;;AAMG;AACK,IAAA,mBAAmB,CAAC,IAAY,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;AACvC,YAAA,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC;QACxC;IACF;AAEA;;;;;;AAMG;AACK,IAAA,qBAAqB,CAAC,QAAgB,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7E,YAAA,MAAM,IAAI,wBAAwB,CAAC,QAAQ,CAAC;QAC9C;IACF;AAEA;;;;;;;;;AASG;AACI,IAAA,SAAS,CAAC,MAAe,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;YACvB,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;YAEvC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;gBAClC,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE;AAChD,gBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;;AAG/B,gBAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AAC3E,gBAAA,YAAY,CAAC,KAAK,CAAC,GAAG,YAAY;AACpC,YAAA,CAAC,CAAC;YAEF,OAAO;AACL,gBAAA,GAAG,IAAI;AACP,gBAAA,MAAM,EAAE;aACT;AACH,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;;;;AASG;AACI,IAAA,UAAU,CAAC,OAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;YACvB,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAEzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;gBACjC,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE;AAC/C,gBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;;AAG9B,gBAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AAC3E,gBAAA,aAAa,CAAC,GAAG,CAAC,GAAG,YAAY;AACnC,YAAA,CAAC,CAAC;YAEF,OAAO;AACL,gBAAA,GAAG,IAAI;AACP,gBAAA,OAAO,EAAE;aACV;AACH,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;;;;AASG;AACI,IAAA,WAAW,CAAC,QAAkB,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;;YAEvB,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;YAE3E,OAAO;AACL,gBAAA,GAAG,IAAI;AACP,gBAAA,QAAQ,EAAE;aACX;AACH,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;;;;AASG;AACI,IAAA,kBAAkB,CAAC,OAA0B,EAAA;AAClD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;YACvB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;AAExC,YAAA,OAAO,CAAC,OAAO,CAAC,SAAS,IAAG;gBAC1B,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAClC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,CACtE;AAED,gBAAA,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE;oBACpB,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM;oBACjD,MAAM,CAAC,WAAW,CAAC,GAAG;wBACpB,GAAG,MAAM,CAAC,WAAW,CAAC;AACtB,wBAAA,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;qBACrE;gBACH;qBAAO;oBACL,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC;gBAC/B;AACF,YAAA,CAAC,CAAC;YAEF,OAAO;AACL,gBAAA,GAAG,IAAI;AACP,gBAAA,eAAe,EAAE;aAClB;AACH,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;;;AAQG;AACI,IAAA,SAAS,CAAC,MAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;YACvB,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;YAErE,OAAO;AACL,gBAAA,GAAG,IAAI;AACP,gBAAA,MAAM,EAAE;aACT;AACH,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;;;;AASG;AACI,IAAA,OAAO,CAAC,IAAW,EAAA;QACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;YACP,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI;AAC5B,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;;;;AASG;AACI,IAAA,YAAY,CAAC,MAAe,EAAA;;AAEjC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;QAE1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;AAC9B,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE;gBACb;YACF;YAEA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjD,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;AACP,YAAA,MAAM,EAAE;AACT,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;;;;AASG;IACI,aAAa,CAAC,GAAG,OAAiB,EAAA;;AAEvC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC;AAE3C,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;AACP,YAAA,OAAO,EAAE;AACV,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;;;AAQG;IACI,cAAc,CAAC,GAAG,QAAkB,EAAA;QACzC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;AACP,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1D,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;;;AAQG;IACI,qBAAqB,CAAC,GAAG,MAAgB,EAAA;QAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;YACP,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5E,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;AAMG;IACI,YAAY,GAAA;QACjB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;AACP,YAAA,MAAM,EAAE;AACT,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;;;AAQG;IACI,YAAY,CAAC,GAAG,MAAgB,EAAA;QACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;AACP,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpD,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;;;AAQG;IACI,WAAW,CAAC,GAAG,KAAe,EAAA;QACnC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;AAEjC,QAAA,KAAK,CAAC,OAAO,CAAC,KAAK,IAAG;AACpB,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;AAEnD,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;AACV,gBAAA,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAChB;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;AACP,YAAA,KAAK,EAAE;AACR,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;;AAOG;AACI,IAAA,SAAS,CAAC,MAAc,EAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;AACzB,YAAA,GAAG,IAAI;YACP;AACD,SAAA,CAAC,CAAC;IACL;AAEA;;;;;;;AAOG;IACI,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACpD;uGA/bW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAX,WAAW,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB;;;MCIY,cAAc,CAAA;AA8Bf,IAAA,YAAA;AA5BV;;AAEG;AACK,IAAA,OAAO;AAEf;;AAEG;AACK,IAAA,QAAQ;AAEhB;;AAEG;AACK,IAAA,gBAAgB;AAExB;;AAEG;AACK,IAAA,KAAK,GAA4B,IAAI,eAAe,CAAC,EAAE,CAAC;AAEhE;;AAEG;IACI,IAAI,GAAuB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAC9D,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CACrB;AAED,IAAA,WAAA,CACU,YAAyB,EACL,eAAiC,EAC3C,MAAkB,EACO,UAA+B,EAAE,EAAA;QAHpE,IAAA,CAAA,YAAY,GAAZ,YAAY;AAKpB,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC;AAChD,QAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe;IACzC;AAEA;;;;;;AAMG;IACK,aAAa,CAAC,OAAqB,EAAE,KAAY,EAAA;QACvD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACnC,YAAA,MAAM,KAAK;QACb;IACF;AAEA;;;;;;;AAOG;IACI,SAAS,CAAC,KAAa,EAAE,MAAgB,EAAA;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,8BAA8B,EAAE,CAAC;AAE7E,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;AAEhD,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;;AASG;AACI,IAAA,SAAS,CAAC,KAAa,EAAE,GAAG,MAAqC,EAAA;AACtE,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,sBAAsB,EAAE,CAAC;AAExF,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;YAC3B,CAAC,KAAK,GAAG;AACV,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;;;AAUG;AACI,IAAA,iBAAiB,CAAC,KAAa,EAAE,QAA4B,EAAE,GAAG,MAAqC,EAAA;AAC5G,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,8BAA8B,EAAE,CAAC;AAE7E,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AAEnE,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;AAMG;IACI,WAAW,CAAC,GAAG,MAAgB,EAAA;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,wBAAwB,EAAE,CAAC;AAEvE,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC;AAErC,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;AAQG;IACI,SAAS,CAAC,GAAG,MAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,sBAAsB,EAAE,CAAC;AAErE,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC;AAEnC,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;AAOG;IACI,OAAO,CAAC,KAAa,EAAE,KAAe,EAAA;AAC3C,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,oBAAoB,EAAE,CAAC;AAEtF,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YACxB,KAAK;YACL;AACD,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;;;;;;AAaG;AACI,IAAA,YAAY,CAAC,MAAe,EAAA;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,8BAA8B,EAAE,CAAC;AAC7E,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC;AAEtC,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;;;;AAWG;AACI,IAAA,mBAAmB,CAAC,KAAa,EAAE,GAAG,MAAgB,EAAA;AAC3D,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,8BAA8B,EAAE,CAAC;AAE7E,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC7B,CAAC,KAAK,GAAG;AACV,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;AAMG;IACI,aAAa,CAAC,GAAG,OAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,sBAAsB,EAAE,CAAC;AAExF,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC;AAE3C,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;AAMG;IACI,cAAc,CAAC,GAAG,QAAkB,EAAA;AACzC,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,wBAAwB,EAAE,CAAC;AAEvE,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpB,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC;AAE7C,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;AAMG;IACI,qBAAqB,CAAC,GAAG,MAAgB,EAAA;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,8BAA8B,EAAE,CAAC;AAE7E,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC;AAElD,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;IACI,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,sBAAsB,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAEhC,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;AAMG;IACI,YAAY,CAAC,GAAG,MAAgB,EAAA;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,sBAAsB,EAAE,CAAC;AAErE,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;AAEzC,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;AAMG;IACI,WAAW,CAAC,GAAG,KAAe,EAAA;AACnC,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,oBAAoB,EAAE,CAAC;QACtF,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;AAEvC,QAAA,OAAO,IAAI;IACb;AAEA;;;;AAIG;IACI,WAAW,GAAA;AAChB,QAAA,IAAI;YACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxF,OAAO,IAAI,CAAC,IAAI;QAClB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC;IACF;AAEA;;;;AAIG;IACI,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAEzB,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;AACI,IAAA,UAAU,CAAC,OAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,OAAO;AAEnC,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;AACI,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK;AAE/B,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;AACI,IAAA,OAAO,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI;AAE7B,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;AACI,IAAA,WAAW,CAAC,QAAgB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,QAAQ;AAErC,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;AAQG;AACI,IAAA,SAAS,CAAC,MAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,sBAAsB,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC;AAEnC,QAAA,OAAO,IAAI;IACb;AAhaW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EA+Bf,kBAAkB,EAAA,EAAA,EAAA,KAAA,EAClB,QAAQ,aACR,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAjCpB,cAAc,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;0BAgCI,MAAM;2BAAC,kBAAkB;;0BACzB,MAAM;2BAAC,QAAQ;;0BACf,MAAM;2BAAC,qBAAqB;;0BAAG;;;MCrDvB,iBAAiB,CAAA;AAE5B;;AAEG;AACK,IAAA,QAAQ;AAEhB;;AAEG;AACK,IAAA,iBAAiB;IAEzB,WAAA,CAC+B,gBAAmC,EACxB,OAAA,GAA6B,EAAE,EAAA;QAEvE,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC;AAC5C,QAAA,IAAI,CAAC,iBAAiB,GAAG,gBAAgB;IAC3C;AAEA;;;;;;;AAOG;;AAEI,IAAA,QAAQ,CAA6B,QAAgC,EAAA;AAC1E,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAI,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpE;uGA/BW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAalB,mBAAmB,EAAA,EAAA,EAAA,KAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAdjB,iBAAiB,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;0BAcI,MAAM;2BAAC,mBAAmB;;0BAC1B,MAAM;2BAAC,kBAAkB;;0BAAG;;;ACnBjC;;;;;;;AAOG;MACU,sBAAsB,CAAA;AAEjC;;;;;;;AAOG;IACI,QAAQ,CAAC,KAAyB,EAAE,OAA4B,EAAA;AACrE,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC;QACvF;QAEA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,GAAG,CAAA,EAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAA,CAAE,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,CAAA,CAAE;AAExF,QAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,OAAO,CAAC,IAAI,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,EAAE;IAChF;AACD;;AC1BD;;;;;;;;;;;;;;;AAeG;MACU,uBAAuB,CAAA;AAElC;;;;;;AAMG;;IAEI,QAAQ,CAA6B,QAA6B,EAAE,OAAwB,EAAA;AACjG,QAAA,OAAO,IAAI,mBAAmB,CAC5B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EACtB,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAC7B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EACpB,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EACvB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EACzB,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAC7B,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAC7B,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAC1B,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAC9B,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAC9B;IACH;AACD;;IC9CW;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAChB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EAHW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;;ACMpB;;;;;;;;;;;;AAYG;MACU,qBAAqB,CAAA;AAEhC;;AAEG;IACK,IAAI,GAAG,EAAE;AAEjB;;;;;;;AAOG;IACI,QAAQ,CAAC,KAAyB,EAAE,OAA4B,EAAA;AACrE,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC;QACzG;AAEA,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AAEd,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC;AAClC,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC;QAE/B,OAAO,IAAI,CAAC,IAAI;IAClB;AAEA;;;;;;;AAOG;IACK,aAAa,CAAC,KAAyB,EAAE,OAA4B,EAAA;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAEvC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;AACjB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3C,YAAA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,OAAO,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,MAAM,EAAE;AAC1E,YAAA,IAAI,CAAC,IAAI,IAAI,KAAK;AACpB,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;AAKG;IACK,WAAW,CAAC,KAAyB,EAAE,OAA4B,EAAA;AACzE,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,KAAK,EAAE;AACtE,QAAA,IAAI,CAAC,IAAI,IAAI,KAAK;IACpB;AAEA;;;;;;;;;AASG;IACK,qBAAqB,CAAC,KAAyB,EAAE,OAA4B,EAAA;AACnF,QAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE;YACjC;QACF;QAEA,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAyB,KAAI;YAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YACxC,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAC,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAC,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE;AAC1G,YAAA,IAAI,CAAC,IAAI,IAAI,KAAK;AACpB,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;AAKG;IACK,UAAU,CAAC,KAAyB,EAAE,OAA4B,EAAA;AACxE,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,IAAI,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,EAAE;AACpE,QAAA,IAAI,CAAC,IAAI,IAAI,KAAK;IACpB;AAEA;;;;;;;AAOG;IACK,YAAY,CAAC,KAAyB,EAAE,OAA4B,EAAA;AAC1E,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,MAAM,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,EAAE;AACxE,QAAA,IAAI,CAAC,IAAI,IAAI,KAAK;IACpB;AAEA;;;;;;;AAOG;IACK,YAAY,CAAC,KAAyB,EAAE,OAA4B,EAAA;AAC1E,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;YACxB;QACF;QAEA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,MAAM,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;AAClF,QAAA,IAAI,CAAC,IAAI,IAAI,KAAK;IACpB;AAEA;;;;;;;AAOG;IACK,UAAU,CAAC,KAAyB,EAAE,OAA4B,EAAA;AACxE,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;YACvB;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IACpC,CAAA,EAAG,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,CAAA,CAAE,CACjE;QAED,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;AAC/E,QAAA,IAAI,CAAC,IAAI,IAAI,KAAK;IACpB;AAEA;;;;;;;;AAQG;AACK,IAAA,QAAQ,CAAC,KAAyB,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,GAAG;QACZ;QAEA,OAAO,KAAK,CAAC,OAAO,GAAG,CAAA,EAAG,KAAK,CAAC,OAAO,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,CAAA,CAAA,CAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAA,CAAA,CAAG;IACtF;AACD;;ACxLD;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MACU,sBAAsB,CAAA;AAEjC;;;;;;;;;;AAUG;;IAEI,QAAQ,CAA6B,QAA6B,EAAE,OAAwB,EAAA;AACjG,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAQ;AACzD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAW;AAC1E,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAuB;AAC1E,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAuB;AAC9E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAuB;;AAGhF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC;AACvE,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;AAE1E,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAuB;AACtF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAuB;AACtF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAuB;AACxF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAuB;QAEtF,OAAO,IAAI,mBAAmB,CAC5B,IAAI,EACJ,WAAW,EACX,IAAI,EACJ,EAAE,EACF,KAAK,EACL,OAAO,EACP,WAAW,EACX,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,WAAW,CACZ;IACH;AAEA;;;;;;;;AAQG;;IAEK,QAAQ,CAAC,QAA6B,EAAE,IAAY,EAAA;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC;IACnE;AAEA;;;;;;;;;;;;AAYG;;AAEK,IAAA,YAAY,CAAC,QAA6B,EAAE,OAAwB,EAAE,WAAmB,EAAE,OAAgB,EAAA;AACjH,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC;AAEpD,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,YAAA,OAAO,MAAgB;QACzB;AAEA,QAAA,IAAI,WAAW,IAAI,OAAO,EAAE;YAC1B,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC;QACxC;AAEA,QAAA,OAAO,SAAS;IAClB;AAEA;;;;;;;;;;;;;AAaG;;IAEK,UAAU,CAAC,QAA6B,EAAE,OAAwB,EAAE,WAAmB,EAAE,OAAgB,EAAE,KAAc,EAAA;AAC/H,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AAElD,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,YAAA,OAAO,MAAgB;QACzB;AAEA,QAAA,IAAI,WAAW,IAAI,OAAO,IAAI,KAAK,EAAE;YACnC,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,EAAE,KAAK,CAAC;QAC/C;AAEA,QAAA,OAAO,SAAS;IAClB;AACD;;ACjJK,MAAO,sBAAuB,SAAQ,KAAK,CAAA;AAC7C,IAAA,WAAA,CAAY,KAAa,EAAA;AACrB,QAAA,KAAK,CAAC,CAAA,wCAAA,EAA2C,KAAK,CAAA,6EAAA,CAA+E,CAAC;IAC1I;AACH;;ACID;;;;;;;;;;;AAWG;MACU,qBAAqB,CAAA;AAEhC;;AAEG;IACK,IAAI,GAAG,EAAE;AAEjB;;;;;;;AAOG;IACI,QAAQ,CAAC,KAAyB,EAAE,OAA4B,EAAA;AACrE,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC;QACzG;AAEA,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AAEd,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC;QAE/B,OAAO,IAAI,CAAC,IAAI;IAClB;AAEA;;;;;;;;;;;AAWG;IACK,YAAY,CAAC,KAAyB,EAAE,OAA4B,EAAA;AAC1E,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;YACrC,OAAO,IAAI,CAAC,IAAI;QAClB;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;QAC3E;QAEA,IAAI,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,CAAA,IAAA,EAAO,KAAK,CAAC,QAAQ,CAAA,gCAAA,CAAkC,CAAC;QAC1E;QAEA,MAAM,CAAC,GAA2B,EAAE;AAEpC,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE;YAC5B,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;AAClC,gBAAA,IAAI,CAAC,KAAK,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AACvD,oBAAA,MAAM,IAAI,sBAAsB,CAAC,CAAC,CAAC;gBACrC;AAEA,gBAAA,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA,EAAG,OAAO,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9E;QACF;QAEA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA,CAAE;AAC5E,QAAA,IAAI,CAAC,IAAI,IAAI,KAAK;AAElB,QAAA,OAAO,KAAK;IACd;AAEA;;;;;;;;AAQG;IACK,aAAa,CAAC,KAAyB,EAAE,OAA4B,EAAA;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAEvC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,IAAI,CAAC,IAAI;QAClB;AAEA,QAAA,MAAM,CAAC,GAAG;AACR,YAAA,CAAC,GAAG,OAAO,CAAC,OAAO,CAAA,CAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAA2B,EAAE,GAAW,KAAI;gBAC/E,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACpE,CAAC,EAAE,EAAE;SACN;QACD,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA,CAAE;AAE5E,QAAA,IAAI,CAAC,IAAI,IAAI,KAAK;AAElB,QAAA,OAAO,KAAK;IACd;AAEA;;;;;;;;AAQG;IACK,cAAc,CAAC,KAAyB,EAAE,OAA4B,EAAA;AAC5E,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC1B,OAAO,IAAI,CAAC,IAAI;QAClB;AAEA,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,QAAQ,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,EAAE;AAC5E,QAAA,IAAI,CAAC,IAAI,IAAI,KAAK;AAElB,QAAA,OAAO,KAAK;IACd;AAEA;;;;;;AAMG;IACK,WAAW,CAAC,KAAyB,EAAE,OAA4B,EAAA;AACzE,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,KAAK,EAAE;AACtE,QAAA,IAAI,CAAC,IAAI,IAAI,KAAK;AAElB,QAAA,OAAO,KAAK;IACd;AAEA;;;;;;AAMG;IACK,UAAU,CAAC,KAAyB,EAAE,OAA4B,EAAA;AACxE,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,IAAI,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,EAAE;AACpE,QAAA,IAAI,CAAC,IAAI,IAAI,KAAK;AAElB,QAAA,OAAO,KAAK;IACd;AAEA;;;;;;;;AAQG;IACK,UAAU,CAAC,KAAyB,EAAE,OAA4B,EAAA;QACxE,IAAI,KAAK,GAAG,EAAE;AAEd,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;AACvB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,IAAI,GAAG;QAEjD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,KAAI;YAChC,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA,CAAE;YAElE,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,KAAK,IAAI,GAAG;YACd;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,IAAI,KAAK;AAElB,QAAA,OAAO,KAAK;IACd;AAEA;;;;;;;;AAQG;AACK,IAAA,QAAQ,CAAC,KAAyB,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,GAAG;QACZ;QAEA,OAAO,KAAK,CAAC,OAAO,GAAG,CAAA,EAAG,KAAK,CAAC,OAAO,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,CAAA,CAAA,CAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAA,CAAA,CAAG;IACtF;AACD;;ACrND;;;;;;;;;;;;;;;;;AAiBG;MACU,sBAAsB,CAAA;AAEjC;;;;;;AAMG;;IAEI,QAAQ,CAA6B,QAA6B,EAAE,OAAwB,EAAA;AACjG,QAAA,OAAO,IAAI,mBAAmB,CAC5B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EACtB,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAC7B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EACpB,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EACvB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EACzB,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAC7B,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAC7B,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAC1B,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAC9B,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAC9B;IACH;AACD;;AC/BD;;;;;AAKG;AACH,SAASC,wBAAsB,CAAC,MAAkB,EAAA;IAChD,QAAQ,MAAM;QACZ,KAAK,UAAU,CAAC,MAAM;YACpB,OAAO,IAAI,qBAAqB,EAAE;QACpC,KAAK,UAAU,CAAC,MAAM;YACpB,OAAO,IAAI,qBAAqB,EAAE;QACpC,KAAK,UAAU,CAAC,OAAO;YACrB,OAAO,IAAI,sBAAsB,EAAE;;AAEzC;AAEA;;;;;AAKG;AACH,SAASC,yBAAuB,CAAC,MAAkB,EAAA;IACjD,QAAQ,MAAM;QACZ,KAAK,UAAU,CAAC,MAAM;YACpB,OAAO,IAAI,sBAAsB,EAAE;QACrC,KAAK,UAAU,CAAC,MAAM;YACpB,OAAO,IAAI,sBAAsB,EAAE;QACrC,KAAK,UAAU,CAAC,OAAO;YACrB,OAAO,IAAI,uBAAuB,EAAE;;AAE1C;AAEA;MAEa,aAAa,CAAA;AAExB;;;;;AAKG;IACI,OAAO,OAAO,CAAC,MAAe,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAE5B,QAAA,MAAM,eAAe,GAAGD,wBAAsB,CAAC,MAAM,CAAC;AACtD,QAAA,MAAM,gBAAgB,GAAGC,yBAAuB,CAAC,MAAM,CAAC;QAExD,OAAO;AACL,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,SAAS,EAAE;gBACT,WAAW;AACX,gBAAA;oBACE,IAAI,EAAE,CAAC,WAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,cAAc;oBACvB,UAAU,EAAE,CAAC,WAAwB,KACnC,IAAI,cAAc,CAChB,WAAW,EACX,eAAe,EACf,MAAM,EACN,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC;AAEtC,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE,iBAAiB;oBAC1B,UAAU,EAAE,MAAK;AACf,wBAAA,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC;AAEzD,wBAAA,OAAO,MAAM,KAAK,UAAU,CAAC;8BACzB,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,qBAAqB,CAAC,cAAc,CAAC;8BACjF,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,cAAc,CAAC;oBAC7D;AACD;AACF;SACF;IACH;uGAzCW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAb,aAAa,EAAA,CAAA;wGAAb,aAAa,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,QAAQ;mBAAC,EAAE;;;ACnCZ;;;;;AAKG;AACH,SAAS,sBAAsB,CAAC,MAAkB,EAAA;IAChD,QAAQ,MAAM;QACZ,KAAK,UAAU,CAAC,MAAM;YACpB,OAAO,IAAI,qBAAqB,EAAE;QACpC,KAAK,UAAU,CAAC,MAAM;YACpB,OAAO,IAAI,qBAAqB,EAAE;QACpC,KAAK,UAAU,CAAC,OAAO;YACrB,OAAO,IAAI,sBAAsB,EAAE;;AAEzC;AAEA;;;;;AAKG;AACH,SAAS,uBAAuB,CAAC,MAAkB,EAAA;IACjD,QAAQ,MAAM;QACZ,KAAK,UAAU,CAAC,MAAM;YACpB,OAAO,IAAI,sBAAsB,EAAE;QACrC,KAAK,UAAU,CAAC,MAAM;YACpB,OAAO,IAAI,sBAAsB,EAAE;QACrC,KAAK,UAAU,CAAC,OAAO;YACrB,OAAO,IAAI,uBAAuB,EAAE;;AAE1C;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACG,SAAU,cAAc,CAAC,MAAe,EAAA;AAC5C,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,IAAA,MAAM,eAAe,GAAG,sBAAsB,CAAC,MAAM,CAAC;AACtD,IAAA,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,MAAM,CAAC;AAExD,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA;AACE,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,QAAQ,EAAE;AACX,SAAA;AACD,QAAA;YACE,IAAI,EAAE,CAAC,WAAW,CAAC;AACnB,YAAA,OAAO,EAAE,cAAc;YACvB,UAAU,EAAE,CAAC,WAAwB,KACnC,IAAI,cAAc,CAChB,WAAW,EACX,eAAe,EACf,MAAM,EACN,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC;AAEtC,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;YAC1B,UAAU,EAAE,MAAK;AACf,gBAAA,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC;AAEzD,gBAAA,OAAO,MAAM,KAAK,UAAU,CAAC;sBACzB,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,qBAAqB,CAAC,cAAc,CAAC;sBACjF,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC7D;AACD;AACF,KAAA,CAAC;AACJ;;ACrHA;;;;;;;AAOG;IACS;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,MAAY;AACZ,IAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,kBAAA,CAAA,IAAA,CAAA,GAAA,KAAU;AACV,IAAA,kBAAA,CAAA,IAAA,CAAA,GAAA,KAAU;AACV,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,MAAY;AACZ,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,QAAgB;AAChB,IAAA,kBAAA,CAAA,IAAA,CAAA,GAAA,KAAU;AACV,IAAA,kBAAA,CAAA,IAAA,CAAA,GAAA,KAAU;AACV,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,MAAY;AACZ,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,MAAY;AACZ,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,OAAc;AACd,IAAA,kBAAA,CAAA,IAAA,CAAA,GAAA,KAAU;AACZ,CAAC,EAbW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;;ACR9B;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-qubee.mjs","sources":["../../../src/lib/errors/key-not-found.error.ts","../../../src/lib/models/paginated-collection.ts","../../../src/lib/enums/driver.enum.ts","../../../src/lib/models/query-builder-options.ts","../../../src/lib/models/response-options.ts","../../../src/lib/errors/invalid-resource-name.error.ts","../../../src/lib/errors/invalid-page-number.error.ts","../../../src/lib/services/nest.service.ts","../../../src/lib/errors/pagination-not-synced.error.ts","../../../src/lib/errors/unsupported-field-selection.error.ts","../../../src/lib/errors/unsupported-filter.error.ts","../../../src/lib/errors/unsupported-filter-operator.error.ts","../../../src/lib/errors/unsupported-includes.error.ts","../../../src/lib/errors/unsupported-search.error.ts","../../../src/lib/errors/unsupported-select.error.ts","../../../src/lib/errors/unsupported-sort.error.ts","../../../src/lib/tokens/ng-qubee.tokens.ts","../../../src/lib/services/ng-qubee.service.ts","../../../src/lib/services/pagination.service.ts","../../../src/lib/enums/sort.enum.ts","../../../src/lib/errors/invalid-limit.error.ts","../../../src/lib/errors/unselectable-model.error.ts","../../../src/lib/strategies/json-api-request.strategy.ts","../../../src/lib/strategies/json-api-response.strategy.ts","../../../src/lib/strategies/laravel-request.strategy.ts","../../../src/lib/strategies/laravel-response.strategy.ts","../../../src/lib/strategies/nestjs-request.strategy.ts","../../../src/lib/strategies/nestjs-response.strategy.ts","../../../src/lib/strategies/spatie-request.strategy.ts","../../../src/lib/strategies/spatie-response.strategy.ts","../../../src/lib/provide-ngqubee.ts","../../../src/lib/ng-qubee.module.ts","../../../src/lib/enums/filter-operator.enum.ts","../../../src/public-api.ts","../../../src/ng-qubee.ts"],"sourcesContent":["export class KeyNotFoundError extends Error {\n constructor(key: string) {\n super(`Cannot find the key ${key} inside the collection item: does it really exists?`);\n }\n}","import { KeyNotFoundError } from \"../errors/key-not-found.error\";\nimport { INormalized } from \"../interfaces/normalized.interface\";\nimport { IPaginatedObject } from \"../interfaces/paginated-object.interface\";\n\nexport class PaginatedCollection<T extends IPaginatedObject> {\n constructor(\n public data: T[],\n public readonly page: number,\n public readonly from?: number,\n public readonly to?: number,\n public readonly total?: number,\n public readonly perPage?: number,\n public readonly prevPageUrl?: string,\n public readonly nextPageUrl?: string,\n public readonly lastPage?: number,\n public readonly firstPageUrl?: string,\n public readonly lastPageUrl?: string\n ) {\n //\n }\n\n /**\n * Normalize the collection to a paginated list of ids for state-managed applications.\n * \n * This method returns a single key object, where the key is the page number and the associated value is\n * an array of ids. Each id is fetched by the collection items, looking up for the \"id\" key. If an id is supplied\n * to this method, it will be used instead of the default \"id\" key.\n * \n * Please note that in case the key doesn't exist in the collection's item, a KeyNotFoundError is thrown\n * \n * @param k A key to use instead of the default \"id\": this will be searched inside each element of the collection\n * @returns []\n * @throws KeyNotFoundItem\n */\n public normalize(id?: string): INormalized {\n return {\n [this.page]: this.data.reduce((ids: number[], value: T) => {\n if (id && id in value) {\n ids.push(value[id]);\n } else if (value.hasOwnProperty('id')) {\n ids.push(value['id']);\n } else {\n throw new KeyNotFoundError(id || 'id');\n }\n\n return ids;\n }, [])\n }\n }\n}","/**\n * Enum representing the available pagination driver types\n *\n * Each driver encapsulates the full format knowledge for both\n * request building (URI generation) and response parsing.\n */\nexport enum DriverEnum {\n JSON_API = 'json-api',\n LARAVEL = 'laravel',\n NESTJS = 'nestjs',\n SPATIE = 'spatie'\n}\n","import { IQueryBuilderConfig } from '../interfaces/query-builder-config.interface';\n\n/**\n * Resolved query parameter key names with defaults applied\n *\n * Maps logical query concepts to the actual query parameter names\n * used in the generated URI. Unset values fall back to defaults.\n */\nexport class QueryBuilderOptions {\n public readonly appends: string;\n public readonly fields: string;\n public readonly filters: string;\n public readonly includes: string;\n public readonly limit: string;\n public readonly page: string;\n public readonly search: string;\n public readonly select: string;\n public readonly sort: string;\n public readonly sortBy: string;\n\n constructor(options: IQueryBuilderConfig) {\n this.appends = options.appends || 'append';\n this.fields = options.fields || 'fields';\n this.filters = options.filters || 'filter';\n this.includes = options.includes || 'include';\n this.limit = options.limit || 'limit';\n this.page = options.page || 'page';\n this.search = options.search || 'search';\n this.select = options.select || 'select';\n this.sort = options.sort || 'sort';\n this.sortBy = options.sortBy || 'sortBy';\n }\n}\n","import { IPaginationConfig } from '../interfaces/pagination-config.interface';\n\n/**\n * Resolved response field key names with defaults applied\n *\n * Maps logical pagination concepts to the actual key names\n * used in the API response. Unset values fall back to Laravel defaults.\n *\n * For NestJS responses, use dot-notation paths:\n * ```typescript\n * new ResponseOptions({\n * currentPage: 'meta.currentPage',\n * total: 'meta.totalItems'\n * });\n * ```\n */\nexport class ResponseOptions {\n public readonly currentPage: string;\n public readonly data: string;\n public readonly firstPageUrl: string;\n public readonly from: string;\n public readonly lastPage: string;\n public readonly lastPageUrl: string;\n public readonly nextPageUrl: string;\n public readonly path: string;\n public readonly perPage: string;\n public readonly prevPageUrl: string;\n public readonly to: string;\n public readonly total: string;\n\n constructor(options: IPaginationConfig) {\n this.currentPage = options.currentPage || 'current_page';\n this.data = options.data || 'data';\n this.firstPageUrl = options.firstPageUrl || 'first_page_url';\n this.from = options.from || 'from';\n this.lastPage = options.lastPage || 'last_page';\n this.lastPageUrl = options.lastPageUrl || 'last_page_url';\n this.nextPageUrl = options.nextPageUrl || 'next_page_url';\n this.path = options.path || 'path';\n this.perPage = options.perPage || 'per_page';\n this.prevPageUrl = options.prevPageUrl || 'prev_page_url';\n this.to = options.to || 'to';\n this.total = options.total || 'total';\n }\n}\n\n/**\n * Pre-configured ResponseOptions for the JSON:API driver\n *\n * Uses dot-notation paths to access nested values in the JSON:API response format.\n * JSON:API meta key names vary by implementation; these defaults cover the most\n * common conventions and can be fully customised via `IPaginationConfig`.\n */\nexport class JsonApiResponseOptions extends ResponseOptions {\n constructor(options: IPaginationConfig) {\n super({\n currentPage: options.currentPage || 'meta.current-page',\n data: options.data || 'data',\n firstPageUrl: options.firstPageUrl || 'links.first',\n from: options.from || 'meta.from',\n lastPage: options.lastPage || 'meta.page-count',\n lastPageUrl: options.lastPageUrl || 'links.last',\n nextPageUrl: options.nextPageUrl || 'links.next',\n path: options.path || 'path',\n perPage: options.perPage || 'meta.per-page',\n prevPageUrl: options.prevPageUrl || 'links.prev',\n to: options.to || 'meta.to',\n total: options.total || 'meta.total'\n });\n }\n}\n\n/**\n * Pre-configured ResponseOptions for the NestJS driver\n *\n * Uses dot-notation paths to access nested values in the NestJS response format.\n */\nexport class NestjsResponseOptions extends ResponseOptions {\n constructor(options: IPaginationConfig) {\n super({\n currentPage: options.currentPage || 'meta.currentPage',\n data: options.data || 'data',\n firstPageUrl: options.firstPageUrl || 'links.first',\n from: options.from || 'meta.from',\n lastPage: options.lastPage || 'meta.totalPages',\n lastPageUrl: options.lastPageUrl || 'links.last',\n nextPageUrl: options.nextPageUrl || 'links.next',\n path: options.path || 'path',\n perPage: options.perPage || 'meta.itemsPerPage',\n prevPageUrl: options.prevPageUrl || 'links.previous',\n to: options.to || 'meta.to',\n total: options.total || 'meta.totalItems'\n });\n }\n}\n","/**\n * Error thrown when an invalid resource name is provided\n *\n * Resource name must be a non-empty string.\n */\nexport class InvalidResourceNameError extends Error {\n constructor(resource: string | null | undefined) {\n super(\n `Invalid resource name: Resource name must be a non-empty string. Received: ${JSON.stringify(resource)}`\n );\n this.name = 'InvalidResourceNameError';\n }\n}\n","export class InvalidPageNumberError extends Error {\n constructor(page: number) {\n super(\n `Invalid page number: Page must be a positive integer greater than 0. Received: ${page}`\n );\n this.name = 'InvalidPageNumberError';\n }\n}\n","import { Injectable, Signal, WritableSignal, computed, signal } from '@angular/core';\n\nimport { InvalidResourceNameError } from '../errors/invalid-resource-name.error';\nimport { InvalidPageNumberError } from '../errors/invalid-page-number.error';\nimport { IFields } from '../interfaces/fields.interface';\nimport { IFilters } from '../interfaces/filters.interface';\nimport { IOperatorFilter } from '../interfaces/operator-filter.interface';\nimport { IQueryBuilderState } from '../interfaces/query-builder-state.interface';\nimport { ISort } from '../interfaces/sort.interface';\n\nconst INITIAL_STATE: IQueryBuilderState = {\n baseUrl: '',\n fields: {},\n filters: {},\n includes: [],\n isLastPageKnown: false,\n lastPage: 1,\n limit: 15,\n operatorFilters: [],\n page: 1,\n resource: '',\n search: '',\n select: [],\n sorts: []\n};\n\n@Injectable()\nexport class NestService {\n\n /**\n * Private writable signal that holds the Query Builder state\n *\n * @type {IQueryBuilderState}\n */\n private _nest: WritableSignal<IQueryBuilderState> = signal(this._clone(INITIAL_STATE));\n\n /**\n * A computed signal that makes readonly the writable signal _nest\n *\n * @type {Signal<IQueryBuilderState>}\n */\n public nest: Signal<IQueryBuilderState> = computed(() => this._clone(this._nest()));\n\n constructor() {\n // Nothing to see here\n }\n\n /**\n * Set the base URL for the API\n *\n * @param {string} baseUrl - The base URL to prepend to generated URIs\n * @example\n * service.baseUrl = 'https://api.example.com';\n */\n set baseUrl(baseUrl: string) {\n this._nest.update(nest => ({\n ...nest,\n baseUrl\n }));\n }\n\n /**\n * Set the limit for paginated results\n *\n * This setter performs a raw state write. Validation of the value is the\n * responsibility of the active request strategy and is enforced upstream\n * by `NgQubeeService.setLimit()`, because the accepted range depends on\n * the driver (e.g. nestjs-paginate accepts `-1` for \"fetch all\").\n *\n * @param {number} limit - The number of items per page\n * @example\n * service.limit = 25;\n */\n set limit(limit: number) {\n this._nest.update(nest => ({\n ...nest,\n limit\n }));\n }\n\n /**\n * Set the page number for pagination\n * Must be a positive integer greater than 0\n *\n * @param {number} page - The page number to fetch\n * @throws {InvalidPageNumberError} If page is not a positive integer\n * @example\n * service.page = 2;\n */\n set page(page: number) {\n this._validatePageNumber(page);\n this._nest.update(nest => ({\n ...nest,\n page\n }));\n }\n\n /**\n * Set the resource name for the query\n * Must be a non-empty string\n *\n * @param {string} resource - The API resource name (e.g., 'users', 'posts')\n * @throws {InvalidResourceNameError} If resource is not a non-empty string\n * @example\n * service.resource = 'users';\n */\n set resource(resource: string) {\n this._validateResourceName(resource);\n this._nest.update(nest => ({\n ...nest,\n resource\n }));\n }\n\n private _clone<T>(obj: T): T {\n return JSON.parse( JSON.stringify(obj) );\n }\n\n /**\n * Validates that the page number is a positive integer\n *\n * @param {number} page - The page number to validate\n * @throws {InvalidPageNumberError} If page is not a positive integer\n * @private\n */\n private _validatePageNumber(page: number): void {\n if (!Number.isInteger(page) || page < 1) {\n throw new InvalidPageNumberError(page);\n }\n }\n\n /**\n * Validates that the resource name is a non-empty string\n *\n * @param {string} resource - The resource name to validate\n * @throws {InvalidResourceNameError} If resource is not a non-empty string\n * @private\n */\n private _validateResourceName(resource: string): void {\n if (!resource || typeof resource !== 'string' || resource.trim().length === 0) {\n throw new InvalidResourceNameError(resource);\n }\n }\n\n /**\n * Add selectable fields for the given model to the request\n * Automatically prevents duplicate fields for each model\n *\n * @param {IFields} fields - Object mapping model names to arrays of field names\n * @return {void}\n * @example\n * service.addFields({ users: ['id', 'email', 'username'] });\n * service.addFields({ posts: ['title', 'content'] });\n */\n public addFields(fields: IFields): void {\n this._nest.update(nest => {\n const mergedFields = { ...nest.fields };\n\n Object.keys(fields).forEach(model => {\n const existingFields = mergedFields[model] || [];\n const newFields = fields[model];\n\n // Use Set to prevent duplicates\n const uniqueFields = Array.from(new Set([...existingFields, ...newFields]));\n mergedFields[model] = uniqueFields;\n });\n\n return {\n ...nest,\n fields: mergedFields\n };\n });\n }\n\n /**\n * Add filters to the request\n * Automatically prevents duplicate filter values for each filter key\n *\n * @param {IFilters} filters - Object mapping filter keys to arrays of values\n * @return {void}\n * @example\n * service.addFilters({ id: [1, 2, 3] });\n * service.addFilters({ status: ['active', 'pending'] });\n */\n public addFilters(filters: IFilters): void {\n this._nest.update(nest => {\n const mergedFilters = { ...nest.filters };\n\n Object.keys(filters).forEach(key => {\n const existingValues = mergedFilters[key] || [];\n const newValues = filters[key];\n\n // Use Set to prevent duplicates\n const uniqueValues = Array.from(new Set([...existingValues, ...newValues]));\n mergedFilters[key] = uniqueValues;\n });\n\n return {\n ...nest,\n filters: mergedFilters\n };\n });\n }\n\n /**\n * Add resources to include with the request\n * Automatically prevents duplicate includes\n *\n * @param {string[]} includes - Array of resource names to include in the response\n * @return {void}\n * @example\n * service.addIncludes(['profile', 'posts']);\n * service.addIncludes(['comments']);\n */\n public addIncludes(includes: string[]): void {\n this._nest.update(nest => {\n // Use Set to prevent duplicates\n const uniqueIncludes = Array.from(new Set([...nest.includes, ...includes]));\n\n return {\n ...nest,\n includes: uniqueIncludes\n };\n });\n }\n\n /**\n * Add filters with explicit operators (NestJS only)\n * Automatically prevents duplicate operator filters for the same field + operator combination\n *\n * @param {IOperatorFilter[]} filters - Array of operator filter configurations\n * @return {void}\n * @example\n * import { FilterOperatorEnum } from 'ng-qubee';\n * service.addOperatorFilters([{ field: 'age', operator: FilterOperatorEnum.GTE, values: [18] }]);\n */\n public addOperatorFilters(filters: IOperatorFilter[]): void {\n this._nest.update(nest => {\n const merged = [...nest.operatorFilters];\n\n filters.forEach(newFilter => {\n const existingIdx = merged.findIndex(\n f => f.field === newFilter.field && f.operator === newFilter.operator\n );\n\n if (existingIdx > -1) {\n const existingValues = merged[existingIdx].values;\n merged[existingIdx] = {\n ...merged[existingIdx],\n values: Array.from(new Set([...existingValues, ...newFilter.values]))\n };\n } else {\n merged.push({ ...newFilter });\n }\n });\n\n return {\n ...nest,\n operatorFilters: merged\n };\n });\n }\n\n /**\n * Add flat field selection columns (NestJS only)\n * Automatically prevents duplicate select fields\n *\n * @param {string[]} fields - Array of column names to select\n * @return {void}\n * @example\n * service.addSelect(['id', 'name', 'email']);\n */\n public addSelect(fields: string[]): void {\n this._nest.update(nest => {\n const uniqueSelect = Array.from(new Set([...nest.select, ...fields]));\n\n return {\n ...nest,\n select: uniqueSelect\n };\n });\n }\n\n /**\n * Add a field that should be used for sorting data\n *\n * @param {ISort} sort - Sort configuration with field name and order (ASC/DESC)\n * @return {void}\n * @example\n * import { SortEnum } from 'ng-qubee';\n * service.addSort({ field: 'created_at', order: SortEnum.DESC });\n * service.addSort({ field: 'name', order: SortEnum.ASC });\n */\n public addSort(sort: ISort): void {\n this._nest.update(nest => ({\n ...nest,\n sorts: [...nest.sorts, sort]\n }));\n }\n\n /**\n * Remove fields for the given model\n * Uses deep cloning to prevent mutations to the original state\n *\n * @param {IFields} fields - Object mapping model names to arrays of field names to remove\n * @return {void}\n * @example\n * service.deleteFields({ users: ['email'] });\n * service.deleteFields({ posts: ['content', 'body'] });\n */\n public deleteFields(fields: IFields): void {\n // Deep clone the fields object to prevent mutations\n const f = this._clone(this._nest().fields);\n\n Object.keys(fields).forEach(k => {\n if (!(k in f)) {\n return;\n }\n\n f[k] = f[k].filter(v => !fields[k].includes(v));\n });\n\n this._nest.update(nest => ({\n ...nest,\n fields: f\n }));\n }\n\n /**\n * Remove filters from the request\n * Uses deep cloning to prevent mutations to the original state\n *\n * @param {...string[]} filters - Filter keys to remove\n * @return {void}\n * @example\n * service.deleteFilters('id');\n * service.deleteFilters('status', 'type');\n */\n public deleteFilters(...filters: string[]): void {\n // Deep clone the filters object to prevent mutations\n const f = this._clone(this._nest().filters);\n\n filters.forEach(k => delete f[k]);\n\n this._nest.update(nest => ({\n ...nest,\n filters: f\n }));\n }\n\n /**\n * Remove includes from the request\n *\n * @param {...string[]} includes - Include names to remove\n * @return {void}\n * @example\n * service.deleteIncludes('profile');\n * service.deleteIncludes('posts', 'comments');\n */\n public deleteIncludes(...includes: string[]): void {\n this._nest.update(nest => ({\n ...nest,\n includes: nest.includes.filter(v => !includes.includes(v))\n }));\n }\n\n /**\n * Remove operator filters by field name (NestJS only)\n *\n * @param {...string[]} fields - Field names of operator filters to remove\n * @return {void}\n * @example\n * service.deleteOperatorFilters('age');\n * service.deleteOperatorFilters('price', 'quantity');\n */\n public deleteOperatorFilters(...fields: string[]): void {\n this._nest.update(nest => ({\n ...nest,\n operatorFilters: nest.operatorFilters.filter(f => !fields.includes(f.field))\n }));\n }\n\n /**\n * Remove the search term from the state (NestJS only)\n *\n * @return {void}\n * @example\n * service.deleteSearch();\n */\n public deleteSearch(): void {\n this._nest.update(nest => ({\n ...nest,\n search: ''\n }));\n }\n\n /**\n * Remove flat field selections from the state (NestJS only)\n *\n * @param {...string[]} fields - Field names to remove from selection\n * @return {void}\n * @example\n * service.deleteSelect('email');\n * service.deleteSelect('name', 'email');\n */\n public deleteSelect(...fields: string[]): void {\n this._nest.update(nest => ({\n ...nest,\n select: nest.select.filter(f => !fields.includes(f))\n }));\n }\n\n /**\n * Remove sorts from the request by field name\n *\n * @param {...string[]} sorts - Field names of sorts to remove\n * @return {void}\n * @example\n * service.deleteSorts('created_at');\n * service.deleteSorts('name', 'created_at');\n */\n public deleteSorts(...sorts: string[]): void {\n const s = [...this._nest().sorts];\n\n sorts.forEach(field => {\n const p = s.findIndex(sort => sort.field === field);\n\n if (p > -1) {\n s.splice(p, 1);\n }\n });\n\n this._nest.update(nest => ({\n ...nest,\n sorts: s\n }));\n }\n\n /**\n * Set the full-text search term (NestJS only)\n *\n * @param {string} search - The search term\n * @return {void}\n * @example\n * service.setSearch('john doe');\n */\n public setSearch(search: string): void {\n this._nest.update(nest => ({\n ...nest,\n search\n }));\n }\n\n /**\n * Atomically record the `lastPage` value from a paginated response and\n * flip `isLastPageKnown` to `true`\n *\n * Called exclusively by `PaginationService.paginate()` as part of the\n * auto-sync contract; not intended to be invoked by consumers directly.\n * Keeping the two fields under a single write guarantees they cannot\n * drift out of sync.\n *\n * @param {number} lastPage - The last page number parsed from the most recent paginated response\n * @return {void}\n */\n public syncLastPage(lastPage: number): void {\n this._nest.update(nest => ({\n ...nest,\n isLastPageKnown: true,\n lastPage\n }));\n }\n\n /**\n * Reset the query builder state to initial values\n * Clears all fields, filters, includes, sorts, and resets pagination\n *\n * @return {void}\n * @example\n * service.reset();\n */\n public reset(): void {\n this._nest.update(_ => this._clone(INITIAL_STATE));\n }\n}\n","/**\n * Thrown when a pagination helper that needs `state.lastPage` is called\n * before `PaginationService.paginate()` has ever synced a value.\n *\n * Examples: `NgQubeeService.lastPage()`, `NgQubeeService.totalPages()`.\n *\n * Safe-for-templates predicates (`isLastPage`, `hasNextPage`, etc.) do not\n * throw and return conservative defaults instead.\n */\nexport class PaginationNotSyncedError extends Error {\n\n /**\n * @param action - Short imperative describing what the caller was trying\n * to do (e.g. \"navigate to last page\", \"read totalPages\"). Surfaced in\n * the error message so the cause is obvious at the call site.\n */\n constructor(action: string) {\n super(`Cannot ${action}: no paginated response has been synced yet. Call PaginationService.paginate() at least once first.`);\n this.name = 'PaginationNotSyncedError';\n }\n}\n","/**\n * Error thrown when per-model field selection is attempted with a driver that does not support it\n *\n * Per-model field selection is only supported by the Spatie driver.\n * Use `addSelect()` for NestJS flat field selection.\n */\nexport class UnsupportedFieldSelectionError extends Error {\n constructor() {\n super('Per-model field selection is only supported by the Spatie driver. Use addSelect() for NestJS.');\n this.name = 'UnsupportedFieldSelectionError';\n }\n}\n","/**\n * Error thrown when filters are attempted with a driver that does not support them\n *\n * Filters are only supported by the Spatie and NestJS drivers.\n */\nexport class UnsupportedFilterError extends Error {\n constructor() {\n super('Filters are only supported by the Spatie and NestJS drivers.');\n this.name = 'UnsupportedFilterError';\n }\n}\n","/**\n * Error thrown when filter operators are attempted with a driver that does not support them\n *\n * Filter operators are only supported by the NestJS driver.\n * Use `addFilter()` for Spatie implicit equality filters.\n */\nexport class UnsupportedFilterOperatorError extends Error {\n constructor() {\n super('Filter operators are only supported by the NestJS driver. Use addFilter() for Spatie.');\n this.name = 'UnsupportedFilterOperatorError';\n }\n}\n","/**\n * Error thrown when includes are attempted with a driver that does not support them\n *\n * Includes are only supported by the Spatie driver.\n */\nexport class UnsupportedIncludesError extends Error {\n constructor() {\n super('Includes are only supported by the Spatie driver.');\n this.name = 'UnsupportedIncludesError';\n }\n}\n","/**\n * Error thrown when search is attempted with a driver that does not support it\n *\n * Search is only supported by the NestJS driver.\n */\nexport class UnsupportedSearchError extends Error {\n constructor() {\n super('Search is only supported by the NestJS driver.');\n this.name = 'UnsupportedSearchError';\n }\n}\n","/**\n * Error thrown when flat field selection is attempted with a driver that does not support it\n *\n * Flat field selection is only supported by the NestJS driver.\n * Use `addFields()` for Spatie per-model field selection.\n */\nexport class UnsupportedSelectError extends Error {\n constructor() {\n super('Flat field selection is only supported by the NestJS driver. Use addFields() for Spatie.');\n this.name = 'UnsupportedSelectError';\n }\n}\n","/**\n * Error thrown when sorts are attempted with a driver that does not support them\n *\n * Sorts are only supported by the Spatie and NestJS drivers.\n */\nexport class UnsupportedSortError extends Error {\n constructor() {\n super('Sorts are only supported by the Spatie and NestJS drivers.');\n this.name = 'UnsupportedSortError';\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { DriverEnum } from '../enums/driver.enum';\nimport { IRequestStrategy } from '../interfaces/request-strategy.interface';\nimport { IResponseStrategy } from '../interfaces/response-strategy.interface';\nimport { QueryBuilderOptions } from '../models/query-builder-options';\nimport { ResponseOptions } from '../models/response-options';\n\n/**\n * Injection token for the active pagination driver\n *\n * Provided by `provideNgQubee()` / `NgQubeeModule.forRoot()` from the\n * user-supplied `IConfig.driver`. Services read it to gate driver-specific\n * behavior (e.g. `NgQubeeService._assertDriver`).\n */\nexport const NG_QUBEE_DRIVER = new InjectionToken<DriverEnum>('NG_QUBEE_DRIVER');\n\n/**\n * Injection token for the resolved request URI strategy\n *\n * Provided by `provideNgQubee()` / `NgQubeeModule.forRoot()` based on the\n * active driver. Used by `NgQubeeService` to build request URIs.\n */\nexport const NG_QUBEE_REQUEST_STRATEGY = new InjectionToken<IRequestStrategy>('NG_QUBEE_REQUEST_STRATEGY');\n\n/**\n * Injection token for the resolved request query-parameter key options\n *\n * Provided as a fully-built `QueryBuilderOptions` instance. `provideNgQubee()`\n * constructs it from `IConfig.request`; consumers don't interact with this\n * token directly.\n */\nexport const NG_QUBEE_REQUEST_OPTIONS = new InjectionToken<QueryBuilderOptions>('NG_QUBEE_REQUEST_OPTIONS');\n\n/**\n * Injection token for the resolved response parsing strategy\n *\n * Provided by `provideNgQubee()` / `NgQubeeModule.forRoot()` based on the\n * active driver. Used by `PaginationService` to parse paginated responses.\n */\nexport const NG_QUBEE_RESPONSE_STRATEGY = new InjectionToken<IResponseStrategy>('NG_QUBEE_RESPONSE_STRATEGY');\n\n/**\n * Injection token for the resolved response field-key options\n *\n * Provided as a fully-built `ResponseOptions` instance (or a driver-specific\n * subclass like `JsonApiResponseOptions` / `NestjsResponseOptions`).\n * `provideNgQubee()` constructs the correct variant from `IConfig.response`.\n */\nexport const NG_QUBEE_RESPONSE_OPTIONS = new InjectionToken<ResponseOptions>('NG_QUBEE_RESPONSE_OPTIONS');\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, filter, throwError } from 'rxjs';\n\n// Enums\nimport { DriverEnum } from '../enums/driver.enum';\nimport { FilterOperatorEnum } from '../enums/filter-operator.enum';\nimport { SortEnum } from '../enums/sort.enum';\n\n// Errors\nimport { InvalidPageNumberError } from '../errors/invalid-page-number.error';\nimport { PaginationNotSyncedError } from '../errors/pagination-not-synced.error';\nimport { UnsupportedFieldSelectionError } from '../errors/unsupported-field-selection.error';\nimport { UnsupportedFilterError } from '../errors/unsupported-filter.error';\nimport { UnsupportedFilterOperatorError } from '../errors/unsupported-filter-operator.error';\nimport { UnsupportedIncludesError } from '../errors/unsupported-includes.error';\nimport { UnsupportedSearchError } from '../errors/unsupported-search.error';\nimport { UnsupportedSelectError } from '../errors/unsupported-select.error';\nimport { UnsupportedSortError } from '../errors/unsupported-sort.error';\n\n// Interfaces\nimport { IFields } from '../interfaces/fields.interface';\nimport { IRequestStrategy } from '../interfaces/request-strategy.interface';\n\n// Models\nimport { QueryBuilderOptions } from '../models/query-builder-options';\n\n// Services\nimport { NestService } from './nest.service';\n\n// Tokens\nimport { NG_QUBEE_DRIVER, NG_QUBEE_REQUEST_OPTIONS, NG_QUBEE_REQUEST_STRATEGY } from '../tokens/ng-qubee.tokens';\n\n@Injectable()\nexport class NgQubeeService {\n\n /**\n * The active pagination driver\n */\n private _driver: DriverEnum;\n\n /**\n * Resolved query parameter key name options\n */\n private _options: QueryBuilderOptions;\n\n /**\n * The request strategy that builds URIs for the active driver\n */\n private _requestStrategy: IRequestStrategy;\n\n /**\n * Internal BehaviorSubject that holds the latest generated URI\n */\n private _uri$: BehaviorSubject<string> = new BehaviorSubject('');\n\n /**\n * Observable that emits non-empty generated URIs\n */\n public uri$: Observable<string> = this._uri$.asObservable().pipe(\n filter(uri => !!uri)\n );\n\n constructor(\n private _nestService: NestService,\n @Inject(NG_QUBEE_REQUEST_STRATEGY) requestStrategy: IRequestStrategy,\n @Inject(NG_QUBEE_DRIVER) driver: DriverEnum,\n @Inject(NG_QUBEE_REQUEST_OPTIONS) options: QueryBuilderOptions = new QueryBuilderOptions({})\n ) {\n this._driver = driver;\n this._options = options;\n this._requestStrategy = requestStrategy;\n }\n\n /**\n * Assert that the active driver is one of the allowed drivers\n *\n * @param allowed - The allowed drivers\n * @param error - The error to throw if the driver is not allowed\n * @throws The provided error if the active driver is not in the allowed list\n */\n private _assertDriver(allowed: DriverEnum[], error: Error): void {\n if (!allowed.includes(this._driver)) {\n throw error;\n }\n }\n\n /**\n * Add fields to the select statement for the given model (JSON:API and Spatie only)\n *\n * @param model - Model that holds the fields\n * @param fields - Fields to select\n * @returns {this}\n * @throws {UnsupportedFieldSelectionError} If the active driver does not support per-model field selection\n */\n public addFields(model: string, fields: string[]): this {\n this._assertDriver([DriverEnum.JSON_API, DriverEnum.SPATIE], new UnsupportedFieldSelectionError());\n\n if (!fields.length) {\n return this;\n }\n\n this._nestService.addFields({ [model]: fields });\n\n return this;\n }\n\n /**\n * Add a filter with the given value(s) (JSON:API, NestJS, and Spatie)\n *\n * Produces: `filter[field]=value` (JSON:API / Spatie) or `filter.field=value` (NestJS)\n *\n * @param {string} field - Name of the field to filter\n * @param {(string | number | boolean)[]} values - The needle(s)\n * @returns {this}\n * @throws {UnsupportedFilterError} If the active driver does not support filters\n */\n public addFilter(field: string, ...values: (string | number | boolean)[]): this {\n this._assertDriver([DriverEnum.JSON_API, DriverEnum.NESTJS, DriverEnum.SPATIE], new UnsupportedFilterError());\n\n if (!values.length) {\n return this;\n }\n\n this._nestService.addFilters({\n [field]: values\n });\n this._nestService.page = 1;\n\n return this;\n }\n\n /**\n * Add a filter with an explicit operator (NestJS only)\n *\n * Produces: `filter.field=$operator:value`\n *\n * @param {string} field - Name of the field to filter\n * @param {FilterOperatorEnum} operator - The filter operator to apply\n * @param {(string | number | boolean)[]} values - The value(s) for the filter\n * @returns {this}\n * @throws {UnsupportedFilterOperatorError} If the active driver does not support filter operators\n */\n public addFilterOperator(field: string, operator: FilterOperatorEnum, ...values: (string | number | boolean)[]): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedFilterOperatorError());\n\n if (!values.length) {\n return this;\n }\n\n this._nestService.addOperatorFilters([{ field, operator, values }]);\n this._nestService.page = 1;\n\n return this;\n }\n\n /**\n * Add related entities to include in the request (JSON:API and Spatie only)\n *\n * @param {string[]} models - Models to include\n * @returns {this}\n * @throws {UnsupportedIncludesError} If the active driver does not support includes\n */\n public addIncludes(...models: string[]): this {\n this._assertDriver([DriverEnum.JSON_API, DriverEnum.SPATIE], new UnsupportedIncludesError());\n\n if (!models.length) {\n return this;\n }\n\n this._nestService.addIncludes(models);\n\n return this;\n }\n\n /**\n * Add flat field selection (NestJS only)\n *\n * Produces: `select=col1,col2`\n *\n * @param {string[]} fields - Fields to select\n * @returns {this}\n * @throws {UnsupportedSelectError} If the active driver does not support flat field selection\n */\n public addSelect(...fields: string[]): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedSelectError());\n\n if (!fields.length) {\n return this;\n }\n\n this._nestService.addSelect(fields);\n\n return this;\n }\n\n /**\n * Add a field with a sort criteria (JSON:API, NestJS, and Spatie)\n *\n * @param field - Field to use for sorting\n * @param {SortEnum} order - A value from the SortEnum enumeration\n * @returns {this}\n * @throws {UnsupportedSortError} If the active driver does not support sorts\n */\n public addSort(field: string, order: SortEnum): this {\n this._assertDriver([DriverEnum.JSON_API, DriverEnum.NESTJS, DriverEnum.SPATIE], new UnsupportedSortError());\n\n this._nestService.addSort({\n field,\n order\n });\n this._nestService.page = 1;\n\n return this;\n }\n\n /**\n * Get the current page number\n *\n * @remarks Always safe to call. Thin accessor over the internal state's `page` field.\n * @returns The current page number\n */\n public currentPage(): number {\n return this._nestService.nest().page;\n }\n\n /**\n * Delete selected fields for the given models in the current query builder state (JSON:API and Spatie only)\n *\n * ```\n * ngQubeeService.deleteFields({\n * users: ['email', 'password'],\n * address: ['zipcode']\n * });\n * ```\n *\n * @param {IFields} fields - Object mapping model names to field arrays to remove\n * @returns {this}\n * @throws {UnsupportedFieldSelectionError} If the active driver does not support per-model field selection\n */\n public deleteFields(fields: IFields): this {\n this._assertDriver([DriverEnum.JSON_API, DriverEnum.SPATIE], new UnsupportedFieldSelectionError());\n this._nestService.deleteFields(fields);\n\n return this;\n }\n\n /**\n * Delete selected fields for the given model in the current query builder state (JSON:API and Spatie only)\n *\n * ```\n * ngQubeeService.deleteFieldsByModel('users', 'email', 'password');\n * ```\n *\n * @param model - Model that holds the fields\n * @param {string[]} fields - Fields to delete from the state\n * @returns {this}\n * @throws {UnsupportedFieldSelectionError} If the active driver does not support per-model field selection\n */\n public deleteFieldsByModel(model: string, ...fields: string[]): this {\n this._assertDriver([DriverEnum.JSON_API, DriverEnum.SPATIE], new UnsupportedFieldSelectionError());\n\n if (!fields.length) {\n return this;\n }\n\n this._nestService.deleteFields({\n [model]: fields\n });\n\n return this;\n }\n\n /**\n * Remove given filters from the query builder state (JSON:API, NestJS, and Spatie)\n *\n * @param {string[]} filters - Filters to remove\n * @returns {this}\n * @throws {UnsupportedFilterError} If the active driver does not support filters\n */\n public deleteFilters(...filters: string[]): this {\n this._assertDriver([DriverEnum.JSON_API, DriverEnum.NESTJS, DriverEnum.SPATIE], new UnsupportedFilterError());\n\n if (!filters.length) {\n return this;\n }\n\n this._nestService.deleteFilters(...filters);\n this._nestService.page = 1;\n\n return this;\n }\n\n /**\n * Remove selected related models from the query builder state (JSON:API and Spatie only)\n *\n * @param {string[]} includes - Models to remove\n * @returns {this}\n * @throws {UnsupportedIncludesError} If the active driver does not support includes\n */\n public deleteIncludes(...includes: string[]): this {\n this._assertDriver([DriverEnum.JSON_API, DriverEnum.SPATIE], new UnsupportedIncludesError());\n\n if (!includes.length) {\n return this;\n }\n\n this._nestService.deleteIncludes(...includes);\n\n return this;\n }\n\n /**\n * Remove operator filters by field name (NestJS only)\n *\n * @param {string[]} fields - Field names of operator filters to remove\n * @returns {this}\n * @throws {UnsupportedFilterOperatorError} If the active driver does not support filter operators\n */\n public deleteOperatorFilters(...fields: string[]): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedFilterOperatorError());\n\n if (!fields.length) {\n return this;\n }\n\n this._nestService.deleteOperatorFilters(...fields);\n this._nestService.page = 1;\n\n return this;\n }\n\n /**\n * Remove search term from the query builder state (NestJS only)\n *\n * @returns {this}\n * @throws {UnsupportedSearchError} If the active driver does not support search\n */\n public deleteSearch(): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedSearchError());\n this._nestService.deleteSearch();\n this._nestService.page = 1;\n\n return this;\n }\n\n /**\n * Remove flat field selections from the query builder state (NestJS only)\n *\n * @param {string[]} fields - Fields to remove from selection\n * @returns {this}\n * @throws {UnsupportedSelectError} If the active driver does not support flat field selection\n */\n public deleteSelect(...fields: string[]): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedSelectError());\n\n if (!fields.length) {\n return this;\n }\n\n this._nestService.deleteSelect(...fields);\n\n return this;\n }\n\n /**\n * Remove sort rules from the query builder state (JSON:API, NestJS, and Spatie)\n *\n * @param sorts - Fields used for sorting to remove\n * @returns {this}\n * @throws {UnsupportedSortError} If the active driver does not support sorts\n */\n public deleteSorts(...sorts: string[]): this {\n this._assertDriver([DriverEnum.JSON_API, DriverEnum.NESTJS, DriverEnum.SPATIE], new UnsupportedSortError());\n this._nestService.deleteSorts(...sorts);\n this._nestService.page = 1;\n\n return this;\n }\n\n /**\n * Navigate to the first page (page 1)\n *\n * @remarks Never throws. Idempotent when already on page 1.\n * @returns {this}\n */\n public firstPage(): this {\n this._nestService.page = 1;\n\n return this;\n }\n\n /**\n * Generate a URI accordingly to the given data and active driver\n *\n * @returns {Observable<string>} An observable that emits the generated URI\n */\n public generateUri(): Observable<string> {\n try {\n this._uri$.next(this._requestStrategy.buildUri(this._nestService.nest(), this._options));\n return this.uri$;\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n /**\n * Navigate directly to the specified page\n *\n * Validates integer/positive via the existing `setPage` path, and\n * additionally rejects values that exceed `state.lastPage` when\n * pagination bounds are known.\n *\n * @param n - Target page number\n * @returns {this}\n * @throws {InvalidPageNumberError} If `n` is not a positive integer, or if `n > state.lastPage` when `state.isLastPageKnown` is true\n */\n public goToPage(n: number): this {\n const state = this._nestService.nest();\n\n if (state.isLastPageKnown && n > state.lastPage) {\n throw new InvalidPageNumberError(n);\n }\n\n this._nestService.page = n;\n\n return this;\n }\n\n /**\n * Check whether a next page exists\n *\n * @remarks Template-safe. Returns `true` when pagination bounds are unknown (conservative default — keeps a \"Next\" button enabled before the first `paginate()` call).\n * @returns `true` if `state.page < state.lastPage` when bounds are known, or `true` when bounds are unknown\n */\n public hasNextPage(): boolean {\n const state = this._nestService.nest();\n\n return !state.isLastPageKnown || state.page < state.lastPage;\n }\n\n /**\n * Check whether a previous page exists\n *\n * @remarks Always safe. Does not require a synced paginated response.\n * @returns `true` if `state.page > 1`\n */\n public hasPreviousPage(): boolean {\n return this._nestService.nest().page > 1;\n }\n\n /**\n * Check whether the current page is the first page\n *\n * @remarks Always safe. Does not require a synced paginated response.\n * @returns `true` if `state.page === 1`\n */\n public isFirstPage(): boolean {\n return this._nestService.nest().page === 1;\n }\n\n /**\n * Check whether the current page is the last page\n *\n * @remarks Template-safe. Returns `false` when pagination bounds are unknown (no paginated response has been synced yet) — keeps \"Next\" navigation unblocked until the first `paginate()` call syncs.\n * @returns `true` only when `state.isLastPageKnown` and `state.page === state.lastPage`\n */\n public isLastPage(): boolean {\n const state = this._nestService.nest();\n\n return state.isLastPageKnown && state.page === state.lastPage;\n }\n\n /**\n * Navigate to the last page known from the most recent paginated response\n *\n * @remarks Requires at least one `PaginationService.paginate()` call to have synced `state.lastPage`. Before that, the bound is unknown and this method throws.\n * @returns {this}\n * @throws {PaginationNotSyncedError} If `state.isLastPageKnown` is false (no paginated response has been synced yet)\n */\n public lastPage(): this {\n const state = this._nestService.nest();\n\n if (!state.isLastPageKnown) {\n throw new PaginationNotSyncedError('navigate to last page');\n }\n\n this._nestService.page = state.lastPage;\n\n return this;\n }\n\n /**\n * Navigate to the next page\n *\n * @remarks Never throws. Idempotent at the known last page (no-op). Pair with `hasNextPage()` for a disable-state binding.\n * @returns {this}\n */\n public nextPage(): this {\n const state = this._nestService.nest();\n\n if (state.isLastPageKnown && state.page >= state.lastPage) {\n return this;\n }\n\n this._nestService.page = state.page + 1;\n\n return this;\n }\n\n /**\n * Navigate to the previous page\n *\n * @remarks Never throws. Idempotent at page 1 (floored). Pair with `hasPreviousPage()` for a disable-state binding.\n * @returns {this}\n */\n public previousPage(): this {\n const state = this._nestService.nest();\n\n if (state.page <= 1) {\n return this;\n }\n\n this._nestService.page = state.page - 1;\n\n return this;\n }\n\n /**\n * Clear the current state and reset the Query Builder to a fresh, clean condition\n *\n * @returns {this}\n */\n public reset(): this {\n this._nestService.reset();\n\n return this;\n }\n\n /**\n * Set the base URL to use for composing the address\n *\n * @param {string} baseUrl - The base URL\n * @returns {this}\n */\n public setBaseUrl(baseUrl: string): this {\n this._nestService.baseUrl = baseUrl;\n\n return this;\n }\n\n /**\n * Set the items per page number\n *\n * Validation is delegated to the active request strategy because the\n * accepted range is driver-specific: nestjs-paginate additionally accepts\n * `-1` as a \"fetch all\" sentinel, while Laravel, Spatie, and JSON:API\n * require a positive integer.\n *\n * @param limit - Number of items per page (or `-1` to fetch all, NestJS only)\n * @returns {this}\n * @throws {import('../errors/invalid-limit.error').InvalidLimitError} If the value is not accepted by the active driver\n */\n public setLimit(limit: number): this {\n this._requestStrategy.validateLimit(limit);\n this._nestService.limit = limit;\n this._nestService.page = 1;\n\n return this;\n }\n\n /**\n * Set the page that the backend will use to paginate the result set\n *\n * @param page - Page number\n * @returns {this}\n */\n public setPage(page: number): this {\n this._nestService.page = page;\n\n return this;\n }\n\n /**\n * Set the API resource to run the query against\n *\n * @param {string} resource - Resource name (e.g. 'users' produces /users)\n * @returns {this}\n */\n public setResource(resource: string): this {\n this._nestService.resource = resource;\n this._nestService.page = 1;\n\n return this;\n }\n\n /**\n * Set the search term for full-text search (NestJS only)\n *\n * Produces: `search=term`\n *\n * @param {string} search - The search term\n * @returns {this}\n * @throws {UnsupportedSearchError} If the active driver does not support search\n */\n public setSearch(search: string): this {\n this._assertDriver([DriverEnum.NESTJS], new UnsupportedSearchError());\n this._nestService.setSearch(search);\n this._nestService.page = 1;\n\n return this;\n }\n\n /**\n * Get the total number of pages reported by the most recent paginated response\n *\n * @remarks Throws when called before any `paginate()` has synced a value. For a non-throwing read in a template, read `nest().isLastPageKnown` first as a guard.\n * @returns The last page number\n * @throws {PaginationNotSyncedError} If `state.isLastPageKnown` is false (no paginated response has been synced yet)\n */\n public totalPages(): number {\n const state = this._nestService.nest();\n\n if (!state.isLastPageKnown) {\n throw new PaginationNotSyncedError('read totalPages');\n }\n\n return state.lastPage;\n }\n}\n","import { Inject, Injectable } from '@angular/core';\n\nimport { IPaginatedObject } from '../interfaces/paginated-object.interface';\nimport { IResponseStrategy } from '../interfaces/response-strategy.interface';\nimport { PaginatedCollection } from '../models/paginated-collection';\nimport { ResponseOptions } from '../models/response-options';\nimport { NestService } from './nest.service';\nimport { NG_QUBEE_RESPONSE_OPTIONS, NG_QUBEE_RESPONSE_STRATEGY } from '../tokens/ng-qubee.tokens';\n\n@Injectable()\nexport class PaginationService {\n\n /**\n * The NestService instance that owns the query-builder state for this\n * PaginationService's scope (environment-level by default, or\n * component-level when used via `provideNgQubeeInstance()`)\n */\n private _nestService: NestService;\n\n /**\n * Resolved response key name options\n */\n private _options: ResponseOptions;\n\n /**\n * The response strategy that parses responses for the active driver\n */\n private _responseStrategy: IResponseStrategy;\n\n constructor(\n nestService: NestService,\n @Inject(NG_QUBEE_RESPONSE_STRATEGY) responseStrategy: IResponseStrategy,\n @Inject(NG_QUBEE_RESPONSE_OPTIONS) options: ResponseOptions = new ResponseOptions({})\n ) {\n this._nestService = nestService;\n this._options = options;\n this._responseStrategy = responseStrategy;\n }\n\n /**\n * Transform a raw API response into a typed PaginatedCollection\n *\n * Delegates to the active driver's response strategy for parsing, then\n * auto-syncs the parsed `page` and `lastPage` back into `NestService`\n * so pagination navigation helpers on `NgQubeeService` can operate\n * against the live server-reported bounds without consumer bookkeeping.\n *\n * @remarks\n * `lastPage` is only synced when the response yields a positive integer.\n * Server-emitted `0` (empty collection edge case) and absent fields are\n * treated as \"no useful info\" and leave `isLastPageKnown: false`.\n *\n * @param response - The raw API response object\n * @returns A typed PaginatedCollection instance\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public paginate<T extends IPaginatedObject>(response: { [key: string]: any }): PaginatedCollection<T> {\n const collection = this._responseStrategy.paginate<T>(response, this._options);\n\n this._nestService.page = collection.page;\n\n if (typeof collection.lastPage === 'number' && Number.isInteger(collection.lastPage) && collection.lastPage > 0) {\n this._nestService.syncLastPage(collection.lastPage);\n }\n\n return collection;\n }\n}\n","export enum SortEnum {\n ASC = 'asc',\n DESC = 'desc'\n}","/**\n * Thrown when a limit value does not satisfy the active driver's constraints\n *\n * Validation is driver-scoped: most drivers require an integer `>= 1`, while\n * the NestJS driver additionally accepts `-1` as a \"fetch all items\" sentinel\n * (as documented by nestjs-paginate). The message is tailored accordingly so\n * the caller understands which values are permitted.\n */\nexport class InvalidLimitError extends Error {\n\n /**\n * @param limit - The rejected limit value\n * @param allowFetchAll - Whether the active driver accepts `-1` (fetch all)\n */\n constructor(limit: number, allowFetchAll: boolean = false) {\n const allowed = allowFetchAll\n ? 'a positive integer greater than 0, or -1 to fetch all items'\n : 'a positive integer greater than 0';\n\n super(`Invalid limit value: Limit must be ${allowed}. Received: ${limit}`);\n this.name = 'InvalidLimitError';\n }\n}\n","export class UnselectableModelError extends Error {\n constructor(model: string) {\n super(`Unselectable Model: the selected model (${model}) is not present neither in the \"model\" property, nor in the includes object.`);\n }\n}","import * as qs from 'qs';\n\nimport { SortEnum } from '../enums/sort.enum';\nimport { InvalidLimitError } from '../errors/invalid-limit.error';\nimport { UnselectableModelError } from '../errors/unselectable-model.error';\nimport { IQueryBuilderState } from '../interfaces/query-builder-state.interface';\nimport { IRequestStrategy } from '../interfaces/request-strategy.interface';\nimport { QueryBuilderOptions } from '../models/query-builder-options';\n\n/**\n * Request strategy for the JSON:API driver\n *\n * Generates URIs in the JSON:API format:\n * - Fields: `fields[articles]=title,body&fields[people]=name`\n * - Filters: `filter[status]=active`\n * - Includes: `include=author,comments.author`\n * - Pagination: `page[number]=1&page[size]=15`\n * - Sort: `sort=-created_at,name` (- prefix = DESC)\n *\n * @see https://jsonapi.org/format/\n */\nexport class JsonApiRequestStrategy implements IRequestStrategy {\n\n /**\n * Accumulator for composing the URI string\n */\n private _uri = '';\n\n /**\n * Build a URI string from the given state using the JSON:API format\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The composed URI string\n * @throws Error if resource is not set\n */\n public buildUri(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!state.resource) {\n throw new Error('Set the resource property BEFORE adding filters or calling the url() / get() methods');\n }\n\n this._uri = '';\n\n this._parseIncludes(state, options);\n this._parseFields(state, options);\n this._parseFilters(state, options);\n this._parsePagination(state, options);\n this._parseSort(state, options);\n\n return this._uri;\n }\n\n /**\n * Validate that the given limit is accepted by the JSON:API driver\n *\n * The JSON:API specification leaves pagination semantics to the server and\n * does not define a \"fetch all\" sentinel, so only positive integers are\n * accepted.\n *\n * @param limit - The limit value to validate\n * @throws {InvalidLimitError} If the value is not a positive integer\n */\n public validateLimit(limit: number): void {\n if (Number.isInteger(limit) && limit >= 1) {\n return;\n }\n\n throw new InvalidLimitError(limit);\n }\n\n /**\n * Parse and append field selection parameters\n *\n * Validates that each field model exists either as the main resource\n * or in the includes list. Fields are grouped by type in bracket notation.\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated field selection parameter string\n * @throws Error if resource is required but not set\n * @throws UnselectableModelError if a field model is not in resource or includes\n */\n private _parseFields(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!Object.keys(state.fields).length) {\n return this._uri;\n }\n\n if (!state.resource) {\n throw new Error('While selecting fields, the -> resource <- is required');\n }\n\n if (!(state.resource in state.fields)) {\n throw new Error(`Key ${state.resource} is missing in the fields object`);\n }\n\n const f: Record<string, string> = {};\n\n for (const k in state.fields) {\n if (state.fields.hasOwnProperty(k)) {\n if (k !== state.resource && !state.includes.includes(k)) {\n throw new UnselectableModelError(k);\n }\n\n Object.assign(f, { [`${options.fields}[${k}]`]: state.fields[k].join(',') });\n }\n }\n\n const param = `${this._prepend(state)}${qs.stringify(f, { encode: false })}`;\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append filter parameters\n *\n * Generates filter parameters in bracket notation: `filter[key]=value1,value2`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated filter parameter string\n */\n private _parseFilters(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n const keys = Object.keys(state.filters);\n\n if (!keys.length) {\n return this._uri;\n }\n\n const f = {\n [`${options.filters}`]: keys.reduce((acc: Record<string, string>, key: string) => {\n return Object.assign(acc, { [key]: state.filters[key].join(',') });\n }, {})\n };\n const param = `${this._prepend(state)}${qs.stringify(f, { encode: false })}`;\n\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append include parameters\n *\n * Generates: `include=author,comments.author`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated include parameter string\n */\n private _parseIncludes(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!state.includes.length) {\n return this._uri;\n }\n\n const param = `${this._prepend(state)}${options.includes}=${state.includes}`;\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append pagination parameters in JSON:API bracket notation\n *\n * Generates: `page[number]=1&page[size]=15`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated pagination parameter string\n */\n private _parsePagination(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n const pagination = qs.stringify(\n { [options.page]: { number: state.page, size: state.limit } },\n { encode: false }\n );\n const param = `${this._prepend(state)}${pagination}`;\n\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append sort parameters\n *\n * Generates: `sort=-field1,field2` where `-` prefix indicates DESC order\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated sort parameter string\n */\n private _parseSort(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n let param = '';\n\n if (!state.sorts.length) {\n return param;\n }\n\n param = `${this._prepend(state)}${options.sort}=`;\n\n state.sorts.forEach((sort, idx) => {\n param += `${sort.order === SortEnum.DESC ? '-' : ''}${sort.field}`;\n\n if (idx < state.sorts.length - 1) {\n param += ',';\n }\n });\n\n this._uri += param;\n\n return param;\n }\n\n /**\n * Determine the appropriate URI prefix based on the current accumulator state\n *\n * Returns the full base path with `?` for the first parameter,\n * or `&` for subsequent parameters.\n *\n * @param state - The current query builder state\n * @returns The prefix string to prepend to the next parameter\n */\n private _prepend(state: IQueryBuilderState): string {\n if (this._uri) {\n return '&';\n }\n\n return state.baseUrl ? `${state.baseUrl}/${state.resource}?` : `/${state.resource}?`;\n }\n}\n","import { IPaginatedObject } from '../interfaces/paginated-object.interface';\nimport { IResponseStrategy } from '../interfaces/response-strategy.interface';\nimport { PaginatedCollection } from '../models/paginated-collection';\nimport { ResponseOptions } from '../models/response-options';\n\n/**\n * Response strategy for the JSON:API driver\n *\n * Parses JSON:API pagination responses:\n * ```json\n * {\n * \"data\": [...],\n * \"meta\": {\n * \"current-page\": 1,\n * \"per-page\": 10,\n * \"total\": 100,\n * \"page-count\": 10,\n * \"from\": 1,\n * \"to\": 10\n * },\n * \"links\": {\n * \"first\": \"url\",\n * \"prev\": \"url\",\n * \"next\": \"url\",\n * \"last\": \"url\"\n * }\n * }\n * ```\n *\n * @see https://jsonapi.org/format/\n */\nexport class JsonApiResponseStrategy implements IResponseStrategy {\n\n /**\n * Parse a JSON:API pagination response into a PaginatedCollection\n *\n * Supports dot-notation key paths for accessing nested values.\n * Computes `from` and `to` from `currentPage` and `perPage` when\n * they are not directly available in the response.\n *\n * @param response - The raw API response object\n * @param options - The response key name configuration\n * @returns A typed PaginatedCollection instance\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public paginate<T extends IPaginatedObject>(response: Record<string, any>, options: ResponseOptions): PaginatedCollection<T> {\n const data = this._resolve(response, options.data) as T[];\n const currentPage = this._resolve(response, options.currentPage) as number;\n const total = this._resolve(response, options.total) as number | undefined;\n const perPage = this._resolve(response, options.perPage) as number | undefined;\n const lastPage = this._resolve(response, options.lastPage) as number | undefined;\n\n // Compute from/to if not directly available\n const from = this._resolveFrom(response, options, currentPage, perPage);\n const to = this._resolveTo(response, options, currentPage, perPage, total);\n\n const prevPageUrl = this._resolve(response, options.prevPageUrl) as string | undefined;\n const nextPageUrl = this._resolve(response, options.nextPageUrl) as string | undefined;\n const firstPageUrl = this._resolve(response, options.firstPageUrl) as string | undefined;\n const lastPageUrl = this._resolve(response, options.lastPageUrl) as string | undefined;\n\n return new PaginatedCollection(\n data,\n currentPage,\n from,\n to,\n total,\n perPage,\n prevPageUrl,\n nextPageUrl,\n lastPage,\n firstPageUrl,\n lastPageUrl\n );\n }\n\n /**\n * Resolve a value from a response object using a dot-notation path\n *\n * Supports both flat keys ('data') and nested paths ('meta.current-page').\n *\n * @param response - The raw response object\n * @param path - The dot-notation path to resolve\n * @returns The resolved value, or undefined if not found\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _resolve(response: Record<string, any>, path: string): unknown {\n return path.split('.').reduce((obj, key) => obj?.[key], response);\n }\n\n /**\n * Resolve the \"from\" index value\n *\n * If the path resolves to a value in the response, use it.\n * Otherwise, compute it from currentPage and perPage:\n * `(currentPage - 1) * perPage + 1`\n *\n * @param response - The raw response object\n * @param options - The response key name configuration\n * @param currentPage - The current page number\n * @param perPage - The number of items per page\n * @returns The computed \"from\" index\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _resolveFrom(response: Record<string, any>, options: ResponseOptions, currentPage: number, perPage?: number): number | undefined {\n const direct = this._resolve(response, options.from);\n\n if (direct !== undefined) {\n return direct as number;\n }\n\n if (currentPage && perPage) {\n return (currentPage - 1) * perPage + 1;\n }\n\n return undefined;\n }\n\n /**\n * Resolve the \"to\" index value\n *\n * If the path resolves to a value in the response, use it.\n * Otherwise, compute it from currentPage, perPage, and total:\n * `Math.min(currentPage * perPage, total)`\n *\n * @param response - The raw response object\n * @param options - The response key name configuration\n * @param currentPage - The current page number\n * @param perPage - The number of items per page\n * @param total - The total number of items\n * @returns The computed \"to\" index\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _resolveTo(response: Record<string, any>, options: ResponseOptions, currentPage: number, perPage?: number, total?: number): number | undefined {\n const direct = this._resolve(response, options.to);\n\n if (direct !== undefined) {\n return direct as number;\n }\n\n if (currentPage && perPage && total) {\n return Math.min(currentPage * perPage, total);\n }\n\n return undefined;\n }\n}\n","import { InvalidLimitError } from '../errors/invalid-limit.error';\nimport { IQueryBuilderState } from '../interfaces/query-builder-state.interface';\nimport { IRequestStrategy } from '../interfaces/request-strategy.interface';\nimport { QueryBuilderOptions } from '../models/query-builder-options';\n\n/**\n * Request strategy for the Laravel (pagination-only) driver\n *\n * Generates simple pagination URIs:\n * - `/{resource}?limit=N&page=N`\n *\n * Filters, sorts, fields, includes, search, and select in state are ignored.\n */\nexport class LaravelRequestStrategy implements IRequestStrategy {\n\n /**\n * Build a pagination-only URI from the given state\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The composed URI string\n * @throws Error if resource is not set\n */\n public buildUri(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!state.resource) {\n throw new Error('Set the resource property BEFORE calling the url() / get() methods');\n }\n\n const base = state.baseUrl ? `${state.baseUrl}/${state.resource}` : `/${state.resource}`;\n\n return `${base}?${options.limit}=${state.limit}&${options.page}=${state.page}`;\n }\n\n /**\n * Validate that the given limit is accepted by the Laravel driver\n *\n * Laravel pagination does not recognize `-1` as a \"fetch all\" sentinel,\n * so only positive integers are accepted.\n *\n * @param limit - The limit value to validate\n * @throws {InvalidLimitError} If the value is not a positive integer\n */\n public validateLimit(limit: number): void {\n if (Number.isInteger(limit) && limit >= 1) {\n return;\n }\n\n throw new InvalidLimitError(limit);\n }\n}\n","import { IPaginatedObject } from '../interfaces/paginated-object.interface';\nimport { IResponseStrategy } from '../interfaces/response-strategy.interface';\nimport { PaginatedCollection } from '../models/paginated-collection';\nimport { ResponseOptions } from '../models/response-options';\n\n/**\n * Response strategy for the Laravel (pagination-only) driver\n *\n * Parses flat Laravel pagination responses:\n * ```json\n * {\n * \"data\": [...],\n * \"current_page\": 1,\n * \"total\": 100,\n * \"per_page\": 15,\n * \"from\": 1,\n * \"to\": 15,\n * ...\n * }\n * ```\n */\nexport class LaravelResponseStrategy implements IResponseStrategy {\n\n /**\n * Parse a flat Laravel pagination response into a PaginatedCollection\n *\n * @param response - The raw API response object\n * @param options - The response key name configuration\n * @returns A typed PaginatedCollection instance\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public paginate<T extends IPaginatedObject>(response: Record<string, any>, options: ResponseOptions): PaginatedCollection<T> {\n return new PaginatedCollection(\n response[options.data],\n response[options.currentPage],\n response[options.from],\n response[options.to],\n response[options.total],\n response[options.perPage],\n response[options.prevPageUrl],\n response[options.nextPageUrl],\n response[options.lastPage],\n response[options.firstPageUrl],\n response[options.lastPageUrl]\n );\n }\n}\n","import { SortEnum } from '../enums/sort.enum';\nimport { InvalidLimitError } from '../errors/invalid-limit.error';\nimport { IOperatorFilter } from '../interfaces/operator-filter.interface';\nimport { IQueryBuilderState } from '../interfaces/query-builder-state.interface';\nimport { IRequestStrategy } from '../interfaces/request-strategy.interface';\nimport { QueryBuilderOptions } from '../models/query-builder-options';\n\n/**\n * Request strategy for the NestJS (nestjs-paginate) driver\n *\n * Generates URIs in the NestJS paginate format:\n * - Simple filters: `filter.field=value`\n * - Operator filters: `filter.field=$operator:value`\n * - Sorts: `sortBy=field1:DESC,field2:ASC`\n * - Select: `select=col1,col2`\n * - Search: `search=term`\n * - Pagination: `limit=N&page=N`\n *\n * @see https://github.com/ppetzold/nestjs-paginate\n */\nexport class NestjsRequestStrategy implements IRequestStrategy {\n\n /**\n * Accumulator for composing the URI string\n */\n private _uri = '';\n\n /**\n * Build a URI string from the given state using the NestJS paginate format\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The composed URI string\n * @throws Error if model is not set\n */\n public buildUri(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!state.resource) {\n throw new Error('Set the resource property BEFORE adding filters or calling the url() / get() methods');\n }\n\n this._uri = '';\n\n this._parseFilters(state, options);\n this._parseOperatorFilters(state, options);\n this._parseSort(state, options);\n this._parseSelect(state, options);\n this._parseSearch(state, options);\n this._parseLimit(state, options);\n this._parsePage(state, options);\n\n return this._uri;\n }\n\n /**\n * Validate that the given limit is accepted by nestjs-paginate\n *\n * Accepts any integer `>= 1` as a page size, plus `-1` which nestjs-paginate\n * interprets as \"fetch all items\" (server must opt-in via `maxLimit: -1`).\n *\n * @param limit - The limit value to validate\n * @throws {InvalidLimitError} If the value is not an integer, or is 0, or is a negative number other than -1\n */\n public validateLimit(limit: number): void {\n if (Number.isInteger(limit) && (limit === -1 || limit >= 1)) {\n return;\n }\n\n throw new InvalidLimitError(limit, true);\n }\n\n /**\n * Parse and append simple filter parameters\n *\n * Generates: `filter.field=value1,value2` for each filter\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseFilters(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n const keys = Object.keys(state.filters);\n\n if (!keys.length) {\n return;\n }\n\n keys.forEach(key => {\n const values = state.filters[key].join(',');\n const param = `${this._prepend(state)}${options.filters}.${key}=${values}`;\n this._uri += param;\n });\n }\n\n /**\n * Parse and append the limit parameter\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseLimit(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n const param = `${this._prepend(state)}${options.limit}=${state.limit}`;\n this._uri += param;\n }\n\n /**\n * Parse and append operator filter parameters\n *\n * Groups operator filters by field and generates:\n * - Single value: `filter.field=$operator:value`\n * - Multiple values ($in, $btw): `filter.field=$operator:val1,val2`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseOperatorFilters(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n if (!state.operatorFilters.length) {\n return;\n }\n\n state.operatorFilters.forEach((opFilter: IOperatorFilter) => {\n const values = opFilter.values.join(',');\n const param = `${this._prepend(state)}${options.filters}.${opFilter.field}=${opFilter.operator}:${values}`;\n this._uri += param;\n });\n }\n\n /**\n * Parse and append the page parameter\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parsePage(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n const param = `${this._prepend(state)}${options.page}=${state.page}`;\n this._uri += param;\n }\n\n /**\n * Parse and append the search parameter\n *\n * Generates: `search=term`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseSearch(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n if (!state.search) {\n return;\n }\n\n const param = `${this._prepend(state)}${options.search}=${state.search}`;\n this._uri += param;\n }\n\n /**\n * Parse and append the select parameter\n *\n * Generates: `select=col1,col2`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseSelect(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n if (!state.select.length) {\n return;\n }\n\n const param = `${this._prepend(state)}${options.select}=${state.select.join(',')}`;\n this._uri += param;\n }\n\n /**\n * Parse and append sort parameters\n *\n * Generates: `sortBy=field1:DESC,field2:ASC`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n */\n private _parseSort(state: IQueryBuilderState, options: QueryBuilderOptions): void {\n if (!state.sorts.length) {\n return;\n }\n\n const sortPairs = state.sorts.map(sort =>\n `${sort.field}:${sort.order === SortEnum.DESC ? 'DESC' : 'ASC'}`\n );\n\n const param = `${this._prepend(state)}${options.sortBy}=${sortPairs.join(',')}`;\n this._uri += param;\n }\n\n /**\n * Determine the appropriate URI prefix based on the current accumulator state\n *\n * Returns the full base path with `?` for the first parameter,\n * or `&` for subsequent parameters.\n *\n * @param state - The current query builder state\n * @returns The prefix string to prepend to the next parameter\n */\n private _prepend(state: IQueryBuilderState): string {\n if (this._uri) {\n return '&';\n }\n\n return state.baseUrl ? `${state.baseUrl}/${state.resource}?` : `/${state.resource}?`;\n }\n}\n","import { IPaginatedObject } from '../interfaces/paginated-object.interface';\nimport { IResponseStrategy } from '../interfaces/response-strategy.interface';\nimport { PaginatedCollection } from '../models/paginated-collection';\nimport { ResponseOptions } from '../models/response-options';\n\n/**\n * Response strategy for the NestJS (nestjs-paginate) driver\n *\n * Parses nested NestJS pagination responses:\n * ```json\n * {\n * \"data\": [...],\n * \"meta\": {\n * \"currentPage\": 1,\n * \"totalItems\": 100,\n * \"itemsPerPage\": 10,\n * \"totalPages\": 10\n * },\n * \"links\": {\n * \"first\": \"url\",\n * \"previous\": \"url\",\n * \"next\": \"url\",\n * \"last\": \"url\",\n * \"current\": \"url\"\n * }\n * }\n * ```\n *\n * @see https://github.com/ppetzold/nestjs-paginate\n */\nexport class NestjsResponseStrategy implements IResponseStrategy {\n\n /**\n * Parse a nested NestJS pagination response into a PaginatedCollection\n *\n * Supports dot-notation key paths for accessing nested values.\n * Computes `from` and `to` from `currentPage` and `itemsPerPage` when\n * they are not directly available in the response.\n *\n * @param response - The raw API response object\n * @param options - The response key name configuration\n * @returns A typed PaginatedCollection instance\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public paginate<T extends IPaginatedObject>(response: Record<string, any>, options: ResponseOptions): PaginatedCollection<T> {\n const data = this._resolve(response, options.data) as T[];\n const currentPage = this._resolve(response, options.currentPage) as number;\n const total = this._resolve(response, options.total) as number | undefined;\n const perPage = this._resolve(response, options.perPage) as number | undefined;\n const lastPage = this._resolve(response, options.lastPage) as number | undefined;\n\n // Compute from/to if not directly available\n const from = this._resolveFrom(response, options, currentPage, perPage);\n const to = this._resolveTo(response, options, currentPage, perPage, total);\n\n const prevPageUrl = this._resolve(response, options.prevPageUrl) as string | undefined;\n const nextPageUrl = this._resolve(response, options.nextPageUrl) as string | undefined;\n const firstPageUrl = this._resolve(response, options.firstPageUrl) as string | undefined;\n const lastPageUrl = this._resolve(response, options.lastPageUrl) as string | undefined;\n\n return new PaginatedCollection(\n data,\n currentPage,\n from,\n to,\n total,\n perPage,\n prevPageUrl,\n nextPageUrl,\n lastPage,\n firstPageUrl,\n lastPageUrl\n );\n }\n\n /**\n * Resolve a value from a response object using a dot-notation path\n *\n * Supports both flat keys ('data') and nested paths ('meta.currentPage').\n *\n * @param response - The raw response object\n * @param path - The dot-notation path to resolve\n * @returns The resolved value, or undefined if not found\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _resolve(response: Record<string, any>, path: string): unknown {\n return path.split('.').reduce((obj, key) => obj?.[key], response);\n }\n\n /**\n * Resolve the \"from\" index value\n *\n * If the path resolves to a value in the response, use it.\n * Otherwise, compute it from currentPage and perPage:\n * `(currentPage - 1) * perPage + 1`\n *\n * @param response - The raw response object\n * @param options - The response key name configuration\n * @param currentPage - The current page number\n * @param perPage - The number of items per page\n * @returns The computed \"from\" index\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _resolveFrom(response: Record<string, any>, options: ResponseOptions, currentPage: number, perPage?: number): number | undefined {\n const direct = this._resolve(response, options.from);\n\n if (direct !== undefined) {\n return direct as number;\n }\n\n if (currentPage && perPage) {\n return (currentPage - 1) * perPage + 1;\n }\n\n return undefined;\n }\n\n /**\n * Resolve the \"to\" index value\n *\n * If the path resolves to a value in the response, use it.\n * Otherwise, compute it from currentPage, perPage, and total:\n * `Math.min(currentPage * perPage, total)`\n *\n * @param response - The raw response object\n * @param options - The response key name configuration\n * @param currentPage - The current page number\n * @param perPage - The number of items per page\n * @param total - The total number of items\n * @returns The computed \"to\" index\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _resolveTo(response: Record<string, any>, options: ResponseOptions, currentPage: number, perPage?: number, total?: number): number | undefined {\n const direct = this._resolve(response, options.to);\n\n if (direct !== undefined) {\n return direct as number;\n }\n\n if (currentPage && perPage && total) {\n return Math.min(currentPage * perPage, total);\n }\n\n return undefined;\n }\n}\n","import * as qs from 'qs';\n\nimport { SortEnum } from '../enums/sort.enum';\nimport { InvalidLimitError } from '../errors/invalid-limit.error';\nimport { UnselectableModelError } from '../errors/unselectable-model.error';\nimport { IQueryBuilderState } from '../interfaces/query-builder-state.interface';\nimport { IRequestStrategy } from '../interfaces/request-strategy.interface';\nimport { QueryBuilderOptions } from '../models/query-builder-options';\n\n/**\n * Request strategy for the Spatie Query Builder driver\n *\n * Generates URIs in the Spatie format:\n * - Fields: `fields[model]=col1,col2`\n * - Filters: `filter[field]=value`\n * - Includes: `include=model1,model2`\n * - Sorts: `sort=-field1,field2` (- prefix = DESC)\n * - Pagination: `limit=N&page=N`\n *\n * @see https://spatie.be/docs/laravel-query-builder\n */\nexport class SpatieRequestStrategy implements IRequestStrategy {\n\n /**\n * Accumulator for composing the URI string\n */\n private _uri = '';\n\n /**\n * Build a URI string from the given state using the Spatie format\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The composed URI string\n * @throws Error if resource is not set\n */\n public buildUri(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!state.resource) {\n throw new Error('Set the resource property BEFORE adding filters or calling the url() / get() methods');\n }\n\n this._uri = '';\n\n this._parseIncludes(state, options);\n this._parseFields(state, options);\n this._parseFilters(state, options);\n this._parseLimit(state, options);\n this._parsePage(state, options);\n this._parseSort(state, options);\n\n return this._uri;\n }\n\n /**\n * Validate that the given limit is accepted by the Spatie driver\n *\n * Spatie query-builder does not recognize `-1` as a \"fetch all\" sentinel,\n * so only positive integers are accepted.\n *\n * @param limit - The limit value to validate\n * @throws {InvalidLimitError} If the value is not a positive integer\n */\n public validateLimit(limit: number): void {\n if (Number.isInteger(limit) && limit >= 1) {\n return;\n }\n\n throw new InvalidLimitError(limit);\n }\n\n /**\n * Parse and append field selection parameters\n *\n * Validates that each field model exists either as the main resource\n * or in the includes list. Fields are grouped by model in bracket notation.\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated field selection parameter string\n * @throws Error if resource is required but not set\n * @throws UnselectableModelError if a field model is not in resource or includes\n */\n private _parseFields(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!Object.keys(state.fields).length) {\n return this._uri;\n }\n\n if (!state.resource) {\n throw new Error('While selecting fields, the -> resource <- is required');\n }\n\n if (!(state.resource in state.fields)) {\n throw new Error(`Key ${state.resource} is missing in the fields object`);\n }\n\n const f: Record<string, string> = {};\n\n for (const k in state.fields) {\n if (state.fields.hasOwnProperty(k)) {\n if (k !== state.resource && !state.includes.includes(k)) {\n throw new UnselectableModelError(k);\n }\n\n Object.assign(f, { [`${options.fields}[${k}]`]: state.fields[k].join(',') });\n }\n }\n\n const param = `${this._prepend(state)}${qs.stringify(f, { encode: false })}`;\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append filter parameters\n *\n * Generates filter parameters in bracket notation: `filter[key]=value1,value2`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated filter parameter string\n */\n private _parseFilters(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n const keys = Object.keys(state.filters);\n\n if (!keys.length) {\n return this._uri;\n }\n\n const f = {\n [`${options.filters}`]: keys.reduce((acc: Record<string, string>, key: string) => {\n return Object.assign(acc, { [key]: state.filters[key].join(',') });\n }, {})\n };\n const param = `${this._prepend(state)}${qs.stringify(f, { encode: false })}`;\n\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append include parameters\n *\n * Generates: `include=model1,model2`\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated include parameter string\n */\n private _parseIncludes(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n if (!state.includes.length) {\n return this._uri;\n }\n\n const param = `${this._prepend(state)}${options.includes}=${state.includes}`;\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append the limit parameter\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated limit parameter string\n */\n private _parseLimit(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n const param = `${this._prepend(state)}${options.limit}=${state.limit}`;\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append the page parameter\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated page parameter string\n */\n private _parsePage(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n const param = `${this._prepend(state)}${options.page}=${state.page}`;\n this._uri += param;\n\n return param;\n }\n\n /**\n * Parse and append sort parameters\n *\n * Generates: `sort=-field1,field2` where `-` prefix indicates DESC order\n *\n * @param state - The current query builder state\n * @param options - The query parameter key name configuration\n * @returns The generated sort parameter string\n */\n private _parseSort(state: IQueryBuilderState, options: QueryBuilderOptions): string {\n let param = '';\n\n if (!state.sorts.length) {\n return param;\n }\n\n param = `${this._prepend(state)}${options.sort}=`;\n\n state.sorts.forEach((sort, idx) => {\n param += `${sort.order === SortEnum.DESC ? '-' : ''}${sort.field}`;\n\n if (idx < state.sorts.length - 1) {\n param += ',';\n }\n });\n\n this._uri += param;\n\n return param;\n }\n\n /**\n * Determine the appropriate URI prefix based on the current accumulator state\n *\n * Returns the full base path with `?` for the first parameter,\n * or `&` for subsequent parameters.\n *\n * @param state - The current query builder state\n * @returns The prefix string to prepend to the next parameter\n */\n private _prepend(state: IQueryBuilderState): string {\n if (this._uri) {\n return '&';\n }\n\n return state.baseUrl ? `${state.baseUrl}/${state.resource}?` : `/${state.resource}?`;\n }\n}\n","import { IPaginatedObject } from '../interfaces/paginated-object.interface';\nimport { IResponseStrategy } from '../interfaces/response-strategy.interface';\nimport { PaginatedCollection } from '../models/paginated-collection';\nimport { ResponseOptions } from '../models/response-options';\n\n/**\n * Response strategy for the Spatie Query Builder driver\n *\n * Parses flat Laravel pagination responses:\n * ```json\n * {\n * \"data\": [...],\n * \"current_page\": 1,\n * \"total\": 100,\n * \"per_page\": 15,\n * \"from\": 1,\n * \"to\": 15,\n * ...\n * }\n * ```\n *\n * @see https://spatie.be/docs/laravel-query-builder\n */\nexport class SpatieResponseStrategy implements IResponseStrategy {\n\n /**\n * Parse a flat Laravel pagination response into a PaginatedCollection\n *\n * @param response - The raw API response object\n * @param options - The response key name configuration\n * @returns A typed PaginatedCollection instance\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public paginate<T extends IPaginatedObject>(response: Record<string, any>, options: ResponseOptions): PaginatedCollection<T> {\n return new PaginatedCollection(\n response[options.data],\n response[options.currentPage],\n response[options.from],\n response[options.to],\n response[options.total],\n response[options.perPage],\n response[options.prevPageUrl],\n response[options.nextPageUrl],\n response[options.lastPage],\n response[options.firstPageUrl],\n response[options.lastPageUrl]\n );\n }\n}\n","import { EnvironmentProviders, Provider, makeEnvironmentProviders } from '@angular/core';\n\nimport { DriverEnum } from './enums/driver.enum';\nimport { IConfig } from './interfaces/config.interface';\nimport { IPaginationConfig } from './interfaces/pagination-config.interface';\nimport { IRequestStrategy } from './interfaces/request-strategy.interface';\nimport { IResponseStrategy } from './interfaces/response-strategy.interface';\nimport { QueryBuilderOptions } from './models/query-builder-options';\nimport { JsonApiResponseOptions, NestjsResponseOptions, ResponseOptions } from './models/response-options';\nimport { NestService } from './services/nest.service';\nimport { NgQubeeService } from './services/ng-qubee.service';\nimport { PaginationService } from './services/pagination.service';\nimport { JsonApiRequestStrategy } from './strategies/json-api-request.strategy';\nimport { JsonApiResponseStrategy } from './strategies/json-api-response.strategy';\nimport { LaravelRequestStrategy } from './strategies/laravel-request.strategy';\nimport { LaravelResponseStrategy } from './strategies/laravel-response.strategy';\nimport { NestjsRequestStrategy } from './strategies/nestjs-request.strategy';\nimport { NestjsResponseStrategy } from './strategies/nestjs-response.strategy';\nimport { SpatieRequestStrategy } from './strategies/spatie-request.strategy';\nimport { SpatieResponseStrategy } from './strategies/spatie-response.strategy';\nimport {\n NG_QUBEE_DRIVER,\n NG_QUBEE_REQUEST_OPTIONS,\n NG_QUBEE_REQUEST_STRATEGY,\n NG_QUBEE_RESPONSE_OPTIONS,\n NG_QUBEE_RESPONSE_STRATEGY\n} from './tokens/ng-qubee.tokens';\n\n/**\n * Resolve the request strategy instance for the given driver\n *\n * @param driver - The pagination driver\n * @returns The corresponding request strategy\n */\nfunction resolveRequestStrategy(driver: DriverEnum): IRequestStrategy {\n switch (driver) {\n case DriverEnum.JSON_API:\n return new JsonApiRequestStrategy();\n case DriverEnum.NESTJS:\n return new NestjsRequestStrategy();\n case DriverEnum.SPATIE:\n return new SpatieRequestStrategy();\n case DriverEnum.LARAVEL:\n return new LaravelRequestStrategy();\n }\n}\n\n/**\n * Resolve the response strategy instance for the given driver\n *\n * @param driver - The pagination driver\n * @returns The corresponding response strategy\n */\nfunction resolveResponseStrategy(driver: DriverEnum): IResponseStrategy {\n switch (driver) {\n case DriverEnum.JSON_API:\n return new JsonApiResponseStrategy();\n case DriverEnum.NESTJS:\n return new NestjsResponseStrategy();\n case DriverEnum.SPATIE:\n return new SpatieResponseStrategy();\n case DriverEnum.LARAVEL:\n return new LaravelResponseStrategy();\n }\n}\n\n/**\n * Resolve the driver-specific `ResponseOptions` instance\n *\n * @param driver - The pagination driver\n * @param responseConfig - User-supplied response key overrides\n * @returns A pre-built ResponseOptions (or driver-specific subclass)\n */\nfunction resolveResponseOptions(driver: DriverEnum, responseConfig: IPaginationConfig): ResponseOptions {\n if (driver === DriverEnum.JSON_API) {\n return new JsonApiResponseOptions(responseConfig);\n }\n\n if (driver === DriverEnum.NESTJS) {\n return new NestjsResponseOptions(responseConfig);\n }\n\n return new ResponseOptions(responseConfig);\n}\n\n/**\n * Build the core provider list shared by `provideNgQubee()` and\n * `NgQubeeModule.forRoot()`\n *\n * Exposes the driver, strategies, and options via injection tokens so that\n * consumers can request a component-scoped instance of the services through\n * `provideNgQubeeInstance()`.\n *\n * @param config - Configuration object compliant to the IConfig interface\n * @returns An array of Providers for the environment injector\n */\nexport function buildNgQubeeProviders(config: IConfig): Provider[] {\n const driver = config.driver;\n const requestOptions = new QueryBuilderOptions(Object.assign({}, config.request));\n const responseOptions = resolveResponseOptions(driver, Object.assign({}, config.response));\n\n return [\n { provide: NG_QUBEE_DRIVER, useValue: driver },\n { provide: NG_QUBEE_REQUEST_STRATEGY, useValue: resolveRequestStrategy(driver) },\n { provide: NG_QUBEE_REQUEST_OPTIONS, useValue: requestOptions },\n { provide: NG_QUBEE_RESPONSE_STRATEGY, useValue: resolveResponseStrategy(driver) },\n { provide: NG_QUBEE_RESPONSE_OPTIONS, useValue: responseOptions },\n NestService,\n NgQubeeService,\n PaginationService\n ];\n}\n\n/**\n * Sets up providers necessary to enable `NgQubee` functionality for the application.\n *\n * @usageNotes\n *\n * Basic example with the Laravel driver:\n * ```\n * bootstrapApplication(AppComponent, {\n * providers: [provideNgQubee({ driver: DriverEnum.LARAVEL })]\n * });\n * ```\n *\n * Spatie driver example:\n * ```\n * import { DriverEnum } from 'ng-qubee';\n *\n * bootstrapApplication(AppComponent, {\n * providers: [provideNgQubee({ driver: DriverEnum.SPATIE })]\n * });\n * ```\n *\n * JSON:API driver example:\n * ```\n * import { DriverEnum } from 'ng-qubee';\n *\n * bootstrapApplication(AppComponent, {\n * providers: [provideNgQubee({ driver: DriverEnum.JSON_API })]\n * });\n * ```\n *\n * NestJS driver example:\n * ```\n * import { DriverEnum } from 'ng-qubee';\n *\n * bootstrapApplication(AppComponent, {\n * providers: [provideNgQubee({ driver: DriverEnum.NESTJS })]\n * });\n * ```\n *\n * @publicApi\n * @param config - Configuration object compliant to the IConfig interface\n * @returns A set of providers to setup NgQubee\n */\nexport function provideNgQubee(config: IConfig): EnvironmentProviders {\n return makeEnvironmentProviders(buildNgQubeeProviders(config));\n}\n\n/**\n * Providers for a component-scoped NgQubee instance\n *\n * Use this inside a standalone component's `providers: [...]` to get a\n * dedicated `NgQubeeService` (and its `NestService` / `PaginationService`\n * collaborators) whose query-builder and pagination state does not bleed\n * with the app-wide shared instance provided by `provideNgQubee()`.\n *\n * @usageNotes\n *\n * ```\n * @Component({\n * standalone: true,\n * providers: [...provideNgQubeeInstance()]\n * })\n * export class MyFeatureComponent {\n * constructor(private _qb: NgQubeeService) {}\n * }\n * ```\n *\n * The driver, strategies, and options are inherited from the environment\n * injector (`provideNgQubee()` at root), so only the service instances are\n * re-created at the component level.\n *\n * @publicApi\n * @returns A provider array to spread into a component's `providers`\n */\nexport function provideNgQubeeInstance(): Provider[] {\n return [NestService, NgQubeeService, PaginationService];\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { IConfig } from './interfaces/config.interface';\nimport { buildNgQubeeProviders } from './provide-ngqubee';\n\n// @dynamic\n@NgModule({})\nexport class NgQubeeModule {\n\n /**\n * Configure NgQubee for the root module\n *\n * @param config - Configuration object with driver, and optional request and response settings\n * @returns Module with providers configured for the specified driver\n */\n public static forRoot(config: IConfig): ModuleWithProviders<NgQubeeModule> {\n return {\n ngModule: NgQubeeModule,\n providers: buildNgQubeeProviders(config)\n };\n }\n}\n","/**\n * Enum representing the available filter operators for the NestJS driver\n *\n * These operators map to the nestjs-paginate filter syntax:\n * `filter.field=$operator:value`\n *\n * @see https://github.com/ppetzold/nestjs-paginate\n */\nexport enum FilterOperatorEnum {\n BTW = '$btw',\n CONTAINS = '$contains',\n EQ = '$eq',\n GT = '$gt',\n GTE = '$gte',\n ILIKE = '$ilike',\n IN = '$in',\n LT = '$lt',\n LTE = '$lte',\n NOT = '$not',\n NULL = '$null',\n SW = '$sw'\n}\n","/*\n * Public API Surface of angular-query-builder\n */\n\nexport * from './lib/models/paginated-collection';\nexport * from './lib/ng-qubee.module';\nexport * from './lib/provide-ngqubee';\nexport * from './lib/services/ng-qubee.service';\nexport * from './lib/services/pagination.service';\n\n// Enums\nexport * from './lib/enums/driver.enum';\nexport * from './lib/enums/filter-operator.enum';\nexport * from './lib/enums/sort.enum';\n\n// Error classes\nexport * from './lib/errors/invalid-limit.error';\nexport * from './lib/errors/invalid-page-number.error';\nexport * from './lib/errors/invalid-resource-name.error';\nexport * from './lib/errors/key-not-found.error';\nexport * from './lib/errors/pagination-not-synced.error';\nexport * from './lib/errors/unselectable-model.error';\nexport * from './lib/errors/unsupported-field-selection.error';\nexport * from './lib/errors/unsupported-filter.error';\nexport * from './lib/errors/unsupported-filter-operator.error';\nexport * from './lib/errors/unsupported-includes.error';\nexport * from './lib/errors/unsupported-search.error';\nexport * from './lib/errors/unsupported-select.error';\nexport * from './lib/errors/unsupported-sort.error';\n\n// Interfaces\nexport * from './lib/interfaces/config.interface';\nexport * from './lib/interfaces/fields.interface';\nexport * from './lib/interfaces/filters.interface';\nexport * from './lib/interfaces/nest-state.interface';\nexport * from './lib/interfaces/operator-filter.interface';\nexport * from './lib/interfaces/page.interface';\nexport * from './lib/interfaces/paginated-object.interface';\nexport * from './lib/interfaces/pagination-config.interface';\nexport * from './lib/interfaces/query-builder-config.interface';\nexport * from './lib/interfaces/query-builder-state.interface';\nexport * from './lib/interfaces/request-strategy.interface';\nexport * from './lib/interfaces/response-strategy.interface';\nexport * from './lib/interfaces/sort.interface';\n\n// Injection tokens\nexport * from './lib/tokens/ng-qubee.tokens';\n\n// Strategies\nexport * from './lib/strategies/json-api-request.strategy';\nexport * from './lib/strategies/json-api-response.strategy';\nexport * from './lib/strategies/laravel-request.strategy';\nexport * from './lib/strategies/laravel-response.strategy';\nexport * from './lib/strategies/nestjs-request.strategy';\nexport * from './lib/strategies/nestjs-response.strategy';\nexport * from './lib/strategies/spatie-request.strategy';\nexport * from './lib/strategies/spatie-response.strategy';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NestService"],"mappings":"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"}