@rapiq/typeorm 2.0.0-beta.0 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -68,6 +68,12 @@ declare class FiltersAdapter extends FiltersBaseAdapter<RelationsAdapter> {
68
68
  regexp(field: string, placeholder: string, ignoreCase: boolean): string;
69
69
  caseFold(input: string): string;
70
70
  isCaseFoldable(field: string): boolean;
71
+ /**
72
+ * WHERE fragments are raw SQL — the SelectQueryBuilder dropped
73
+ * whole-query property-name replacement with typeorm 1.x, so
74
+ * property paths must resolve to their database column names here.
75
+ */
76
+ resolveFieldName(name: string, relationPath?: string): string;
71
77
  child(): this;
72
78
  execute(): void;
73
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/adapter/types.ts","../src/adapter/relations.ts","../src/adapter/fields.ts","../src/adapter/filters.ts","../src/adapter/sort.ts","../src/adapter/pagination.ts","../src/adapter/module.ts","../src/dialect.ts"],"mappings":";;;;KAUY;KAEA,0BAA0B;;;;;;EAMlC,WAAW;;;;;;EAOX,UAAU,cAAc,eAAe,cAAc;;KAG7C;;;;EAIR,cAAc;EACd,YAAY;;KAGJ;;;;;EAKR;IACI;IACA;;;;;cChCK,yBAAyB;YACxB,cAAe;YAEf,SAAU;cAGhB,cAAc,yBACd,UAAS;EAQb;YAYU,KAAK;YA0CL,UAAU,kBAAkB;;;;cCrE7B,sBAAsB;YACrB,cAAe;cAEb,cAAc,yBAAyB,WAAW;EAM9D;EAIA,YAAY;EAOZ;;;;cC+DS,uBAAuB,mBAAmB;YACzC,cAAe;YAEf,SAAU;YAEV;cAEE,cAAc,yBAAyB,WAAW;EAQrD;EAQT;EAIA,YAAY;EAIZ,iBAAiB;EAIR;EAIT,OAAO,eAAe,qBAAqB;EAQlC,SAAS;EAQT,eAAe;EAcxB;EAWA;;;;cCnKS,oBAAoB;YACnB,cAAe;cAEb,cAAc,yBAAyB,WAAW;EAM9D;EAIA,YAAY;EAOZ;;;;cCrBS,0BAA0B;YACzB,cAAe;cAEb,cAAc;EAMjB;;;;cCFA,0BAA0B,aAAa;WAChC,WAAY;WAEZ,QAAS;WAET,SAAU;WAEV,YAAa;WAEb,MAAO;cAEX,SAAS;EAQrB;;;;;EAYA,QACI,OAAO,QACP,UAAS,iBACT;;;;;;;;;iBCnCQ,oBACZ,OAAO,0BACP"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/adapter/types.ts","../src/adapter/relations.ts","../src/adapter/fields.ts","../src/adapter/filters.ts","../src/adapter/sort.ts","../src/adapter/pagination.ts","../src/adapter/module.ts","../src/dialect.ts"],"mappings":";;;;KAUY;KAEA,0BAA0B;;;;;;EAMlC,WAAW;;;;;;EAOX,UAAU,cAAc,eAAe,cAAc;;KAG7C;;;;EAIR,cAAc;EACd,YAAY;;KAGJ;;;;;EAKR;IACI;IACA;;;;;cChCK,yBAAyB;YACxB,cAAe;YAEf,SAAU;cAGhB,cAAc,yBACd,UAAS;EAQb;YAYU,KAAK;YA0CL,UAAU,kBAAkB;;;;cCrE7B,sBAAsB;YACrB,cAAe;cAEb,cAAc,yBAAyB,WAAW;EAM9D;EAIA,YAAY;EAOZ;;;;cC+DS,uBAAuB,mBAAmB;YACzC,cAAe;YAEf,SAAU;YAEV;cAEE,cAAc,yBAAyB,WAAW;EAQrD;EAQT;EAIA,YAAY;EAIZ,iBAAiB;EAIR;EAIT,OAAO,eAAe,qBAAqB;EAQlC,SAAS;EAQT,eAAe;;;;;;EAmBf,iBAAiB,cAAc;EAexC;EAWA;;;;cCvLS,oBAAoB;YACnB,cAAe;cAEb,cAAc,yBAAyB,WAAW;EAM9D;EAIA,YAAY;EAOZ;;;;cCrBS,0BAA0B;YACzB,cAAe;cAEb,cAAc;EAMjB;;;;cCFA,0BAA0B,aAAa;WAChC,WAAY;WAEZ,QAAS;WAET,SAAU;WAEV,YAAa;WAEb,MAAO;cAEX,SAAS;EAQrB;;;;;EAYA,QACI,OAAO,QACP,UAAS,iBACT;;;;;;;;;iBCnCQ,oBACZ,OAAO,0BACP"}
package/dist/index.mjs CHANGED
@@ -132,6 +132,19 @@ var FiltersAdapter = class FiltersAdapter extends FiltersBaseAdapter {
132
132
  if (!column) return super.isCaseFoldable(field);
133
133
  return isCaseFoldableColumnType(column.type);
134
134
  }
