joist-codegen 2.3.0-next.57 → 2.3.0-next.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -35,10 +35,15 @@ function generateEntityCodegenFile(config, dbMeta, meta, scopeMembers = [], docs
35
35
  const factoryMethod = (0, ts_poet.imp)(`new${entity.name}@./entities.ts`);
36
36
  const idMaybeCode = config.idType === "tagged-string" ? ts_poet.code`return this.idTaggedMaybe;` : ts_poet.code`return ${require_symbols.toIdOf}(${metadata}, this.idTaggedMaybe);`;
37
37
  const idType = getIdType(config);
38
- const maybeIsSoftDeleted = meta.deletedAt ? ts_poet.code`
38
+ const maybeSoftDeleteMethods = meta.deletedAt ? ts_poet.code`
39
39
  get isSoftDeletedEntity(): boolean {
40
40
  return this.${meta.deletedAt.fieldName} !== undefined;
41
41
  }
42
+
43
+ softDelete(): void {
44
+ if (this.isSoftDeletedEntity) return;
45
+ this.${meta.deletedAt.fieldName} = ${nowUTCCall(config, meta.deletedAt)};
46
+ }
42
47
  ` : "";
43
48
  const baseEntity = dbMeta.entities.find((e) => e.name === meta.baseClassName);
44
49
  const subEntities = dbMeta.entities.filter((e) => e.baseClassName === meta.name);
@@ -178,7 +183,7 @@ function generateEntityCodegenFile(config, dbMeta, meta, scopeMembers = [], docs
178
183
  return ${require_symbols.newChangesProxy}(this) as any;
179
184
  }
180
185
 
181
- ${maybeIsSoftDeleted}
186
+ ${maybeSoftDeleteMethods}
182
187
 
183
188
  ${require_tsdoc.tsdocComments.entity.load}
184
189
  load<U, V>(fn: (lens: ${require_symbols.Lens}<${entity.type}>) => ${require_symbols.Lens}<U, V>, opts: { sql?: boolean } = {}): Promise<V> {
@@ -900,6 +905,16 @@ function undefinedOrNever(notNull) {
900
905
  function nullOrNever(notNull) {
901
906
  return notNull ? "never" : "null";
902
907
  }
908
+ /** Returns the nowUTC call for the deleted-at field's generated timestamp type. */
909
+ function nowUTCCall(config, field) {
910
+ if (!config.temporal) return ts_poet.code`${require_symbols.nowUTC}()`;
911
+ switch (field.columnType) {
912
+ case "date": return ts_poet.code`${require_symbols.nowUTC}("plainDate")`;
913
+ case "timestamp without time zone": return ts_poet.code`${require_symbols.nowUTC}("plainDateTime")`;
914
+ case "timestamp with time zone": return ts_poet.code`${require_symbols.nowUTC}("zonedDateTime")`;
915
+ default: return require_utils.fail(`Unsupported deleted-at column type ${field.columnType}`);
916
+ }
917
+ }
903
918
  /** Prefixes the comment with a newline, so it gets its own line. */
904
919
  function maybeComment(comment) {
905
920
  return comment ? ` ${comment}\n` : "";
@@ -1 +1 @@
1
- {"version":3,"file":"generateEntityCodegenFile.cjs","names":["keywords","uncapitalize","camelCase","imp","toIdOf","BaseEntity","EntityManager","joinCode","FieldsOf","RelationsOf","Flavor","Scope","ConfigApi","newScopeFn","ProjectEntity","EntityMetadata","failNoIdYet","TaggedId","getField","tsdocComments","setOpts","PartialOrNull","OptsOf","DeepPartialOrNull","updatePartial","Changes","newChangesProxy","Lens","loadLens","LoadHint","Loaded","isLoaded","ToJsonHint","JsonPayload","toJSON","MaybeAbstractEntityConstructor","isEntity","fail","pascalCase","newRequiredLazyFieldRule","newRequiredRule","cannotBeUpdated","getStiEntities","mustBeSubType","IdOf","ValueFilter","BooleanFilter","EntityFilter","FilterOf","ValueGraphQLFilter","BooleanGraphQLFilter","EntityGraphQLFilter","GraphQLFilterOf","OrderBy","ReactiveField","Zod","setField","SSAssert","code","ReactiveReference","ManyToOneReference","hasOne","ReadOnlyCollection","hasRecursiveParents","hasRecursiveChildren","hasRecursiveM2m","Collection","hasMany","LargeCollection","hasLargeMany","OneToOneReference","hasOneToOne","ReactiveManyToMany","ReactiveManyToManyOtherSide","hasReactiveManyToManyOtherSide","hasManyToMany","EnumCollection","hasEnumCollection","hasLargeManyToMany","PolymorphicReference","hasOnePolymorphic","LazyField","hasLazyField","buildJSDocBlock","generatedTag","assertNever"],"sources":["../src/generateEntityCodegenFile.ts"],"sourcesContent":["import { camelCase, pascalCase } from \"change-case\";\nimport pluralize from \"pluralize\";\nimport { type Code, code, imp, joinCode } from \"ts-poet\";\n\nimport { type Config } from \"./config.ts\";\nimport { type ParsedDoc, buildJSDocBlock, generatedTag } from \"./docs/index.ts\";\nimport {\n type DbMetadata,\n type Entity,\n type EntityDbMetadata,\n type EnumField,\n type ManyToOneField,\n type PgEnumField,\n type PolymorphicField,\n type PrimitiveField,\n type PrimitiveTypescriptType,\n} from \"./EntityDbMetadata.ts\";\nimport { type ScopeMember } from \"./findEntityScopes.ts\";\nimport { getStiEntities } from \"./inheritance.ts\";\nimport { keywords } from \"./keywords.ts\";\nimport {\n BaseEntity,\n BooleanFilter,\n BooleanGraphQLFilter,\n Changes,\n Collection,\n ConfigApi,\n DeepPartialOrNull,\n EntityFilter,\n EntityGraphQLFilter,\n EntityManager,\n EntityMetadata,\n EnumCollection,\n FieldsOf,\n FilterOf,\n Flavor,\n GraphQLFilterOf,\n IdOf,\n JsonPayload,\n LargeCollection,\n LazyField,\n Lens,\n LoadHint,\n Loaded,\n ManyToOneReference,\n MaybeAbstractEntityConstructor,\n OneToOneReference,\n OptsOf,\n OrderBy,\n PartialOrNull,\n PolymorphicReference,\n ProjectEntity,\n ReactiveField,\n ReactiveManyToMany,\n ReactiveManyToManyOtherSide,\n ReactiveReference,\n ReadOnlyCollection,\n RelationsOf,\n SSAssert,\n Scope,\n TaggedId,\n ToJsonHint,\n ValueFilter,\n ValueGraphQLFilter,\n Zod,\n cannotBeUpdated,\n failNoIdYet,\n getField,\n hasEnumCollection,\n hasLargeMany,\n hasLargeManyToMany,\n hasLazyField,\n hasMany,\n hasManyToMany,\n hasOne,\n hasOnePolymorphic,\n hasOneToOne,\n hasReactiveManyToManyOtherSide,\n hasRecursiveChildren,\n hasRecursiveM2m,\n hasRecursiveParents,\n isEntity,\n isLoaded,\n loadLens,\n mustBeSubType,\n newChangesProxy,\n newRequiredLazyFieldRule,\n newRequiredRule,\n newScopeFn,\n setField,\n setOpts,\n toIdOf,\n toJSON,\n updatePartial,\n} from \"./symbols.ts\";\nimport { tsdocComments } from \"./tsdoc.ts\";\nimport { assertNever, fail, uncapitalize } from \"./utils.ts\";\n\nconst { plural } = pluralize;\n\nexport interface ColumnMetaData {\n fieldType: PrimitiveTypescriptType;\n}\n\n// A local type just for tracking abstract vs. concrete relations\ntype Relation =\n // I.e. `abstract ReactiveReference` that the user must implement\n | { kind: \"abstract\"; fieldName: string; line: Code; comment?: string }\n // I.e. a `get author(): ManyToOne<...>`\n | { kind: \"concrete\"; fieldName: string; decl: Code; init: Code; comment?: string }\n // I.e. a `get author(): { super.author as ... }`\n | { kind: \"super\"; fieldName: string; decl: Code; comment?: string };\n\n/** Creates the base class with the boilerplate annotations. */\nexport function generateEntityCodegenFile(\n config: Config,\n dbMeta: DbMetadata,\n meta: EntityDbMetadata,\n scopeMembers: ScopeMember[] = [],\n docs?: ParsedDoc,\n): Code {\n const { entitiesByName: metasByName } = dbMeta;\n const { entity, tagName } = meta;\n const entityName = entity.name;\n\n // Per-field `.md` docs to inject as JSDocs on the codegen'd getters/relations (empty if docs are off)\n const fieldDocs = docs?.fields ?? {};\n\n // Avoid using `do` as a variable name b/c it's a reserved keyword\n const varName = keywords.includes(tagName) ? uncapitalize(entityName) : tagName;\n\n const primitives = createPrimitives(meta, entity, fieldDocs); // Add the primitives\n primitives.push(...createRegularEnums(meta, entity, fieldDocs)); // Add ManyToOne enums\n primitives.push(...createArrayEnums(meta, fieldDocs)); // Add integer[] enums\n primitives.push(...createPgEnums(meta, fieldDocs)); // Add native enums\n const relations = createRelations(config, meta, entity);\n\n const configName = `${camelCase(entityName)}Config`;\n const scopeFnName = `${camelCase(entityName)}Scope`;\n const metadata = imp(`${camelCase(entityName)}Meta@./entities.ts`);\n\n const contextType = config.contextType ? imp(`t:${config.contextType}`) : \"{}\";\n const factoryMethod = imp(`new${entity.name}@./entities.ts`);\n\n // If we're not tagged-strings, detag on the way out of id\n const idMaybeCode =\n config.idType === \"tagged-string\"\n ? code`return this.idTaggedMaybe;`\n : code`return ${toIdOf}(${metadata}, this.idTaggedMaybe);`;\n const idType = getIdType(config);\n\n const maybeIsSoftDeleted = meta.deletedAt\n ? code`\n get isSoftDeletedEntity(): boolean {\n return this.${meta.deletedAt.fieldName} !== undefined;\n }\n `\n : \"\";\n\n // Set up the codegen artifacts to extend from the base type if necessary\n const baseEntity = dbMeta.entities.find((e) => e.name === meta.baseClassName);\n const subEntities = dbMeta.entities.filter((e) => e.baseClassName === meta.name);\n const base = baseEntity?.entity.typeSymbol ?? code`${BaseEntity}<${EntityManager}, ${idType}>`;\n const maybeBaseFields = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.fieldsName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseOpts = baseEntity ? code`extends ${baseEntity.entity.optsType}` : \"\";\n const maybeBaseIdOpts = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.idsOptsName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseFilter = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.filterName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseGqlFilter = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.graphqlFilterName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseOrder = baseEntity ? code`extends ${baseEntity.entity.orderType}` : \"\";\n const maybePreventBaseTypeInstantiation = meta.abstract\n ? code`\n if (this.constructor === ${entity.type} && !(em as any).fakeInstance) {\n throw new Error(\\`${entity.type} must be instantiated via a subtype\\`);\n }`\n : \"\";\n\n let maybeOtherTypeChanges;\n if (subEntities.length > 0) {\n maybeOtherTypeChanges = joinCode(\n // Pass `K = keyof Publisher | keyof SmallPublisher | keyof LargePublisher` to `changes` so that\n // our subtypes can have `SmallPublisher.changes(): Changes<SmallPublisher>` be covariant, which\n // will break if it adds a key to `Changes.fields` that `Publisher.changes()` does not include.\n //\n // type A1 = { foo: 1 | 2 };\n // type A2 = { foo: 1 | 2 | 3 };\n // type A3 = A2 extends A1 ? 1 : 2;\n //\n // A3 will be 2 because the extra 3 breaks code written against A1.foo.\n //\n // So essentially we're pre-emptively our subtypes \"3\".\n [\n code`, `,\n ...[meta, ...subEntities].map(\n (e) => code`keyof (${FieldsOf}<${e.entity.type}> & ${RelationsOf}<${e.entity.type}>)`,\n ),\n ],\n { on: \"|\" },\n );\n } else {\n maybeOtherTypeChanges = \"\";\n }\n\n let maybeOtherLoaded;\n if (baseEntity) {\n maybeOtherLoaded = code`| ${baseEntity.entity.type}`;\n } else {\n maybeOtherLoaded = \"\";\n }\n\n return code`\n export type ${entity.idName} = ${Flavor}<${idType}, \"${baseEntity ? baseEntity.name : entityName}\">;\n\n ${generatePolymorphicTypes(meta)}\n\n export interface ${entity.fieldsName} ${maybeBaseFields} {\n ${generateFieldsType(meta, idType)}\n }\n\n export interface ${entity.optsName} ${maybeBaseOpts} {\n ${generateOptsFields(meta)}\n }\n\n export interface ${entity.idsOptsName} ${maybeBaseIdOpts} {\n ${generateOptIdsFields(meta)}\n }\n\n export interface ${entity.filterName} ${maybeBaseFilter} {\n ${generateFilterFields(metasByName, meta)}\n }\n\n export interface ${entity.graphqlFilterName} ${maybeBaseGqlFilter} {\n ${generateGraphQLFilterFields(metasByName, meta)}\n }\n\n export interface ${entity.orderName} ${maybeBaseOrder} {\n ${generateOrderFields(meta)}\n }\n\n export interface ${entity.factoryExtrasName} {\n ${generateFactoryExtrasType(meta)}\n }\n\n export interface ${entity.scopesName} {\n ${scopeMembers.map((member) => code`${member.name}: ${member.type};`)}\n }\n\n export type ${entity.scopeName} = ${Scope}<${entity.type}, ${entity.scopesName}>;\n\n export const ${configName} = new ${ConfigApi}<${entity.type}, ${contextType}>();\n\n export const ${scopeFnName} = ${newScopeFn}<${entity.type}, ${entity.scopeName}>(\"${entityName}\");\n\n ${generateDefaultValidationRules(dbMeta, meta, configName)}\n ${generateDefaultValues(config, meta, configName)};\n\n declare module \"joist-core\" {\n interface TypeMap {\n ${entityName}: {\n entityType: ${entityName};\n filterType: ${entity.filterName};\n gqlFilterType: ${entity.graphqlFilterName};\n orderType: ${entity.orderName};\n optsType: ${entity.optsName};\n fieldsType: ${entity.fieldsName};\n optIdsType: ${entity.idsOptsName};\n factoryExtrasType: ${entity.factoryExtrasName};\n factoryOptsType: Parameters<typeof ${factoryMethod}>[1];\n };\n }\n }\n\n export abstract class ${entityName}Codegen extends ${base} implements ${ProjectEntity} {\n static readonly tagName = \"${tagName}\";\n static readonly metadata: ${EntityMetadata}<${entity.type}>;\n\n declare readonly __type: {\n ${baseEntity ? `0: \"${baseEntity.name}\",` : \"\"}\n ${baseEntity ? 1 : 0}: \"${entityName}\", \n };\n\n ${relations\n .filter((r) => r.kind === \"abstract\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}${r.line}${maybeComment(r.comment)}`;\n })}\n ${relations\n .filter((r) => r.kind === \"concrete\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}readonly ${r.fieldName}: ${r.decl} = ${r.init};${maybeComment(r.comment)}`;\n })}\n ${relations\n .filter((r) => r.kind === \"super\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}declare readonly ${r.fieldName}: ${r.decl};${maybeComment(r.comment)}`;\n })}\n\n get id(): ${entity.idName} {\n return this.idMaybe || ${failNoIdYet}(\"${entityName}\");\n }\n\n get idMaybe(): ${entity.idName} | undefined {\n ${idMaybeCode}\n }\n\n get idTagged(): ${TaggedId} {\n return this.idTaggedMaybe || ${failNoIdYet}(\"${entityName}\");\n }\n\n get idTaggedMaybe(): ${TaggedId} | undefined {\n return ${getField}(this, \"id\");\n }\n\n ${primitives} \n\n ${tsdocComments.entity.setPartial}\n set(opts: Partial<${entity.optsName}>): void {\n ${setOpts}(this as any as ${entityName}, opts);\n }\n\n ${tsdocComments.entity.setPartial}\n setPartial(opts: ${PartialOrNull}<${entity.optsName}>): void {\n ${setOpts}(this as any as ${entityName}, opts as ${OptsOf}<${entityName}>, { partial: true });\n }\n\n ${tsdocComments.entity.setDeepPartial}\n setDeepPartial(opts: ${DeepPartialOrNull}<${entityName}>): Promise<void> {\n return ${updatePartial}(this as any as ${entityName}, opts);\n }\n\n ${tsdocComments.entity.changes}\n get changes(): ${Changes}<${entityName}${maybeOtherTypeChanges}> {\n return ${newChangesProxy}(this) as any;\n }\n\n ${maybeIsSoftDeleted}\n\n ${tsdocComments.entity.load}\n load<U, V>(fn: (lens: ${Lens}<${entity.type}>) => ${Lens}<U, V>, opts: { sql?: boolean } = {}): Promise<V> {\n return ${loadLens}(this as any as ${entityName}, fn, opts);\n }\n\n ${tsdocComments.entity.populate}\n populate<const H extends ${LoadHint}<${entityName}>>(hint: H): Promise<${Loaded}<${entityName}, H>>;\n populate<const H extends ${LoadHint}<${entityName}>>(opts: { hint: H, forceReload?: boolean }): Promise<${Loaded}<${entityName}, H>>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(hint: H, fn: (${varName}: Loaded<${entityName}, H>) => V): Promise<V>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(opts: { hint: H, forceReload?: boolean }, fn: (${varName}: Loaded<${entityName}, H>) => V): Promise<V>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(hintOrOpts: any, fn?: (${varName}: Loaded<${entityName}, H>) => V): Promise<${Loaded}<${entityName}, H> | V> {\n return this.em.populate(this as any as ${entityName}, hintOrOpts, fn);\n }\n\n ${tsdocComments.entity.isLoaded}\n isLoaded<const H extends ${LoadHint}<${entityName}>>(hint: H): this is ${Loaded}<${entityName}${maybeOtherLoaded}, H> {\n return ${isLoaded}(this as any as ${entityName}, hint);\n }\n\n ${tsdocComments.entity.toJSON}\n toJSON(): object;\n toJSON<const H extends ${ToJsonHint}<${entityName}>>(hint: H): Promise<${JsonPayload}<${entityName}, H>>;\n toJSON(hint?: any): object {\n return !hint || typeof hint === \"string\" ? super.toJSON() : ${toJSON}(this, hint);\n }\n }\n `;\n}\n\nfunction fieldHasDefaultValue(field: PrimitiveField | EnumField | PgEnumField): boolean {\n let { columnDefault } = field;\n // If there's no default at all, return false\n if (columnDefault === null) {\n return false;\n }\n // Even though default is defined as a `number | boolean | string | null`, in reality pg-structure\n // only ever returns a `string | null`, so we handle that here\n columnDefault = columnDefault.toString();\n const fieldType = field.kind === \"primitive\" ? field.fieldType : \"number\";\n // Try to validate that we actually got a primitive value and not arbitrary SQL\n return (\n (fieldType === \"number\" && !isNaN(parseInt(columnDefault))) ||\n (fieldType === \"bigint\" && !isNaN(parseInt(columnDefault))) ||\n (fieldType === \"string\" && /^'.*'$/.test(columnDefault)) ||\n (fieldType === \"boolean\" && [\"true\", \"false\"].includes(columnDefault))\n );\n}\n\nfunction generatePolymorphicTypes(meta: EntityDbMetadata) {\n return meta.polymorphics.flatMap((pf) => [\n code`export type ${pf.fieldType} = ${pf.components.map((c) => code`| ${c.otherEntity.type}`)};`,\n code`export function get${pf.fieldType}Constructors(): ${MaybeAbstractEntityConstructor}<${pf.fieldType}>[] {\n return [${pf.components.map((c) => code`${c.otherEntity.typeSymbol},`)}];\n }`,\n code`export function is${pf.fieldType}(maybeEntity: unknown): maybeEntity is ${pf.fieldType} {\n return ${isEntity}(maybeEntity) && get${pf.fieldType}Constructors().some((type) => maybeEntity instanceof type);\n }`,\n ]);\n}\n\nfunction generateDefaultValues(config: Config, meta: EntityDbMetadata, configName: string): Code[] {\n // Skip sync defaults b/c we'll just stomp the getter; leave async in case they're RQFs\n // where the row must fundamentally be inserted with a dummy value before the real value is calced.\n function notSync(field: PrimitiveField | EnumField): boolean {\n return \"derived\" in field && field.derived !== \"sync\";\n }\n\n const primitives = meta.primitives\n .filter((field) => fieldHasDefaultValue(field))\n .filter(notSync)\n .map(({ fieldName, columnDefault }) => {\n return code`${configName}.setDefault(\"${fieldName}\", ${columnDefault});`;\n });\n const pgEnums = meta.pgEnums\n .filter((field) => !!field.columnDefault)\n .map(({ fieldName, columnDefault }) => {\n return code`${configName}.setDefault(\"${fieldName}\", ${columnDefault});`;\n });\n const enums = meta.enums\n .filter((field) => !!field.columnDefault && !field.isArray)\n .filter(notSync)\n .map(({ fieldName, columnDefault, enumRows, enumType, columnName }) => {\n const defaultRow =\n enumRows.find((r) => r.id === Number(columnDefault)) ||\n fail(`Invalid default value ${columnDefault} for ${meta.tableName}.${columnName}`);\n return code`${configName}.setDefault(\"${fieldName}\", ${enumType}.${pascalCase(defaultRow.code)});`;\n });\n return [...primitives, ...enums, ...pgEnums];\n}\n\nfunction generateDefaultValidationRules(db: DbMetadata, meta: EntityDbMetadata, configName: string): Code[] {\n // Add required rules for all not-null columns\n const fields = [...meta.primitives, ...meta.enums, ...meta.manyToOnes, ...meta.polymorphics];\n const rules = fields\n .filter((p) => p.notNull)\n .map((p) => {\n const { fieldName } = p;\n const isReactive = \"derived\" in p && p.derived === \"async\";\n if (\"lazy\" in p && p.lazy) {\n // Lazy columns use a rule that won't force-load (or falsely fail) an unloaded value on a persisted entity\n return code`${configName}.addRule(${newRequiredLazyFieldRule}(\"${fieldName}\"));`;\n } else if (isReactive) {\n return code`${configName}.addRule(\"${fieldName}\", ${newRequiredRule}(\"${fieldName}\"));`;\n } else {\n return code`${configName}.addRule(${newRequiredRule}(\"${fieldName}\"));`;\n }\n });\n // Add STI discriminator cannot change\n if (meta.stiDiscriminatorField) {\n const field = meta.enums.find((e) => e.fieldName === meta.stiDiscriminatorField) ?? fail(\"STI field not found\");\n rules.push(code`${configName}.addRule(${cannotBeUpdated}(\"${field.fieldName}\"));`);\n }\n // Add STI type must match\n const stiEntities = getStiEntities(db.entities);\n if (stiEntities.size > 0) {\n for (const m2o of meta.manyToOnes) {\n // The `m2o.otherEntity` may already be pointing at the subtype, but stiEntities has subtypes in it as well...\n const target = stiEntities.get(m2o.otherEntity.name);\n if (target && m2o.otherEntity.name !== target.base.name) {\n rules.push(code`${configName}.addRule(\"${m2o.fieldName}\", ${mustBeSubType}(\"${m2o.fieldName}\"));`);\n }\n }\n }\n // Add subtype specialization must match\n if (meta.baseType) {\n meta.manyToOnes\n .filter((m2o) =>\n meta.baseType?.manyToOnes?.find(\n (o) => o.fieldName === m2o.fieldName && o.otherEntity.name !== m2o.otherEntity.name,\n ),\n )\n .forEach((m2o) => {\n rules.push(code`${configName}.addRule(\"${m2o.fieldName}\", ${mustBeSubType}(\"${m2o.fieldName}\"));`);\n });\n }\n return rules;\n}\n\n// Make our opts type\nfunction generateOptsFields(meta: EntityDbMetadata): Code[] {\n const primitives = meta.primitives.map((field) => {\n const { fieldName, fieldType, notNull, derived } = field;\n if (derived) return code``;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${fieldType}${maybeUnionNull(notNull)};`;\n });\n const enums = meta.enums.map((field) => {\n const { fieldName, enumType, notNull, isArray, derived } = field;\n if (meta.stiDiscriminatorField === fieldName || derived) {\n // Don't include the discriminator as an opt b/c we'll infer it from the instance type\n return code``;\n } else if (isArray) {\n // Arrays are always optional and we'll default to `[]`\n return code`${fieldName}?: ${enumType}[];`;\n } else {\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${enumType}${maybeUnionNull(notNull)};`;\n }\n });\n const pgEnums = meta.pgEnums.map((field) => {\n const { fieldName, enumType, notNull } = field;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${enumType}${maybeUnionNull(notNull)};`;\n });\n const m2o = meta.manyToOnes\n .filter(({ derived }) => !derived) // Skip ReactiveReferences (derived m2o)\n // If a `group: { subType: SmallPublisherGroup }` is specializing this relation, that's\n // fine for most things, but not the `SmallPublisherOpts`, b/c it will break the contravariance\n // of `Publisher.setOpts` and `SmallPublisher.setOpts`\n .filter(({ fieldName }) => !meta.baseType?.manyToOnes.find((o) => o.fieldName === fieldName))\n .map((field) => {\n const { fieldName, otherEntity, notNull } = field;\n const maybeNull = maybeUnionNull(notNull);\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${otherEntity.type} | ${otherEntity.idType} ${maybeNull};`;\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type} | null;`;\n });\n const o2m = meta.oneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type}[];`;\n });\n const m2m = meta.manyToManys\n .filter(({ derived }) => !derived) // Skip ReactiveManyToManys\n .map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type}[];`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${enumType}[];`;\n });\n const polys = meta.polymorphics.map((field) => {\n const { fieldName, notNull, fieldType } = field;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${fieldType};`;\n });\n return [...primitives, ...enums, ...pgEnums, ...m2o, ...polys, ...o2o, ...o2m, ...m2m, ...m2mEnum];\n}\n\n// Make our fields type\nfunction generateFieldsType(meta: EntityDbMetadata, idType: \"string\" | \"number\"): Code[] {\n const id = code`id: { kind: \"primitive\"; type: ${idType}; unique: ${true}; nullable: never };`;\n const primitives = meta.primitives.map((field) => {\n const { fieldName, fieldType, notNull, unique, derived } = field;\n return code`${fieldName}: { kind: \"primitive\"; type: ${fieldType}; unique: ${unique}; nullable: ${undefinedOrNever(\n notNull,\n )}, derived: ${derived !== false} };`;\n });\n const enums = meta.enums.map((field) => {\n const { fieldName, enumType, notNull, isArray } = field;\n if (isArray) {\n // Arrays are always optional and we'll default to `[]`\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}[]; nullable: never };`;\n } else {\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}; nullable: ${undefinedOrNever(notNull)} };`;\n }\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType, notNull }) => {\n const nullable = undefinedOrNever(notNull);\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}; nullable: ${nullable}; native: true };`;\n });\n const m2o = meta.manyToOnes.map(({ fieldName, otherEntity, notNull, derived }) => {\n return code`${fieldName}: { kind: \"m2o\"; type: ${otherEntity.type}; nullable: ${undefinedOrNever(\n notNull,\n )}, derived: ${derived !== false} };`;\n });\n const polys = meta.polymorphics.map(({ fieldName, notNull, fieldType }) => {\n return code`${fieldName}: { kind: \"poly\"; type: ${fieldType}; nullable: ${undefinedOrNever(notNull)} };`;\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"m2m\"; type: ${otherEntity.type} };`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}: { kind: \"m2mEnum\"; type: ${enumType} };`;\n });\n const o2m = meta.oneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"o2m\"; type: ${otherEntity.type} };`;\n });\n const lo2m = meta.largeOneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"o2m\"; type: ${otherEntity.type} };`;\n });\n return [id, ...primitives, ...enums, ...pgEnums, ...m2o, ...polys, ...m2m, ...m2mEnum, ...o2m, ...lo2m];\n}\n\n// We know the OptIds types are only used in partials, so we make everything optional.\n// This especially needs to be the case b/c both `book: ...` and `bookId: ...` will be\n// in the partial type and of course the caller will only be setting one.\nfunction generateOptIdsFields(meta: EntityDbMetadata): Code[] {\n const m2o = meta.manyToOnes\n .filter(({ derived }) => !derived) // Skip ReactiveReferences\n .map(({ fieldName, otherEntity }) => {\n return code`${fieldName}Id?: ${otherEntity.idType} | null;`;\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}Id?: ${otherEntity.idType} | null;`;\n });\n const o2m = meta.oneToManys.map(({ singularName, otherEntity }) => {\n return code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;\n });\n const m2m = meta.manyToManys\n .filter(({ derived }) => !derived) // Skip ReactiveManyToManys\n .map(({ singularName, otherEntity }) => {\n return code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;\n });\n const polys = meta.polymorphics.map(({ fieldName, fieldType }) => {\n return code`${fieldName}Id?: ${IdOf}<${fieldType}> | null;`;\n });\n return [...m2o, ...polys, ...o2o, ...o2m, ...m2m];\n}\n\nfunction generateFilterFields(metasByName: Record<string, EntityDbMetadata>, meta: EntityDbMetadata): Code[] {\n // Always allow filtering on null to do \"child.id is null\" for detecting \"has no children\"\n const maybeId = meta.baseClassName ? [] : [code`id?: ${ValueFilter}<${meta.entity.idName}, never> | null;`];\n const primitives = meta.primitives.map(({ fieldName, fieldType, notNull }) => {\n if (fieldType === \"boolean\") {\n return code`${fieldName}?: ${BooleanFilter}<${nullOrNever(notNull)}>;`;\n } else {\n return code`${fieldName}?: ${ValueFilter}<${fieldType}, ${nullOrNever(notNull)}>;`;\n }\n });\n const enums = meta.enums.map(({ fieldName, enumType, notNull, isArray }) => {\n const maybeArray = isArray ? \"[]\" : \"\";\n return code`${fieldName}?: ${ValueFilter}<${enumType}${maybeArray}, ${nullOrNever(notNull)}>;`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType, notNull }) => {\n return code`${fieldName}?: ${ValueFilter}<${enumType}, ${nullOrNever(notNull)}>;`;\n });\n const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${\n otherEntity.type\n }>, ${nullOrNever(notNull)}>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${FilterOf}<${\n st.entity.type\n }>, ${nullOrNever(notNull)}>;`;\n }),\n ];\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${FilterOf}<${\n st.entity.type\n }>, ${nullOrNever(otherColumnNotNull)}>;`;\n }),\n ];\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n // Enum m2m filters are membership filters, e.g. `{ logoColors: Color.Red }` / `{ logoColors: [Red, Green] }`.\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueFilter}<${enumType}, null | undefined>;`;\n });\n const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {\n return [\n code`${fieldName}?: ${EntityFilter}<${fieldType}, ${IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`,\n ...components.map((comp) => {\n const { type } = comp.otherEntity;\n return code`${fieldName}${type}?: ${EntityFilter}<${type}, ${IdOf}<${type}>, ${FilterOf}<${type}>, null>;`;\n }),\n ];\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o, ...o2o, ...o2m, ...m2m, ...m2mEnum, ...polys];\n}\n\nfunction generateGraphQLFilterFields(metasByName: Record<string, EntityDbMetadata>, meta: EntityDbMetadata): Code[] {\n const maybeId = meta.baseClassName ? [] : [code`id?: ${ValueGraphQLFilter}<${meta.entity.idName}>;`];\n const primitives = meta.primitives.map(({ fieldName, fieldType }) => {\n if (fieldType === \"boolean\") {\n return code`${fieldName}?: ${BooleanGraphQLFilter};`;\n } else {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${fieldType}>;`;\n }\n });\n const enums = meta.enums.map(({ fieldName, enumType, isArray }) => {\n const maybeArray = isArray ? \"[]\" : \"\";\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}${maybeArray}>;`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}>;`;\n });\n const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {\n const otherMeta = metasByName[otherEntity.name];\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${\n otherEntity.type\n }>, ${nullOrNever(notNull)}>;`,\n code`${fieldName}Id?: ${ValueGraphQLFilter}<${otherEntity.idType}>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${GraphQLFilterOf}<${\n st.entity.type\n }>, ${nullOrNever(notNull)}>;`;\n }),\n ];\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${GraphQLFilterOf}<${\n st.entity.type\n }>, ${nullOrNever(otherColumnNotNull)}>;`;\n }),\n ];\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}>;`;\n });\n const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${fieldType}, ${IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`,\n code`${fieldName}Id?: ${ValueGraphQLFilter}<${IdOf}<${fieldType}>>;`,\n ...components.map((comp) => {\n const { type } = comp.otherEntity;\n return code`${fieldName}${type}?: ${EntityGraphQLFilter}<${type}, ${IdOf}<${type}>, ${FilterOf}<${type}>, null>;`;\n }),\n ];\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o, ...o2o, ...o2m, ...m2m, ...m2mEnum, ...polys];\n}\n\nfunction generateOrderFields(meta: EntityDbMetadata): Code[] {\n const maybeId = meta.baseClassName ? [] : [code`id?: ${OrderBy};`];\n const primitives = meta.primitives.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const enums = meta.enums.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const m2o = meta.manyToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.orderType};`;\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o];\n}\n\nfunction generateFactoryExtrasType(meta: EntityDbMetadata): Code[] {\n function withName(fieldName: string): string {\n return `with${fieldName[0].toUpperCase() + fieldName.substring(1)}`;\n }\n const primitives = meta.primitives\n .filter((f) => f.derived === \"async\")\n .map((field) => {\n const { fieldName, fieldType, notNull } = field;\n return code`${withName(fieldName)}?: ${fieldType}${maybeUnionNull(notNull)};`;\n });\n const enums = meta.enums\n .filter((f) => f.derived === \"async\")\n .map((field) => {\n const { fieldName, enumType, notNull, isArray } = field;\n if (isArray) {\n return code`${withName(fieldName)}?: ${enumType}[];`;\n } else {\n return code`${withName(fieldName)}?: ${enumType}${maybeUnionNull(notNull)};`;\n }\n });\n return [...primitives, ...enums];\n}\n\nfunction createPrimitives(meta: EntityDbMetadata, entity: Entity, fieldDocs: Record<string, string>) {\n const primitives = meta.primitives.map((p) => {\n const { fieldName, fieldType, notNull } = p;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n\n // `lazy` columns are emitted as `LazyField` relations by `createLazyFields`, not as getters/setters\n if (p.lazy) return code``;\n\n let getter: Code;\n if (p.derived === \"async\") {\n getter = code`\n abstract readonly ${fieldName}: ${ReactiveField}<${entity.name}, ${p.fieldType}${maybeOptional}>;\n `;\n } else if (p.derived === \"sync\") {\n getter = code`\n abstract get ${fieldName}(): ${fieldType}${maybeOptional};\n `;\n } else if (p.zodSchema) {\n getter = code`\n get ${fieldName}(): ${Zod}.output<typeof ${p.zodSchema}>${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n } else {\n getter = code`\n get ${fieldName}(): ${fieldType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n }\n\n let setter: Code | string;\n // ...technically we should be checking a list of JS keywords\n const paramName = keywords.includes(fieldName) ? \"value\" : fieldName;\n if (p.protected) {\n // TODO Allow making the getter to be protected as well. And so probably remove it\n // from the Opts as well. Wonder how that works for required protected fields?\n //\n // We have to use a method of `set${fieldName}` because TS enforces getters/setters to have\n // same access level and currently we're leaving the getter as public.\n setter = code`\n protected set${pascalCase(fieldName)}(${paramName}: ${fieldType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${paramName});\n }\n `;\n } else if (p.derived) {\n setter = \"\";\n } else if (p.superstruct) {\n // We use `value` as the param name to not potentially conflict with the\n // name of the imported superstruct const that is passed to assert.\n setter = code`\n set ${fieldName}(value: ${fieldType}${maybeOptional}) {\n if (value) {\n ${SSAssert}(value, ${p.superstruct});\n }\n ${setField}(this, \"${fieldName}\", value);\n }\n `;\n } else if (p.zodSchema) {\n // We use `value` as the param name to not potentially conflict with the\n // name of the imported zod schema that is passed to parse.\n setter = code`\n set ${fieldName}(value: ${Zod}.input<typeof ${p.zodSchema}>${maybeOptional}) {\n if (value) {\n ${setField}(this, \"${fieldName}\", ${p.zodSchema}.parse(value));\n } else {\n ${setField}(this, \"${fieldName}\", value);\n }\n }\n `;\n } else {\n setter = code`\n set ${fieldName}(${paramName}: ${fieldType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${paramName});\n }\n `;\n }\n\n return code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter} ${setter}`;\n });\n return primitives;\n}\n\nfunction createRegularEnums(meta: EntityDbMetadata, entity: Entity, fieldDocs: Record<string, string>) {\n return meta.enums\n .filter((e) => !e.isArray)\n .flatMap((e) => {\n const { fieldName, enumType, enumDetailType, enumDetailsType, notNull, enumRows, derived } = e;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n const getByCode = code`${enumDetailType}.getByCode(this.${fieldName})`;\n\n let getter: Code;\n if (derived === \"async\") {\n getter = code`\n abstract readonly ${fieldName}: ${ReactiveField}<${entity.name}, ${enumType}${maybeOptional}>;\n `;\n } else if (derived === \"sync\") {\n getter = code`\n abstract get ${fieldName}(): ${enumType}${maybeOptional};\n `;\n } else {\n getter = code`\n get ${fieldName}(): ${enumType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n\n get ${fieldName}Details(): ${enumDetailsType}${maybeOptional} {\n return ${notNull ? getByCode : code`this.${fieldName} ? ${getByCode} : undefined`};\n }\n `;\n }\n\n let setter: Code;\n if (derived) {\n setter = code``;\n } else {\n setter = code`\n set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n }\n\n const codes = new Set(enumRows.map((r) => r.code));\n const shouldPrefixAccessors = meta.enums\n .filter((other) => other !== e)\n .some((other) => other.enumRows.some((r) => codes.has(r.code)));\n\n const accessors = enumRows.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row.code)}(): boolean {\n return ${getField}(this, \"${fieldName}\") === ${enumType}.${pascalCase(row.code)};\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createArrayEnums(meta: EntityDbMetadata, fieldDocs: Record<string, string>) {\n return meta.enums\n .filter((e) => e.isArray)\n .flatMap((e) => {\n const { fieldName, enumType, enumDetailType, enumDetailsType, enumRows } = e;\n const getter = code`\n get ${fieldName}(): ${enumType}[] {\n return ${getField}(this, \"${fieldName}\") || [];\n }\n\n get ${fieldName}Details(): ${enumDetailsType}[] {\n return this.${fieldName}.map(code => ${enumDetailType}.getByCode(code));\n }\n `;\n const setter = code`\n set ${fieldName}(${fieldName}: ${enumType}[]) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n\n const codes = new Set(enumRows.map((r) => r.code));\n const shouldPrefixAccessors = meta.enums\n .filter((other) => other !== e)\n .some((other) => other.enumRows.some((r) => codes.has(r.code)));\n\n const accessors = enumRows.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row.code)}(): boolean {\n return this.${fieldName}.includes(${enumType}.${pascalCase(row.code)});\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createPgEnums(meta: EntityDbMetadata, fieldDocs: Record<string, string>) {\n return meta.pgEnums.flatMap((e) => {\n const { fieldName, enumType, enumValues, notNull } = e;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n\n const getter = code`\n get ${fieldName}(): ${enumType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n const setter = code`\n set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n\n const codes = new Set(enumValues);\n const shouldPrefixAccessors = meta.pgEnums\n .filter((other) => other !== e)\n .some((other) => other.enumValues.some((r) => codes.has(r)));\n\n const accessors = enumValues.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row)}(): boolean {\n return this.${fieldName} === ${enumType}.${pascalCase(row)};\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createRelations(config: Config, meta: EntityDbMetadata, entity: Entity): Relation[] {\n // Add ManyToOne entities\n const m2o: Relation[] = meta.manyToOnes.map((m2o) => {\n const { fieldName, otherEntity, otherFieldName, notNull } = m2o;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n if (m2o.derived === \"async\") {\n const line = code`abstract readonly ${fieldName}: ${ReactiveReference}<${entity.name}, ${otherEntity.type}, ${maybeOptional}>;`;\n return { kind: \"abstract\", fieldName, line } as const;\n }\n const decl = code`${ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`;\n const init = code`${hasOne}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const m2oBase: Relation[] =\n meta.baseType?.manyToOnes\n // Skip m2os that are already specialized to a different otherEntity, i.e. `SmallPublisher.group: SmallPublisherGroup`\n .filter((m2o) => !meta.manyToOnes.find((o) => o.fieldName === m2o.fieldName))\n // Don't specialize hasReactiveReferences b/c they're fields, not getters\n .filter((m2o) => m2o.derived !== \"async\")\n .map((m2o) => {\n const { fieldName, otherEntity, notNull } = m2o;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n const decl = code`${ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add any recursive ManyToOne entities\n const m2oRecursive: Relation[] = meta.manyToOnes\n .filter((m2o) => m2o.otherEntity.name === meta.name)\n // Allow disabling recursive relations\n .filter(\n (m2o) =>\n // STI subtypes don't have their own key in config.entities (stripped by stripStiPlaceholders),\n // so look up the base class name to find skipRecursiveRelations config\n !(\n config.entities[meta.inheritanceType == \"sti\" && meta.baseClassName ? meta.baseClassName : meta.name]\n ?.relations?.[m2o.fieldName]?.skipRecursiveRelations === true\n ),\n )\n // Skip ReactiveReferences because they don't have an `other` side for us to use\n .filter((m2o) => !m2o.derived)\n .flatMap((m2o) => {\n const { fieldName: m2oName, otherFieldName, otherEntity } = m2o;\n const parentsField = `${plural(m2oName)}Recursive`;\n const maybeOneToOne = meta.oneToOnes.find((o2o) => o2o.fieldName === otherFieldName);\n const childrenField = maybeOneToOne ? `${plural(otherFieldName)}Recursive` : `${otherFieldName}Recursive`;\n return [\n {\n kind: \"concrete\",\n fieldName: parentsField,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveParents}(\"${m2oName}\", \"${childrenField}\")`,\n },\n {\n kind: \"concrete\",\n fieldName: childrenField,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveChildren}(\"${otherFieldName}\", \"${parentsField}\")`,\n },\n ];\n });\n\n // Add any recursive ManyToMany entities (self-referential m2m)\n const m2mRecursive: Relation[] = meta.manyToManys\n .filter((m2m) => m2m.otherEntity.name === meta.name)\n .filter((m2m) => !m2m.derived)\n // STI subtypes don't have their own key in config.entities (stripped by stripStiPlaceholders),\n // so look up the base class name to find skipRecursiveRelations config\n .filter(\n (m2m) =>\n !(\n config.entities[meta.inheritanceType == \"sti\" && meta.baseClassName ? meta.baseClassName : meta.name]\n ?.relations?.[m2m.fieldName]?.skipRecursiveRelations === true\n ),\n )\n .map((m2m) => {\n const { fieldName, otherFieldName, otherEntity } = m2m;\n return {\n kind: \"concrete\",\n fieldName: `${fieldName}Recursive`,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveM2m}(\"${fieldName}\", \"${otherFieldName}Recursive\")`,\n };\n });\n\n // Add OneToMany\n const o2m: Relation[] = meta.oneToManys.map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasMany}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const o2mBase: Relation[] =\n meta.baseType?.oneToManys\n // Skip o2ms that are already specialized to a different otherEntity, i.e. `SmallPublisherGroup.publishers: SmallPublisher`\n .filter((o2m) => !meta.oneToManys.find((o) => o.fieldName === o2m.fieldName))\n .map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add large OneToMany\n const lo2m: Relation[] = meta.largeOneToManys.map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${LargeCollection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasLargeMany}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add OneToOne\n const o2o: Relation[] = meta.oneToOnes.map((o2o) => {\n const { fieldName, otherEntity } = o2o;\n const decl = code`${OneToOneReference}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasOneToOne}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const o2oBase: Relation[] =\n meta.baseType?.oneToOnes.map((o2o) => {\n const { fieldName, otherEntity } = o2o;\n const decl = code`${OneToOneReference}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add ManyToMany\n const m2m: Relation[] = meta.manyToManys.map((m2m) => {\n const { fieldName, otherEntity } = m2m;\n const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;\n if (m2m.derived === \"async\") {\n const line = code`abstract readonly ${fieldName}: ${ReactiveManyToMany}<${entity.name}, ${otherEntity.type}>;`;\n return { kind: \"abstract\", fieldName, line, comment } as const;\n } else if (m2m.derived === \"otherSide\") {\n const decl = code`${ReactiveManyToManyOtherSide}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasReactiveManyToManyOtherSide}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n } else if (!m2m.derived) {\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasManyToMany}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n } else {\n assertNever(m2m.derived);\n }\n });\n // Specialize\n const m2mBase: Relation[] =\n meta.baseType?.manyToManys\n // Don't specialize hasReactiveManyToMany or hasReactiveManyToManyOtherSide b/c they're fields, not getters\n .filter((m2m) => !m2m.derived)\n .map((m2m) => {\n const { fieldName, otherEntity } = m2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add enum-backed ManyToMany (i.e. `Publisher.logoColors`)\n const m2mEnum: Relation[] = meta.manyToManyEnums.map((m2m) => {\n const { fieldName, enumType } = m2m;\n const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;\n const decl = code`${EnumCollection}<${entity.type}, ${enumType}>`;\n const init = code`${hasEnumCollection}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n });\n const m2mEnumBase: Relation[] =\n meta.baseType?.manyToManyEnums.map((m2m) => {\n const { fieldName, enumType } = m2m;\n const decl = code`${EnumCollection}<${entity.type}, ${enumType}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add large ManyToMany\n const lm2m: Relation[] = meta.largeManyToManys.map((m2m) => {\n const { joinTableName, fieldName, columnName, otherEntity, otherFieldName, otherColumnName } = m2m;\n const decl = code`${LargeCollection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`\n ${hasLargeManyToMany}(\n \"${joinTableName}\",\n \"${columnName}\",\n \"${otherFieldName}\",\n \"${otherColumnName}\",\n ${m2m.hasJoinTableId},\n );\n `;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add Polymorphic\n const polymorphic: Relation[] = meta.polymorphics.map((p) => {\n const { fieldName, notNull, fieldType } = p;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n const decl = code`${PolymorphicReference}<${entity.type}, ${fieldType}, ${maybeOptional}>`;\n const init = code`${hasOnePolymorphic}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add `lazy` primitives, which are exposed as `LazyField`s instead of getters/setters\n const lazy: Relation[] = meta.primitives\n .filter((p) => p.lazy)\n .map((p) => {\n const { fieldName, fieldType, notNull } = p;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n const decl = code`${LazyField}<${entity.type}, ${fieldType}${maybeOptional}>`;\n const init = code`${hasLazyField}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n return [\n o2m,\n o2mBase,\n lo2m,\n m2o,\n m2oBase,\n m2oRecursive,\n m2mRecursive,\n o2o,\n o2oBase,\n m2m,\n m2mBase,\n m2mEnum,\n m2mEnumBase,\n lm2m,\n polymorphic,\n lazy,\n ].flat();\n}\n\n/** Makes the field required if there is a `NOT NULL` and no db-or-config default. */\nfunction maybeOptionalOrDefault(\n field: PrimitiveField | EnumField | PgEnumField | ManyToOneField | PolymorphicField,\n): string {\n const hasDefault =\n (field.kind !== \"m2o\" && field.kind !== \"poly\" && fieldHasDefaultValue(field)) || field.hasConfigDefault;\n return !field.notNull || hasDefault ? \"?\" : \"\";\n}\n\nfunction maybeUnionNull(notNull: boolean): string {\n return notNull ? \"\" : \" | null\";\n}\n\nfunction maybeUndefined(notNull: boolean): string {\n return notNull ? \"\" : \" | undefined\";\n}\n\nfunction undefinedOrNever(notNull: boolean): string {\n return notNull ? \"never\" : \"undefined\";\n}\n\nfunction nullOrNever(notNull: boolean): string {\n return notNull ? \"never\" : \"null\";\n}\n\n/** Prefixes the comment with a newline, so it gets its own line. */\nfunction maybeComment(comment: string | undefined): string {\n return comment ? ` ${comment}\\n` : \"\";\n}\n\n/**\n * Renders a field's `.md` doc (plus its `@generated` tag) as a bare JSDoc block, or `\"\"` if undocumented.\n *\n * Reuses the same {@link buildJSDocBlock} formatter the `.md` sync uses for hand-written `Entity.ts`\n * members. Used directly before a getter template (which supplies its own leading newline), so the\n * JSDoc lands immediately above the getter with no intervening blank line.\n */\nfunction fieldDocBlock(fieldDocs: Record<string, string>, fieldName: string, entityName: string): string {\n const doc = fieldDocs[fieldName];\n return doc ? buildJSDocBlock(`${doc}\\n${generatedTag(entityName)}`, 0) : \"\";\n}\n\n/** Like {@link fieldDocBlock} but wrapped in newlines, i.e. for inline `readonly x = ...` relation decls. */\nfunction relationDocBlock(fieldDocs: Record<string, string>, fieldName: string, entityName: string): string {\n const block = fieldDocBlock(fieldDocs, fieldName, entityName);\n return block ? `\\n${block}\\n` : \"\";\n}\n\nexport function getIdType(config: Config) {\n switch (config.idType) {\n case \"untagged-string\":\n case \"tagged-string\":\n case undefined:\n return \"string\";\n case \"number\":\n return \"number\";\n default:\n return assertNever(config.idType);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"generateEntityCodegenFile.cjs","names":["keywords","uncapitalize","camelCase","imp","toIdOf","BaseEntity","EntityManager","joinCode","FieldsOf","RelationsOf","Flavor","Scope","ConfigApi","newScopeFn","ProjectEntity","EntityMetadata","failNoIdYet","TaggedId","getField","tsdocComments","setOpts","PartialOrNull","OptsOf","DeepPartialOrNull","updatePartial","Changes","newChangesProxy","Lens","loadLens","LoadHint","Loaded","isLoaded","ToJsonHint","JsonPayload","toJSON","MaybeAbstractEntityConstructor","isEntity","fail","pascalCase","newRequiredLazyFieldRule","newRequiredRule","cannotBeUpdated","getStiEntities","mustBeSubType","IdOf","ValueFilter","BooleanFilter","EntityFilter","FilterOf","ValueGraphQLFilter","BooleanGraphQLFilter","EntityGraphQLFilter","GraphQLFilterOf","OrderBy","ReactiveField","Zod","setField","SSAssert","code","ReactiveReference","ManyToOneReference","hasOne","ReadOnlyCollection","hasRecursiveParents","hasRecursiveChildren","hasRecursiveM2m","Collection","hasMany","LargeCollection","hasLargeMany","OneToOneReference","hasOneToOne","ReactiveManyToMany","ReactiveManyToManyOtherSide","hasReactiveManyToManyOtherSide","hasManyToMany","EnumCollection","hasEnumCollection","hasLargeManyToMany","PolymorphicReference","hasOnePolymorphic","LazyField","hasLazyField","nowUTC","buildJSDocBlock","generatedTag","assertNever"],"sources":["../src/generateEntityCodegenFile.ts"],"sourcesContent":["import { camelCase, pascalCase } from \"change-case\";\nimport pluralize from \"pluralize\";\nimport { type Code, code, imp, joinCode } from \"ts-poet\";\n\nimport { type Config } from \"./config.ts\";\nimport { type ParsedDoc, buildJSDocBlock, generatedTag } from \"./docs/index.ts\";\nimport {\n type DbMetadata,\n type Entity,\n type EntityDbMetadata,\n type EnumField,\n type ManyToOneField,\n type PgEnumField,\n type PolymorphicField,\n type PrimitiveField,\n type PrimitiveTypescriptType,\n} from \"./EntityDbMetadata.ts\";\nimport { type ScopeMember } from \"./findEntityScopes.ts\";\nimport { getStiEntities } from \"./inheritance.ts\";\nimport { keywords } from \"./keywords.ts\";\nimport {\n BaseEntity,\n BooleanFilter,\n BooleanGraphQLFilter,\n Changes,\n Collection,\n ConfigApi,\n DeepPartialOrNull,\n EntityFilter,\n EntityGraphQLFilter,\n EntityManager,\n EntityMetadata,\n EnumCollection,\n FieldsOf,\n FilterOf,\n Flavor,\n GraphQLFilterOf,\n IdOf,\n JsonPayload,\n LargeCollection,\n LazyField,\n Lens,\n LoadHint,\n Loaded,\n ManyToOneReference,\n MaybeAbstractEntityConstructor,\n OneToOneReference,\n OptsOf,\n OrderBy,\n PartialOrNull,\n PolymorphicReference,\n ProjectEntity,\n ReactiveField,\n ReactiveManyToMany,\n ReactiveManyToManyOtherSide,\n ReactiveReference,\n ReadOnlyCollection,\n RelationsOf,\n SSAssert,\n Scope,\n TaggedId,\n ToJsonHint,\n ValueFilter,\n ValueGraphQLFilter,\n Zod,\n cannotBeUpdated,\n failNoIdYet,\n getField,\n hasEnumCollection,\n hasLargeMany,\n hasLargeManyToMany,\n hasLazyField,\n hasMany,\n hasManyToMany,\n hasOne,\n hasOnePolymorphic,\n hasOneToOne,\n hasReactiveManyToManyOtherSide,\n hasRecursiveChildren,\n hasRecursiveM2m,\n hasRecursiveParents,\n isEntity,\n isLoaded,\n loadLens,\n mustBeSubType,\n newChangesProxy,\n newRequiredLazyFieldRule,\n newRequiredRule,\n newScopeFn,\n nowUTC,\n setField,\n setOpts,\n toIdOf,\n toJSON,\n updatePartial,\n} from \"./symbols.ts\";\nimport { tsdocComments } from \"./tsdoc.ts\";\nimport { assertNever, fail, uncapitalize } from \"./utils.ts\";\n\nconst { plural } = pluralize;\n\nexport interface ColumnMetaData {\n fieldType: PrimitiveTypescriptType;\n}\n\n// A local type just for tracking abstract vs. concrete relations\ntype Relation =\n // I.e. `abstract ReactiveReference` that the user must implement\n | { kind: \"abstract\"; fieldName: string; line: Code; comment?: string }\n // I.e. a `get author(): ManyToOne<...>`\n | { kind: \"concrete\"; fieldName: string; decl: Code; init: Code; comment?: string }\n // I.e. a `get author(): { super.author as ... }`\n | { kind: \"super\"; fieldName: string; decl: Code; comment?: string };\n\n/** Creates the base class with the boilerplate annotations. */\nexport function generateEntityCodegenFile(\n config: Config,\n dbMeta: DbMetadata,\n meta: EntityDbMetadata,\n scopeMembers: ScopeMember[] = [],\n docs?: ParsedDoc,\n): Code {\n const { entitiesByName: metasByName } = dbMeta;\n const { entity, tagName } = meta;\n const entityName = entity.name;\n\n // Per-field `.md` docs to inject as JSDocs on the codegen'd getters/relations (empty if docs are off)\n const fieldDocs = docs?.fields ?? {};\n\n // Avoid using `do` as a variable name b/c it's a reserved keyword\n const varName = keywords.includes(tagName) ? uncapitalize(entityName) : tagName;\n\n const primitives = createPrimitives(meta, entity, fieldDocs); // Add the primitives\n primitives.push(...createRegularEnums(meta, entity, fieldDocs)); // Add ManyToOne enums\n primitives.push(...createArrayEnums(meta, fieldDocs)); // Add integer[] enums\n primitives.push(...createPgEnums(meta, fieldDocs)); // Add native enums\n const relations = createRelations(config, meta, entity);\n\n const configName = `${camelCase(entityName)}Config`;\n const scopeFnName = `${camelCase(entityName)}Scope`;\n const metadata = imp(`${camelCase(entityName)}Meta@./entities.ts`);\n\n const contextType = config.contextType ? imp(`t:${config.contextType}`) : \"{}\";\n const factoryMethod = imp(`new${entity.name}@./entities.ts`);\n\n // If we're not tagged-strings, detag on the way out of id\n const idMaybeCode =\n config.idType === \"tagged-string\"\n ? code`return this.idTaggedMaybe;`\n : code`return ${toIdOf}(${metadata}, this.idTaggedMaybe);`;\n const idType = getIdType(config);\n\n const maybeSoftDeleteMethods = meta.deletedAt\n ? code`\n get isSoftDeletedEntity(): boolean {\n return this.${meta.deletedAt.fieldName} !== undefined;\n }\n\n softDelete(): void {\n if (this.isSoftDeletedEntity) return;\n this.${meta.deletedAt.fieldName} = ${nowUTCCall(config, meta.deletedAt)};\n }\n `\n : \"\";\n\n // Set up the codegen artifacts to extend from the base type if necessary\n const baseEntity = dbMeta.entities.find((e) => e.name === meta.baseClassName);\n const subEntities = dbMeta.entities.filter((e) => e.baseClassName === meta.name);\n const base = baseEntity?.entity.typeSymbol ?? code`${BaseEntity}<${EntityManager}, ${idType}>`;\n const maybeBaseFields = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.fieldsName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseOpts = baseEntity ? code`extends ${baseEntity.entity.optsType}` : \"\";\n const maybeBaseIdOpts = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.idsOptsName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseFilter = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.filterName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseGqlFilter = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.graphqlFilterName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseOrder = baseEntity ? code`extends ${baseEntity.entity.orderType}` : \"\";\n const maybePreventBaseTypeInstantiation = meta.abstract\n ? code`\n if (this.constructor === ${entity.type} && !(em as any).fakeInstance) {\n throw new Error(\\`${entity.type} must be instantiated via a subtype\\`);\n }`\n : \"\";\n\n let maybeOtherTypeChanges;\n if (subEntities.length > 0) {\n maybeOtherTypeChanges = joinCode(\n // Pass `K = keyof Publisher | keyof SmallPublisher | keyof LargePublisher` to `changes` so that\n // our subtypes can have `SmallPublisher.changes(): Changes<SmallPublisher>` be covariant, which\n // will break if it adds a key to `Changes.fields` that `Publisher.changes()` does not include.\n //\n // type A1 = { foo: 1 | 2 };\n // type A2 = { foo: 1 | 2 | 3 };\n // type A3 = A2 extends A1 ? 1 : 2;\n //\n // A3 will be 2 because the extra 3 breaks code written against A1.foo.\n //\n // So essentially we're pre-emptively our subtypes \"3\".\n [\n code`, `,\n ...[meta, ...subEntities].map(\n (e) => code`keyof (${FieldsOf}<${e.entity.type}> & ${RelationsOf}<${e.entity.type}>)`,\n ),\n ],\n { on: \"|\" },\n );\n } else {\n maybeOtherTypeChanges = \"\";\n }\n\n let maybeOtherLoaded;\n if (baseEntity) {\n maybeOtherLoaded = code`| ${baseEntity.entity.type}`;\n } else {\n maybeOtherLoaded = \"\";\n }\n\n return code`\n export type ${entity.idName} = ${Flavor}<${idType}, \"${baseEntity ? baseEntity.name : entityName}\">;\n\n ${generatePolymorphicTypes(meta)}\n\n export interface ${entity.fieldsName} ${maybeBaseFields} {\n ${generateFieldsType(meta, idType)}\n }\n\n export interface ${entity.optsName} ${maybeBaseOpts} {\n ${generateOptsFields(meta)}\n }\n\n export interface ${entity.idsOptsName} ${maybeBaseIdOpts} {\n ${generateOptIdsFields(meta)}\n }\n\n export interface ${entity.filterName} ${maybeBaseFilter} {\n ${generateFilterFields(metasByName, meta)}\n }\n\n export interface ${entity.graphqlFilterName} ${maybeBaseGqlFilter} {\n ${generateGraphQLFilterFields(metasByName, meta)}\n }\n\n export interface ${entity.orderName} ${maybeBaseOrder} {\n ${generateOrderFields(meta)}\n }\n\n export interface ${entity.factoryExtrasName} {\n ${generateFactoryExtrasType(meta)}\n }\n\n export interface ${entity.scopesName} {\n ${scopeMembers.map((member) => code`${member.name}: ${member.type};`)}\n }\n\n export type ${entity.scopeName} = ${Scope}<${entity.type}, ${entity.scopesName}>;\n\n export const ${configName} = new ${ConfigApi}<${entity.type}, ${contextType}>();\n\n export const ${scopeFnName} = ${newScopeFn}<${entity.type}, ${entity.scopeName}>(\"${entityName}\");\n\n ${generateDefaultValidationRules(dbMeta, meta, configName)}\n ${generateDefaultValues(config, meta, configName)};\n\n declare module \"joist-core\" {\n interface TypeMap {\n ${entityName}: {\n entityType: ${entityName};\n filterType: ${entity.filterName};\n gqlFilterType: ${entity.graphqlFilterName};\n orderType: ${entity.orderName};\n optsType: ${entity.optsName};\n fieldsType: ${entity.fieldsName};\n optIdsType: ${entity.idsOptsName};\n factoryExtrasType: ${entity.factoryExtrasName};\n factoryOptsType: Parameters<typeof ${factoryMethod}>[1];\n };\n }\n }\n\n export abstract class ${entityName}Codegen extends ${base} implements ${ProjectEntity} {\n static readonly tagName = \"${tagName}\";\n static readonly metadata: ${EntityMetadata}<${entity.type}>;\n\n declare readonly __type: {\n ${baseEntity ? `0: \"${baseEntity.name}\",` : \"\"}\n ${baseEntity ? 1 : 0}: \"${entityName}\", \n };\n\n ${relations\n .filter((r) => r.kind === \"abstract\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}${r.line}${maybeComment(r.comment)}`;\n })}\n ${relations\n .filter((r) => r.kind === \"concrete\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}readonly ${r.fieldName}: ${r.decl} = ${r.init};${maybeComment(r.comment)}`;\n })}\n ${relations\n .filter((r) => r.kind === \"super\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}declare readonly ${r.fieldName}: ${r.decl};${maybeComment(r.comment)}`;\n })}\n\n get id(): ${entity.idName} {\n return this.idMaybe || ${failNoIdYet}(\"${entityName}\");\n }\n\n get idMaybe(): ${entity.idName} | undefined {\n ${idMaybeCode}\n }\n\n get idTagged(): ${TaggedId} {\n return this.idTaggedMaybe || ${failNoIdYet}(\"${entityName}\");\n }\n\n get idTaggedMaybe(): ${TaggedId} | undefined {\n return ${getField}(this, \"id\");\n }\n\n ${primitives} \n\n ${tsdocComments.entity.setPartial}\n set(opts: Partial<${entity.optsName}>): void {\n ${setOpts}(this as any as ${entityName}, opts);\n }\n\n ${tsdocComments.entity.setPartial}\n setPartial(opts: ${PartialOrNull}<${entity.optsName}>): void {\n ${setOpts}(this as any as ${entityName}, opts as ${OptsOf}<${entityName}>, { partial: true });\n }\n\n ${tsdocComments.entity.setDeepPartial}\n setDeepPartial(opts: ${DeepPartialOrNull}<${entityName}>): Promise<void> {\n return ${updatePartial}(this as any as ${entityName}, opts);\n }\n\n ${tsdocComments.entity.changes}\n get changes(): ${Changes}<${entityName}${maybeOtherTypeChanges}> {\n return ${newChangesProxy}(this) as any;\n }\n\n ${maybeSoftDeleteMethods}\n\n ${tsdocComments.entity.load}\n load<U, V>(fn: (lens: ${Lens}<${entity.type}>) => ${Lens}<U, V>, opts: { sql?: boolean } = {}): Promise<V> {\n return ${loadLens}(this as any as ${entityName}, fn, opts);\n }\n\n ${tsdocComments.entity.populate}\n populate<const H extends ${LoadHint}<${entityName}>>(hint: H): Promise<${Loaded}<${entityName}, H>>;\n populate<const H extends ${LoadHint}<${entityName}>>(opts: { hint: H, forceReload?: boolean }): Promise<${Loaded}<${entityName}, H>>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(hint: H, fn: (${varName}: Loaded<${entityName}, H>) => V): Promise<V>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(opts: { hint: H, forceReload?: boolean }, fn: (${varName}: Loaded<${entityName}, H>) => V): Promise<V>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(hintOrOpts: any, fn?: (${varName}: Loaded<${entityName}, H>) => V): Promise<${Loaded}<${entityName}, H> | V> {\n return this.em.populate(this as any as ${entityName}, hintOrOpts, fn);\n }\n\n ${tsdocComments.entity.isLoaded}\n isLoaded<const H extends ${LoadHint}<${entityName}>>(hint: H): this is ${Loaded}<${entityName}${maybeOtherLoaded}, H> {\n return ${isLoaded}(this as any as ${entityName}, hint);\n }\n\n ${tsdocComments.entity.toJSON}\n toJSON(): object;\n toJSON<const H extends ${ToJsonHint}<${entityName}>>(hint: H): Promise<${JsonPayload}<${entityName}, H>>;\n toJSON(hint?: any): object {\n return !hint || typeof hint === \"string\" ? super.toJSON() : ${toJSON}(this, hint);\n }\n }\n `;\n}\n\nfunction fieldHasDefaultValue(field: PrimitiveField | EnumField | PgEnumField): boolean {\n let { columnDefault } = field;\n // If there's no default at all, return false\n if (columnDefault === null) {\n return false;\n }\n // Even though default is defined as a `number | boolean | string | null`, in reality pg-structure\n // only ever returns a `string | null`, so we handle that here\n columnDefault = columnDefault.toString();\n const fieldType = field.kind === \"primitive\" ? field.fieldType : \"number\";\n // Try to validate that we actually got a primitive value and not arbitrary SQL\n return (\n (fieldType === \"number\" && !isNaN(parseInt(columnDefault))) ||\n (fieldType === \"bigint\" && !isNaN(parseInt(columnDefault))) ||\n (fieldType === \"string\" && /^'.*'$/.test(columnDefault)) ||\n (fieldType === \"boolean\" && [\"true\", \"false\"].includes(columnDefault))\n );\n}\n\nfunction generatePolymorphicTypes(meta: EntityDbMetadata) {\n return meta.polymorphics.flatMap((pf) => [\n code`export type ${pf.fieldType} = ${pf.components.map((c) => code`| ${c.otherEntity.type}`)};`,\n code`export function get${pf.fieldType}Constructors(): ${MaybeAbstractEntityConstructor}<${pf.fieldType}>[] {\n return [${pf.components.map((c) => code`${c.otherEntity.typeSymbol},`)}];\n }`,\n code`export function is${pf.fieldType}(maybeEntity: unknown): maybeEntity is ${pf.fieldType} {\n return ${isEntity}(maybeEntity) && get${pf.fieldType}Constructors().some((type) => maybeEntity instanceof type);\n }`,\n ]);\n}\n\nfunction generateDefaultValues(config: Config, meta: EntityDbMetadata, configName: string): Code[] {\n // Skip sync defaults b/c we'll just stomp the getter; leave async in case they're RQFs\n // where the row must fundamentally be inserted with a dummy value before the real value is calced.\n function notSync(field: PrimitiveField | EnumField): boolean {\n return \"derived\" in field && field.derived !== \"sync\";\n }\n\n const primitives = meta.primitives\n .filter((field) => fieldHasDefaultValue(field))\n .filter(notSync)\n .map(({ fieldName, columnDefault }) => {\n return code`${configName}.setDefault(\"${fieldName}\", ${columnDefault});`;\n });\n const pgEnums = meta.pgEnums\n .filter((field) => !!field.columnDefault)\n .map(({ fieldName, columnDefault }) => {\n return code`${configName}.setDefault(\"${fieldName}\", ${columnDefault});`;\n });\n const enums = meta.enums\n .filter((field) => !!field.columnDefault && !field.isArray)\n .filter(notSync)\n .map(({ fieldName, columnDefault, enumRows, enumType, columnName }) => {\n const defaultRow =\n enumRows.find((r) => r.id === Number(columnDefault)) ||\n fail(`Invalid default value ${columnDefault} for ${meta.tableName}.${columnName}`);\n return code`${configName}.setDefault(\"${fieldName}\", ${enumType}.${pascalCase(defaultRow.code)});`;\n });\n return [...primitives, ...enums, ...pgEnums];\n}\n\nfunction generateDefaultValidationRules(db: DbMetadata, meta: EntityDbMetadata, configName: string): Code[] {\n // Add required rules for all not-null columns\n const fields = [...meta.primitives, ...meta.enums, ...meta.manyToOnes, ...meta.polymorphics];\n const rules = fields\n .filter((p) => p.notNull)\n .map((p) => {\n const { fieldName } = p;\n const isReactive = \"derived\" in p && p.derived === \"async\";\n if (\"lazy\" in p && p.lazy) {\n // Lazy columns use a rule that won't force-load (or falsely fail) an unloaded value on a persisted entity\n return code`${configName}.addRule(${newRequiredLazyFieldRule}(\"${fieldName}\"));`;\n } else if (isReactive) {\n return code`${configName}.addRule(\"${fieldName}\", ${newRequiredRule}(\"${fieldName}\"));`;\n } else {\n return code`${configName}.addRule(${newRequiredRule}(\"${fieldName}\"));`;\n }\n });\n // Add STI discriminator cannot change\n if (meta.stiDiscriminatorField) {\n const field = meta.enums.find((e) => e.fieldName === meta.stiDiscriminatorField) ?? fail(\"STI field not found\");\n rules.push(code`${configName}.addRule(${cannotBeUpdated}(\"${field.fieldName}\"));`);\n }\n // Add STI type must match\n const stiEntities = getStiEntities(db.entities);\n if (stiEntities.size > 0) {\n for (const m2o of meta.manyToOnes) {\n // The `m2o.otherEntity` may already be pointing at the subtype, but stiEntities has subtypes in it as well...\n const target = stiEntities.get(m2o.otherEntity.name);\n if (target && m2o.otherEntity.name !== target.base.name) {\n rules.push(code`${configName}.addRule(\"${m2o.fieldName}\", ${mustBeSubType}(\"${m2o.fieldName}\"));`);\n }\n }\n }\n // Add subtype specialization must match\n if (meta.baseType) {\n meta.manyToOnes\n .filter((m2o) =>\n meta.baseType?.manyToOnes?.find(\n (o) => o.fieldName === m2o.fieldName && o.otherEntity.name !== m2o.otherEntity.name,\n ),\n )\n .forEach((m2o) => {\n rules.push(code`${configName}.addRule(\"${m2o.fieldName}\", ${mustBeSubType}(\"${m2o.fieldName}\"));`);\n });\n }\n return rules;\n}\n\n// Make our opts type\nfunction generateOptsFields(meta: EntityDbMetadata): Code[] {\n const primitives = meta.primitives.map((field) => {\n const { fieldName, fieldType, notNull, derived } = field;\n if (derived) return code``;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${fieldType}${maybeUnionNull(notNull)};`;\n });\n const enums = meta.enums.map((field) => {\n const { fieldName, enumType, notNull, isArray, derived } = field;\n if (meta.stiDiscriminatorField === fieldName || derived) {\n // Don't include the discriminator as an opt b/c we'll infer it from the instance type\n return code``;\n } else if (isArray) {\n // Arrays are always optional and we'll default to `[]`\n return code`${fieldName}?: ${enumType}[];`;\n } else {\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${enumType}${maybeUnionNull(notNull)};`;\n }\n });\n const pgEnums = meta.pgEnums.map((field) => {\n const { fieldName, enumType, notNull } = field;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${enumType}${maybeUnionNull(notNull)};`;\n });\n const m2o = meta.manyToOnes\n .filter(({ derived }) => !derived) // Skip ReactiveReferences (derived m2o)\n // If a `group: { subType: SmallPublisherGroup }` is specializing this relation, that's\n // fine for most things, but not the `SmallPublisherOpts`, b/c it will break the contravariance\n // of `Publisher.setOpts` and `SmallPublisher.setOpts`\n .filter(({ fieldName }) => !meta.baseType?.manyToOnes.find((o) => o.fieldName === fieldName))\n .map((field) => {\n const { fieldName, otherEntity, notNull } = field;\n const maybeNull = maybeUnionNull(notNull);\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${otherEntity.type} | ${otherEntity.idType} ${maybeNull};`;\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type} | null;`;\n });\n const o2m = meta.oneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type}[];`;\n });\n const m2m = meta.manyToManys\n .filter(({ derived }) => !derived) // Skip ReactiveManyToManys\n .map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type}[];`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${enumType}[];`;\n });\n const polys = meta.polymorphics.map((field) => {\n const { fieldName, notNull, fieldType } = field;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${fieldType};`;\n });\n return [...primitives, ...enums, ...pgEnums, ...m2o, ...polys, ...o2o, ...o2m, ...m2m, ...m2mEnum];\n}\n\n// Make our fields type\nfunction generateFieldsType(meta: EntityDbMetadata, idType: \"string\" | \"number\"): Code[] {\n const id = code`id: { kind: \"primitive\"; type: ${idType}; unique: ${true}; nullable: never };`;\n const primitives = meta.primitives.map((field) => {\n const { fieldName, fieldType, notNull, unique, derived } = field;\n return code`${fieldName}: { kind: \"primitive\"; type: ${fieldType}; unique: ${unique}; nullable: ${undefinedOrNever(\n notNull,\n )}, derived: ${derived !== false} };`;\n });\n const enums = meta.enums.map((field) => {\n const { fieldName, enumType, notNull, isArray } = field;\n if (isArray) {\n // Arrays are always optional and we'll default to `[]`\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}[]; nullable: never };`;\n } else {\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}; nullable: ${undefinedOrNever(notNull)} };`;\n }\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType, notNull }) => {\n const nullable = undefinedOrNever(notNull);\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}; nullable: ${nullable}; native: true };`;\n });\n const m2o = meta.manyToOnes.map(({ fieldName, otherEntity, notNull, derived }) => {\n return code`${fieldName}: { kind: \"m2o\"; type: ${otherEntity.type}; nullable: ${undefinedOrNever(\n notNull,\n )}, derived: ${derived !== false} };`;\n });\n const polys = meta.polymorphics.map(({ fieldName, notNull, fieldType }) => {\n return code`${fieldName}: { kind: \"poly\"; type: ${fieldType}; nullable: ${undefinedOrNever(notNull)} };`;\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"m2m\"; type: ${otherEntity.type} };`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}: { kind: \"m2mEnum\"; type: ${enumType} };`;\n });\n const o2m = meta.oneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"o2m\"; type: ${otherEntity.type} };`;\n });\n const lo2m = meta.largeOneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"o2m\"; type: ${otherEntity.type} };`;\n });\n return [id, ...primitives, ...enums, ...pgEnums, ...m2o, ...polys, ...m2m, ...m2mEnum, ...o2m, ...lo2m];\n}\n\n// We know the OptIds types are only used in partials, so we make everything optional.\n// This especially needs to be the case b/c both `book: ...` and `bookId: ...` will be\n// in the partial type and of course the caller will only be setting one.\nfunction generateOptIdsFields(meta: EntityDbMetadata): Code[] {\n const m2o = meta.manyToOnes\n .filter(({ derived }) => !derived) // Skip ReactiveReferences\n .map(({ fieldName, otherEntity }) => {\n return code`${fieldName}Id?: ${otherEntity.idType} | null;`;\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}Id?: ${otherEntity.idType} | null;`;\n });\n const o2m = meta.oneToManys.map(({ singularName, otherEntity }) => {\n return code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;\n });\n const m2m = meta.manyToManys\n .filter(({ derived }) => !derived) // Skip ReactiveManyToManys\n .map(({ singularName, otherEntity }) => {\n return code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;\n });\n const polys = meta.polymorphics.map(({ fieldName, fieldType }) => {\n return code`${fieldName}Id?: ${IdOf}<${fieldType}> | null;`;\n });\n return [...m2o, ...polys, ...o2o, ...o2m, ...m2m];\n}\n\nfunction generateFilterFields(metasByName: Record<string, EntityDbMetadata>, meta: EntityDbMetadata): Code[] {\n // Always allow filtering on null to do \"child.id is null\" for detecting \"has no children\"\n const maybeId = meta.baseClassName ? [] : [code`id?: ${ValueFilter}<${meta.entity.idName}, never> | null;`];\n const primitives = meta.primitives.map(({ fieldName, fieldType, notNull }) => {\n if (fieldType === \"boolean\") {\n return code`${fieldName}?: ${BooleanFilter}<${nullOrNever(notNull)}>;`;\n } else {\n return code`${fieldName}?: ${ValueFilter}<${fieldType}, ${nullOrNever(notNull)}>;`;\n }\n });\n const enums = meta.enums.map(({ fieldName, enumType, notNull, isArray }) => {\n const maybeArray = isArray ? \"[]\" : \"\";\n return code`${fieldName}?: ${ValueFilter}<${enumType}${maybeArray}, ${nullOrNever(notNull)}>;`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType, notNull }) => {\n return code`${fieldName}?: ${ValueFilter}<${enumType}, ${nullOrNever(notNull)}>;`;\n });\n const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${\n otherEntity.type\n }>, ${nullOrNever(notNull)}>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${FilterOf}<${\n st.entity.type\n }>, ${nullOrNever(notNull)}>;`;\n }),\n ];\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${FilterOf}<${\n st.entity.type\n }>, ${nullOrNever(otherColumnNotNull)}>;`;\n }),\n ];\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n // Enum m2m filters are membership filters, e.g. `{ logoColors: Color.Red }` / `{ logoColors: [Red, Green] }`.\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueFilter}<${enumType}, null | undefined>;`;\n });\n const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {\n return [\n code`${fieldName}?: ${EntityFilter}<${fieldType}, ${IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`,\n ...components.map((comp) => {\n const { type } = comp.otherEntity;\n return code`${fieldName}${type}?: ${EntityFilter}<${type}, ${IdOf}<${type}>, ${FilterOf}<${type}>, null>;`;\n }),\n ];\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o, ...o2o, ...o2m, ...m2m, ...m2mEnum, ...polys];\n}\n\nfunction generateGraphQLFilterFields(metasByName: Record<string, EntityDbMetadata>, meta: EntityDbMetadata): Code[] {\n const maybeId = meta.baseClassName ? [] : [code`id?: ${ValueGraphQLFilter}<${meta.entity.idName}>;`];\n const primitives = meta.primitives.map(({ fieldName, fieldType }) => {\n if (fieldType === \"boolean\") {\n return code`${fieldName}?: ${BooleanGraphQLFilter};`;\n } else {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${fieldType}>;`;\n }\n });\n const enums = meta.enums.map(({ fieldName, enumType, isArray }) => {\n const maybeArray = isArray ? \"[]\" : \"\";\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}${maybeArray}>;`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}>;`;\n });\n const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {\n const otherMeta = metasByName[otherEntity.name];\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${\n otherEntity.type\n }>, ${nullOrNever(notNull)}>;`,\n code`${fieldName}Id?: ${ValueGraphQLFilter}<${otherEntity.idType}>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${GraphQLFilterOf}<${\n st.entity.type\n }>, ${nullOrNever(notNull)}>;`;\n }),\n ];\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${GraphQLFilterOf}<${\n st.entity.type\n }>, ${nullOrNever(otherColumnNotNull)}>;`;\n }),\n ];\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}>;`;\n });\n const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${fieldType}, ${IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`,\n code`${fieldName}Id?: ${ValueGraphQLFilter}<${IdOf}<${fieldType}>>;`,\n ...components.map((comp) => {\n const { type } = comp.otherEntity;\n return code`${fieldName}${type}?: ${EntityGraphQLFilter}<${type}, ${IdOf}<${type}>, ${FilterOf}<${type}>, null>;`;\n }),\n ];\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o, ...o2o, ...o2m, ...m2m, ...m2mEnum, ...polys];\n}\n\nfunction generateOrderFields(meta: EntityDbMetadata): Code[] {\n const maybeId = meta.baseClassName ? [] : [code`id?: ${OrderBy};`];\n const primitives = meta.primitives.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const enums = meta.enums.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const m2o = meta.manyToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.orderType};`;\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o];\n}\n\nfunction generateFactoryExtrasType(meta: EntityDbMetadata): Code[] {\n function withName(fieldName: string): string {\n return `with${fieldName[0].toUpperCase() + fieldName.substring(1)}`;\n }\n const primitives = meta.primitives\n .filter((f) => f.derived === \"async\")\n .map((field) => {\n const { fieldName, fieldType, notNull } = field;\n return code`${withName(fieldName)}?: ${fieldType}${maybeUnionNull(notNull)};`;\n });\n const enums = meta.enums\n .filter((f) => f.derived === \"async\")\n .map((field) => {\n const { fieldName, enumType, notNull, isArray } = field;\n if (isArray) {\n return code`${withName(fieldName)}?: ${enumType}[];`;\n } else {\n return code`${withName(fieldName)}?: ${enumType}${maybeUnionNull(notNull)};`;\n }\n });\n return [...primitives, ...enums];\n}\n\nfunction createPrimitives(meta: EntityDbMetadata, entity: Entity, fieldDocs: Record<string, string>) {\n const primitives = meta.primitives.map((p) => {\n const { fieldName, fieldType, notNull } = p;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n\n // `lazy` columns are emitted as `LazyField` relations by `createLazyFields`, not as getters/setters\n if (p.lazy) return code``;\n\n let getter: Code;\n if (p.derived === \"async\") {\n getter = code`\n abstract readonly ${fieldName}: ${ReactiveField}<${entity.name}, ${p.fieldType}${maybeOptional}>;\n `;\n } else if (p.derived === \"sync\") {\n getter = code`\n abstract get ${fieldName}(): ${fieldType}${maybeOptional};\n `;\n } else if (p.zodSchema) {\n getter = code`\n get ${fieldName}(): ${Zod}.output<typeof ${p.zodSchema}>${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n } else {\n getter = code`\n get ${fieldName}(): ${fieldType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n }\n\n let setter: Code | string;\n // ...technically we should be checking a list of JS keywords\n const paramName = keywords.includes(fieldName) ? \"value\" : fieldName;\n if (p.protected) {\n // TODO Allow making the getter to be protected as well. And so probably remove it\n // from the Opts as well. Wonder how that works for required protected fields?\n //\n // We have to use a method of `set${fieldName}` because TS enforces getters/setters to have\n // same access level and currently we're leaving the getter as public.\n setter = code`\n protected set${pascalCase(fieldName)}(${paramName}: ${fieldType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${paramName});\n }\n `;\n } else if (p.derived) {\n setter = \"\";\n } else if (p.superstruct) {\n // We use `value` as the param name to not potentially conflict with the\n // name of the imported superstruct const that is passed to assert.\n setter = code`\n set ${fieldName}(value: ${fieldType}${maybeOptional}) {\n if (value) {\n ${SSAssert}(value, ${p.superstruct});\n }\n ${setField}(this, \"${fieldName}\", value);\n }\n `;\n } else if (p.zodSchema) {\n // We use `value` as the param name to not potentially conflict with the\n // name of the imported zod schema that is passed to parse.\n setter = code`\n set ${fieldName}(value: ${Zod}.input<typeof ${p.zodSchema}>${maybeOptional}) {\n if (value) {\n ${setField}(this, \"${fieldName}\", ${p.zodSchema}.parse(value));\n } else {\n ${setField}(this, \"${fieldName}\", value);\n }\n }\n `;\n } else {\n setter = code`\n set ${fieldName}(${paramName}: ${fieldType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${paramName});\n }\n `;\n }\n\n return code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter} ${setter}`;\n });\n return primitives;\n}\n\nfunction createRegularEnums(meta: EntityDbMetadata, entity: Entity, fieldDocs: Record<string, string>) {\n return meta.enums\n .filter((e) => !e.isArray)\n .flatMap((e) => {\n const { fieldName, enumType, enumDetailType, enumDetailsType, notNull, enumRows, derived } = e;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n const getByCode = code`${enumDetailType}.getByCode(this.${fieldName})`;\n\n let getter: Code;\n if (derived === \"async\") {\n getter = code`\n abstract readonly ${fieldName}: ${ReactiveField}<${entity.name}, ${enumType}${maybeOptional}>;\n `;\n } else if (derived === \"sync\") {\n getter = code`\n abstract get ${fieldName}(): ${enumType}${maybeOptional};\n `;\n } else {\n getter = code`\n get ${fieldName}(): ${enumType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n\n get ${fieldName}Details(): ${enumDetailsType}${maybeOptional} {\n return ${notNull ? getByCode : code`this.${fieldName} ? ${getByCode} : undefined`};\n }\n `;\n }\n\n let setter: Code;\n if (derived) {\n setter = code``;\n } else {\n setter = code`\n set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n }\n\n const codes = new Set(enumRows.map((r) => r.code));\n const shouldPrefixAccessors = meta.enums\n .filter((other) => other !== e)\n .some((other) => other.enumRows.some((r) => codes.has(r.code)));\n\n const accessors = enumRows.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row.code)}(): boolean {\n return ${getField}(this, \"${fieldName}\") === ${enumType}.${pascalCase(row.code)};\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createArrayEnums(meta: EntityDbMetadata, fieldDocs: Record<string, string>) {\n return meta.enums\n .filter((e) => e.isArray)\n .flatMap((e) => {\n const { fieldName, enumType, enumDetailType, enumDetailsType, enumRows } = e;\n const getter = code`\n get ${fieldName}(): ${enumType}[] {\n return ${getField}(this, \"${fieldName}\") || [];\n }\n\n get ${fieldName}Details(): ${enumDetailsType}[] {\n return this.${fieldName}.map(code => ${enumDetailType}.getByCode(code));\n }\n `;\n const setter = code`\n set ${fieldName}(${fieldName}: ${enumType}[]) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n\n const codes = new Set(enumRows.map((r) => r.code));\n const shouldPrefixAccessors = meta.enums\n .filter((other) => other !== e)\n .some((other) => other.enumRows.some((r) => codes.has(r.code)));\n\n const accessors = enumRows.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row.code)}(): boolean {\n return this.${fieldName}.includes(${enumType}.${pascalCase(row.code)});\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createPgEnums(meta: EntityDbMetadata, fieldDocs: Record<string, string>) {\n return meta.pgEnums.flatMap((e) => {\n const { fieldName, enumType, enumValues, notNull } = e;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n\n const getter = code`\n get ${fieldName}(): ${enumType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n const setter = code`\n set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n\n const codes = new Set(enumValues);\n const shouldPrefixAccessors = meta.pgEnums\n .filter((other) => other !== e)\n .some((other) => other.enumValues.some((r) => codes.has(r)));\n\n const accessors = enumValues.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row)}(): boolean {\n return this.${fieldName} === ${enumType}.${pascalCase(row)};\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createRelations(config: Config, meta: EntityDbMetadata, entity: Entity): Relation[] {\n // Add ManyToOne entities\n const m2o: Relation[] = meta.manyToOnes.map((m2o) => {\n const { fieldName, otherEntity, otherFieldName, notNull } = m2o;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n if (m2o.derived === \"async\") {\n const line = code`abstract readonly ${fieldName}: ${ReactiveReference}<${entity.name}, ${otherEntity.type}, ${maybeOptional}>;`;\n return { kind: \"abstract\", fieldName, line } as const;\n }\n const decl = code`${ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`;\n const init = code`${hasOne}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const m2oBase: Relation[] =\n meta.baseType?.manyToOnes\n // Skip m2os that are already specialized to a different otherEntity, i.e. `SmallPublisher.group: SmallPublisherGroup`\n .filter((m2o) => !meta.manyToOnes.find((o) => o.fieldName === m2o.fieldName))\n // Don't specialize hasReactiveReferences b/c they're fields, not getters\n .filter((m2o) => m2o.derived !== \"async\")\n .map((m2o) => {\n const { fieldName, otherEntity, notNull } = m2o;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n const decl = code`${ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add any recursive ManyToOne entities\n const m2oRecursive: Relation[] = meta.manyToOnes\n .filter((m2o) => m2o.otherEntity.name === meta.name)\n // Allow disabling recursive relations\n .filter(\n (m2o) =>\n // STI subtypes don't have their own key in config.entities (stripped by stripStiPlaceholders),\n // so look up the base class name to find skipRecursiveRelations config\n !(\n config.entities[meta.inheritanceType == \"sti\" && meta.baseClassName ? meta.baseClassName : meta.name]\n ?.relations?.[m2o.fieldName]?.skipRecursiveRelations === true\n ),\n )\n // Skip ReactiveReferences because they don't have an `other` side for us to use\n .filter((m2o) => !m2o.derived)\n .flatMap((m2o) => {\n const { fieldName: m2oName, otherFieldName, otherEntity } = m2o;\n const parentsField = `${plural(m2oName)}Recursive`;\n const maybeOneToOne = meta.oneToOnes.find((o2o) => o2o.fieldName === otherFieldName);\n const childrenField = maybeOneToOne ? `${plural(otherFieldName)}Recursive` : `${otherFieldName}Recursive`;\n return [\n {\n kind: \"concrete\",\n fieldName: parentsField,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveParents}(\"${m2oName}\", \"${childrenField}\")`,\n },\n {\n kind: \"concrete\",\n fieldName: childrenField,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveChildren}(\"${otherFieldName}\", \"${parentsField}\")`,\n },\n ];\n });\n\n // Add any recursive ManyToMany entities (self-referential m2m)\n const m2mRecursive: Relation[] = meta.manyToManys\n .filter((m2m) => m2m.otherEntity.name === meta.name)\n .filter((m2m) => !m2m.derived)\n // STI subtypes don't have their own key in config.entities (stripped by stripStiPlaceholders),\n // so look up the base class name to find skipRecursiveRelations config\n .filter(\n (m2m) =>\n !(\n config.entities[meta.inheritanceType == \"sti\" && meta.baseClassName ? meta.baseClassName : meta.name]\n ?.relations?.[m2m.fieldName]?.skipRecursiveRelations === true\n ),\n )\n .map((m2m) => {\n const { fieldName, otherFieldName, otherEntity } = m2m;\n return {\n kind: \"concrete\",\n fieldName: `${fieldName}Recursive`,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveM2m}(\"${fieldName}\", \"${otherFieldName}Recursive\")`,\n };\n });\n\n // Add OneToMany\n const o2m: Relation[] = meta.oneToManys.map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasMany}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const o2mBase: Relation[] =\n meta.baseType?.oneToManys\n // Skip o2ms that are already specialized to a different otherEntity, i.e. `SmallPublisherGroup.publishers: SmallPublisher`\n .filter((o2m) => !meta.oneToManys.find((o) => o.fieldName === o2m.fieldName))\n .map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add large OneToMany\n const lo2m: Relation[] = meta.largeOneToManys.map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${LargeCollection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasLargeMany}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add OneToOne\n const o2o: Relation[] = meta.oneToOnes.map((o2o) => {\n const { fieldName, otherEntity } = o2o;\n const decl = code`${OneToOneReference}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasOneToOne}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const o2oBase: Relation[] =\n meta.baseType?.oneToOnes.map((o2o) => {\n const { fieldName, otherEntity } = o2o;\n const decl = code`${OneToOneReference}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add ManyToMany\n const m2m: Relation[] = meta.manyToManys.map((m2m) => {\n const { fieldName, otherEntity } = m2m;\n const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;\n if (m2m.derived === \"async\") {\n const line = code`abstract readonly ${fieldName}: ${ReactiveManyToMany}<${entity.name}, ${otherEntity.type}>;`;\n return { kind: \"abstract\", fieldName, line, comment } as const;\n } else if (m2m.derived === \"otherSide\") {\n const decl = code`${ReactiveManyToManyOtherSide}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasReactiveManyToManyOtherSide}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n } else if (!m2m.derived) {\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasManyToMany}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n } else {\n assertNever(m2m.derived);\n }\n });\n // Specialize\n const m2mBase: Relation[] =\n meta.baseType?.manyToManys\n // Don't specialize hasReactiveManyToMany or hasReactiveManyToManyOtherSide b/c they're fields, not getters\n .filter((m2m) => !m2m.derived)\n .map((m2m) => {\n const { fieldName, otherEntity } = m2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add enum-backed ManyToMany (i.e. `Publisher.logoColors`)\n const m2mEnum: Relation[] = meta.manyToManyEnums.map((m2m) => {\n const { fieldName, enumType } = m2m;\n const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;\n const decl = code`${EnumCollection}<${entity.type}, ${enumType}>`;\n const init = code`${hasEnumCollection}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n });\n const m2mEnumBase: Relation[] =\n meta.baseType?.manyToManyEnums.map((m2m) => {\n const { fieldName, enumType } = m2m;\n const decl = code`${EnumCollection}<${entity.type}, ${enumType}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add large ManyToMany\n const lm2m: Relation[] = meta.largeManyToManys.map((m2m) => {\n const { joinTableName, fieldName, columnName, otherEntity, otherFieldName, otherColumnName } = m2m;\n const decl = code`${LargeCollection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`\n ${hasLargeManyToMany}(\n \"${joinTableName}\",\n \"${columnName}\",\n \"${otherFieldName}\",\n \"${otherColumnName}\",\n ${m2m.hasJoinTableId},\n );\n `;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add Polymorphic\n const polymorphic: Relation[] = meta.polymorphics.map((p) => {\n const { fieldName, notNull, fieldType } = p;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n const decl = code`${PolymorphicReference}<${entity.type}, ${fieldType}, ${maybeOptional}>`;\n const init = code`${hasOnePolymorphic}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add `lazy` primitives, which are exposed as `LazyField`s instead of getters/setters\n const lazy: Relation[] = meta.primitives\n .filter((p) => p.lazy)\n .map((p) => {\n const { fieldName, fieldType, notNull } = p;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n const decl = code`${LazyField}<${entity.type}, ${fieldType}${maybeOptional}>`;\n const init = code`${hasLazyField}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n return [\n o2m,\n o2mBase,\n lo2m,\n m2o,\n m2oBase,\n m2oRecursive,\n m2mRecursive,\n o2o,\n o2oBase,\n m2m,\n m2mBase,\n m2mEnum,\n m2mEnumBase,\n lm2m,\n polymorphic,\n lazy,\n ].flat();\n}\n\n/** Makes the field required if there is a `NOT NULL` and no db-or-config default. */\nfunction maybeOptionalOrDefault(\n field: PrimitiveField | EnumField | PgEnumField | ManyToOneField | PolymorphicField,\n): string {\n const hasDefault =\n (field.kind !== \"m2o\" && field.kind !== \"poly\" && fieldHasDefaultValue(field)) || field.hasConfigDefault;\n return !field.notNull || hasDefault ? \"?\" : \"\";\n}\n\nfunction maybeUnionNull(notNull: boolean): string {\n return notNull ? \"\" : \" | null\";\n}\n\nfunction maybeUndefined(notNull: boolean): string {\n return notNull ? \"\" : \" | undefined\";\n}\n\nfunction undefinedOrNever(notNull: boolean): string {\n return notNull ? \"never\" : \"undefined\";\n}\n\nfunction nullOrNever(notNull: boolean): string {\n return notNull ? \"never\" : \"null\";\n}\n\n/** Returns the nowUTC call for the deleted-at field's generated timestamp type. */\nfunction nowUTCCall(config: Config, field: PrimitiveField): Code {\n if (!config.temporal) return code`${nowUTC}()`;\n switch (field.columnType) {\n case \"date\":\n return code`${nowUTC}(\"plainDate\")`;\n case \"timestamp without time zone\":\n return code`${nowUTC}(\"plainDateTime\")`;\n case \"timestamp with time zone\":\n return code`${nowUTC}(\"zonedDateTime\")`;\n default:\n return fail(`Unsupported deleted-at column type ${field.columnType}`);\n }\n}\n\n/** Prefixes the comment with a newline, so it gets its own line. */\nfunction maybeComment(comment: string | undefined): string {\n return comment ? ` ${comment}\\n` : \"\";\n}\n\n/**\n * Renders a field's `.md` doc (plus its `@generated` tag) as a bare JSDoc block, or `\"\"` if undocumented.\n *\n * Reuses the same {@link buildJSDocBlock} formatter the `.md` sync uses for hand-written `Entity.ts`\n * members. Used directly before a getter template (which supplies its own leading newline), so the\n * JSDoc lands immediately above the getter with no intervening blank line.\n */\nfunction fieldDocBlock(fieldDocs: Record<string, string>, fieldName: string, entityName: string): string {\n const doc = fieldDocs[fieldName];\n return doc ? buildJSDocBlock(`${doc}\\n${generatedTag(entityName)}`, 0) : \"\";\n}\n\n/** Like {@link fieldDocBlock} but wrapped in newlines, i.e. for inline `readonly x = ...` relation decls. */\nfunction relationDocBlock(fieldDocs: Record<string, string>, fieldName: string, entityName: string): string {\n const block = fieldDocBlock(fieldDocs, fieldName, entityName);\n return block ? `\\n${block}\\n` : \"\";\n}\n\nexport function getIdType(config: Config) {\n switch (config.idType) {\n case \"untagged-string\":\n case \"tagged-string\":\n case undefined:\n return \"string\";\n case \"number\":\n return \"number\";\n default:\n return assertNever(config.idType);\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generateEntityCodegenFile.d.cts","names":[],"sources":["../src/generateEntityCodegenFile.ts"],"mappings":";;;;;;;UAoGiB;EACf,WAAW;;;iBAaG,0BACd,QAAQ,QACR,QAAQ,YACR,MAAM,kBACN,eAAc,eACd,OAAO,YACN;iBAinCa,UAAU,QAAQ"}
1
+ {"version":3,"file":"generateEntityCodegenFile.d.cts","names":[],"sources":["../src/generateEntityCodegenFile.ts"],"mappings":";;;;;;;UAqGiB;EACf,WAAW;;;iBAaG,0BACd,QAAQ,QACR,QAAQ,YACR,MAAM,kBACN,eAAc,eACd,OAAO,YACN;iBAqoCa,UAAU,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"generateEntityCodegenFile.d.mts","names":[],"sources":["../src/generateEntityCodegenFile.ts"],"mappings":";;;;;;;UAoGiB;EACf,WAAW;;;iBAaG,0BACd,QAAQ,QACR,QAAQ,YACR,MAAM,kBACN,eAAc,eACd,OAAO,YACN;iBAinCa,UAAU,QAAQ"}
1
+ {"version":3,"file":"generateEntityCodegenFile.d.mts","names":[],"sources":["../src/generateEntityCodegenFile.ts"],"mappings":";;;;;;;UAqGiB;EACf,WAAW;;;iBAaG,0BACd,QAAQ,QACR,QAAQ,YACR,MAAM,kBACN,eAAc,eACd,OAAO,YACN;iBAqoCa,UAAU,QAAQ"}
@@ -5,7 +5,7 @@ import { buildJSDocBlock, generatedTag } from "./docs/parsing.js";
5
5
  import "./docs/index.js";
6
6
  import "./findEntityScopes.js";
7
7
  import { keywords } from "./keywords.js";
8
- import { BaseEntity, BooleanFilter, BooleanGraphQLFilter, Changes, Collection, ConfigApi, DeepPartialOrNull, EntityFilter, EntityGraphQLFilter, EntityManager, EntityMetadata, EnumCollection, FieldsOf, FilterOf, Flavor, GraphQLFilterOf, IdOf, JsonPayload, LargeCollection, LazyField, Lens, LoadHint, Loaded, ManyToOneReference, MaybeAbstractEntityConstructor, OneToOneReference, OptsOf, OrderBy, PartialOrNull, PolymorphicReference, ProjectEntity, ReactiveField, ReactiveManyToMany, ReactiveManyToManyOtherSide, ReactiveReference, ReadOnlyCollection, RelationsOf, SSAssert, Scope, TaggedId, ToJsonHint, ValueFilter, ValueGraphQLFilter, Zod, cannotBeUpdated, failNoIdYet, getField, hasEnumCollection, hasLargeMany, hasLargeManyToMany, hasLazyField, hasMany, hasManyToMany, hasOne, hasOnePolymorphic, hasOneToOne, hasReactiveManyToManyOtherSide, hasRecursiveChildren, hasRecursiveM2m, hasRecursiveParents, isEntity, isLoaded, loadLens, mustBeSubType, newChangesProxy, newRequiredLazyFieldRule, newRequiredRule, newScopeFn, setField, setOpts, toIdOf, toJSON, updatePartial } from "./symbols.js";
8
+ import { BaseEntity, BooleanFilter, BooleanGraphQLFilter, Changes, Collection, ConfigApi, DeepPartialOrNull, EntityFilter, EntityGraphQLFilter, EntityManager, EntityMetadata, EnumCollection, FieldsOf, FilterOf, Flavor, GraphQLFilterOf, IdOf, JsonPayload, LargeCollection, LazyField, Lens, LoadHint, Loaded, ManyToOneReference, MaybeAbstractEntityConstructor, OneToOneReference, OptsOf, OrderBy, PartialOrNull, PolymorphicReference, ProjectEntity, ReactiveField, ReactiveManyToMany, ReactiveManyToManyOtherSide, ReactiveReference, ReadOnlyCollection, RelationsOf, SSAssert, Scope, TaggedId, ToJsonHint, ValueFilter, ValueGraphQLFilter, Zod, cannotBeUpdated, failNoIdYet, getField, hasEnumCollection, hasLargeMany, hasLargeManyToMany, hasLazyField, hasMany, hasManyToMany, hasOne, hasOnePolymorphic, hasOneToOne, hasReactiveManyToManyOtherSide, hasRecursiveChildren, hasRecursiveM2m, hasRecursiveParents, isEntity, isLoaded, loadLens, mustBeSubType, newChangesProxy, newRequiredLazyFieldRule, newRequiredRule, newScopeFn, nowUTC, setField, setOpts, toIdOf, toJSON, updatePartial } from "./symbols.js";
9
9
  import { tsdocComments } from "./tsdoc.js";
10
10
  import "./EntityDbMetadata.js";
11
11
  import { camelCase, pascalCase } from "change-case";
@@ -32,10 +32,15 @@ function generateEntityCodegenFile(config, dbMeta, meta, scopeMembers = [], docs
32
32
  const factoryMethod = imp(`new${entity.name}@./entities.ts`);
33
33
  const idMaybeCode = config.idType === "tagged-string" ? code`return this.idTaggedMaybe;` : code`return ${toIdOf}(${metadata}, this.idTaggedMaybe);`;
34
34
  const idType = getIdType(config);
35
- const maybeIsSoftDeleted = meta.deletedAt ? code`
35
+ const maybeSoftDeleteMethods = meta.deletedAt ? code`
36
36
  get isSoftDeletedEntity(): boolean {
37
37
  return this.${meta.deletedAt.fieldName} !== undefined;
38
38
  }
39
+
40
+ softDelete(): void {
41
+ if (this.isSoftDeletedEntity) return;
42
+ this.${meta.deletedAt.fieldName} = ${nowUTCCall(config, meta.deletedAt)};
43
+ }
39
44
  ` : "";
40
45
  const baseEntity = dbMeta.entities.find((e) => e.name === meta.baseClassName);
41
46
  const subEntities = dbMeta.entities.filter((e) => e.baseClassName === meta.name);
@@ -175,7 +180,7 @@ function generateEntityCodegenFile(config, dbMeta, meta, scopeMembers = [], docs
175
180
  return ${newChangesProxy}(this) as any;
176
181
  }
177
182
 
178
- ${maybeIsSoftDeleted}
183
+ ${maybeSoftDeleteMethods}
179
184
 
180
185
  ${tsdocComments.entity.load}
181
186
  load<U, V>(fn: (lens: ${Lens}<${entity.type}>) => ${Lens}<U, V>, opts: { sql?: boolean } = {}): Promise<V> {
@@ -897,6 +902,16 @@ function undefinedOrNever(notNull) {
897
902
  function nullOrNever(notNull) {
898
903
  return notNull ? "never" : "null";
899
904
  }
905
+ /** Returns the nowUTC call for the deleted-at field's generated timestamp type. */
906
+ function nowUTCCall(config, field) {
907
+ if (!config.temporal) return code`${nowUTC}()`;
908
+ switch (field.columnType) {
909
+ case "date": return code`${nowUTC}("plainDate")`;
910
+ case "timestamp without time zone": return code`${nowUTC}("plainDateTime")`;
911
+ case "timestamp with time zone": return code`${nowUTC}("zonedDateTime")`;
912
+ default: return fail(`Unsupported deleted-at column type ${field.columnType}`);
913
+ }
914
+ }
900
915
  /** Prefixes the comment with a newline, so it gets its own line. */
901
916
  function maybeComment(comment) {
902
917
  return comment ? ` ${comment}\n` : "";
@@ -1 +1 @@
1
- {"version":3,"file":"generateEntityCodegenFile.js","names":[],"sources":["../src/generateEntityCodegenFile.ts"],"sourcesContent":["import { camelCase, pascalCase } from \"change-case\";\nimport pluralize from \"pluralize\";\nimport { type Code, code, imp, joinCode } from \"ts-poet\";\n\nimport { type Config } from \"./config.ts\";\nimport { type ParsedDoc, buildJSDocBlock, generatedTag } from \"./docs/index.ts\";\nimport {\n type DbMetadata,\n type Entity,\n type EntityDbMetadata,\n type EnumField,\n type ManyToOneField,\n type PgEnumField,\n type PolymorphicField,\n type PrimitiveField,\n type PrimitiveTypescriptType,\n} from \"./EntityDbMetadata.ts\";\nimport { type ScopeMember } from \"./findEntityScopes.ts\";\nimport { getStiEntities } from \"./inheritance.ts\";\nimport { keywords } from \"./keywords.ts\";\nimport {\n BaseEntity,\n BooleanFilter,\n BooleanGraphQLFilter,\n Changes,\n Collection,\n ConfigApi,\n DeepPartialOrNull,\n EntityFilter,\n EntityGraphQLFilter,\n EntityManager,\n EntityMetadata,\n EnumCollection,\n FieldsOf,\n FilterOf,\n Flavor,\n GraphQLFilterOf,\n IdOf,\n JsonPayload,\n LargeCollection,\n LazyField,\n Lens,\n LoadHint,\n Loaded,\n ManyToOneReference,\n MaybeAbstractEntityConstructor,\n OneToOneReference,\n OptsOf,\n OrderBy,\n PartialOrNull,\n PolymorphicReference,\n ProjectEntity,\n ReactiveField,\n ReactiveManyToMany,\n ReactiveManyToManyOtherSide,\n ReactiveReference,\n ReadOnlyCollection,\n RelationsOf,\n SSAssert,\n Scope,\n TaggedId,\n ToJsonHint,\n ValueFilter,\n ValueGraphQLFilter,\n Zod,\n cannotBeUpdated,\n failNoIdYet,\n getField,\n hasEnumCollection,\n hasLargeMany,\n hasLargeManyToMany,\n hasLazyField,\n hasMany,\n hasManyToMany,\n hasOne,\n hasOnePolymorphic,\n hasOneToOne,\n hasReactiveManyToManyOtherSide,\n hasRecursiveChildren,\n hasRecursiveM2m,\n hasRecursiveParents,\n isEntity,\n isLoaded,\n loadLens,\n mustBeSubType,\n newChangesProxy,\n newRequiredLazyFieldRule,\n newRequiredRule,\n newScopeFn,\n setField,\n setOpts,\n toIdOf,\n toJSON,\n updatePartial,\n} from \"./symbols.ts\";\nimport { tsdocComments } from \"./tsdoc.ts\";\nimport { assertNever, fail, uncapitalize } from \"./utils.ts\";\n\nconst { plural } = pluralize;\n\nexport interface ColumnMetaData {\n fieldType: PrimitiveTypescriptType;\n}\n\n// A local type just for tracking abstract vs. concrete relations\ntype Relation =\n // I.e. `abstract ReactiveReference` that the user must implement\n | { kind: \"abstract\"; fieldName: string; line: Code; comment?: string }\n // I.e. a `get author(): ManyToOne<...>`\n | { kind: \"concrete\"; fieldName: string; decl: Code; init: Code; comment?: string }\n // I.e. a `get author(): { super.author as ... }`\n | { kind: \"super\"; fieldName: string; decl: Code; comment?: string };\n\n/** Creates the base class with the boilerplate annotations. */\nexport function generateEntityCodegenFile(\n config: Config,\n dbMeta: DbMetadata,\n meta: EntityDbMetadata,\n scopeMembers: ScopeMember[] = [],\n docs?: ParsedDoc,\n): Code {\n const { entitiesByName: metasByName } = dbMeta;\n const { entity, tagName } = meta;\n const entityName = entity.name;\n\n // Per-field `.md` docs to inject as JSDocs on the codegen'd getters/relations (empty if docs are off)\n const fieldDocs = docs?.fields ?? {};\n\n // Avoid using `do` as a variable name b/c it's a reserved keyword\n const varName = keywords.includes(tagName) ? uncapitalize(entityName) : tagName;\n\n const primitives = createPrimitives(meta, entity, fieldDocs); // Add the primitives\n primitives.push(...createRegularEnums(meta, entity, fieldDocs)); // Add ManyToOne enums\n primitives.push(...createArrayEnums(meta, fieldDocs)); // Add integer[] enums\n primitives.push(...createPgEnums(meta, fieldDocs)); // Add native enums\n const relations = createRelations(config, meta, entity);\n\n const configName = `${camelCase(entityName)}Config`;\n const scopeFnName = `${camelCase(entityName)}Scope`;\n const metadata = imp(`${camelCase(entityName)}Meta@./entities.ts`);\n\n const contextType = config.contextType ? imp(`t:${config.contextType}`) : \"{}\";\n const factoryMethod = imp(`new${entity.name}@./entities.ts`);\n\n // If we're not tagged-strings, detag on the way out of id\n const idMaybeCode =\n config.idType === \"tagged-string\"\n ? code`return this.idTaggedMaybe;`\n : code`return ${toIdOf}(${metadata}, this.idTaggedMaybe);`;\n const idType = getIdType(config);\n\n const maybeIsSoftDeleted = meta.deletedAt\n ? code`\n get isSoftDeletedEntity(): boolean {\n return this.${meta.deletedAt.fieldName} !== undefined;\n }\n `\n : \"\";\n\n // Set up the codegen artifacts to extend from the base type if necessary\n const baseEntity = dbMeta.entities.find((e) => e.name === meta.baseClassName);\n const subEntities = dbMeta.entities.filter((e) => e.baseClassName === meta.name);\n const base = baseEntity?.entity.typeSymbol ?? code`${BaseEntity}<${EntityManager}, ${idType}>`;\n const maybeBaseFields = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.fieldsName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseOpts = baseEntity ? code`extends ${baseEntity.entity.optsType}` : \"\";\n const maybeBaseIdOpts = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.idsOptsName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseFilter = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.filterName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseGqlFilter = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.graphqlFilterName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseOrder = baseEntity ? code`extends ${baseEntity.entity.orderType}` : \"\";\n const maybePreventBaseTypeInstantiation = meta.abstract\n ? code`\n if (this.constructor === ${entity.type} && !(em as any).fakeInstance) {\n throw new Error(\\`${entity.type} must be instantiated via a subtype\\`);\n }`\n : \"\";\n\n let maybeOtherTypeChanges;\n if (subEntities.length > 0) {\n maybeOtherTypeChanges = joinCode(\n // Pass `K = keyof Publisher | keyof SmallPublisher | keyof LargePublisher` to `changes` so that\n // our subtypes can have `SmallPublisher.changes(): Changes<SmallPublisher>` be covariant, which\n // will break if it adds a key to `Changes.fields` that `Publisher.changes()` does not include.\n //\n // type A1 = { foo: 1 | 2 };\n // type A2 = { foo: 1 | 2 | 3 };\n // type A3 = A2 extends A1 ? 1 : 2;\n //\n // A3 will be 2 because the extra 3 breaks code written against A1.foo.\n //\n // So essentially we're pre-emptively our subtypes \"3\".\n [\n code`, `,\n ...[meta, ...subEntities].map(\n (e) => code`keyof (${FieldsOf}<${e.entity.type}> & ${RelationsOf}<${e.entity.type}>)`,\n ),\n ],\n { on: \"|\" },\n );\n } else {\n maybeOtherTypeChanges = \"\";\n }\n\n let maybeOtherLoaded;\n if (baseEntity) {\n maybeOtherLoaded = code`| ${baseEntity.entity.type}`;\n } else {\n maybeOtherLoaded = \"\";\n }\n\n return code`\n export type ${entity.idName} = ${Flavor}<${idType}, \"${baseEntity ? baseEntity.name : entityName}\">;\n\n ${generatePolymorphicTypes(meta)}\n\n export interface ${entity.fieldsName} ${maybeBaseFields} {\n ${generateFieldsType(meta, idType)}\n }\n\n export interface ${entity.optsName} ${maybeBaseOpts} {\n ${generateOptsFields(meta)}\n }\n\n export interface ${entity.idsOptsName} ${maybeBaseIdOpts} {\n ${generateOptIdsFields(meta)}\n }\n\n export interface ${entity.filterName} ${maybeBaseFilter} {\n ${generateFilterFields(metasByName, meta)}\n }\n\n export interface ${entity.graphqlFilterName} ${maybeBaseGqlFilter} {\n ${generateGraphQLFilterFields(metasByName, meta)}\n }\n\n export interface ${entity.orderName} ${maybeBaseOrder} {\n ${generateOrderFields(meta)}\n }\n\n export interface ${entity.factoryExtrasName} {\n ${generateFactoryExtrasType(meta)}\n }\n\n export interface ${entity.scopesName} {\n ${scopeMembers.map((member) => code`${member.name}: ${member.type};`)}\n }\n\n export type ${entity.scopeName} = ${Scope}<${entity.type}, ${entity.scopesName}>;\n\n export const ${configName} = new ${ConfigApi}<${entity.type}, ${contextType}>();\n\n export const ${scopeFnName} = ${newScopeFn}<${entity.type}, ${entity.scopeName}>(\"${entityName}\");\n\n ${generateDefaultValidationRules(dbMeta, meta, configName)}\n ${generateDefaultValues(config, meta, configName)};\n\n declare module \"joist-core\" {\n interface TypeMap {\n ${entityName}: {\n entityType: ${entityName};\n filterType: ${entity.filterName};\n gqlFilterType: ${entity.graphqlFilterName};\n orderType: ${entity.orderName};\n optsType: ${entity.optsName};\n fieldsType: ${entity.fieldsName};\n optIdsType: ${entity.idsOptsName};\n factoryExtrasType: ${entity.factoryExtrasName};\n factoryOptsType: Parameters<typeof ${factoryMethod}>[1];\n };\n }\n }\n\n export abstract class ${entityName}Codegen extends ${base} implements ${ProjectEntity} {\n static readonly tagName = \"${tagName}\";\n static readonly metadata: ${EntityMetadata}<${entity.type}>;\n\n declare readonly __type: {\n ${baseEntity ? `0: \"${baseEntity.name}\",` : \"\"}\n ${baseEntity ? 1 : 0}: \"${entityName}\", \n };\n\n ${relations\n .filter((r) => r.kind === \"abstract\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}${r.line}${maybeComment(r.comment)}`;\n })}\n ${relations\n .filter((r) => r.kind === \"concrete\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}readonly ${r.fieldName}: ${r.decl} = ${r.init};${maybeComment(r.comment)}`;\n })}\n ${relations\n .filter((r) => r.kind === \"super\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}declare readonly ${r.fieldName}: ${r.decl};${maybeComment(r.comment)}`;\n })}\n\n get id(): ${entity.idName} {\n return this.idMaybe || ${failNoIdYet}(\"${entityName}\");\n }\n\n get idMaybe(): ${entity.idName} | undefined {\n ${idMaybeCode}\n }\n\n get idTagged(): ${TaggedId} {\n return this.idTaggedMaybe || ${failNoIdYet}(\"${entityName}\");\n }\n\n get idTaggedMaybe(): ${TaggedId} | undefined {\n return ${getField}(this, \"id\");\n }\n\n ${primitives} \n\n ${tsdocComments.entity.setPartial}\n set(opts: Partial<${entity.optsName}>): void {\n ${setOpts}(this as any as ${entityName}, opts);\n }\n\n ${tsdocComments.entity.setPartial}\n setPartial(opts: ${PartialOrNull}<${entity.optsName}>): void {\n ${setOpts}(this as any as ${entityName}, opts as ${OptsOf}<${entityName}>, { partial: true });\n }\n\n ${tsdocComments.entity.setDeepPartial}\n setDeepPartial(opts: ${DeepPartialOrNull}<${entityName}>): Promise<void> {\n return ${updatePartial}(this as any as ${entityName}, opts);\n }\n\n ${tsdocComments.entity.changes}\n get changes(): ${Changes}<${entityName}${maybeOtherTypeChanges}> {\n return ${newChangesProxy}(this) as any;\n }\n\n ${maybeIsSoftDeleted}\n\n ${tsdocComments.entity.load}\n load<U, V>(fn: (lens: ${Lens}<${entity.type}>) => ${Lens}<U, V>, opts: { sql?: boolean } = {}): Promise<V> {\n return ${loadLens}(this as any as ${entityName}, fn, opts);\n }\n\n ${tsdocComments.entity.populate}\n populate<const H extends ${LoadHint}<${entityName}>>(hint: H): Promise<${Loaded}<${entityName}, H>>;\n populate<const H extends ${LoadHint}<${entityName}>>(opts: { hint: H, forceReload?: boolean }): Promise<${Loaded}<${entityName}, H>>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(hint: H, fn: (${varName}: Loaded<${entityName}, H>) => V): Promise<V>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(opts: { hint: H, forceReload?: boolean }, fn: (${varName}: Loaded<${entityName}, H>) => V): Promise<V>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(hintOrOpts: any, fn?: (${varName}: Loaded<${entityName}, H>) => V): Promise<${Loaded}<${entityName}, H> | V> {\n return this.em.populate(this as any as ${entityName}, hintOrOpts, fn);\n }\n\n ${tsdocComments.entity.isLoaded}\n isLoaded<const H extends ${LoadHint}<${entityName}>>(hint: H): this is ${Loaded}<${entityName}${maybeOtherLoaded}, H> {\n return ${isLoaded}(this as any as ${entityName}, hint);\n }\n\n ${tsdocComments.entity.toJSON}\n toJSON(): object;\n toJSON<const H extends ${ToJsonHint}<${entityName}>>(hint: H): Promise<${JsonPayload}<${entityName}, H>>;\n toJSON(hint?: any): object {\n return !hint || typeof hint === \"string\" ? super.toJSON() : ${toJSON}(this, hint);\n }\n }\n `;\n}\n\nfunction fieldHasDefaultValue(field: PrimitiveField | EnumField | PgEnumField): boolean {\n let { columnDefault } = field;\n // If there's no default at all, return false\n if (columnDefault === null) {\n return false;\n }\n // Even though default is defined as a `number | boolean | string | null`, in reality pg-structure\n // only ever returns a `string | null`, so we handle that here\n columnDefault = columnDefault.toString();\n const fieldType = field.kind === \"primitive\" ? field.fieldType : \"number\";\n // Try to validate that we actually got a primitive value and not arbitrary SQL\n return (\n (fieldType === \"number\" && !isNaN(parseInt(columnDefault))) ||\n (fieldType === \"bigint\" && !isNaN(parseInt(columnDefault))) ||\n (fieldType === \"string\" && /^'.*'$/.test(columnDefault)) ||\n (fieldType === \"boolean\" && [\"true\", \"false\"].includes(columnDefault))\n );\n}\n\nfunction generatePolymorphicTypes(meta: EntityDbMetadata) {\n return meta.polymorphics.flatMap((pf) => [\n code`export type ${pf.fieldType} = ${pf.components.map((c) => code`| ${c.otherEntity.type}`)};`,\n code`export function get${pf.fieldType}Constructors(): ${MaybeAbstractEntityConstructor}<${pf.fieldType}>[] {\n return [${pf.components.map((c) => code`${c.otherEntity.typeSymbol},`)}];\n }`,\n code`export function is${pf.fieldType}(maybeEntity: unknown): maybeEntity is ${pf.fieldType} {\n return ${isEntity}(maybeEntity) && get${pf.fieldType}Constructors().some((type) => maybeEntity instanceof type);\n }`,\n ]);\n}\n\nfunction generateDefaultValues(config: Config, meta: EntityDbMetadata, configName: string): Code[] {\n // Skip sync defaults b/c we'll just stomp the getter; leave async in case they're RQFs\n // where the row must fundamentally be inserted with a dummy value before the real value is calced.\n function notSync(field: PrimitiveField | EnumField): boolean {\n return \"derived\" in field && field.derived !== \"sync\";\n }\n\n const primitives = meta.primitives\n .filter((field) => fieldHasDefaultValue(field))\n .filter(notSync)\n .map(({ fieldName, columnDefault }) => {\n return code`${configName}.setDefault(\"${fieldName}\", ${columnDefault});`;\n });\n const pgEnums = meta.pgEnums\n .filter((field) => !!field.columnDefault)\n .map(({ fieldName, columnDefault }) => {\n return code`${configName}.setDefault(\"${fieldName}\", ${columnDefault});`;\n });\n const enums = meta.enums\n .filter((field) => !!field.columnDefault && !field.isArray)\n .filter(notSync)\n .map(({ fieldName, columnDefault, enumRows, enumType, columnName }) => {\n const defaultRow =\n enumRows.find((r) => r.id === Number(columnDefault)) ||\n fail(`Invalid default value ${columnDefault} for ${meta.tableName}.${columnName}`);\n return code`${configName}.setDefault(\"${fieldName}\", ${enumType}.${pascalCase(defaultRow.code)});`;\n });\n return [...primitives, ...enums, ...pgEnums];\n}\n\nfunction generateDefaultValidationRules(db: DbMetadata, meta: EntityDbMetadata, configName: string): Code[] {\n // Add required rules for all not-null columns\n const fields = [...meta.primitives, ...meta.enums, ...meta.manyToOnes, ...meta.polymorphics];\n const rules = fields\n .filter((p) => p.notNull)\n .map((p) => {\n const { fieldName } = p;\n const isReactive = \"derived\" in p && p.derived === \"async\";\n if (\"lazy\" in p && p.lazy) {\n // Lazy columns use a rule that won't force-load (or falsely fail) an unloaded value on a persisted entity\n return code`${configName}.addRule(${newRequiredLazyFieldRule}(\"${fieldName}\"));`;\n } else if (isReactive) {\n return code`${configName}.addRule(\"${fieldName}\", ${newRequiredRule}(\"${fieldName}\"));`;\n } else {\n return code`${configName}.addRule(${newRequiredRule}(\"${fieldName}\"));`;\n }\n });\n // Add STI discriminator cannot change\n if (meta.stiDiscriminatorField) {\n const field = meta.enums.find((e) => e.fieldName === meta.stiDiscriminatorField) ?? fail(\"STI field not found\");\n rules.push(code`${configName}.addRule(${cannotBeUpdated}(\"${field.fieldName}\"));`);\n }\n // Add STI type must match\n const stiEntities = getStiEntities(db.entities);\n if (stiEntities.size > 0) {\n for (const m2o of meta.manyToOnes) {\n // The `m2o.otherEntity` may already be pointing at the subtype, but stiEntities has subtypes in it as well...\n const target = stiEntities.get(m2o.otherEntity.name);\n if (target && m2o.otherEntity.name !== target.base.name) {\n rules.push(code`${configName}.addRule(\"${m2o.fieldName}\", ${mustBeSubType}(\"${m2o.fieldName}\"));`);\n }\n }\n }\n // Add subtype specialization must match\n if (meta.baseType) {\n meta.manyToOnes\n .filter((m2o) =>\n meta.baseType?.manyToOnes?.find(\n (o) => o.fieldName === m2o.fieldName && o.otherEntity.name !== m2o.otherEntity.name,\n ),\n )\n .forEach((m2o) => {\n rules.push(code`${configName}.addRule(\"${m2o.fieldName}\", ${mustBeSubType}(\"${m2o.fieldName}\"));`);\n });\n }\n return rules;\n}\n\n// Make our opts type\nfunction generateOptsFields(meta: EntityDbMetadata): Code[] {\n const primitives = meta.primitives.map((field) => {\n const { fieldName, fieldType, notNull, derived } = field;\n if (derived) return code``;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${fieldType}${maybeUnionNull(notNull)};`;\n });\n const enums = meta.enums.map((field) => {\n const { fieldName, enumType, notNull, isArray, derived } = field;\n if (meta.stiDiscriminatorField === fieldName || derived) {\n // Don't include the discriminator as an opt b/c we'll infer it from the instance type\n return code``;\n } else if (isArray) {\n // Arrays are always optional and we'll default to `[]`\n return code`${fieldName}?: ${enumType}[];`;\n } else {\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${enumType}${maybeUnionNull(notNull)};`;\n }\n });\n const pgEnums = meta.pgEnums.map((field) => {\n const { fieldName, enumType, notNull } = field;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${enumType}${maybeUnionNull(notNull)};`;\n });\n const m2o = meta.manyToOnes\n .filter(({ derived }) => !derived) // Skip ReactiveReferences (derived m2o)\n // If a `group: { subType: SmallPublisherGroup }` is specializing this relation, that's\n // fine for most things, but not the `SmallPublisherOpts`, b/c it will break the contravariance\n // of `Publisher.setOpts` and `SmallPublisher.setOpts`\n .filter(({ fieldName }) => !meta.baseType?.manyToOnes.find((o) => o.fieldName === fieldName))\n .map((field) => {\n const { fieldName, otherEntity, notNull } = field;\n const maybeNull = maybeUnionNull(notNull);\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${otherEntity.type} | ${otherEntity.idType} ${maybeNull};`;\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type} | null;`;\n });\n const o2m = meta.oneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type}[];`;\n });\n const m2m = meta.manyToManys\n .filter(({ derived }) => !derived) // Skip ReactiveManyToManys\n .map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type}[];`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${enumType}[];`;\n });\n const polys = meta.polymorphics.map((field) => {\n const { fieldName, notNull, fieldType } = field;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${fieldType};`;\n });\n return [...primitives, ...enums, ...pgEnums, ...m2o, ...polys, ...o2o, ...o2m, ...m2m, ...m2mEnum];\n}\n\n// Make our fields type\nfunction generateFieldsType(meta: EntityDbMetadata, idType: \"string\" | \"number\"): Code[] {\n const id = code`id: { kind: \"primitive\"; type: ${idType}; unique: ${true}; nullable: never };`;\n const primitives = meta.primitives.map((field) => {\n const { fieldName, fieldType, notNull, unique, derived } = field;\n return code`${fieldName}: { kind: \"primitive\"; type: ${fieldType}; unique: ${unique}; nullable: ${undefinedOrNever(\n notNull,\n )}, derived: ${derived !== false} };`;\n });\n const enums = meta.enums.map((field) => {\n const { fieldName, enumType, notNull, isArray } = field;\n if (isArray) {\n // Arrays are always optional and we'll default to `[]`\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}[]; nullable: never };`;\n } else {\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}; nullable: ${undefinedOrNever(notNull)} };`;\n }\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType, notNull }) => {\n const nullable = undefinedOrNever(notNull);\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}; nullable: ${nullable}; native: true };`;\n });\n const m2o = meta.manyToOnes.map(({ fieldName, otherEntity, notNull, derived }) => {\n return code`${fieldName}: { kind: \"m2o\"; type: ${otherEntity.type}; nullable: ${undefinedOrNever(\n notNull,\n )}, derived: ${derived !== false} };`;\n });\n const polys = meta.polymorphics.map(({ fieldName, notNull, fieldType }) => {\n return code`${fieldName}: { kind: \"poly\"; type: ${fieldType}; nullable: ${undefinedOrNever(notNull)} };`;\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"m2m\"; type: ${otherEntity.type} };`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}: { kind: \"m2mEnum\"; type: ${enumType} };`;\n });\n const o2m = meta.oneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"o2m\"; type: ${otherEntity.type} };`;\n });\n const lo2m = meta.largeOneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"o2m\"; type: ${otherEntity.type} };`;\n });\n return [id, ...primitives, ...enums, ...pgEnums, ...m2o, ...polys, ...m2m, ...m2mEnum, ...o2m, ...lo2m];\n}\n\n// We know the OptIds types are only used in partials, so we make everything optional.\n// This especially needs to be the case b/c both `book: ...` and `bookId: ...` will be\n// in the partial type and of course the caller will only be setting one.\nfunction generateOptIdsFields(meta: EntityDbMetadata): Code[] {\n const m2o = meta.manyToOnes\n .filter(({ derived }) => !derived) // Skip ReactiveReferences\n .map(({ fieldName, otherEntity }) => {\n return code`${fieldName}Id?: ${otherEntity.idType} | null;`;\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}Id?: ${otherEntity.idType} | null;`;\n });\n const o2m = meta.oneToManys.map(({ singularName, otherEntity }) => {\n return code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;\n });\n const m2m = meta.manyToManys\n .filter(({ derived }) => !derived) // Skip ReactiveManyToManys\n .map(({ singularName, otherEntity }) => {\n return code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;\n });\n const polys = meta.polymorphics.map(({ fieldName, fieldType }) => {\n return code`${fieldName}Id?: ${IdOf}<${fieldType}> | null;`;\n });\n return [...m2o, ...polys, ...o2o, ...o2m, ...m2m];\n}\n\nfunction generateFilterFields(metasByName: Record<string, EntityDbMetadata>, meta: EntityDbMetadata): Code[] {\n // Always allow filtering on null to do \"child.id is null\" for detecting \"has no children\"\n const maybeId = meta.baseClassName ? [] : [code`id?: ${ValueFilter}<${meta.entity.idName}, never> | null;`];\n const primitives = meta.primitives.map(({ fieldName, fieldType, notNull }) => {\n if (fieldType === \"boolean\") {\n return code`${fieldName}?: ${BooleanFilter}<${nullOrNever(notNull)}>;`;\n } else {\n return code`${fieldName}?: ${ValueFilter}<${fieldType}, ${nullOrNever(notNull)}>;`;\n }\n });\n const enums = meta.enums.map(({ fieldName, enumType, notNull, isArray }) => {\n const maybeArray = isArray ? \"[]\" : \"\";\n return code`${fieldName}?: ${ValueFilter}<${enumType}${maybeArray}, ${nullOrNever(notNull)}>;`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType, notNull }) => {\n return code`${fieldName}?: ${ValueFilter}<${enumType}, ${nullOrNever(notNull)}>;`;\n });\n const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${\n otherEntity.type\n }>, ${nullOrNever(notNull)}>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${FilterOf}<${\n st.entity.type\n }>, ${nullOrNever(notNull)}>;`;\n }),\n ];\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${FilterOf}<${\n st.entity.type\n }>, ${nullOrNever(otherColumnNotNull)}>;`;\n }),\n ];\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n // Enum m2m filters are membership filters, e.g. `{ logoColors: Color.Red }` / `{ logoColors: [Red, Green] }`.\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueFilter}<${enumType}, null | undefined>;`;\n });\n const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {\n return [\n code`${fieldName}?: ${EntityFilter}<${fieldType}, ${IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`,\n ...components.map((comp) => {\n const { type } = comp.otherEntity;\n return code`${fieldName}${type}?: ${EntityFilter}<${type}, ${IdOf}<${type}>, ${FilterOf}<${type}>, null>;`;\n }),\n ];\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o, ...o2o, ...o2m, ...m2m, ...m2mEnum, ...polys];\n}\n\nfunction generateGraphQLFilterFields(metasByName: Record<string, EntityDbMetadata>, meta: EntityDbMetadata): Code[] {\n const maybeId = meta.baseClassName ? [] : [code`id?: ${ValueGraphQLFilter}<${meta.entity.idName}>;`];\n const primitives = meta.primitives.map(({ fieldName, fieldType }) => {\n if (fieldType === \"boolean\") {\n return code`${fieldName}?: ${BooleanGraphQLFilter};`;\n } else {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${fieldType}>;`;\n }\n });\n const enums = meta.enums.map(({ fieldName, enumType, isArray }) => {\n const maybeArray = isArray ? \"[]\" : \"\";\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}${maybeArray}>;`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}>;`;\n });\n const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {\n const otherMeta = metasByName[otherEntity.name];\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${\n otherEntity.type\n }>, ${nullOrNever(notNull)}>;`,\n code`${fieldName}Id?: ${ValueGraphQLFilter}<${otherEntity.idType}>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${GraphQLFilterOf}<${\n st.entity.type\n }>, ${nullOrNever(notNull)}>;`;\n }),\n ];\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${GraphQLFilterOf}<${\n st.entity.type\n }>, ${nullOrNever(otherColumnNotNull)}>;`;\n }),\n ];\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}>;`;\n });\n const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${fieldType}, ${IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`,\n code`${fieldName}Id?: ${ValueGraphQLFilter}<${IdOf}<${fieldType}>>;`,\n ...components.map((comp) => {\n const { type } = comp.otherEntity;\n return code`${fieldName}${type}?: ${EntityGraphQLFilter}<${type}, ${IdOf}<${type}>, ${FilterOf}<${type}>, null>;`;\n }),\n ];\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o, ...o2o, ...o2m, ...m2m, ...m2mEnum, ...polys];\n}\n\nfunction generateOrderFields(meta: EntityDbMetadata): Code[] {\n const maybeId = meta.baseClassName ? [] : [code`id?: ${OrderBy};`];\n const primitives = meta.primitives.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const enums = meta.enums.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const m2o = meta.manyToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.orderType};`;\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o];\n}\n\nfunction generateFactoryExtrasType(meta: EntityDbMetadata): Code[] {\n function withName(fieldName: string): string {\n return `with${fieldName[0].toUpperCase() + fieldName.substring(1)}`;\n }\n const primitives = meta.primitives\n .filter((f) => f.derived === \"async\")\n .map((field) => {\n const { fieldName, fieldType, notNull } = field;\n return code`${withName(fieldName)}?: ${fieldType}${maybeUnionNull(notNull)};`;\n });\n const enums = meta.enums\n .filter((f) => f.derived === \"async\")\n .map((field) => {\n const { fieldName, enumType, notNull, isArray } = field;\n if (isArray) {\n return code`${withName(fieldName)}?: ${enumType}[];`;\n } else {\n return code`${withName(fieldName)}?: ${enumType}${maybeUnionNull(notNull)};`;\n }\n });\n return [...primitives, ...enums];\n}\n\nfunction createPrimitives(meta: EntityDbMetadata, entity: Entity, fieldDocs: Record<string, string>) {\n const primitives = meta.primitives.map((p) => {\n const { fieldName, fieldType, notNull } = p;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n\n // `lazy` columns are emitted as `LazyField` relations by `createLazyFields`, not as getters/setters\n if (p.lazy) return code``;\n\n let getter: Code;\n if (p.derived === \"async\") {\n getter = code`\n abstract readonly ${fieldName}: ${ReactiveField}<${entity.name}, ${p.fieldType}${maybeOptional}>;\n `;\n } else if (p.derived === \"sync\") {\n getter = code`\n abstract get ${fieldName}(): ${fieldType}${maybeOptional};\n `;\n } else if (p.zodSchema) {\n getter = code`\n get ${fieldName}(): ${Zod}.output<typeof ${p.zodSchema}>${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n } else {\n getter = code`\n get ${fieldName}(): ${fieldType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n }\n\n let setter: Code | string;\n // ...technically we should be checking a list of JS keywords\n const paramName = keywords.includes(fieldName) ? \"value\" : fieldName;\n if (p.protected) {\n // TODO Allow making the getter to be protected as well. And so probably remove it\n // from the Opts as well. Wonder how that works for required protected fields?\n //\n // We have to use a method of `set${fieldName}` because TS enforces getters/setters to have\n // same access level and currently we're leaving the getter as public.\n setter = code`\n protected set${pascalCase(fieldName)}(${paramName}: ${fieldType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${paramName});\n }\n `;\n } else if (p.derived) {\n setter = \"\";\n } else if (p.superstruct) {\n // We use `value` as the param name to not potentially conflict with the\n // name of the imported superstruct const that is passed to assert.\n setter = code`\n set ${fieldName}(value: ${fieldType}${maybeOptional}) {\n if (value) {\n ${SSAssert}(value, ${p.superstruct});\n }\n ${setField}(this, \"${fieldName}\", value);\n }\n `;\n } else if (p.zodSchema) {\n // We use `value` as the param name to not potentially conflict with the\n // name of the imported zod schema that is passed to parse.\n setter = code`\n set ${fieldName}(value: ${Zod}.input<typeof ${p.zodSchema}>${maybeOptional}) {\n if (value) {\n ${setField}(this, \"${fieldName}\", ${p.zodSchema}.parse(value));\n } else {\n ${setField}(this, \"${fieldName}\", value);\n }\n }\n `;\n } else {\n setter = code`\n set ${fieldName}(${paramName}: ${fieldType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${paramName});\n }\n `;\n }\n\n return code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter} ${setter}`;\n });\n return primitives;\n}\n\nfunction createRegularEnums(meta: EntityDbMetadata, entity: Entity, fieldDocs: Record<string, string>) {\n return meta.enums\n .filter((e) => !e.isArray)\n .flatMap((e) => {\n const { fieldName, enumType, enumDetailType, enumDetailsType, notNull, enumRows, derived } = e;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n const getByCode = code`${enumDetailType}.getByCode(this.${fieldName})`;\n\n let getter: Code;\n if (derived === \"async\") {\n getter = code`\n abstract readonly ${fieldName}: ${ReactiveField}<${entity.name}, ${enumType}${maybeOptional}>;\n `;\n } else if (derived === \"sync\") {\n getter = code`\n abstract get ${fieldName}(): ${enumType}${maybeOptional};\n `;\n } else {\n getter = code`\n get ${fieldName}(): ${enumType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n\n get ${fieldName}Details(): ${enumDetailsType}${maybeOptional} {\n return ${notNull ? getByCode : code`this.${fieldName} ? ${getByCode} : undefined`};\n }\n `;\n }\n\n let setter: Code;\n if (derived) {\n setter = code``;\n } else {\n setter = code`\n set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n }\n\n const codes = new Set(enumRows.map((r) => r.code));\n const shouldPrefixAccessors = meta.enums\n .filter((other) => other !== e)\n .some((other) => other.enumRows.some((r) => codes.has(r.code)));\n\n const accessors = enumRows.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row.code)}(): boolean {\n return ${getField}(this, \"${fieldName}\") === ${enumType}.${pascalCase(row.code)};\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createArrayEnums(meta: EntityDbMetadata, fieldDocs: Record<string, string>) {\n return meta.enums\n .filter((e) => e.isArray)\n .flatMap((e) => {\n const { fieldName, enumType, enumDetailType, enumDetailsType, enumRows } = e;\n const getter = code`\n get ${fieldName}(): ${enumType}[] {\n return ${getField}(this, \"${fieldName}\") || [];\n }\n\n get ${fieldName}Details(): ${enumDetailsType}[] {\n return this.${fieldName}.map(code => ${enumDetailType}.getByCode(code));\n }\n `;\n const setter = code`\n set ${fieldName}(${fieldName}: ${enumType}[]) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n\n const codes = new Set(enumRows.map((r) => r.code));\n const shouldPrefixAccessors = meta.enums\n .filter((other) => other !== e)\n .some((other) => other.enumRows.some((r) => codes.has(r.code)));\n\n const accessors = enumRows.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row.code)}(): boolean {\n return this.${fieldName}.includes(${enumType}.${pascalCase(row.code)});\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createPgEnums(meta: EntityDbMetadata, fieldDocs: Record<string, string>) {\n return meta.pgEnums.flatMap((e) => {\n const { fieldName, enumType, enumValues, notNull } = e;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n\n const getter = code`\n get ${fieldName}(): ${enumType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n const setter = code`\n set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n\n const codes = new Set(enumValues);\n const shouldPrefixAccessors = meta.pgEnums\n .filter((other) => other !== e)\n .some((other) => other.enumValues.some((r) => codes.has(r)));\n\n const accessors = enumValues.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row)}(): boolean {\n return this.${fieldName} === ${enumType}.${pascalCase(row)};\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createRelations(config: Config, meta: EntityDbMetadata, entity: Entity): Relation[] {\n // Add ManyToOne entities\n const m2o: Relation[] = meta.manyToOnes.map((m2o) => {\n const { fieldName, otherEntity, otherFieldName, notNull } = m2o;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n if (m2o.derived === \"async\") {\n const line = code`abstract readonly ${fieldName}: ${ReactiveReference}<${entity.name}, ${otherEntity.type}, ${maybeOptional}>;`;\n return { kind: \"abstract\", fieldName, line } as const;\n }\n const decl = code`${ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`;\n const init = code`${hasOne}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const m2oBase: Relation[] =\n meta.baseType?.manyToOnes\n // Skip m2os that are already specialized to a different otherEntity, i.e. `SmallPublisher.group: SmallPublisherGroup`\n .filter((m2o) => !meta.manyToOnes.find((o) => o.fieldName === m2o.fieldName))\n // Don't specialize hasReactiveReferences b/c they're fields, not getters\n .filter((m2o) => m2o.derived !== \"async\")\n .map((m2o) => {\n const { fieldName, otherEntity, notNull } = m2o;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n const decl = code`${ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add any recursive ManyToOne entities\n const m2oRecursive: Relation[] = meta.manyToOnes\n .filter((m2o) => m2o.otherEntity.name === meta.name)\n // Allow disabling recursive relations\n .filter(\n (m2o) =>\n // STI subtypes don't have their own key in config.entities (stripped by stripStiPlaceholders),\n // so look up the base class name to find skipRecursiveRelations config\n !(\n config.entities[meta.inheritanceType == \"sti\" && meta.baseClassName ? meta.baseClassName : meta.name]\n ?.relations?.[m2o.fieldName]?.skipRecursiveRelations === true\n ),\n )\n // Skip ReactiveReferences because they don't have an `other` side for us to use\n .filter((m2o) => !m2o.derived)\n .flatMap((m2o) => {\n const { fieldName: m2oName, otherFieldName, otherEntity } = m2o;\n const parentsField = `${plural(m2oName)}Recursive`;\n const maybeOneToOne = meta.oneToOnes.find((o2o) => o2o.fieldName === otherFieldName);\n const childrenField = maybeOneToOne ? `${plural(otherFieldName)}Recursive` : `${otherFieldName}Recursive`;\n return [\n {\n kind: \"concrete\",\n fieldName: parentsField,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveParents}(\"${m2oName}\", \"${childrenField}\")`,\n },\n {\n kind: \"concrete\",\n fieldName: childrenField,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveChildren}(\"${otherFieldName}\", \"${parentsField}\")`,\n },\n ];\n });\n\n // Add any recursive ManyToMany entities (self-referential m2m)\n const m2mRecursive: Relation[] = meta.manyToManys\n .filter((m2m) => m2m.otherEntity.name === meta.name)\n .filter((m2m) => !m2m.derived)\n // STI subtypes don't have their own key in config.entities (stripped by stripStiPlaceholders),\n // so look up the base class name to find skipRecursiveRelations config\n .filter(\n (m2m) =>\n !(\n config.entities[meta.inheritanceType == \"sti\" && meta.baseClassName ? meta.baseClassName : meta.name]\n ?.relations?.[m2m.fieldName]?.skipRecursiveRelations === true\n ),\n )\n .map((m2m) => {\n const { fieldName, otherFieldName, otherEntity } = m2m;\n return {\n kind: \"concrete\",\n fieldName: `${fieldName}Recursive`,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveM2m}(\"${fieldName}\", \"${otherFieldName}Recursive\")`,\n };\n });\n\n // Add OneToMany\n const o2m: Relation[] = meta.oneToManys.map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasMany}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const o2mBase: Relation[] =\n meta.baseType?.oneToManys\n // Skip o2ms that are already specialized to a different otherEntity, i.e. `SmallPublisherGroup.publishers: SmallPublisher`\n .filter((o2m) => !meta.oneToManys.find((o) => o.fieldName === o2m.fieldName))\n .map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add large OneToMany\n const lo2m: Relation[] = meta.largeOneToManys.map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${LargeCollection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasLargeMany}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add OneToOne\n const o2o: Relation[] = meta.oneToOnes.map((o2o) => {\n const { fieldName, otherEntity } = o2o;\n const decl = code`${OneToOneReference}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasOneToOne}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const o2oBase: Relation[] =\n meta.baseType?.oneToOnes.map((o2o) => {\n const { fieldName, otherEntity } = o2o;\n const decl = code`${OneToOneReference}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add ManyToMany\n const m2m: Relation[] = meta.manyToManys.map((m2m) => {\n const { fieldName, otherEntity } = m2m;\n const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;\n if (m2m.derived === \"async\") {\n const line = code`abstract readonly ${fieldName}: ${ReactiveManyToMany}<${entity.name}, ${otherEntity.type}>;`;\n return { kind: \"abstract\", fieldName, line, comment } as const;\n } else if (m2m.derived === \"otherSide\") {\n const decl = code`${ReactiveManyToManyOtherSide}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasReactiveManyToManyOtherSide}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n } else if (!m2m.derived) {\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasManyToMany}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n } else {\n assertNever(m2m.derived);\n }\n });\n // Specialize\n const m2mBase: Relation[] =\n meta.baseType?.manyToManys\n // Don't specialize hasReactiveManyToMany or hasReactiveManyToManyOtherSide b/c they're fields, not getters\n .filter((m2m) => !m2m.derived)\n .map((m2m) => {\n const { fieldName, otherEntity } = m2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add enum-backed ManyToMany (i.e. `Publisher.logoColors`)\n const m2mEnum: Relation[] = meta.manyToManyEnums.map((m2m) => {\n const { fieldName, enumType } = m2m;\n const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;\n const decl = code`${EnumCollection}<${entity.type}, ${enumType}>`;\n const init = code`${hasEnumCollection}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n });\n const m2mEnumBase: Relation[] =\n meta.baseType?.manyToManyEnums.map((m2m) => {\n const { fieldName, enumType } = m2m;\n const decl = code`${EnumCollection}<${entity.type}, ${enumType}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add large ManyToMany\n const lm2m: Relation[] = meta.largeManyToManys.map((m2m) => {\n const { joinTableName, fieldName, columnName, otherEntity, otherFieldName, otherColumnName } = m2m;\n const decl = code`${LargeCollection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`\n ${hasLargeManyToMany}(\n \"${joinTableName}\",\n \"${columnName}\",\n \"${otherFieldName}\",\n \"${otherColumnName}\",\n ${m2m.hasJoinTableId},\n );\n `;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add Polymorphic\n const polymorphic: Relation[] = meta.polymorphics.map((p) => {\n const { fieldName, notNull, fieldType } = p;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n const decl = code`${PolymorphicReference}<${entity.type}, ${fieldType}, ${maybeOptional}>`;\n const init = code`${hasOnePolymorphic}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add `lazy` primitives, which are exposed as `LazyField`s instead of getters/setters\n const lazy: Relation[] = meta.primitives\n .filter((p) => p.lazy)\n .map((p) => {\n const { fieldName, fieldType, notNull } = p;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n const decl = code`${LazyField}<${entity.type}, ${fieldType}${maybeOptional}>`;\n const init = code`${hasLazyField}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n return [\n o2m,\n o2mBase,\n lo2m,\n m2o,\n m2oBase,\n m2oRecursive,\n m2mRecursive,\n o2o,\n o2oBase,\n m2m,\n m2mBase,\n m2mEnum,\n m2mEnumBase,\n lm2m,\n polymorphic,\n lazy,\n ].flat();\n}\n\n/** Makes the field required if there is a `NOT NULL` and no db-or-config default. */\nfunction maybeOptionalOrDefault(\n field: PrimitiveField | EnumField | PgEnumField | ManyToOneField | PolymorphicField,\n): string {\n const hasDefault =\n (field.kind !== \"m2o\" && field.kind !== \"poly\" && fieldHasDefaultValue(field)) || field.hasConfigDefault;\n return !field.notNull || hasDefault ? \"?\" : \"\";\n}\n\nfunction maybeUnionNull(notNull: boolean): string {\n return notNull ? \"\" : \" | null\";\n}\n\nfunction maybeUndefined(notNull: boolean): string {\n return notNull ? \"\" : \" | undefined\";\n}\n\nfunction undefinedOrNever(notNull: boolean): string {\n return notNull ? \"never\" : \"undefined\";\n}\n\nfunction nullOrNever(notNull: boolean): string {\n return notNull ? \"never\" : \"null\";\n}\n\n/** Prefixes the comment with a newline, so it gets its own line. */\nfunction maybeComment(comment: string | undefined): string {\n return comment ? ` ${comment}\\n` : \"\";\n}\n\n/**\n * Renders a field's `.md` doc (plus its `@generated` tag) as a bare JSDoc block, or `\"\"` if undocumented.\n *\n * Reuses the same {@link buildJSDocBlock} formatter the `.md` sync uses for hand-written `Entity.ts`\n * members. Used directly before a getter template (which supplies its own leading newline), so the\n * JSDoc lands immediately above the getter with no intervening blank line.\n */\nfunction fieldDocBlock(fieldDocs: Record<string, string>, fieldName: string, entityName: string): string {\n const doc = fieldDocs[fieldName];\n return doc ? buildJSDocBlock(`${doc}\\n${generatedTag(entityName)}`, 0) : \"\";\n}\n\n/** Like {@link fieldDocBlock} but wrapped in newlines, i.e. for inline `readonly x = ...` relation decls. */\nfunction relationDocBlock(fieldDocs: Record<string, string>, fieldName: string, entityName: string): string {\n const block = fieldDocBlock(fieldDocs, fieldName, entityName);\n return block ? `\\n${block}\\n` : \"\";\n}\n\nexport function getIdType(config: Config) {\n switch (config.idType) {\n case \"untagged-string\":\n case \"tagged-string\":\n case undefined:\n return \"string\";\n case \"number\":\n return \"number\";\n default:\n return assertNever(config.idType);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"generateEntityCodegenFile.js","names":[],"sources":["../src/generateEntityCodegenFile.ts"],"sourcesContent":["import { camelCase, pascalCase } from \"change-case\";\nimport pluralize from \"pluralize\";\nimport { type Code, code, imp, joinCode } from \"ts-poet\";\n\nimport { type Config } from \"./config.ts\";\nimport { type ParsedDoc, buildJSDocBlock, generatedTag } from \"./docs/index.ts\";\nimport {\n type DbMetadata,\n type Entity,\n type EntityDbMetadata,\n type EnumField,\n type ManyToOneField,\n type PgEnumField,\n type PolymorphicField,\n type PrimitiveField,\n type PrimitiveTypescriptType,\n} from \"./EntityDbMetadata.ts\";\nimport { type ScopeMember } from \"./findEntityScopes.ts\";\nimport { getStiEntities } from \"./inheritance.ts\";\nimport { keywords } from \"./keywords.ts\";\nimport {\n BaseEntity,\n BooleanFilter,\n BooleanGraphQLFilter,\n Changes,\n Collection,\n ConfigApi,\n DeepPartialOrNull,\n EntityFilter,\n EntityGraphQLFilter,\n EntityManager,\n EntityMetadata,\n EnumCollection,\n FieldsOf,\n FilterOf,\n Flavor,\n GraphQLFilterOf,\n IdOf,\n JsonPayload,\n LargeCollection,\n LazyField,\n Lens,\n LoadHint,\n Loaded,\n ManyToOneReference,\n MaybeAbstractEntityConstructor,\n OneToOneReference,\n OptsOf,\n OrderBy,\n PartialOrNull,\n PolymorphicReference,\n ProjectEntity,\n ReactiveField,\n ReactiveManyToMany,\n ReactiveManyToManyOtherSide,\n ReactiveReference,\n ReadOnlyCollection,\n RelationsOf,\n SSAssert,\n Scope,\n TaggedId,\n ToJsonHint,\n ValueFilter,\n ValueGraphQLFilter,\n Zod,\n cannotBeUpdated,\n failNoIdYet,\n getField,\n hasEnumCollection,\n hasLargeMany,\n hasLargeManyToMany,\n hasLazyField,\n hasMany,\n hasManyToMany,\n hasOne,\n hasOnePolymorphic,\n hasOneToOne,\n hasReactiveManyToManyOtherSide,\n hasRecursiveChildren,\n hasRecursiveM2m,\n hasRecursiveParents,\n isEntity,\n isLoaded,\n loadLens,\n mustBeSubType,\n newChangesProxy,\n newRequiredLazyFieldRule,\n newRequiredRule,\n newScopeFn,\n nowUTC,\n setField,\n setOpts,\n toIdOf,\n toJSON,\n updatePartial,\n} from \"./symbols.ts\";\nimport { tsdocComments } from \"./tsdoc.ts\";\nimport { assertNever, fail, uncapitalize } from \"./utils.ts\";\n\nconst { plural } = pluralize;\n\nexport interface ColumnMetaData {\n fieldType: PrimitiveTypescriptType;\n}\n\n// A local type just for tracking abstract vs. concrete relations\ntype Relation =\n // I.e. `abstract ReactiveReference` that the user must implement\n | { kind: \"abstract\"; fieldName: string; line: Code; comment?: string }\n // I.e. a `get author(): ManyToOne<...>`\n | { kind: \"concrete\"; fieldName: string; decl: Code; init: Code; comment?: string }\n // I.e. a `get author(): { super.author as ... }`\n | { kind: \"super\"; fieldName: string; decl: Code; comment?: string };\n\n/** Creates the base class with the boilerplate annotations. */\nexport function generateEntityCodegenFile(\n config: Config,\n dbMeta: DbMetadata,\n meta: EntityDbMetadata,\n scopeMembers: ScopeMember[] = [],\n docs?: ParsedDoc,\n): Code {\n const { entitiesByName: metasByName } = dbMeta;\n const { entity, tagName } = meta;\n const entityName = entity.name;\n\n // Per-field `.md` docs to inject as JSDocs on the codegen'd getters/relations (empty if docs are off)\n const fieldDocs = docs?.fields ?? {};\n\n // Avoid using `do` as a variable name b/c it's a reserved keyword\n const varName = keywords.includes(tagName) ? uncapitalize(entityName) : tagName;\n\n const primitives = createPrimitives(meta, entity, fieldDocs); // Add the primitives\n primitives.push(...createRegularEnums(meta, entity, fieldDocs)); // Add ManyToOne enums\n primitives.push(...createArrayEnums(meta, fieldDocs)); // Add integer[] enums\n primitives.push(...createPgEnums(meta, fieldDocs)); // Add native enums\n const relations = createRelations(config, meta, entity);\n\n const configName = `${camelCase(entityName)}Config`;\n const scopeFnName = `${camelCase(entityName)}Scope`;\n const metadata = imp(`${camelCase(entityName)}Meta@./entities.ts`);\n\n const contextType = config.contextType ? imp(`t:${config.contextType}`) : \"{}\";\n const factoryMethod = imp(`new${entity.name}@./entities.ts`);\n\n // If we're not tagged-strings, detag on the way out of id\n const idMaybeCode =\n config.idType === \"tagged-string\"\n ? code`return this.idTaggedMaybe;`\n : code`return ${toIdOf}(${metadata}, this.idTaggedMaybe);`;\n const idType = getIdType(config);\n\n const maybeSoftDeleteMethods = meta.deletedAt\n ? code`\n get isSoftDeletedEntity(): boolean {\n return this.${meta.deletedAt.fieldName} !== undefined;\n }\n\n softDelete(): void {\n if (this.isSoftDeletedEntity) return;\n this.${meta.deletedAt.fieldName} = ${nowUTCCall(config, meta.deletedAt)};\n }\n `\n : \"\";\n\n // Set up the codegen artifacts to extend from the base type if necessary\n const baseEntity = dbMeta.entities.find((e) => e.name === meta.baseClassName);\n const subEntities = dbMeta.entities.filter((e) => e.baseClassName === meta.name);\n const base = baseEntity?.entity.typeSymbol ?? code`${BaseEntity}<${EntityManager}, ${idType}>`;\n const maybeBaseFields = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.fieldsName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseOpts = baseEntity ? code`extends ${baseEntity.entity.optsType}` : \"\";\n const maybeBaseIdOpts = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.idsOptsName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseFilter = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.filterName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseGqlFilter = baseEntity\n ? code`extends ${imp(\"t:\" + baseEntity.entity.graphqlFilterName + \"@./entities.ts\")}`\n : \"\";\n const maybeBaseOrder = baseEntity ? code`extends ${baseEntity.entity.orderType}` : \"\";\n const maybePreventBaseTypeInstantiation = meta.abstract\n ? code`\n if (this.constructor === ${entity.type} && !(em as any).fakeInstance) {\n throw new Error(\\`${entity.type} must be instantiated via a subtype\\`);\n }`\n : \"\";\n\n let maybeOtherTypeChanges;\n if (subEntities.length > 0) {\n maybeOtherTypeChanges = joinCode(\n // Pass `K = keyof Publisher | keyof SmallPublisher | keyof LargePublisher` to `changes` so that\n // our subtypes can have `SmallPublisher.changes(): Changes<SmallPublisher>` be covariant, which\n // will break if it adds a key to `Changes.fields` that `Publisher.changes()` does not include.\n //\n // type A1 = { foo: 1 | 2 };\n // type A2 = { foo: 1 | 2 | 3 };\n // type A3 = A2 extends A1 ? 1 : 2;\n //\n // A3 will be 2 because the extra 3 breaks code written against A1.foo.\n //\n // So essentially we're pre-emptively our subtypes \"3\".\n [\n code`, `,\n ...[meta, ...subEntities].map(\n (e) => code`keyof (${FieldsOf}<${e.entity.type}> & ${RelationsOf}<${e.entity.type}>)`,\n ),\n ],\n { on: \"|\" },\n );\n } else {\n maybeOtherTypeChanges = \"\";\n }\n\n let maybeOtherLoaded;\n if (baseEntity) {\n maybeOtherLoaded = code`| ${baseEntity.entity.type}`;\n } else {\n maybeOtherLoaded = \"\";\n }\n\n return code`\n export type ${entity.idName} = ${Flavor}<${idType}, \"${baseEntity ? baseEntity.name : entityName}\">;\n\n ${generatePolymorphicTypes(meta)}\n\n export interface ${entity.fieldsName} ${maybeBaseFields} {\n ${generateFieldsType(meta, idType)}\n }\n\n export interface ${entity.optsName} ${maybeBaseOpts} {\n ${generateOptsFields(meta)}\n }\n\n export interface ${entity.idsOptsName} ${maybeBaseIdOpts} {\n ${generateOptIdsFields(meta)}\n }\n\n export interface ${entity.filterName} ${maybeBaseFilter} {\n ${generateFilterFields(metasByName, meta)}\n }\n\n export interface ${entity.graphqlFilterName} ${maybeBaseGqlFilter} {\n ${generateGraphQLFilterFields(metasByName, meta)}\n }\n\n export interface ${entity.orderName} ${maybeBaseOrder} {\n ${generateOrderFields(meta)}\n }\n\n export interface ${entity.factoryExtrasName} {\n ${generateFactoryExtrasType(meta)}\n }\n\n export interface ${entity.scopesName} {\n ${scopeMembers.map((member) => code`${member.name}: ${member.type};`)}\n }\n\n export type ${entity.scopeName} = ${Scope}<${entity.type}, ${entity.scopesName}>;\n\n export const ${configName} = new ${ConfigApi}<${entity.type}, ${contextType}>();\n\n export const ${scopeFnName} = ${newScopeFn}<${entity.type}, ${entity.scopeName}>(\"${entityName}\");\n\n ${generateDefaultValidationRules(dbMeta, meta, configName)}\n ${generateDefaultValues(config, meta, configName)};\n\n declare module \"joist-core\" {\n interface TypeMap {\n ${entityName}: {\n entityType: ${entityName};\n filterType: ${entity.filterName};\n gqlFilterType: ${entity.graphqlFilterName};\n orderType: ${entity.orderName};\n optsType: ${entity.optsName};\n fieldsType: ${entity.fieldsName};\n optIdsType: ${entity.idsOptsName};\n factoryExtrasType: ${entity.factoryExtrasName};\n factoryOptsType: Parameters<typeof ${factoryMethod}>[1];\n };\n }\n }\n\n export abstract class ${entityName}Codegen extends ${base} implements ${ProjectEntity} {\n static readonly tagName = \"${tagName}\";\n static readonly metadata: ${EntityMetadata}<${entity.type}>;\n\n declare readonly __type: {\n ${baseEntity ? `0: \"${baseEntity.name}\",` : \"\"}\n ${baseEntity ? 1 : 0}: \"${entityName}\", \n };\n\n ${relations\n .filter((r) => r.kind === \"abstract\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}${r.line}${maybeComment(r.comment)}`;\n })}\n ${relations\n .filter((r) => r.kind === \"concrete\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}readonly ${r.fieldName}: ${r.decl} = ${r.init};${maybeComment(r.comment)}`;\n })}\n ${relations\n .filter((r) => r.kind === \"super\")\n .map((r) => {\n return code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}declare readonly ${r.fieldName}: ${r.decl};${maybeComment(r.comment)}`;\n })}\n\n get id(): ${entity.idName} {\n return this.idMaybe || ${failNoIdYet}(\"${entityName}\");\n }\n\n get idMaybe(): ${entity.idName} | undefined {\n ${idMaybeCode}\n }\n\n get idTagged(): ${TaggedId} {\n return this.idTaggedMaybe || ${failNoIdYet}(\"${entityName}\");\n }\n\n get idTaggedMaybe(): ${TaggedId} | undefined {\n return ${getField}(this, \"id\");\n }\n\n ${primitives} \n\n ${tsdocComments.entity.setPartial}\n set(opts: Partial<${entity.optsName}>): void {\n ${setOpts}(this as any as ${entityName}, opts);\n }\n\n ${tsdocComments.entity.setPartial}\n setPartial(opts: ${PartialOrNull}<${entity.optsName}>): void {\n ${setOpts}(this as any as ${entityName}, opts as ${OptsOf}<${entityName}>, { partial: true });\n }\n\n ${tsdocComments.entity.setDeepPartial}\n setDeepPartial(opts: ${DeepPartialOrNull}<${entityName}>): Promise<void> {\n return ${updatePartial}(this as any as ${entityName}, opts);\n }\n\n ${tsdocComments.entity.changes}\n get changes(): ${Changes}<${entityName}${maybeOtherTypeChanges}> {\n return ${newChangesProxy}(this) as any;\n }\n\n ${maybeSoftDeleteMethods}\n\n ${tsdocComments.entity.load}\n load<U, V>(fn: (lens: ${Lens}<${entity.type}>) => ${Lens}<U, V>, opts: { sql?: boolean } = {}): Promise<V> {\n return ${loadLens}(this as any as ${entityName}, fn, opts);\n }\n\n ${tsdocComments.entity.populate}\n populate<const H extends ${LoadHint}<${entityName}>>(hint: H): Promise<${Loaded}<${entityName}, H>>;\n populate<const H extends ${LoadHint}<${entityName}>>(opts: { hint: H, forceReload?: boolean }): Promise<${Loaded}<${entityName}, H>>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(hint: H, fn: (${varName}: Loaded<${entityName}, H>) => V): Promise<V>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(opts: { hint: H, forceReload?: boolean }, fn: (${varName}: Loaded<${entityName}, H>) => V): Promise<V>;\n populate<const H extends ${LoadHint}<${entityName}>, V>(hintOrOpts: any, fn?: (${varName}: Loaded<${entityName}, H>) => V): Promise<${Loaded}<${entityName}, H> | V> {\n return this.em.populate(this as any as ${entityName}, hintOrOpts, fn);\n }\n\n ${tsdocComments.entity.isLoaded}\n isLoaded<const H extends ${LoadHint}<${entityName}>>(hint: H): this is ${Loaded}<${entityName}${maybeOtherLoaded}, H> {\n return ${isLoaded}(this as any as ${entityName}, hint);\n }\n\n ${tsdocComments.entity.toJSON}\n toJSON(): object;\n toJSON<const H extends ${ToJsonHint}<${entityName}>>(hint: H): Promise<${JsonPayload}<${entityName}, H>>;\n toJSON(hint?: any): object {\n return !hint || typeof hint === \"string\" ? super.toJSON() : ${toJSON}(this, hint);\n }\n }\n `;\n}\n\nfunction fieldHasDefaultValue(field: PrimitiveField | EnumField | PgEnumField): boolean {\n let { columnDefault } = field;\n // If there's no default at all, return false\n if (columnDefault === null) {\n return false;\n }\n // Even though default is defined as a `number | boolean | string | null`, in reality pg-structure\n // only ever returns a `string | null`, so we handle that here\n columnDefault = columnDefault.toString();\n const fieldType = field.kind === \"primitive\" ? field.fieldType : \"number\";\n // Try to validate that we actually got a primitive value and not arbitrary SQL\n return (\n (fieldType === \"number\" && !isNaN(parseInt(columnDefault))) ||\n (fieldType === \"bigint\" && !isNaN(parseInt(columnDefault))) ||\n (fieldType === \"string\" && /^'.*'$/.test(columnDefault)) ||\n (fieldType === \"boolean\" && [\"true\", \"false\"].includes(columnDefault))\n );\n}\n\nfunction generatePolymorphicTypes(meta: EntityDbMetadata) {\n return meta.polymorphics.flatMap((pf) => [\n code`export type ${pf.fieldType} = ${pf.components.map((c) => code`| ${c.otherEntity.type}`)};`,\n code`export function get${pf.fieldType}Constructors(): ${MaybeAbstractEntityConstructor}<${pf.fieldType}>[] {\n return [${pf.components.map((c) => code`${c.otherEntity.typeSymbol},`)}];\n }`,\n code`export function is${pf.fieldType}(maybeEntity: unknown): maybeEntity is ${pf.fieldType} {\n return ${isEntity}(maybeEntity) && get${pf.fieldType}Constructors().some((type) => maybeEntity instanceof type);\n }`,\n ]);\n}\n\nfunction generateDefaultValues(config: Config, meta: EntityDbMetadata, configName: string): Code[] {\n // Skip sync defaults b/c we'll just stomp the getter; leave async in case they're RQFs\n // where the row must fundamentally be inserted with a dummy value before the real value is calced.\n function notSync(field: PrimitiveField | EnumField): boolean {\n return \"derived\" in field && field.derived !== \"sync\";\n }\n\n const primitives = meta.primitives\n .filter((field) => fieldHasDefaultValue(field))\n .filter(notSync)\n .map(({ fieldName, columnDefault }) => {\n return code`${configName}.setDefault(\"${fieldName}\", ${columnDefault});`;\n });\n const pgEnums = meta.pgEnums\n .filter((field) => !!field.columnDefault)\n .map(({ fieldName, columnDefault }) => {\n return code`${configName}.setDefault(\"${fieldName}\", ${columnDefault});`;\n });\n const enums = meta.enums\n .filter((field) => !!field.columnDefault && !field.isArray)\n .filter(notSync)\n .map(({ fieldName, columnDefault, enumRows, enumType, columnName }) => {\n const defaultRow =\n enumRows.find((r) => r.id === Number(columnDefault)) ||\n fail(`Invalid default value ${columnDefault} for ${meta.tableName}.${columnName}`);\n return code`${configName}.setDefault(\"${fieldName}\", ${enumType}.${pascalCase(defaultRow.code)});`;\n });\n return [...primitives, ...enums, ...pgEnums];\n}\n\nfunction generateDefaultValidationRules(db: DbMetadata, meta: EntityDbMetadata, configName: string): Code[] {\n // Add required rules for all not-null columns\n const fields = [...meta.primitives, ...meta.enums, ...meta.manyToOnes, ...meta.polymorphics];\n const rules = fields\n .filter((p) => p.notNull)\n .map((p) => {\n const { fieldName } = p;\n const isReactive = \"derived\" in p && p.derived === \"async\";\n if (\"lazy\" in p && p.lazy) {\n // Lazy columns use a rule that won't force-load (or falsely fail) an unloaded value on a persisted entity\n return code`${configName}.addRule(${newRequiredLazyFieldRule}(\"${fieldName}\"));`;\n } else if (isReactive) {\n return code`${configName}.addRule(\"${fieldName}\", ${newRequiredRule}(\"${fieldName}\"));`;\n } else {\n return code`${configName}.addRule(${newRequiredRule}(\"${fieldName}\"));`;\n }\n });\n // Add STI discriminator cannot change\n if (meta.stiDiscriminatorField) {\n const field = meta.enums.find((e) => e.fieldName === meta.stiDiscriminatorField) ?? fail(\"STI field not found\");\n rules.push(code`${configName}.addRule(${cannotBeUpdated}(\"${field.fieldName}\"));`);\n }\n // Add STI type must match\n const stiEntities = getStiEntities(db.entities);\n if (stiEntities.size > 0) {\n for (const m2o of meta.manyToOnes) {\n // The `m2o.otherEntity` may already be pointing at the subtype, but stiEntities has subtypes in it as well...\n const target = stiEntities.get(m2o.otherEntity.name);\n if (target && m2o.otherEntity.name !== target.base.name) {\n rules.push(code`${configName}.addRule(\"${m2o.fieldName}\", ${mustBeSubType}(\"${m2o.fieldName}\"));`);\n }\n }\n }\n // Add subtype specialization must match\n if (meta.baseType) {\n meta.manyToOnes\n .filter((m2o) =>\n meta.baseType?.manyToOnes?.find(\n (o) => o.fieldName === m2o.fieldName && o.otherEntity.name !== m2o.otherEntity.name,\n ),\n )\n .forEach((m2o) => {\n rules.push(code`${configName}.addRule(\"${m2o.fieldName}\", ${mustBeSubType}(\"${m2o.fieldName}\"));`);\n });\n }\n return rules;\n}\n\n// Make our opts type\nfunction generateOptsFields(meta: EntityDbMetadata): Code[] {\n const primitives = meta.primitives.map((field) => {\n const { fieldName, fieldType, notNull, derived } = field;\n if (derived) return code``;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${fieldType}${maybeUnionNull(notNull)};`;\n });\n const enums = meta.enums.map((field) => {\n const { fieldName, enumType, notNull, isArray, derived } = field;\n if (meta.stiDiscriminatorField === fieldName || derived) {\n // Don't include the discriminator as an opt b/c we'll infer it from the instance type\n return code``;\n } else if (isArray) {\n // Arrays are always optional and we'll default to `[]`\n return code`${fieldName}?: ${enumType}[];`;\n } else {\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${enumType}${maybeUnionNull(notNull)};`;\n }\n });\n const pgEnums = meta.pgEnums.map((field) => {\n const { fieldName, enumType, notNull } = field;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${enumType}${maybeUnionNull(notNull)};`;\n });\n const m2o = meta.manyToOnes\n .filter(({ derived }) => !derived) // Skip ReactiveReferences (derived m2o)\n // If a `group: { subType: SmallPublisherGroup }` is specializing this relation, that's\n // fine for most things, but not the `SmallPublisherOpts`, b/c it will break the contravariance\n // of `Publisher.setOpts` and `SmallPublisher.setOpts`\n .filter(({ fieldName }) => !meta.baseType?.manyToOnes.find((o) => o.fieldName === fieldName))\n .map((field) => {\n const { fieldName, otherEntity, notNull } = field;\n const maybeNull = maybeUnionNull(notNull);\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${otherEntity.type} | ${otherEntity.idType} ${maybeNull};`;\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type} | null;`;\n });\n const o2m = meta.oneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type}[];`;\n });\n const m2m = meta.manyToManys\n .filter(({ derived }) => !derived) // Skip ReactiveManyToManys\n .map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.type}[];`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${enumType}[];`;\n });\n const polys = meta.polymorphics.map((field) => {\n const { fieldName, notNull, fieldType } = field;\n return code`${fieldName}${maybeOptionalOrDefault(field)}: ${fieldType};`;\n });\n return [...primitives, ...enums, ...pgEnums, ...m2o, ...polys, ...o2o, ...o2m, ...m2m, ...m2mEnum];\n}\n\n// Make our fields type\nfunction generateFieldsType(meta: EntityDbMetadata, idType: \"string\" | \"number\"): Code[] {\n const id = code`id: { kind: \"primitive\"; type: ${idType}; unique: ${true}; nullable: never };`;\n const primitives = meta.primitives.map((field) => {\n const { fieldName, fieldType, notNull, unique, derived } = field;\n return code`${fieldName}: { kind: \"primitive\"; type: ${fieldType}; unique: ${unique}; nullable: ${undefinedOrNever(\n notNull,\n )}, derived: ${derived !== false} };`;\n });\n const enums = meta.enums.map((field) => {\n const { fieldName, enumType, notNull, isArray } = field;\n if (isArray) {\n // Arrays are always optional and we'll default to `[]`\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}[]; nullable: never };`;\n } else {\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}; nullable: ${undefinedOrNever(notNull)} };`;\n }\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType, notNull }) => {\n const nullable = undefinedOrNever(notNull);\n return code`${fieldName}: { kind: \"enum\"; type: ${enumType}; nullable: ${nullable}; native: true };`;\n });\n const m2o = meta.manyToOnes.map(({ fieldName, otherEntity, notNull, derived }) => {\n return code`${fieldName}: { kind: \"m2o\"; type: ${otherEntity.type}; nullable: ${undefinedOrNever(\n notNull,\n )}, derived: ${derived !== false} };`;\n });\n const polys = meta.polymorphics.map(({ fieldName, notNull, fieldType }) => {\n return code`${fieldName}: { kind: \"poly\"; type: ${fieldType}; nullable: ${undefinedOrNever(notNull)} };`;\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"m2m\"; type: ${otherEntity.type} };`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}: { kind: \"m2mEnum\"; type: ${enumType} };`;\n });\n const o2m = meta.oneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"o2m\"; type: ${otherEntity.type} };`;\n });\n const lo2m = meta.largeOneToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}: { kind: \"o2m\"; type: ${otherEntity.type} };`;\n });\n return [id, ...primitives, ...enums, ...pgEnums, ...m2o, ...polys, ...m2m, ...m2mEnum, ...o2m, ...lo2m];\n}\n\n// We know the OptIds types are only used in partials, so we make everything optional.\n// This especially needs to be the case b/c both `book: ...` and `bookId: ...` will be\n// in the partial type and of course the caller will only be setting one.\nfunction generateOptIdsFields(meta: EntityDbMetadata): Code[] {\n const m2o = meta.manyToOnes\n .filter(({ derived }) => !derived) // Skip ReactiveReferences\n .map(({ fieldName, otherEntity }) => {\n return code`${fieldName}Id?: ${otherEntity.idType} | null;`;\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}Id?: ${otherEntity.idType} | null;`;\n });\n const o2m = meta.oneToManys.map(({ singularName, otherEntity }) => {\n return code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;\n });\n const m2m = meta.manyToManys\n .filter(({ derived }) => !derived) // Skip ReactiveManyToManys\n .map(({ singularName, otherEntity }) => {\n return code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;\n });\n const polys = meta.polymorphics.map(({ fieldName, fieldType }) => {\n return code`${fieldName}Id?: ${IdOf}<${fieldType}> | null;`;\n });\n return [...m2o, ...polys, ...o2o, ...o2m, ...m2m];\n}\n\nfunction generateFilterFields(metasByName: Record<string, EntityDbMetadata>, meta: EntityDbMetadata): Code[] {\n // Always allow filtering on null to do \"child.id is null\" for detecting \"has no children\"\n const maybeId = meta.baseClassName ? [] : [code`id?: ${ValueFilter}<${meta.entity.idName}, never> | null;`];\n const primitives = meta.primitives.map(({ fieldName, fieldType, notNull }) => {\n if (fieldType === \"boolean\") {\n return code`${fieldName}?: ${BooleanFilter}<${nullOrNever(notNull)}>;`;\n } else {\n return code`${fieldName}?: ${ValueFilter}<${fieldType}, ${nullOrNever(notNull)}>;`;\n }\n });\n const enums = meta.enums.map(({ fieldName, enumType, notNull, isArray }) => {\n const maybeArray = isArray ? \"[]\" : \"\";\n return code`${fieldName}?: ${ValueFilter}<${enumType}${maybeArray}, ${nullOrNever(notNull)}>;`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType, notNull }) => {\n return code`${fieldName}?: ${ValueFilter}<${enumType}, ${nullOrNever(notNull)}>;`;\n });\n const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${\n otherEntity.type\n }>, ${nullOrNever(notNull)}>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${FilterOf}<${\n st.entity.type\n }>, ${nullOrNever(notNull)}>;`;\n }),\n ];\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${FilterOf}<${\n st.entity.type\n }>, ${nullOrNever(otherColumnNotNull)}>;`;\n }),\n ];\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${FilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n // Enum m2m filters are membership filters, e.g. `{ logoColors: Color.Red }` / `{ logoColors: [Red, Green] }`.\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueFilter}<${enumType}, null | undefined>;`;\n });\n const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {\n return [\n code`${fieldName}?: ${EntityFilter}<${fieldType}, ${IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`,\n ...components.map((comp) => {\n const { type } = comp.otherEntity;\n return code`${fieldName}${type}?: ${EntityFilter}<${type}, ${IdOf}<${type}>, ${FilterOf}<${type}>, null>;`;\n }),\n ];\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o, ...o2o, ...o2m, ...m2m, ...m2mEnum, ...polys];\n}\n\nfunction generateGraphQLFilterFields(metasByName: Record<string, EntityDbMetadata>, meta: EntityDbMetadata): Code[] {\n const maybeId = meta.baseClassName ? [] : [code`id?: ${ValueGraphQLFilter}<${meta.entity.idName}>;`];\n const primitives = meta.primitives.map(({ fieldName, fieldType }) => {\n if (fieldType === \"boolean\") {\n return code`${fieldName}?: ${BooleanGraphQLFilter};`;\n } else {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${fieldType}>;`;\n }\n });\n const enums = meta.enums.map(({ fieldName, enumType, isArray }) => {\n const maybeArray = isArray ? \"[]\" : \"\";\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}${maybeArray}>;`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}>;`;\n });\n const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {\n const otherMeta = metasByName[otherEntity.name];\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${\n otherEntity.type\n }>, ${nullOrNever(notNull)}>;`,\n code`${fieldName}Id?: ${ValueGraphQLFilter}<${otherEntity.idType}>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${GraphQLFilterOf}<${\n st.entity.type\n }>, ${nullOrNever(notNull)}>;`;\n }),\n ];\n });\n const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {\n const otherMeta = metasByName[otherEntity.name] ?? fail(`Could not find metadata for ${otherEntity.name}`);\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`,\n ...otherMeta.subTypes.map((st) => {\n return code`${fieldName}${st.name}?: ${EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${GraphQLFilterOf}<${\n st.entity.type\n }>, ${nullOrNever(otherColumnNotNull)}>;`;\n }),\n ];\n });\n const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;\n });\n const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {\n return code`${fieldName}?: ${ValueGraphQLFilter}<${enumType}>;`;\n });\n const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {\n return [\n code`${fieldName}?: ${EntityGraphQLFilter}<${fieldType}, ${IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`,\n code`${fieldName}Id?: ${ValueGraphQLFilter}<${IdOf}<${fieldType}>>;`,\n ...components.map((comp) => {\n const { type } = comp.otherEntity;\n return code`${fieldName}${type}?: ${EntityGraphQLFilter}<${type}, ${IdOf}<${type}>, ${FilterOf}<${type}>, null>;`;\n }),\n ];\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o, ...o2o, ...o2m, ...m2m, ...m2mEnum, ...polys];\n}\n\nfunction generateOrderFields(meta: EntityDbMetadata): Code[] {\n const maybeId = meta.baseClassName ? [] : [code`id?: ${OrderBy};`];\n const primitives = meta.primitives.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const enums = meta.enums.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const pgEnums = meta.pgEnums.map(({ fieldName }) => {\n return code`${fieldName}?: ${OrderBy};`;\n });\n const m2o = meta.manyToOnes.map(({ fieldName, otherEntity }) => {\n return code`${fieldName}?: ${otherEntity.orderType};`;\n });\n return [...maybeId, ...primitives, ...enums, ...pgEnums, ...m2o];\n}\n\nfunction generateFactoryExtrasType(meta: EntityDbMetadata): Code[] {\n function withName(fieldName: string): string {\n return `with${fieldName[0].toUpperCase() + fieldName.substring(1)}`;\n }\n const primitives = meta.primitives\n .filter((f) => f.derived === \"async\")\n .map((field) => {\n const { fieldName, fieldType, notNull } = field;\n return code`${withName(fieldName)}?: ${fieldType}${maybeUnionNull(notNull)};`;\n });\n const enums = meta.enums\n .filter((f) => f.derived === \"async\")\n .map((field) => {\n const { fieldName, enumType, notNull, isArray } = field;\n if (isArray) {\n return code`${withName(fieldName)}?: ${enumType}[];`;\n } else {\n return code`${withName(fieldName)}?: ${enumType}${maybeUnionNull(notNull)};`;\n }\n });\n return [...primitives, ...enums];\n}\n\nfunction createPrimitives(meta: EntityDbMetadata, entity: Entity, fieldDocs: Record<string, string>) {\n const primitives = meta.primitives.map((p) => {\n const { fieldName, fieldType, notNull } = p;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n\n // `lazy` columns are emitted as `LazyField` relations by `createLazyFields`, not as getters/setters\n if (p.lazy) return code``;\n\n let getter: Code;\n if (p.derived === \"async\") {\n getter = code`\n abstract readonly ${fieldName}: ${ReactiveField}<${entity.name}, ${p.fieldType}${maybeOptional}>;\n `;\n } else if (p.derived === \"sync\") {\n getter = code`\n abstract get ${fieldName}(): ${fieldType}${maybeOptional};\n `;\n } else if (p.zodSchema) {\n getter = code`\n get ${fieldName}(): ${Zod}.output<typeof ${p.zodSchema}>${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n } else {\n getter = code`\n get ${fieldName}(): ${fieldType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n }\n\n let setter: Code | string;\n // ...technically we should be checking a list of JS keywords\n const paramName = keywords.includes(fieldName) ? \"value\" : fieldName;\n if (p.protected) {\n // TODO Allow making the getter to be protected as well. And so probably remove it\n // from the Opts as well. Wonder how that works for required protected fields?\n //\n // We have to use a method of `set${fieldName}` because TS enforces getters/setters to have\n // same access level and currently we're leaving the getter as public.\n setter = code`\n protected set${pascalCase(fieldName)}(${paramName}: ${fieldType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${paramName});\n }\n `;\n } else if (p.derived) {\n setter = \"\";\n } else if (p.superstruct) {\n // We use `value` as the param name to not potentially conflict with the\n // name of the imported superstruct const that is passed to assert.\n setter = code`\n set ${fieldName}(value: ${fieldType}${maybeOptional}) {\n if (value) {\n ${SSAssert}(value, ${p.superstruct});\n }\n ${setField}(this, \"${fieldName}\", value);\n }\n `;\n } else if (p.zodSchema) {\n // We use `value` as the param name to not potentially conflict with the\n // name of the imported zod schema that is passed to parse.\n setter = code`\n set ${fieldName}(value: ${Zod}.input<typeof ${p.zodSchema}>${maybeOptional}) {\n if (value) {\n ${setField}(this, \"${fieldName}\", ${p.zodSchema}.parse(value));\n } else {\n ${setField}(this, \"${fieldName}\", value);\n }\n }\n `;\n } else {\n setter = code`\n set ${fieldName}(${paramName}: ${fieldType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${paramName});\n }\n `;\n }\n\n return code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter} ${setter}`;\n });\n return primitives;\n}\n\nfunction createRegularEnums(meta: EntityDbMetadata, entity: Entity, fieldDocs: Record<string, string>) {\n return meta.enums\n .filter((e) => !e.isArray)\n .flatMap((e) => {\n const { fieldName, enumType, enumDetailType, enumDetailsType, notNull, enumRows, derived } = e;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n const getByCode = code`${enumDetailType}.getByCode(this.${fieldName})`;\n\n let getter: Code;\n if (derived === \"async\") {\n getter = code`\n abstract readonly ${fieldName}: ${ReactiveField}<${entity.name}, ${enumType}${maybeOptional}>;\n `;\n } else if (derived === \"sync\") {\n getter = code`\n abstract get ${fieldName}(): ${enumType}${maybeOptional};\n `;\n } else {\n getter = code`\n get ${fieldName}(): ${enumType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n\n get ${fieldName}Details(): ${enumDetailsType}${maybeOptional} {\n return ${notNull ? getByCode : code`this.${fieldName} ? ${getByCode} : undefined`};\n }\n `;\n }\n\n let setter: Code;\n if (derived) {\n setter = code``;\n } else {\n setter = code`\n set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n }\n\n const codes = new Set(enumRows.map((r) => r.code));\n const shouldPrefixAccessors = meta.enums\n .filter((other) => other !== e)\n .some((other) => other.enumRows.some((r) => codes.has(r.code)));\n\n const accessors = enumRows.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row.code)}(): boolean {\n return ${getField}(this, \"${fieldName}\") === ${enumType}.${pascalCase(row.code)};\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createArrayEnums(meta: EntityDbMetadata, fieldDocs: Record<string, string>) {\n return meta.enums\n .filter((e) => e.isArray)\n .flatMap((e) => {\n const { fieldName, enumType, enumDetailType, enumDetailsType, enumRows } = e;\n const getter = code`\n get ${fieldName}(): ${enumType}[] {\n return ${getField}(this, \"${fieldName}\") || [];\n }\n\n get ${fieldName}Details(): ${enumDetailsType}[] {\n return this.${fieldName}.map(code => ${enumDetailType}.getByCode(code));\n }\n `;\n const setter = code`\n set ${fieldName}(${fieldName}: ${enumType}[]) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n\n const codes = new Set(enumRows.map((r) => r.code));\n const shouldPrefixAccessors = meta.enums\n .filter((other) => other !== e)\n .some((other) => other.enumRows.some((r) => codes.has(r.code)));\n\n const accessors = enumRows.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row.code)}(): boolean {\n return this.${fieldName}.includes(${enumType}.${pascalCase(row.code)});\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createPgEnums(meta: EntityDbMetadata, fieldDocs: Record<string, string>) {\n return meta.pgEnums.flatMap((e) => {\n const { fieldName, enumType, enumValues, notNull } = e;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n\n const getter = code`\n get ${fieldName}(): ${enumType}${maybeOptional} {\n return ${getField}(this, \"${fieldName}\");\n }\n `;\n const setter = code`\n set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {\n ${setField}(this, \"${fieldName}\", ${fieldName});\n }\n `;\n\n const codes = new Set(enumValues);\n const shouldPrefixAccessors = meta.pgEnums\n .filter((other) => other !== e)\n .some((other) => other.enumValues.some((r) => codes.has(r)));\n\n const accessors = enumValues.map(\n (row) => code`\n get is${shouldPrefixAccessors ? pascalCase(fieldName) : \"\"}${pascalCase(row)}(): boolean {\n return this.${fieldName} === ${enumType}.${pascalCase(row)};\n }\n `,\n );\n return [code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`, setter, ...accessors];\n });\n}\n\nfunction createRelations(config: Config, meta: EntityDbMetadata, entity: Entity): Relation[] {\n // Add ManyToOne entities\n const m2o: Relation[] = meta.manyToOnes.map((m2o) => {\n const { fieldName, otherEntity, otherFieldName, notNull } = m2o;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n if (m2o.derived === \"async\") {\n const line = code`abstract readonly ${fieldName}: ${ReactiveReference}<${entity.name}, ${otherEntity.type}, ${maybeOptional}>;`;\n return { kind: \"abstract\", fieldName, line } as const;\n }\n const decl = code`${ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`;\n const init = code`${hasOne}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const m2oBase: Relation[] =\n meta.baseType?.manyToOnes\n // Skip m2os that are already specialized to a different otherEntity, i.e. `SmallPublisher.group: SmallPublisherGroup`\n .filter((m2o) => !meta.manyToOnes.find((o) => o.fieldName === m2o.fieldName))\n // Don't specialize hasReactiveReferences b/c they're fields, not getters\n .filter((m2o) => m2o.derived !== \"async\")\n .map((m2o) => {\n const { fieldName, otherEntity, notNull } = m2o;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n const decl = code`${ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add any recursive ManyToOne entities\n const m2oRecursive: Relation[] = meta.manyToOnes\n .filter((m2o) => m2o.otherEntity.name === meta.name)\n // Allow disabling recursive relations\n .filter(\n (m2o) =>\n // STI subtypes don't have their own key in config.entities (stripped by stripStiPlaceholders),\n // so look up the base class name to find skipRecursiveRelations config\n !(\n config.entities[meta.inheritanceType == \"sti\" && meta.baseClassName ? meta.baseClassName : meta.name]\n ?.relations?.[m2o.fieldName]?.skipRecursiveRelations === true\n ),\n )\n // Skip ReactiveReferences because they don't have an `other` side for us to use\n .filter((m2o) => !m2o.derived)\n .flatMap((m2o) => {\n const { fieldName: m2oName, otherFieldName, otherEntity } = m2o;\n const parentsField = `${plural(m2oName)}Recursive`;\n const maybeOneToOne = meta.oneToOnes.find((o2o) => o2o.fieldName === otherFieldName);\n const childrenField = maybeOneToOne ? `${plural(otherFieldName)}Recursive` : `${otherFieldName}Recursive`;\n return [\n {\n kind: \"concrete\",\n fieldName: parentsField,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveParents}(\"${m2oName}\", \"${childrenField}\")`,\n },\n {\n kind: \"concrete\",\n fieldName: childrenField,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveChildren}(\"${otherFieldName}\", \"${parentsField}\")`,\n },\n ];\n });\n\n // Add any recursive ManyToMany entities (self-referential m2m)\n const m2mRecursive: Relation[] = meta.manyToManys\n .filter((m2m) => m2m.otherEntity.name === meta.name)\n .filter((m2m) => !m2m.derived)\n // STI subtypes don't have their own key in config.entities (stripped by stripStiPlaceholders),\n // so look up the base class name to find skipRecursiveRelations config\n .filter(\n (m2m) =>\n !(\n config.entities[meta.inheritanceType == \"sti\" && meta.baseClassName ? meta.baseClassName : meta.name]\n ?.relations?.[m2m.fieldName]?.skipRecursiveRelations === true\n ),\n )\n .map((m2m) => {\n const { fieldName, otherFieldName, otherEntity } = m2m;\n return {\n kind: \"concrete\",\n fieldName: `${fieldName}Recursive`,\n decl: code`${ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,\n init: code`${hasRecursiveM2m}(\"${fieldName}\", \"${otherFieldName}Recursive\")`,\n };\n });\n\n // Add OneToMany\n const o2m: Relation[] = meta.oneToManys.map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasMany}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const o2mBase: Relation[] =\n meta.baseType?.oneToManys\n // Skip o2ms that are already specialized to a different otherEntity, i.e. `SmallPublisherGroup.publishers: SmallPublisher`\n .filter((o2m) => !meta.oneToManys.find((o) => o.fieldName === o2m.fieldName))\n .map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add large OneToMany\n const lo2m: Relation[] = meta.largeOneToManys.map((o2m) => {\n const { fieldName, otherEntity } = o2m;\n const decl = code`${LargeCollection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasLargeMany}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add OneToOne\n const o2o: Relation[] = meta.oneToOnes.map((o2o) => {\n const { fieldName, otherEntity } = o2o;\n const decl = code`${OneToOneReference}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasOneToOne}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n // Specialize\n const o2oBase: Relation[] =\n meta.baseType?.oneToOnes.map((o2o) => {\n const { fieldName, otherEntity } = o2o;\n const decl = code`${OneToOneReference}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add ManyToMany\n const m2m: Relation[] = meta.manyToManys.map((m2m) => {\n const { fieldName, otherEntity } = m2m;\n const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;\n if (m2m.derived === \"async\") {\n const line = code`abstract readonly ${fieldName}: ${ReactiveManyToMany}<${entity.name}, ${otherEntity.type}>;`;\n return { kind: \"abstract\", fieldName, line, comment } as const;\n } else if (m2m.derived === \"otherSide\") {\n const decl = code`${ReactiveManyToManyOtherSide}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasReactiveManyToManyOtherSide}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n } else if (!m2m.derived) {\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`${hasManyToMany}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n } else {\n assertNever(m2m.derived);\n }\n });\n // Specialize\n const m2mBase: Relation[] =\n meta.baseType?.manyToManys\n // Don't specialize hasReactiveManyToMany or hasReactiveManyToManyOtherSide b/c they're fields, not getters\n .filter((m2m) => !m2m.derived)\n .map((m2m) => {\n const { fieldName, otherEntity } = m2m;\n const decl = code`${Collection}<${entity.type}, ${otherEntity.type}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add enum-backed ManyToMany (i.e. `Publisher.logoColors`)\n const m2mEnum: Relation[] = meta.manyToManyEnums.map((m2m) => {\n const { fieldName, enumType } = m2m;\n const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;\n const decl = code`${EnumCollection}<${entity.type}, ${enumType}>`;\n const init = code`${hasEnumCollection}()`;\n return { kind: \"concrete\", fieldName, decl, init, comment };\n });\n const m2mEnumBase: Relation[] =\n meta.baseType?.manyToManyEnums.map((m2m) => {\n const { fieldName, enumType } = m2m;\n const decl = code`${EnumCollection}<${entity.type}, ${enumType}>`;\n return { kind: \"super\", fieldName, decl };\n }) ?? [];\n\n // Add large ManyToMany\n const lm2m: Relation[] = meta.largeManyToManys.map((m2m) => {\n const { joinTableName, fieldName, columnName, otherEntity, otherFieldName, otherColumnName } = m2m;\n const decl = code`${LargeCollection}<${entity.type}, ${otherEntity.type}>`;\n const init = code`\n ${hasLargeManyToMany}(\n \"${joinTableName}\",\n \"${columnName}\",\n \"${otherFieldName}\",\n \"${otherColumnName}\",\n ${m2m.hasJoinTableId},\n );\n `;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add Polymorphic\n const polymorphic: Relation[] = meta.polymorphics.map((p) => {\n const { fieldName, notNull, fieldType } = p;\n const maybeOptional = notNull ? \"never\" : \"undefined\";\n const decl = code`${PolymorphicReference}<${entity.type}, ${fieldType}, ${maybeOptional}>`;\n const init = code`${hasOnePolymorphic}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n // Add `lazy` primitives, which are exposed as `LazyField`s instead of getters/setters\n const lazy: Relation[] = meta.primitives\n .filter((p) => p.lazy)\n .map((p) => {\n const { fieldName, fieldType, notNull } = p;\n const maybeOptional = notNull ? \"\" : \" | undefined\";\n const decl = code`${LazyField}<${entity.type}, ${fieldType}${maybeOptional}>`;\n const init = code`${hasLazyField}()`;\n return { kind: \"concrete\", fieldName, decl, init };\n });\n\n return [\n o2m,\n o2mBase,\n lo2m,\n m2o,\n m2oBase,\n m2oRecursive,\n m2mRecursive,\n o2o,\n o2oBase,\n m2m,\n m2mBase,\n m2mEnum,\n m2mEnumBase,\n lm2m,\n polymorphic,\n lazy,\n ].flat();\n}\n\n/** Makes the field required if there is a `NOT NULL` and no db-or-config default. */\nfunction maybeOptionalOrDefault(\n field: PrimitiveField | EnumField | PgEnumField | ManyToOneField | PolymorphicField,\n): string {\n const hasDefault =\n (field.kind !== \"m2o\" && field.kind !== \"poly\" && fieldHasDefaultValue(field)) || field.hasConfigDefault;\n return !field.notNull || hasDefault ? \"?\" : \"\";\n}\n\nfunction maybeUnionNull(notNull: boolean): string {\n return notNull ? \"\" : \" | null\";\n}\n\nfunction maybeUndefined(notNull: boolean): string {\n return notNull ? \"\" : \" | undefined\";\n}\n\nfunction undefinedOrNever(notNull: boolean): string {\n return notNull ? \"never\" : \"undefined\";\n}\n\nfunction nullOrNever(notNull: boolean): string {\n return notNull ? \"never\" : \"null\";\n}\n\n/** Returns the nowUTC call for the deleted-at field's generated timestamp type. */\nfunction nowUTCCall(config: Config, field: PrimitiveField): Code {\n if (!config.temporal) return code`${nowUTC}()`;\n switch (field.columnType) {\n case \"date\":\n return code`${nowUTC}(\"plainDate\")`;\n case \"timestamp without time zone\":\n return code`${nowUTC}(\"plainDateTime\")`;\n case \"timestamp with time zone\":\n return code`${nowUTC}(\"zonedDateTime\")`;\n default:\n return fail(`Unsupported deleted-at column type ${field.columnType}`);\n }\n}\n\n/** Prefixes the comment with a newline, so it gets its own line. */\nfunction maybeComment(comment: string | undefined): string {\n return comment ? ` ${comment}\\n` : \"\";\n}\n\n/**\n * Renders a field's `.md` doc (plus its `@generated` tag) as a bare JSDoc block, or `\"\"` if undocumented.\n *\n * Reuses the same {@link buildJSDocBlock} formatter the `.md` sync uses for hand-written `Entity.ts`\n * members. Used directly before a getter template (which supplies its own leading newline), so the\n * JSDoc lands immediately above the getter with no intervening blank line.\n */\nfunction fieldDocBlock(fieldDocs: Record<string, string>, fieldName: string, entityName: string): string {\n const doc = fieldDocs[fieldName];\n return doc ? buildJSDocBlock(`${doc}\\n${generatedTag(entityName)}`, 0) : \"\";\n}\n\n/** Like {@link fieldDocBlock} but wrapped in newlines, i.e. for inline `readonly x = ...` relation decls. */\nfunction relationDocBlock(fieldDocs: Record<string, string>, fieldName: string, entityName: string): string {\n const block = fieldDocBlock(fieldDocs, fieldName, entityName);\n return block ? `\\n${block}\\n` : \"\";\n}\n\nexport function getIdType(config: Config) {\n switch (config.idType) {\n case \"untagged-string\":\n case \"tagged-string\":\n case undefined:\n return \"string\";\n case \"number\":\n return \"number\";\n default:\n return assertNever(config.idType);\n }\n}\n"],"mappings":"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"}
package/build/symbols.cjs CHANGED
@@ -75,6 +75,7 @@ const mustBeSubType = (0, ts_poet.imp)("mustBeSubType@joist-orm");
75
75
  const cleanStringValue = (0, ts_poet.imp)("cleanStringValue@joist-orm");
