@expo/entity-database-adapter-knex 0.54.0 → 0.57.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.
Files changed (91) hide show
  1. package/build/src/AuthorizationResultBasedKnexEntityLoader.d.ts +279 -0
  2. package/build/src/AuthorizationResultBasedKnexEntityLoader.js +127 -0
  3. package/build/src/AuthorizationResultBasedKnexEntityLoader.js.map +1 -0
  4. package/build/src/BasePostgresEntityDatabaseAdapter.d.ts +150 -0
  5. package/build/src/BasePostgresEntityDatabaseAdapter.js +119 -0
  6. package/build/src/BasePostgresEntityDatabaseAdapter.js.map +1 -0
  7. package/build/src/BaseSQLQueryBuilder.d.ts +61 -0
  8. package/build/src/BaseSQLQueryBuilder.js +87 -0
  9. package/build/src/BaseSQLQueryBuilder.js.map +1 -0
  10. package/build/src/EnforcingKnexEntityLoader.d.ts +124 -0
  11. package/build/src/EnforcingKnexEntityLoader.js +166 -0
  12. package/build/src/EnforcingKnexEntityLoader.js.map +1 -0
  13. package/build/src/KnexEntityLoaderFactory.d.ts +25 -0
  14. package/build/src/KnexEntityLoaderFactory.js +39 -0
  15. package/build/src/KnexEntityLoaderFactory.js.map +1 -0
  16. package/build/src/PaginationStrategy.d.ts +30 -0
  17. package/build/src/PaginationStrategy.js +35 -0
  18. package/build/src/PaginationStrategy.js.map +1 -0
  19. package/build/src/PostgresEntity.d.ts +25 -0
  20. package/build/src/PostgresEntity.js +39 -0
  21. package/build/src/PostgresEntity.js.map +1 -0
  22. package/build/src/PostgresEntityDatabaseAdapter.d.ts +12 -5
  23. package/build/src/PostgresEntityDatabaseAdapter.js +32 -11
  24. package/build/src/PostgresEntityDatabaseAdapter.js.map +1 -1
  25. package/build/src/PostgresEntityDatabaseAdapterProvider.d.ts +9 -0
  26. package/build/src/PostgresEntityDatabaseAdapterProvider.js +5 -1
  27. package/build/src/PostgresEntityDatabaseAdapterProvider.js.map +1 -1
  28. package/build/src/ReadonlyPostgresEntity.d.ts +25 -0
  29. package/build/src/ReadonlyPostgresEntity.js +39 -0
  30. package/build/src/ReadonlyPostgresEntity.js.map +1 -0
  31. package/build/src/SQLOperator.d.ts +261 -0
  32. package/build/src/SQLOperator.js +464 -0
  33. package/build/src/SQLOperator.js.map +1 -0
  34. package/build/src/index.d.ts +15 -0
  35. package/build/src/index.js +15 -0
  36. package/build/src/index.js.map +1 -1
  37. package/build/src/internal/EntityKnexDataManager.d.ts +147 -0
  38. package/build/src/internal/EntityKnexDataManager.js +453 -0
  39. package/build/src/internal/EntityKnexDataManager.js.map +1 -0
  40. package/build/src/internal/getKnexDataManager.d.ts +3 -0
  41. package/build/src/internal/getKnexDataManager.js +19 -0
  42. package/build/src/internal/getKnexDataManager.js.map +1 -0
  43. package/build/src/internal/getKnexEntityLoaderFactory.d.ts +3 -0
  44. package/build/src/internal/getKnexEntityLoaderFactory.js +11 -0
  45. package/build/src/internal/getKnexEntityLoaderFactory.js.map +1 -0
  46. package/build/src/internal/utilityTypes.d.ts +5 -0
  47. package/build/src/internal/utilityTypes.js +5 -0
  48. package/build/src/internal/utilityTypes.js.map +1 -0
  49. package/build/src/internal/weakMaps.d.ts +9 -0
  50. package/build/src/internal/weakMaps.js +20 -0
  51. package/build/src/internal/weakMaps.js.map +1 -0
  52. package/build/src/knexLoader.d.ts +18 -0
  53. package/build/src/knexLoader.js +31 -0
  54. package/build/src/knexLoader.js.map +1 -0
  55. package/package.json +6 -5
  56. package/src/AuthorizationResultBasedKnexEntityLoader.ts +538 -0
  57. package/src/BasePostgresEntityDatabaseAdapter.ts +317 -0
  58. package/src/BaseSQLQueryBuilder.ts +114 -0
  59. package/src/EnforcingKnexEntityLoader.ts +271 -0
  60. package/src/KnexEntityLoaderFactory.ts +130 -0
  61. package/src/PaginationStrategy.ts +32 -0
  62. package/src/PostgresEntity.ts +118 -0
  63. package/src/PostgresEntityDatabaseAdapter.ts +78 -24
  64. package/src/PostgresEntityDatabaseAdapterProvider.ts +11 -1
  65. package/src/ReadonlyPostgresEntity.ts +115 -0
  66. package/src/SQLOperator.ts +603 -0
  67. package/src/__integration-tests__/EntityCreationUtils-test.ts +25 -31
  68. package/src/__integration-tests__/PostgresEntityIntegration-test.ts +3192 -330
  69. package/src/__integration-tests__/PostgresEntityQueryContextProvider-test.ts +7 -7
  70. package/src/__testfixtures__/PostgresTestEntity.ts +17 -3
  71. package/src/__tests__/AuthorizationResultBasedKnexEntityLoader-test.ts +1167 -0
  72. package/src/__tests__/BasePostgresEntityDatabaseAdapter-test.ts +160 -0
  73. package/src/__tests__/EnforcingKnexEntityLoader-test.ts +384 -0
  74. package/src/__tests__/EntityFields-test.ts +1 -1
  75. package/src/__tests__/PostgresEntity-test.ts +172 -0
  76. package/src/__tests__/ReadonlyEntity-test.ts +32 -0
  77. package/src/__tests__/SQLOperator-test.ts +831 -0
  78. package/src/__tests__/fixtures/StubPostgresDatabaseAdapter.ts +302 -0
  79. package/src/__tests__/fixtures/StubPostgresDatabaseAdapterProvider.ts +17 -0
  80. package/src/__tests__/fixtures/TestEntity.ts +131 -0
  81. package/src/__tests__/fixtures/TestPaginationEntity.ts +107 -0
  82. package/src/__tests__/fixtures/createUnitTestPostgresEntityCompanionProvider.ts +42 -0
  83. package/src/index.ts +15 -0
  84. package/src/internal/EntityKnexDataManager.ts +832 -0
  85. package/src/internal/__tests__/EntityKnexDataManager-test.ts +378 -0
  86. package/src/internal/__tests__/weakMaps-test.ts +25 -0
  87. package/src/internal/getKnexDataManager.ts +43 -0
  88. package/src/internal/getKnexEntityLoaderFactory.ts +60 -0
  89. package/src/internal/utilityTypes.ts +11 -0
  90. package/src/internal/weakMaps.ts +19 -0
  91. package/src/knexLoader.ts +110 -0
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Search strategy for SQL-based pagination.
3
+ */
4
+ export declare enum PaginationStrategy {
5
+ /**
6
+ * Standard pagination with ORDER BY. Results are ordered by the specified orderBy fields, with ID field automatically included for stable pagination if not already present.
7
+ */
8
+ STANDARD = "standard",
9
+ /**
10
+ * Case-insensitive pattern matching search using SQL ILIKE operator.
11
+ * Results are ordered by the fields being searched within in the order specified, then by ID for tie-breaking and stable pagination.
12
+ */
13
+ ILIKE_SEARCH = "ilike-search",
14
+ /**
15
+ * Similarity search using PostgreSQL trigram similarity. Results are ordered by exact match priority, then by similarity score, then by specified extra order by fields if provided, then by ID for tie-breaking and stable pagination.
16
+ *
17
+ * Performance considerations:
18
+ * - Trigram search can be significantly slower than ILIKE search, especially on large datasets without appropriate indexes.
19
+ * - Consider using ILIKE search for smaller datasets or when exact substring matching is sufficient
20
+ * - For larger datasets, ensure proper indexing or consider dedicated full-text search solutions.
21
+ * - For optimal performance, create GIN or GIST indexes on searchable columns:
22
+ * ```sql
23
+ * CREATE EXTENSION IF NOT EXISTS pg_trgm;
24
+ * CREATE INDEX idx_table_field_trigram ON table_name USING gin(field_name gin_trgm_ops);
25
+ * -- Or for multiple columns:
26
+ * CREATE INDEX idx_table_search ON table_name USING gin((field1 || ' ' || field2) gin_trgm_ops);
27
+ * ```
28
+ */
29
+ TRIGRAM_SEARCH = "trigram"
30
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PaginationStrategy = void 0;
4
+ /**
5
+ * Search strategy for SQL-based pagination.
6
+ */
7
+ var PaginationStrategy;
8
+ (function (PaginationStrategy) {
9
+ /**
10
+ * Standard pagination with ORDER BY. Results are ordered by the specified orderBy fields, with ID field automatically included for stable pagination if not already present.
11
+ */
12
+ PaginationStrategy["STANDARD"] = "standard";
13
+ /**
14
+ * Case-insensitive pattern matching search using SQL ILIKE operator.
15
+ * Results are ordered by the fields being searched within in the order specified, then by ID for tie-breaking and stable pagination.
16
+ */
17
+ PaginationStrategy["ILIKE_SEARCH"] = "ilike-search";
18
+ /**
19
+ * Similarity search using PostgreSQL trigram similarity. Results are ordered by exact match priority, then by similarity score, then by specified extra order by fields if provided, then by ID for tie-breaking and stable pagination.
20
+ *
21
+ * Performance considerations:
22
+ * - Trigram search can be significantly slower than ILIKE search, especially on large datasets without appropriate indexes.
23
+ * - Consider using ILIKE search for smaller datasets or when exact substring matching is sufficient
24
+ * - For larger datasets, ensure proper indexing or consider dedicated full-text search solutions.
25
+ * - For optimal performance, create GIN or GIST indexes on searchable columns:
26
+ * ```sql
27
+ * CREATE EXTENSION IF NOT EXISTS pg_trgm;
28
+ * CREATE INDEX idx_table_field_trigram ON table_name USING gin(field_name gin_trgm_ops);
29
+ * -- Or for multiple columns:
30
+ * CREATE INDEX idx_table_search ON table_name USING gin((field1 || ' ' || field2) gin_trgm_ops);
31
+ * ```
32
+ */
33
+ PaginationStrategy["TRIGRAM_SEARCH"] = "trigram";
34
+ })(PaginationStrategy || (exports.PaginationStrategy = PaginationStrategy = {}));
35
+ //# sourceMappingURL=PaginationStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaginationStrategy.js","sourceRoot":"","sources":["../../src/PaginationStrategy.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,IAAY,kBA4BX;AA5BD,WAAY,kBAAkB;IAC5B;;OAEG;IACH,2CAAqB,CAAA;IAErB;;;OAGG;IACH,mDAA6B,CAAA;IAE7B;;;;;;;;;;;;;;OAcG;IACH,gDAA0B,CAAA;AAC5B,CAAC,EA5BW,kBAAkB,kCAAlB,kBAAkB,QA4B7B"}
@@ -0,0 +1,25 @@
1
+ import { Entity, EntityPrivacyPolicy, EntityQueryContext, IEntityClass, ReadonlyEntity, ViewerContext } from '@expo/entity';
2
+ import { AuthorizationResultBasedKnexEntityLoader } from './AuthorizationResultBasedKnexEntityLoader';
3
+ import { EnforcingKnexEntityLoader } from './EnforcingKnexEntityLoader';
4
+ /**
5
+ * Abstract base class for mutable entities backed by Postgres.
6
+ * Provides `knexLoader` and `knexLoaderWithAuthorizationResults` as inherited static methods,
7
+ * in addition to the mutation methods inherited from `Entity`.
8
+ */
9
+ export declare abstract class PostgresEntity<TFields extends Record<string, any>, TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>, TViewerContext extends ViewerContext, TSelectedFields extends keyof TFields = keyof TFields> extends Entity<TFields, TIDField, TViewerContext, TSelectedFields> {
10
+ /**
11
+ * Vend knex loader for loading entities via knex-specific methods in a given query context.
12
+ *
13
+ * @param viewerContext - viewer context of loading user
14
+ * @param queryContext - query context in which to perform the load
15
+ */
16
+ static knexLoader<TMFields extends object, TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>, TMViewerContext extends ViewerContext, TMViewerContext2 extends TMViewerContext, TMEntity extends ReadonlyEntity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>, TMPrivacyPolicy extends EntityPrivacyPolicy<TMFields, TMIDField, TMViewerContext, TMEntity, TMSelectedFields>, TMSelectedFields extends keyof TMFields = keyof TMFields>(this: IEntityClass<TMFields, TMIDField, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>, viewerContext: TMViewerContext2, queryContext?: EntityQueryContext): EnforcingKnexEntityLoader<TMFields, TMIDField, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>;
17
+ /**
18
+ * Vend knex loader for loading entities via knex-specific methods in a given query context.
19
+ * Returns authorization results instead of throwing on authorization errors.
20
+ *
21
+ * @param viewerContext - viewer context of loading user
22
+ * @param queryContext - query context in which to perform the load
23
+ */
24
+ static knexLoaderWithAuthorizationResults<TMFields extends object, TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>, TMViewerContext extends ViewerContext, TMViewerContext2 extends TMViewerContext, TMEntity extends ReadonlyEntity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>, TMPrivacyPolicy extends EntityPrivacyPolicy<TMFields, TMIDField, TMViewerContext, TMEntity, TMSelectedFields>, TMSelectedFields extends keyof TMFields = keyof TMFields>(this: IEntityClass<TMFields, TMIDField, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>, viewerContext: TMViewerContext2, queryContext?: EntityQueryContext): AuthorizationResultBasedKnexEntityLoader<TMFields, TMIDField, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>;
25
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PostgresEntity = void 0;
4
+ const entity_1 = require("@expo/entity");
5
+ const knexLoader_1 = require("./knexLoader");
6
+ /**
7
+ * Abstract base class for mutable entities backed by Postgres.
8
+ * Provides `knexLoader` and `knexLoaderWithAuthorizationResults` as inherited static methods,
9
+ * in addition to the mutation methods inherited from `Entity`.
10
+ */
11
+ class PostgresEntity extends entity_1.Entity {
12
+ /**
13
+ * Vend knex loader for loading entities via knex-specific methods in a given query context.
14
+ *
15
+ * @param viewerContext - viewer context of loading user
16
+ * @param queryContext - query context in which to perform the load
17
+ */
18
+ static knexLoader(viewerContext, queryContext = viewerContext
19
+ .getViewerScopedEntityCompanionForClass(this)
20
+ .getQueryContextProvider()
21
+ .getQueryContext()) {
22
+ return (0, knexLoader_1.knexLoader)(this, viewerContext, queryContext);
23
+ }
24
+ /**
25
+ * Vend knex loader for loading entities via knex-specific methods in a given query context.
26
+ * Returns authorization results instead of throwing on authorization errors.
27
+ *
28
+ * @param viewerContext - viewer context of loading user
29
+ * @param queryContext - query context in which to perform the load
30
+ */
31
+ static knexLoaderWithAuthorizationResults(viewerContext, queryContext = viewerContext
32
+ .getViewerScopedEntityCompanionForClass(this)
33
+ .getQueryContextProvider()
34
+ .getQueryContext()) {
35
+ return (0, knexLoader_1.knexLoaderWithAuthorizationResults)(this, viewerContext, queryContext);
36
+ }
37
+ }
38
+ exports.PostgresEntity = PostgresEntity;
39
+ //# sourceMappingURL=PostgresEntity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresEntity.js","sourceRoot":"","sources":["../../src/PostgresEntity.ts"],"names":[],"mappings":";;;AAAA,yCAOsB;AAItB,6CAGsB;AAEtB;;;;GAIG;AACH,MAAsB,cAKpB,SAAQ,eAA0D;IAClE;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAuBf,aAA+B,EAC/B,eAAmC,aAAa;SAC7C,sCAAsC,CAAC,IAAI,CAAC;SAC5C,uBAAuB,EAAE;SACzB,eAAe,EAAE;QASpB,OAAO,IAAA,uBAAY,EAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,kCAAkC,CAuBvC,aAA+B,EAC/B,eAAmC,aAAa;SAC7C,sCAAsC,CAAC,IAAI,CAAC;SAC5C,uBAAuB,EAAE;SACzB,eAAe,EAAE;QASpB,OAAO,IAAA,+CAAoC,EAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IACjF,CAAC;CACF;AAhGD,wCAgGC"}
@@ -1,12 +1,19 @@
1
- import { EntityDatabaseAdapter, FieldTransformerMap, TableFieldMultiValueEqualityCondition, TableFieldSingleValueEqualityCondition, TableQuerySelectionModifiers, TableQuerySelectionModifiersWithOrderByRaw } from '@expo/entity';
1
+ import { EntityConfiguration, FieldTransformerMap } from '@expo/entity';
2
2
  import { Knex } from 'knex';
3
- export declare class PostgresEntityDatabaseAdapter<TFields extends Record<string, any>, TIDField extends keyof TFields> extends EntityDatabaseAdapter<TFields, TIDField> {
3
+ import { BasePostgresEntityDatabaseAdapter, TableFieldMultiValueEqualityCondition, TableFieldSingleValueEqualityCondition, TableQuerySelectionModifiers } from './BasePostgresEntityDatabaseAdapter';
4
+ import { PostgresEntityDatabaseAdapterConfiguration } from './PostgresEntityDatabaseAdapterProvider';
5
+ import { SQLFragment } from './SQLOperator';
6
+ export declare class PostgresEntityDatabaseAdapter<TFields extends Record<string, any>, TIDField extends keyof TFields> extends BasePostgresEntityDatabaseAdapter<TFields, TIDField> {
7
+ private readonly adapterConfiguration;
8
+ constructor(entityConfiguration: EntityConfiguration<TFields, TIDField>, adapterConfiguration?: PostgresEntityDatabaseAdapterConfiguration);
9
+ get paginationMaxPageSize(): number | undefined;
4
10
  protected getFieldTransformerMap(): FieldTransformerMap;
5
11
  protected fetchManyWhereInternalAsync(queryInterface: Knex, tableName: string, tableColumns: readonly string[], tableTuples: any[][]): Promise<object[]>;
6
- private applyQueryModifiersToQueryOrderByRaw;
12
+ protected fetchOneWhereInternalAsync(queryInterface: Knex, tableName: string, tableColumns: readonly string[], tableTuple: readonly any[]): Promise<object | null>;
7
13
  private applyQueryModifiersToQuery;
8
- protected fetchManyByFieldEqualityConjunctionInternalAsync(queryInterface: Knex, tableName: string, tableFieldSingleValueEqualityOperands: TableFieldSingleValueEqualityCondition[], tableFieldMultiValueEqualityOperands: TableFieldMultiValueEqualityCondition[], querySelectionModifiers: TableQuerySelectionModifiers): Promise<object[]>;
9
- protected fetchManyByRawWhereClauseInternalAsync(queryInterface: Knex, tableName: string, rawWhereClause: string, bindings: object | any[], querySelectionModifiers: TableQuerySelectionModifiersWithOrderByRaw): Promise<object[]>;
14
+ protected fetchManyByFieldEqualityConjunctionInternalAsync(queryInterface: Knex, tableName: string, tableFieldSingleValueEqualityOperands: TableFieldSingleValueEqualityCondition[], tableFieldMultiValueEqualityOperands: TableFieldMultiValueEqualityCondition[], querySelectionModifiers: TableQuerySelectionModifiers<TFields>): Promise<object[]>;
15
+ protected fetchManyByRawWhereClauseInternalAsync(queryInterface: Knex, tableName: string, rawWhereClause: string, bindings: object | any[], querySelectionModifiers: TableQuerySelectionModifiers<TFields>): Promise<object[]>;
16
+ protected fetchManyBySQLFragmentInternalAsync(queryInterface: Knex, tableName: string, sqlFragment: SQLFragment<TFields>, querySelectionModifiers: TableQuerySelectionModifiers<TFields>): Promise<object[]>;
10
17
  protected insertInternalAsync(queryInterface: Knex, tableName: string, object: object): Promise<object[]>;
11
18
  protected updateInternalAsync(queryInterface: Knex, tableName: string, tableIdField: string, id: any, object: object): Promise<object[]>;
12
19
  protected deleteInternalAsync(queryInterface: Knex, tableName: string, tableIdField: string, id: any): Promise<number>;
@@ -2,9 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PostgresEntityDatabaseAdapter = void 0;
4
4
  const entity_1 = require("@expo/entity");
5
+ const BasePostgresEntityDatabaseAdapter_1 = require("./BasePostgresEntityDatabaseAdapter");
5
6
  const EntityFields_1 = require("./EntityFields");
6
7
  const wrapNativePostgresCallAsync_1 = require("./errors/wrapNativePostgresCallAsync");
7
- class PostgresEntityDatabaseAdapter extends entity_1.EntityDatabaseAdapter {
8
+ class PostgresEntityDatabaseAdapter extends BasePostgresEntityDatabaseAdapter_1.BasePostgresEntityDatabaseAdapter {
9
+ adapterConfiguration;
10
+ constructor(entityConfiguration, adapterConfiguration = {}) {
11
+ super(entityConfiguration);
12
+ this.adapterConfiguration = adapterConfiguration;
13
+ }
14
+ get paginationMaxPageSize() {
15
+ return this.adapterConfiguration.paginationMaxPageSize;
16
+ }
8
17
  getFieldTransformerMap() {
9
18
  return new Map([
10
19
  [
@@ -62,20 +71,27 @@ class PostgresEntityDatabaseAdapter extends entity_1.EntityDatabaseAdapter {
62
71
  }
63
72
  return await (0, wrapNativePostgresCallAsync_1.wrapNativePostgresCallAsync)(() => queryInterface.select().from(tableName).whereIn(tableColumns, tableTuples));
64
73
  }
65
- applyQueryModifiersToQueryOrderByRaw(query, querySelectionModifiers) {
66
- let ret = this.applyQueryModifiersToQuery(query, querySelectionModifiers);
67
- const { orderByRaw } = querySelectionModifiers;
68
- if (orderByRaw !== undefined) {
69
- ret = ret.orderByRaw(orderByRaw);
70
- }
71
- return ret;
74
+ async fetchOneWhereInternalAsync(queryInterface, tableName, tableColumns, tableTuple) {
75
+ const results = await this.fetchManyByFieldEqualityConjunctionInternalAsync(queryInterface, tableName, tableColumns.map((column, index) => ({
76
+ tableField: column,
77
+ tableValue: tableTuple[index],
78
+ })), [], { limit: 1, orderBy: undefined, offset: undefined });
79
+ return results[0] ?? null;
72
80
  }
73
81
  applyQueryModifiersToQuery(query, querySelectionModifiers) {
74
82
  const { orderBy, offset, limit } = querySelectionModifiers;
75
83
  let ret = query;
76
84
  if (orderBy !== undefined) {
77
85
  for (const orderBySpecification of orderBy) {
78
- ret = ret.orderBy(orderBySpecification.columnName, orderBySpecification.order);
86
+ if ('columnName' in orderBySpecification) {
87
+ ret = ret.orderBy(orderBySpecification.columnName, orderBySpecification.order, orderBySpecification.nulls);
88
+ }
89
+ else {
90
+ const nullsSuffix = orderBySpecification.nulls
91
+ ? ` NULLS ${orderBySpecification.nulls === BasePostgresEntityDatabaseAdapter_1.NullsOrdering.FIRST ? 'FIRST' : 'LAST'}`
92
+ : '';
93
+ ret = ret.orderByRaw(`(${orderBySpecification.columnFragment.sql}) ${orderBySpecification.order}${nullsSuffix}`, orderBySpecification.columnFragment.getKnexBindings((fieldName) => (0, entity_1.getDatabaseFieldForEntityField)(this.entityConfiguration, fieldName)));
94
+ }
79
95
  }
80
96
  }
81
97
  if (offset !== undefined) {
@@ -120,11 +136,16 @@ class PostgresEntityDatabaseAdapter extends entity_1.EntityDatabaseAdapter {
120
136
  return await (0, wrapNativePostgresCallAsync_1.wrapNativePostgresCallAsync)(() => query);
121
137
  }
122
138
  async fetchManyByRawWhereClauseInternalAsync(queryInterface, tableName, rawWhereClause, bindings, querySelectionModifiers) {
139
+ let query = queryInterface.select().from(tableName).whereRaw(rawWhereClause, bindings);
140
+ query = this.applyQueryModifiersToQuery(query, querySelectionModifiers);
141
+ return await (0, wrapNativePostgresCallAsync_1.wrapNativePostgresCallAsync)(() => query);
142
+ }
143
+ async fetchManyBySQLFragmentInternalAsync(queryInterface, tableName, sqlFragment, querySelectionModifiers) {
123
144
  let query = queryInterface
124
145
  .select()
125
146
  .from(tableName)
126
- .whereRaw(rawWhereClause, bindings);
127
- query = this.applyQueryModifiersToQueryOrderByRaw(query, querySelectionModifiers);
147
+ .whereRaw(sqlFragment.sql, sqlFragment.getKnexBindings((fieldName) => (0, entity_1.getDatabaseFieldForEntityField)(this.entityConfiguration, fieldName)));
148
+ query = this.applyQueryModifiersToQuery(query, querySelectionModifiers);
128
149
  return await (0, wrapNativePostgresCallAsync_1.wrapNativePostgresCallAsync)(() => query);
129
150
  }
130
151
  async insertInternalAsync(queryInterface, tableName, object) {
@@ -1 +1 @@
1
- {"version":3,"file":"PostgresEntityDatabaseAdapter.js","sourceRoot":"","sources":["../../src/PostgresEntityDatabaseAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PostgresEntityDatabaseAdapter.js","sourceRoot":"","sources":["../../src/PostgresEntityDatabaseAdapter.ts"],"names":[],"mappings":";;;AAAA,yCAKsB;AAGtB,2FAM6C;AAC7C,iDAAqE;AAGrE,sFAAmF;AAEnF,MAAa,6BAGX,SAAQ,qEAAoD;IAGzC;IAFnB,YACE,mBAA2D,EAC1C,uBAAmE,EAAE;QAEtF,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAFV,yBAAoB,GAApB,oBAAoB,CAAiD;IAGxF,CAAC;IAED,IAAa,qBAAqB;QAChC,OAAO,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC;IACzD,CAAC;IAES,sBAAsB;QAC9B,OAAO,IAAI,GAAG,CAAgC;YAC5C;gBACE,6BAAc,CAAC,IAAI;gBACnB;oBACE;;;uBAGG;oBACH,KAAK,EAAE,CAAC,GAAU,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;iBAC3C;aACF;YACD;gBACE,kCAAmB,CAAC,IAAI;gBACxB;oBACE;;;;uBAIG;oBACH,KAAK,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;iBAC9E;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,2BAA2B,CACzC,cAAoB,EACpB,SAAiB,EACjB,YAA+B,EAC/B,WAAoB;QAEpB,yEAAyE;QACzE,iDAAiD;QACjD,gFAAgF;QAChF,yFAAyF;QACzF,kCAAkC;QAClC,EAAE;QACF,gFAAgF;QAChF,4GAA4G;QAC5G,wHAAwH;QACxH,iEAAiE;QACjE,kHAAkH;QAClH,gCAAgC;QAChC,EAAE;QACF,gGAAgG;QAChG,iGAAiG;QACjG,wGAAwG;QACxG,0BAA0B;QAC1B,EAAE;QACF,iHAAiH;QACjH,sDAAsD;QAEtD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,MAAM,IAAA,yDAA2B,EAAC,GAAG,EAAE,CAC5C,cAAc;iBACX,MAAM,EAAE;iBACR,IAAI,CAAC,SAAS,CAAC;iBACf,QAAQ,CAAC,eAAe,EAAE;gBACzB,YAAY,CAAC,CAAC,CAAC;gBACf,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aAC/C,CAAC,CACL,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,IAAA,yDAA2B,EAAC,GAAG,EAAE,CAC5C,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAC3E,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,0BAA0B,CACxC,cAAoB,EACpB,SAAiB,EACjB,YAA+B,EAC/B,UAA0B;QAE1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gDAAgD,CACzE,cAAc,EACd,SAAS,EACT,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACnC,UAAU,EAAE,MAAM;YAClB,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;SAC9B,CAAC,CAAC,EACH,EAAE,EACF,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CACpD,CAAC;QACF,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;IAEO,0BAA0B,CAChC,KAAwB,EACxB,uBAA8D;QAE9D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,uBAAuB,CAAC;QAE3D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,KAAK,MAAM,oBAAoB,IAAI,OAAO,EAAE,CAAC;gBAC3C,IAAI,YAAY,IAAI,oBAAoB,EAAE,CAAC;oBACzC,GAAG,GAAG,GAAG,CAAC,OAAO,CACf,oBAAoB,CAAC,UAAU,EAC/B,oBAAoB,CAAC,KAAK,EAC1B,oBAAoB,CAAC,KAAK,CAC3B,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK;wBAC5C,CAAC,CAAC,UAAU,oBAAoB,CAAC,KAAK,KAAK,iDAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE;wBACnF,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,GAAG,GAAG,CAAC,UAAU,CAClB,IAAI,oBAAoB,CAAC,cAAc,CAAC,GAAG,KAAK,oBAAoB,CAAC,KAAK,GAAG,WAAW,EAAE,EAC1F,oBAAoB,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,EAAE,CAChE,IAAA,uCAA8B,EAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CACpE,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAES,KAAK,CAAC,gDAAgD,CAC9D,cAAoB,EACpB,SAAiB,EACjB,qCAA+E,EAC/E,oCAA6E,EAC7E,uBAA8D;QAE9D,IAAI,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpD,IAAI,qCAAqC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,WAAW,GAA2B,EAAE,CAAC;YAC/C,MAAM,4CAA4C,GAChD,qCAAqC,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;YACxF,MAAM,yCAAyC,GAC7C,qCAAqC,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;YAExF,IAAI,4CAA4C,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5D,KAAK,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,4CAA4C,EAAE,CAAC;oBACtF,WAAW,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;gBACvC,CAAC;gBACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,yCAAyC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzD,KAAK,MAAM,EAAE,UAAU,EAAE,IAAI,yCAAyC,EAAE,CAAC;oBACvE,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,oCAAoC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,KAAK,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,oCAAoC,EAAE,CAAC;gBAC/E,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;gBACnF,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;oBACvE,kEAAkE;oBAClE,IAAI,kBAAkB,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;wBACrD,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;QACxE,OAAO,MAAM,IAAA,yDAA2B,EAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAES,KAAK,CAAC,sCAAsC,CACpD,cAAoB,EACpB,SAAiB,EACjB,cAAsB,EACtB,QAAwB,EACxB,uBAA8D;QAE9D,IAAI,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACvF,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;QACxE,OAAO,MAAM,IAAA,yDAA2B,EAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAES,KAAK,CAAC,mCAAmC,CACjD,cAAoB,EACpB,SAAiB,EACjB,WAAiC,EACjC,uBAA8D;QAE9D,IAAI,KAAK,GAAG,cAAc;aACvB,MAAM,EAAE;aACR,IAAI,CAAC,SAAS,CAAC;aACf,QAAQ,CACP,WAAW,CAAC,GAAG,EACf,WAAW,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,EAAE,CACxC,IAAA,uCAA8B,EAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CACpE,CACF,CAAC;QACJ,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;QACxE,OAAO,MAAM,IAAA,yDAA2B,EAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,cAAoB,EACpB,SAAiB,EACjB,MAAc;QAEd,OAAO,MAAM,IAAA,yDAA2B,EAAC,GAAG,EAAE,CAC5C,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAC7D,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,cAAoB,EACpB,SAAiB,EACjB,YAAoB,EACpB,EAAO,EACP,MAAc;QAEd,OAAO,MAAM,IAAA,yDAA2B,EAAC,GAAG,EAAE,CAC5C,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CACrF,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,cAAoB,EACpB,SAAiB,EACjB,YAAoB,EACpB,EAAO;QAEP,OAAO,MAAM,IAAA,yDAA2B,EAAC,GAAG,EAAE,CAC5C,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAC7D,CAAC;IACJ,CAAC;CACF;AA9PD,sEA8PC"}
@@ -1,4 +1,13 @@
1
1
  import { EntityConfiguration, EntityDatabaseAdapter, IEntityDatabaseAdapterProvider } from '@expo/entity';
2
+ export interface PostgresEntityDatabaseAdapterConfiguration {
3
+ /**
4
+ * Maximum page size for pagination (first/last parameters).
5
+ * If not specified, no limit is enforced.
6
+ */
7
+ paginationMaxPageSize?: number;
8
+ }
2
9
  export declare class PostgresEntityDatabaseAdapterProvider implements IEntityDatabaseAdapterProvider {
10
+ private readonly configuration;
11
+ constructor(configuration?: PostgresEntityDatabaseAdapterConfiguration);
3
12
  getDatabaseAdapter<TFields extends Record<string, any>, TIDField extends keyof TFields>(entityConfiguration: EntityConfiguration<TFields, TIDField>): EntityDatabaseAdapter<TFields, TIDField>;
4
13
  }
@@ -3,8 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PostgresEntityDatabaseAdapterProvider = void 0;
4
4
  const PostgresEntityDatabaseAdapter_1 = require("./PostgresEntityDatabaseAdapter");
5
5
  class PostgresEntityDatabaseAdapterProvider {
6
+ configuration;
7
+ constructor(configuration = {}) {
8
+ this.configuration = configuration;
9
+ }
6
10
  getDatabaseAdapter(entityConfiguration) {
7
- return new PostgresEntityDatabaseAdapter_1.PostgresEntityDatabaseAdapter(entityConfiguration);
11
+ return new PostgresEntityDatabaseAdapter_1.PostgresEntityDatabaseAdapter(entityConfiguration, this.configuration);
8
12
  }
9
13
  }
10
14
  exports.PostgresEntityDatabaseAdapterProvider = PostgresEntityDatabaseAdapterProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"PostgresEntityDatabaseAdapterProvider.js","sourceRoot":"","sources":["../../src/PostgresEntityDatabaseAdapterProvider.ts"],"names":[],"mappings":";;;AAMA,mFAAgF;AAEhF,MAAa,qCAAqC;IAChD,kBAAkB,CAChB,mBAA2D;QAE3D,OAAO,IAAI,6DAA6B,CAAC,mBAAmB,CAAC,CAAC;IAChE,CAAC;CACF;AAND,sFAMC"}
1
+ {"version":3,"file":"PostgresEntityDatabaseAdapterProvider.js","sourceRoot":"","sources":["../../src/PostgresEntityDatabaseAdapterProvider.ts"],"names":[],"mappings":";;;AAMA,mFAAgF;AAUhF,MAAa,qCAAqC;IACnB;IAA7B,YAA6B,gBAA4D,EAAE;QAA9D,kBAAa,GAAb,aAAa,CAAiD;IAAG,CAAC;IAE/F,kBAAkB,CAChB,mBAA2D;QAE3D,OAAO,IAAI,6DAA6B,CAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACpF,CAAC;CACF;AARD,sFAQC"}
@@ -0,0 +1,25 @@
1
+ import { EntityPrivacyPolicy, EntityQueryContext, IEntityClass, ReadonlyEntity, ViewerContext } from '@expo/entity';
2
+ import { AuthorizationResultBasedKnexEntityLoader } from './AuthorizationResultBasedKnexEntityLoader';
3
+ import { EnforcingKnexEntityLoader } from './EnforcingKnexEntityLoader';
4
+ /**
5
+ * Abstract base class for readonly entities backed by Postgres.
6
+ * Provides `knexLoader` and `knexLoaderWithAuthorizationResults` as inherited static methods.
7
+ *
8
+ * Entities that should not be mutated (e.g., representing SQL views or immutable tables)
9
+ * can extend this class instead of `ReadonlyEntity` to get knex loader ergonomics.
10
+ */
11
+ export declare abstract class ReadonlyPostgresEntity<TFields extends Record<string, any>, TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>, TViewerContext extends ViewerContext, TSelectedFields extends keyof TFields = keyof TFields> extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields> {
12
+ /**
13
+ * Vend knex loader for loading entities via non-data-loader methods in a given query context.
14
+ * @param viewerContext - viewer context of loading user
15
+ * @param queryContext - query context in which to perform the load
16
+ */
17
+ static knexLoader<TMFields extends object, TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>, TMViewerContext extends ViewerContext, TMEntity extends ReadonlyEntity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>, TMPrivacyPolicy extends EntityPrivacyPolicy<TMFields, TMIDField, TMViewerContext, TMEntity, TMSelectedFields>, TMSelectedFields extends keyof TMFields = keyof TMFields>(this: IEntityClass<TMFields, TMIDField, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>, viewerContext: TMViewerContext, queryContext?: EntityQueryContext): EnforcingKnexEntityLoader<TMFields, TMIDField, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>;
18
+ /**
19
+ * Vend knex loader for loading entities via non-data-loader methods in a given query context.
20
+ * Returns authorization results instead of throwing on authorization errors.
21
+ * @param viewerContext - viewer context of loading user
22
+ * @param queryContext - query context in which to perform the load
23
+ */
24
+ static knexLoaderWithAuthorizationResults<TMFields extends object, TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>, TMViewerContext extends ViewerContext, TMEntity extends ReadonlyEntity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>, TMPrivacyPolicy extends EntityPrivacyPolicy<TMFields, TMIDField, TMViewerContext, TMEntity, TMSelectedFields>, TMSelectedFields extends keyof TMFields = keyof TMFields>(this: IEntityClass<TMFields, TMIDField, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>, viewerContext: TMViewerContext, queryContext?: EntityQueryContext): AuthorizationResultBasedKnexEntityLoader<TMFields, TMIDField, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>;
25
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReadonlyPostgresEntity = void 0;
4
+ const entity_1 = require("@expo/entity");
5
+ const knexLoader_1 = require("./knexLoader");
6
+ /**
7
+ * Abstract base class for readonly entities backed by Postgres.
8
+ * Provides `knexLoader` and `knexLoaderWithAuthorizationResults` as inherited static methods.
9
+ *
10
+ * Entities that should not be mutated (e.g., representing SQL views or immutable tables)
11
+ * can extend this class instead of `ReadonlyEntity` to get knex loader ergonomics.
12
+ */
13
+ class ReadonlyPostgresEntity extends entity_1.ReadonlyEntity {
14
+ /**
15
+ * Vend knex loader for loading entities via non-data-loader methods in a given query context.
16
+ * @param viewerContext - viewer context of loading user
17
+ * @param queryContext - query context in which to perform the load
18
+ */
19
+ static knexLoader(viewerContext, queryContext = viewerContext
20
+ .getViewerScopedEntityCompanionForClass(this)
21
+ .getQueryContextProvider()
22
+ .getQueryContext()) {
23
+ return (0, knexLoader_1.knexLoader)(this, viewerContext, queryContext);
24
+ }
25
+ /**
26
+ * Vend knex loader for loading entities via non-data-loader methods in a given query context.
27
+ * Returns authorization results instead of throwing on authorization errors.
28
+ * @param viewerContext - viewer context of loading user
29
+ * @param queryContext - query context in which to perform the load
30
+ */
31
+ static knexLoaderWithAuthorizationResults(viewerContext, queryContext = viewerContext
32
+ .getViewerScopedEntityCompanionForClass(this)
33
+ .getQueryContextProvider()
34
+ .getQueryContext()) {
35
+ return (0, knexLoader_1.knexLoaderWithAuthorizationResults)(this, viewerContext, queryContext);
36
+ }
37
+ }
38
+ exports.ReadonlyPostgresEntity = ReadonlyPostgresEntity;
39
+ //# sourceMappingURL=ReadonlyPostgresEntity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadonlyPostgresEntity.js","sourceRoot":"","sources":["../../src/ReadonlyPostgresEntity.ts"],"names":[],"mappings":";;;AAAA,yCAMsB;AAItB,6CAGsB;AAEtB;;;;;;GAMG;AACH,MAAsB,sBAKpB,SAAQ,uBAAkE;IAC1E;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAsBf,aAA8B,EAC9B,eAAmC,aAAa;SAC7C,sCAAsC,CAAC,IAAI,CAAC;SAC5C,uBAAuB,EAAE;SACzB,eAAe,EAAE;QASpB,OAAO,IAAA,uBAAY,EAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,kCAAkC,CAsBvC,aAA8B,EAC9B,eAAmC,aAAa;SAC7C,sCAAsC,CAAC,IAAI,CAAC;SAC5C,uBAAuB,EAAE;SACzB,eAAe,EAAE;QASpB,OAAO,IAAA,+CAAoC,EAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IACjF,CAAC;CACF;AA5FD,wDA4FC"}