@uql/core 3.9.1 → 3.9.3
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/CHANGELOG.md +14 -2
- package/dist/browser/querier/httpQuerier.d.ts +13 -13
- package/dist/browser/querier/httpQuerier.d.ts.map +1 -1
- package/dist/browser/querier/httpQuerier.js +2 -1
- package/dist/browser/querier/httpQuerier.js.map +1 -1
- package/dist/browser/querier/querier.util.d.ts +1 -1
- package/dist/browser/querier/querier.util.d.ts.map +1 -1
- package/dist/browser/querier/querier.util.js.map +1 -1
- package/dist/browser/type/clientQuerier.d.ts +5 -5
- package/dist/browser/type/clientQuerier.d.ts.map +1 -1
- package/dist/browser/uql-browser.min.js +40 -26
- package/dist/browser/uql-browser.min.js.map +1 -1
- package/dist/d1/d1Querier.d.ts +3 -3
- package/dist/d1/d1Querier.d.ts.map +1 -1
- package/dist/dialect/abstractDialect.d.ts +3 -3
- package/dist/dialect/abstractDialect.d.ts.map +1 -1
- package/dist/dialect/abstractDialect.js +4 -3
- package/dist/dialect/abstractDialect.js.map +1 -1
- package/dist/dialect/abstractSqlDialect.d.ts +8 -7
- package/dist/dialect/abstractSqlDialect.d.ts.map +1 -1
- package/dist/dialect/abstractSqlDialect.js +86 -51
- package/dist/dialect/abstractSqlDialect.js.map +1 -1
- package/dist/entity/decorator/definition.d.ts.map +1 -1
- package/dist/entity/decorator/definition.js +35 -22
- package/dist/entity/decorator/definition.js.map +1 -1
- package/dist/entity/decorator/entity.d.ts.map +1 -1
- package/dist/entity/decorator/field.d.ts.map +1 -1
- package/dist/entity/decorator/id.d.ts +1 -1
- package/dist/entity/decorator/id.d.ts.map +1 -1
- package/dist/entity/decorator/id.js +1 -1
- package/dist/entity/decorator/id.js.map +1 -1
- package/dist/entity/decorator/index-decorator.d.ts.map +1 -1
- package/dist/entity/decorator/index-decorator.js +2 -1
- package/dist/entity/decorator/index-decorator.js.map +1 -1
- package/dist/entity/decorator/relation.d.ts.map +1 -1
- package/dist/express/querierMiddleware.d.ts +2 -2
- package/dist/express/querierMiddleware.d.ts.map +1 -1
- package/dist/express/querierMiddleware.js +8 -5
- package/dist/express/querierMiddleware.js.map +1 -1
- package/dist/libsql/libsqlQuerier.d.ts +2 -2
- package/dist/libsql/libsqlQuerier.d.ts.map +1 -1
- package/dist/maria/mariadbQuerier.d.ts +2 -1
- package/dist/maria/mariadbQuerier.d.ts.map +1 -1
- package/dist/maria/mariadbQuerier.js.map +1 -1
- package/dist/migrate/builder/migrationBuilder.d.ts.map +1 -1
- package/dist/migrate/builder/migrationBuilder.js +5 -1
- package/dist/migrate/builder/migrationBuilder.js.map +1 -1
- package/dist/migrate/cli.d.ts +1 -1
- package/dist/migrate/cli.d.ts.map +1 -1
- package/dist/migrate/cli.js +5 -1
- package/dist/migrate/cli.js.map +1 -1
- package/dist/migrate/codegen/entityMerger.d.ts +4 -0
- package/dist/migrate/codegen/entityMerger.d.ts.map +1 -1
- package/dist/migrate/codegen/entityMerger.js +27 -24
- package/dist/migrate/codegen/entityMerger.js.map +1 -1
- package/dist/migrate/generator/mongoSchemaGenerator.d.ts.map +1 -1
- package/dist/migrate/generator/mongoSchemaGenerator.js +5 -4
- package/dist/migrate/generator/mongoSchemaGenerator.js.map +1 -1
- package/dist/migrate/introspection/mysqlIntrospector.d.ts +36 -6
- package/dist/migrate/introspection/mysqlIntrospector.d.ts.map +1 -1
- package/dist/migrate/introspection/mysqlIntrospector.js +12 -8
- package/dist/migrate/introspection/mysqlIntrospector.js.map +1 -1
- package/dist/migrate/introspection/postgresIntrospector.d.ts +36 -6
- package/dist/migrate/introspection/postgresIntrospector.d.ts.map +1 -1
- package/dist/migrate/introspection/postgresIntrospector.js +5 -7
- package/dist/migrate/introspection/postgresIntrospector.js.map +1 -1
- package/dist/migrate/introspection/sqliteIntrospector.d.ts +36 -6
- package/dist/migrate/introspection/sqliteIntrospector.d.ts.map +1 -1
- package/dist/migrate/introspection/sqliteIntrospector.js +8 -4
- package/dist/migrate/introspection/sqliteIntrospector.js.map +1 -1
- package/dist/migrate/migrator.js.map +1 -1
- package/dist/migrate/schemaGenerator.js +1 -1
- package/dist/migrate/schemaGenerator.js.map +1 -1
- package/dist/mongo/mongoDialect.d.ts +10 -7
- package/dist/mongo/mongoDialect.d.ts.map +1 -1
- package/dist/mongo/mongoDialect.js +98 -46
- package/dist/mongo/mongoDialect.js.map +1 -1
- package/dist/mongo/mongodbQuerier.d.ts +3 -3
- package/dist/mongo/mongodbQuerier.d.ts.map +1 -1
- package/dist/mongo/mongodbQuerier.js +6 -5
- package/dist/mongo/mongodbQuerier.js.map +1 -1
- package/dist/mysql/mysql2Querier.d.ts +2 -1
- package/dist/mysql/mysql2Querier.d.ts.map +1 -1
- package/dist/mysql/mysql2Querier.js.map +1 -1
- package/dist/neon/neonQuerier.d.ts +2 -1
- package/dist/neon/neonQuerier.d.ts.map +1 -1
- package/dist/neon/neonQuerier.js.map +1 -1
- package/dist/postgres/pgQuerier.d.ts +3 -2
- package/dist/postgres/pgQuerier.d.ts.map +1 -1
- package/dist/postgres/pgQuerier.js.map +1 -1
- package/dist/postgres/postgresDialect.js +1 -1
- package/dist/postgres/postgresDialect.js.map +1 -1
- package/dist/querier/abstractPoolQuerier.d.ts +2 -2
- package/dist/querier/abstractPoolQuerier.d.ts.map +1 -1
- package/dist/querier/abstractQuerier.d.ts +31 -31
- package/dist/querier/abstractQuerier.d.ts.map +1 -1
- package/dist/querier/abstractQuerier.js +23 -10
- package/dist/querier/abstractQuerier.js.map +1 -1
- package/dist/querier/abstractQuerierPool.d.ts +2 -2
- package/dist/querier/abstractQuerierPool.d.ts.map +1 -1
- package/dist/querier/abstractSqlQuerier.d.ts +9 -9
- package/dist/querier/abstractSqlQuerier.d.ts.map +1 -1
- package/dist/querier/abstractSqlQuerier.js +8 -6
- package/dist/querier/abstractSqlQuerier.js.map +1 -1
- package/dist/querier/decorator/injectQuerier.d.ts.map +1 -1
- package/dist/querier/decorator/log.d.ts.map +1 -1
- package/dist/querier/decorator/serialized.d.ts.map +1 -1
- package/dist/querier/decorator/transactional.d.ts.map +1 -1
- package/dist/querier/decorator/transactional.js +1 -1
- package/dist/querier/decorator/transactional.js.map +1 -1
- package/dist/schema/canonicalType.js.map +1 -1
- package/dist/schema/schemaASTBuilder.d.ts +1 -1
- package/dist/schema/schemaASTBuilder.d.ts.map +1 -1
- package/dist/sqlite/sqliteDialect.js.map +1 -1
- package/dist/sqlite/sqliteQuerier.d.ts +2 -2
- package/dist/sqlite/sqliteQuerier.d.ts.map +1 -1
- package/dist/sqlite/sqliteQuerierPool.d.ts +4 -8
- package/dist/sqlite/sqliteQuerierPool.d.ts.map +1 -1
- package/dist/sqlite/sqliteQuerierPool.js +2 -2
- package/dist/sqlite/sqliteQuerierPool.js.map +1 -1
- package/dist/type/entity.d.ts +8 -2
- package/dist/type/entity.d.ts.map +1 -1
- package/dist/type/logger.d.ts +3 -3
- package/dist/type/logger.d.ts.map +1 -1
- package/dist/type/querier.d.ts +22 -22
- package/dist/type/querier.d.ts.map +1 -1
- package/dist/type/querier.js.map +1 -1
- package/dist/type/query.d.ts +2 -2
- package/dist/type/query.d.ts.map +1 -1
- package/dist/type/universalQuerier.d.ts +14 -14
- package/dist/type/universalQuerier.d.ts.map +1 -1
- package/dist/type/utility.d.ts +0 -4
- package/dist/type/utility.d.ts.map +1 -1
- package/dist/util/dialect.util.d.ts +3 -3
- package/dist/util/dialect.util.d.ts.map +1 -1
- package/dist/util/dialect.util.js +6 -3
- package/dist/util/dialect.util.js.map +1 -1
- package/dist/util/field.util.d.ts +2 -2
- package/dist/util/field.util.d.ts.map +1 -1
- package/dist/util/field.util.js.map +1 -1
- package/dist/util/logger.d.ts +4 -4
- package/dist/util/logger.d.ts.map +1 -1
- package/dist/util/logger.js.map +1 -1
- package/dist/util/object.util.d.ts +2 -2
- package/dist/util/object.util.d.ts.map +1 -1
- package/dist/util/object.util.js +1 -1
- package/dist/util/object.util.js.map +1 -1
- package/dist/util/sql.util.d.ts +3 -3
- package/dist/util/sql.util.d.ts.map +1 -1
- package/dist/util/sql.util.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
-
## [3.9.
|
|
6
|
+
## [3.9.3](https://github.com/rogerpadilla/uql/compare/@uql/core@3.9.2...@uql/core@3.9.3) (2026-02-13)
|
|
7
7
|
|
|
8
8
|
**Note:** Version bump only for package @uql/core
|
|
9
9
|
|
|
@@ -17,6 +17,19 @@ All notable changes to this project will be documented in this file. Please add
|
|
|
17
17
|
|
|
18
18
|
date format is [yyyy-mm-dd]
|
|
19
19
|
|
|
20
|
+
## [3.9.2] - 2026-02-13
|
|
21
|
+
### Improvements & Refactoring
|
|
22
|
+
- **Reduced Cognitive Complexity**: Extracted `compareLogicalOperator` from `AbstractSqlDialect.compare` and `countBraces` helper from `EntityMerger.findInsertPosition`, bringing both functions under the biome complexity threshold.
|
|
23
|
+
- **Tighter Type Safety**: Replaced `any` with `unknown` across the logger interface, field utilities, and D1 bindings. Typed all DB querier constructors with `ExtraOptions` instead of `any`.
|
|
24
|
+
|
|
25
|
+
## [3.9.1] - 2026-02-13
|
|
26
|
+
### Improvements & Refactoring
|
|
27
|
+
- **TypeScript Upgrade**: Upgraded to TypeScript ^5.9.3 and hardened `tsconfig.json` with strict flags (`noPropertyAccessFromIndexSignature`, `verbatimModuleSyntax`, etc.).
|
|
28
|
+
- **Type Safety Polish**: Propagated `E extends object` constraint across the `Querier` hierarchy and refined driver signatures to eliminate type casts (`as any`).
|
|
29
|
+
|
|
30
|
+
### Bug Fixes
|
|
31
|
+
- **MySQL Introspection Fix**: Fixed a bug where string default values were returned with surrounding quotes (e.g., `'active'`) during schema discovery in MySQL and MariaDB.
|
|
32
|
+
|
|
20
33
|
## [3.9.0] - 2026-02-13
|
|
21
34
|
### New Features
|
|
22
35
|
- **New Query Operators**: Added `$between`, `$isNull`, `$isNotNull`, `$all`, `$size`, and `$elemMatch` operators with full support across PostgreSQL, MySQL, SQLite, and MongoDB.
|
|
@@ -26,7 +39,6 @@ date format is [yyyy-mm-dd]
|
|
|
26
39
|
- **Structured Slow-Query Config**: Replaced flat `slowQueryThreshold: number` with a `slowQuery: { threshold, logParams? }` object. Use `logParams: false` to suppress sensitive query parameters from slow-query logs.
|
|
27
40
|
- **DRY Dialect Refactor**: Extracted shared `$elemMatch` field-condition logic into `buildJsonFieldCondition` in `AbstractSqlDialect` with a `JsonFieldConfig` type. Each SQL dialect now passes a small config object (~10 lines) instead of duplicating a ~60-line switch across MySQL, PostgreSQL, and SQLite.
|
|
28
41
|
- **Safer Abstract Base**: `$all`, `$size`, and `$elemMatch` now throw in the abstract SQL dialect base class, forcing each dialect subclass to provide its own implementation. This prevents silent inheritance of dialect-specific syntax.
|
|
29
|
-
- **Type Safety**: Removed `$entity` from base `QuerySearch` type; it now exists only in dedicated intersection types (`QueryWithEntity`, `QueryOneWithEntity`, `QuerySearchWithEntity`), preventing it from leaking into unrelated query contexts.
|
|
30
42
|
|
|
31
43
|
### Bug Fixes
|
|
32
44
|
- **SQLite `$in`/`$nin` Fix**: Fixed a critical bug where `buildJsonFieldOperator` used `vals.shift()` inside `.map()`, mutating the input array and only processing half the values.
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import type { IdValue, Query, QueryOne, QueryOptions, QuerySearch, Type } from '../../type/index.js';
|
|
2
|
-
import type { ClientQuerier, RequestFindOptions, RequestOptions } from '../type/index.js';
|
|
1
|
+
import type { IdKey, IdValue, Query, QueryOne, QueryOptions, QuerySearch, Type } from '../../type/index.js';
|
|
2
|
+
import type { ClientQuerier, RequestFindOptions, RequestOptions, RequestSuccessResponse } from '../type/index.js';
|
|
3
3
|
export declare class HttpQuerier implements ClientQuerier {
|
|
4
4
|
readonly basePath: string;
|
|
5
5
|
constructor(basePath: string);
|
|
6
|
-
findOneById<E>(entity: Type<E>, id: IdValue<E>, q?: QueryOne<E>, opts?: RequestOptions): Promise<
|
|
7
|
-
findOne<E>(entity: Type<E>, q: QueryOne<E>, opts?: RequestOptions): Promise<
|
|
8
|
-
findMany<E>(entity: Type<E>, q: Query<E>, opts?: RequestFindOptions): Promise<
|
|
9
|
-
findManyAndCount<E>(entity: Type<E>, q: Query<E>, opts?: RequestFindOptions): Promise<
|
|
10
|
-
count<E>(entity: Type<E>, q: QuerySearch<E>, opts?: RequestOptions): Promise<
|
|
11
|
-
insertOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<
|
|
12
|
-
updateOneById<E>(entity: Type<E>, id: IdValue<E>, payload: E, opts?: RequestOptions): Promise<
|
|
13
|
-
saveOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<
|
|
14
|
-
data: E[
|
|
6
|
+
findOneById<E>(entity: Type<E>, id: IdValue<E>, q?: QueryOne<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<E | undefined>>;
|
|
7
|
+
findOne<E>(entity: Type<E>, q: QueryOne<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<E | undefined>>;
|
|
8
|
+
findMany<E>(entity: Type<E>, q: Query<E>, opts?: RequestFindOptions): Promise<RequestSuccessResponse<E[]>>;
|
|
9
|
+
findManyAndCount<E>(entity: Type<E>, q: Query<E>, opts?: RequestFindOptions): Promise<RequestSuccessResponse<E[]>>;
|
|
10
|
+
count<E>(entity: Type<E>, q: QuerySearch<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
11
|
+
insertOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<any>>;
|
|
12
|
+
updateOneById<E>(entity: Type<E>, id: IdValue<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
13
|
+
saveOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<any>> | Promise<{
|
|
14
|
+
data: NonNullable<E[IdKey<E>]>;
|
|
15
15
|
}>;
|
|
16
|
-
deleteOneById<E>(entity: Type<E>, id: IdValue<E>, opts?: QueryOptions & RequestOptions): Promise<
|
|
17
|
-
deleteMany<E>(entity: Type<E>, q: QuerySearch<E>, opts?: QueryOptions & RequestOptions): Promise<
|
|
16
|
+
deleteOneById<E>(entity: Type<E>, id: IdValue<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
17
|
+
deleteMany<E>(entity: Type<E>, q: QuerySearch<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
18
18
|
getBasePath<E>(entity: Type<E>): string;
|
|
19
19
|
}
|
|
20
20
|
//# sourceMappingURL=httpQuerier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpQuerier.d.ts","sourceRoot":"","sources":["../../../src/browser/querier/httpQuerier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"httpQuerier.d.ts","sourceRoot":"","sources":["../../../src/browser/querier/httpQuerier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG5G,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAGlH,qBAAa,WAAY,YAAW,aAAa;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;IAErC,WAAW,CAAC,CAAC,EACX,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACf,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EACd,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EACf,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAMjD,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAMlH,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,kBAAkB;IAUnE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,kBAAkB;IAI3E,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc;IAMlE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc;IAK/D,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc;IAKnF,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc;;;IAU7D,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,GAAE,YAAY,GAAG,cAAmB;IAM1F,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,GAAE,YAAY,GAAG,cAAmB;IAM1F,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;CAG/B"}
|
|
@@ -44,7 +44,8 @@ export class HttpQuerier {
|
|
|
44
44
|
}
|
|
45
45
|
saveOne(entity, payload, opts) {
|
|
46
46
|
const meta = getMeta(entity);
|
|
47
|
-
const
|
|
47
|
+
const idKey = meta.id ?? 'id';
|
|
48
|
+
const id = payload[idKey];
|
|
48
49
|
if (id) {
|
|
49
50
|
return this.updateOneById(entity, id, payload, opts).then(() => ({ data: id }));
|
|
50
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpQuerier.js","sourceRoot":"","sources":["../../../src/browser/querier/httpQuerier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,OAAO,WAAW;IACD;IAArB,YAAqB,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEzC,WAAW,
|
|
1
|
+
{"version":3,"file":"httpQuerier.js","sourceRoot":"","sources":["../../../src/browser/querier/httpQuerier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare function stringifyQueryParameter(key: string, value?: unknown, useQuestionMark?: boolean): string;
|
|
2
|
-
export declare function stringifyQuery(query
|
|
2
|
+
export declare function stringifyQuery(query?: Record<string, unknown>): string;
|
|
3
3
|
//# sourceMappingURL=querier.util.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"querier.util.d.ts","sourceRoot":"","sources":["../../../src/browser/querier/querier.util.ts"],"names":[],"mappings":"AAEA,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAGvG;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"querier.util.d.ts","sourceRoot":"","sources":["../../../src/browser/querier/querier.util.ts"],"names":[],"mappings":"AAEA,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAGvG;AAED,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAUtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"querier.util.js","sourceRoot":"","sources":["../../../src/browser/querier/querier.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,uBAAuB,CAAC,GAAW,EAAE,KAAe,EAAE,eAAyB;IAC7F,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3F,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"querier.util.js","sourceRoot":"","sources":["../../../src/browser/querier/querier.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,uBAAuB,CAAC,GAAW,EAAE,KAAe,EAAE,eAAyB;IAC7F,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3F,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAA+B;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpH,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type { IdValue, Query, QueryOne, QueryOptions, QuerySearch, Type, UniversalQuerier } from '../../type/index.js';
|
|
2
2
|
import type { RequestOptions, RequestSuccessResponse } from './request.js';
|
|
3
3
|
export interface ClientQuerier extends UniversalQuerier {
|
|
4
|
-
findOneById<E>(entity: Type<E>, id: IdValue<E>, q?: QueryOne<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<E>>;
|
|
5
|
-
findOne<E>(entity: Type<E>, q: QueryOne<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<E>>;
|
|
4
|
+
findOneById<E>(entity: Type<E>, id: IdValue<E>, q?: QueryOne<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<E | undefined>>;
|
|
5
|
+
findOne<E>(entity: Type<E>, q: QueryOne<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<E | undefined>>;
|
|
6
6
|
findMany<E>(entity: Type<E>, q: Query<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<E[]>>;
|
|
7
7
|
findManyAndCount<E>(entity: Type<E>, q: Query<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<E[]>>;
|
|
8
8
|
count<E>(entity: Type<E>, q?: QuerySearch<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
9
9
|
insertOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<IdValue<E>>>;
|
|
10
|
-
updateOneById<E>(entity: Type<E>, id: IdValue<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<
|
|
10
|
+
updateOneById<E>(entity: Type<E>, id: IdValue<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
11
11
|
saveOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<IdValue<E>>>;
|
|
12
|
-
deleteOneById<E>(entity: Type<E>, id: IdValue<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<
|
|
13
|
-
deleteMany<E>(entity: Type<E>, qm: QuerySearch<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<
|
|
12
|
+
deleteOneById<E>(entity: Type<E>, id: IdValue<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
13
|
+
deleteMany<E>(entity: Type<E>, qm: QuerySearch<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<number>>;
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=clientQuerier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientQuerier.d.ts","sourceRoot":"","sources":["../../../src/browser/type/clientQuerier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvH,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE3E,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,WAAW,CAAC,CAAC,EACX,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACf,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EACd,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EACf,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"clientQuerier.d.ts","sourceRoot":"","sources":["../../../src/browser/type/clientQuerier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvH,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE3E,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,WAAW,CAAC,CAAC,EACX,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACf,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EACd,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EACf,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAElD,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAEnH,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvG,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/G,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9G,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9G,aAAa,CAAC,CAAC,EACb,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACf,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EACd,OAAO,EAAE,CAAC,EACV,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3C,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5G,aAAa,CAAC,CAAC,EACb,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACf,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EACd,IAAI,CAAC,EAAE,YAAY,GAAG,cAAc,GACnC,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3C,UAAU,CAAC,CAAC,EACV,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACf,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,EAClB,IAAI,CAAC,EAAE,YAAY,GAAG,cAAc,GACnC,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;CAC5C"}
|
|
@@ -487,12 +487,12 @@ _dec51 = Entity(), _dec52 = Field(), _dec53 = Field(), _dec54 = Field(), _dec55
|
|
|
487
487
|
* such value might be a scalar or a (`raw`) function. Virtual-fields can
|
|
488
488
|
* be used in `$select` and `$where` as a common field whose value is
|
|
489
489
|
* replaced is replaced at runtime.
|
|
490
|
-
*/ virtual: raw(({ ctx, escapedPrefix, dialect })=>{
|
|
490
|
+
*/ virtual: raw(({ ctx, escapedPrefix, dialect } = {})=>{
|
|
491
491
|
ctx.append('(');
|
|
492
492
|
dialect.count(ctx, _ItemTag, {
|
|
493
493
|
$where: {
|
|
494
|
-
itemId: raw(({ ctx })=>{
|
|
495
|
-
|
|
494
|
+
itemId: raw(({ ctx: innerCtx } = {})=>{
|
|
495
|
+
innerCtx.append(escapedPrefix + dialect.escapeId('id'));
|
|
496
496
|
})
|
|
497
497
|
}
|
|
498
498
|
}, {
|
|
@@ -595,12 +595,12 @@ _dec67 = Entity(), _dec68 = Field(), _dec69 = ManyToMany({
|
|
|
595
595
|
entity: ()=>_Item,
|
|
596
596
|
mappedBy: (item)=>item.tags
|
|
597
597
|
}), _dec70 = Field({
|
|
598
|
-
virtual: raw(({ ctx, escapedPrefix, dialect })=>{
|
|
598
|
+
virtual: raw(({ ctx, escapedPrefix, dialect } = {})=>{
|
|
599
599
|
ctx.append('(');
|
|
600
600
|
dialect.count(ctx, _ItemTag, {
|
|
601
601
|
$where: {
|
|
602
|
-
tagId: raw(({ ctx })=>{
|
|
603
|
-
|
|
602
|
+
tagId: raw(({ ctx: innerCtx } = {})=>{
|
|
603
|
+
innerCtx.append(escapedPrefix + dialect.escapeId('id'));
|
|
604
604
|
})
|
|
605
605
|
}
|
|
606
606
|
}, {
|
|
@@ -814,6 +814,7 @@ function getMeta(entity) {
|
|
|
814
814
|
function fillRelations(meta) {
|
|
815
815
|
for(const relKey in meta.relations){
|
|
816
816
|
const relOpts = meta.relations[relKey];
|
|
817
|
+
if (!relOpts) continue;
|
|
817
818
|
if (relOpts.references) {
|
|
818
819
|
continue;
|
|
819
820
|
}
|
|
@@ -824,25 +825,28 @@ function fillRelations(meta) {
|
|
|
824
825
|
const relEntity = relOpts.entity();
|
|
825
826
|
const relMeta = ensureMeta(relEntity);
|
|
826
827
|
if (relOpts.cardinality === 'mm') {
|
|
827
|
-
const
|
|
828
|
-
const
|
|
829
|
-
const
|
|
830
|
-
const
|
|
828
|
+
const idKey = meta.id;
|
|
829
|
+
const relIdKey = relMeta.id;
|
|
830
|
+
const idName = meta.fields[idKey]?.name ?? idKey;
|
|
831
|
+
const relIdName = relMeta.fields[relIdKey]?.name ?? relIdKey;
|
|
832
|
+
const source = lowerFirst(meta.name ?? '') + upperFirst(idName);
|
|
833
|
+
const target = lowerFirst(relMeta.name ?? '') + upperFirst(relIdName);
|
|
831
834
|
relOpts.references = [
|
|
832
835
|
{
|
|
833
836
|
local: source,
|
|
834
|
-
foreign:
|
|
837
|
+
foreign: idKey
|
|
835
838
|
},
|
|
836
839
|
{
|
|
837
840
|
local: target,
|
|
838
|
-
foreign:
|
|
841
|
+
foreign: relIdKey
|
|
839
842
|
}
|
|
840
843
|
];
|
|
841
844
|
} else {
|
|
845
|
+
const relIdKey = relMeta.id;
|
|
842
846
|
relOpts.references = [
|
|
843
847
|
{
|
|
844
848
|
local: `${relKey}Id`,
|
|
845
|
-
foreign:
|
|
849
|
+
foreign: relIdKey
|
|
846
850
|
}
|
|
847
851
|
];
|
|
848
852
|
}
|
|
@@ -855,23 +859,25 @@ function fillRelations(meta) {
|
|
|
855
859
|
function fillInverseSideRelations(relOpts) {
|
|
856
860
|
const relEntity = relOpts.entity();
|
|
857
861
|
const relMeta = getMeta(relEntity);
|
|
858
|
-
|
|
859
|
-
|
|
862
|
+
const mappedBy = getMappedByRelationKey(relOpts);
|
|
863
|
+
relOpts.mappedBy = mappedBy;
|
|
864
|
+
if (relMeta.fields[mappedBy]) {
|
|
860
865
|
relOpts.references = [
|
|
861
866
|
{
|
|
862
867
|
local: relMeta.id,
|
|
863
|
-
foreign:
|
|
868
|
+
foreign: mappedBy
|
|
864
869
|
}
|
|
865
870
|
];
|
|
866
871
|
return;
|
|
867
872
|
}
|
|
868
|
-
const mappedByRelation = relMeta.relations[
|
|
873
|
+
const mappedByRelation = relMeta.relations[mappedBy];
|
|
874
|
+
if (!mappedByRelation) return;
|
|
869
875
|
if (relOpts.cardinality === 'm1' || relOpts.cardinality === 'mm') {
|
|
870
|
-
relOpts.references = mappedByRelation.references.slice().reverse();
|
|
876
|
+
relOpts.references = (mappedByRelation.references ?? []).slice().reverse();
|
|
871
877
|
relOpts.through = mappedByRelation.through;
|
|
872
878
|
return;
|
|
873
879
|
}
|
|
874
|
-
relOpts.references = mappedByRelation.references.map(({ local, foreign })=>({
|
|
880
|
+
relOpts.references = (mappedByRelation.references ?? []).map(({ local, foreign })=>({
|
|
875
881
|
local: foreign,
|
|
876
882
|
foreign: local
|
|
877
883
|
}));
|
|
@@ -880,18 +886,20 @@ function fillThroughRelations(entity) {
|
|
|
880
886
|
const meta = ensureMeta(entity);
|
|
881
887
|
meta.relations = getKeys(meta.fields).reduce((relations, key)=>{
|
|
882
888
|
const field = meta.fields[key];
|
|
889
|
+
if (!field) return relations;
|
|
883
890
|
const reference = field.references ?? field.reference;
|
|
884
891
|
if (reference) {
|
|
885
892
|
const relEntity = reference();
|
|
886
893
|
const relMeta = ensureMeta(relEntity);
|
|
887
|
-
const
|
|
894
|
+
const relIdKey = relMeta.id;
|
|
895
|
+
const relKey = key.slice(0, -relIdKey.length);
|
|
888
896
|
const relOpts = {
|
|
889
897
|
entity: reference,
|
|
890
898
|
cardinality: 'm1',
|
|
891
899
|
references: [
|
|
892
900
|
{
|
|
893
901
|
local: key,
|
|
894
|
-
foreign:
|
|
902
|
+
foreign: relIdKey
|
|
895
903
|
}
|
|
896
904
|
]
|
|
897
905
|
};
|
|
@@ -910,7 +918,11 @@ function getMappedByRelationKey(relOpts) {
|
|
|
910
918
|
return relOpts.mappedBy;
|
|
911
919
|
}
|
|
912
920
|
function getRelationKeyMap(meta) {
|
|
913
|
-
|
|
921
|
+
const keys = [
|
|
922
|
+
...getKeys(meta.fields),
|
|
923
|
+
...getKeys(meta.relations)
|
|
924
|
+
];
|
|
925
|
+
return keys.reduce((acc, key)=>{
|
|
914
926
|
acc[key] = key;
|
|
915
927
|
return acc;
|
|
916
928
|
}, {});
|
|
@@ -4776,12 +4788,14 @@ function createTestCases(spec) {
|
|
|
4776
4788
|
for (const key of Object.getOwnPropertyNames(proto)){
|
|
4777
4789
|
const isProcessed = processedMethodsMap[key];
|
|
4778
4790
|
processedMethodsMap[key] = true;
|
|
4779
|
-
|
|
4791
|
+
const method = spec[key];
|
|
4792
|
+
if (isProcessed || key === 'constructor' || typeof method !== 'function') {
|
|
4780
4793
|
continue;
|
|
4781
4794
|
}
|
|
4782
|
-
const callback =
|
|
4783
|
-
|
|
4784
|
-
|
|
4795
|
+
const callback = method.bind(spec);
|
|
4796
|
+
const hookFn = hooks[key];
|
|
4797
|
+
if (hookFn) {
|
|
4798
|
+
hookFn(callback);
|
|
4785
4799
|
} else if (key.startsWith('should')) {
|
|
4786
4800
|
it(key, callback);
|
|
4787
4801
|
} else if (key.startsWith('fffShould')) {
|