76
76
  const Changes = (0, ts_poet.imp)("t:Changes@joist-orm");
77
77
  const newChangesProxy = (0, ts_poet.imp)("newChangesProxy@joist-orm");
78
+ const nowUTC = (0, ts_poet.imp)("nowUTC@joist-orm");
78
79
  const LoadHint = (0, ts_poet.imp)("t:LoadHint@joist-orm");
79
80
  const Loaded = (0, ts_poet.imp)("t:Loaded@joist-orm");
80
81
  const isLoaded = (0, ts_poet.imp)("isLoaded@joist-orm");
@@ -216,6 +217,7 @@ exports.newRequiredLazyFieldRule = newRequiredLazyFieldRule;
216
217
  exports.newRequiredRule = newRequiredRule;
217
218
  exports.newScopeFn = newScopeFn;
218
219
  exports.newTestInstance = newTestInstance;
220
+ exports.nowUTC = nowUTC;
219
221
  exports.setField = setField;
220
222
  exports.setOpts = setOpts;
221
223
  exports.setRuntimeConfig = setRuntimeConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.cjs","names":["imp"],"sources":["../src/symbols.ts"],"sourcesContent":["import { imp } from \"ts-poet\";\n\nexport const ProjectEntity = imp(`t:Entity@./entities.ts`);\nexport const EntityManager = imp(\"EntityManager@./entities.ts\");\n\nexport const ConfigApi = imp(\"ConfigApi@joist-orm\");\nexport const newScopeFn = imp(\"newScopeFn@joist-orm\");\nexport const Scope = imp(\"t:Scope@joist-orm\");\nexport const FieldStatus = imp(\"t:FieldStatus@joist-orm\");\nexport const Entity = imp(\"t:Entity@joist-orm\");\nexport const BaseEntity = imp(\"BaseEntity@joist-orm\");\nexport const Flavor = imp(\"t:Flavor@joist-orm\");\nexport const Reference = imp(\"t:Reference@joist-orm\");\nexport const Collection = imp(\"t:Collection@joist-orm\");\nexport const EnumCollection = imp(\"t:EnumCollection@joist-orm\");\nexport const LargeCollection = imp(\"t:LargeCollection@joist-orm\");\nexport const OneToManyCollection = imp(\"OneToManyCollection@joist-orm\");\nexport const JoistEntityManager = imp(\"EntityManager@joist-orm\");\nexport const EntityMetadata = imp(\"t:EntityMetadata@joist-orm\");\nexport const EnumMetadata = imp(\"t:EnumMetadata@joist-orm\");\nexport const Lens = imp(\"t:Lens@joist-orm\");\nexport const KeySerde = imp(\"KeySerde@joist-orm\");\nexport const ManyToOneReference = imp(\"t:ManyToOneReference@joist-orm\");\nexport const LazyField = imp(\"t:LazyField@joist-orm\");\nexport const hasLazyField = imp(\"hasLazyField@joist-orm\");\nexport const ReadOnlyCollection = imp(\"t:ReadOnlyCollection@joist-orm\");\nexport const PolymorphicReference = imp(\"t:PolymorphicReference@joist-orm\");\nexport const OneToOneReference = imp(\"t:OneToOneReference@joist-orm\");\nexport const ManyToManyCollection = imp(\"ManyToManyCollection@joist-orm\");\nexport const EnumFieldSerde = imp(\"EnumFieldSerde@joist-orm\");\nexport const EnumArrayFieldSerde = imp(\"EnumArrayFieldSerde@joist-orm\");\nexport const PolymorphicKeySerde = imp(\"PolymorphicKeySerde@joist-orm\");\nexport const PrimitiveSerde = imp(\"PrimitiveSerde@joist-orm\");\nexport const BigIntSerde = imp(\"BigIntSerde@joist-orm\");\nexport const DateSerde = imp(\"DateSerde@joist-orm\");\nexport const PlainDateSerde = imp(\"PlainDateSerde@joist-orm\");\nexport const PlainTimeSerde = imp(\"PlainTimeSerde@joist-orm\");\nexport const PlainDateTimeSerde = imp(\"PlainDateTimeSerde@joist-orm\");\nexport const ZonedDateTimeSerde = imp(\"ZonedDateTimeSerde@joist-orm\");\nexport const JsonSerde = imp(\"JsonSerde@joist-orm\");\nexport const SuperstructSerde = imp(\"SuperstructSerde@joist-orm\");\nexport const TaggedId = imp(\"t:TaggedId@joist-orm\");\nexport const ZodSerde = imp(\"ZodSerde@joist-orm\");\nexport const CustomSerdeAdapter = imp(\"CustomSerdeAdapter@joist-orm\");\nexport const DecimalToNumberSerde = imp(\"DecimalToNumberSerde@joist-orm\");\nexport const fail = imp(\"fail@joist-orm\");\nexport const failNoIdYet = imp(\"failNoIdYet@joist-orm\");\nexport const setOpts = imp(\"setOpts@joist-orm\");\nexport const getField = imp(\"getField@joist-orm\");\nexport const setField = imp(\"setField@joist-orm\");\nexport const OrderBy = imp(\"t:OrderBy@joist-orm\");\nexport const OptsOf = imp(\"t:OptsOf@joist-orm\");\nexport const FieldsOf = imp(\"t:FieldsOf@joist-orm\");\nexport const RelationsOf = imp(\"t:RelationsOf@joist-orm\");\nexport const IdOf = imp(\"t:IdOf@joist-orm\");\nexport const PartialOrNull = imp(\"t:PartialOrNull@joist-orm\");\nexport const DeepPartialOrNull = imp(\"t:DeepPartialOrNull@joist-orm\");\nexport const BooleanFilter = imp(\"t:BooleanFilter@joist-orm\");\nexport const ValueFilter = imp(\"t:ValueFilter@joist-orm\");\nexport const EntityFilter = imp(\"t:EntityFilter@joist-orm\");\nexport const BooleanGraphQLFilter = imp(\"t:BooleanGraphQLFilter@joist-orm\");\nexport const EntityGraphQLFilter = imp(\"t:EntityGraphQLFilter@joist-orm\");\nexport const EnumGraphQLFilter = imp(\"t:EnumGraphQLFilter@joist-orm\");\nexport const ValueGraphQLFilter = imp(\"t:ValueGraphQLFilter@joist-orm\");\nexport const FilterOf = imp(\"t:FilterOf@joist-orm\");\nexport const GraphQLFilterOf = imp(\"t:GraphQLFilterOf@joist-orm\");\nexport const JsonHint = imp(\"t:JsonHint@joist-orm\");\nexport const ToJsonHint = imp(\"t:ToJsonHint@joist-orm\");\nexport const JsonPayload = imp(\"t:JsonPayload@joist-orm\");\nexport const configureMetadata = imp(\"configureMetadata@joist-orm\");\nexport const newRequiredRule = imp(\"newRequiredRule@joist-orm\");\nexport const newRequiredLazyFieldRule = imp(\"newRequiredLazyFieldRule@joist-orm\");\nexport const cannotBeUpdated = imp(\"cannotBeUpdated@joist-orm\");\nexport const mustBeSubType = imp(\"mustBeSubType@joist-orm\");\nexport const cleanStringValue = imp(\"cleanStringValue@joist-orm\");\nexport const Changes = imp(\"t:Changes@joist-orm\");\nexport const newChangesProxy = imp(\"newChangesProxy@joist-orm\");\nexport const LoadHint = imp(\"t:LoadHint@joist-orm\");\nexport const Loaded = imp(\"t:Loaded@joist-orm\");\nexport const isLoaded = imp(\"isLoaded@joist-orm\");\nexport const getInstanceData = imp(\"getInstanceData@joist-orm\");\nexport const isEntity = imp(\"isEntity@joist-orm\");\nexport const loadLens = imp(\"loadLens@joist-orm\");\nexport const hasOneThrough = imp(\"hasOneThrough@joist-orm\");\nexport const hasMany = imp(\"hasMany@joist-orm\");\nexport const hasLargeMany = imp(\"hasLargeMany@joist-orm\");\nexport const hasOne = imp(\"hasOne@joist-orm\");\nexport const hasRecursiveChildren = imp(\"hasRecursiveChildren@joist-orm\");\nexport const hasRecursiveM2m = imp(\"hasRecursiveM2m@joist-orm\");\nexport const hasRecursiveParents = imp(\"hasRecursiveParents@joist-orm\");\nexport const hasOnePolymorphic = imp(\"hasOnePolymorphic@joist-orm\");\nexport const hasOneToOne = imp(\"hasOneToOne@joist-orm\");\nexport const hasManyToMany = imp(\"hasManyToMany@joist-orm\");\nexport const hasEnumCollection = imp(\"hasEnumCollection@joist-orm\");\nexport const hasLargeManyToMany = imp(\"hasLargeManyToMany@joist-orm\");\nexport const newTestInstance = imp(\"newTestInstance@joist-orm\");\nexport const New = imp(\"t:New@joist-orm\");\nexport const DeepNew = imp(\"t:DeepNew@joist-orm\");\nexport const FactoryOpts = imp(\"t:FactoryOpts@joist-orm\");\nexport const SSAssert = imp(\"assert@superstruct\");\nexport const Zod = imp(\"z@zod\");\nexport const EntityConstructor = imp(\"t:EntityConstructor@joist-orm\");\nexport const MaybeAbstractEntityConstructor = imp(\"t:MaybeAbstractEntityConstructor@joist-orm\");\nexport const deTagId = imp(\"deTagId@joist-orm\");\nexport const toIdOf = imp(\"toIdOf@joist-orm\");\nexport const toJSON = imp(\"toJSON@joist-orm\");\nexport const ReactiveField = imp(\"t:ReactiveField@joist-orm\");\nexport const ReactiveReference = imp(\"t:ReactiveReference@joist-orm\");\nexport const ReactiveManyToMany = imp(\"t:ReactiveManyToMany@joist-orm\");\nexport const ReactiveManyToManyOtherSide = imp(\"t:ReactiveManyToManyOtherSide@joist-orm\");\nexport const hasReactiveManyToManyOtherSide = imp(\"hasReactiveManyToManyOtherSide@joist-orm\");\nexport const updatePartial = imp(\"updatePartial@joist-orm\");\nexport const setRuntimeConfig = imp(\"setRuntimeConfig@joist-orm\");\n"],"mappings":"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"}
