import { serializable, date as serializrDate } from 'serializr'; import { Deserializable } from '../client/util/SerializationHelper'; import { ObjectField } from './ObjectField'; import { Copy, ToJavascriptString, ToScriptString, ToString } from './FieldSymbols'; import { scriptingGlobal, ScriptingGlobals } from '../client/util/ScriptingGlobals'; @scriptingGlobal @Deserializable('date') export class DateField extends ObjectField { @serializable(serializrDate()) readonly date: Date; constructor(date: Date = new Date()) { super(); this.date = date; } [Copy]() { return new DateField(this.date); } toString() { return `${this.date.toLocaleString()}`; } [ToJavascriptString]() { return `"${this.date.toISOString()}"`; } [ToScriptString]() { return `new DateField(new Date("${this.date.toISOString()}"))`; } [ToString]() { return this.date.toLocaleString(); } getDate() { return this.date; } } // eslint-disable-next-line prefer-arrow-callback ScriptingGlobals.add(function d(...dateArgs: ConstructorParameters) { return new DateField(new Date(...dateArgs)); });