UNPKG

@lucidcms/core

Version:

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

1 lines 4.41 kB
{"version":3,"file":"infer-schema.mjs","names":[],"sources":["../../../../src/libs/collection/schema/infer-schema.ts"],"sourcesContent":["import type CollectionBuilder from \"../../../libs/collection/builders/collection-builder/index.js\";\nimport type { ServiceResponse } from \"../../../types.js\";\nimport type DatabaseAdapter from \"../../db/adapter-base.js\";\nimport { copy } from \"../../i18n/index.js\";\nimport createDocumentTable from \"./tables/document-table.js\";\nimport createFieldTables from \"./tables/fields-table.js\";\nimport createVersionsTable from \"./tables/versions-table.js\";\nimport type { CollectionSchema, CollectionSchemaTable } from \"./types.js\";\n\n/**\n * Infers the collection schema from a given CollectionBuilder instance\n */\nconst inferSchema = (\n\tcollection: CollectionBuilder,\n\tdb: DatabaseAdapter,\n): Awaited<ServiceResponse<CollectionSchema>> => {\n\ttry {\n\t\tconst tables: Array<CollectionSchemaTable> = [];\n\n\t\t//* document table\n\t\tconst documentTableRes = createDocumentTable({\n\t\t\tcollection: collection,\n\t\t\tdb: db,\n\t\t});\n\t\tif (documentTableRes.error) return documentTableRes;\n\t\ttables.push(documentTableRes.data.schema);\n\n\t\t//* version table\n\t\tconst versionTableRes = createVersionsTable({\n\t\t\tcollection: collection,\n\t\t\tdb: db,\n\t\t});\n\t\tif (versionTableRes.error) return versionTableRes;\n\t\ttables.push(versionTableRes.data.schema);\n\n\t\t//* field / storage-pattern tables\n\t\tfor (const brick of collection.brickInstances || []) {\n\t\t\tconst brickFieldsTableRes = createFieldTables({\n\t\t\t\tcollection: collection,\n\t\t\t\tfields: brick.persistedFieldTree,\n\t\t\t\tdb: db,\n\t\t\t\ttype: \"brick\",\n\t\t\t\tdocumentTable: documentTableRes.data.schema.name,\n\t\t\t\tversionTable: versionTableRes.data.schema.name,\n\t\t\t\tbrick: brick,\n\t\t\t});\n\t\t\tif (brickFieldsTableRes.error) return brickFieldsTableRes;\n\n\t\t\ttables.push(brickFieldsTableRes.data.schema);\n\t\t\ttables.push(...brickFieldsTableRes.data.childTables);\n\t\t}\n\n\t\tconst collectionFieldsTableRes = createFieldTables({\n\t\t\tcollection: collection,\n\t\t\tfields: collection.persistedFieldTree,\n\t\t\tdb: db,\n\t\t\tdocumentTable: documentTableRes.data.schema.name,\n\t\t\tversionTable: versionTableRes.data.schema.name,\n\t\t\ttype: \"document-fields\",\n\t\t});\n\t\tif (collectionFieldsTableRes.error) return collectionFieldsTableRes;\n\n\t\ttables.push(collectionFieldsTableRes.data.schema);\n\t\ttables.push(...collectionFieldsTableRes.data.childTables);\n\n\t\t//* because the same brick can exist on both the fixed and builder bricks list at the same time, we need to dedupe the schema.\n\t\tconst uniqueTableNames = new Set<string>();\n\n\t\treturn {\n\t\t\tdata: {\n\t\t\t\tkey: collection.key,\n\t\t\t\ttables: tables.filter((table) => {\n\t\t\t\t\tif (uniqueTableNames.has(table.name)) return false;\n\t\t\t\t\tuniqueTableNames.add(table.name);\n\t\t\t\t\treturn true;\n\t\t\t\t}),\n\t\t\t},\n\t\t\terror: undefined,\n\t\t};\n\t} catch (err) {\n\t\treturn {\n\t\t\tdata: undefined,\n\t\t\terror: {\n\t\t\t\tmessage: copy(\n\t\t\t\t\t\"server:core.collections.schema.infer.failed\",\n\t\t\t\t\terr instanceof Error ? { defaultMessage: err.message } : undefined,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n};\n\nexport default inferSchema;\n"],"mappings":"0KAYA,MAAM,GACL,EACA,IACgD,CAChD,GAAI,CACH,IAAM,EAAuC,CAAC,EAGxC,EAAmB,EAAoB,CAChC,aACR,IACL,CAAC,EACD,GAAI,EAAiB,MAAO,OAAO,EACnC,EAAO,KAAK,EAAiB,KAAK,MAAM,EAGxC,IAAM,EAAkB,EAAoB,CAC/B,aACR,IACL,CAAC,EACD,GAAI,EAAgB,MAAO,OAAO,EAClC,EAAO,KAAK,EAAgB,KAAK,MAAM,EAGvC,IAAK,IAAM,KAAS,EAAW,gBAAkB,CAAC,EAAG,CACpD,IAAM,EAAsB,EAAkB,CACjC,aACZ,OAAQ,EAAM,mBACV,KACJ,KAAM,QACN,cAAe,EAAiB,KAAK,OAAO,KAC5C,aAAc,EAAgB,KAAK,OAAO,KACnC,OACR,CAAC,EACD,GAAI,EAAoB,MAAO,OAAO,EAEtC,EAAO,KAAK,EAAoB,KAAK,MAAM,EAC3C,EAAO,KAAK,GAAG,EAAoB,KAAK,WAAW,CACpD,CAEA,IAAM,EAA2B,EAAkB,CACtC,aACZ,OAAQ,EAAW,mBACf,KACJ,cAAe,EAAiB,KAAK,OAAO,KAC5C,aAAc,EAAgB,KAAK,OAAO,KAC1C,KAAM,iBACP,CAAC,EACD,GAAI,EAAyB,MAAO,OAAO,EAE3C,EAAO,KAAK,EAAyB,KAAK,MAAM,EAChD,EAAO,KAAK,GAAG,EAAyB,KAAK,WAAW,EAGxD,IAAM,EAAmB,IAAI,IAE7B,MAAO,CACN,KAAM,CACL,IAAK,EAAW,IAChB,OAAQ,EAAO,OAAQ,GAClB,EAAiB,IAAI,EAAM,IAAI,EAAU,IAC7C,EAAiB,IAAI,EAAM,IAAI,EACxB,GACP,CACF,EACA,MAAO,IAAA,EACR,CACD,OAAS,EAAK,CACb,MAAO,CACN,KAAM,IAAA,GACN,MAAO,CACN,QAAS,EACR,8CACA,aAAe,MAAQ,CAAE,eAAgB,EAAI,OAAQ,EAAI,IAAA,EAC1D,CACD,CACD,CACD,CACD"}