1
+ {"version":3,"file":"symbols.cjs","names":["imp"],"sources":["../src/symbols.ts"],"sourcesContent":["import { imp } from \"ts-poet\";\n\nexport const ProjectEntity = imp(`t:Entity@./entities.ts`);\nexport const EntityManager = imp(\"EntityManager@./entities.ts\");\n\nexport const ConfigApi = imp(\"ConfigApi@joist-orm\");\nexport const newScopeFn = imp(\"newScopeFn@joist-orm\");\nexport const Scope = imp(\"t:Scope@joist-orm\");\nexport const FieldStatus = imp(\"t:FieldStatus@joist-orm\");\nexport const Entity = imp(\"t:Entity@joist-orm\");\nexport const BaseEntity = imp(\"BaseEntity@joist-orm\");\nexport const Flavor = imp(\"t:Flavor@joist-orm\");\nexport const Reference = imp(\"t:Reference@joist-orm\");\nexport const Collection = imp(\"t:Collection@joist-orm\");\nexport const EnumCollection = imp(\"t:EnumCollection@joist-orm\");\nexport const LargeCollection = imp(\"t:LargeCollection@joist-orm\");\nexport const OneToManyCollection = imp(\"OneToManyCollection@joist-orm\");\nexport const JoistEntityManager = imp(\"EntityManager@joist-orm\");\nexport const EntityMetadata = imp(\"t:EntityMetadata@joist-orm\");\nexport const EnumMetadata = imp(\"t:EnumMetadata@joist-orm\");\nexport const Lens = imp(\"t:Lens@joist-orm\");\nexport const KeySerde = imp(\"KeySerde@joist-orm\");\nexport const ManyToOneReference = imp(\"t:ManyToOneReference@joist-orm\");\nexport const LazyField = imp(\"t:LazyField@joist-orm\");\nexport const hasLazyField = imp(\"hasLazyField@joist-orm\");\nexport const ReadOnlyCollection = imp(\"t:ReadOnlyCollection@joist-orm\");\nexport const PolymorphicReference = imp(\"t:PolymorphicReference@joist-orm\");\nexport const OneToOneReference = imp(\"t:OneToOneReference@joist-orm\");\nexport const ManyToManyCollection = imp(\"ManyToManyCollection@joist-orm\");\nexport const EnumFieldSerde = imp(\"EnumFieldSerde@joist-orm\");\nexport const EnumArrayFieldSerde = imp(\"EnumArrayFieldSerde@joist-orm\");\nexport const PolymorphicKeySerde = imp(\"PolymorphicKeySerde@joist-orm\");\nexport const PrimitiveSerde = imp(\"PrimitiveSerde@joist-orm\");\nexport const BigIntSerde = imp(\"BigIntSerde@joist-orm\");\nexport const DateSerde = imp(\"DateSerde@joist-orm\");\nexport const PlainDateSerde = imp(\"PlainDateSerde@joist-orm\");\nexport const PlainTimeSerde = imp(\"PlainTimeSerde@joist-orm\");\nexport const PlainDateTimeSerde = imp(\"PlainDateTimeSerde@joist-orm\");\nexport const ZonedDateTimeSerde = imp(\"ZonedDateTimeSerde@joist-orm\");\nexport const JsonSerde = imp(\"JsonSerde@joist-orm\");\nexport const SuperstructSerde = imp(\"SuperstructSerde@joist-orm\");\nexport const TaggedId = imp(\"t:TaggedId@joist-orm\");\nexport const ZodSerde = imp(\"ZodSerde@joist-orm\");\nexport const CustomSerdeAdapter = imp(\"CustomSerdeAdapter@joist-orm\");\nexport const DecimalToNumberSerde = imp(\"DecimalToNumberSerde@joist-orm\");\nexport const fail = imp(\"fail@joist-orm\");\nexport const failNoIdYet = imp(\"failNoIdYet@joist-orm\");\nexport const setOpts = imp(\"setOpts@joist-orm\");\nexport const getField = imp(\"getField@joist-orm\");\nexport const setField = imp(\"setField@joist-orm\");\nexport const OrderBy = imp(\"t:OrderBy@joist-orm\");\nexport const OptsOf = imp(\"t:OptsOf@joist-orm\");\nexport const FieldsOf = imp(\"t:FieldsOf@joist-orm\");\nexport const RelationsOf = imp(\"t:RelationsOf@joist-orm\");\nexport const IdOf = imp(\"t:IdOf@joist-orm\");\nexport const PartialOrNull = imp(\"t:PartialOrNull@joist-orm\");\nexport const DeepPartialOrNull = imp(\"t:DeepPartialOrNull@joist-orm\");\nexport const BooleanFilter = imp(\"t:BooleanFilter@joist-orm\");\nexport const ValueFilter = imp(\"t:ValueFilter@joist-orm\");\nexport const EntityFilter = imp(\"t:EntityFilter@joist-orm\");\nexport const BooleanGraphQLFilter = imp(\"t:BooleanGraphQLFilter@joist-orm\");\nexport const EntityGraphQLFilter = imp(\"t:EntityGraphQLFilter@joist-orm\");\nexport const EnumGraphQLFilter = imp(\"t:EnumGraphQLFilter@joist-orm\");\nexport const ValueGraphQLFilter = imp(\"t:ValueGraphQLFilter@joist-orm\");\nexport const FilterOf = imp(\"t:FilterOf@joist-orm\");\nexport const GraphQLFilterOf = imp(\"t:GraphQLFilterOf@joist-orm\");\nexport const JsonHint = imp(\"t:JsonHint@joist-orm\");\nexport const ToJsonHint = imp(\"t:ToJsonHint@joist-orm\");\nexport const JsonPayload = imp(\"t:JsonPayload@joist-orm\");\nexport const configureMetadata = imp(\"configureMetadata@joist-orm\");\nexport const newRequiredRule = imp(\"newRequiredRule@joist-orm\");\nexport const newRequiredLazyFieldRule = imp(\"newRequiredLazyFieldRule@joist-orm\");\nexport const cannotBeUpdated = imp(\"cannotBeUpdated@joist-orm\");\nexport const mustBeSubType = imp(\"mustBeSubType@joist-orm\");\nexport const cleanStringValue = imp(\"cleanStringValue@joist-orm\");\nexport const Changes = imp(\"t:Changes@joist-orm\");\nexport const newChangesProxy = imp(\"newChangesProxy@joist-orm\");\nexport const nowUTC = imp(\"nowUTC@joist-orm\");\nexport const LoadHint = imp(\"t:LoadHint@joist-orm\");\nexport const Loaded = imp(\"t:Loaded@joist-orm\");\nexport const isLoaded = imp(\"isLoaded@joist-orm\");\nexport const getInstanceData = imp(\"getInstanceData@joist-orm\");\nexport const isEntity = imp(\"isEntity@joist-orm\");\nexport const loadLens = imp(\"loadLens@joist-orm\");\nexport const hasOneThrough = imp(\"hasOneThrough@joist-orm\");\nexport const hasMany = imp(\"hasMany@joist-orm\");\nexport const hasLargeMany = imp(\"hasLargeMany@joist-orm\");\nexport const hasOne = imp(\"hasOne@joist-orm\");\nexport const hasRecursiveChildren = imp(\"hasRecursiveChildren@joist-orm\");\nexport const hasRecursiveM2m = imp(\"hasRecursiveM2m@joist-orm\");\nexport const hasRecursiveParents = imp(\"hasRecursiveParents@joist-orm\");\nexport const hasOnePolymorphic = imp(\"hasOnePolymorphic@joist-orm\");\nexport const hasOneToOne = imp(\"hasOneToOne@joist-orm\");\nexport const hasManyToMany = imp(\"hasManyToMany@joist-orm\");\nexport const hasEnumCollection = imp(\"hasEnumCollection@joist-orm\");\nexport const hasLargeManyToMany = imp(\"hasLargeManyToMany@joist-orm\");\nexport const newTestInstance = imp(\"newTestInstance@joist-orm\");\nexport const New = imp(\"t:New@joist-orm\");\nexport const DeepNew = imp(\"t:DeepNew@joist-orm\");\nexport const FactoryOpts = imp(\"t:FactoryOpts@joist-orm\");\nexport const SSAssert = imp(\"assert@superstruct\");\nexport const Zod = imp(\"z@zod\");\nexport const EntityConstructor = imp(\"t:EntityConstructor@joist-orm\");\nexport const MaybeAbstractEntityConstructor = imp(\"t:MaybeAbstractEntityConstructor@joist-orm\");\nexport const deTagId = imp(\"deTagId@joist-orm\");\nexport const toIdOf = imp(\"toIdOf@joist-orm\");\nexport const toJSON = imp(\"toJSON@joist-orm\");\nexport const ReactiveField = imp(\"t:ReactiveField@joist-orm\");\nexport const ReactiveReference = imp(\"t:ReactiveReference@joist-orm\");\nexport const ReactiveManyToMany = imp(\"t:ReactiveManyToMany@joist-orm\");\nexport const ReactiveManyToManyOtherSide = imp(\"t:ReactiveManyToManyOtherSide@joist-orm\");\nexport const hasReactiveManyToManyOtherSide = imp(\"hasReactiveManyToManyOtherSide@joist-orm\");\nexport const updatePartial = imp(\"updatePartial@joist-orm\");\nexport const setRuntimeConfig = imp(\"setRuntimeConfig@joist-orm\");\n"],"mappings":"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"}
@@ -73,6 +73,7 @@ declare const mustBeSubType: import("ts-poet").Import;
73
73
  declare const cleanStringValue: import("ts-poet").Import;
