import { config } from "core"; import type { Static } from "core/utils"; import { Field, baseFieldConfigSchema } from "./Field"; import * as tbbox from "@sinclair/typebox"; const { Type } = tbbox; export const primaryFieldConfigSchema = Type.Composite([ Type.Omit(baseFieldConfigSchema, ["required"]), Type.Object({ required: Type.Optional(Type.Literal(false)), }), ]); export type PrimaryFieldConfig = Static; export class PrimaryField extends Field< PrimaryFieldConfig, string, Required > { override readonly type = "primary"; constructor(name: string = config.data.default_primary_field) { super(name, { fillable: false, required: false }); } override isRequired(): boolean { return false; } protected getSchema() { return baseFieldConfigSchema; } override schema() { return Object.freeze({ type: "integer", name: this.name, primary: true, nullable: false, }); } override async transformPersist(value: any): Promise { throw new Error("PrimaryField: This function should not be called"); } override toJsonSchema() { return this.toSchemaWrapIfRequired(Type.Number({ writeOnly: undefined })); } }