Skip to content

Commit 6777012

Browse files
committed
feat: update BaseSerialize.serialize method to always accept containerResolver
1 parent 79be943 commit 6777012

File tree

5 files changed

+160
-58
lines changed

5 files changed

+160
-58
lines changed

benchmarks/types.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import { bench } from '@ark/attest'
2-
import { apiSerializer } from '../tests/helpers.ts'
2+
import { apiSerializer, container } from '../tests/helpers.ts'
33
import { User } from '../tests/fixtures/models/user.ts'
44
import { Post } from '../tests/fixtures/models/posts.ts'
55
import { PostTransformer } from '../tests/fixtures/transformers/post.ts'
66
import { UserTransformer } from '../tests/fixtures/transformers/user.ts'
77

8-
await apiSerializer.serialize(UserTransformer.transform(new User()))
8+
await apiSerializer.serialize(UserTransformer.transform(new User()), container.createResolver())
99

1010
bench('serialize', async () => {
1111
const post = new Post()
12-
const postDataObject1 = await apiSerializer.serialize(PostTransformer.transform([post]))
12+
const postDataObject1 = await apiSerializer.serialize(
13+
PostTransformer.transform([post]),
14+
container.createResolver()
15+
)
1316
return { postDataObject1 }
1417
}).types([1, 'instantiations'])

src/base_serializer.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* file that was distributed with this source code.
88
*/
99

10-
import { Container, type ContainerResolver } from '@adonisjs/fold'
10+
import { type ContainerResolver } from '@adonisjs/fold'
1111
import { RuntimeException } from '@poppinss/exception'
1212

1313
import { Item } from './resource/item.ts'
@@ -94,7 +94,7 @@ export abstract class BaseSerializer<
9494
*/
9595
serialize<Data extends Record<string, ResourceDataTypes | PaginatorContract<any>>>(
9696
data: Data,
97-
container?: ContainerResolver<any>
97+
resolver: ContainerResolver<any>
9898
): Promise<UnpackTopLevelValues<Data>>
9999

100100
/**
@@ -105,7 +105,7 @@ export abstract class BaseSerializer<
105105
*/
106106
serialize<ResourceItem extends ItemContract<any, any, any>>(
107107
resource: ResourceItem,
108-
container?: ContainerResolver<any>
108+
resolver: ContainerResolver<any>
109109
): Promise<UnpackAsTopLevelItem<ResourceItem, Wrappers['Wrap']>>
110110

111111
/**
@@ -116,7 +116,7 @@ export abstract class BaseSerializer<
116116
*/
117117
serialize<ResourceCollection extends CollectionContract<any, any, any>>(
118118
collection: ResourceCollection,
119-
container?: ContainerResolver<any>
119+
resolver: ContainerResolver<any>
120120
): Promise<UnpackAsTopLevelCollection<ResourceCollection, Wrappers['Wrap']>>
121121

122122
/**
@@ -127,7 +127,7 @@ export abstract class BaseSerializer<
127127
*/
128128
serialize<ResourcePaginator extends PaginatorContract<any>>(
129129
paginator: ResourcePaginator,
130-
container?: ContainerResolver<any>
130+
resolver: ContainerResolver<any>
131131
): Promise<
132132
UnpackAsTopLevelPaginator<
133133
ResourcePaginator,
@@ -142,16 +142,15 @@ export abstract class BaseSerializer<
142142
* @param value - The value to serialize
143143
* @param container - Optional container resolver for dependency injection
144144
*/
145-
serialize<Value>(value: Value, container?: ContainerResolver<any>): Promise<Value>
145+
serialize<Value>(value: Value, container: ContainerResolver<any>): Promise<Value>
146146
serialize(
147147
data: Record<string, ResourceDataTypes> | Item<any, any, any> | Collection<any, any, any>,
148-
container?: ContainerResolver<any>
148+
resolver: ContainerResolver<any>
149149
): Promise<any> {
150150
if (data === null) {
151151
throw new RuntimeException('Cannot serialize an item with null value')
152152
}
153153

154-
const resolver = container ?? new Container().createResolver()
155154
if (data instanceof Item) {
156155
return data.resolve(resolver, 0, -1).then((value) => this.#wrap(value, this.wrap))
157156
}

tests/helpers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Container } from '@adonisjs/fold'
12
import { BaseSerializer } from '../src/base_serializer.ts'
23

34
class ApiSerializer extends BaseSerializer<{
@@ -27,3 +28,4 @@ class WrappedApiSerializer extends BaseSerializer<{
2728

2829
export const apiSerializer = new ApiSerializer()
2930
export const wrappedApiSerializer = new WrappedApiSerializer()
31+
export const container = new Container()

0 commit comments

Comments
 (0)