74
74
  declare const Changes: import("ts-poet").Import;
75
75
  declare const newChangesProxy: import("ts-poet").Import;
76
+ declare const nowUTC: import("ts-poet").Import;
76
77
  declare const LoadHint: import("ts-poet").Import;
77
78
  declare const Loaded: import("ts-poet").Import;
78
79
  declare const isLoaded: import("ts-poet").Import;
@@ -110,5 +111,5 @@ declare const hasReactiveManyToManyOtherSide: import("ts-poet").Import;
110
111
  declare const updatePartial: import("ts-poet").Import;
111
112
  declare const setRuntimeConfig: import("ts-poet").Import;
112
113
  //#endregion
113
- export { BaseEntity, BigIntSerde, BooleanFilter, BooleanGraphQLFilter, Changes, Collection, ConfigApi, CustomSerdeAdapter, DateSerde, DecimalToNumberSerde, DeepNew, DeepPartialOrNull, Entity, EntityConstructor, EntityFilter, EntityGraphQLFilter, EntityManager, EntityMetadata, EnumArrayFieldSerde, EnumCollection, EnumFieldSerde, EnumGraphQLFilter, EnumMetadata, FactoryOpts, FieldStatus, FieldsOf, FilterOf, Flavor, GraphQLFilterOf, IdOf, JoistEntityManager, JsonHint, JsonPayload, JsonSerde, KeySerde, LargeCollection, LazyField, Lens, LoadHint, Loaded, ManyToManyCollection, ManyToOneReference, MaybeAbstractEntityConstructor, New, OneToManyCollection, OneToOneReference, OptsOf, OrderBy, PartialOrNull, PlainDateSerde, PlainDateTimeSerde, PlainTimeSerde, PolymorphicKeySerde, PolymorphicReference, PrimitiveSerde, ProjectEntity, ReactiveField, ReactiveManyToMany, ReactiveManyToManyOtherSide, ReactiveReference, ReadOnlyCollection, Reference, RelationsOf, SSAssert, Scope, SuperstructSerde, TaggedId, ToJsonHint, ValueFilter, ValueGraphQLFilter, Zod, ZodSerde, ZonedDateTimeSerde, cannotBeUpdated, cleanStringValue, configureMetadata, deTagId, fail, failNoIdYet, getField, getInstanceData, hasEnumCollection, hasLargeMany, hasLargeManyToMany, hasLazyField, hasMany, hasManyToMany, hasOne, hasOnePolymorphic, hasOneThrough, hasOneToOne, hasReactiveManyToManyOtherSide, hasRecursiveChildren, hasRecursiveM2m, hasRecursiveParents, isEntity, isLoaded, loadLens, mustBeSubType, newChangesProxy, newRequiredLazyFieldRule, newRequiredRule, newScopeFn, newTestInstance, setField, setOpts, setRuntimeConfig, toIdOf, toJSON, updatePartial };
114
+ export { BaseEntity, BigIntSerde, BooleanFilter, BooleanGraphQLFilter, Changes, Collection, ConfigApi, CustomSerdeAdapter, DateSerde, DecimalToNumberSerde, DeepNew, DeepPartialOrNull, Entity, EntityConstructor, EntityFilter, EntityGraphQLFilter, EntityManager, EntityMetadata, EnumArrayFieldSerde, EnumCollection, EnumFieldSerde, EnumGraphQLFilter, EnumMetadata, FactoryOpts, FieldStatus, FieldsOf, FilterOf, Flavor, GraphQLFilterOf, IdOf, JoistEntityManager, JsonHint, JsonPayload, JsonSerde, KeySerde, LargeCollection, LazyField, Lens, LoadHint, Loaded, ManyToManyCollection, ManyToOneReference, MaybeAbstractEntityConstructor, New, OneToManyCollection, OneToOneReference, OptsOf, OrderBy, PartialOrNull, PlainDateSerde, PlainDateTimeSerde, PlainTimeSerde, PolymorphicKeySerde, PolymorphicReference, PrimitiveSerde, ProjectEntity, ReactiveField, ReactiveManyToMany, ReactiveManyToManyOtherSide, ReactiveReference, ReadOnlyCollection, Reference, RelationsOf, SSAssert, Scope, SuperstructSerde, TaggedId, ToJsonHint, ValueFilter, ValueGraphQLFilter, Zod, ZodSerde, ZonedDateTimeSerde, cannotBeUpdated, cleanStringValue, configureMetadata, deTagId, fail, failNoIdYet, getField, getInstanceData, hasEnumCollection, hasLargeMany, hasLargeManyToMany, hasLazyField, hasMany, hasManyToMany, hasOne, hasOnePolymorphic, hasOneThrough, hasOneToOne, hasReactiveManyToManyOtherSide, hasRecursiveChildren, hasRecursiveM2m, hasRecursiveParents, isEntity, isLoaded, loadLens, mustBeSubType, newChangesProxy, newRequiredLazyFieldRule, newRequiredRule, newScopeFn, newTestInstance, nowUTC, setField, setOpts, setRuntimeConfig, toIdOf, toJSON, updatePartial };
114
115
  //# sourceMappingURL=symbols.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.d.cts","names":[],"sources":["../src/symbols.ts"],"mappings":";cAEa,iCAAa;cACb,iCAAa;cAEb,6BAAS;cACT,8BAAU;cACV,yBAAK;cACL,+BAAW;cACX,0BAAM;cACN,8BAAU;cACV,0BAAM;cACN,6BAAS;cACT,8BAAU;cACV,kCAAc;cACd,mCAAe;cACf,uCAAmB;cACnB,sCAAkB;cAClB,kCAAc;cACd,gCAAY;cACZ,wBAAI;cACJ,4BAAQ;cACR,sCAAkB;cAClB,6BAAS;cACT,gCAAY;cACZ,sCAAkB;cAClB,wCAAoB;cACpB,qCAAiB;cACjB,wCAAoB;cACpB,kCAAc;cACd,uCAAmB;cACnB,uCAAmB;cACnB,kCAAc;cACd,+BAAW;cACX,6BAAS;cACT,kCAAc;cACd,kCAAc;cACd,sCAAkB;cAClB,sCAAkB;cAClB,6BAAS;cACT,oCAAgB;cAChB,4BAAQ;cACR,4BAAQ;cACR,sCAAkB;cAClB,wCAAoB;cACpB,wBAAI;cACJ,+BAAW;cACX,2BAAO;cACP,4BAAQ;cACR,4BAAQ;cACR,2BAAO;cACP,0BAAM;cACN,4BAAQ;cACR,+BAAW;cACX,wBAAI;cACJ,iCAAa;cACb,qCAAiB;cACjB,iCAAa;cACb,+BAAW;cACX,gCAAY;cACZ,wCAAoB;cACpB,uCAAmB;cACnB,qCAAiB;cACjB,sCAAkB;cAClB,4BAAQ;cACR,mCAAe;cACf,4BAAQ;cACR,8BAAU;cACV,+BAAW;cACX,qCAAiB;cACjB,mCAAe;cACf,4CAAwB;cACxB,mCAAe;cACf,iCAAa;cACb,oCAAgB;cAChB,2BAAO;cACP,mCAAe;cACf,4BAAQ;cACR,0BAAM;cACN,4BAAQ;cACR,mCAAe;cACf,4BAAQ;cACR,4BAAQ;cACR,iCAAa;cACb,2BAAO;cACP,gCAAY;cACZ,0BAAM;cACN,wCAAoB;cACpB,mCAAe;cACf,uCAAmB;cACnB,qCAAiB;cACjB,+BAAW;cACX,iCAAa;cACb,qCAAiB;cACjB,sCAAkB;cAClB,mCAAe;cACf,uBAAG;cACH,2BAAO;cACP,+BAAW;cACX,4BAAQ;cACR,uBAAG;cACH,qCAAiB;cACjB,kDAA8B;cAC9B,2BAAO;cACP,0BAAM;cACN,0BAAM;cACN,iCAAa;cACb,qCAAiB;cACjB,sCAAkB;cAClB,+CAA2B;cAC3B,kDAA8B;cAC9B,iCAAa;cACb,oCAAgB"}
