graphile-settings
Version:
graphile settings
59 lines (58 loc) • 3.08 kB
JavaScript
;
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;
}