Rebuild the connector catalog with gendered Male/Female port types

Replaces the old ungendered catalog (plain XLR, TS/TRS 1/4", Speakon
NL2/4/8, etc.) with a full Male/Female-aware set covering audio, video,
network/data, USB (with Host/Device role split for USB-C), power, RF coax,
and fiber connectors, plus real-world bridging/adapter cables — enough to
model gender benders and specify exact cable types in the BOM instead of
just a connector family. The catalog now lives entirely in the DB (seeded
via supabase/seed.sql, captured with the new export-seed.mjs) rather than
partly hardcoded in domain/library.ts, which is now unused.

Existing seeded diagrams/devices were intentionally not migrated to the
new port types — there was nothing important in them yet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017DUU6CnxECCDeqDNYJgr5x
This commit is contained in:
2026-09-28 10:05:41 -05:00
co-authored by Claude Sonnet 5
parent 6cdfde822d
commit a5c2ad87e1
6 changed files with 463 additions and 433 deletions
+1
View File
@@ -67,6 +67,7 @@ Stated explicitly during planning: this needs to run **entirely locally** during
- **Impact check before an Admin acts.** Before an edit-submission is approved (or a Super Admin edits/hides a public entry directly), they see how many diagrams reference that entry and a short sample (diagram name + owner username) — computed by a privileged, admin-only function that returns only that aggregate, *not* raw access into other users' diagram contents. Regular Admins still don't get diagram visibility (only Super Admins do, per §6) — this doesn't change that boundary, it just answers "what's the blast radius" without needing it.
- **Public catalog entries are never hard-deleted**, only hidden/unpublished from new use (the same pattern already used for hiding built-in device templates) — closes off the one scenario (an entry disappearing out from under a diagram, showing "Unknown type") that live references can't otherwise defend against.
- **Decided: site-wide announcements.** A new lightweight concept: an Admin can post a dismissible banner that every signed-in user sees (e.g. "the XLR-to-TRS adapter cable's compatibility changed on 2026-09-08, check any diagrams using it") — offered as a follow-up step right after acting on an impact-flagged change, so users aren't surprised by something that already shipped.
- **Future TODO, not yet built: a real `role` concept on `PortType`.** Surfaced while building the gendered connector catalog (2026-09-27) — `family`/`compatibleFamilyIds` alone can express "these two types may connect" but not "these two ports are the *same* declared type and must *not* self-pair" (e.g. USB-C Host must not wire to another USB-C Host). The compatibility engine's base rule is "identical family is always compatible," which every ordinary gendered pair relies on (two "XLR (Female)" ports on different devices should connect via a cable) but which makes true role exclusivity (Host-vs-Host, Device-vs-Device) currently unenforceable through catalog data alone. Fixing it needs an actual code change in `compatibility.ts` (an explicit role field + logic, not just another family flavor). Low-stakes today — USB-C Host/Device is the only pair using it — deliberately deferred rather than built speculatively.
## 4. Canvas — Compact & Expanded Device Views
+3 -1
View File
@@ -7,7 +7,9 @@
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "oxlint",
"preview": "vite preview"
"preview": "vite preview",
"export-seed": "node scripts/export-seed.mjs",
"db:reset": "node scripts/export-seed.mjs --check && npx supabase db reset"
},
"dependencies": {
"@supabase/supabase-js": "^2.115.0",
+166
View File
@@ -0,0 +1,166 @@
// Generates supabase/seed.sql from the local Supabase database's own public
// catalog rows (is_public = true), rather than from a hand-written source
// file — supersedes the old generate-seed.mjs/src/domain/library.ts pair, so
// the app's own device/category/port/cable-type editors (used as an Admin,
// with "Publish directly to the shared library" checked) become the one way
// new seed data gets authored. Run via: npm run export-seed
//
// `--check` instead diffs what this would write against the current
// supabase/seed.sql and exits 1 without writing if they differ — used by
// `npm run db:reset` to refuse to blow away catalog entries you haven't
// exported yet (see package.json).
import { execFileSync } from 'node:child_process'
import { existsSync, readFileSync, writeFileSync } from 'node:fs'
const DB_CONTAINER = 'supabase_db_av-planner'
const SEED_PATH = new URL('../supabase/seed.sql', import.meta.url)
function queryJson(sql) {
const wrapped = `select coalesce(json_agg(t), '[]'::json) from (${sql}) t;`
const output = execFileSync(
'docker',
['exec', DB_CONTAINER, 'psql', '-U', 'postgres', '-d', 'postgres', '-t', '-A', '-c', wrapped],
{ encoding: 'utf8' },
)
return JSON.parse(output.trim())
}
function sqlString(value) {
if (value === undefined || value === null) return 'null'
return `'${String(value).replace(/'/g, "''")}'`
}
function sqlTextArray(values) {
if (!values || values.length === 0) return "'{}'"
return `'{${values.map((v) => `"${v.replace(/"/g, '\\"')}"`).join(',')}}'`
}
function sqlNumber(value) {
return value === undefined || value === null ? 'null' : String(value)
}
function loadCatalog() {
return {
categories: queryJson('select id, name from device_categories where is_public order by name'),
manufacturers: queryJson('select id, name from manufacturers where is_public order by name'),
portTypes: queryJson(
'select id, name, category, family, compatible_family_ids, max_connections from port_types where is_public order by name',
),
cableTypes: queryJson(
'select id, name, family, family2, unit, cost_per_unit from cable_types where is_public order by name',
),
deviceTemplates: queryJson(
'select id, name, category_id, manufacturer_id, model, cost from device_templates where is_public order by name',
),
devicePorts: queryJson(
`select id, device_template_id, name, direction, port_type_id, sort_order, built_in_cable
from device_template_ports
where device_template_id in (select id from device_templates where is_public)
order by device_template_id, sort_order`,
),
}
}
function buildSeedContent(catalog) {
const { categories, manufacturers, portTypes, cableTypes, deviceTemplates, devicePorts } = catalog
const lines = []
lines.push("-- Generated by scripts/export-seed.mjs from the local Supabase database's public")
lines.push('-- catalog rows. Do not hand-edit — author new devices/connectors via the app\'s')
lines.push('-- GUI instead (as an Admin, check "Publish directly to the shared library"),')
lines.push('-- then re-run: npm run export-seed')
lines.push('-- Seeds the public catalog: is_public = true, owner_id = null (system-owned).')
lines.push('')
lines.push('-- Device categories')
for (const c of categories) {
lines.push(`insert into public.device_categories (id, name, is_public) values (${sqlString(c.id)}, ${sqlString(c.name)}, true);`)
}
lines.push('')
lines.push('-- Manufacturers')
for (const m of manufacturers) {
lines.push(`insert into public.manufacturers (id, name, is_public) values (${sqlString(m.id)}, ${sqlString(m.name)}, true);`)
}
lines.push('')
lines.push('-- Port types')
for (const pt of portTypes) {
lines.push(
`insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values (${sqlString(pt.id)}, ${sqlString(pt.name)}, ${sqlString(pt.category)}, ${sqlString(pt.family)}, ${sqlTextArray(pt.compatible_family_ids)}, ${sqlNumber(pt.max_connections)}, true);`,
)
}
lines.push('')
lines.push('-- Cable types')
for (const ct of cableTypes) {
lines.push(
`insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values (${sqlString(ct.id)}, ${sqlString(ct.name)}, ${sqlString(ct.family)}, ${sqlString(ct.family2)}, ${sqlString(ct.unit)}, ${sqlNumber(ct.cost_per_unit)}, true);`,
)
}
lines.push('')
lines.push('-- Device templates + their ports')
const portsByTemplate = new Map()
for (const port of devicePorts) {
const list = portsByTemplate.get(port.device_template_id) ?? []
list.push(port)
portsByTemplate.set(port.device_template_id, list)
}
for (const dt of deviceTemplates) {
lines.push(
`insert into public.device_templates (id, name, category_id, manufacturer_id, model, cost, is_public) values (${sqlString(dt.id)}, ${sqlString(dt.name)}, ${sqlString(dt.category_id)}, ${sqlString(dt.manufacturer_id)}, ${sqlString(dt.model)}, ${sqlNumber(dt.cost)}, true);`,
)
for (const port of portsByTemplate.get(dt.id) ?? []) {
lines.push(
`insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order, built_in_cable) values (${sqlString(port.id)}, ${sqlString(port.device_template_id)}, ${sqlString(port.name)}, ${sqlString(port.direction)}, ${sqlString(port.port_type_id)}, ${port.sort_order}, ${port.built_in_cable});`,
)
}
}
lines.push('')
return lines.join('\n') + '\n'
}
function summarize(catalog) {
return `${catalog.categories.length} categories, ${catalog.manufacturers.length} manufacturers, ${catalog.portTypes.length} port types, ${catalog.cableTypes.length} cable types, ${catalog.deviceTemplates.length} device templates`
}
const isCheck = process.argv.includes('--check')
let catalog
try {
catalog = loadCatalog()
} catch (err) {
const message = err instanceof Error ? err.message : String(err)
if (isCheck) {
// Best-effort safety net, not a hard gate — if the local DB isn't
// reachable (Docker down, container not started yet) don't block a
// reset over it.
console.warn(`Couldn't reach the local Supabase database to check seed.sql — proceeding without checking.\n${message}`)
process.exit(0)
}
console.error(`Failed to read the public catalog from the local Supabase database.\n${message}`)
process.exit(1)
}
const content = buildSeedContent(catalog)
if (isCheck) {
const current = existsSync(SEED_PATH) ? readFileSync(SEED_PATH, 'utf8') : ''
if (current === content) {
console.log('supabase/seed.sql matches the database — safe to reset.')
process.exit(0)
}
console.error(
[
"supabase/seed.sql is out of date with the local database's public catalog.",
'Resetting now would discard whatever you\'ve published since it was last exported.',
'',
'Run `npm run export-seed` first to capture it, or run `npx supabase db reset` directly if you want to discard it.',
].join('\n'),
)
process.exit(1)
}
writeFileSync(SEED_PATH, content)
console.log(`Wrote supabase/seed.sql (${summarize(catalog)})`)
-62
View File
@@ -1,62 +0,0 @@
// Generates supabase/seed.sql from src/domain/library.ts, so the public
// catalog seed data is derived directly from the source of truth instead of
// hand-transcribed (and risking drift/typos). Run via: node scripts/generate-seed.mjs
import { BUILT_IN_CABLE_TYPES, BUILT_IN_DEVICE_CATEGORIES, BUILT_IN_DEVICE_TEMPLATES, BUILT_IN_PORT_TYPES } from '../src/domain/library.ts'
import { writeFileSync } from 'node:fs'
import { randomUUID } from 'node:crypto'
function sqlString(value) {
if (value === undefined || value === null) return 'null'
return `'${String(value).replace(/'/g, "''")}'`
}
function sqlTextArray(values) {
if (!values || values.length === 0) return "'{}'"
return `'{${values.map((v) => `"${v.replace(/"/g, '\\"')}"`).join(',')}}'`
}
const lines = []
lines.push('-- Generated by scripts/generate-seed.mjs from src/domain/library.ts. Do not hand-edit —')
lines.push('-- re-run the script after changing the built-in library instead.')
lines.push('-- Seeds the public catalog: is_public = true, owner_id = null (system-owned).')
lines.push('')
lines.push('-- Device categories')
for (const c of BUILT_IN_DEVICE_CATEGORIES) {
lines.push(
`insert into public.device_categories (id, name, is_public) values (${sqlString(c.id)}, ${sqlString(c.name)}, true);`,
)
}
lines.push('')
lines.push('-- Port types')
for (const pt of BUILT_IN_PORT_TYPES) {
lines.push(
`insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values (${sqlString(pt.id)}, ${sqlString(pt.name)}, ${sqlString(pt.category)}, ${sqlString(pt.family)}, ${sqlTextArray(pt.compatibleFamilyIds)}, ${pt.maxConnections ?? 'null'}, true);`,
)
}
lines.push('')
lines.push('-- Cable types')
for (const ct of BUILT_IN_CABLE_TYPES) {
lines.push(
`insert into public.cable_types (id, name, family, family2, unit, is_public) values (${sqlString(ct.id)}, ${sqlString(ct.name)}, ${sqlString(ct.family)}, ${sqlString(ct.family2)}, ${sqlString(ct.unit)}, true);`,
)
}
lines.push('')
lines.push('-- Device templates + their ports')
for (const dt of BUILT_IN_DEVICE_TEMPLATES) {
lines.push(
`insert into public.device_templates (id, name, category_id, is_public) values (${sqlString(dt.id)}, ${sqlString(dt.name)}, ${sqlString(dt.category)}, true);`,
)
for (const [index, port] of dt.ports.entries()) {
lines.push(
`insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values (${sqlString(randomUUID())}, ${sqlString(dt.id)}, ${sqlString(port.name)}, ${sqlString(port.direction)}, ${sqlString(port.portTypeId)}, ${index});`,
)
}
}
lines.push('')
writeFileSync(new URL('../supabase/seed.sql', import.meta.url), lines.join('\n') + '\n')
console.log(`Wrote supabase/seed.sql (${lines.length} lines)`)
-257
View File
@@ -1,257 +0,0 @@
import type { CableType, DeviceCategoryDef, DeviceTemplate, PortType } from './types'
/**
* Built-in connector/cable/device libraries — the source of truth for the
* public catalog's seed data. Not imported by the app itself anymore (the
* catalog is fetched from Supabase at runtime, see state/catalogStore.ts);
* this file is read only by scripts/generate-seed.mjs, which turns it into
* supabase/seed.sql. Re-run that script after editing anything here.
*/
export const BUILT_IN_DEVICE_CATEGORIES: DeviceCategoryDef[] = [
{ id: 'display', name: 'Display' },
{ id: 'video-source', name: 'Video Source' },
{ id: 'audio-source', name: 'Audio Source' },
{ id: 'synth', name: 'Synthesizer / Sound Module' },
{ id: 'mixer', name: 'Mixer' },
{ id: 'amplifier', name: 'Amplifier / Receiver' },
{ id: 'speaker', name: 'Speaker' },
{ id: 'network', name: 'Network' },
{ id: 'computer', name: 'Computer' },
{ id: 'camera', name: 'Camera' },
{ id: 'control', name: 'Control' },
{ id: 'power', name: 'Power' },
{ id: 'adapter', name: 'Adapter / Converter' },
{ id: 'other', name: 'Other' },
]
export const BUILT_IN_PORT_TYPES: PortType[] = [
{ id: 'pt-hdmi', name: 'HDMI', category: 'video', family: 'hdmi' },
{ id: 'pt-displayport', name: 'DisplayPort', category: 'video', family: 'displayport' },
{ id: 'pt-sdi', name: 'SDI (BNC)', category: 'video', family: 'sdi' },
{ id: 'pt-vga', name: 'VGA', category: 'video', family: 'vga' },
{ id: 'pt-composite', name: 'Composite Video (RCA)', category: 'video', family: 'rca-composite' },
{ id: 'pt-xlr', name: 'XLR (Balanced Audio)', category: 'audio', family: 'xlr' },
{ id: 'pt-trs-quarter', name: '1/4" TRS (Balanced Audio)', category: 'audio', family: 'trs-quarter' },
{ id: 'pt-ts-quarter', name: '1/4" TS (Unbalanced Audio)', category: 'audio', family: 'ts-quarter' },
{ id: 'pt-trs-mini', name: '3.5mm TRS (Balanced Audio)', category: 'audio', family: 'trs-mini' },
{ id: 'pt-ts-mini', name: '3.5mm (Unbalanced Audio)', category: 'audio', family: 'ts-mini' },
{
id: 'pt-trs-quarter-combo',
name: '1/4" TRS/TS (Balanced or Unbalanced)',
category: 'audio',
family: 'trs-quarter-combo',
compatibleFamilyIds: ['trs-quarter', 'ts-quarter'],
},
{
id: 'pt-trs-mini-combo',
name: '3.5mm TRS/TS (Balanced or Unbalanced)',
category: 'audio',
family: 'trs-mini-combo',
compatibleFamilyIds: ['trs-mini', 'ts-mini'],
},
{ id: 'pt-rca-audio', name: 'RCA (Stereo Audio)', category: 'audio', family: 'rca-audio' },
{ id: 'pt-speakon', name: 'Speakon', category: 'audio', family: 'speakon' },
{ id: 'pt-speaker-wire', name: 'Speaker Wire (Bare/Terminal)', category: 'audio', family: 'speaker-wire', maxConnections: 1 },
{ id: 'pt-toslink', name: 'TOSLINK (Optical)', category: 'audio', family: 'toslink' },
{
id: 'pt-cat-rj45',
name: 'Cat5e/6 (RJ45)',
category: 'network',
family: 'cat-rj45',
compatibleFamilyIds: ['cat-rj45'],
},
{ id: 'pt-fiber-lc', name: 'Fiber (LC)', category: 'network', family: 'fiber-lc' },
{ id: 'pt-usb-a', name: 'USB-A (Unspecified)', category: 'usb', family: 'usb-a' },
{ id: 'pt-usb-c', name: 'USB-C (Unspecified)', category: 'usb', family: 'usb-c' },
{
id: 'pt-usb-a-host',
name: 'USB-A (Host)',
category: 'usb',
family: 'usb-a-host',
// 'usb-a-to-b' lets this pair with a USB-B device port via an A-to-B
// cable, distinct from the plain A-to-A cable used with usb-a-device.
compatibleFamilyIds: ['usb-a-device', 'usb-a-to-b'],
},
{
id: 'pt-usb-a-device',
name: 'USB-A (Device)',
category: 'usb',
family: 'usb-a-device',
compatibleFamilyIds: ['usb-a-host'],
},
{
id: 'pt-usb-c-host',
name: 'USB-C (Host)',
category: 'usb',
family: 'usb-c-host',
compatibleFamilyIds: ['usb-c-device', 'usb-c-to-b'],
},
{
id: 'pt-usb-c-device',
name: 'USB-C (Device)',
category: 'usb',
family: 'usb-c-device',
compatibleFamilyIds: ['usb-c-host'],
},
{
id: 'pt-usb-b-device',
name: 'USB-B (Device)',
category: 'usb',
family: 'usb-b-device',
// The classic "printer" connector — pairs with a host's USB-A or USB-C
// port via the corresponding shaped cable, not with another USB-B port.
compatibleFamilyIds: ['usb-a-to-b', 'usb-c-to-b'],
},
{ id: 'pt-iec-power', name: 'IEC C13/C14 Power', category: 'power', family: 'iec-power' },
{ id: 'pt-nema-power', name: 'NEMA 5-15 Power', category: 'power', family: 'nema-power' },
{ id: 'pt-rs232', name: 'RS-232 (Serial)', category: 'control', family: 'rs232' },
{ id: 'pt-ir', name: 'IR (3.5mm Emitter/Receiver)', category: 'control', family: 'ir' },
{ id: 'pt-midi-din', name: 'MIDI (5-Pin DIN)', category: 'control', family: 'midi-din' },
{
id: 'pt-midi-trs-a',
name: '3.5mm MIDI (Type A)',
category: 'control',
family: 'midi-trs-a',
// Deliberately NOT cross-compatible with Type B — the two standards
// swap tip/ring polarity, so a straight cable between them doesn't work.
},
{ id: 'pt-midi-trs-b', name: '3.5mm MIDI (Type B)', category: 'control', family: 'midi-trs-b' },
]
export const BUILT_IN_CABLE_TYPES: CableType[] = [
{ id: 'ct-hdmi', name: 'HDMI Cable', family: 'hdmi', unit: 'ft' },
{ id: 'ct-displayport', name: 'DisplayPort Cable', family: 'displayport', unit: 'ft' },
{ id: 'ct-sdi', name: 'SDI Coax (BNC)', family: 'sdi', unit: 'ft' },
{ id: 'ct-vga', name: 'VGA Cable', family: 'vga', unit: 'ft' },
{ id: 'ct-composite', name: 'Composite Video Cable (RCA)', family: 'rca-composite', unit: 'ft' },
{ id: 'ct-xlr', name: 'XLR Cable', family: 'xlr', unit: 'ft' },
{
id: 'ct-xlr-to-trs-quarter',
name: 'XLR to 1/4" TRS Adapter Cable',
family: 'xlr',
family2: 'trs-quarter',
unit: 'ft',
},
{ id: 'ct-trs-quarter', name: '1/4" TRS Cable (Balanced)', family: 'trs-quarter', unit: 'ft' },
{ id: 'ct-ts-quarter', name: '1/4" TS Cable (Instrument/Unbalanced)', family: 'ts-quarter', unit: 'ft' },
{ id: 'ct-trs-mini', name: '3.5mm TRS Cable (Balanced)', family: 'trs-mini', unit: 'ft' },
{ id: 'ct-ts-mini', name: '3.5mm Cable (Unbalanced)', family: 'ts-mini', unit: 'ft' },
{ id: 'ct-rca-audio', name: 'RCA Stereo Audio Cable', family: 'rca-audio', unit: 'ft' },
{ id: 'ct-speakon', name: 'Speakon Cable', family: 'speakon', unit: 'ft' },
{ id: 'ct-speaker-wire', name: 'Speaker Wire (14/2)', family: 'speaker-wire', unit: 'ft' },
{ id: 'ct-toslink', name: 'TOSLINK Optical Cable', family: 'toslink', unit: 'ft' },
{ id: 'ct-cat6', name: 'Cat6 Cable', family: 'cat-rj45', unit: 'ft' },
{ id: 'ct-fiber-lc', name: 'Fiber LC-LC Cable', family: 'fiber-lc', unit: 'ft' },
{ id: 'ct-usb-a', name: 'USB-A to USB-A Cable', family: 'usb-a', unit: 'ft' },
{ id: 'ct-usb-c', name: 'USB-C Cable', family: 'usb-c', unit: 'ft' },
{ id: 'ct-usb-a-host-device', name: 'USB-A Cable (Host ↔ Device)', family: 'usb-a-host', unit: 'ft' },
{ id: 'ct-usb-c-host-device', name: 'USB-C Cable (Host ↔ Device)', family: 'usb-c-host', unit: 'ft' },
{ id: 'ct-usb-a-to-b', name: 'USB-A to USB-B Cable', family: 'usb-a-to-b', unit: 'ft' },
{ id: 'ct-usb-c-to-b', name: 'USB-C to USB-B Cable', family: 'usb-c-to-b', unit: 'ft' },
{ id: 'ct-iec-power', name: 'IEC C13 Power Cable', family: 'iec-power', unit: 'ft' },
{ id: 'ct-nema-power', name: 'NEMA 5-15 Extension Cord', family: 'nema-power', unit: 'ft' },
{ id: 'ct-rs232', name: 'RS-232 Serial Cable', family: 'rs232', unit: 'ft' },
{ id: 'ct-ir', name: 'IR Emitter Cable', family: 'ir', unit: 'ft' },
{ id: 'ct-midi-din', name: 'MIDI Cable (5-Pin DIN)', family: 'midi-din', unit: 'ft' },
{ id: 'ct-midi-trs-a', name: '3.5mm MIDI Cable (Type A)', family: 'midi-trs-a', unit: 'ft' },
{ id: 'ct-midi-trs-b', name: '3.5mm MIDI Cable (Type B)', family: 'midi-trs-b', unit: 'ft' },
]
/** Small starter set of common AV device shapes; users add their own via the editor. */
export const BUILT_IN_DEVICE_TEMPLATES: DeviceTemplate[] = [
{
id: 'dt-display',
name: 'Display (TV / Projector)',
category: 'display',
ports: [
{ id: 'p1', name: 'HDMI In 1', direction: 'input', portTypeId: 'pt-hdmi' },
{ id: 'p2', name: 'HDMI In 2', direction: 'input', portTypeId: 'pt-hdmi' },
{ id: 'p3', name: 'Power In', direction: 'input', portTypeId: 'pt-iec-power' },
],
},
{
id: 'dt-media-player',
name: 'Media Player / Streamer',
category: 'video-source',
ports: [
{ id: 'p1', name: 'HDMI Out', direction: 'output', portTypeId: 'pt-hdmi' },
{ id: 'p2', name: 'Power In', direction: 'input', portTypeId: 'pt-nema-power' },
],
},
{
id: 'dt-avr',
name: 'AV Receiver',
category: 'amplifier',
ports: [
{ id: 'p1', name: 'HDMI In 1', direction: 'input', portTypeId: 'pt-hdmi' },
{ id: 'p2', name: 'HDMI In 2', direction: 'input', portTypeId: 'pt-hdmi' },
{ id: 'p3', name: 'HDMI In 3', direction: 'input', portTypeId: 'pt-hdmi' },
{ id: 'p4', name: 'HDMI Out (Display)', direction: 'output', portTypeId: 'pt-hdmi' },
{ id: 'p5', name: 'Speaker Out L', direction: 'output', portTypeId: 'pt-speaker-wire' },
{ id: 'p6', name: 'Speaker Out R', direction: 'output', portTypeId: 'pt-speaker-wire' },
{ id: 'p7', name: 'Power In', direction: 'input', portTypeId: 'pt-iec-power' },
],
},
{
id: 'dt-speaker',
name: 'Speaker (Passive)',
category: 'speaker',
ports: [{ id: 'p1', name: 'Speaker In', direction: 'input', portTypeId: 'pt-speaker-wire' }],
},
{
id: 'dt-switch',
name: 'Network Switch',
category: 'network',
ports: [
{ id: 'p1', name: 'Port 1', direction: 'bidirectional', portTypeId: 'pt-cat-rj45' },
{ id: 'p2', name: 'Port 2', direction: 'bidirectional', portTypeId: 'pt-cat-rj45' },
{ id: 'p3', name: 'Port 3', direction: 'bidirectional', portTypeId: 'pt-cat-rj45' },
{ id: 'p4', name: 'Port 4', direction: 'bidirectional', portTypeId: 'pt-cat-rj45' },
{ id: 'p5', name: 'Power In', direction: 'input', portTypeId: 'pt-iec-power' },
],
},
{
id: 'dt-camera',
name: 'PTZ Camera',
category: 'camera',
ports: [
{ id: 'p1', name: 'SDI Out', direction: 'output', portTypeId: 'pt-sdi' },
{ id: 'p2', name: 'Control (RJ45)', direction: 'bidirectional', portTypeId: 'pt-cat-rj45' },
{ id: 'p3', name: 'Power In', direction: 'input', portTypeId: 'pt-nema-power' },
],
},
{
id: 'dt-computer',
name: 'Computer / Laptop',
category: 'computer',
ports: [
{ id: 'p1', name: 'HDMI Out', direction: 'output', portTypeId: 'pt-hdmi' },
{ id: 'p2', name: 'USB-C', direction: 'bidirectional', portTypeId: 'pt-usb-c' },
{ id: 'p3', name: 'Ethernet', direction: 'bidirectional', portTypeId: 'pt-cat-rj45' },
],
},
// Adapters model a real standalone part (a barrel/dongle) as a tiny
// 2-port device, so a connection that genuinely needs two physical
// cables — e.g. 3.5mm MIDI into a DIN adapter, then a DIN cable onward —
// shows up in the BOM as what it actually is: one adapter + two cables,
// each with its own length, instead of being squeezed into one cable type.
{
id: 'dt-adapter-midi-trs-a-to-din',
name: '3.5mm-to-DIN MIDI Adapter (Type A)',
category: 'adapter',
ports: [
{ id: 'p1', name: '3.5mm In (from MIDI Out)', direction: 'input', portTypeId: 'pt-midi-trs-a' },
{ id: 'p2', name: 'DIN Out (to MIDI In)', direction: 'output', portTypeId: 'pt-midi-din' },
],
},
{
id: 'dt-adapter-midi-trs-b-to-din',
name: '3.5mm-to-DIN MIDI Adapter (Type B)',
category: 'adapter',
ports: [
{ id: 'p1', name: '3.5mm In (from MIDI Out)', direction: 'input', portTypeId: 'pt-midi-trs-b' },
{ id: 'p2', name: 'DIN Out (to MIDI In)', direction: 'output', portTypeId: 'pt-midi-din' },
],
},
]
+293 -113
View File
@@ -1,125 +1,305 @@
-- Generated by scripts/generate-seed.mjs from src/domain/library.ts. Do not hand-edit —
-- re-run the script after changing the built-in library instead.
-- Generated by scripts/export-seed.mjs from the local Supabase database's public
-- catalog rows. Do not hand-edit — author new devices/connectors via the app's
-- GUI instead (as an Admin, check "Publish directly to the shared library"),
-- then re-run: npm run export-seed
-- Seeds the public catalog: is_public = true, owner_id = null (system-owned).
-- Device categories
insert into public.device_categories (id, name, is_public) values ('display', 'Display', true);
insert into public.device_categories (id, name, is_public) values ('video-source', 'Video Source', true);
insert into public.device_categories (id, name, is_public) values ('audio-source', 'Audio Source', true);
insert into public.device_categories (id, name, is_public) values ('synth', 'Synthesizer / Sound Module', true);
insert into public.device_categories (id, name, is_public) values ('mixer', 'Mixer', true);
insert into public.device_categories (id, name, is_public) values ('amplifier', 'Amplifier / Receiver', true);
insert into public.device_categories (id, name, is_public) values ('speaker', 'Speaker', true);
insert into public.device_categories (id, name, is_public) values ('network', 'Network', true);
insert into public.device_categories (id, name, is_public) values ('computer', 'Computer', true);
insert into public.device_categories (id, name, is_public) values ('camera', 'Camera', true);
insert into public.device_categories (id, name, is_public) values ('control', 'Control', true);
insert into public.device_categories (id, name, is_public) values ('power', 'Power', true);
insert into public.device_categories (id, name, is_public) values ('adapter', 'Adapter / Converter', true);
insert into public.device_categories (id, name, is_public) values ('amplifier', 'Amplifier / Receiver', true);
insert into public.device_categories (id, name, is_public) values ('audio-source', 'Audio Source', true);
insert into public.device_categories (id, name, is_public) values ('camera', 'Camera', true);
insert into public.device_categories (id, name, is_public) values ('computer', 'Computer', true);
insert into public.device_categories (id, name, is_public) values ('control', 'Control', true);
insert into public.device_categories (id, name, is_public) values ('display', 'Display', true);
insert into public.device_categories (id, name, is_public) values ('mixer', 'Mixer', true);
insert into public.device_categories (id, name, is_public) values ('network', 'Network', true);
insert into public.device_categories (id, name, is_public) values ('other', 'Other', true);
insert into public.device_categories (id, name, is_public) values ('power', 'Power', true);
insert into public.device_categories (id, name, is_public) values ('speaker', 'Speaker', true);
insert into public.device_categories (id, name, is_public) values ('synth', 'Synthesizer / Sound Module', true);
insert into public.device_categories (id, name, is_public) values ('video-source', 'Video Source', true);
-- Manufacturers
-- Port types
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-hdmi', 'HDMI', 'video', 'hdmi', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-displayport', 'DisplayPort', 'video', 'displayport', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-sdi', 'SDI (BNC)', 'video', 'sdi', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-vga', 'VGA', 'video', 'vga', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-composite', 'Composite Video (RCA)', 'video', 'rca-composite', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-xlr', 'XLR (Balanced Audio)', 'audio', 'xlr', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-quarter', '1/4" TRS (Balanced Audio)', 'audio', 'trs-quarter', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-quarter', '1/4" TS (Unbalanced Audio)', 'audio', 'ts-quarter', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-mini', '3.5mm TRS (Balanced Audio)', 'audio', 'trs-mini', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-mini', '3.5mm (Unbalanced Audio)', 'audio', 'ts-mini', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-quarter-combo', '1/4" TRS/TS (Balanced or Unbalanced)', 'audio', 'trs-quarter-combo', '{"trs-quarter","ts-quarter"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-mini-combo', '3.5mm TRS/TS (Balanced or Unbalanced)', 'audio', 'trs-mini-combo', '{"trs-mini","ts-mini"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rca-audio', 'RCA (Stereo Audio)', 'audio', 'rca-audio', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-speakon', 'Speakon', 'audio', 'speakon', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-speaker-wire', 'Speaker Wire (Bare/Terminal)', 'audio', 'speaker-wire', '{}', 1, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-toslink', 'TOSLINK (Optical)', 'audio', 'toslink', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-cat-rj45', 'Cat5e/6 (RJ45)', 'network', 'cat-rj45', '{"cat-rj45"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-fiber-lc', 'Fiber (LC)', 'network', 'fiber-lc', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-a', 'USB-A (Unspecified)', 'usb', 'usb-a', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c', 'USB-C (Unspecified)', 'usb', 'usb-c', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-a-host', 'USB-A (Host)', 'usb', 'usb-a-host', '{"usb-a-device","usb-a-to-b"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-a-device', 'USB-A (Device)', 'usb', 'usb-a-device', '{"usb-a-host"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-host', 'USB-C (Host)', 'usb', 'usb-c-host', '{"usb-c-device","usb-c-to-b"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-device', 'USB-C (Device)', 'usb', 'usb-c-device', '{"usb-c-host"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-b-device', 'USB-B (Device)', 'usb', 'usb-b-device', '{"usb-a-to-b","usb-c-to-b"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-iec-power', 'IEC C13/C14 Power', 'power', 'iec-power', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-nema-power', 'NEMA 5-15 Power', 'power', 'nema-power', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rs232', 'RS-232 (Serial)', 'control', 'rs232', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ir', 'IR (3.5mm Emitter/Receiver)', 'control', 'ir', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-midi-din', 'MIDI (5-Pin DIN)', 'control', 'midi-din', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-midi-trs-a', '3.5mm MIDI (Type A)', 'control', 'midi-trs-a', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-midi-trs-b', '3.5mm MIDI (Type B)', 'control', 'midi-trs-b', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-6.35mm-bal-f', '1/4in TRS (Balanced Audio) (Female)', 'audio', 'trs-6.35mm-f', '{"trs-6.35mm-m","ts-6.35mm-m","ts-6.35mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-6.35mm-bal-m', '1/4in TRS (Balanced Audio) (Male)', 'audio', 'trs-6.35mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-6.35mm-f', '1/4in TRS (Female)', 'audio', 'trs-6.35mm-f', '{"trs-6.35mm-m","ts-6.35mm-m","ts-6.35mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-6.35mm-m', '1/4in TRS (Male)', 'audio', 'trs-6.35mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-6.35mm-stereo-f', '1/4in TRS (Stereo Audio) (Female)', 'audio', 'trs-6.35mm-f', '{"trs-6.35mm-m","ts-6.35mm-m","ts-6.35mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-6.35mm-stereo-m', '1/4in TRS (Stereo Audio) (Male)', 'audio', 'trs-6.35mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-6.35mm-f', '1/4in TS (Female)', 'audio', 'ts-6.35mm-f', '{"ts-6.35mm-m","trs-6.35mm-m","trs-6.35mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-6.35mm-m', '1/4in TS (Male)', 'audio', 'ts-6.35mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-6.35mm-unbal-f', '1/4in TS (Unbalanced Audio) (Female)', 'audio', 'ts-6.35mm-f', '{"ts-6.35mm-m","trs-6.35mm-m","trs-6.35mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-6.35mm-unbal-m', '1/4in TS (Unbalanced Audio) (Male)', 'audio', 'ts-6.35mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trrs-2.5mm-f', '2.5mm TRRS (Female)', 'audio', 'trrs-2.5mm-f', '{"trrs-2.5mm-m","ts-2.5mm-m","ts-2.5mm-f","trs-2.5mm-m","trs-2.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trrs-2.5mm-m', '2.5mm TRRS (Male)', 'audio', 'trrs-2.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-2.5mm-bal-f', '2.5mm TRS (Balanced Audio) (Female)', 'audio', 'trs-2.5mm-f', '{"trs-2.5mm-m","ts-2.5mm-m","ts-2.5mm-f","trrs-2.5mm-m","trrs-2.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-2.5mm-bal-m', '2.5mm TRS (Balanced Audio) (Male)', 'audio', 'trs-2.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-2.5mm-f', '2.5mm TRS (Female)', 'audio', 'trs-2.5mm-f', '{"trs-2.5mm-m","ts-2.5mm-m","ts-2.5mm-f","trrs-2.5mm-m","trrs-2.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-2.5mm-m', '2.5mm TRS (Male)', 'audio', 'trs-2.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-2.5mm-stereo-f', '2.5mm TRS (Stereo Audio) (Female)', 'audio', 'trs-2.5mm-f', '{"trs-2.5mm-m","ts-2.5mm-m","ts-2.5mm-f","trrs-2.5mm-m","trrs-2.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-2.5mm-stereo-m', '2.5mm TRS (Stereo Audio) (Male)', 'audio', 'trs-2.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-2.5mm-f', '2.5mm TS (Female)', 'audio', 'ts-2.5mm-f', '{"ts-2.5mm-m","trs-2.5mm-m","trs-2.5mm-f","trrs-2.5mm-m","trrs-2.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-2.5mm-m', '2.5mm TS (Male)', 'audio', 'ts-2.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-2.5mm-unbal-f', '2.5mm TS (Unbalanced Audio) (Female)', 'audio', 'ts-2.5mm-f', '{"ts-2.5mm-m","trs-2.5mm-m","trs-2.5mm-f","trrs-2.5mm-m","trrs-2.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-2.5mm-unbal-m', '2.5mm TS (Unbalanced Audio) (Male)', 'audio', 'ts-2.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trrs-3.5mm-f', '3.5mm TRRS (Female)', 'audio', 'trrs-3.5mm-f', '{"trrs-3.5mm-m","ts-3.5mm-m","ts-3.5mm-f","trs-3.5mm-m","trs-3.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trrs-3.5mm-m', '3.5mm TRRS (Male)', 'audio', 'trrs-3.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-3.5mm-bal-f', '3.5mm TRS (Balanced Audio) (Female)', 'audio', 'trs-3.5mm-f', '{"trs-3.5mm-m","ts-3.5mm-m","ts-3.5mm-f","trrs-3.5mm-m","trrs-3.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-3.5mm-bal-m', '3.5mm TRS (Balanced Audio) (Male)', 'audio', 'trs-3.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-3.5mm-f', '3.5mm TRS (Female)', 'audio', 'trs-3.5mm-f', '{"trs-3.5mm-m","ts-3.5mm-m","ts-3.5mm-f","trrs-3.5mm-m","trrs-3.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-3.5mm-m', '3.5mm TRS (Male)', 'audio', 'trs-3.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-3.5mm-stereo-f', '3.5mm TRS (Stereo Audio) (Female)', 'audio', 'trs-3.5mm-f', '{"trs-3.5mm-m","ts-3.5mm-m","ts-3.5mm-f","trrs-3.5mm-m","trrs-3.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trs-3.5mm-stereo-m', '3.5mm TRS (Stereo Audio) (Male)', 'audio', 'trs-3.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-midi-trs-a-f', '3.5mm TRS MIDI (Type A) (Female)', 'control', 'midi-trs-a-f', '{"midi-trs-a-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-midi-trs-a-m', '3.5mm TRS MIDI (Type A) (Male)', 'control', 'midi-trs-a-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-midi-trs-b-f', '3.5mm TRS MIDI (Type B) (Female)', 'control', 'midi-trs-b-f', '{"midi-trs-b-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-midi-trs-b-m', '3.5mm TRS MIDI (Type B) (Male)', 'control', 'midi-trs-b-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-3.5mm-f', '3.5mm TS (Female)', 'audio', 'ts-3.5mm-f', '{"ts-3.5mm-m","trs-3.5mm-m","trs-3.5mm-f","trrs-3.5mm-m","trrs-3.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-3.5mm-m', '3.5mm TS (Male)', 'audio', 'ts-3.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-3.5mm-unbal-f', '3.5mm TS (Unbalanced Audio) (Female)', 'audio', 'ts-3.5mm-f', '{"ts-3.5mm-m","trs-3.5mm-m","trs-3.5mm-f","trrs-3.5mm-m","trrs-3.5mm-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ts-3.5mm-unbal-m', '3.5mm TS (Unbalanced Audio) (Male)', 'audio', 'ts-3.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-apple-30pin-f', '30-pin Apple Dock Connector (Female)', 'usb', 'apple-30pin-f', '{"apple-30pin-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-apple-30pin-m', '30-pin Apple Dock Connector (Male)', 'usb', 'apple-30pin-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trrrs-4.4mm-f', '4.4mm TRRRS (Female)', 'audio', 'trrrs-4.4mm-f', '{"trrrs-4.4mm-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-trrrs-4.4mm-m', '4.4mm TRRRS (Male)', 'audio', 'trrrs-4.4mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-banana-f', 'Banana (Female)', 'audio', 'banana-f', '{"banana-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-banana-m', 'Banana (Male)', 'audio', 'banana-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-bare-wire', 'Bare Wire', 'audio', 'bare-wire', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-bnc-f', 'Coaxial BNC (Female)', 'video', 'bnc-f', '{"bnc-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-bnc-m', 'Coaxial BNC (Male)', 'video', 'bnc-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-coax-f-f', 'Coaxial F (Female)', 'video', 'coax-f-f', '{"coax-f-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-coax-f-m', 'Coaxial F (Male)', 'video', 'coax-f-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-coax-n-f', 'Coaxial N (Female)', 'other', 'coax-n-f', '{"coax-n-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-coax-n-m', 'Coaxial N (Male)', 'other', 'coax-n-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-coax-sma-f', 'Coaxial SMA (Female)', 'other', 'coax-sma-f', '{"coax-sma-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-coax-sma-m', 'Coaxial SMA (Male)', 'other', 'coax-sma-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rca-composite-f', 'Composite Video (RCA) (Female)', 'video', 'rca-composite-f', '{"rca-composite-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rca-composite-m', 'Composite Video (RCA) (Male)', 'video', 'rca-composite-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-displayport-f', 'DisplayPort (Female)', 'video', 'displayport-f', '{"displayport-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-displayport-m', 'DisplayPort (Male)', 'video', 'displayport-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-a-f', 'DVI-A (Female)', 'video', 'dvi-a-f', '{"dvi-a-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-a-m', 'DVI-A (Male)', 'video', 'dvi-a-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-d-dual-f', 'DVI-D (Dual Link) (Female)', 'video', 'dvi-d-dual-f', '{"dvi-d-dual-m","dvi-d-single-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-d-dual-m', 'DVI-D (Dual Link) (Male)', 'video', 'dvi-d-dual-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-d-single-f', 'DVI-D (Single Link) (Female)', 'video', 'dvi-d-single-f', '{"dvi-d-single-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-d-single-m', 'DVI-D (Single Link) (Male)', 'video', 'dvi-d-single-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-i-dual-f', 'DVI-I (Dual Link) (Female)', 'video', 'dvi-i-dual-f', '{"dvi-i-dual-m","dvi-i-single-m","dvi-d-dual-m","dvi-d-single-m","dvi-a-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-i-dual-m', 'DVI-I (Dual Link) (Male)', 'video', 'dvi-i-dual-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-i-single-f', 'DVI-I (Single Link) (Female)', 'video', 'dvi-i-single-f', '{"dvi-i-single-m","dvi-d-single-m","dvi-a-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-i-single-m', 'DVI-I (Single Link) (Male)', 'video', 'dvi-i-single-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-esata-f', 'eSATA (Female)', 'other', 'esata-f', '{"esata-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-esata-m', 'eSATA (Male)', 'other', 'esata-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-euroblock-f', 'Euroblock (Female)', 'audio', 'euroblock-f', '{"euroblock-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-euroblock-m', 'Euroblock (Male)', 'audio', 'euroblock-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-fiber-lc-f', 'Fiber LC (Female)', 'network', 'fiber-lc-f', '{"fiber-lc-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-fiber-lc-m', 'Fiber LC (Male)', 'network', 'fiber-lc-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-fiber-mtp-f', 'Fiber MTP/MPO (Female)', 'network', 'fiber-mtp-f', '{"fiber-mtp-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-fiber-mtp-m', 'Fiber MTP/MPO (Male)', 'network', 'fiber-mtp-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-fiber-sc-f', 'Fiber SC (Female)', 'network', 'fiber-sc-f', '{"fiber-sc-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-fiber-sc-m', 'Fiber SC (Male)', 'network', 'fiber-sc-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-fiber-st-f', 'Fiber ST (Female)', 'network', 'fiber-st-f', '{"fiber-st-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-fiber-st-m', 'Fiber ST (Male)', 'network', 'fiber-st-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-firewire400-4pin-f', 'FireWire 400 4-pin (Female)', 'other', 'firewire400-4pin-f', '{"firewire400-4pin-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-firewire400-4pin-m', 'FireWire 400 4-pin (Male)', 'other', 'firewire400-4pin-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-firewire400-6pin-f', 'FireWire 400 6-pin (Female)', 'other', 'firewire400-6pin-f', '{"firewire400-6pin-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-firewire400-6pin-m', 'FireWire 400 6-pin (Male)', 'other', 'firewire400-6pin-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-firewire800-f', 'FireWire 800 (Female)', 'other', 'firewire800-f', '{"firewire800-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-firewire800-m', 'FireWire 800 (Male)', 'other', 'firewire800-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-da15-gameport-f', 'Gameport DA-15 (Female)', 'other', 'da15-gameport-f', '{"da15-gameport-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-da15-gameport-m', 'Gameport DA-15 (Male)', 'other', 'da15-gameport-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-hdmi-f', 'HDMI (Female)', 'video', 'hdmi-f', '{"hdmi-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-hdmi-m', 'HDMI (Male)', 'video', 'hdmi-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-iec-c13-f', 'IEC C13 (Female)', 'power', 'iec-c13-f', '{"iec-c14-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-iec-c14-m', 'IEC C14 (Male)', 'power', 'iec-c14-m', '{"iec-c13-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-iec-generic-m', 'IEC Small Appliance Connector (Generic Male)', 'power', 'iec-generic-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-iec-generic-f', 'IEC Small Appliance Inlet (Generic Female)', 'power', 'iec-generic-f', '{"iec-generic-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ir-3.5mm-f', 'IR (3.5mm Emitter/Receiver) (Female)', 'control', 'ir-3.5mm-f', '{"ir-3.5mm-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ir-3.5mm-m', 'IR (3.5mm Emitter/Receiver) (Male)', 'control', 'ir-3.5mm-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-lightning-f', 'Lightning (Female)', 'usb', 'lightning-f', '{"lightning-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-lightning-m', 'Lightning (Male)', 'usb', 'lightning-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-hdmi-micro-f', 'Micro HDMI (Female)', 'video', 'hdmi-micro-f', '{"hdmi-micro-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-hdmi-micro-m', 'Micro HDMI (Male)', 'video', 'hdmi-micro-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-micro-f', 'Micro-DVI (Female)', 'video', 'dvi-micro-f', '{"dvi-micro-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-micro-m', 'Micro-DVI (Male)', 'video', 'dvi-micro-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-midi-din-f', 'MIDI (5-pin DIN) (Female)', 'control', 'midi-din-f', '{"midi-din-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-midi-din-m', 'MIDI (5-pin DIN) (Male)', 'control', 'midi-din-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-hdmi-mini-f', 'Mini HDMI (Female)', 'video', 'hdmi-mini-f', '{"hdmi-mini-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-hdmi-mini-m', 'Mini HDMI (Male)', 'video', 'hdmi-mini-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-mini-f', 'Mini-DVI (Female)', 'video', 'dvi-mini-f', '{"dvi-mini-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-dvi-mini-m', 'Mini-DVI (Male)', 'video', 'dvi-mini-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-nema-5-15p-m', 'NEMA 5-15P (Male)', 'power', 'nema-5-15p-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-nema-5-15r-f', 'NEMA 5-15R (Female)', 'power', 'nema-5-15r-f', '{"nema-5-15p-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-toslink-f', 'Optical TOSLINK (Jack)', 'audio', 'toslink-f', '{"toslink-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-toslink-m', 'Optical TOSLINK (Plug)', 'audio', 'toslink-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-db25-parallel-f', 'Parallel DB-25 (Female)', 'other', 'db25-parallel-f', '{"db25-parallel-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-db25-parallel-m', 'Parallel DB-25 (Male)', 'other', 'db25-parallel-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ps2-f', 'PS/2 (Female)', 'control', 'ps2-f', '{"ps2-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ps2-m', 'PS/2 (Male)', 'control', 'ps2-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rca-spdif-f', 'RCA (S/PDIF) (Female)', 'audio', 'rca-audio-f', '{"rca-audio-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rca-spdif-m', 'RCA (S/PDIF) (Male)', 'audio', 'rca-audio-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rca-unbal-f', 'RCA (Unbalanced Audio) (Female)', 'audio', 'rca-audio-f', '{"rca-audio-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rca-unbal-m', 'RCA (Unbalanced Audio) (Male)', 'audio', 'rca-audio-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-ring-terminal', 'Ring Terminal', 'audio', 'ring-terminal', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rj11-phone-f', 'RJ-11 Phone (Jack)', 'network', 'rj11-phone-f', '{"rj11-phone-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rj11-phone-m', 'RJ-11 Phone (Plug)', 'network', 'rj11-phone-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rj45-sfp-jack', 'RJ-45 (SFP) (Jack)', 'network', 'rj45-ethernet-f', '{"rj45-ethernet-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rj45-sfp-plug', 'RJ-45 (SFP) (Plug)', 'network', 'rj45-ethernet-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rj45-ethernet-f', 'RJ-45 Ethernet (Jack)', 'network', 'rj45-ethernet-f', '{"rj45-ethernet-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-rj45-ethernet-m', 'RJ-45 Ethernet (Plug)', 'network', 'rj45-ethernet-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-svideo-f', 'S-Video (Female)', 'video', 'svideo-f', '{"svideo-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-svideo-m', 'S-Video (Male)', 'video', 'svideo-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-scart-f', 'SCART (Female)', 'video', 'scart-f', '{"scart-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-scart-m', 'SCART (Male)', 'video', 'scart-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-de9-serial-f', 'Serial RS232 DE-9 (Female)', 'control', 'de9-serial-f', '{"de9-serial-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-de9-serial-m', 'Serial RS232 DE-9 (Male)', 'control', 'de9-serial-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-spade-terminal', 'Spade Terminal', 'audio', 'spade-terminal', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-speakon-nl2-jack', 'Speakon NL2 (Jack)', 'audio', 'speakon-nl2-jack', '{"speakon-nl2-plug"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-speakon-nl2-plug', 'Speakon NL2 (Plug)', 'audio', 'speakon-nl2-plug', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-speakon-nl4-jack', 'Speakon NL4 (Jack)', 'audio', 'speakon-nl4-jack', '{"speakon-nl4-plug","speakon-nl2-plug"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-speakon-nl4-plug', 'Speakon NL4 (Plug)', 'audio', 'speakon-nl4-plug', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-speakon-nl8-jack', 'Speakon NL8 (Jack)', 'audio', 'speakon-nl8-jack', '{"speakon-nl8-plug","speakon-nl2-plug","speakon-nl4-plug"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-speakon-nl8-plug', 'Speakon NL8 (Plug)', 'audio', 'speakon-nl8-plug', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-thunderbolt-12-mdp-f', 'Thunderbolt 1/2 (Mini DisplayPort) (Female)', 'video', 'thunderbolt-12-mdp-f', '{"thunderbolt-12-mdp-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-thunderbolt-12-mdp-m', 'Thunderbolt 1/2 (Mini DisplayPort) (Male)', 'video', 'thunderbolt-12-mdp-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-3-b-f', 'USB 3.0 B (Female)', 'usb', 'usb-3-b-f', '{"usb-3-b-m","usb-b-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-3-b-m', 'USB 3.0 B (Male)', 'usb', 'usb-3-b-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-3-micro-b-f', 'USB 3.0 Micro-B (Female)', 'usb', 'usb-3-micro-b-f', '{"usb-3-micro-b-m","usb-micro-b-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-3-micro-b-m', 'USB 3.0 Micro-B (Male)', 'usb', 'usb-3-micro-b-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-micro-a-f', 'USB Micro-A (Female)', 'usb', 'usb-micro-a-f', '{"usb-micro-a-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-micro-a-m', 'USB Micro-A (Male)', 'usb', 'usb-micro-a-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-micro-b-f', 'USB Micro-B (Female)', 'usb', 'usb-micro-b-f', '{"usb-micro-b-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-micro-b-m', 'USB Micro-B (Male)', 'usb', 'usb-micro-b-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-mini-b-f', 'USB Mini-B (Female)', 'usb', 'usb-mini-b-f', '{"usb-mini-b-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-mini-b-m', 'USB Mini-B (Male)', 'usb', 'usb-mini-b-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-a-f', 'USB-A (Female)', 'usb', 'usb-a-f', '{"usb-a-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-a-m', 'USB-A (Male)', 'usb', 'usb-a-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-b-f', 'USB-B (Female)', 'usb', 'usb-b-f', '{"usb-b-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-b-m', 'USB-B (Male)', 'usb', 'usb-b-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-f', 'USB-C (Female)', 'usb', 'usb-c-f', '{"usb-c-m","usb-c-host-f","usb-c-device-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-m', 'USB-C (Male)', 'usb', 'usb-c-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-tb3-f', 'USB-C (Thunderbolt 3) (Female)', 'usb', 'usb-c-f', '{"usb-c-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-tb3-m', 'USB-C (Thunderbolt 3) (Male)', 'usb', 'usb-c-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-tb4-f', 'USB-C (Thunderbolt 4) (Female)', 'usb', 'usb-c-f', '{"usb-c-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-tb4-m', 'USB-C (Thunderbolt 4) (Male)', 'usb', 'usb-c-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-tb5-f', 'USB-C (Thunderbolt 5) (Female)', 'usb', 'usb-c-f', '{"usb-c-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-tb5-m', 'USB-C (Thunderbolt 5) (Male)', 'usb', 'usb-c-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-3-f', 'USB-C (USB 3.0) (Female)', 'usb', 'usb-c-f', '{"usb-c-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-3-m', 'USB-C (USB 3.0) (Male)', 'usb', 'usb-c-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-4-f', 'USB-C (USB 4.0) (Female)', 'usb', 'usb-c-f', '{"usb-c-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-4-m', 'USB-C (USB 4.0) (Male)', 'usb', 'usb-c-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-device-f', 'USB-C Device (Female)', 'usb', 'usb-c-device-f', '{"usb-c-m","usb-c-host-f","usb-c-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-usb-c-host-f', 'USB-C Host (Female)', 'usb', 'usb-c-host-f', '{"usb-c-m","usb-c-device-f","usb-c-f"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-vga-f', 'VGA (Female)', 'video', 'vga-f', '{"vga-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-vga-m', 'VGA (Male)', 'video', 'vga-m', '{}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-xlr-f', 'XLR (Female)', 'audio', 'xlr-f', '{"xlr-m"}', null, true);
insert into public.port_types (id, name, category, family, compatible_family_ids, max_connections, is_public) values ('pt-xlr-m', 'XLR (Male)', 'audio', 'xlr-m', '{}', null, true);
-- Cable types
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-hdmi', 'HDMI Cable', 'hdmi', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-displayport', 'DisplayPort Cable', 'displayport', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-sdi', 'SDI Coax (BNC)', 'sdi', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-vga', 'VGA Cable', 'vga', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-composite', 'Composite Video Cable (RCA)', 'rca-composite', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-xlr', 'XLR Cable', 'xlr', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-xlr-to-trs-quarter', 'XLR to 1/4" TRS Adapter Cable', 'xlr', 'trs-quarter', 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-trs-quarter', '1/4" TRS Cable (Balanced)', 'trs-quarter', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-ts-quarter', '1/4" TS Cable (Instrument/Unbalanced)', 'ts-quarter', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-trs-mini', '3.5mm TRS Cable (Balanced)', 'trs-mini', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-ts-mini', '3.5mm Cable (Unbalanced)', 'ts-mini', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-rca-audio', 'RCA Stereo Audio Cable', 'rca-audio', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-speakon', 'Speakon Cable', 'speakon', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-speaker-wire', 'Speaker Wire (14/2)', 'speaker-wire', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-toslink', 'TOSLINK Optical Cable', 'toslink', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-cat6', 'Cat6 Cable', 'cat-rj45', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-fiber-lc', 'Fiber LC-LC Cable', 'fiber-lc', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-usb-a', 'USB-A to USB-A Cable', 'usb-a', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-usb-c', 'USB-C Cable', 'usb-c', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-usb-a-host-device', 'USB-A Cable (Host ↔ Device)', 'usb-a-host', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-usb-c-host-device', 'USB-C Cable (Host ↔ Device)', 'usb-c-host', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-usb-a-to-b', 'USB-A to USB-B Cable', 'usb-a-to-b', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-usb-c-to-b', 'USB-C to USB-B Cable', 'usb-c-to-b', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-iec-power', 'IEC C13 Power Cable', 'iec-power', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-nema-power', 'NEMA 5-15 Extension Cord', 'nema-power', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-rs232', 'RS-232 Serial Cable', 'rs232', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-ir', 'IR Emitter Cable', 'ir', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-midi-din', 'MIDI Cable (5-Pin DIN)', 'midi-din', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-midi-trs-a', '3.5mm MIDI Cable (Type A)', 'midi-trs-a', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, is_public) values ('ct-midi-trs-b', '3.5mm MIDI Cable (Type B)', 'midi-trs-b', null, 'ft', true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-trs-6.35mm', '1/4in TRS Cable (Male-Male)', 'trs-6.35mm-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-ts-6.35mm', '1/4in TS Cable (Male-Male)', 'ts-6.35mm-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-trrs-2.5mm', '2.5mm TRRS Cable (Male-Male)', 'trrs-2.5mm-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-trs-2.5mm', '2.5mm TRS Cable (Male-Male)', 'trs-2.5mm-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-ts-2.5mm', '2.5mm TS Cable (Male-Male)', 'ts-2.5mm-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-trrs-3.5mm', '3.5mm TRRS Cable (Male-Male)', 'trrs-3.5mm-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-trs-3.5mm', '3.5mm TRS Cable (Male-Male)', 'trs-3.5mm-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-midi-trs-a', '3.5mm TRS MIDI (Type A) Cable (Male-Male)', 'midi-trs-a-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-midi-trs-b', '3.5mm TRS MIDI (Type B) Cable (Male-Male)', 'midi-trs-b-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-ts-3.5mm', '3.5mm TS Cable (Male-Male)', 'ts-3.5mm-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-apple-30pin', '30-pin Apple Dock Connector Cable (Male-Male)', 'apple-30pin-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-trrrs-4.4mm', '4.4mm TRRRS Cable (Male-Male)', 'trrrs-4.4mm-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-banana', 'Banana Cable (Male-Male)', 'banana-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bnc', 'Coaxial BNC Cable (Male-Male)', 'bnc-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-coax-f', 'Coaxial F Cable (Male-Male)', 'coax-f-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-coax-n', 'Coaxial N Cable (Male-Male)', 'coax-n-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-coax-sma', 'Coaxial SMA Cable (Male-Male)', 'coax-sma-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-rca-composite', 'Composite Video Cable (RCA, Male-Male)', 'rca-composite-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-displayport', 'DisplayPort Cable (Male-Male)', 'displayport-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-dvi-a', 'DVI-A Cable (Male-Male)', 'dvi-a-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-dvi-d-dual', 'DVI-D (Dual Link) Cable (Male-Male)', 'dvi-d-dual-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-dvi-d-single', 'DVI-D (Single Link) Cable (Male-Male)', 'dvi-d-single-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-dvi-i-dual', 'DVI-I (Dual Link) Cable (Male-Male)', 'dvi-i-dual-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-dvi-i-single', 'DVI-I (Single Link) Cable (Male-Male)', 'dvi-i-single-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-d0fa9517', 'DVI-I to VGA Cable', 'dvi-i-single-m', 'vga-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-esata', 'eSATA Cable (Male-Male)', 'esata-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-euroblock', 'Euroblock Cable (Male-Male)', 'euroblock-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-firewire400-4pin', 'FireWire 400 4-pin Cable (Male-Male)', 'firewire400-4pin-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-firewire400-6pin', 'FireWire 400 6-pin Cable (Male-Male)', 'firewire400-6pin-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-9d257d85', 'FireWire 400 6-pin to 4-pin Cable', 'firewire400-6pin-m', 'firewire400-4pin-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-firewire800', 'FireWire 800 Cable (Male-Male)', 'firewire800-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-da15-gameport', 'Gameport DA-15 Cable (Male-Male)', 'da15-gameport-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-iec-generic-power-cord', 'Generic Small Appliance Power Cord (to NEMA 5-15P)', 'iec-generic-m', 'nema-5-15p-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-hdmi', 'HDMI Cable (Male-Male)', 'hdmi-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-d6e40e1e', 'HDMI to Micro HDMI Cable', 'hdmi-m', 'hdmi-micro-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-0b94248e', 'HDMI to Mini HDMI Cable', 'hdmi-m', 'hdmi-mini-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-iec-power-cord', 'IEC Power Cord (C13 to NEMA 5-15P)', 'iec-c13-f', 'nema-5-15p-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-ir-3.5mm', 'IR (3.5mm) Cable (Male-Male)', 'ir-3.5mm-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-fiber-lc-mm', 'LC Fiber Cable (Multimode OM4, Male-Male)', 'fiber-lc-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-fiber-lc-sm-apc', 'LC Fiber Cable (Single-Mode OS2, APC, Male-Male)', 'fiber-lc-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-fiber-lc-sm-upc', 'LC Fiber Cable (Single-Mode OS2, UPC, Male-Male)', 'fiber-lc-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-lightning', 'Lightning Cable (Male-Male)', 'lightning-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-hdmi-micro', 'Micro HDMI Cable (Male-Male)', 'hdmi-micro-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-dvi-micro', 'Micro-DVI Cable (Male-Male)', 'dvi-micro-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-059a26fc', 'Micro-DVI to DVI Adapter Cable', 'dvi-micro-m', 'dvi-d-single-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-midi-din', 'MIDI (5-pin DIN) Cable (Male-Male)', 'midi-din-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-hdmi-mini', 'Mini HDMI Cable (Male-Male)', 'hdmi-mini-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-dvi-mini', 'Mini-DVI Cable (Male-Male)', 'dvi-mini-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-8aa72e71', 'Mini-DVI to DVI Adapter Cable', 'dvi-mini-m', 'dvi-d-single-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-fiber-mtp-mm', 'MTP/MPO Fiber Cable (Multimode OM4, 12-fiber, Male-Female)', 'fiber-mtp-m', 'fiber-mtp-f', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-fiber-mtp-sm', 'MTP/MPO Fiber Cable (Single-Mode OS2, 12-fiber, Male-Female)', 'fiber-mtp-m', 'fiber-mtp-f', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-nema-5-15-ext', 'NEMA 5-15 Extension Cable (5-15P to 5-15R)', 'nema-5-15p-m', 'nema-5-15r-f', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-toslink', 'Optical TOSLINK Cable (Plug-Plug)', 'toslink-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-db25-parallel', 'Parallel DB-25 Cable (Male-Male)', 'db25-parallel-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-ps2', 'PS/2 Cable (Male-Male)', 'ps2-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-rca-audio', 'RCA Cable (Male-Male)', 'rca-audio-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-rj11-phone', 'RJ-11 Phone Cable (Plug-Plug)', 'rj11-phone-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-rj45-ethernet', 'RJ-45 Ethernet Cable (Plug-Plug)', 'rj45-ethernet-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-svideo', 'S-Video Cable (Male-Male)', 'svideo-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-fiber-sc-mm', 'SC Fiber Cable (Multimode OM4, Male-Male)', 'fiber-sc-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-fiber-sc-sm-apc', 'SC Fiber Cable (Single-Mode OS2, APC, Male-Male)', 'fiber-sc-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-fiber-sc-sm-upc', 'SC Fiber Cable (Single-Mode OS2, UPC, Male-Male)', 'fiber-sc-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-scart', 'SCART Cable (Male-Male)', 'scart-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-sdi-12g', 'SDI Cable (12G-SDI, BNC, Male-Male)', 'bnc-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-sdi-3g', 'SDI Cable (3G-SDI, BNC, Male-Male)', 'bnc-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-sdi-hd', 'SDI Cable (HD-SDI, BNC, Male-Male)', 'bnc-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-de9-serial', 'Serial RS232 DE-9 Cable (Male-Male)', 'de9-serial-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-speakon-nl2', 'Speakon NL2 Cable (Plug-Plug)', 'speakon-nl2-plug', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-speakon-nl4', 'Speakon NL4 Cable (Plug-Plug)', 'speakon-nl4-plug', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-speakon-nl8', 'Speakon NL8 Cable (Plug-Plug)', 'speakon-nl8-plug', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-fiber-st-mm', 'ST Fiber Cable (Multimode OM1, Male-Male)', 'fiber-st-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-thunderbolt-12-mdp', 'Thunderbolt 1/2 (Mini DisplayPort) Cable (Male-Male)', 'thunderbolt-12-mdp-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-a697c221', 'Thunderbolt 1/2 (Mini DisplayPort) to DisplayPort Cable', 'thunderbolt-12-mdp-m', 'displayport-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-e7860b7d', 'Thunderbolt 1/2 (Mini DisplayPort) to HDMI Cable', 'thunderbolt-12-mdp-m', 'hdmi-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-midi-trs-a-to-din', 'TRS MIDI (Type A) to 5-pin DIN MIDI Adapter Cable', 'midi-trs-a-m', 'midi-din-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-midi-trs-b-to-din', 'TRS MIDI (Type B) to 5-pin DIN MIDI Adapter Cable', 'midi-trs-b-m', 'midi-din-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-midi-trs-a-to-b', 'TRS MIDI Type A to Type B Adapter Cable', 'midi-trs-a-m', 'midi-trs-b-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-usb-3-b', 'USB 3.0 B Cable (Male-Male)', 'usb-3-b-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-usb-3-micro-b', 'USB 3.0 Micro-B Cable (Male-Male)', 'usb-3-micro-b-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-usb-micro-a', 'USB Micro-A Cable (Male-Male)', 'usb-micro-a-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-usb-micro-b', 'USB Micro-B Cable (Male-Male)', 'usb-micro-b-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-usb-mini-b', 'USB Mini-B Cable (Male-Male)', 'usb-mini-b-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-usb-a', 'USB-A Cable (Male-Male)', 'usb-a-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-ca20f06e', 'USB-A to Micro-B Cable', 'usb-a-m', 'usb-micro-b-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-9d98ff40', 'USB-A to Mini-B Cable', 'usb-a-m', 'usb-mini-b-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-0e6a1d1a', 'USB-A to USB-B Cable', 'usb-a-m', 'usb-b-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-2ff334f7', 'USB-A to USB-C Cable', 'usb-a-m', 'usb-c-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-usb-b', 'USB-B Cable (Male-Male)', 'usb-b-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-usb-c', 'USB-C Cable (Male-Male)', 'usb-c-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-aef42c66', 'USB-C to Micro-B Cable', 'usb-c-m', 'usb-micro-b-m', 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-vga', 'VGA Cable (Male-Male)', 'vga-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-xlr', 'XLR Cable (Male-Male)', 'xlr-m', null, 'ft', null, true);
insert into public.cable_types (id, name, family, family2, unit, cost_per_unit, is_public) values ('ct-bridge-1a2f43f6', 'XLR to 1/4in TRS Cable', 'xlr-m', 'trs-6.35mm-m', 'ft', null, true);
-- Device templates + their ports
insert into public.device_templates (id, name, category_id, is_public) values ('dt-display', 'Display (TV / Projector)', 'display', true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('d88055fb-9fd7-4dfc-b9a0-0c9b508164cd', 'dt-display', 'HDMI In 1', 'input', 'pt-hdmi', 0);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('5912e28d-dd20-41ae-b1db-4f54be9d4c50', 'dt-display', 'HDMI In 2', 'input', 'pt-hdmi', 1);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('6f401c75-9abf-4662-92b8-78544641c408', 'dt-display', 'Power In', 'input', 'pt-iec-power', 2);
insert into public.device_templates (id, name, category_id, is_public) values ('dt-media-player', 'Media Player / Streamer', 'video-source', true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('ff7d299c-9c29-4f78-8045-5d7ede0ce67a', 'dt-media-player', 'HDMI Out', 'output', 'pt-hdmi', 0);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('5dd62566-e768-4945-a634-b86af3de8aea', 'dt-media-player', 'Power In', 'input', 'pt-nema-power', 1);
insert into public.device_templates (id, name, category_id, is_public) values ('dt-avr', 'AV Receiver', 'amplifier', true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('d013105c-bf1e-4031-9457-a5d13257b32c', 'dt-avr', 'HDMI In 1', 'input', 'pt-hdmi', 0);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('9fb7d9ae-1ef4-4cf0-8c42-16b17a7bce39', 'dt-avr', 'HDMI In 2', 'input', 'pt-hdmi', 1);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('bdb31007-8551-41c9-8a1d-13d5a5d13c6d', 'dt-avr', 'HDMI In 3', 'input', 'pt-hdmi', 2);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('5c0203a1-5a8d-46fa-9561-c2b641d5cdcf', 'dt-avr', 'HDMI Out (Display)', 'output', 'pt-hdmi', 3);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('3b32c9cc-d3b5-4487-af58-dea5580dc888', 'dt-avr', 'Speaker Out L', 'output', 'pt-speaker-wire', 4);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('fa5ff4f6-2f28-426e-adb5-5f2b4b42ca8a', 'dt-avr', 'Speaker Out R', 'output', 'pt-speaker-wire', 5);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('88e76400-320f-4d2d-a653-b760de6447ea', 'dt-avr', 'Power In', 'input', 'pt-iec-power', 6);
insert into public.device_templates (id, name, category_id, is_public) values ('dt-speaker', 'Speaker (Passive)', 'speaker', true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('f8586575-70c2-453f-8608-ddc2e54810e4', 'dt-speaker', 'Speaker In', 'input', 'pt-speaker-wire', 0);
insert into public.device_templates (id, name, category_id, is_public) values ('dt-switch', 'Network Switch', 'network', true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('3d8a38ca-652a-489e-8b0c-07207ecd5ec3', 'dt-switch', 'Port 1', 'bidirectional', 'pt-cat-rj45', 0);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('28ff234a-3985-4487-82b2-0df600fe2bb9', 'dt-switch', 'Port 2', 'bidirectional', 'pt-cat-rj45', 1);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('92a972be-7584-4a2f-96c8-69631040c0a2', 'dt-switch', 'Port 3', 'bidirectional', 'pt-cat-rj45', 2);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('d30c0ccf-8990-4935-af2e-6201817b12ad', 'dt-switch', 'Port 4', 'bidirectional', 'pt-cat-rj45', 3);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('b948a928-f397-494e-9e63-fd6bd2efae87', 'dt-switch', 'Power In', 'input', 'pt-iec-power', 4);
insert into public.device_templates (id, name, category_id, is_public) values ('dt-camera', 'PTZ Camera', 'camera', true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('4ba62e67-b3b2-4113-aef3-fa4e9a61b3d5', 'dt-camera', 'SDI Out', 'output', 'pt-sdi', 0);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('65cee659-d23c-42d6-9791-bdf957ea5186', 'dt-camera', 'Control (RJ45)', 'bidirectional', 'pt-cat-rj45', 1);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('b9b359d6-d796-4972-9259-d930339d8007', 'dt-camera', 'Power In', 'input', 'pt-nema-power', 2);
insert into public.device_templates (id, name, category_id, is_public) values ('dt-computer', 'Computer / Laptop', 'computer', true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('1f050620-7f3d-427e-a682-f18afec5d582', 'dt-computer', 'HDMI Out', 'output', 'pt-hdmi', 0);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('ebded1f5-83e9-4942-b6cd-3c8fa54f71c0', 'dt-computer', 'USB-C', 'bidirectional', 'pt-usb-c', 1);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('4159750f-b334-4f45-848d-11ebb4168ff2', 'dt-computer', 'Ethernet', 'bidirectional', 'pt-cat-rj45', 2);
insert into public.device_templates (id, name, category_id, is_public) values ('dt-adapter-midi-trs-a-to-din', '3.5mm-to-DIN MIDI Adapter (Type A)', 'adapter', true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('367bf562-4530-4ba8-8576-08a8e0148d3a', 'dt-adapter-midi-trs-a-to-din', '3.5mm In (from MIDI Out)', 'input', 'pt-midi-trs-a', 0);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('56f8238f-204b-4793-992d-ab197915009c', 'dt-adapter-midi-trs-a-to-din', 'DIN Out (to MIDI In)', 'output', 'pt-midi-din', 1);
insert into public.device_templates (id, name, category_id, is_public) values ('dt-adapter-midi-trs-b-to-din', '3.5mm-to-DIN MIDI Adapter (Type B)', 'adapter', true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('30695330-998c-4ffd-b672-eb746107b63c', 'dt-adapter-midi-trs-b-to-din', '3.5mm In (from MIDI Out)', 'input', 'pt-midi-trs-b', 0);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order) values ('15a3e559-d725-4fb2-a419-c649c4da9c16', 'dt-adapter-midi-trs-b-to-din', 'DIN Out (to MIDI In)', 'output', 'pt-midi-din', 1);
insert into public.device_templates (id, name, category_id, manufacturer_id, model, cost, is_public) values ('dt-trs35-coupler-ff', '3.5mm TRS Coupler (Female-Female)', 'adapter', null, null, null, true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order, built_in_cable) values ('9185c81a-d109-4e53-9493-f1e24ac19f99', 'dt-trs35-coupler-ff', '3.5mm TRS A', 'bidirectional', 'pt-trs-3.5mm-f', 0, false);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order, built_in_cable) values ('c5a38999-8b9a-4ec4-95fa-3a660d2c2c3f', 'dt-trs35-coupler-ff', '3.5mm TRS B', 'bidirectional', 'pt-trs-3.5mm-f', 1, false);
insert into public.device_templates (id, name, category_id, manufacturer_id, model, cost, is_public) values ('dt-rca-coupler-ff', 'RCA Coupler (Female-Female)', 'adapter', null, null, null, true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order, built_in_cable) values ('0c7e924a-6ea5-4433-b224-57a3c533954b', 'dt-rca-coupler-ff', 'RCA A', 'bidirectional', 'pt-rca-unbal-f', 0, false);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order, built_in_cable) values ('0769c32d-0d9f-4045-85b0-75548e86a88b', 'dt-rca-coupler-ff', 'RCA B', 'bidirectional', 'pt-rca-unbal-f', 1, false);
insert into public.device_templates (id, name, category_id, manufacturer_id, model, cost, is_public) values ('dt-xlr-genderchanger-mm', 'XLR Gender Changer (Male-Male)', 'adapter', null, null, null, true);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order, built_in_cable) values ('7a3209c7-7c1f-48de-9c3b-e97874efc50c', 'dt-xlr-genderchanger-mm', 'XLR A', 'bidirectional', 'pt-xlr-m', 0, false);
insert into public.device_template_ports (id, device_template_id, name, direction, port_type_id, sort_order, built_in_cable) values ('098854e9-af35-4118-b05e-b245ca63585e', 'dt-xlr-genderchanger-mm', 'XLR B', 'bidirectional', 'pt-xlr-m', 1, false);