1
+ {"version":3,"file":"symbols.d.cts","names":[],"sources":["../src/symbols.ts"],"mappings":";cAEa,iCAAa;cACb,iCAAa;cAEb,6BAAS;cACT,8BAAU;cACV,yBAAK;cACL,+BAAW;cACX,0BAAM;cACN,8BAAU;cACV,0BAAM;cACN,6BAAS;cACT,8BAAU;cACV,kCAAc;cACd,mCAAe;cACf,uCAAmB;cACnB,sCAAkB;cAClB,kCAAc;cACd,gCAAY;cACZ,wBAAI;cACJ,4BAAQ;cACR,sCAAkB;cAClB,6BAAS;cACT,gCAAY;cACZ,sCAAkB;cAClB,wCAAoB;cACpB,qCAAiB;cACjB,wCAAoB;cACpB,kCAAc;cACd,uCAAmB;cACnB,uCAAmB;cACnB,kCAAc;cACd,+BAAW;cACX,6BAAS;cACT,kCAAc;cACd,kCAAc;cACd,sCAAkB;cAClB,sCAAkB;cAClB,6BAAS;cACT,oCAAgB;cAChB,4BAAQ;cACR,4BAAQ;cACR,sCAAkB;cAClB,wCAAoB;cACpB,wBAAI;cACJ,+BAAW;cACX,2BAAO;cACP,4BAAQ;cACR,4BAAQ;cACR,2BAAO;cACP,0BAAM;cACN,4BAAQ;cACR,+BAAW;cACX,wBAAI;cACJ,iCAAa;cACb,qCAAiB;cACjB,iCAAa;cACb,+BAAW;cACX,gCAAY;cACZ,wCAAoB;cACpB,uCAAmB;cACnB,qCAAiB;cACjB,sCAAkB;cAClB,4BAAQ;cACR,mCAAe;cACf,4BAAQ;cACR,8BAAU;cACV,+BAAW;cACX,qCAAiB;cACjB,mCAAe;cACf,4CAAwB;cACxB,mCAAe;cACf,iCAAa;cACb,oCAAgB;cAChB,2BAAO;cACP,mCAAe;cACf,0BAAM;cACN,4BAAQ;cACR,0BAAM;cACN,4BAAQ;cACR,mCAAe;cACf,4BAAQ;cACR,4BAAQ;cACR,iCAAa;cACb,2BAAO;cACP,gCAAY;cACZ,0BAAM;cACN,wCAAoB;cACpB,mCAAe;cACf,uCAAmB;cACnB,qCAAiB;cACjB,+BAAW;cACX,iCAAa;cACb,qCAAiB;cACjB,sCAAkB;cAClB,mCAAe;cACf,uBAAG;cACH,2BAAO;cACP,+BAAW;cACX,4BAAQ;cACR,uBAAG;cACH,qCAAiB;cACjB,kDAA8B;cAC9B,2BAAO;cACP,0BAAM;cACN,0BAAM;cACN,iCAAa;cACb,qCAAiB;cACjB,sCAAkB;cAClB,+CAA2B;cAC3B,kDAA8B;cAC9B,iCAAa;cACb,oCAAgB"}
@@ -73,6 +73,7 @@ declare const mustBeSubType: import("ts-poet").Import;
73
73
  declare const cleanStringValue: import("ts-poet").Import;
