UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

1 lines 5.12 kB
{"version":3,"file":"collection-migrations.mjs","names":[],"sources":["../../../src/libs/repositories/collection-migrations.ts"],"sourcesContent":["import z from \"zod\";\nimport type DatabaseAdapter from \"../db/adapter-base.js\";\nimport type {\n\tKyselyDB,\n\tLucidCollectionMigrations,\n\tSelect,\n} from \"../db/types.js\";\nimport StaticRepository from \"./parents/static-repository.js\";\nimport type { QueryProps } from \"./types.js\";\n\nexport default class CollectionMigrationsRepository extends StaticRepository<\"lucid_collection_migrations\"> {\n\tconstructor(db: KyselyDB, dbAdapter: DatabaseAdapter) {\n\t\tsuper(db, dbAdapter, \"lucid_collection_migrations\");\n\t}\n\ttableSchema = z.object({\n\t\tid: z.number(),\n\t\tcollection_key: z.string(),\n\t\tmigration_plans: z.unknown(),\n\t\tcollection_schema: z.unknown(),\n\t\tcreated_at: z.union([z.string(), z.date()]).nullable(),\n\t\ttable_name_map: z.record(z.string(), z.string()),\n\t});\n\tcolumnFormats = {\n\t\tid: this.dbAdapter.getDataType(\"primary\"),\n\t\tcollection_key: this.dbAdapter.getDataType(\"text\"),\n\t\ttable_name_map: this.dbAdapter.getDataType(\"text\"),\n\t\tmigration_plans: this.dbAdapter.getDataType(\"json\"),\n\t\tcollection_schema: this.dbAdapter.getDataType(\"json\"),\n\t\tcreated_at: this.dbAdapter.getDataType(\"timestamp\"),\n\t};\n\tqueryConfig = undefined;\n\n\t/**\n\t * Returns the latest migration row for a collection.\n\t */\n\tasync selectLatestByCollectionKey<V extends boolean = false>(\n\t\tprops: QueryProps<\n\t\t\tV,\n\t\t\t{\n\t\t\t\tcollectionKey: string;\n\t\t\t}\n\t\t>,\n\t) {\n\t\tconst query = this.db\n\t\t\t.selectFrom(this.tableName)\n\t\t\t.selectAll()\n\t\t\t.where(\"collection_key\", \"=\", props.collectionKey)\n\t\t\t.orderBy(\"id\", \"desc\")\n\t\t\t.limit(1);\n\n\t\tconst exec = await this.executeQuery(\n\t\t\t() =>\n\t\t\t\tquery.executeTakeFirst() as Promise<\n\t\t\t\t\tSelect<LucidCollectionMigrations> | undefined\n\t\t\t\t>,\n\t\t\t{\n\t\t\t\tmethod: \"selectLatestByCollectionKey\",\n\t\t\t},\n\t\t);\n\t\tif (exec.response.error) return exec.response;\n\n\t\treturn this.validateResponse(exec, {\n\t\t\t...props.validation,\n\t\t\tmode: \"single\",\n\t\t\tselectAll: true,\n\t\t});\n\t}\n\t/**\n\t * Returns the latest migration row for each collection key.\n\t */\n\tasync selectLatestByCollectionKeysMap<V extends boolean = false>(\n\t\tprops: QueryProps<\n\t\t\tV,\n\t\t\t{\n\t\t\t\tcollectionKeys: string[];\n\t\t\t}\n\t\t>,\n\t) {\n\t\tif (props.collectionKeys.length === 0) {\n\t\t\treturn {\n\t\t\t\terror: undefined,\n\t\t\t\tdata: [],\n\t\t\t};\n\t\t}\n\n\t\tconst query = this.db\n\t\t\t.selectFrom(\"lucid_collection_migrations as cm\")\n\t\t\t.innerJoin(\n\t\t\t\tthis.db\n\t\t\t\t\t.selectFrom(this.tableName)\n\t\t\t\t\t.select([\"collection_key\", (eb) => eb.fn.max(\"id\").as(\"latest_id\")])\n\t\t\t\t\t.where(\"collection_key\", \"in\", props.collectionKeys)\n\t\t\t\t\t.groupBy(\"collection_key\")\n\t\t\t\t\t.as(\"latest_ids\"),\n\t\t\t\t(join) =>\n\t\t\t\t\tjoin\n\t\t\t\t\t\t.onRef(\"cm.collection_key\", \"=\", \"latest_ids.collection_key\")\n\t\t\t\t\t\t.onRef(\"cm.id\", \"=\", \"latest_ids.latest_id\"),\n\t\t\t)\n\t\t\t.selectAll(\"cm\");\n\n\t\tconst exec = await this.executeQuery(\n\t\t\t() => query.execute() as Promise<Select<LucidCollectionMigrations>[]>,\n\t\t\t{\n\t\t\t\tmethod: \"selectLatestByCollectionKeysMap\",\n\t\t\t},\n\t\t);\n\t\tif (exec.response.error) return exec.response;\n\n\t\treturn this.validateResponse(exec, {\n\t\t\t...props.validation,\n\t\t\tmode: \"multiple\",\n\t\t\tselectAll: true,\n\t\t});\n\t}\n}\n"],"mappings":"kEAUA,IAAqB,EAArB,cAA4D,CAAgD,CAC3G,YAAY,EAAc,EAA4B,CACrD,MAAM,EAAI,EAAW,6BAA6B,CACnD,CACA,YAAc,EAAE,OAAO,CACtB,GAAI,EAAE,OAAO,EACb,eAAgB,EAAE,OAAO,EACzB,gBAAiB,EAAE,QAAQ,EAC3B,kBAAmB,EAAE,QAAQ,EAC7B,WAAY,EAAE,MAAM,CAAC,EAAE,OAAO,EAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EACrD,eAAgB,EAAE,OAAO,EAAE,OAAO,EAAG,EAAE,OAAO,CAAC,CAChD,CAAC,EACD,cAAgB,CACf,GAAI,KAAK,UAAU,YAAY,SAAS,EACxC,eAAgB,KAAK,UAAU,YAAY,MAAM,EACjD,eAAgB,KAAK,UAAU,YAAY,MAAM,EACjD,gBAAiB,KAAK,UAAU,YAAY,MAAM,EAClD,kBAAmB,KAAK,UAAU,YAAY,MAAM,EACpD,WAAY,KAAK,UAAU,YAAY,WAAW,CACnD,EACA,YAAc,IAAA,GAKd,MAAM,4BACL,EAMC,CACD,IAAM,EAAQ,KAAK,GACjB,WAAW,KAAK,SAAS,CAAC,CAC1B,UAAU,CAAC,CACX,MAAM,iBAAkB,IAAK,EAAM,aAAa,CAAC,CACjD,QAAQ,KAAM,MAAM,CAAC,CACrB,MAAM,CAAC,EAEH,EAAO,MAAM,KAAK,iBAEtB,EAAM,iBAAiB,EAGxB,CACC,OAAQ,6BACT,CACD,EAGA,OAFI,EAAK,SAAS,MAAc,EAAK,SAE9B,KAAK,iBAAiB,EAAM,CAClC,GAAG,EAAM,WACT,KAAM,SACN,UAAW,EACZ,CAAC,CACF,CAIA,MAAM,gCACL,EAMC,CACD,GAAI,EAAM,eAAe,SAAW,EACnC,MAAO,CACN,MAAO,IAAA,GACP,KAAM,CAAC,CACR,EAGD,IAAM,EAAQ,KAAK,GACjB,WAAW,mCAAmC,CAAC,CAC/C,UACA,KAAK,GACH,WAAW,KAAK,SAAS,CAAC,CAC1B,OAAO,CAAC,iBAAmB,GAAO,EAAG,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CACnE,MAAM,iBAAkB,KAAM,EAAM,cAAc,CAAC,CACnD,QAAQ,gBAAgB,CAAC,CACzB,GAAG,YAAY,EAChB,GACA,EACE,MAAM,oBAAqB,IAAK,2BAA2B,CAAC,CAC5D,MAAM,QAAS,IAAK,sBAAsB,CAC9C,CAAC,CACA,UAAU,IAAI,EAEV,EAAO,MAAM,KAAK,iBACjB,EAAM,QAAQ,EACpB,CACC,OAAQ,iCACT,CACD,EAGA,OAFI,EAAK,SAAS,MAAc,EAAK,SAE9B,KAAK,iBAAiB,EAAM,CAClC,GAAG,EAAM,WACT,KAAM,WACN,UAAW,EACZ,CAAC,CACF,CACD"}