You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1001 B
39 lines
1001 B
import {Context, custom, ModelSchema, primitive, PropSchema} from 'serializr'; |
|
|
|
import * as s from '..'; |
|
|
|
export const duration: PropSchema = primitive(); |
|
|
|
export const date: PropSchema = custom( |
|
(jsDate: Date|null) => jsDate != null ? jsDate.toISOString() : null, |
|
(json: any, context: Context, oldValue: any, |
|
done: (err: any, value: any) => void) => { |
|
if (json === null) { |
|
return done(null, null); |
|
} |
|
try { |
|
done(null, new Date(json)); |
|
} catch (e) { |
|
done(e, undefined); |
|
} |
|
}); |
|
|
|
export const dateOfYear: ModelSchema<s.DateOfYear> = { |
|
factory: () => new s.DateOfYear(), |
|
props: { |
|
year: primitive(), |
|
month: |
|
primitive(), // this only works if it is represented as a # from 0-12 |
|
day: primitive() |
|
} |
|
}; |
|
|
|
export const timeOfDay: ModelSchema<s.TimeOfDay> = { |
|
factory: () => new s.TimeOfDay(), |
|
props: { |
|
hour: primitive(), |
|
minute: primitive(), |
|
second: primitive(), |
|
millisecond: primitive() |
|
} |
|
};
|
|
|