-
-
Notifications
You must be signed in to change notification settings - Fork 51
/
alias.ts
37 lines (36 loc) · 1.38 KB
/
alias.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import {
invariant,
isPropSchema,
isAliasedPropSchema,
isIdentifierPropSchema,
} from "../utils/utils";
import { _defaultPrimitiveProp } from "../constants";
import { PropSchema, PropDef } from "../api/types";
/**
* Alias indicates that this model property should be named differently in the generated json.
* Alias should be the outermost propschema.
*
* @example
* createModelSchema(Todo, {
* title: alias('task', primitive()),
* })
*
* serialize(new Todo('test')) // { "task": "test" }
*
* @param name name of the json field to be used for this property
* @param propSchema propSchema to (de)serialize the contents of this field
*/
export default function alias(name: string, propSchema?: PropDef): PropSchema {
invariant(name && typeof name === "string", "expected prop name as first argument");
propSchema = !propSchema || propSchema === true ? _defaultPrimitiveProp : propSchema;
invariant(isPropSchema(propSchema), "expected prop schema as second argument");
invariant(!isAliasedPropSchema(propSchema), "provided prop is already aliased");
return {
jsonname: name,
serializer: propSchema.serializer,
deserializer: propSchema.deserializer,
identifier: isIdentifierPropSchema(propSchema) || undefined,
beforeDeserialize: propSchema.beforeDeserialize,
afterDeserialize: propSchema.afterDeserialize,
};
}