glasswork 0.13.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +69 -0
- package/README.md +6 -2
- package/dist/auth/abilities.d.ts +9 -6
- package/dist/auth/abilities.d.ts.map +1 -1
- package/dist/auth/abilities.js +15 -19
- package/dist/auth/abilities.js.map +1 -1
- package/dist/auth/assert.d.ts +3 -3
- package/dist/auth/assert.d.ts.map +1 -1
- package/dist/auth/casl-bridge.d.ts +19 -0
- package/dist/auth/casl-bridge.d.ts.map +1 -0
- package/dist/auth/casl-bridge.js +29 -0
- package/dist/auth/casl-bridge.js.map +1 -0
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +1 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/middleware.d.ts +3 -3
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +2 -2
- package/dist/auth/middleware.js.map +1 -1
- package/dist/auth/types.d.ts +2 -2
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js +1 -1
- package/dist/core/bootstrap.d.ts +0 -17
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/bootstrap.js +4 -240
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/core/index.d.ts +19 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +15 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lifecycle.d.ts +7 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +28 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/module-graph.d.ts +21 -0
- package/dist/core/module-graph.d.ts.map +1 -0
- package/dist/core/module-graph.js +169 -0
- package/dist/core/module-graph.js.map +1 -0
- package/dist/core/route-factory.d.ts +20 -0
- package/dist/core/route-factory.d.ts.map +1 -0
- package/dist/core/route-factory.js +2 -0
- package/dist/core/route-factory.js.map +1 -0
- package/dist/core/types.d.ts +4 -14
- package/dist/core/types.d.ts.map +1 -1
- package/dist/email/compiler/compile-templates.d.ts +3 -8
- package/dist/email/compiler/compile-templates.d.ts.map +1 -1
- package/dist/email/compiler/compile-templates.js +3 -3
- package/dist/email/compiler/compile-templates.js.map +1 -1
- package/dist/email/compiler/compiler.d.ts +5 -2
- package/dist/email/compiler/compiler.d.ts.map +1 -1
- package/dist/email/compiler/compiler.js +2 -21
- package/dist/email/compiler/compiler.js.map +1 -1
- package/dist/email/transports/ses-transport.d.ts.map +1 -1
- package/dist/email/transports/ses-transport.js +11 -18
- package/dist/email/transports/ses-transport.js.map +1 -1
- package/dist/email/webhooks/handler-factory.d.ts +1 -1
- package/dist/email/webhooks/handler-factory.js +1 -1
- package/dist/email/webhooks/notification-parser.d.ts +1 -1
- package/dist/email/webhooks/notification-parser.js +1 -1
- package/dist/email/webhooks/signature-verification.d.ts +1 -1
- package/dist/email/webhooks/signature-verification.js +1 -1
- package/dist/email/webhooks/subscription-handler.d.ts +1 -1
- package/dist/email/webhooks/subscription-handler.js +1 -1
- package/dist/hono-context.d.ts +13 -0
- package/dist/hono-context.d.ts.map +1 -0
- package/dist/hono-context.js +2 -0
- package/dist/hono-context.js.map +1 -0
- package/dist/http/index.d.ts +18 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +15 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/route-authorization.d.ts +9 -0
- package/dist/http/route-authorization.d.ts.map +1 -0
- package/dist/http/route-authorization.js +19 -0
- package/dist/http/route-authorization.js.map +1 -0
- package/dist/http/route-context.d.ts +8 -0
- package/dist/http/route-context.d.ts.map +1 -0
- package/dist/http/route-context.js +26 -0
- package/dist/http/route-context.js.map +1 -0
- package/dist/http/route-helpers.d.ts +6 -419
- package/dist/http/route-helpers.d.ts.map +1 -1
- package/dist/http/route-helpers.js +7 -462
- package/dist/http/route-helpers.js.map +1 -1
- package/dist/http/route-openapi-context.d.ts +27 -0
- package/dist/http/route-openapi-context.d.ts.map +1 -0
- package/dist/http/route-openapi-context.js +16 -0
- package/dist/http/route-openapi-context.js.map +1 -0
- package/dist/http/route-openapi.d.ts +5 -0
- package/dist/http/route-openapi.d.ts.map +1 -0
- package/dist/http/route-openapi.js +112 -0
- package/dist/http/route-openapi.js.map +1 -0
- package/dist/http/route-response.d.ts +5 -0
- package/dist/http/route-response.d.ts.map +1 -0
- package/dist/http/route-response.js +78 -0
- package/dist/http/route-response.js.map +1 -0
- package/dist/http/route-types.d.ts +93 -0
- package/dist/http/route-types.d.ts.map +1 -0
- package/dist/http/route-types.js +22 -0
- package/dist/http/route-types.js.map +1 -0
- package/dist/http/route-validation.d.ts +11 -0
- package/dist/http/route-validation.d.ts.map +1 -0
- package/dist/http/route-validation.js +24 -0
- package/dist/http/route-validation.js.map +1 -0
- package/dist/index.d.ts +7 -45
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -65
- package/dist/index.js.map +1 -1
- package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/eventbridge-scheduler-driver.js +1 -3
- package/dist/jobs/drivers/eventbridge-scheduler-driver.js.map +1 -1
- package/dist/jobs/drivers/mock-driver.d.ts +7 -0
- package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.js +75 -16
- package/dist/jobs/drivers/mock-driver.js.map +1 -1
- package/dist/jobs/drivers/sqs-driver.d.ts +1 -1
- package/dist/jobs/drivers/sqs-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/sqs-driver.js +1 -3
- package/dist/jobs/drivers/sqs-driver.js.map +1 -1
- package/dist/jobs/job-service.d.ts.map +1 -1
- package/dist/jobs/job-service.js +3 -0
- package/dist/jobs/job-service.js.map +1 -1
- package/dist/jobs/types.d.ts +2 -0
- package/dist/jobs/types.d.ts.map +1 -1
- package/dist/jobs/worker.d.ts.map +1 -1
- package/dist/jobs/worker.js +3 -14
- package/dist/jobs/worker.js.map +1 -1
- package/dist/list-query/builder.d.ts +26 -5
- package/dist/list-query/builder.d.ts.map +1 -1
- package/dist/list-query/builder.js +13 -9
- package/dist/list-query/builder.js.map +1 -1
- package/dist/list-query/casl.d.ts +20 -4
- package/dist/list-query/casl.d.ts.map +1 -1
- package/dist/list-query/casl.js +3 -12
- package/dist/list-query/casl.js.map +1 -1
- package/dist/list-query/index.d.ts +6 -1
- package/dist/list-query/index.d.ts.map +1 -1
- package/dist/list-query/index.js +4 -1
- package/dist/list-query/index.js.map +1 -1
- package/dist/list-query/list-params.d.ts +17 -0
- package/dist/list-query/list-params.d.ts.map +1 -0
- package/dist/list-query/list-params.js +2 -0
- package/dist/list-query/list-params.js.map +1 -0
- package/dist/list-query/prisma-builder.d.ts.map +1 -1
- package/dist/list-query/prisma-builder.js +36 -8
- package/dist/list-query/prisma-builder.js.map +1 -1
- package/dist/list-query/prisma-executor.d.ts +63 -0
- package/dist/list-query/prisma-executor.d.ts.map +1 -0
- package/dist/list-query/prisma-executor.js +88 -0
- package/dist/list-query/prisma-executor.js.map +1 -0
- package/dist/list-query/schema-helpers.d.ts +20 -3
- package/dist/list-query/schema-helpers.d.ts.map +1 -1
- package/dist/list-query/schema-helpers.js +57 -4
- package/dist/list-query/schema-helpers.js.map +1 -1
- package/dist/list-query/sort-field-types.d.ts +21 -0
- package/dist/list-query/sort-field-types.d.ts.map +1 -0
- package/dist/list-query/sort-field-types.js +2 -0
- package/dist/list-query/sort-field-types.js.map +1 -0
- package/dist/list-query/unrestricted-schemas.d.ts +13 -0
- package/dist/list-query/unrestricted-schemas.d.ts.map +1 -0
- package/dist/list-query/unrestricted-schemas.js +9 -0
- package/dist/list-query/unrestricted-schemas.js.map +1 -0
- package/dist/list-query/validator.d.ts +2 -2
- package/dist/list-query/validator.d.ts.map +1 -1
- package/dist/observability/exception-tracking.d.ts +5 -4
- package/dist/observability/exception-tracking.d.ts.map +1 -1
- package/dist/observability/exception-tracking.js +4 -3
- package/dist/observability/exception-tracking.js.map +1 -1
- package/dist/observability/index.d.ts +8 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +8 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/pino-logger.d.ts +3 -3
- package/dist/observability/pino-logger.js +3 -3
- package/dist/observability/request-context.d.ts +4 -4
- package/dist/observability/request-context.js +4 -4
- package/package.json +94 -54
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
/** Minimal CASL ability surface used by {@link withCaslScope}. */
|
|
2
|
+
export interface CaslAbilityLike {
|
|
3
|
+
readonly rules: readonly unknown[];
|
|
4
|
+
can(action: string, subject: unknown): boolean;
|
|
5
|
+
}
|
|
6
|
+
/** Stored integration function type. */
|
|
7
|
+
export type CaslAccessibleBy = {
|
|
8
|
+
bivarianceHack(ability: CaslAbilityLike, action?: string): {
|
|
9
|
+
ofType: (subject: string) => Record<string, unknown>;
|
|
10
|
+
};
|
|
11
|
+
}['bivarianceHack'];
|
|
12
|
+
/** Consumer registration type (bivariant so `accessibleBy` from any `@casl/prisma` install fits). */
|
|
13
|
+
export type CaslAccessibleByRegistration = {
|
|
14
|
+
bivarianceHack(ability: CaslAbilityLike, action?: string): {
|
|
15
|
+
ofType: (subject: string) => Record<string, unknown>;
|
|
16
|
+
};
|
|
17
|
+
}['bivarianceHack'];
|
|
2
18
|
/**
|
|
3
19
|
* Register CASL integration dependencies.
|
|
4
20
|
* This must be called at application startup if you use CASL features.
|
|
@@ -6,13 +22,13 @@ export type CaslAccessibleBy = (ability: any, action?: string) => Record<string,
|
|
|
6
22
|
* @example
|
|
7
23
|
* ```typescript
|
|
8
24
|
* import { accessibleBy } from '@casl/prisma';
|
|
9
|
-
* import { registerCasl } from 'glasswork';
|
|
25
|
+
* import { registerCasl } from 'glasswork/list-query';
|
|
10
26
|
*
|
|
11
27
|
* registerCasl({ accessibleBy });
|
|
12
28
|
* ```
|
|
13
29
|
*/
|
|
14
30
|
export declare function registerCasl(options: {
|
|
15
|
-
accessibleBy:
|
|
31
|
+
accessibleBy: CaslAccessibleByRegistration;
|
|
16
32
|
}): void;
|
|
17
33
|
/**
|
|
18
34
|
* Create a CASL scope helper that extracts ability from context
|
|
@@ -32,5 +48,5 @@ export declare function registerCasl(options: {
|
|
|
32
48
|
* .build();
|
|
33
49
|
* ```
|
|
34
50
|
*/
|
|
35
|
-
export declare function withCaslScope
|
|
51
|
+
export declare function withCaslScope(ability: CaslAbilityLike, action: string, subject: string): Record<string, unknown>;
|
|
36
52
|
//# sourceMappingURL=casl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"casl.d.ts","sourceRoot":"","sources":["../../src/list-query/casl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"casl.d.ts","sourceRoot":"","sources":["../../src/list-query/casl.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;CAChD;AAED,wCAAwC;AACxC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,CACZ,OAAO,EAAE,eAAe,EACxB,MAAM,CAAC,EAAE,MAAM,GACd;QACD,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtD,CAAC;CACH,CAAC,gBAAgB,CAAC,CAAC;AAEpB,qGAAqG;AACrG,MAAM,MAAM,4BAA4B,GAAG;IACzC,cAAc,CACZ,OAAO,EAAE,eAAe,EACxB,MAAM,CAAC,EAAE,MAAM,GACd;QACD,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtD,CAAC;CACH,CAAC,gBAAgB,CAAC,CAAC;AAUpB;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IAAE,YAAY,EAAE,4BAA4B,CAAA;CAAE,GAAG,IAAI,CAE1F;AAeD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,2BAGtF"}
|
package/dist/list-query/casl.js
CHANGED
|
@@ -8,7 +8,7 @@ const config = {
|
|
|
8
8
|
* @example
|
|
9
9
|
* ```typescript
|
|
10
10
|
* import { accessibleBy } from '@casl/prisma';
|
|
11
|
-
* import { registerCasl } from 'glasswork';
|
|
11
|
+
* import { registerCasl } from 'glasswork/list-query';
|
|
12
12
|
*
|
|
13
13
|
* registerCasl({ accessibleBy });
|
|
14
14
|
* ```
|
|
@@ -21,7 +21,7 @@ function getAccessibleBy() {
|
|
|
21
21
|
throw new Error('CASL integration not configured. You must call registerCasl({ accessibleBy }) at application startup.\n' +
|
|
22
22
|
'Example:\n' +
|
|
23
23
|
" import { accessibleBy } from '@casl/prisma';\n" +
|
|
24
|
-
" import { registerCasl } from 'glasswork';\n" +
|
|
24
|
+
" import { registerCasl } from 'glasswork/list-query';\n" +
|
|
25
25
|
' registerCasl({ accessibleBy });');
|
|
26
26
|
}
|
|
27
27
|
return config.accessibleBy;
|
|
@@ -44,17 +44,8 @@ function getAccessibleBy() {
|
|
|
44
44
|
* .build();
|
|
45
45
|
* ```
|
|
46
46
|
*/
|
|
47
|
-
// biome-ignore lint/suspicious/noExplicitAny: Ability type is generic
|
|
48
47
|
export function withCaslScope(ability, action, subject) {
|
|
49
48
|
const accessibleBy = getAccessibleBy();
|
|
50
|
-
|
|
51
|
-
if (!(subject in conditions)) {
|
|
52
|
-
// Return empty object or undefined? Prisma generally assumes conditions exist if asked.
|
|
53
|
-
// If we assume accessibleBy returns all possible subjects, then missing key might be fine or error.
|
|
54
|
-
// Let's just return what is there, which is undefined if missing. The types expect Record<string, unknown>.
|
|
55
|
-
// Casting to allow potentially undefined access if user made a typo.
|
|
56
|
-
return conditions[subject];
|
|
57
|
-
}
|
|
58
|
-
return conditions[subject];
|
|
49
|
+
return accessibleBy(ability, action).ofType(subject);
|
|
59
50
|
}
|
|
60
51
|
//# sourceMappingURL=casl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"casl.js","sourceRoot":"","sources":["../../src/list-query/casl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"casl.js","sourceRoot":"","sources":["../../src/list-query/casl.ts"],"names":[],"mappings":"AA8BA,MAAM,MAAM,GAAe;IACzB,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,OAAuD;IAClF,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;AAC7C,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,yGAAyG;YACvG,YAAY;YACZ,kDAAkD;YAClD,0DAA0D;YAC1D,mCAAmC,CACtC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAAC,OAAwB,EAAE,MAAc,EAAE,OAAe;IACrF,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,OAAO,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export { createListQuery, type ListQueryBuilder, type ListQueryConfig, type PaginatedResult, } from './builder.js';
|
|
2
|
+
export { type CaslAbilityLike, type CaslAccessibleBy, registerCasl, withCaslScope, } from './casl.js';
|
|
3
|
+
export type { InferListParams, InferOrderByItem } from './list-params.js';
|
|
4
|
+
export { bindPrismaGroupByDelegate, bindPrismaListDelegate, createPrismaListExecutor, type PrismaGroupByDelegate, type PrismaListDelegate, type PrismaListExecutorConfig, type PrismaListModelDelegate, type PrismaListQueryParams, resolveOrderBy, runGroupByAggregations, } from './prisma-executor.js';
|
|
2
5
|
export { ListQuerySchema } from './query-schema.js';
|
|
3
|
-
export { booleanFilterSchema, createFilterSchema, createSortSchema, dateFilterSchema, enumFilterSchema, numberFilterSchema, relationFilterSchema, sortDirectionSchema, stringFilterSchema, } from './schema-helpers.js';
|
|
6
|
+
export { booleanFilterSchema, createFilterSchema, createSortSchema, dateFilterSchema, enumFilterSchema, intFilterSchema, numberFilterSchema, relationFilterSchema, sortDirectionSchema, stringFilterSchema, } from './schema-helpers.js';
|
|
7
|
+
export type { SortDirection as PrismaSortDirection, SortFieldsToOrderBy, SortPathToOrderBy, } from './sort-field-types.js';
|
|
4
8
|
export type { AggregationConfig, AggregationResult, AggregationType, FieldPath, FilterOperator, ParsedFilter, ParsedQueryParams, ParsedSort, PrismaAggregationParams, PrismaListParams, RawQueryParams, SearchFieldInput, SortDirection, } from './types.js';
|
|
9
|
+
export { type PermissiveOrderBy, permissiveOrderByEntrySchema, unrestrictedWhereSchema, } from './unrestricted-schemas.js';
|
|
5
10
|
export type { SchemaValidationConfig, ValidatedListParams } from './validator.js';
|
|
6
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/list-query/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/list-query/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,YAAY,EACZ,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,cAAc,EACd,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,aAAa,IAAI,mBAAmB,EACpC,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,iBAAiB,EACtB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/list-query/index.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
// Builder API
|
|
2
2
|
export { createListQuery, } from './builder.js';
|
|
3
|
+
export { registerCasl, withCaslScope, } from './casl.js';
|
|
4
|
+
export { bindPrismaGroupByDelegate, bindPrismaListDelegate, createPrismaListExecutor, resolveOrderBy, runGroupByAggregations, } from './prisma-executor.js';
|
|
3
5
|
// Query schema
|
|
4
6
|
export { ListQuerySchema } from './query-schema.js';
|
|
5
7
|
// Schema helpers
|
|
6
|
-
export { booleanFilterSchema, createFilterSchema, createSortSchema, dateFilterSchema, enumFilterSchema, numberFilterSchema, relationFilterSchema, sortDirectionSchema, stringFilterSchema, } from './schema-helpers.js';
|
|
8
|
+
export { booleanFilterSchema, createFilterSchema, createSortSchema, dateFilterSchema, enumFilterSchema, intFilterSchema, numberFilterSchema, relationFilterSchema, sortDirectionSchema, stringFilterSchema, } from './schema-helpers.js';
|
|
9
|
+
export { permissiveOrderByEntrySchema, unrestrictedWhereSchema, } from './unrestricted-schemas.js';
|
|
7
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/list-query/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EACL,eAAe,GAIhB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/list-query/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EACL,eAAe,GAIhB,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,YAAY,EACZ,aAAa,GACd,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EAMxB,cAAc,EACd,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,eAAe;AACf,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,iBAAiB;AACjB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAsB7B,OAAO,EAEL,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { BaseIssue, BaseSchema, InferOutput } from 'valibot';
|
|
2
|
+
import type { ValidatedListParams } from './validator.js';
|
|
3
|
+
/**
|
|
4
|
+
* Infer list params from filter and sort Valibot schemas.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* type UserListParams = InferListParams<
|
|
9
|
+
* typeof UserFilterSchema,
|
|
10
|
+
* typeof UserSortSchema
|
|
11
|
+
* >;
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export type InferListParams<TWhereSchema extends BaseSchema<unknown, unknown, BaseIssue<unknown>>, TOrderBySchema extends BaseSchema<unknown, unknown, BaseIssue<unknown>>> = ValidatedListParams<TWhereSchema, TOrderBySchema>;
|
|
15
|
+
/** Single orderBy entry type from list params or a sort schema. */
|
|
16
|
+
export type InferOrderByItem<TOrderBySchema extends BaseSchema<unknown, unknown, BaseIssue<unknown>>> = InferOutput<TOrderBySchema>;
|
|
17
|
+
//# sourceMappingURL=list-params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-params.d.ts","sourceRoot":"","sources":["../../src/list-query/list-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,CACzB,YAAY,SAAS,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,EACrE,cAAc,SAAS,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,IACrE,mBAAmB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAEtD,mEAAmE;AACnE,MAAM,MAAM,gBAAgB,CAC1B,cAAc,SAAS,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,IACrE,WAAW,CAAC,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-params.js","sourceRoot":"","sources":["../../src/list-query/list-params.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma-builder.d.ts","sourceRoot":"","sources":["../../src/list-query/prisma-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACX,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"prisma-builder.d.ts","sourceRoot":"","sources":["../../src/list-query/prisma-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACX,MAAM,YAAY,CAAC;AAyQpB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAY1F;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAkC7F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG;IAC5D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAWA"}
|
|
@@ -57,7 +57,7 @@ function buildStringCondition(operator, value, isCaseInsensitive) {
|
|
|
57
57
|
*/
|
|
58
58
|
function buildInCondition(operator, value, isCaseInsensitive) {
|
|
59
59
|
// Split by pipe and parse each value
|
|
60
|
-
const values = value.split('|').map((v) =>
|
|
60
|
+
const values = value.split('|').map((v) => parsePrimitiveValue(v.trim()));
|
|
61
61
|
// Check if all values are strings for case-insensitive mode
|
|
62
62
|
const allStrings = values.every((v) => typeof v === 'string');
|
|
63
63
|
if (operator === '@=|') {
|
|
@@ -105,10 +105,14 @@ function operatorToPrismaCondition(operator, value) {
|
|
|
105
105
|
throw new Error(`Unsupported operator: ${operator}`);
|
|
106
106
|
}
|
|
107
107
|
/**
|
|
108
|
-
*
|
|
109
|
-
*
|
|
108
|
+
* Coerce a single literal string to the primitive types we support in filters when the operator
|
|
109
|
+
* does not require a raw string (equality, comparison, IN list tokens).
|
|
110
|
+
*
|
|
111
|
+
* - `true` / `false` → boolean (exact match, case-sensitive).
|
|
112
|
+
* - Numeric-looking strings → number (so `age==42` and `age>18` behave intuitively).
|
|
113
|
+
* - Everything else → unchanged string.
|
|
110
114
|
*/
|
|
111
|
-
function
|
|
115
|
+
function parsePrimitiveValue(value) {
|
|
112
116
|
if (value === 'true') {
|
|
113
117
|
return true;
|
|
114
118
|
}
|
|
@@ -121,6 +125,33 @@ function parseValue(value) {
|
|
|
121
125
|
}
|
|
122
126
|
return value;
|
|
123
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Coerce a filter value for `operator` before building Prisma conditions.
|
|
130
|
+
*
|
|
131
|
+
* - **Substring / IN**: return the string as-is. Text search must not turn `"432"` into a number;
|
|
132
|
+
* pipe-separated IN lists are split and parsed per segment in `buildInCondition`.
|
|
133
|
+
* - **Equality and comparisons**: delegate to `parsePrimitiveValue` so legacy string inputs like
|
|
134
|
+
* `"42"` or `"true"` still coerce.
|
|
135
|
+
*
|
|
136
|
+
* A trailing `*` on `operator` is stripped before branching; it only affects case-insensitive
|
|
137
|
+
* matching, not how the value is parsed.
|
|
138
|
+
*/
|
|
139
|
+
function parseValue(value, operator) {
|
|
140
|
+
const baseOperator = operator.replace(/\*$/, '');
|
|
141
|
+
// For IN operators, keep the value as string (pipe-separated).
|
|
142
|
+
if (baseOperator.includes('|')) {
|
|
143
|
+
return value;
|
|
144
|
+
}
|
|
145
|
+
if (baseOperator === '@=' ||
|
|
146
|
+
baseOperator === '_=' ||
|
|
147
|
+
baseOperator === '_-=' ||
|
|
148
|
+
baseOperator === '!@=' ||
|
|
149
|
+
baseOperator === '!_=' ||
|
|
150
|
+
baseOperator === '!_-=') {
|
|
151
|
+
return value;
|
|
152
|
+
}
|
|
153
|
+
return parsePrimitiveValue(value);
|
|
154
|
+
}
|
|
124
155
|
/**
|
|
125
156
|
* Build a nested Prisma where condition from a field path
|
|
126
157
|
* For nested paths (relations), wraps in Prisma's relation filter structure { is: { ... } }
|
|
@@ -189,10 +220,7 @@ export function buildWhereClause(filters) {
|
|
|
189
220
|
}
|
|
190
221
|
let where = {};
|
|
191
222
|
for (const filter of filters) {
|
|
192
|
-
|
|
193
|
-
// The buildInCondition function will split and parse individual values
|
|
194
|
-
const isInOperator = filter.operator.includes('|');
|
|
195
|
-
const parsedValue = isInOperator ? filter.value : parseValue(filter.value);
|
|
223
|
+
const parsedValue = parseValue(filter.value, filter.operator);
|
|
196
224
|
const condition = operatorToPrismaCondition(filter.operator, parsedValue);
|
|
197
225
|
const nestedCondition = buildNestedWhereCondition(filter.fieldPath, condition);
|
|
198
226
|
where = mergeWhereConditions(where, nestedCondition);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma-builder.js","sourceRoot":"","sources":["../../src/list-query/prisma-builder.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,SAAS,sBAAsB,CAC7B,QAAqB,EACrB,KAAgC,EAChC,iBAA0B;IAE1B,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,iBAAiB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,iBAAiB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACnD,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC;IACzD,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAC/B,QAAiC,EACjC,KAAgC;IAEhC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,GAAG;YACN,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACvB,KAAK,GAAG;YACN,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACvB,KAAK,IAAI;YACP,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QACxB,KAAK,IAAI;YACP,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,QAAsD,EACtD,KAAgC,EAChC,iBAA0B;IAE1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,wBAAwB,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,aAAa,GAA4B,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;QAC/C,KAAK,IAAI;YACP,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;QACjD,KAAK,KAAK;YACR,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;QAC/C,KAAK,KAAK;YACR,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,EAAE,CAAC;QACxD,KAAK,KAAK;YACR,OAAO,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,EAAE,CAAC;QAC1D,KAAK,MAAM;YACT,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,EAAE,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CACvB,QAAwB,EACxB,KAAa,EACb,iBAA0B;IAE1B,qCAAqC;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"prisma-builder.js","sourceRoot":"","sources":["../../src/list-query/prisma-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { PaginatedResult } from './builder.js';
|
|
2
|
+
import type { AggregationResult, PrismaAggregationParams } from './types.js';
|
|
3
|
+
/** Minimal Prisma `groupBy` surface used by {@link runGroupByAggregations}. */
|
|
4
|
+
export interface PrismaGroupByDelegate {
|
|
5
|
+
groupBy(args: Record<string, unknown>): Promise<Array<Record<string, unknown> & {
|
|
6
|
+
_count: Record<string, number>;
|
|
7
|
+
}>>;
|
|
8
|
+
}
|
|
9
|
+
/** Minimal Prisma list delegate used by {@link createPrismaListExecutor}. */
|
|
10
|
+
export interface PrismaListDelegate<TItem, TWhere, TOrderBy> {
|
|
11
|
+
findMany(args: {
|
|
12
|
+
where?: TWhere;
|
|
13
|
+
orderBy?: TOrderBy | TOrderBy[];
|
|
14
|
+
skip?: number;
|
|
15
|
+
take?: number;
|
|
16
|
+
include?: Record<string, unknown>;
|
|
17
|
+
select?: Record<string, unknown>;
|
|
18
|
+
}): Promise<TItem[]>;
|
|
19
|
+
count(args: {
|
|
20
|
+
where?: TWhere;
|
|
21
|
+
}): Promise<number>;
|
|
22
|
+
}
|
|
23
|
+
export interface PrismaListQueryParams<TWhere, TOrderBy> {
|
|
24
|
+
readonly where?: TWhere;
|
|
25
|
+
readonly orderBy?: readonly TOrderBy[];
|
|
26
|
+
readonly skip?: number;
|
|
27
|
+
readonly take?: number;
|
|
28
|
+
readonly aggregations?: Record<string, PrismaAggregationParams>;
|
|
29
|
+
}
|
|
30
|
+
/** Prisma model delegate shape accepted by {@link bindPrismaListDelegate}. */
|
|
31
|
+
export type PrismaListModelDelegate = {
|
|
32
|
+
findMany(args?: object): Promise<unknown[]>;
|
|
33
|
+
count(args?: object): Promise<number>;
|
|
34
|
+
groupBy?(args?: object): Promise<unknown[]>;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Adapt a Prisma model delegate for {@link createPrismaListExecutor}.
|
|
38
|
+
* Centralizes the include/payload typing gap between Prisma delegates and list executors.
|
|
39
|
+
*/
|
|
40
|
+
export declare function bindPrismaListDelegate<TItem, TWhere, TOrderBy>(delegate: PrismaListModelDelegate): PrismaListDelegate<TItem, TWhere, TOrderBy>;
|
|
41
|
+
/** Adapt a Prisma model delegate for {@link runGroupByAggregations}. */
|
|
42
|
+
export declare function bindPrismaGroupByDelegate(delegate: PrismaListModelDelegate): PrismaGroupByDelegate;
|
|
43
|
+
export interface PrismaListExecutorConfig<TItem, TWhere, TOrderBy> {
|
|
44
|
+
/** Resolves the Prisma model delegate (e.g. `() => bindPrismaListDelegate(prisma.user)`). */
|
|
45
|
+
delegate: () => PrismaListDelegate<TItem, TWhere, TOrderBy>;
|
|
46
|
+
readonly include?: Record<string, unknown>;
|
|
47
|
+
readonly select?: Record<string, unknown>;
|
|
48
|
+
readonly defaultOrderBy?: readonly TOrderBy[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Pick `orderBy` from list params, falling back to `defaultOrderBy` when empty.
|
|
52
|
+
*/
|
|
53
|
+
export declare function resolveOrderBy<TOrderBy>(orderBy: readonly TOrderBy[] | undefined, defaultOrderBy?: readonly TOrderBy[]): TOrderBy[];
|
|
54
|
+
/**
|
|
55
|
+
* Run Prisma `groupBy` aggregations produced by `createListQuery().build()`.
|
|
56
|
+
*/
|
|
57
|
+
export declare function runGroupByAggregations(delegate: PrismaGroupByDelegate, aggregationConfigs?: Record<string, PrismaAggregationParams>): Promise<Record<string, AggregationResult> | undefined>;
|
|
58
|
+
/**
|
|
59
|
+
* Create a reusable list handler that runs `findMany`, `count`, and optional `groupBy`
|
|
60
|
+
* aggregations from {@link createListQuery} params.
|
|
61
|
+
*/
|
|
62
|
+
export declare function createPrismaListExecutor<TItem, TWhere, TOrderBy>(config: PrismaListExecutorConfig<TItem, TWhere, TOrderBy>): (params?: PrismaListQueryParams<TWhere, TOrderBy>) => Promise<PaginatedResult<TItem>>;
|
|
63
|
+
//# sourceMappingURL=prisma-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma-executor.d.ts","sourceRoot":"","sources":["../../src/list-query/prisma-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapt a Prisma model delegate for {@link createPrismaListExecutor}.
|
|
3
|
+
* Centralizes the include/payload typing gap between Prisma delegates and list executors.
|
|
4
|
+
*/
|
|
5
|
+
export function bindPrismaListDelegate(delegate) {
|
|
6
|
+
return delegate;
|
|
7
|
+
}
|
|
8
|
+
/** Adapt a Prisma model delegate for {@link runGroupByAggregations}. */
|
|
9
|
+
export function bindPrismaGroupByDelegate(delegate) {
|
|
10
|
+
return delegate;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Pick `orderBy` from list params, falling back to `defaultOrderBy` when empty.
|
|
14
|
+
*/
|
|
15
|
+
export function resolveOrderBy(orderBy, defaultOrderBy) {
|
|
16
|
+
if (orderBy && orderBy.length > 0) {
|
|
17
|
+
return [...orderBy];
|
|
18
|
+
}
|
|
19
|
+
return defaultOrderBy ? [...defaultOrderBy] : [];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Run Prisma `groupBy` aggregations produced by `createListQuery().build()`.
|
|
23
|
+
*/
|
|
24
|
+
export async function runGroupByAggregations(delegate, aggregationConfigs) {
|
|
25
|
+
if (!aggregationConfigs) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
const entries = Object.entries(aggregationConfigs);
|
|
29
|
+
if (entries.length === 0) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const results = {};
|
|
33
|
+
await Promise.all(entries.map(async ([key, config]) => {
|
|
34
|
+
const grouped = await delegate.groupBy({
|
|
35
|
+
by: config.by,
|
|
36
|
+
_count: config._count,
|
|
37
|
+
where: config.where,
|
|
38
|
+
});
|
|
39
|
+
const countField = Object.keys(config._count)[0];
|
|
40
|
+
if (!countField) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const aggregationResult = {};
|
|
44
|
+
for (const item of grouped) {
|
|
45
|
+
const fieldValue = item[countField];
|
|
46
|
+
const count = item._count[countField];
|
|
47
|
+
if (count !== undefined) {
|
|
48
|
+
aggregationResult[String(fieldValue)] = count;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
results[key] = aggregationResult;
|
|
52
|
+
}));
|
|
53
|
+
return results;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Create a reusable list handler that runs `findMany`, `count`, and optional `groupBy`
|
|
57
|
+
* aggregations from {@link createListQuery} params.
|
|
58
|
+
*/
|
|
59
|
+
export function createPrismaListExecutor(config) {
|
|
60
|
+
return async (params) => {
|
|
61
|
+
const delegate = config.delegate();
|
|
62
|
+
const where = params?.where;
|
|
63
|
+
const orderBy = resolveOrderBy(params?.orderBy, config.defaultOrderBy);
|
|
64
|
+
const findManyArgs = {
|
|
65
|
+
where,
|
|
66
|
+
orderBy,
|
|
67
|
+
skip: params?.skip,
|
|
68
|
+
take: params?.take,
|
|
69
|
+
};
|
|
70
|
+
if (config.include !== undefined) {
|
|
71
|
+
findManyArgs.include = config.include;
|
|
72
|
+
}
|
|
73
|
+
if (config.select !== undefined) {
|
|
74
|
+
findManyArgs.select = config.select;
|
|
75
|
+
}
|
|
76
|
+
const [data, total, aggregations] = await Promise.all([
|
|
77
|
+
delegate.findMany(findManyArgs),
|
|
78
|
+
delegate.count({ where }),
|
|
79
|
+
runGroupByAggregations(delegate, params?.aggregations),
|
|
80
|
+
]);
|
|
81
|
+
return {
|
|
82
|
+
data,
|
|
83
|
+
total,
|
|
84
|
+
...(aggregations && { aggregations }),
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=prisma-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma-executor.js","sourceRoot":"","sources":["../../src/list-query/prisma-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type BaseIssue, type BaseSchema, type OptionalSchema } from 'valibot';
|
|
2
|
+
import type { SortFieldsToOrderBy } from './sort-field-types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Schema for Prisma sort direction
|
|
4
5
|
*/
|
|
@@ -31,6 +32,19 @@ export declare const numberFilterSchema: () => import("valibot").ObjectSchema<{
|
|
|
31
32
|
readonly gt: OptionalSchema<import("valibot").UnionSchema<[import("valibot").StringSchema<undefined>, import("valibot").LiteralSchema<true, undefined>, import("valibot").LiteralSchema<false, undefined>], undefined>, undefined>;
|
|
32
33
|
readonly gte: OptionalSchema<import("valibot").UnionSchema<[import("valibot").StringSchema<undefined>, import("valibot").LiteralSchema<true, undefined>, import("valibot").LiteralSchema<false, undefined>], undefined>, undefined>;
|
|
33
34
|
}, undefined>;
|
|
35
|
+
/**
|
|
36
|
+
* Schema for Prisma IntFilter operations (numeric fields stored as integers).
|
|
37
|
+
*/
|
|
38
|
+
export declare const intFilterSchema: () => import("valibot").ObjectSchema<{
|
|
39
|
+
readonly equals: OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
|
|
40
|
+
readonly not: OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
|
|
41
|
+
readonly lt: OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
|
|
42
|
+
readonly lte: OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
|
|
43
|
+
readonly gt: OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
|
|
44
|
+
readonly gte: OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
|
|
45
|
+
readonly in: OptionalSchema<import("valibot").ArraySchema<import("valibot").NumberSchema<undefined>, undefined>, undefined>;
|
|
46
|
+
readonly notIn: OptionalSchema<import("valibot").ArraySchema<import("valibot").NumberSchema<undefined>, undefined>, undefined>;
|
|
47
|
+
}, undefined>;
|
|
34
48
|
/**
|
|
35
49
|
* Schema for Prisma DateTimeFilter operations
|
|
36
50
|
* Supports date comparison operations
|
|
@@ -70,14 +84,17 @@ export declare function relationFilterSchema<T extends BaseSchema<unknown, unkno
|
|
|
70
84
|
readonly is: OptionalSchema<T, undefined>;
|
|
71
85
|
readonly isNot: OptionalSchema<T, undefined>;
|
|
72
86
|
}, undefined>;
|
|
87
|
+
type SortDirectionSchema = ReturnType<typeof sortDirectionSchema>;
|
|
73
88
|
/**
|
|
74
|
-
* Helper to create a sort schema for a model
|
|
75
|
-
* Pass
|
|
89
|
+
* Helper to create a sort schema for a model.
|
|
90
|
+
* Pass field names as keys and sortDirectionSchema() as values.
|
|
91
|
+
* Use dot notation for nested relation sorts (e.g. `'organization.name'`).
|
|
76
92
|
*/
|
|
77
|
-
export declare function createSortSchema<T extends Record<string,
|
|
93
|
+
export declare function createSortSchema<T extends Record<string, SortDirectionSchema>>(fields: T): BaseSchema<SortFieldsToOrderBy<T>, SortFieldsToOrderBy<T>, BaseIssue<unknown>>;
|
|
78
94
|
/**
|
|
79
95
|
* Helper to create a filter schema for a model
|
|
80
96
|
* Pass an object with field names as keys and filter schemas as values
|
|
81
97
|
*/
|
|
82
98
|
export declare function createFilterSchema<T extends Record<string, BaseSchema<unknown, unknown, BaseIssue<unknown>>>>(fields: T): import("valibot").ObjectSchema<{ [K in keyof T]: OptionalSchema<T[K], undefined>; }, undefined>;
|
|
99
|
+
export {};
|
|
83
100
|
//# sourceMappingURL=schema-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-helpers.d.ts","sourceRoot":"","sources":["../../src/list-query/schema-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"schema-helpers.d.ts","sourceRoot":"","sources":["../../src/list-query/schema-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,UAAU,EAGf,KAAK,cAAc,EAMpB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,mBAAmB,oEAAkC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;aAU3B,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;aAQ3B,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;aAUxB,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;aAQzB,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;aAI5B,CAAC;AAEL;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,EAC7F,UAAU,EAAE,KAAK;;;;;cAQlB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,EAC7F,YAAY,EAAE,CAAC;;;cAMhB;AAED,KAAK,mBAAmB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAuDlE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC5E,MAAM,EAAE,CAAC,GACR,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAUhF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAC1E,MAAM,EAAE,CAAC,qCAGJ,CAAC,6DAGP"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { array, literal, object, optional, picklist, string, union, } from 'valibot';
|
|
1
|
+
import { array, literal, number, object, optional, picklist, string, union, } from 'valibot';
|
|
2
2
|
/**
|
|
3
3
|
* Schema for Prisma sort direction
|
|
4
4
|
*/
|
|
@@ -29,6 +29,19 @@ export const numberFilterSchema = () => object({
|
|
|
29
29
|
gt: optional(union([string(), literal(true), literal(false)])),
|
|
30
30
|
gte: optional(union([string(), literal(true), literal(false)])),
|
|
31
31
|
});
|
|
32
|
+
/**
|
|
33
|
+
* Schema for Prisma IntFilter operations (numeric fields stored as integers).
|
|
34
|
+
*/
|
|
35
|
+
export const intFilterSchema = () => object({
|
|
36
|
+
equals: optional(number()),
|
|
37
|
+
not: optional(number()),
|
|
38
|
+
lt: optional(number()),
|
|
39
|
+
lte: optional(number()),
|
|
40
|
+
gt: optional(number()),
|
|
41
|
+
gte: optional(number()),
|
|
42
|
+
in: optional(array(number())),
|
|
43
|
+
notIn: optional(array(number())),
|
|
44
|
+
});
|
|
32
45
|
/**
|
|
33
46
|
* Schema for Prisma DateTimeFilter operations
|
|
34
47
|
* Supports date comparison operations
|
|
@@ -72,12 +85,52 @@ export function relationFilterSchema(nestedSchema) {
|
|
|
72
85
|
isNot: optional(nestedSchema),
|
|
73
86
|
});
|
|
74
87
|
}
|
|
88
|
+
function isSortDirectionSchema(value) {
|
|
89
|
+
return typeof value === 'object' && value !== null && '~run' in value;
|
|
90
|
+
}
|
|
91
|
+
function addSortFieldToTree(tree, path, schema) {
|
|
92
|
+
const segments = path.split('.');
|
|
93
|
+
if (segments.some((segment) => segment === '')) {
|
|
94
|
+
throw new Error(`Invalid sort field path: "${path}"`);
|
|
95
|
+
}
|
|
96
|
+
if (segments.length === 1) {
|
|
97
|
+
const field = segments[0];
|
|
98
|
+
const existing = tree[field];
|
|
99
|
+
if (existing !== undefined && !isSortDirectionSchema(existing)) {
|
|
100
|
+
throw new Error(`Sort field path conflict at "${field}"`);
|
|
101
|
+
}
|
|
102
|
+
tree[field] = schema;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const [head, ...rest] = segments;
|
|
106
|
+
const field = head;
|
|
107
|
+
const existing = tree[field];
|
|
108
|
+
if (existing !== undefined && isSortDirectionSchema(existing)) {
|
|
109
|
+
throw new Error(`Sort field path conflict at "${field}"`);
|
|
110
|
+
}
|
|
111
|
+
const nested = (existing ?? {});
|
|
112
|
+
tree[field] = nested;
|
|
113
|
+
addSortFieldToTree(nested, rest.join('.'), schema);
|
|
114
|
+
}
|
|
115
|
+
function buildSortObjectSchema(fields) {
|
|
116
|
+
return object(Object.fromEntries(Object.entries(fields).map(([key, value]) => {
|
|
117
|
+
if (isSortDirectionSchema(value)) {
|
|
118
|
+
return [key, optional(value)];
|
|
119
|
+
}
|
|
120
|
+
return [key, optional(buildSortObjectSchema(value))];
|
|
121
|
+
})));
|
|
122
|
+
}
|
|
75
123
|
/**
|
|
76
|
-
* Helper to create a sort schema for a model
|
|
77
|
-
* Pass
|
|
124
|
+
* Helper to create a sort schema for a model.
|
|
125
|
+
* Pass field names as keys and sortDirectionSchema() as values.
|
|
126
|
+
* Use dot notation for nested relation sorts (e.g. `'organization.name'`).
|
|
78
127
|
*/
|
|
79
128
|
export function createSortSchema(fields) {
|
|
80
|
-
|
|
129
|
+
const tree = {};
|
|
130
|
+
for (const [path, schema] of Object.entries(fields)) {
|
|
131
|
+
addSortFieldToTree(tree, path, schema);
|
|
132
|
+
}
|
|
133
|
+
return buildSortObjectSchema(tree);
|
|
81
134
|
}
|
|
82
135
|
/**
|
|
83
136
|
* Helper to create a filter schema for a model
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-helpers.js","sourceRoot":"","sources":["../../src/list-query/schema-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAGL,OAAO,
|
|
1
|
+
{"version":3,"file":"schema-helpers.js","sourceRoot":"","sources":["../../src/list-query/schema-helpers.ts"],"names":[],"mappings":"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"}
|