UNPKG

graphile-settings

Version:
59 lines (58 loc) 3.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildForeignKeyConstraint = buildForeignKeyConstraint; exports.buildIndexes = buildIndexes; exports.buildPrimaryKey = buildPrimaryKey; exports.buildUniqueConstraints = buildUniqueConstraints; exports.buildForeignKeyConstraints = buildForeignKeyConstraints; const type_mappings_1 = require("./type-mappings"); const table_meta_context_1 = require("./table-meta-context"); function buildForeignKeyConstraint(constraintName, localCodec, localAttributes, localAttributeNames, remoteCodec, remoteAttributes, remoteAttributeNames, context) { const referencedTable = remoteCodec?.name || 'unknown'; const referencedFields = remoteAttributeNames.map((attrName) => remoteCodec ? context.inflectAttr(attrName, remoteCodec) : attrName); return { name: constraintName, fields: (0, table_meta_context_1.buildFieldList)(localAttributeNames, localCodec, localAttributes, context), referencedTable, referencedFields, refFields: remoteAttributeNames.map((attrName) => (0, type_mappings_1.buildFieldMeta)(remoteCodec ? context.inflectAttr(attrName, remoteCodec) : attrName, remoteAttributes[attrName], context.build)), refTable: { name: referencedTable }, }; } function buildIndexes(codec, attributes, uniques, context) { return uniques.map((unique) => ({ name: unique.tags?.name || `${codec.name}_${unique.attributes.join('_')}_idx`, isUnique: true, isPrimary: !!unique.isPrimary, columns: unique.attributes.map((attrName) => context.inflectAttr(attrName, codec)), fields: (0, table_meta_context_1.buildFieldList)(unique.attributes, codec, attributes, context), })); } function buildPrimaryKey(codec, attributes, uniques, context) { const primaryUnique = uniques.find((unique) => unique.isPrimary); if (!primaryUnique) return null; return { name: primaryUnique.tags?.name || `${codec.name}_pkey`, fields: (0, table_meta_context_1.buildFieldList)(primaryUnique.attributes, codec, attributes, context), }; } function buildUniqueConstraints(codec, attributes, uniques, context) { return uniques .filter((unique) => !unique.isPrimary) .map((unique) => ({ name: unique.tags?.name || `${codec.name}_${unique.attributes.join('_')}_key`, fields: (0, table_meta_context_1.buildFieldList)(unique.attributes, codec, attributes, context), })); } function buildForeignKeyConstraints(codec, attributes, relations, context) { const constraints = []; for (const [relationName, relation] of Object.entries(relations)) { if (relation.isReferencee) continue; const remoteCodec = relation.remoteResource?.codec; const remoteAttributes = remoteCodec?.attributes || {}; constraints.push(buildForeignKeyConstraint(relationName, codec, attributes, relation.localAttributes || [], remoteCodec, remoteAttributes, relation.remoteAttributes || [], context)); } return constraints; }