74
74
  declare const Changes: import("ts-poet").Import;
75
75
  declare const newChangesProxy: import("ts-poet").Import;
76
+ declare const nowUTC: import("ts-poet").Import;
76
77
  declare const LoadHint: import("ts-poet").Import;
77
78
  declare const Loaded: import("ts-poet").Import;
78
79
  declare const isLoaded: import("ts-poet").Import;
@@ -110,5 +111,5 @@ declare const hasReactiveManyToManyOtherSide: import("ts-poet").Import;
110
111
  declare const updatePartial: import("ts-poet").Import;
111
112
  declare const setRuntimeConfig: import("ts-poet").Import;
112
113
  //#endregion
113
- export { BaseEntity, BigIntSerde, BooleanFilter, BooleanGraphQLFilter, Changes, Collection, ConfigApi, CustomSerdeAdapter, DateSerde, DecimalToNumberSerde, DeepNew, DeepPartialOrNull, Entity, EntityConstructor, EntityFilter, EntityGraphQLFilter, EntityManager, EntityMetadata, EnumArrayFieldSerde, EnumCollection, EnumFieldSerde, EnumGraphQLFilter, EnumMetadata, FactoryOpts, FieldStatus, FieldsOf, FilterOf, Flavor, GraphQLFilterOf, IdOf, JoistEntityManager, JsonHint, JsonPayload, JsonSerde, KeySerde, LargeCollection, LazyField, Lens, LoadHint, Loaded, ManyToManyCollection, ManyToOneReference, MaybeAbstractEntityConstructor, New, OneToManyCollection, OneToOneReference, OptsOf, OrderBy, PartialOrNull, PlainDateSerde, PlainDateTimeSerde, PlainTimeSerde, PolymorphicKeySerde, PolymorphicReference, PrimitiveSerde, ProjectEntity, ReactiveField, ReactiveManyToMany, ReactiveManyToManyOtherSide, ReactiveReference, ReadOnlyCollection, Reference, RelationsOf, SSAssert, Scope, SuperstructSerde, TaggedId, ToJsonHint, ValueFilter, ValueGraphQLFilter, Zod, ZodSerde, ZonedDateTimeSerde, cannotBeUpdated, cleanStringValue, configureMetadata, deTagId, fail, failNoIdYet, getField, getInstanceData, hasEnumCollection, hasLargeMany, hasLargeManyToMany, hasLazyField, hasMany, hasManyToMany, hasOne, hasOnePolymorphic, hasOneThrough, hasOneToOne, hasReactiveManyToManyOtherSide, hasRecursiveChildren, hasRecursiveM2m, hasRecursiveParents, isEntity, isLoaded, loadLens, mustBeSubType, newChangesProxy, newRequiredLazyFieldRule, newRequiredRule, newScopeFn, newTestInstance, setField, setOpts, setRuntimeConfig, toIdOf, toJSON, updatePartial };
114
+ export { BaseEntity, BigIntSerde, BooleanFilter, BooleanGraphQLFilter, Changes, Collection, ConfigApi, CustomSerdeAdapter, DateSerde, DecimalToNumberSerde, DeepNew, DeepPartialOrNull, Entity, EntityConstructor, EntityFilter, EntityGraphQLFilter, EntityManager, EntityMetadata, EnumArrayFieldSerde, EnumCollection, EnumFieldSerde, EnumGraphQLFilter, EnumMetadata, FactoryOpts, FieldStatus, FieldsOf, FilterOf, Flavor, GraphQLFilterOf, IdOf, JoistEntityManager, JsonHint, JsonPayload, JsonSerde, KeySerde, LargeCollection, LazyField, Lens, LoadHint, Loaded, ManyToManyCollection, ManyToOneReference, MaybeAbstractEntityConstructor, New, OneToManyCollection, OneToOneReference, OptsOf, OrderBy, PartialOrNull, PlainDateSerde, PlainDateTimeSerde, PlainTimeSerde, PolymorphicKeySerde, PolymorphicReference, PrimitiveSerde, ProjectEntity, ReactiveField, ReactiveManyToMany, ReactiveManyToManyOtherSide, ReactiveReference, ReadOnlyCollection, Reference, RelationsOf, SSAssert, Scope, SuperstructSerde, TaggedId, ToJsonHint, ValueFilter, ValueGraphQLFilter, Zod, ZodSerde, ZonedDateTimeSerde, cannotBeUpdated, cleanStringValue, configureMetadata, deTagId, fail, failNoIdYet, getField, getInstanceData, hasEnumCollection, hasLargeMany, hasLargeManyToMany, hasLazyField, hasMany, hasManyToMany, hasOne, hasOnePolymorphic, hasOneThrough, hasOneToOne, hasReactiveManyToManyOtherSide, hasRecursiveChildren, hasRecursiveM2m, hasRecursiveParents, isEntity, isLoaded, loadLens, mustBeSubType, newChangesProxy, newRequiredLazyFieldRule, newRequiredRule, newScopeFn, newTestInstance, nowUTC, setField, setOpts, setRuntimeConfig, toIdOf, toJSON, updatePartial };
114
115
  //# sourceMappingURL=symbols.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.d.mts","names":[],"sources":["../src/symbols.ts"],"mappings":";cAEa,iCAAa;cACb,iCAAa;cAEb,6BAAS;cACT,8BAAU;cACV,yBAAK;cACL,+BAAW;cACX,0BAAM;cACN,8BAAU;cACV,0BAAM;cACN,6BAAS;cACT,8BAAU;cACV,kCAAc;cACd,mCAAe;cACf,uCAAmB;cACnB,sCAAkB;cAClB,kCAAc;cACd,gCAAY;cACZ,wBAAI;cACJ,4BAAQ;cACR,sCAAkB;cAClB,6BAAS;cACT,gCAAY;cACZ,sCAAkB;cAClB,wCAAoB;cACpB,qCAAiB;cACjB,wCAAoB;cACpB,kCAAc;cACd,uCAAmB;cACnB,uCAAmB;cACnB,kCAAc;cACd,+BAAW;cACX,6BAAS;cACT,kCAAc;cACd,kCAAc;cACd,sCAAkB;cAClB,sCAAkB;cAClB,6BAAS;cACT,oCAAgB;cAChB,4BAAQ;cACR,4BAAQ;cACR,sCAAkB;cAClB,wCAAoB;cACpB,wBAAI;cACJ,+BAAW;cACX,2BAAO;cACP,4BAAQ;cACR,4BAAQ;cACR,2BAAO;cACP,0BAAM;cACN,4BAAQ;cACR,+BAAW;cACX,wBAAI;cACJ,iCAAa;cACb,qCAAiB;cACjB,iCAAa;cACb,+BAAW;cACX,gCAAY;cACZ,wCAAoB;cACpB,uCAAmB;cACnB,qCAAiB;cACjB,sCAAkB;cAClB,4BAAQ;cACR,mCAAe;cACf,4BAAQ;cACR,8BAAU;cACV,+BAAW;cACX,qCAAiB;cACjB,mCAAe;cACf,4CAAwB;cACxB,mCAAe;cACf,iCAAa;cACb,oCAAgB;cAChB,2BAAO;cACP,mCAAe;cACf,4BAAQ;cACR,0BAAM;cACN,4BAAQ;cACR,mCAAe;cACf,4BAAQ;cACR,4BAAQ;cACR,iCAAa;cACb,2BAAO;cACP,gCAAY;cACZ,0BAAM;cACN,wCAAoB;cACpB,mCAAe;cACf,uCAAmB;cACnB,qCAAiB;cACjB,+BAAW;cACX,iCAAa;cACb,qCAAiB;cACjB,sCAAkB;cAClB,mCAAe;cACf,uBAAG;cACH,2BAAO;cACP,+BAAW;cACX,4BAAQ;cACR,uBAAG;cACH,qCAAiB;cACjB,kDAA8B;cAC9B,2BAAO;cACP,0BAAM;cACN,0BAAM;cACN,iCAAa;cACb,qCAAiB;cACjB,sCAAkB;cAClB,+CAA2B;cAC3B,kDAA8B;cAC9B,iCAAa;cACb,oCAAgB"}