135
+ /**
136
+ * WHERE fragments are raw SQL — the SelectQueryBuilder dropped
137
+ * whole-query property-name replacement with typeorm 1.x, so
138
+ * property paths must resolve to their database column names here.
139
+ */
140
+ resolveFieldName(name, relationPath) {
141
+ const { mainAlias } = this.queryBuilder.expressionMap;
142
+ if (!mainAlias || !mainAlias.hasMetadata) return super.resolveFieldName(name, relationPath);
143
+ const path = relationPath ? `${relationPath}.${name}` : name;
144
+ const column = findColumnByPropertyPath(mainAlias.metadata, path);
145
+ if (!column) return super.resolveFieldName(name, relationPath);
146
+ return column.databaseName;
147
+ }
135
148
  child() {
136
149
  const child = new FiltersAdapter(this.queryBuilder, this.relations);
137
150
  this.setChildAttributes(child);
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/adapter/fields.ts","../src/dialect.ts","../src/adapter/filters.ts","../src/adapter/relations.ts","../src/adapter/sort.ts","../src/adapter/pagination.ts","../src/adapter/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { FieldsBaseAdapter } from '@rapiq/sql';\nimport type { SelectQueryBuilder } from 'typeorm';\nimport type { RelationsAdapter } from './relations';\n\nexport class FieldsAdapter extends FieldsBaseAdapter {\n protected queryBuilder : SelectQueryBuilder<any>;\n\n constructor(queryBuilder: SelectQueryBuilder<any>, relations: RelationsAdapter) {\n super(relations);\n\n this.queryBuilder = queryBuilder;\n }\n\n rootAlias(): string | undefined {\n return this.queryBuilder.alias;\n }\n\n escapeField(field: string) {\n // selection keys must stay `alias.property` — TypeORM resolves\n // them against its alias map and escapes on its own; pre-escaped\n // names break column resolution and entity hydration.\n return field;\n }\n\n execute() {\n const columns = this.getColumns();\n if (columns.length > 0) {\n this.queryBuilder.select(columns);\n }\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DialectOptions } from '@rapiq/sql';\nimport { pg, resolveDialect } from '@rapiq/sql';\nimport type { SelectQueryBuilder } from 'typeorm';\n\n/**\n * Resolve the {@link DialectOptions} preset matching the query builder's\n * connection type. The postgres preset is the documented last-resort\n * default when the connection type has no matching preset.\n */\nexport function resolveQueryDialect(\n query: SelectQueryBuilder<any>,\n) : DialectOptions {\n const dialect = resolveDialect(query.connection.options.type);\n if (dialect) {\n return dialect;\n }\n\n return pg;\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { AdapterError } from '@rapiq/core';\nimport type { DialectOptions } from '@rapiq/sql';\nimport { FiltersBaseAdapter } from '@rapiq/sql';\nimport type { ColumnType, EntityMetadata, SelectQueryBuilder } from 'typeorm';\nimport { resolveQueryDialect } from '../dialect';\nimport type { RelationsAdapter } from './relations';\n\n/**\n * Column types whose values are strings and therefore participate in\n * case-insensitive equality folding. Non-string columns never fold —\n * lower() on them is wasted work at best and a type error at worst\n * (e.g. `lower(integer)` on postgres).\n */\nconst CASE_FOLDABLE_COLUMN_TYPES = new Set<string>([\n 'varchar', \n 'character varying', \n 'varying character', \n 'char varying',\n 'nvarchar', \n 'national varchar',\n 'char', \n 'nchar', \n 'national char', \n 'character', \n 'native character',\n 'text', \n 'tinytext', \n 'mediumtext', \n 'longtext', \n 'ntext', \n 'citext',\n 'string',\n]);\n\nfunction isCaseFoldableColumnType(type: ColumnType) : boolean {\n if (type === String) {\n return true;\n }\n\n return typeof type === 'string' && CASE_FOLDABLE_COLUMN_TYPES.has(type);\n}\n\n/**\n * TypeORM parameters are global to the query builder and last-write-wins,\n * so every filter application needs its own namespace: positional names\n * like `:0` would silently rebind a caller-owned `:0` parameter — or, on\n * a re-run, the previous run's clauses.\n */\nlet PARAM_NAMESPACE_SEQ = 0;\n\nfunction nextParamNamespace() : string {\n PARAM_NAMESPACE_SEQ += 1;\n\n return `rapiq_${PARAM_NAMESPACE_SEQ}_`;\n}\n\n/**\n * Resolve a (possibly relation-dotted) property path to its column,\n * descending through relation metadata segment by segment; embedded\n * paths resolve through the plain column lookup per step.\n */\nfunction findColumnByPropertyPath(metadata: EntityMetadata, path: string) {\n let current = metadata;\n const segments = path.split('.');\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (!segment) {\n return undefined;\n }\n\n const column = current.findColumnWithPropertyPath(segments.slice(i).join('.'));\n if (column) {\n return column;\n }\n\n const relation = current.findRelationWithPropertyPath(segment);\n if (!relation) {\n return undefined;\n }\n\n current = relation.inverseEntityMetadata;\n }\n\n return undefined;\n}\n\nexport class FiltersAdapter extends FiltersBaseAdapter<RelationsAdapter> {\n protected queryBuilder : SelectQueryBuilder<any>;\n\n protected dialect : DialectOptions;\n\n protected paramNamespace : string;\n\n constructor(queryBuilder: SelectQueryBuilder<any>, relations: RelationsAdapter) {\n super(relations);\n\n this.queryBuilder = queryBuilder;\n this.dialect = resolveQueryDialect(queryBuilder);\n this.paramNamespace = nextParamNamespace();\n }\n\n override clear() {\n super.clear();\n\n // a fresh namespace per run: clauses a previous run left on the\n // builder keep their own bindings instead of being rebound.\n this.paramNamespace = nextParamNamespace();\n }\n\n rootAlias(): string | undefined {\n return this.queryBuilder.alias;\n }\n\n escapeField(field: string) {\n return this.queryBuilder.escape(field);\n }\n\n paramPlaceholder(index: number) : string {\n return `:${this.paramNamespace}${index - 1}`;\n }\n\n override isRegexpSupported() : boolean {\n return typeof this.dialect.regexp !== 'undefined';\n }\n\n regexp(field: string, placeholder: string, ignoreCase: boolean): string {\n if (this.dialect.regexp) {\n return this.dialect.regexp(field, placeholder, ignoreCase);\n }\n\n throw AdapterError.featureUnsupported('regexp');\n }\n\n override caseFold(input: string) : string {\n if (this.dialect.caseFold) {\n return this.dialect.caseFold(input);\n }\n\n return super.caseFold(input);\n }\n\n override isCaseFoldable(field: string) : boolean {\n const { mainAlias } = this.queryBuilder.expressionMap;\n if (!mainAlias || !mainAlias.hasMetadata) {\n return super.isCaseFoldable(field);\n }\n\n const column = findColumnByPropertyPath(mainAlias.metadata, field);\n if (!column) {\n return super.isCaseFoldable(field);\n }\n\n return isCaseFoldableColumnType(column.type);\n }\n\n child(): this {\n const child = new FiltersAdapter(this.queryBuilder, this.relations);\n\n this.setChildAttributes(child);\n // children share the placeholder indexer, so they must also\n // share the namespace their placeholders are rendered with.\n child.paramNamespace = this.paramNamespace;\n\n return child as this;\n }\n\n execute() {\n const [sql, params] = this.getQueryAndParameters();\n\n if (sql) {\n const parameters : Record<string, unknown> = {};\n for (const [i, param] of params.entries()) {\n parameters[`${this.paramNamespace}${i}`] = param;\n }\n\n // The builder may already carry an application-owned predicate\n // (for example a tenant or authorization scope). Rapiq filters\n // narrow that query; they must never replace its baseline WHERE.\n this.queryBuilder.andWhere(sql, parameters);\n }\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { RelationsBaseAdapter, splitFirst } from '@rapiq/sql';\nimport type { SelectQueryBuilder } from 'typeorm';\nimport type { RelationsAdapterOptions } from './types';\n\nexport class RelationsAdapter extends RelationsBaseAdapter {\n protected queryBuilder : SelectQueryBuilder<any>;\n\n protected options : RelationsAdapterOptions;\n\n constructor(\n queryBuilder: SelectQueryBuilder<any>,\n options: RelationsAdapterOptions = {},\n ) {\n super(options);\n\n this.queryBuilder = queryBuilder;\n this.options = options;\n }\n\n execute() : void {\n for (const relation of this.value) {\n if (relation.executed) {\n continue;\n }\n\n if (this.join(relation.path)) {\n relation.executed = true;\n }\n }\n }\n\n protected join(input: string): boolean {\n let relationFullName : string | undefined = input;\n let path : string | undefined;\n let meta = this.queryBuilder.expressionMap.mainAlias!.metadata;\n let parentAlias = this.queryBuilder.alias;\n\n const { joinAttributes } = this.queryBuilder.expressionMap;\n\n while (relationFullName) {\n let relationName : string;\n [relationName, relationFullName] = splitFirst(relationFullName);\n\n path = path ?\n `${path}.${relationName}` :\n relationName;\n\n const relation = meta.findRelationWithPropertyPath(relationName);\n if (!relation) {\n return false;\n }\n\n const alias = this.buildAlias(path);\n\n const joined = joinAttributes.some(\n (joinAttribute) => joinAttribute.alias.name === alias,\n );\n\n if (!joined) {\n this.applyJoin(`${parentAlias}.${relationName}`, alias);\n\n if (this.options.onJoin) {\n this.options.onJoin(path, alias, this.queryBuilder);\n }\n }\n\n meta = relation.inverseEntityMetadata;\n parentAlias = alias;\n }\n\n return true;\n }\n\n protected applyJoin(property: string, alias: string) : void {\n const inner = this.options.joinType === 'inner';\n\n if (this.options.joinAndSelect) {\n if (inner) {\n this.queryBuilder.innerJoinAndSelect(property, alias);\n } else {\n this.queryBuilder.leftJoinAndSelect(property, alias);\n }\n } else if (inner) {\n this.queryBuilder.innerJoin(property, alias);\n } else {\n this.queryBuilder.leftJoin(property, alias);\n }\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { SortBaseAdapter } from '@rapiq/sql';\nimport type { SelectQueryBuilder } from 'typeorm';\nimport type { RelationsAdapter } from './relations';\n\nexport class SortAdapter extends SortBaseAdapter {\n protected queryBuilder : SelectQueryBuilder<any>;\n\n constructor(queryBuilder: SelectQueryBuilder<any>, relations: RelationsAdapter) {\n super(relations);\n\n this.queryBuilder = queryBuilder;\n }\n\n rootAlias(): string | undefined {\n return this.queryBuilder.alias;\n }\n\n escapeField(field: string) {\n // order-by keys must stay `alias.property` — TypeORM resolves\n // them against its alias map and escapes on its own; pre-escaped\n // names break entity hydration as soon as a join is present.\n return field;\n }\n\n execute() {\n // a query without sorts leaves a caller-owned ORDER BY untouched —\n // the same preservation contract the filters adapter applies to\n // WHERE. TypeORM's orderBy({}) would REPLACE the builder state.\n if (Object.keys(this.value).length > 0) {\n this.queryBuilder.orderBy(this.value);\n }\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PaginationBaseAdapter } from '@rapiq/sql';\nimport type { SelectQueryBuilder } from 'typeorm';\n\nexport class PaginationAdapter extends PaginationBaseAdapter {\n protected queryBuilder : SelectQueryBuilder<any>;\n\n constructor(queryBuilder: SelectQueryBuilder<any>) {\n super();\n\n this.queryBuilder = queryBuilder;\n }\n\n override execute() {\n // a query without pagination leaves caller-owned take/skip\n // untouched — the same preservation contract the filters adapter\n // applies to WHERE. The adapter/builder pair is per-request;\n // resetting a previous run is not this method's job. Nullish\n // (not falsy) coalescing: an explicit 0 is a value, not absence.\n if (typeof this.limit !== 'undefined') {\n this.queryBuilder.take(this.limit ?? undefined);\n }\n\n if (typeof this.offset !== 'undefined') {\n this.queryBuilder.skip(this.offset ?? undefined);\n }\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IQuery } from '@rapiq/core';\nimport type { ExecuteOptions, IRootAdapter } from '@rapiq/sql';\nimport { QueryVisitor } from '@rapiq/sql';\nimport { RelationsAdapter } from './relations';\nimport { FieldsAdapter } from './fields';\nimport { FiltersAdapter } from './filters';\nimport { SortAdapter } from './sort';\nimport type { TypeormAdapterOptions, TypeormAdapterOutput } from './types';\nimport { PaginationAdapter } from './pagination';\n\nexport class TypeormAdapter implements IRootAdapter<TypeormAdapterOutput> {\n public readonly relations : RelationsAdapter;\n\n public readonly fields : FieldsAdapter;\n\n public readonly filters : FiltersAdapter;\n\n public readonly pagination : PaginationAdapter;\n\n public readonly sort : SortAdapter;\n\n constructor(options: TypeormAdapterOptions) {\n this.relations = new RelationsAdapter(options.queryBuilder, options.relations);\n this.fields = new FieldsAdapter(options.queryBuilder, this.relations);\n this.filters = new FiltersAdapter(options.queryBuilder, this.relations);\n this.pagination = new PaginationAdapter(options.queryBuilder);\n this.sort = new SortAdapter(options.queryBuilder, this.relations);\n }\n\n clear() {\n this.fields.clear();\n this.filters.clear();\n this.pagination.clear();\n this.sort.clear();\n this.relations.clear();\n }\n\n /**\n * Walk `query` into the sub-adapters and apply the accumulated state\n * to the queryBuilder query builder (bound at construction).\n */\n execute(\n query: IQuery,\n options: ExecuteOptions = {},\n ) : TypeormAdapterOutput {\n if (options.clear ?? true) {\n this.clear();\n }\n\n query.accept(new QueryVisitor(this, options.visitor));\n\n this.fields.execute();\n this.filters.execute();\n this.pagination.execute();\n this.sort.execute();\n this.relations.execute();\n\n return {\n pagination: {\n limit: this.pagination.limit,\n offset: this.pagination.offset,\n },\n };\n }\n}\n"],"mappings":";;;AAWA,IAAa,gBAAb,cAAmC,kBAAkB;CACjD;CAEA,YAAY,cAAuC,WAA6B;EAC5E,MAAM,SAAS;EAEf,KAAK,eAAe;CACxB;CAEA,YAAgC;EAC5B,OAAO,KAAK,aAAa;CAC7B;CAEA,YAAY,OAAe;EAIvB,OAAO;CACX;CAEA,UAAU;EACN,MAAM,UAAU,KAAK,WAAW;EAChC,IAAI,QAAQ,SAAS,GACjB,KAAK,aAAa,OAAO,OAAO;CAExC;AACJ;;;;;;;;ACrBA,SAAgB,oBACZ,OACe;CACf,MAAM,UAAU,eAAe,MAAM,WAAW,QAAQ,IAAI;CAC5D,IAAI,SACA,OAAO;CAGX,OAAO;AACX;;;;;;;;;ACLA,MAAM,6CAA6B,IAAI,IAAY;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACJ,CAAC;AAED,SAAS,yBAAyB,MAA4B;CAC1D,IAAI,SAAS,QACT,OAAO;CAGX,OAAO,OAAO,SAAS,YAAY,2BAA2B,IAAI,IAAI;AAC1E;;;;;;;AAQA,IAAI,sBAAsB;AAE1B,SAAS,qBAA8B;CACnC,uBAAuB;CAEvB,OAAO,SAAS,oBAAoB;AACxC;;;;;;AAOA,SAAS,yBAAyB,UAA0B,MAAc;CACtE,IAAI,UAAU;CACd,MAAM,WAAW,KAAK,MAAM,GAAG;CAE/B,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACtC,MAAM,UAAU,SAAS;EACzB,IAAI,CAAC,SACD;EAGJ,MAAM,SAAS,QAAQ,2BAA2B,SAAS,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;EAC7E,IAAI,QACA,OAAO;EAGX,MAAM,WAAW,QAAQ,6BAA6B,OAAO;EAC7D,IAAI,CAAC,UACD;EAGJ,UAAU,SAAS;CACvB;AAGJ;AAEA,IAAa,iBAAb,MAAa,uBAAuB,mBAAqC;CACrE;CAEA;CAEA;CAEA,YAAY,cAAuC,WAA6B;EAC5E,MAAM,SAAS;EAEf,KAAK,eAAe;EACpB,KAAK,UAAU,oBAAoB,YAAY;EAC/C,KAAK,iBAAiB,mBAAmB;CAC7C;CAEA,QAAiB;EACb,MAAM,MAAM;EAIZ,KAAK,iBAAiB,mBAAmB;CAC7C;CAEA,YAAgC;EAC5B,OAAO,KAAK,aAAa;CAC7B;CAEA,YAAY,OAAe;EACvB,OAAO,KAAK,aAAa,OAAO,KAAK;CACzC;CAEA,iBAAiB,OAAwB;EACrC,OAAO,IAAI,KAAK,iBAAiB,QAAQ;CAC7C;CAEA,oBAAuC;EACnC,OAAO,OAAO,KAAK,QAAQ,WAAW;CAC1C;CAEA,OAAO,OAAe,aAAqB,YAA6B;EACpE,IAAI,KAAK,QAAQ,QACb,OAAO,KAAK,QAAQ,OAAO,OAAO,aAAa,UAAU;EAG7D,MAAM,aAAa,mBAAmB,QAAQ;CAClD;CAEA,SAAkB,OAAwB;EACtC,IAAI,KAAK,QAAQ,UACb,OAAO,KAAK,QAAQ,SAAS,KAAK;EAGtC,OAAO,MAAM,SAAS,KAAK;CAC/B;CAEA,eAAwB,OAAyB;EAC7C,MAAM,EAAE,cAAc,KAAK,aAAa;EACxC,IAAI,CAAC,aAAa,CAAC,UAAU,aACzB,OAAO,MAAM,eAAe,KAAK;EAGrC,MAAM,SAAS,yBAAyB,UAAU,UAAU,KAAK;EACjE,IAAI,CAAC,QACD,OAAO,MAAM,eAAe,KAAK;EAGrC,OAAO,yBAAyB,OAAO,IAAI;CAC/C;CAEA,QAAc;EACV,MAAM,QAAQ,IAAI,eAAe,KAAK,cAAc,KAAK,SAAS;EAElE,KAAK,mBAAmB,KAAK;EAG7B,MAAM,iBAAiB,KAAK;EAE5B,OAAO;CACX;CAEA,UAAU;EACN,MAAM,CAAC,KAAK,UAAU,KAAK,sBAAsB;EAEjD,IAAI,KAAK;GACL,MAAM,aAAuC,CAAC;GAC9C,KAAK,MAAM,CAAC,GAAG,UAAU,OAAO,QAAQ,GACpC,WAAW,GAAG,KAAK,iBAAiB,OAAO;GAM/C,KAAK,aAAa,SAAS,KAAK,UAAU;EAC9C;CACJ;AACJ;;;AClLA,IAAa,mBAAb,cAAsC,qBAAqB;CACvD;CAEA;CAEA,YACI,cACA,UAAmC,CAAC,GACtC;EACE,MAAM,OAAO;EAEb,KAAK,eAAe;EACpB,KAAK,UAAU;CACnB;CAEA,UAAiB;EACb,KAAK,MAAM,YAAY,KAAK,OAAO;GAC/B,IAAI,SAAS,UACT;GAGJ,IAAI,KAAK,KAAK,SAAS,IAAI,GACvB,SAAS,WAAW;EAE5B;CACJ;CAEA,KAAe,OAAwB;EACnC,IAAI,mBAAwC;EAC5C,IAAI;EACJ,IAAI,OAAO,KAAK,aAAa,cAAc,UAAW;EACtD,IAAI,cAAc,KAAK,aAAa;EAEpC,MAAM,EAAE,mBAAmB,KAAK,aAAa;EAE7C,OAAO,kBAAkB;GACrB,IAAI;GACJ,CAAC,cAAc,oBAAoB,WAAW,gBAAgB;GAE9D,OAAO,OACH,GAAG,KAAK,GAAG,iBACX;GAEJ,MAAM,WAAW,KAAK,6BAA6B,YAAY;GAC/D,IAAI,CAAC,UACD,OAAO;GAGX,MAAM,QAAQ,KAAK,WAAW,IAAI;GAMlC,IAAI,CAJW,eAAe,MACzB,kBAAkB,cAAc,MAAM,SAAS,KAG1C,GAAG;IACT,KAAK,UAAU,GAAG,YAAY,GAAG,gBAAgB,KAAK;IAEtD,IAAI,KAAK,QAAQ,QACb,KAAK,QAAQ,OAAO,MAAM,OAAO,KAAK,YAAY;GAE1D;GAEA,OAAO,SAAS;GAChB,cAAc;EAClB;EAEA,OAAO;CACX;CAEA,UAAoB,UAAkB,OAAsB;EACxD,MAAM,QAAQ,KAAK,QAAQ,aAAa;EAExC,IAAI,KAAK,QAAQ,eACb,IAAI,OACA,KAAK,aAAa,mBAAmB,UAAU,KAAK;OAEpD,KAAK,aAAa,kBAAkB,UAAU,KAAK;OAEpD,IAAI,OACP,KAAK,aAAa,UAAU,UAAU,KAAK;OAE3C,KAAK,aAAa,SAAS,UAAU,KAAK;CAElD;AACJ;;;ACpFA,IAAa,cAAb,cAAiC,gBAAgB;CAC7C;CAEA,YAAY,cAAuC,WAA6B;EAC5E,MAAM,SAAS;EAEf,KAAK,eAAe;CACxB;CAEA,YAAgC;EAC5B,OAAO,KAAK,aAAa;CAC7B;CAEA,YAAY,OAAe;EAIvB,OAAO;CACX;CAEA,UAAU;EAIN,IAAI,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,SAAS,GACjC,KAAK,aAAa,QAAQ,KAAK,KAAK;CAE5C;AACJ;;;AC7BA,IAAa,oBAAb,cAAuC,sBAAsB;CACzD;CAEA,YAAY,cAAuC;EAC/C,MAAM;EAEN,KAAK,eAAe;CACxB;CAEA,UAAmB;EAMf,IAAI,OAAO,KAAK,UAAU,aACtB,KAAK,aAAa,KAAK,KAAK,SAAS,KAAA,CAAS;EAGlD,IAAI,OAAO,KAAK,WAAW,aACvB,KAAK,aAAa,KAAK,KAAK,UAAU,KAAA,CAAS;CAEvD;AACJ;;;AChBA,IAAa,iBAAb,MAA0E;CACtE;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,SAAgC;EACxC,KAAK,YAAY,IAAI,iBAAiB,QAAQ,cAAc,QAAQ,SAAS;EAC7E,KAAK,SAAS,IAAI,cAAc,QAAQ,cAAc,KAAK,SAAS;EACpE,KAAK,UAAU,IAAI,eAAe,QAAQ,cAAc,KAAK,SAAS;EACtE,KAAK,aAAa,IAAI,kBAAkB,QAAQ,YAAY;EAC5D,KAAK,OAAO,IAAI,YAAY,QAAQ,cAAc,KAAK,SAAS;CACpE;CAEA,QAAQ;EACJ,KAAK,OAAO,MAAM;EAClB,KAAK,QAAQ,MAAM;EACnB,KAAK,WAAW,MAAM;EACtB,KAAK,KAAK,MAAM;EAChB,KAAK,UAAU,MAAM;CACzB;;;;;CAMA,QACI,OACA,UAA0B,CAAC,GACN;EACrB,IAAI,QAAQ,SAAS,MACjB,KAAK,MAAM;EAGf,MAAM,OAAO,IAAI,aAAa,MAAM,QAAQ,OAAO,CAAC;EAEpD,KAAK,OAAO,QAAQ;EACpB,KAAK,QAAQ,QAAQ;EACrB,KAAK,WAAW,QAAQ;EACxB,KAAK,KAAK,QAAQ;EAClB,KAAK,UAAU,QAAQ;EAEvB,OAAO,EACH,YAAY;GACR,OAAO,KAAK,WAAW;GACvB,QAAQ,KAAK,WAAW;EAC5B,EACJ;CACJ;AACJ"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/adapter/fields.ts","../src/dialect.ts","../src/adapter/filters.ts","../src/adapter/relations.ts","../src/adapter/sort.ts","../src/adapter/pagination.ts","../src/adapter/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { FieldsBaseAdapter } from '@rapiq/sql';\nimport type { SelectQueryBuilder } from 'typeorm';\nimport type { RelationsAdapter } from './relations';\n\nexport class FieldsAdapter extends FieldsBaseAdapter {\n protected queryBuilder : SelectQueryBuilder<any>;\n\n constructor(queryBuilder: SelectQueryBuilder<any>, relations: RelationsAdapter) {\n super(relations);\n\n this.queryBuilder = queryBuilder;\n }\n\n rootAlias(): string | undefined {\n return this.queryBuilder.alias;\n }\n\n escapeField(field: string) {\n // selection keys must stay `alias.property` — TypeORM resolves\n // them against its alias map and escapes on its own; pre-escaped\n // names break column resolution and entity hydration.\n return field;\n }\n\n execute() {\n const columns = this.getColumns();\n if (columns.length > 0) {\n this.queryBuilder.select(columns);\n }\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DialectOptions } from '@rapiq/sql';\nimport { pg, resolveDialect } from '@rapiq/sql';\nimport type { SelectQueryBuilder } from 'typeorm';\n\n/**\n * Resolve the {@link DialectOptions} preset matching the query builder's\n * connection type. The postgres preset is the documented last-resort\n * default when the connection type has no matching preset.\n */\nexport function resolveQueryDialect(\n query: SelectQueryBuilder<any>,\n) : DialectOptions {\n const dialect = resolveDialect(query.connection.options.type);\n if (dialect) {\n return dialect;\n }\n\n return pg;\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { AdapterError } from '@rapiq/core';\nimport type { DialectOptions } from '@rapiq/sql';\nimport { FiltersBaseAdapter } from '@rapiq/sql';\nimport type { ColumnType, EntityMetadata, SelectQueryBuilder } from 'typeorm';\nimport { resolveQueryDialect } from '../dialect';\nimport type { RelationsAdapter } from './relations';\n\n/**\n * Column types whose values are strings and therefore participate in\n * case-insensitive equality folding. Non-string columns never fold —\n * lower() on them is wasted work at best and a type error at worst\n * (e.g. `lower(integer)` on postgres).\n */\nconst CASE_FOLDABLE_COLUMN_TYPES = new Set<string>([\n 'varchar', \n 'character varying', \n 'varying character', \n 'char varying',\n 'nvarchar', \n 'national varchar',\n 'char', \n 'nchar', \n 'national char', \n 'character', \n 'native character',\n 'text', \n 'tinytext', \n 'mediumtext', \n 'longtext', \n 'ntext', \n 'citext',\n 'string',\n]);\n\nfunction isCaseFoldableColumnType(type: ColumnType) : boolean {\n if (type === String) {\n return true;\n }\n\n return typeof type === 'string' && CASE_FOLDABLE_COLUMN_TYPES.has(type);\n}\n\n/**\n * TypeORM parameters are global to the query builder and last-write-wins,\n * so every filter application needs its own namespace: positional names\n * like `:0` would silently rebind a caller-owned `:0` parameter — or, on\n * a re-run, the previous run's clauses.\n */\nlet PARAM_NAMESPACE_SEQ = 0;\n\nfunction nextParamNamespace() : string {\n PARAM_NAMESPACE_SEQ += 1;\n\n return `rapiq_${PARAM_NAMESPACE_SEQ}_`;\n}\n\n/**\n * Resolve a (possibly relation-dotted) property path to its column,\n * descending through relation metadata segment by segment; embedded\n * paths resolve through the plain column lookup per step.\n */\nfunction findColumnByPropertyPath(metadata: EntityMetadata, path: string) {\n let current = metadata;\n const segments = path.split('.');\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (!segment) {\n return undefined;\n }\n\n const column = current.findColumnWithPropertyPath(segments.slice(i).join('.'));\n if (column) {\n return column;\n }\n\n const relation = current.findRelationWithPropertyPath(segment);\n if (!relation) {\n return undefined;\n }\n\n current = relation.inverseEntityMetadata;\n }\n\n return undefined;\n}\n\nexport class FiltersAdapter extends FiltersBaseAdapter<RelationsAdapter> {\n protected queryBuilder : SelectQueryBuilder<any>;\n\n protected dialect : DialectOptions;\n\n protected paramNamespace : string;\n\n constructor(queryBuilder: SelectQueryBuilder<any>, relations: RelationsAdapter) {\n super(relations);\n\n this.queryBuilder = queryBuilder;\n this.dialect = resolveQueryDialect(queryBuilder);\n this.paramNamespace = nextParamNamespace();\n }\n\n override clear() {\n super.clear();\n\n // a fresh namespace per run: clauses a previous run left on the\n // builder keep their own bindings instead of being rebound.\n this.paramNamespace = nextParamNamespace();\n }\n\n rootAlias(): string | undefined {\n return this.queryBuilder.alias;\n }\n\n escapeField(field: string) {\n return this.queryBuilder.escape(field);\n }\n\n paramPlaceholder(index: number) : string {\n return `:${this.paramNamespace}${index - 1}`;\n }\n\n override isRegexpSupported() : boolean {\n return typeof this.dialect.regexp !== 'undefined';\n }\n\n regexp(field: string, placeholder: string, ignoreCase: boolean): string {\n if (this.dialect.regexp) {\n return this.dialect.regexp(field, placeholder, ignoreCase);\n }\n\n throw AdapterError.featureUnsupported('regexp');\n }\n\n override caseFold(input: string) : string {\n if (this.dialect.caseFold) {\n return this.dialect.caseFold(input);\n }\n\n return super.caseFold(input);\n }\n\n override isCaseFoldable(field: string) : boolean {\n const { mainAlias } = this.queryBuilder.expressionMap;\n if (!mainAlias || !mainAlias.hasMetadata) {\n return super.isCaseFoldable(field);\n }\n\n const column = findColumnByPropertyPath(mainAlias.metadata, field);\n if (!column) {\n return super.isCaseFoldable(field);\n }\n\n return isCaseFoldableColumnType(column.type);\n }\n\n /**\n * WHERE fragments are raw SQL — the SelectQueryBuilder dropped\n * whole-query property-name replacement with typeorm 1.x, so\n * property paths must resolve to their database column names here.\n */\n override resolveFieldName(name: string, relationPath?: string) : string {\n const { mainAlias } = this.queryBuilder.expressionMap;\n if (!mainAlias || !mainAlias.hasMetadata) {\n return super.resolveFieldName(name, relationPath);\n }\n\n const path = relationPath ? `${relationPath}.${name}` : name;\n const column = findColumnByPropertyPath(mainAlias.metadata, path);\n if (!column) {\n return super.resolveFieldName(name, relationPath);\n }\n\n return column.databaseName;\n }\n\n child(): this {\n const child = new FiltersAdapter(this.queryBuilder, this.relations);\n\n this.setChildAttributes(child);\n // children share the placeholder indexer, so they must also\n // share the namespace their placeholders are rendered with.\n child.paramNamespace = this.paramNamespace;\n\n return child as this;\n }\n\n execute() {\n const [sql, params] = this.getQueryAndParameters();\n\n if (sql) {\n const parameters : Record<string, unknown> = {};\n for (const [i, param] of params.entries()) {\n parameters[`${this.paramNamespace}${i}`] = param;\n }\n\n // The builder may already carry an application-owned predicate\n // (for example a tenant or authorization scope). Rapiq filters\n // narrow that query; they must never replace its baseline WHERE.\n this.queryBuilder.andWhere(sql, parameters);\n }\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { RelationsBaseAdapter, splitFirst } from '@rapiq/sql';\nimport type { SelectQueryBuilder } from 'typeorm';\nimport type { RelationsAdapterOptions } from './types';\n\nexport class RelationsAdapter extends RelationsBaseAdapter {\n protected queryBuilder : SelectQueryBuilder<any>;\n\n protected options : RelationsAdapterOptions;\n\n constructor(\n queryBuilder: SelectQueryBuilder<any>,\n options: RelationsAdapterOptions = {},\n ) {\n super(options);\n\n this.queryBuilder = queryBuilder;\n this.options = options;\n }\n\n execute() : void {\n for (const relation of this.value) {\n if (relation.executed) {\n continue;\n }\n\n if (this.join(relation.path)) {\n relation.executed = true;\n }\n }\n }\n\n protected join(input: string): boolean {\n let relationFullName : string | undefined = input;\n let path : string | undefined;\n let meta = this.queryBuilder.expressionMap.mainAlias!.metadata;\n let parentAlias = this.queryBuilder.alias;\n\n const { joinAttributes } = this.queryBuilder.expressionMap;\n\n while (relationFullName) {\n let relationName : string;\n [relationName, relationFullName] = splitFirst(relationFullName);\n\n path = path ?\n `${path}.${relationName}` :\n relationName;\n\n const relation = meta.findRelationWithPropertyPath(relationName);\n if (!relation) {\n return false;\n }\n\n const alias = this.buildAlias(path);\n\n const joined = joinAttributes.some(\n (joinAttribute) => joinAttribute.alias.name === alias,\n );\n\n if (!joined) {\n this.applyJoin(`${parentAlias}.${relationName}`, alias);\n\n if (this.options.onJoin) {\n this.options.onJoin(path, alias, this.queryBuilder);\n }\n }\n\n meta = relation.inverseEntityMetadata;\n parentAlias = alias;\n }\n\n return true;\n }\n\n protected applyJoin(property: string, alias: string) : void {\n const inner = this.options.joinType === 'inner';\n\n if (this.options.joinAndSelect) {\n if (inner) {\n this.queryBuilder.innerJoinAndSelect(property, alias);\n } else {\n this.queryBuilder.leftJoinAndSelect(property, alias);\n }\n } else if (inner) {\n this.queryBuilder.innerJoin(property, alias);\n } else {\n this.queryBuilder.leftJoin(property, alias);\n }\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { SortBaseAdapter } from '@rapiq/sql';\nimport type { SelectQueryBuilder } from 'typeorm';\nimport type { RelationsAdapter } from './relations';\n\nexport class SortAdapter extends SortBaseAdapter {\n protected queryBuilder : SelectQueryBuilder<any>;\n\n constructor(queryBuilder: SelectQueryBuilder<any>, relations: RelationsAdapter) {\n super(relations);\n\n this.queryBuilder = queryBuilder;\n }\n\n rootAlias(): string | undefined {\n return this.queryBuilder.alias;\n }\n\n escapeField(field: string) {\n // order-by keys must stay `alias.property` — TypeORM resolves\n // them against its alias map and escapes on its own; pre-escaped\n // names break entity hydration as soon as a join is present.\n return field;\n }\n\n execute() {\n // a query without sorts leaves a caller-owned ORDER BY untouched —\n // the same preservation contract the filters adapter applies to\n // WHERE. TypeORM's orderBy({}) would REPLACE the builder state.\n if (Object.keys(this.value).length > 0) {\n this.queryBuilder.orderBy(this.value);\n }\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PaginationBaseAdapter } from '@rapiq/sql';\nimport type { SelectQueryBuilder } from 'typeorm';\n\nexport class PaginationAdapter extends PaginationBaseAdapter {\n protected queryBuilder : SelectQueryBuilder<any>;\n\n constructor(queryBuilder: SelectQueryBuilder<any>) {\n super();\n\n this.queryBuilder = queryBuilder;\n }\n\n override execute() {\n // a query without pagination leaves caller-owned take/skip\n // untouched — the same preservation contract the filters adapter\n // applies to WHERE. The adapter/builder pair is per-request;\n // resetting a previous run is not this method's job. Nullish\n // (not falsy) coalescing: an explicit 0 is a value, not absence.\n if (typeof this.limit !== 'undefined') {\n this.queryBuilder.take(this.limit ?? undefined);\n }\n\n if (typeof this.offset !== 'undefined') {\n this.queryBuilder.skip(this.offset ?? undefined);\n }\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IQuery } from '@rapiq/core';\nimport type { ExecuteOptions, IRootAdapter } from '@rapiq/sql';\nimport { QueryVisitor } from '@rapiq/sql';\nimport { RelationsAdapter } from './relations';\nimport { FieldsAdapter } from './fields';\nimport { FiltersAdapter } from './filters';\nimport { SortAdapter } from './sort';\nimport type { TypeormAdapterOptions, TypeormAdapterOutput } from './types';\nimport { PaginationAdapter } from './pagination';\n\nexport class TypeormAdapter implements IRootAdapter<TypeormAdapterOutput> {\n public readonly relations : RelationsAdapter;\n\n public readonly fields : FieldsAdapter;\n\n public readonly filters : FiltersAdapter;\n\n public readonly pagination : PaginationAdapter;\n\n public readonly sort : SortAdapter;\n\n constructor(options: TypeormAdapterOptions) {\n this.relations = new RelationsAdapter(options.queryBuilder, options.relations);\n this.fields = new FieldsAdapter(options.queryBuilder, this.relations);\n this.filters = new FiltersAdapter(options.queryBuilder, this.relations);\n this.pagination = new PaginationAdapter(options.queryBuilder);\n this.sort = new SortAdapter(options.queryBuilder, this.relations);\n }\n\n clear() {\n this.fields.clear();\n this.filters.clear();\n this.pagination.clear();\n this.sort.clear();\n this.relations.clear();\n }\n\n /**\n * Walk `query` into the sub-adapters and apply the accumulated state\n * to the queryBuilder query builder (bound at construction).\n */\n execute(\n query: IQuery,\n options: ExecuteOptions = {},\n ) : TypeormAdapterOutput {\n if (options.clear ?? true) {\n this.clear();\n }\n\n query.accept(new QueryVisitor(this, options.visitor));\n\n this.fields.execute();\n this.filters.execute();\n this.pagination.execute();\n this.sort.execute();\n this.relations.execute();\n\n return {\n pagination: {\n limit: this.pagination.limit,\n offset: this.pagination.offset,\n },\n };\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rapiq/typeorm",
3
- "version": "2.0.0-beta.0",
3
+ "version": "2.0.0-beta.1",
4
4
  "description": "A typeorm adapter for rapiq.",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -16,9 +16,9 @@
16
16
  "dist/"
17
17
  ],
18
18
  "devDependencies": {
19
- "@rapiq/core": "^2.0.0-beta.0",
20
- "@rapiq/parser-simple": "^2.0.0-beta.0",
21
- "@rapiq/sql": "^2.0.0-beta.0",
19
+ "@rapiq/core": "^2.0.0-beta.1",
20
+ "@rapiq/parser-simple": "^2.0.0-beta.1",
21
+ "@rapiq/sql": "^2.0.0-beta.1",
22
22
  "@swc/core": "^1.15.43",
23
23
  "ansis": "^4.2.0",
24
24
  "better-sqlite3": "^12.6.0",
@@ -28,8 +28,8 @@
28
28
  "unplugin-swc": "^1.5.9"
29
29
  },
30
30
  "peerDependencies": {
31
- "@rapiq/core": "^2.0.0-beta.0",
32
- "@rapiq/sql": "^2.0.0-beta.0",
31
+ "@rapiq/core": "^2.0.0-beta.1",
32
+ "@rapiq/sql": "^2.0.0-beta.1",
33
33
  "typeorm": "^1.1.0"
34
34
  },
35
35
  "scripts": {