glasswork 0.4.0 → 0.6.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/README.md +5 -3
- package/dist/authorization/ability-middleware.d.ts +61 -0
- package/dist/authorization/ability-middleware.d.ts.map +1 -0
- package/dist/authorization/ability-middleware.js +74 -0
- package/dist/authorization/ability-middleware.js.map +1 -0
- package/dist/authorization/index.d.ts +46 -0
- package/dist/authorization/index.d.ts.map +1 -0
- package/dist/authorization/index.js +46 -0
- package/dist/authorization/index.js.map +1 -0
- package/dist/authorization/route-helpers.d.ts +106 -0
- package/dist/authorization/route-helpers.d.ts.map +1 -0
- package/dist/authorization/route-helpers.js +136 -0
- package/dist/authorization/route-helpers.js.map +1 -0
- package/dist/authorization/service-proxy.d.ts +59 -0
- package/dist/authorization/service-proxy.d.ts.map +1 -0
- package/dist/authorization/service-proxy.js +110 -0
- package/dist/authorization/service-proxy.js.map +1 -0
- package/dist/authorization/types.d.ts +58 -0
- package/dist/authorization/types.d.ts.map +1 -0
- package/dist/authorization/types.js +7 -0
- package/dist/authorization/types.js.map +1 -0
- package/dist/hooks/authorization-hook.d.ts +100 -0
- package/dist/hooks/authorization-hook.d.ts.map +1 -0
- package/dist/hooks/authorization-hook.js +93 -0
- package/dist/hooks/authorization-hook.js.map +1 -0
- package/dist/hooks/index.d.ts +54 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +55 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/service-hooks.d.ts +82 -0
- package/dist/hooks/service-hooks.d.ts.map +1 -0
- package/dist/hooks/service-hooks.js +158 -0
- package/dist/hooks/service-hooks.js.map +1 -0
- package/dist/hooks/types.d.ts +151 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +2 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/http/route-helpers.d.ts +1 -1
- package/dist/http/route-helpers.d.ts.map +1 -1
- package/dist/http/route-helpers.js +4 -5
- package/dist/http/route-helpers.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/list-query/builder.d.ts +9 -2
- package/dist/list-query/builder.d.ts.map +1 -1
- package/dist/list-query/builder.js +86 -5
- package/dist/list-query/builder.js.map +1 -1
- package/dist/list-query/index.d.ts +1 -1
- package/dist/list-query/index.d.ts.map +1 -1
- package/dist/list-query/types.d.ts +26 -0
- package/dist/list-query/types.d.ts.map +1 -1
- package/dist/list-query/validator.d.ts +2 -0
- package/dist/list-query/validator.d.ts.map +1 -1
- package/dist/list-query/validator.js.map +1 -1
- package/dist/openapi/openapi.d.ts.map +1 -1
- package/dist/openapi/openapi.js +6 -24
- package/dist/openapi/openapi.js.map +1 -1
- package/dist/utils/pagination.d.ts +48 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +42 -0
- package/dist/utils/pagination.js.map +1 -0
- package/package.json +21 -11
|
@@ -63,11 +63,15 @@ export class ListQueryBuilder {
|
|
|
63
63
|
if (this.whereConditions.length > 0) {
|
|
64
64
|
mergedWhere = this.mergeWhereConditions([validatedWhere, ...this.whereConditions]);
|
|
65
65
|
}
|
|
66
|
+
// Deep copy for params.where to prevent any potential mutation
|
|
67
|
+
// buildAggregationParams uses mergedWhere directly since removeFieldFromWhere is immutable
|
|
68
|
+
const whereForParams = JSON.parse(JSON.stringify(mergedWhere));
|
|
66
69
|
let params = {
|
|
67
|
-
where:
|
|
70
|
+
where: whereForParams,
|
|
68
71
|
orderBy: validatedOrderBy,
|
|
69
72
|
skip: this.paginationEnabled ? this.prismaParams.skip : 0,
|
|
70
73
|
take: this.paginationEnabled ? this.prismaParams.take : 999999,
|
|
74
|
+
aggregations: this.buildAggregationParams(mergedWhere),
|
|
71
75
|
};
|
|
72
76
|
// Apply transform if configured
|
|
73
77
|
if (this.transformFn) {
|
|
@@ -75,18 +79,95 @@ export class ListQueryBuilder {
|
|
|
75
79
|
}
|
|
76
80
|
return params;
|
|
77
81
|
}
|
|
82
|
+
buildAggregationParams(mergedWhere) {
|
|
83
|
+
if (!this.config.aggregations || !this.prismaParams) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
const aggregationParams = {};
|
|
87
|
+
for (const [key, config] of Object.entries(this.config.aggregations)) {
|
|
88
|
+
const fieldPath = Array.isArray(config.field) ? config.field : [config.field];
|
|
89
|
+
const lastField = fieldPath[fieldPath.length - 1];
|
|
90
|
+
if (!lastField) {
|
|
91
|
+
throw new Error(`Invalid field path for aggregation: ${key}`);
|
|
92
|
+
}
|
|
93
|
+
// Remove filter on the aggregation field to get counts across all values
|
|
94
|
+
const whereWithoutAggregationField = this.removeFieldFromWhere(mergedWhere, fieldPath);
|
|
95
|
+
aggregationParams[key] = {
|
|
96
|
+
by: fieldPath,
|
|
97
|
+
_count: { [lastField]: true },
|
|
98
|
+
where: whereWithoutAggregationField,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return aggregationParams;
|
|
102
|
+
}
|
|
103
|
+
removeFieldFromWhere(where, fieldPath) {
|
|
104
|
+
if (fieldPath.length === 0) {
|
|
105
|
+
return { ...where };
|
|
106
|
+
}
|
|
107
|
+
// Handle AND/OR arrays - recursively process each condition
|
|
108
|
+
if ('AND' in where && Array.isArray(where.AND)) {
|
|
109
|
+
return this.processLogicalArray(where.AND, fieldPath, 'AND');
|
|
110
|
+
}
|
|
111
|
+
if ('OR' in where && Array.isArray(where.OR)) {
|
|
112
|
+
return this.processLogicalArray(where.OR, fieldPath, 'OR');
|
|
113
|
+
}
|
|
114
|
+
// For simple field (e.g., ['status']), remove it from root
|
|
115
|
+
if (fieldPath.length === 1) {
|
|
116
|
+
return this.removeSimpleField(where, fieldPath[0]);
|
|
117
|
+
}
|
|
118
|
+
// For nested fields (e.g., ['organization', 'name']), recursively remove
|
|
119
|
+
return this.removeNestedField(where, fieldPath);
|
|
120
|
+
}
|
|
121
|
+
processLogicalArray(conditions, fieldPath, operator) {
|
|
122
|
+
const updated = conditions
|
|
123
|
+
.map((condition) => this.removeFieldFromWhere(condition, fieldPath))
|
|
124
|
+
.filter((condition) => Object.keys(condition).length > 0);
|
|
125
|
+
if (updated.length === 0) {
|
|
126
|
+
return {};
|
|
127
|
+
}
|
|
128
|
+
if (updated.length === 1) {
|
|
129
|
+
return updated[0];
|
|
130
|
+
}
|
|
131
|
+
return { [operator]: updated };
|
|
132
|
+
}
|
|
133
|
+
removeSimpleField(where, field) {
|
|
134
|
+
const { [field]: _, ...rest } = where;
|
|
135
|
+
return rest;
|
|
136
|
+
}
|
|
137
|
+
removeNestedField(where, fieldPath) {
|
|
138
|
+
const [firstField, ...restPath] = fieldPath;
|
|
139
|
+
if (!firstField || !(firstField in where)) {
|
|
140
|
+
return { ...where };
|
|
141
|
+
}
|
|
142
|
+
const nestedValue = where[firstField];
|
|
143
|
+
if (typeof nestedValue !== 'object' || nestedValue === null) {
|
|
144
|
+
return { ...where };
|
|
145
|
+
}
|
|
146
|
+
// Create a copy of nested value to avoid mutation
|
|
147
|
+
const nestedCopy = { ...nestedValue };
|
|
148
|
+
const updatedNested = this.removeFieldFromWhere(nestedCopy, restPath);
|
|
149
|
+
// If the nested object is now empty, remove the parent field too
|
|
150
|
+
if (Object.keys(updatedNested).length === 0) {
|
|
151
|
+
const { [firstField]: _, ...rest } = where;
|
|
152
|
+
return rest;
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
...where,
|
|
156
|
+
[firstField]: updatedNested,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
78
159
|
async execute(callback) {
|
|
79
160
|
const params = this.build();
|
|
80
|
-
const
|
|
161
|
+
const result = await callback(params);
|
|
81
162
|
// Set pagination headers if enabled and context available
|
|
82
163
|
if (this.paginationEnabled && this.context && this.parsedQuery) {
|
|
83
|
-
const totalPages = Math.ceil(total / this.parsedQuery.pageSize);
|
|
84
|
-
this.context.header('X-Total-Count', total.toString());
|
|
164
|
+
const totalPages = Math.ceil(result.total / this.parsedQuery.pageSize);
|
|
165
|
+
this.context.header('X-Total-Count', result.total.toString());
|
|
85
166
|
this.context.header('X-Total-Pages', totalPages.toString());
|
|
86
167
|
this.context.header('X-Current-Page', this.parsedQuery.page.toString());
|
|
87
168
|
this.context.header('X-Page-Size', this.parsedQuery.pageSize.toString());
|
|
88
169
|
}
|
|
89
|
-
return
|
|
170
|
+
return result;
|
|
90
171
|
}
|
|
91
172
|
mergeWhereConditions(conditions) {
|
|
92
173
|
const nonEmpty = conditions.filter((c) => Object.keys(c).length > 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/list-query/builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/list-query/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { createListQuery, type ListQueryBuilder, type ListQueryConfig, type PaginatedResult, } from './builder.js';
|
|
2
2
|
export { ListQuerySchema } from './query-schema.js';
|
|
3
3
|
export { booleanFilterSchema, createFilterSchema, createSortSchema, dateFilterSchema, enumFilterSchema, numberFilterSchema, relationFilterSchema, sortDirectionSchema, stringFilterSchema, } from './schema-helpers.js';
|
|
4
|
-
export type { FieldPath, FilterOperator, ParsedFilter, ParsedQueryParams, ParsedSort, PrismaListParams, RawQueryParams, SearchFieldInput, SortDirection, } from './types.js';
|
|
4
|
+
export type { AggregationConfig, AggregationResult, AggregationType, FieldPath, FilterOperator, ParsedFilter, ParsedQueryParams, ParsedSort, PrismaAggregationParams, PrismaListParams, RawQueryParams, SearchFieldInput, SortDirection, } from './types.js';
|
|
5
5
|
export type { SchemaValidationConfig, ValidatedListParams } from './validator.js';
|
|
6
6
|
//# 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;AAGtB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,SAAS,EACT,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,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;AAGtB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,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;AAGpB,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -63,4 +63,30 @@ export interface PrismaListParams<TWhere = Record<string, unknown>, TOrderBy = R
|
|
|
63
63
|
readonly skip: number;
|
|
64
64
|
readonly take: number;
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Aggregation type
|
|
68
|
+
*/
|
|
69
|
+
export type AggregationType = 'groupBy';
|
|
70
|
+
/**
|
|
71
|
+
* Configuration for a single aggregation
|
|
72
|
+
*/
|
|
73
|
+
export interface AggregationConfig {
|
|
74
|
+
readonly field: FieldPath | string;
|
|
75
|
+
readonly type: AggregationType;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Result of an aggregation (field value -> count)
|
|
79
|
+
* Example: { PENDING: 5, CONFIRMED: 3 }
|
|
80
|
+
*/
|
|
81
|
+
export interface AggregationResult {
|
|
82
|
+
readonly [key: string]: number;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Prisma groupBy parameters for computing aggregations
|
|
86
|
+
*/
|
|
87
|
+
export interface PrismaAggregationParams {
|
|
88
|
+
readonly by: string[];
|
|
89
|
+
readonly _count: Record<string, true>;
|
|
90
|
+
readonly where: Record<string, unknown>;
|
|
91
|
+
}
|
|
66
92
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/list-query/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,MAAM,EAAE,CAAC;AAE1C;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,IAAI,GACJ,IAAI,GACJ,GAAG,GACH,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB,CAC/B,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAElC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/list-query/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,MAAM,EAAE,CAAC;AAE1C;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,IAAI,GACJ,IAAI,GACJ,GAAG,GACH,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB,CAC/B,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAElC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type BaseIssue, type BaseSchema, type InferOutput } from 'valibot';
|
|
2
|
+
import type { PrismaAggregationParams } from './types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Schema-based validation configuration
|
|
4
5
|
* Defines Valibot schemas for validating Prisma where and orderBy clauses
|
|
@@ -16,6 +17,7 @@ export interface ValidatedListParams<TWhereSchema extends BaseSchema<unknown, un
|
|
|
16
17
|
readonly orderBy: InferOutput<TOrderBySchema>[];
|
|
17
18
|
readonly skip: number;
|
|
18
19
|
readonly take: number;
|
|
20
|
+
readonly aggregations?: Record<string, PrismaAggregationParams>;
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
21
23
|
* Validate and parse Prisma where clause against schema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/list-query/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAS,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/list-query/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAS,MAAM,SAAS,CAAC;AACnF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,sBAAsB,CACrC,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;IAEvE,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB,CAClC,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;IAEvE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,SAAS,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,EAC5F,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,EAAE,OAAO,GACd,WAAW,CAAC,OAAO,CAAC,CAStB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,SAAS,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,EAC9F,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC3C,MAAM,EAAE,OAAO,GACd,WAAW,CAAC,OAAO,CAAC,EAAE,CASxB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,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,EAEvE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC3C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,sBAAsB,CAAC,YAAY,EAAE,cAAc,CAAC,GAC3D,mBAAmB,CAAC,YAAY,EAAE,cAAc,CAAC,CAOnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/list-query/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/list-query/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,EAAE,MAAM,SAAS,CAAC;AA8BnF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,KAA8B,EAC9B,MAAe;IAEf,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA2C,EAC3C,MAAe;IAEf,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAIhC,KAA8B,EAC9B,OAA2C,EAC3C,IAAY,EACZ,IAAY,EACZ,MAA4D;IAE5D,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC;QAC/C,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC;QACvD,IAAI;QACJ,IAAI;KACL,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/openapi/openapi.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/openapi/openapi.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAW1B,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,IAAI,CAAC;IACV,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAyFvE"}
|
package/dist/openapi/openapi.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { writeFile } from 'node:fs/promises';
|
|
2
2
|
import { swaggerUI } from '@hono/swagger-ui';
|
|
3
|
-
import {
|
|
3
|
+
import { openAPIRouteHandler } from 'hono-openapi';
|
|
4
4
|
import { setGlobalResponseHooks, setGlobalSecuritySchemes } from '../http/route-helpers.js';
|
|
5
5
|
import { deepMerge } from '../utils/deep-merge.js';
|
|
6
6
|
import { createLogger } from '../utils/logger.js';
|
|
7
7
|
import { defaultOpenAPIComponents } from './defaults.js';
|
|
8
8
|
import { createCorsHeadersHook, createPaginationHeadersHook, createRateLimitHeadersHook, } from './hooks.js';
|
|
9
|
-
import { transformOpenAPIDocument } from './openapi-transformer.js';
|
|
10
9
|
/**
|
|
11
10
|
* Configure OpenAPI documentation for the application.
|
|
12
11
|
*
|
|
@@ -55,23 +54,7 @@ export function configureOpenAPI(options) {
|
|
|
55
54
|
}
|
|
56
55
|
// Serve OpenAPI spec endpoint (development only by default)
|
|
57
56
|
if (shouldServeSpecs) {
|
|
58
|
-
|
|
59
|
-
app.get('/api/openapi-base.json', openAPISpecs(app, { documentation: mergedDocumentation }));
|
|
60
|
-
// Create a custom handler that transforms the spec to OpenAPI 3.1 format
|
|
61
|
-
app.get('/api/openapi.json', async (c) => {
|
|
62
|
-
try {
|
|
63
|
-
// Get the base spec from the internal endpoint
|
|
64
|
-
const response = await app.request('/api/openapi-base.json');
|
|
65
|
-
const spec = (await response.json());
|
|
66
|
-
// Transform to OpenAPI 3.1 format
|
|
67
|
-
const transformedSpec = transformOpenAPIDocument(spec);
|
|
68
|
-
return c.json(transformedSpec);
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
logger.error('Failed to generate OpenAPI spec:', error);
|
|
72
|
-
return c.json({ error: 'Failed to generate OpenAPI spec' }, 500);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
57
|
+
app.get('/api/openapi.json', openAPIRouteHandler(app, { documentation: mergedDocumentation }));
|
|
75
58
|
}
|
|
76
59
|
// Serve Swagger UI (development only by default)
|
|
77
60
|
if (shouldServeUI) {
|
|
@@ -86,18 +69,17 @@ export function configureOpenAPI(options) {
|
|
|
86
69
|
try {
|
|
87
70
|
let specContent;
|
|
88
71
|
if (shouldServeSpecs) {
|
|
89
|
-
// Use
|
|
72
|
+
// Use Hono's built-in request method to simulate the request
|
|
90
73
|
const response = await app.request('/api/openapi.json');
|
|
91
74
|
specContent = await response.text();
|
|
92
75
|
}
|
|
93
76
|
else {
|
|
94
|
-
// If not serving specs, generate
|
|
77
|
+
// If not serving specs, generate manually
|
|
95
78
|
// Mount a temporary internal endpoint
|
|
96
|
-
app.get('/api/openapi-internal.json',
|
|
79
|
+
app.get('/api/openapi-internal.json', openAPIRouteHandler(app, { documentation: mergedDocumentation }));
|
|
97
80
|
const response = await app.request('/api/openapi-internal.json');
|
|
98
81
|
const spec = (await response.json());
|
|
99
|
-
|
|
100
|
-
specContent = JSON.stringify(transformedSpec, null, 2);
|
|
82
|
+
specContent = JSON.stringify(spec, null, 2);
|
|
101
83
|
}
|
|
102
84
|
await writeFile(filePath, specContent, 'utf-8');
|
|
103
85
|
logger.info(`OpenAPI spec written to ${filePath}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/openapi/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/openapi/openapi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
/**
|
|
3
|
+
* Pagination input parameters
|
|
4
|
+
*/
|
|
5
|
+
export interface PaginationInput {
|
|
6
|
+
page: number;
|
|
7
|
+
limit: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Paginated output structure
|
|
11
|
+
*/
|
|
12
|
+
export interface PaginatedOutput<T> {
|
|
13
|
+
data: T[];
|
|
14
|
+
total: number;
|
|
15
|
+
page: number;
|
|
16
|
+
limit: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Execute a paginated query and set response headers.
|
|
20
|
+
*
|
|
21
|
+
* This helper extracts pagination parameters from the query string,
|
|
22
|
+
* executes the provided function, and sets the appropriate response headers.
|
|
23
|
+
*
|
|
24
|
+
* @template T - The type of items in the result
|
|
25
|
+
* @param c - Hono context
|
|
26
|
+
* @param fn - Function that executes the paginated query
|
|
27
|
+
* @returns Array of items (headers are set as side effect)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* router.get('/users', route({
|
|
32
|
+
* paginate: true,
|
|
33
|
+
* handler: async ({ context }) => {
|
|
34
|
+
* return await paginate(context, (p) => userService.getUsers(p));
|
|
35
|
+
* }
|
|
36
|
+
* }));
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function paginate<T>(c: Context, fn: (p: PaginationInput) => Promise<PaginatedOutput<T>>): Promise<T[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Extract pagination parameters from Hono context.
|
|
42
|
+
*
|
|
43
|
+
* @param c - Hono context
|
|
44
|
+
* @param defaultLimit - Default limit if not provided (default: 100)
|
|
45
|
+
* @returns Pagination input with page and limit
|
|
46
|
+
*/
|
|
47
|
+
export declare function paginationInput(c: Context, defaultLimit?: number): PaginationInput;
|
|
48
|
+
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,CAAC,EAAE,OAAO,EACV,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GACtD,OAAO,CAAC,CAAC,EAAE,CAAC,CASd;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,SAAM,GAAG,eAAe,CAI/E"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execute a paginated query and set response headers.
|
|
3
|
+
*
|
|
4
|
+
* This helper extracts pagination parameters from the query string,
|
|
5
|
+
* executes the provided function, and sets the appropriate response headers.
|
|
6
|
+
*
|
|
7
|
+
* @template T - The type of items in the result
|
|
8
|
+
* @param c - Hono context
|
|
9
|
+
* @param fn - Function that executes the paginated query
|
|
10
|
+
* @returns Array of items (headers are set as side effect)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* router.get('/users', route({
|
|
15
|
+
* paginate: true,
|
|
16
|
+
* handler: async ({ context }) => {
|
|
17
|
+
* return await paginate(context, (p) => userService.getUsers(p));
|
|
18
|
+
* }
|
|
19
|
+
* }));
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export async function paginate(c, fn) {
|
|
23
|
+
const pagination = paginationInput(c);
|
|
24
|
+
const result = await fn(pagination);
|
|
25
|
+
c.header('X-Total-Count', result.total.toString());
|
|
26
|
+
c.header('X-Page', result.page.toString());
|
|
27
|
+
c.header('X-Limit', result.limit.toString());
|
|
28
|
+
return result.data;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Extract pagination parameters from Hono context.
|
|
32
|
+
*
|
|
33
|
+
* @param c - Hono context
|
|
34
|
+
* @param defaultLimit - Default limit if not provided (default: 100)
|
|
35
|
+
* @returns Pagination input with page and limit
|
|
36
|
+
*/
|
|
37
|
+
export function paginationInput(c, defaultLimit = 100) {
|
|
38
|
+
const page = Number.parseInt(c.req.query('page') ?? '1', 10);
|
|
39
|
+
const limit = Number.parseInt(c.req.query('limit') ?? defaultLimit.toString(), 10);
|
|
40
|
+
return { page, limit };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,CAAU,EACV,EAAuD;IAEvD,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC;IAEpC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE7C,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,CAAU,EAAE,YAAY,GAAG,GAAG;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACnF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "glasswork",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "A transparent, Lambda-optimized web framework for building OpenAPI-compliant REST APIs.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"sideEffects": false,
|
|
22
22
|
"engines": {
|
|
23
|
-
"node": ">=
|
|
23
|
+
"node": ">=20.0.0"
|
|
24
24
|
},
|
|
25
25
|
"keywords": [
|
|
26
26
|
"framework",
|
|
@@ -57,16 +57,16 @@
|
|
|
57
57
|
"access": "public"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
|
-
"@aws-sdk/client-dynamodb": "^3.
|
|
61
|
-
"@aws-sdk/client-ssm": "^3.
|
|
62
|
-
"@aws-sdk/lib-dynamodb": "^3.
|
|
60
|
+
"@aws-sdk/client-dynamodb": "^3.900.0",
|
|
61
|
+
"@aws-sdk/client-ssm": "^3.900.0",
|
|
62
|
+
"@aws-sdk/lib-dynamodb": "^3.900.0",
|
|
63
63
|
"@casl/prisma": "^1.4.0",
|
|
64
64
|
"@hono/swagger-ui": "^0.5.0",
|
|
65
65
|
"@prisma/client": "^6.0.0",
|
|
66
66
|
"awilix": "^12.0.0",
|
|
67
67
|
"dotenv": "^16.0.0",
|
|
68
68
|
"hono": "^4.9.0",
|
|
69
|
-
"hono-openapi": "^0.
|
|
69
|
+
"hono-openapi": "^1.0.0",
|
|
70
70
|
"valibot": "^1.0.0"
|
|
71
71
|
},
|
|
72
72
|
"peerDependenciesMeta": {
|
|
@@ -93,19 +93,29 @@
|
|
|
93
93
|
}
|
|
94
94
|
},
|
|
95
95
|
"devDependencies": {
|
|
96
|
-
"@aws-sdk/client-
|
|
96
|
+
"@aws-sdk/client-dynamodb": "^3.932.0",
|
|
97
|
+
"@aws-sdk/client-ssm": "^3.932.0",
|
|
98
|
+
"@aws-sdk/lib-dynamodb": "^3.932.0",
|
|
97
99
|
"@biomejs/biome": "^2.2.5",
|
|
98
100
|
"@casl/ability": "^6.7.3",
|
|
99
101
|
"@casl/prisma": "^1.5.2",
|
|
100
|
-
"@
|
|
101
|
-
"@
|
|
102
|
-
"@
|
|
102
|
+
"@hono/swagger-ui": "^0.5.2",
|
|
103
|
+
"@prisma/client": "^6.19.0",
|
|
104
|
+
"@types/node": "^22.19.1",
|
|
105
|
+
"@vitest/coverage-v8": "^4.0.10",
|
|
106
|
+
"awilix": "^12.0.5",
|
|
103
107
|
"dotenv": "^17.2.3",
|
|
108
|
+
"hono": "^4.10.6",
|
|
109
|
+
"hono-openapi": "^1.1.1",
|
|
104
110
|
"typescript": "^5.9.3",
|
|
105
|
-
"
|
|
111
|
+
"valibot": "^1.1.0",
|
|
112
|
+
"vitest": "^4.0.10"
|
|
106
113
|
},
|
|
107
114
|
"dependencies": {
|
|
115
|
+
"@hono/standard-validator": "^0.1.5",
|
|
108
116
|
"@hono/valibot-validator": "^0.5.3",
|
|
117
|
+
"@standard-community/standard-json": "^0.3.5",
|
|
118
|
+
"@standard-community/standard-openapi": "^0.2.8",
|
|
109
119
|
"@valibot/to-json-schema": "^1.3.0",
|
|
110
120
|
"deepmerge": "^4.3.1",
|
|
111
121
|
"openapi-types": "^12.1.3"
|