1
+ {"version":3,"file":"symbols.d.mts","names":[],"sources":["../src/symbols.ts"],"mappings":";cAEa,iCAAa;cACb,iCAAa;cAEb,6BAAS;cACT,8BAAU;cACV,yBAAK;cACL,+BAAW;cACX,0BAAM;cACN,8BAAU;cACV,0BAAM;cACN,6BAAS;cACT,8BAAU;cACV,kCAAc;cACd,mCAAe;cACf,uCAAmB;cACnB,sCAAkB;cAClB,kCAAc;cACd,gCAAY;cACZ,wBAAI;cACJ,4BAAQ;cACR,sCAAkB;cAClB,6BAAS;cACT,gCAAY;cACZ,sCAAkB;cAClB,wCAAoB;cACpB,qCAAiB;cACjB,wCAAoB;cACpB,kCAAc;cACd,uCAAmB;cACnB,uCAAmB;cACnB,kCAAc;cACd,+BAAW;cACX,6BAAS;cACT,kCAAc;cACd,kCAAc;cACd,sCAAkB;cAClB,sCAAkB;cAClB,6BAAS;cACT,oCAAgB;cAChB,4BAAQ;cACR,4BAAQ;cACR,sCAAkB;cAClB,wCAAoB;cACpB,wBAAI;cACJ,+BAAW;cACX,2BAAO;cACP,4BAAQ;cACR,4BAAQ;cACR,2BAAO;cACP,0BAAM;cACN,4BAAQ;cACR,+BAAW;cACX,wBAAI;cACJ,iCAAa;cACb,qCAAiB;cACjB,iCAAa;cACb,+BAAW;cACX,gCAAY;cACZ,wCAAoB;cACpB,uCAAmB;cACnB,qCAAiB;cACjB,sCAAkB;cAClB,4BAAQ;cACR,mCAAe;cACf,4BAAQ;cACR,8BAAU;cACV,+BAAW;cACX,qCAAiB;cACjB,mCAAe;cACf,4CAAwB;cACxB,mCAAe;cACf,iCAAa;cACb,oCAAgB;cAChB,2BAAO;cACP,mCAAe;cACf,0BAAM;cACN,4BAAQ;cACR,0BAAM;cACN,4BAAQ;cACR,mCAAe;cACf,4BAAQ;cACR,4BAAQ;cACR,iCAAa;cACb,2BAAO;cACP,gCAAY;cACZ,0BAAM;cACN,wCAAoB;cACpB,mCAAe;cACf,uCAAmB;cACnB,qCAAiB;cACjB,+BAAW;cACX,iCAAa;cACb,qCAAiB;cACjB,sCAAkB;cAClB,mCAAe;cACf,uBAAG;cACH,2BAAO;cACP,+BAAW;cACX,4BAAQ;cACR,uBAAG;cACH,qCAAiB;cACjB,kDAA8B;cAC9B,2BAAO;cACP,0BAAM;cACN,0BAAM;cACN,iCAAa;cACb,qCAAiB;cACjB,sCAAkB;cAClB,+CAA2B;cAC3B,kDAA8B;cAC9B,iCAAa;cACb,oCAAgB"}
package/build/symbols.js CHANGED
@@ -74,6 +74,7 @@ const mustBeSubType = imp("mustBeSubType@joist-orm");
74
74
  const cleanStringValue = imp("cleanStringValue@joist-orm");
