Skip to content

Commit 7869998

Browse files
committed
Fix controller action types for strict mode compatibility
- Remove `extends ModelController` constraints from action type generics, default to `any` to break self-referencing circularity - Use conditional type for ModelFromModelController - Add @ts-expect-error for intentionally invalid action test - Handle nullable viteConfig in test build helper
1 parent 253e33d commit 7869998

3 files changed

Lines changed: 17 additions & 16 deletions

File tree

packages/server/types/index.d.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1924,7 +1924,7 @@ export type ActionParameter = Schema & { name: string }
19241924
* is bound to the controller instance.
19251925
*/
19261926
export type ModelControllerActionHandler<
1927-
$ModelController extends ModelController = ModelController
1927+
$ModelController = any
19281928
> = (this: $ModelController, ctx: KoaContext, ...args: any[]) => any
19291929

19301930
/**
@@ -2034,7 +2034,7 @@ export type ControllerActionOptions<
20342034
}
20352035

20362036
export type ModelControllerActionOptions<
2037-
$ModelController extends ModelController = ModelController
2037+
$ModelController = any
20382038
> = BaseControllerActionOptions & {
20392039
/** The function to be called when the action route is requested. */
20402040
handler: ModelControllerActionHandler<$ModelController>
@@ -2068,7 +2068,7 @@ export type MemberActionParameter<$Model extends Model = Model> =
20682068
* `handler` or a bare handler function.
20692069
*/
20702070
export type ModelControllerAction<
2071-
$ModelController extends ModelController = ModelController
2071+
$ModelController = any
20722072
> =
20732073
| ModelControllerActionOptions<$ModelController>
20742074
| ModelControllerActionHandler<$ModelController>
@@ -2079,15 +2079,15 @@ export type ModelControllerAction<
20792079
* `'post'`, `'post login'`).
20802080
*/
20812081
export type ModelControllerActions<
2082-
$ModelController extends ModelController = ModelController
2082+
$ModelController = any
20832083
> = {
20842084
[name: ControllerActionName]: ModelControllerAction<$ModelController>
20852085
allow?: OrReadOnly<ControllerActionName[]>
20862086
authorize?: Authorize
20872087
}
20882088

20892089
type ModelControllerMemberAction<
2090-
$ModelController extends ModelController = ModelController
2090+
$ModelController = any
20912091
> =
20922092
| (Omit<ModelControllerActionOptions<$ModelController>, 'parameters'> & {
20932093
parameters?: {
@@ -2105,7 +2105,7 @@ type ModelControllerMemberAction<
21052105
* parameters to receive the resolved member model.
21062106
*/
21072107
export type ModelControllerMemberActions<
2108-
$ModelController extends ModelController = ModelController
2108+
$ModelController = any
21092109
> = {
21102110
[name: ControllerActionName]: ModelControllerMemberAction<$ModelController>
21112111
allow?: OrReadOnly<ControllerActionName[]>
@@ -2177,7 +2177,7 @@ type ModelControllerHookKeys<
21772177
| '*'
21782178
}`
21792179
type ModelControllerHook<
2180-
$ModelController extends ModelController = ModelController
2180+
$ModelController = any
21812181
> = (
21822182
ctx: KoaContext,
21832183
result: objection.Page<ModelFromModelController<$ModelController>>
@@ -2215,7 +2215,7 @@ type HandlerFromHookKey<
22152215
: never
22162216

22172217
type ModelControllerHooks<
2218-
$ModelController extends ModelController = ModelController
2218+
$ModelController = any
22192219
> = {
22202220
[$Key in HookKeysFromController<$ModelController>]?: HandlerFromHookKey<
22212221
$ModelController,
@@ -2271,12 +2271,12 @@ export class CollectionController<
22712271
* The controller's collection actions with built-in CRUD
22722272
* defaults.
22732273
*/
2274-
collection?: ModelControllerActions<CollectionController<$Model>>
2274+
collection?: ModelControllerActions
22752275
/**
22762276
* The controller's member actions with built-in CRUD
22772277
* defaults.
22782278
*/
2279-
member?: ModelControllerMemberActions<CollectionController<$Model>>
2279+
member?: ModelControllerMemberActions
22802280

22812281
/** Creates a query builder for this controller's model. */
22822282
query(trx?: objection.Transaction): QueryBuilder<$Model>
@@ -2397,12 +2397,12 @@ export class ModelController<
23972397
* The controller's collection actions. Wrap actions in
23982398
* this object to assign them to the collection.
23992399
*/
2400-
collection?: ModelControllerActions<ModelController<$Model>>
2400+
collection?: ModelControllerActions
24012401
/**
24022402
* The controller's member actions. Wrap actions in this
24032403
* object to assign them to the member.
24042404
*/
2405-
member?: ModelControllerMemberActions<ModelController<$Model>>
2405+
member?: ModelControllerMemberActions
24062406
assets?:
24072407
| boolean
24082408
| {
@@ -3527,8 +3527,8 @@ type OrReadOnly<T> = Readonly<T> | T
35273527

35283528
type OrPromiseOf<T> = Promise<T> | T
35293529

3530-
type ModelFromModelController<$ModelController extends ModelController> =
3531-
InstanceType<Exclude<$ModelController['modelClass'], undefined>>
3530+
type ModelFromModelController<$ModelController> =
3531+
$ModelController extends ModelController<infer $Model> ? $Model : Model
35323532

35333533
type SerializeModelPropertyValue<T> = T extends (infer U)[]
35343534
? SerializeModelPropertyValue<U>[]

tests/server/controller.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ describe('Controller action names', () => {
2929
override collection: ModelControllerActions<Tasks> = {
3030
allow: ['get'],
3131
// Bare action name — not prefixed with an HTTP method
32-
test(ctx) {
32+
// @ts-expect-error Intentionally invalid action name
33+
test(ctx: any) {
3334
return { ok: true }
3435
}
3536
}

tests/utils/app.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ export function createTestApp(
125125
})
126126

127127
const { build } = await import('vite')
128-
await build(viteConfig)
128+
await build(viteConfig ?? undefined)
129129
})
130130
} else {
131131
// After setup() registers controllers but

0 commit comments

Comments
 (0)