#!/usr/bin/env node /** * Migration script to fix coords_3d field to be optional */ const Surreal = require('surrealdb').default; async function fixCoordsField() { const config = { url: process.env.SURREALDB_URL, username: process.env.SURREALDB_USER, password: process.env.SURREALDB_PASS, namespace: process.env.SURREALDB_NS, database: process.env.SURREALDB_DB, }; // Validate required config const missing = Object.entries(config) .filter(([_, value]) => !value) .map(([key]) => key); if (missing.length > 0) { console.error('[Fix coords_3d] Missing required environment variables:', missing.join(', ')); process.exit(1); } const db = new Surreal(); try { console.log('[Fix coords_3d] Connecting to SurrealDB...'); await db.connect(config.url); console.log('[Fix coords_3d] Signing in...'); await db.signin({ username: config.username, password: config.password, }); console.log('[Fix coords_3d] Using namespace and database...'); await db.use({ namespace: config.namespace, database: config.database, }); console.log('[Fix coords_3d] Removing old coords_3d field definition...'); await db.query('REMOVE FIELD coords_3d ON TABLE node;'); console.log('[Fix coords_3d] Defining new coords_3d field as optional...'); await db.query(` DEFINE FIELD coords_3d ON TABLE node TYPE option> ASSERT $value = NONE OR array::len($value) = 3; `); console.log('[Fix coords_3d] ✓ Field updated successfully!'); } catch (error) { console.error('[Fix coords_3d] ✗ Failed:', error); process.exit(1); } finally { await db.close(); } } fixCoordsField();