75
75
  const Changes = imp("t:Changes@joist-orm");
76
76
  const newChangesProxy = imp("newChangesProxy@joist-orm");
77
+ const nowUTC = imp("nowUTC@joist-orm");
77
78
  const LoadHint = imp("t:LoadHint@joist-orm");
78
79
  const Loaded = imp("t:Loaded@joist-orm");
79
80
  const isLoaded = imp("isLoaded@joist-orm");
@@ -111,6 +112,6 @@ const hasReactiveManyToManyOtherSide = imp("hasReactiveManyToManyOtherSide@joist
111
112
  const updatePartial = imp("updatePartial@joist-orm");
112
113
  const setRuntimeConfig = imp("setRuntimeConfig@joist-orm");
113
114
  //#endregion
114
- export { BaseEntity, BigIntSerde, BooleanFilter, BooleanGraphQLFilter, Changes, Collection, ConfigApi, CustomSerdeAdapter, DateSerde, DecimalToNumberSerde, DeepNew, DeepPartialOrNull, Entity, EntityConstructor, EntityFilter, EntityGraphQLFilter, EntityManager, EntityMetadata, EnumArrayFieldSerde, EnumCollection, EnumFieldSerde, EnumGraphQLFilter, EnumMetadata, FactoryOpts, FieldStatus, FieldsOf, FilterOf, Flavor, GraphQLFilterOf, IdOf, JoistEntityManager, JsonHint, JsonPayload, JsonSerde, KeySerde, LargeCollection, LazyField, Lens, LoadHint, Loaded, ManyToManyCollection, ManyToOneReference, MaybeAbstractEntityConstructor, New, OneToManyCollection, OneToOneReference, OptsOf, OrderBy, PartialOrNull, PlainDateSerde, PlainDateTimeSerde, PlainTimeSerde, PolymorphicKeySerde, PolymorphicReference, PrimitiveSerde, ProjectEntity, ReactiveField, ReactiveManyToMany, ReactiveManyToManyOtherSide, ReactiveReference, ReadOnlyCollection, Reference, RelationsOf, SSAssert, Scope, SuperstructSerde, TaggedId, ToJsonHint, ValueFilter, ValueGraphQLFilter, Zod, ZodSerde, ZonedDateTimeSerde, cannotBeUpdated, cleanStringValue, configureMetadata, deTagId, fail, failNoIdYet, getField, getInstanceData, hasEnumCollection, hasLargeMany, hasLargeManyToMany, hasLazyField, hasMany, hasManyToMany, hasOne, hasOnePolymorphic, hasOneThrough, hasOneToOne, hasReactiveManyToManyOtherSide, hasRecursiveChildren, hasRecursiveM2m, hasRecursiveParents, isEntity, isLoaded, loadLens, mustBeSubType, newChangesProxy, newRequiredLazyFieldRule, newRequiredRule, newScopeFn, newTestInstance, setField, setOpts, setRuntimeConfig, toIdOf, toJSON, updatePartial };
115
+ export { BaseEntity, BigIntSerde, BooleanFilter, BooleanGraphQLFilter, Changes, Collection, ConfigApi, CustomSerdeAdapter, DateSerde, DecimalToNumberSerde, DeepNew, DeepPartialOrNull, Entity, EntityConstructor, EntityFilter, EntityGraphQLFilter, EntityManager, EntityMetadata, EnumArrayFieldSerde, EnumCollection, EnumFieldSerde, EnumGraphQLFilter, EnumMetadata, FactoryOpts, FieldStatus, FieldsOf, FilterOf, Flavor, GraphQLFilterOf, IdOf, JoistEntityManager, JsonHint, JsonPayload, JsonSerde, KeySerde, LargeCollection, LazyField, Lens, LoadHint, Loaded, ManyToManyCollection, ManyToOneReference, MaybeAbstractEntityConstructor, New, OneToManyCollection, OneToOneReference, OptsOf, OrderBy, PartialOrNull, PlainDateSerde, PlainDateTimeSerde, PlainTimeSerde, PolymorphicKeySerde, PolymorphicReference, PrimitiveSerde, ProjectEntity, ReactiveField, ReactiveManyToMany, ReactiveManyToManyOtherSide, ReactiveReference, ReadOnlyCollection, Reference, RelationsOf, SSAssert, Scope, SuperstructSerde, TaggedId, ToJsonHint, ValueFilter, ValueGraphQLFilter, Zod, ZodSerde, ZonedDateTimeSerde, cannotBeUpdated, cleanStringValue, configureMetadata, deTagId, fail, failNoIdYet, getField, getInstanceData, hasEnumCollection, hasLargeMany, hasLargeManyToMany, hasLazyField, hasMany, hasManyToMany, hasOne, hasOnePolymorphic, hasOneThrough, hasOneToOne, hasReactiveManyToManyOtherSide, hasRecursiveChildren, hasRecursiveM2m, hasRecursiveParents, isEntity, isLoaded, loadLens, mustBeSubType, newChangesProxy, newRequiredLazyFieldRule, newRequiredRule, newScopeFn, newTestInstance, nowUTC, setField, setOpts, setRuntimeConfig, toIdOf, toJSON, updatePartial };
115
116
 
116
117
  //# sourceMappingURL=symbols.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.js","names":[],"sources":["../src/symbols.ts"],"sourcesContent":["import { imp } from \"ts-poet\";\n\nexport const ProjectEntity = imp(`t:Entity@./entities.ts`);\nexport const EntityManager = imp(\"EntityManager@./entities.ts\");\n\nexport const ConfigApi = imp(\"ConfigApi@joist-orm\");\nexport const newScopeFn = imp(\"newScopeFn@joist-orm\");\nexport const Scope = imp(\"t:Scope@joist-orm\");\nexport const FieldStatus = imp(\"t:FieldStatus@joist-orm\");\nexport const Entity = imp(\"t:Entity@joist-orm\");\nexport const BaseEntity = imp(\"BaseEntity@joist-orm\");\nexport const Flavor = imp(\"t:Flavor@joist-orm\");\nexport const Reference = imp(\"t:Reference@joist-orm\");\nexport const Collection = imp(\"t:Collection@joist-orm\");\nexport const EnumCollection = imp(\"t:EnumCollection@joist-orm\");\nexport const LargeCollection = imp(\"t:LargeCollection@joist-orm\");\nexport const OneToManyCollection = imp(\"OneToManyCollection@joist-orm\");\nexport const JoistEntityManager = imp(\"EntityManager@joist-orm\");\nexport const EntityMetadata = imp(\"t:EntityMetadata@joist-orm\");\nexport const EnumMetadata = imp(\"t:EnumMetadata@joist-orm\");\nexport const Lens = imp(\"t:Lens@joist-orm\");\nexport const KeySerde = imp(\"KeySerde@joist-orm\");\nexport const ManyToOneReference = imp(\"t:ManyToOneReference@joist-orm\");\nexport const LazyField = imp(\"t:LazyField@joist-orm\");\nexport const hasLazyField = imp(\"hasLazyField@joist-orm\");\nexport const ReadOnlyCollection = imp(\"t:ReadOnlyCollection@joist-orm\");\nexport const PolymorphicReference = imp(\"t:PolymorphicReference@joist-orm\");\nexport const OneToOneReference = imp(\"t:OneToOneReference@joist-orm\");\nexport const ManyToManyCollection = imp(\"ManyToManyCollection@joist-orm\");\nexport const EnumFieldSerde = imp(\"EnumFieldSerde@joist-orm\");\nexport const EnumArrayFieldSerde = imp(\"EnumArrayFieldSerde@joist-orm\");\nexport const PolymorphicKeySerde = imp(\"PolymorphicKeySerde@joist-orm\");\nexport const PrimitiveSerde = imp(\"PrimitiveSerde@joist-orm\");\nexport const BigIntSerde = imp(\"BigIntSerde@joist-orm\");\nexport const DateSerde = imp(\"DateSerde@joist-orm\");\nexport const PlainDateSerde = imp(\"PlainDateSerde@joist-orm\");\nexport const PlainTimeSerde = imp(\"PlainTimeSerde@joist-orm\");\nexport const PlainDateTimeSerde = imp(\"PlainDateTimeSerde@joist-orm\");\nexport const ZonedDateTimeSerde = imp(\"ZonedDateTimeSerde@joist-orm\");\nexport const JsonSerde = imp(\"JsonSerde@joist-orm\");\nexport const SuperstructSerde = imp(\"SuperstructSerde@joist-orm\");\nexport const TaggedId = imp(\"t:TaggedId@joist-orm\");\nexport const ZodSerde = imp(\"ZodSerde@joist-orm\");\nexport const CustomSerdeAdapter = imp(\"CustomSerdeAdapter@joist-orm\");\nexport const DecimalToNumberSerde = imp(\"DecimalToNumberSerde@joist-orm\");\nexport const fail = imp(\"fail@joist-orm\");\nexport const failNoIdYet = imp(\"failNoIdYet@joist-orm\");\nexport const setOpts = imp(\"setOpts@joist-orm\");\nexport const getField = imp(\"getField@joist-orm\");\nexport const setField = imp(\"setField@joist-orm\");\nexport const OrderBy = imp(\"t:OrderBy@joist-orm\");\nexport const OptsOf = imp(\"t:OptsOf@joist-orm\");\nexport const FieldsOf = imp(\"t:FieldsOf@joist-orm\");\nexport const RelationsOf = imp(\"t:RelationsOf@joist-orm\");\nexport const IdOf = imp(\"t:IdOf@joist-orm\");\nexport const PartialOrNull = imp(\"t:PartialOrNull@joist-orm\");\nexport const DeepPartialOrNull = imp(\"t:DeepPartialOrNull@joist-orm\");\nexport const BooleanFilter = imp(\"t:BooleanFilter@joist-orm\");\nexport const ValueFilter = imp(\"t:ValueFilter@joist-orm\");\nexport const EntityFilter = imp(\"t:EntityFilter@joist-orm\");\nexport const BooleanGraphQLFilter = imp(\"t:BooleanGraphQLFilter@joist-orm\");\nexport const EntityGraphQLFilter = imp(\"t:EntityGraphQLFilter@joist-orm\");\nexport const EnumGraphQLFilter = imp(\"t:EnumGraphQLFilter@joist-orm\");\nexport const ValueGraphQLFilter = imp(\"t:ValueGraphQLFilter@joist-orm\");\nexport const FilterOf = imp(\"t:FilterOf@joist-orm\");\nexport const GraphQLFilterOf = imp(\"t:GraphQLFilterOf@joist-orm\");\nexport const JsonHint = imp(\"t:JsonHint@joist-orm\");\nexport const ToJsonHint = imp(\"t:ToJsonHint@joist-orm\");\nexport const JsonPayload = imp(\"t:JsonPayload@joist-orm\");\nexport const configureMetadata = imp(\"configureMetadata@joist-orm\");\nexport const newRequiredRule = imp(\"newRequiredRule@joist-orm\");\nexport const newRequiredLazyFieldRule = imp(\"newRequiredLazyFieldRule@joist-orm\");\nexport const cannotBeUpdated = imp(\"cannotBeUpdated@joist-orm\");\nexport const mustBeSubType = imp(\"mustBeSubType@joist-orm\");\nexport const cleanStringValue = imp(\"cleanStringValue@joist-orm\");\nexport const Changes = imp(\"t:Changes@joist-orm\");\nexport const newChangesProxy = imp(\"newChangesProxy@joist-orm\");\nexport const LoadHint = imp(\"t:LoadHint@joist-orm\");\nexport const Loaded = imp(\"t:Loaded@joist-orm\");\nexport const isLoaded = imp(\"isLoaded@joist-orm\");\nexport const getInstanceData = imp(\"getInstanceData@joist-orm\");\nexport const isEntity = imp(\"isEntity@joist-orm\");\nexport const loadLens = imp(\"loadLens@joist-orm\");\nexport const hasOneThrough = imp(\"hasOneThrough@joist-orm\");\nexport const hasMany = imp(\"hasMany@joist-orm\");\nexport const hasLargeMany = imp(\"hasLargeMany@joist-orm\");\nexport const hasOne = imp(\"hasOne@joist-orm\");\nexport const hasRecursiveChildren = imp(\"hasRecursiveChildren@joist-orm\");\nexport const hasRecursiveM2m = imp(\"hasRecursiveM2m@joist-orm\");\nexport const hasRecursiveParents = imp(\"hasRecursiveParents@joist-orm\");\nexport const hasOnePolymorphic = imp(\"hasOnePolymorphic@joist-orm\");\nexport const hasOneToOne = imp(\"hasOneToOne@joist-orm\");\nexport const hasManyToMany = imp(\"hasManyToMany@joist-orm\");\nexport const hasEnumCollection = imp(\"hasEnumCollection@joist-orm\");\nexport const hasLargeManyToMany = imp(\"hasLargeManyToMany@joist-orm\");\nexport const newTestInstance = imp(\"newTestInstance@joist-orm\");\nexport const New = imp(\"t:New@joist-orm\");\nexport const DeepNew = imp(\"t:DeepNew@joist-orm\");\nexport const FactoryOpts = imp(\"t:FactoryOpts@joist-orm\");\nexport const SSAssert = imp(\"assert@superstruct\");\nexport const Zod = imp(\"z@zod\");\nexport const EntityConstructor = imp(\"t:EntityConstructor@joist-orm\");\nexport const MaybeAbstractEntityConstructor = imp(\"t:MaybeAbstractEntityConstructor@joist-orm\");\nexport const deTagId = imp(\"deTagId@joist-orm\");\nexport const toIdOf = imp(\"toIdOf@joist-orm\");\nexport const toJSON = imp(\"toJSON@joist-orm\");\nexport const ReactiveField = imp(\"t:ReactiveField@joist-orm\");\nexport const ReactiveReference = imp(\"t:ReactiveReference@joist-orm\");\nexport const ReactiveManyToMany = imp(\"t:ReactiveManyToMany@joist-orm\");\nexport const ReactiveManyToManyOtherSide = imp(\"t:ReactiveManyToManyOtherSide@joist-orm\");\nexport const hasReactiveManyToManyOtherSide = imp(\"hasReactiveManyToManyOtherSide@joist-orm\");\nexport const updatePartial = imp(\"updatePartial@joist-orm\");\nexport const setRuntimeConfig = imp(\"setRuntimeConfig@joist-orm\");\n"],"mappings":"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"}
1
+ {"version":3,"file":"symbols.js","names":[],"sources":["../src/symbols.ts"],"sourcesContent":["import { imp } from \"ts-poet\";\n\nexport const ProjectEntity = imp(`t:Entity@./entities.ts`);\nexport const EntityManager = imp(\"EntityManager@./entities.ts\");\n\nexport const ConfigApi = imp(\"ConfigApi@joist-orm\");\nexport const newScopeFn = imp(\"newScopeFn@joist-orm\");\nexport const Scope = imp(\"t:Scope@joist-orm\");\nexport const FieldStatus = imp(\"t:FieldStatus@joist-orm\");\nexport const Entity = imp(\"t:Entity@joist-orm\");\nexport const BaseEntity = imp(\"BaseEntity@joist-orm\");\nexport const Flavor = imp(\"t:Flavor@joist-orm\");\nexport const Reference = imp(\"t:Reference@joist-orm\");\nexport const Collection = imp(\"t:Collection@joist-orm\");\nexport const EnumCollection = imp(\"t:EnumCollection@joist-orm\");\nexport const LargeCollection = imp(\"t:LargeCollection@joist-orm\");\nexport const OneToManyCollection = imp(\"OneToManyCollection@joist-orm\");\nexport const JoistEntityManager = imp(\"EntityManager@joist-orm\");\nexport const EntityMetadata = imp(\"t:EntityMetadata@joist-orm\");\nexport const EnumMetadata = imp(\"t:EnumMetadata@joist-orm\");\nexport const Lens = imp(\"t:Lens@joist-orm\");\nexport const KeySerde = imp(\"KeySerde@joist-orm\");\nexport const ManyToOneReference = imp(\"t:ManyToOneReference@joist-orm\");\nexport const LazyField = imp(\"t:LazyField@joist-orm\");\nexport const hasLazyField = imp(\"hasLazyField@joist-orm\");\nexport const ReadOnlyCollection = imp(\"t:ReadOnlyCollection@joist-orm\");\nexport const PolymorphicReference = imp(\"t:PolymorphicReference@joist-orm\");\nexport const OneToOneReference = imp(\"t:OneToOneReference@joist-orm\");\nexport const ManyToManyCollection = imp(\"ManyToManyCollection@joist-orm\");\nexport const EnumFieldSerde = imp(\"EnumFieldSerde@joist-orm\");\nexport const EnumArrayFieldSerde = imp(\"EnumArrayFieldSerde@joist-orm\");\nexport const PolymorphicKeySerde = imp(\"PolymorphicKeySerde@joist-orm\");\nexport const PrimitiveSerde = imp(\"PrimitiveSerde@joist-orm\");\nexport const BigIntSerde = imp(\"BigIntSerde@joist-orm\");\nexport const DateSerde = imp(\"DateSerde@joist-orm\");\nexport const PlainDateSerde = imp(\"PlainDateSerde@joist-orm\");\nexport const PlainTimeSerde = imp(\"PlainTimeSerde@joist-orm\");\nexport const PlainDateTimeSerde = imp(\"PlainDateTimeSerde@joist-orm\");\nexport const ZonedDateTimeSerde = imp(\"ZonedDateTimeSerde@joist-orm\");\nexport const JsonSerde = imp(\"JsonSerde@joist-orm\");\nexport const SuperstructSerde = imp(\"SuperstructSerde@joist-orm\");\nexport const TaggedId = imp(\"t:TaggedId@joist-orm\");\nexport const ZodSerde = imp(\"ZodSerde@joist-orm\");\nexport const CustomSerdeAdapter = imp(\"CustomSerdeAdapter@joist-orm\");\nexport const DecimalToNumberSerde = imp(\"DecimalToNumberSerde@joist-orm\");\nexport const fail = imp(\"fail@joist-orm\");\nexport const failNoIdYet = imp(\"failNoIdYet@joist-orm\");\nexport const setOpts = imp(\"setOpts@joist-orm\");\nexport const getField = imp(\"getField@joist-orm\");\nexport const setField = imp(\"setField@joist-orm\");\nexport const OrderBy = imp(\"t:OrderBy@joist-orm\");\nexport const OptsOf = imp(\"t:OptsOf@joist-orm\");\nexport const FieldsOf = imp(\"t:FieldsOf@joist-orm\");\nexport const RelationsOf = imp(\"t:RelationsOf@joist-orm\");\nexport const IdOf = imp(\"t:IdOf@joist-orm\");\nexport const PartialOrNull = imp(\"t:PartialOrNull@joist-orm\");\nexport const DeepPartialOrNull = imp(\"t:DeepPartialOrNull@joist-orm\");\nexport const BooleanFilter = imp(\"t:BooleanFilter@joist-orm\");\nexport const ValueFilter = imp(\"t:ValueFilter@joist-orm\");\nexport const EntityFilter = imp(\"t:EntityFilter@joist-orm\");\nexport const BooleanGraphQLFilter = imp(\"t:BooleanGraphQLFilter@joist-orm\");\nexport const EntityGraphQLFilter = imp(\"t:EntityGraphQLFilter@joist-orm\");\nexport const EnumGraphQLFilter = imp(\"t:EnumGraphQLFilter@joist-orm\");\nexport const ValueGraphQLFilter = imp(\"t:ValueGraphQLFilter@joist-orm\");\nexport const FilterOf = imp(\"t:FilterOf@joist-orm\");\nexport const GraphQLFilterOf = imp(\"t:GraphQLFilterOf@joist-orm\");\nexport const JsonHint = imp(\"t:JsonHint@joist-orm\");\nexport const ToJsonHint = imp(\"t:ToJsonHint@joist-orm\");\nexport const JsonPayload = imp(\"t:JsonPayload@joist-orm\");\nexport const configureMetadata = imp(\"configureMetadata@joist-orm\");\nexport const newRequiredRule = imp(\"newRequiredRule@joist-orm\");\nexport const newRequiredLazyFieldRule = imp(\"newRequiredLazyFieldRule@joist-orm\");\nexport const cannotBeUpdated = imp(\"cannotBeUpdated@joist-orm\");\nexport const mustBeSubType = imp(\"mustBeSubType@joist-orm\");\nexport const cleanStringValue = imp(\"cleanStringValue@joist-orm\");\nexport const Changes = imp(\"t:Changes@joist-orm\");\nexport const newChangesProxy = imp(\"newChangesProxy@joist-orm\");\nexport const nowUTC = imp(\"nowUTC@joist-orm\");\nexport const LoadHint = imp(\"t:LoadHint@joist-orm\");\nexport const Loaded = imp(\"t:Loaded@joist-orm\");\nexport const isLoaded = imp(\"isLoaded@joist-orm\");\nexport const getInstanceData = imp(\"getInstanceData@joist-orm\");\nexport const isEntity = imp(\"isEntity@joist-orm\");\nexport const loadLens = imp(\"loadLens@joist-orm\");\nexport const hasOneThrough = imp(\"hasOneThrough@joist-orm\");\nexport const hasMany = imp(\"hasMany@joist-orm\");\nexport const hasLargeMany = imp(\"hasLargeMany@joist-orm\");\nexport const hasOne = imp(\"hasOne@joist-orm\");\nexport const hasRecursiveChildren = imp(\"hasRecursiveChildren@joist-orm\");\nexport const hasRecursiveM2m = imp(\"hasRecursiveM2m@joist-orm\");\nexport const hasRecursiveParents = imp(\"hasRecursiveParents@joist-orm\");\nexport const hasOnePolymorphic = imp(\"hasOnePolymorphic@joist-orm\");\nexport const hasOneToOne = imp(\"hasOneToOne@joist-orm\");\nexport const hasManyToMany = imp(\"hasManyToMany@joist-orm\");\nexport const hasEnumCollection = imp(\"hasEnumCollection@joist-orm\");\nexport const hasLargeManyToMany = imp(\"hasLargeManyToMany@joist-orm\");\nexport const newTestInstance = imp(\"newTestInstance@joist-orm\");\nexport const New = imp(\"t:New@joist-orm\");\nexport const DeepNew = imp(\"t:DeepNew@joist-orm\");\nexport const FactoryOpts = imp(\"t:FactoryOpts@joist-orm\");\nexport const SSAssert = imp(\"assert@superstruct\");\nexport const Zod = imp(\"z@zod\");\nexport const EntityConstructor = imp(\"t:EntityConstructor@joist-orm\");\nexport const MaybeAbstractEntityConstructor = imp(\"t:MaybeAbstractEntityConstructor@joist-orm\");\nexport const deTagId = imp(\"deTagId@joist-orm\");\nexport const toIdOf = imp(\"toIdOf@joist-orm\");\nexport const toJSON = imp(\"toJSON@joist-orm\");\nexport const ReactiveField = imp(\"t:ReactiveField@joist-orm\");\nexport const ReactiveReference = imp(\"t:ReactiveReference@joist-orm\");\nexport const ReactiveManyToMany = imp(\"t:ReactiveManyToMany@joist-orm\");\nexport const ReactiveManyToManyOtherSide = imp(\"t:ReactiveManyToManyOtherSide@joist-orm\");\nexport const hasReactiveManyToManyOtherSide = imp(\"hasReactiveManyToManyOtherSide@joist-orm\");\nexport const updatePartial = imp(\"updatePartial@joist-orm\");\nexport const setRuntimeConfig = imp(\"setRuntimeConfig@joist-orm\");\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "joist-codegen",
3
- "version": "2.3.0-next.57",
3
+ "version": "2.3.0-next.59",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "repository": {
@@ -38,7 +38,7 @@
38
38
  "skills"
39
39
  ],
40
40
  "peerDependencies": {
41
- "joist-utils": "2.3.0-next.57",
41
+ "joist-utils": "2.3.0-next.59",
42
42
  "knex": "^3.1.0",
43
43
  "pg": "^8.23.0"
44
44
  },