@storyshelf/db-mysql 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/ddl.d.mts +1 -3
  2. package/dist/ddl.mjs +10 -3
  3. package/dist/ddl.mjs.map +1 -1
  4. package/dist/drizzle-factory-mysql.mjs +8 -7
  5. package/dist/drizzle-factory-mysql.mjs.map +1 -1
  6. package/dist/drizzle-factory.mjs +1 -2
  7. package/dist/foreign-keys.mjs +1 -2
  8. package/dist/index.d.mts +0 -2
  9. package/dist/index.mjs +2 -3
  10. package/dist/migrate.mjs +51 -3
  11. package/dist/migrate.mjs.map +1 -1
  12. package/dist/planetscale.d.mts +0 -2
  13. package/dist/planetscale.mjs +1 -2
  14. package/dist/schema/baseline.d.mts +32 -16
  15. package/dist/schema/baseline.mjs +2 -2
  16. package/dist/schema/baseline.mjs.map +1 -1
  17. package/dist/schema/build-component.d.mts +9 -11
  18. package/dist/schema/build-component.mjs +1 -2
  19. package/dist/schema/build-review.d.mts +7 -9
  20. package/dist/schema/build-review.mjs +1 -2
  21. package/dist/schema/build.d.mts +23 -25
  22. package/dist/schema/build.mjs +1 -2
  23. package/dist/schema/capture-attempt.d.mts +25 -27
  24. package/dist/schema/capture-attempt.mjs +1 -2
  25. package/dist/schema/capture-job.d.mts +19 -21
  26. package/dist/schema/capture-job.mjs +1 -2
  27. package/dist/schema/capture-shard.d.mts +15 -17
  28. package/dist/schema/capture-shard.mjs +1 -2
  29. package/dist/schema/comment.d.mts +12 -14
  30. package/dist/schema/comment.mjs +1 -2
  31. package/dist/schema/connection.d.mts +10 -12
  32. package/dist/schema/connection.mjs +1 -2
  33. package/dist/schema/content-refs.d.mts +5 -7
  34. package/dist/schema/content-refs.mjs +1 -2
  35. package/dist/schema/datetime.mjs +1 -2
  36. package/dist/schema/design.d.mts +33 -35
  37. package/dist/schema/design.mjs +1 -2
  38. package/dist/schema/insight.d.mts +36 -38
  39. package/dist/schema/insight.mjs +1 -2
  40. package/dist/schema/label.d.mts +15 -17
  41. package/dist/schema/label.mjs +1 -2
  42. package/dist/schema/member.d.mts +7 -9
  43. package/dist/schema/member.mjs +1 -2
  44. package/dist/schema/notification.d.mts +20 -22
  45. package/dist/schema/notification.mjs +1 -2
  46. package/dist/schema/project-group-mapping.d.mts +6 -8
  47. package/dist/schema/project-group-mapping.mjs +1 -2
  48. package/dist/schema/project.d.mts +25 -27
  49. package/dist/schema/project.mjs +1 -2
  50. package/dist/schema/site-setting.d.mts +6 -8
  51. package/dist/schema/site-setting.mjs +1 -2
  52. package/dist/schema/snapshot.d.mts +85 -33
  53. package/dist/schema/snapshot.mjs +4 -2
  54. package/dist/schema/snapshot.mjs.map +1 -1
  55. package/dist/schema/token.d.mts +8 -10
  56. package/dist/schema/token.mjs +1 -2
  57. package/dist/schema/usage.d.mts +15 -17
  58. package/dist/schema/usage.mjs +1 -2
  59. package/dist/schema/user-invite.d.mts +7 -9
  60. package/dist/schema/user-invite.mjs +1 -2
  61. package/dist/schema/user.d.mts +82 -10
  62. package/dist/schema/user.mjs +7 -4
  63. package/dist/schema/user.mjs.map +1 -1
  64. package/dist/schema/webhook.d.mts +8 -10
  65. package/dist/schema/webhook.mjs +1 -2
  66. package/dist/schema.d.mts +0 -2
  67. package/dist/schema.mjs +1 -2
  68. package/dist/tidb.d.mts +0 -2
  69. package/dist/tidb.mjs +1 -2
  70. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.mjs","names":[],"sources":["../src/migrate.ts"],"sourcesContent":["/**\n * Shared MySQL migrations for every `db-mysql` preset.\n *\n * MySQL 8 has no `ADD COLUMN IF NOT EXISTS`, no `CREATE INDEX IF NOT EXISTS`\n * and no `ALTER COLUMN ... DROP NOT NULL`. The DDL is split into statements,\n * missing columns/indexes are found in `information_schema`, and only a\n * duplicate-index error from a repeated DDL statement is ignored.\n */\nimport { DDL } from \"./ddl.ts\";\nimport { FOREIGN_KEYS, type ForeignKeyMigration } from \"./foreign-keys.ts\";\n\n/** Minimal row-query surface a migration runner needs. */\nexport type MigrationRunner = (sql: string) => Promise<unknown[]>;\n\ninterface ColumnMigration {\n table: string;\n column: string;\n definition: string;\n}\n\nconst COLUMN_MIGRATIONS: ColumnMigration[] = [\n { table: \"projects\", column: \"storybook_meta\", definition: \"TEXT\" },\n {\n table: \"projects\",\n column: \"execute_play\",\n definition: \"TINYINT(1) NOT NULL DEFAULT 0\",\n },\n {\n table: \"projects\",\n column: \"play_timeout_ms\",\n definition: \"INTEGER NOT NULL DEFAULT 10000\",\n },\n { table: \"projects\", column: \"run_a11y\", definition: \"TINYINT(1) NOT NULL DEFAULT 1\" },\n {\n table: \"projects\",\n column: \"browser\",\n definition: \"VARCHAR(64) NOT NULL DEFAULT 'chromium'\",\n },\n { table: \"projects\", column: \"viewports\", definition: \"TEXT\" },\n { table: \"projects\", column: \"browsers\", definition: \"TEXT\" },\n { table: \"projects\", column: \"modes_allowlist\", definition: \"TEXT\" },\n { table: \"projects\", column: \"automigrate\", definition: \"TINYINT(1) NOT NULL DEFAULT 0\" },\n { table: \"projects\", column: \"ai_profile\", definition: \"TEXT\" },\n {\n table: \"projects\",\n column: \"review_enabled\",\n definition: \"TINYINT(1) NOT NULL DEFAULT 1\",\n },\n { table: \"projects\", column: \"review_approvals\", definition: \"INT NOT NULL DEFAULT 1\" },\n { table: \"projects\", column: \"storybook_url_ttl_seconds\", definition: \"INT\" },\n { table: \"projects\", column: \"run_tests\", definition: \"TINYINT(1) NOT NULL DEFAULT 0\" },\n { table: \"snapshots\", column: \"infra_hash\", definition: \"TEXT\" },\n {\n table: \"snapshots\",\n column: \"inherited\",\n definition: \"TINYINT(1) NOT NULL DEFAULT 0\",\n },\n { table: \"snapshots\", column: \"baseline_id\", definition: \"VARCHAR(64)\" },\n { table: \"snapshots\", column: \"baseline_version\", definition: \"TEXT\" },\n { table: \"snapshots\", column: \"design_url\", definition: \"TEXT\" },\n { table: \"snapshots\", column: \"env_change\", definition: \"TEXT\" },\n { table: \"snapshots\", column: \"mode\", definition: \"VARCHAR(64)\" },\n {\n table: \"snapshots\",\n column: \"browser\",\n definition: \"VARCHAR(64) NOT NULL DEFAULT 'chromium'\",\n },\n { table: \"snapshots\", column: \"duration_ms\", definition: \"INT\" },\n { table: \"snapshots\", column: \"a11y_violations\", definition: \"TEXT\" },\n { table: \"baselines\", column: \"infra_hash\", definition: \"TEXT\" },\n { table: \"baselines\", column: \"fingerprint\", definition: \"TEXT\" },\n { table: \"baselines\", column: \"mode\", definition: \"VARCHAR(64)\" },\n {\n table: \"baselines\",\n column: \"browser\",\n definition: \"VARCHAR(64) NOT NULL DEFAULT 'chromium'\",\n },\n {\n table: \"builds\",\n column: \"affected_only\",\n definition: \"TINYINT(1) NOT NULL DEFAULT 1\",\n },\n { table: \"builds\", column: \"baseline_sha\", definition: \"TEXT\" },\n { table: \"builds\", column: \"changed_files\", definition: \"TEXT\" },\n { table: \"builds\", column: \"affected_import_paths\", definition: \"TEXT\" },\n { table: \"builds\", column: \"inherited_count\", definition: \"INTEGER NOT NULL DEFAULT 0\" },\n { table: \"builds\", column: \"test_results\", definition: \"TEXT\" },\n { table: \"webhooks\", column: \"secret_encrypted\", definition: \"TEXT NOT NULL\" },\n { table: \"tokens\", column: \"user_id\", definition: \"VARCHAR(64) NULL\" },\n {\n table: \"project_members\",\n column: \"source\",\n definition: \"VARCHAR(32) NOT NULL DEFAULT 'manual'\",\n },\n { table: \"comments\", column: \"story_id\", definition: \"TEXT\" },\n { table: \"notification_channels\", column: \"last_error\", definition: \"TEXT\" },\n { table: \"notification_channels\", column: \"last_error_at\", definition: \"DATETIME(3)\" },\n];\n\nconst IDENTITY_INDEXES = [\n {\n table: \"snapshots\",\n name: \"snapshots_build_story_mode_browser_idx\",\n sql: \"CREATE UNIQUE INDEX snapshots_build_story_mode_browser_idx ON snapshots (build_id, story_id, viewport_name, browser)\",\n },\n {\n table: \"baselines\",\n name: \"baselines_project_story_mode_browser_branch_idx\",\n sql: \"CREATE UNIQUE INDEX baselines_project_story_mode_browser_branch_idx ON baselines (project_id, story_id, viewport_name, browser, branch)\",\n },\n];\n\n/** Run the full migration set through any row-query runner. */\nexport async function runMigrations(run: MigrationRunner): Promise<void> {\n await runDdl(run);\n await ensureColumns(run);\n await migrateIndexes(run);\n await migrateLegacyColumns(run);\n await ensureForeignKeys(run);\n}\n\nasync function ensureColumns(run: MigrationRunner): Promise<void> {\n for (const migration of COLUMN_MIGRATIONS) {\n // oxlint-disable-next-line no-await-in-loop -- information_schema query then ALTER\n await ensureColumn(run, migration);\n }\n}\n\nasync function migrateIndexes(run: MigrationRunner): Promise<void> {\n await dropIndexIfExists(run, \"snapshots\", \"snapshots_build_story_viewport_idx\");\n await dropIndexIfExists(run, \"baselines\", \"baselines_project_story_viewport_branch_idx\");\n for (const index of IDENTITY_INDEXES) {\n // oxlint-disable-next-line no-await-in-loop -- index creation follows the legacy drops\n await ensureIndex(run, index.table, index.name, index.sql);\n }\n if (await indexIsUnique(run, \"builds\", \"builds_project_gitsha_idx\")) {\n await dropIndexIfExists(run, \"builds\", \"builds_project_gitsha_idx\");\n }\n await ensureIndex(\n run,\n \"builds\",\n \"builds_project_gitsha_idx\",\n \"CREATE INDEX builds_project_gitsha_idx ON builds (project_id, git_sha)\",\n );\n await ensureIndex(\n run,\n \"design_links\",\n \"design_links_project_import_path_idx\",\n \"CREATE UNIQUE INDEX design_links_project_import_path_idx ON design_links (project_id, import_path)\",\n );\n}\n\nasync function migrateLegacyColumns(run: MigrationRunner): Promise<void> {\n await dropColumnIfExists(run, \"webhooks\", \"secret\");\n await migrateCommentsTable(run);\n}\n\nasync function ensureForeignKeys(run: MigrationRunner): Promise<void> {\n for (const foreignKey of FOREIGN_KEYS) {\n // oxlint-disable-next-line no-await-in-loop -- each constraint needs its own check\n await ensureForeignKey(run, foreignKey);\n }\n}\n\nasync function ensureForeignKey(\n run: MigrationRunner,\n foreignKey: ForeignKeyMigration,\n): Promise<void> {\n if (await hasForeignKey(run, foreignKey)) {\n return;\n }\n await deleteOrphans(run, foreignKey);\n const table = quote(foreignKey.table);\n const column = quote(foreignKey.column);\n const parent = quote(foreignKey.parent);\n const parentColumn = quote(foreignKey.parentColumn);\n await run(\n `ALTER TABLE ${table} ADD CONSTRAINT ${foreignKey.name} FOREIGN KEY (${column}) REFERENCES ${parent}(${parentColumn}) ON DELETE CASCADE`,\n );\n}\n\nasync function hasForeignKey(\n run: MigrationRunner,\n foreignKey: ForeignKeyMigration,\n): Promise<boolean> {\n const rows = await run(\n `SELECT 1 FROM information_schema.key_column_usage WHERE constraint_schema = DATABASE() AND table_name = '${foreignKey.table}' AND column_name = '${foreignKey.column}' AND referenced_table_name = '${foreignKey.parent}' AND referenced_column_name = '${foreignKey.parentColumn}' LIMIT 1`,\n );\n return rows.length > 0;\n}\n\nasync function deleteOrphans(run: MigrationRunner, foreignKey: ForeignKeyMigration): Promise<void> {\n const table = quote(foreignKey.table);\n const column = quote(foreignKey.column);\n const parent = quote(foreignKey.parent);\n const parentColumn = quote(foreignKey.parentColumn);\n await run(\n `DELETE FROM ${table} WHERE ${column} IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ${parent} WHERE ${parent}.${parentColumn} = ${table}.${column})`,\n );\n}\n\nfunction quote(identifier: string): string {\n return `\\`${identifier}\\``;\n}\n\nasync function runDdl(run: MigrationRunner): Promise<void> {\n for (const statement of splitStatements(DDL)) {\n try {\n // oxlint-disable-next-line no-await-in-loop -- DDL order matters\n await run(statement);\n } catch (error) {\n if (!isDuplicateIndexError(error)) {\n throw error;\n }\n }\n }\n}\n\nfunction splitStatements(ddl: string): string[] {\n return ddl\n .split(\";\")\n .map((statement) => statement.trim())\n .filter((statement) => statement.length > 0);\n}\n\nfunction isDuplicateIndexError(error: unknown): boolean {\n const code = (error as { code?: string; errno?: number }).code;\n const errno = (error as { errno?: number }).errno;\n return code === \"ER_DUP_KEYNAME\" || errno === 1061;\n}\n\nasync function ensureColumn(run: MigrationRunner, migration: ColumnMigration): Promise<void> {\n if (await hasColumn(run, migration.table, migration.column)) {\n return;\n }\n await run(\n `ALTER TABLE ${migration.table} ADD COLUMN ${migration.column} ${migration.definition}`,\n );\n}\n\nasync function hasColumn(run: MigrationRunner, table: string, column: string): Promise<boolean> {\n const rows = await run(\n `SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${table}' AND column_name = '${column}' LIMIT 1`,\n );\n return rows.length > 0;\n}\n\nasync function ensureIndex(\n run: MigrationRunner,\n table: string,\n name: string,\n sql: string,\n): Promise<void> {\n if (await hasIndex(run, table, name)) {\n return;\n }\n await run(sql);\n}\n\nasync function hasIndex(run: MigrationRunner, table: string, name: string): Promise<boolean> {\n const rows = await run(\n `SELECT 1 FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = '${table}' AND index_name = '${name}' LIMIT 1`,\n );\n return rows.length > 0;\n}\n\nasync function indexIsUnique(run: MigrationRunner, table: string, name: string): Promise<boolean> {\n const rows = await run(\n `SELECT NON_UNIQUE AS non_unique FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = '${table}' AND index_name = '${name}' LIMIT 1`,\n );\n const nonUnique = (rows[0] as { non_unique?: number | string } | undefined)?.non_unique;\n return nonUnique !== undefined && Number(nonUnique) === 0;\n}\n\nasync function dropIndexIfExists(run: MigrationRunner, table: string, name: string): Promise<void> {\n if (await hasIndex(run, table, name)) {\n await run(`ALTER TABLE ${table} DROP INDEX ${name}`);\n }\n}\n\nasync function dropColumnIfExists(\n run: MigrationRunner,\n table: string,\n column: string,\n): Promise<void> {\n if (await hasColumn(run, table, column)) {\n await run(`ALTER TABLE ${table} DROP COLUMN ${column}`);\n }\n}\n\nasync function migrateCommentsTable(run: MigrationRunner): Promise<void> {\n const rows = await run(\n \"SELECT IS_NULLABLE AS is_nullable FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'comments' AND column_name = 'user_id' LIMIT 1\",\n );\n const isNullable = (rows[0] as { is_nullable?: string } | undefined)?.is_nullable;\n if (isNullable !== \"NO\") {\n return;\n }\n await run(\"ALTER TABLE comments MODIFY COLUMN user_id VARCHAR(64) NULL\");\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"migrate.mjs","names":[],"sources":["../src/migrate.ts"],"sourcesContent":["/**\n * Shared MySQL migrations for every `db-mysql` preset.\n *\n * MySQL 8 has no `ADD COLUMN IF NOT EXISTS`, no `CREATE INDEX IF NOT EXISTS`\n * and no `ALTER COLUMN ... DROP NOT NULL`. The DDL is split into statements,\n * missing columns/indexes are found in `information_schema`, and only a\n * duplicate-index error from a repeated DDL statement is ignored.\n */\nimport { DDL } from \"./ddl.ts\";\nimport { FOREIGN_KEYS, type ForeignKeyMigration } from \"./foreign-keys.ts\";\n\n/** Minimal row-query surface a migration runner needs. */\nexport type MigrationRunner = (sql: string) => Promise<unknown[]>;\n\ninterface ColumnMigration {\n table: string;\n column: string;\n definition: string;\n}\n\nconst COLUMN_MIGRATIONS: ColumnMigration[] = [\n { table: \"projects\", column: \"storybook_meta\", definition: \"TEXT\" },\n {\n table: \"projects\",\n column: \"execute_play\",\n definition: \"TINYINT(1) NOT NULL DEFAULT 0\",\n },\n {\n table: \"projects\",\n column: \"play_timeout_ms\",\n definition: \"INTEGER NOT NULL DEFAULT 10000\",\n },\n { table: \"projects\", column: \"run_a11y\", definition: \"TINYINT(1) NOT NULL DEFAULT 1\" },\n {\n table: \"projects\",\n column: \"browser\",\n definition: \"VARCHAR(64) NOT NULL DEFAULT 'chromium'\",\n },\n { table: \"projects\", column: \"viewports\", definition: \"TEXT\" },\n { table: \"projects\", column: \"browsers\", definition: \"TEXT\" },\n { table: \"projects\", column: \"modes_allowlist\", definition: \"TEXT\" },\n { table: \"projects\", column: \"automigrate\", definition: \"TINYINT(1) NOT NULL DEFAULT 0\" },\n { table: \"projects\", column: \"ai_profile\", definition: \"TEXT\" },\n {\n table: \"projects\",\n column: \"review_enabled\",\n definition: \"TINYINT(1) NOT NULL DEFAULT 1\",\n },\n { table: \"projects\", column: \"review_approvals\", definition: \"INT NOT NULL DEFAULT 1\" },\n { table: \"projects\", column: \"storybook_url_ttl_seconds\", definition: \"INT\" },\n { table: \"projects\", column: \"run_tests\", definition: \"TINYINT(1) NOT NULL DEFAULT 0\" },\n { table: \"snapshots\", column: \"infra_hash\", definition: \"TEXT\" },\n {\n table: \"snapshots\",\n column: \"inherited\",\n definition: \"TINYINT(1) NOT NULL DEFAULT 0\",\n },\n { table: \"snapshots\", column: \"baseline_id\", definition: \"VARCHAR(64)\" },\n { table: \"snapshots\", column: \"baseline_version\", definition: \"TEXT\" },\n { table: \"snapshots\", column: \"source_build_id\", definition: \"TEXT\" },\n { table: \"snapshots\", column: \"comparison_image_path\", definition: \"TEXT\" },\n { table: \"snapshots\", column: \"comparison_metadata\", definition: \"TEXT\" },\n { table: \"snapshots\", column: \"design_url\", definition: \"TEXT\" },\n { table: \"snapshots\", column: \"env_change\", definition: \"TEXT\" },\n { table: \"snapshots\", column: \"mode\", definition: \"VARCHAR(64)\" },\n {\n table: \"snapshots\",\n column: \"browser\",\n definition: \"VARCHAR(64) NOT NULL DEFAULT 'chromium'\",\n },\n { table: \"snapshots\", column: \"duration_ms\", definition: \"INT\" },\n { table: \"snapshots\", column: \"a11y_violations\", definition: \"TEXT\" },\n { table: \"baselines\", column: \"infra_hash\", definition: \"TEXT\" },\n { table: \"baselines\", column: \"fingerprint\", definition: \"TEXT\" },\n { table: \"baselines\", column: \"source_build_id\", definition: \"TEXT\" },\n { table: \"baselines\", column: \"mode\", definition: \"VARCHAR(64)\" },\n {\n table: \"baselines\",\n column: \"browser\",\n definition: \"VARCHAR(64) NOT NULL DEFAULT 'chromium'\",\n },\n {\n table: \"builds\",\n column: \"affected_only\",\n definition: \"TINYINT(1) NOT NULL DEFAULT 1\",\n },\n { table: \"builds\", column: \"baseline_sha\", definition: \"TEXT\" },\n { table: \"builds\", column: \"changed_files\", definition: \"TEXT\" },\n { table: \"builds\", column: \"affected_import_paths\", definition: \"TEXT\" },\n { table: \"builds\", column: \"inherited_count\", definition: \"INTEGER NOT NULL DEFAULT 0\" },\n { table: \"builds\", column: \"test_results\", definition: \"TEXT\" },\n { table: \"webhooks\", column: \"secret_encrypted\", definition: \"TEXT NOT NULL\" },\n { table: \"tokens\", column: \"user_id\", definition: \"VARCHAR(64) NULL\" },\n {\n table: \"project_members\",\n column: \"source\",\n definition: \"VARCHAR(32) NOT NULL DEFAULT 'manual'\",\n },\n { table: \"comments\", column: \"story_id\", definition: \"TEXT\" },\n // Auth columns the SQLite `users` table always had (access control: `disabled`).\n { table: \"users\", column: \"password_hash\", definition: \"TEXT\" },\n { table: \"users\", column: \"display_name_override\", definition: \"TEXT\" },\n {\n table: \"users\",\n column: \"auth_provider\",\n definition: \"VARCHAR(32) NOT NULL DEFAULT 'oidc'\",\n },\n { table: \"users\", column: \"disabled\", definition: \"TINYINT(1) NOT NULL DEFAULT 0\" },\n { table: \"notification_channels\", column: \"last_error\", definition: \"TEXT\" },\n { table: \"notification_channels\", column: \"last_error_at\", definition: \"DATETIME(3)\" },\n];\n\nconst IDENTITY_INDEXES = [\n {\n table: \"snapshots\",\n name: \"snapshots_build_story_mode_browser_idx\",\n sql: \"CREATE UNIQUE INDEX snapshots_build_story_mode_browser_idx ON snapshots (build_id, story_id, viewport_name, browser)\",\n },\n {\n table: \"baselines\",\n name: \"baselines_project_story_mode_browser_branch_idx\",\n sql: \"CREATE UNIQUE INDEX baselines_project_story_mode_browser_branch_idx ON baselines (project_id, story_id, viewport_name, browser, branch)\",\n },\n];\n\n/** Run the full migration set through any row-query runner. */\nexport async function runMigrations(run: MigrationRunner): Promise<void> {\n await runDdl(run);\n await ensureColumns(run);\n await migrateIndexes(run);\n await migrateLegacyColumns(run);\n await ensureForeignKeys(run);\n}\n\nasync function ensureColumns(run: MigrationRunner): Promise<void> {\n for (const migration of COLUMN_MIGRATIONS) {\n // oxlint-disable-next-line no-await-in-loop -- information_schema query then ALTER\n await ensureColumn(run, migration);\n }\n}\n\nasync function migrateIndexes(run: MigrationRunner): Promise<void> {\n await dropIndexIfExists(run, \"snapshots\", \"snapshots_build_story_viewport_idx\");\n await dropIndexIfExists(run, \"baselines\", \"baselines_project_story_viewport_branch_idx\");\n for (const index of IDENTITY_INDEXES) {\n // oxlint-disable-next-line no-await-in-loop -- index creation follows the legacy drops\n await ensureIndex(run, index.table, index.name, index.sql);\n }\n if (await indexIsUnique(run, \"builds\", \"builds_project_gitsha_idx\")) {\n await dropIndexIfExists(run, \"builds\", \"builds_project_gitsha_idx\");\n }\n await ensureIndex(\n run,\n \"builds\",\n \"builds_project_gitsha_idx\",\n \"CREATE INDEX builds_project_gitsha_idx ON builds (project_id, git_sha)\",\n );\n await ensureIndex(\n run,\n \"design_links\",\n \"design_links_project_import_path_idx\",\n \"CREATE UNIQUE INDEX design_links_project_import_path_idx ON design_links (project_id, import_path)\",\n );\n}\n\nasync function migrateLegacyColumns(run: MigrationRunner): Promise<void> {\n await dropColumnIfExists(run, \"webhooks\", \"secret\");\n await migrateCommentsTable(run);\n}\n\nasync function ensureForeignKeys(run: MigrationRunner): Promise<void> {\n for (const foreignKey of FOREIGN_KEYS) {\n // oxlint-disable-next-line no-await-in-loop -- each constraint needs its own check\n await ensureForeignKey(run, foreignKey);\n }\n}\n\nasync function ensureForeignKey(\n run: MigrationRunner,\n foreignKey: ForeignKeyMigration,\n): Promise<void> {\n if (await hasForeignKey(run, foreignKey)) {\n return;\n }\n await deleteOrphans(run, foreignKey);\n const table = quote(foreignKey.table);\n const column = quote(foreignKey.column);\n const parent = quote(foreignKey.parent);\n const parentColumn = quote(foreignKey.parentColumn);\n await run(\n `ALTER TABLE ${table} ADD CONSTRAINT ${foreignKey.name} FOREIGN KEY (${column}) REFERENCES ${parent}(${parentColumn}) ON DELETE CASCADE`,\n );\n}\n\nasync function hasForeignKey(\n run: MigrationRunner,\n foreignKey: ForeignKeyMigration,\n): Promise<boolean> {\n const rows = await run(\n `SELECT 1 FROM information_schema.key_column_usage WHERE constraint_schema = DATABASE() AND table_name = '${foreignKey.table}' AND column_name = '${foreignKey.column}' AND referenced_table_name = '${foreignKey.parent}' AND referenced_column_name = '${foreignKey.parentColumn}' LIMIT 1`,\n );\n return rows.length > 0;\n}\n\nasync function deleteOrphans(run: MigrationRunner, foreignKey: ForeignKeyMigration): Promise<void> {\n const table = quote(foreignKey.table);\n const column = quote(foreignKey.column);\n const parent = quote(foreignKey.parent);\n const parentColumn = quote(foreignKey.parentColumn);\n await run(\n `DELETE FROM ${table} WHERE ${column} IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ${parent} WHERE ${parent}.${parentColumn} = ${table}.${column})`,\n );\n}\n\nfunction quote(identifier: string): string {\n return `\\`${identifier}\\``;\n}\n\nasync function runDdl(run: MigrationRunner): Promise<void> {\n for (const statement of splitStatements(DDL)) {\n try {\n // oxlint-disable-next-line no-await-in-loop -- DDL order matters\n await run(statement);\n } catch (error) {\n if (!isDuplicateIndexError(error)) {\n throw error;\n }\n }\n }\n}\n\nfunction splitStatements(ddl: string): string[] {\n return ddl\n .split(\";\")\n .map((statement) => statement.trim())\n .filter((statement) => statement.length > 0);\n}\n\nfunction isDuplicateIndexError(error: unknown): boolean {\n const code = (error as { code?: string; errno?: number }).code;\n const errno = (error as { errno?: number }).errno;\n return code === \"ER_DUP_KEYNAME\" || errno === 1061;\n}\n\nasync function ensureColumn(run: MigrationRunner, migration: ColumnMigration): Promise<void> {\n if (await hasColumn(run, migration.table, migration.column)) {\n return;\n }\n try {\n await run(\n `ALTER TABLE ${migration.table} ADD COLUMN ${migration.column} ${migration.definition}`,\n );\n } catch (error) {\n // Another instance booting at the same time may have added it between the check and the ALTER.\n if (!isDuplicateColumnError(error)) {\n throw error;\n }\n }\n}\n\nfunction isDuplicateColumnError(error: unknown): boolean {\n const code = (error as { code?: string }).code;\n const errno = (error as { errno?: number }).errno;\n return code === \"ER_DUP_FIELDNAME\" || errno === 1060;\n}\n\nasync function hasColumn(run: MigrationRunner, table: string, column: string): Promise<boolean> {\n const rows = await run(\n `SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${table}' AND column_name = '${column}' LIMIT 1`,\n );\n return rows.length > 0;\n}\n\nasync function ensureIndex(\n run: MigrationRunner,\n table: string,\n name: string,\n sql: string,\n): Promise<void> {\n if (await hasIndex(run, table, name)) {\n return;\n }\n await run(sql);\n}\n\nasync function hasIndex(run: MigrationRunner, table: string, name: string): Promise<boolean> {\n const rows = await run(\n `SELECT 1 FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = '${table}' AND index_name = '${name}' LIMIT 1`,\n );\n return rows.length > 0;\n}\n\nasync function indexIsUnique(run: MigrationRunner, table: string, name: string): Promise<boolean> {\n const rows = await run(\n `SELECT NON_UNIQUE AS non_unique FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = '${table}' AND index_name = '${name}' LIMIT 1`,\n );\n const nonUnique = (rows[0] as { non_unique?: number | string } | undefined)?.non_unique;\n return nonUnique !== undefined && Number(nonUnique) === 0;\n}\n\nasync function dropIndexIfExists(run: MigrationRunner, table: string, name: string): Promise<void> {\n if (await hasIndex(run, table, name)) {\n await run(`ALTER TABLE ${table} DROP INDEX ${name}`);\n }\n}\n\nasync function dropColumnIfExists(\n run: MigrationRunner,\n table: string,\n column: string,\n): Promise<void> {\n if (await hasColumn(run, table, column)) {\n await run(`ALTER TABLE ${table} DROP COLUMN ${column}`);\n }\n}\n\nasync function migrateCommentsTable(run: MigrationRunner): Promise<void> {\n const rows = await run(\n \"SELECT IS_NULLABLE AS is_nullable FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'comments' AND column_name = 'user_id' LIMIT 1\",\n );\n const isNullable = (rows[0] as { is_nullable?: string } | undefined)?.is_nullable;\n if (isNullable !== \"NO\") {\n return;\n }\n await run(\"ALTER TABLE comments MODIFY COLUMN user_id VARCHAR(64) NULL\");\n}\n"],"mappings":";;;;;;;;;;;;;;AAoBA,MAAM,oBAAuC;CAC3C;EAAE,OAAO;EAAY,QAAQ;EAAkB,YAAY;CAAO;CAClE;EACE,OAAO;EACP,QAAQ;EACR,YAAY;CACd;CACA;EACE,OAAO;EACP,QAAQ;EACR,YAAY;CACd;CACA;EAAE,OAAO;EAAY,QAAQ;EAAY,YAAY;CAAgC;CACrF;EACE,OAAO;EACP,QAAQ;EACR,YAAY;CACd;CACA;EAAE,OAAO;EAAY,QAAQ;EAAa,YAAY;CAAO;CAC7D;EAAE,OAAO;EAAY,QAAQ;EAAY,YAAY;CAAO;CAC5D;EAAE,OAAO;EAAY,QAAQ;EAAmB,YAAY;CAAO;CACnE;EAAE,OAAO;EAAY,QAAQ;EAAe,YAAY;CAAgC;CACxF;EAAE,OAAO;EAAY,QAAQ;EAAc,YAAY;CAAO;CAC9D;EACE,OAAO;EACP,QAAQ;EACR,YAAY;CACd;CACA;EAAE,OAAO;EAAY,QAAQ;EAAoB,YAAY;CAAyB;CACtF;EAAE,OAAO;EAAY,QAAQ;EAA6B,YAAY;CAAM;CAC5E;EAAE,OAAO;EAAY,QAAQ;EAAa,YAAY;CAAgC;CACtF;EAAE,OAAO;EAAa,QAAQ;EAAc,YAAY;CAAO;CAC/D;EACE,OAAO;EACP,QAAQ;EACR,YAAY;CACd;CACA;EAAE,OAAO;EAAa,QAAQ;EAAe,YAAY;CAAc;CACvE;EAAE,OAAO;EAAa,QAAQ;EAAoB,YAAY;CAAO;CACrE;EAAE,OAAO;EAAa,QAAQ;EAAmB,YAAY;CAAO;CACpE;EAAE,OAAO;EAAa,QAAQ;EAAyB,YAAY;CAAO;CAC1E;EAAE,OAAO;EAAa,QAAQ;EAAuB,YAAY;CAAO;CACxE;EAAE,OAAO;EAAa,QAAQ;EAAc,YAAY;CAAO;CAC/D;EAAE,OAAO;EAAa,QAAQ;EAAc,YAAY;CAAO;CAC/D;EAAE,OAAO;EAAa,QAAQ;EAAQ,YAAY;CAAc;CAChE;EACE,OAAO;EACP,QAAQ;EACR,YAAY;CACd;CACA;EAAE,OAAO;EAAa,QAAQ;EAAe,YAAY;CAAM;CAC/D;EAAE,OAAO;EAAa,QAAQ;EAAmB,YAAY;CAAO;CACpE;EAAE,OAAO;EAAa,QAAQ;EAAc,YAAY;CAAO;CAC/D;EAAE,OAAO;EAAa,QAAQ;EAAe,YAAY;CAAO;CAChE;EAAE,OAAO;EAAa,QAAQ;EAAmB,YAAY;CAAO;CACpE;EAAE,OAAO;EAAa,QAAQ;EAAQ,YAAY;CAAc;CAChE;EACE,OAAO;EACP,QAAQ;EACR,YAAY;CACd;CACA;EACE,OAAO;EACP,QAAQ;EACR,YAAY;CACd;CACA;EAAE,OAAO;EAAU,QAAQ;EAAgB,YAAY;CAAO;CAC9D;EAAE,OAAO;EAAU,QAAQ;EAAiB,YAAY;CAAO;CAC/D;EAAE,OAAO;EAAU,QAAQ;EAAyB,YAAY;CAAO;CACvE;EAAE,OAAO;EAAU,QAAQ;EAAmB,YAAY;CAA6B;CACvF;EAAE,OAAO;EAAU,QAAQ;EAAgB,YAAY;CAAO;CAC9D;EAAE,OAAO;EAAY,QAAQ;EAAoB,YAAY;CAAgB;CAC7E;EAAE,OAAO;EAAU,QAAQ;EAAW,YAAY;CAAmB;CACrE;EACE,OAAO;EACP,QAAQ;EACR,YAAY;CACd;CACA;EAAE,OAAO;EAAY,QAAQ;EAAY,YAAY;CAAO;CAE5D;EAAE,OAAO;EAAS,QAAQ;EAAiB,YAAY;CAAO;CAC9D;EAAE,OAAO;EAAS,QAAQ;EAAyB,YAAY;CAAO;CACtE;EACE,OAAO;EACP,QAAQ;EACR,YAAY;CACd;CACA;EAAE,OAAO;EAAS,QAAQ;EAAY,YAAY;CAAgC;CAClF;EAAE,OAAO;EAAyB,QAAQ;EAAc,YAAY;CAAO;CAC3E;EAAE,OAAO;EAAyB,QAAQ;EAAiB,YAAY;CAAc;AACvF;AAEA,MAAM,mBAAmB,CACvB;CACE,OAAO;CACP,MAAM;CACN,KAAK;AACP,GACA;CACE,OAAO;CACP,MAAM;CACN,KAAK;AACP,CACF;;AAGA,eAAsB,cAAc,KAAqC;CACvE,MAAM,OAAO,GAAG;CAChB,MAAM,cAAc,GAAG;CACvB,MAAM,eAAe,GAAG;CACxB,MAAM,qBAAqB,GAAG;CAC9B,MAAM,kBAAkB,GAAG;AAC7B;AAEA,eAAe,cAAc,KAAqC;CAChE,KAAK,MAAM,aAAa,mBAEtB,MAAM,aAAa,KAAK,SAAS;AAErC;AAEA,eAAe,eAAe,KAAqC;CACjE,MAAM,kBAAkB,KAAK,aAAa,oCAAoC;CAC9E,MAAM,kBAAkB,KAAK,aAAa,6CAA6C;CACvF,KAAK,MAAM,SAAS,kBAElB,MAAM,YAAY,KAAK,MAAM,OAAO,MAAM,MAAM,MAAM,GAAG;CAE3D,IAAI,MAAM,cAAc,KAAK,UAAU,2BAA2B,GAChE,MAAM,kBAAkB,KAAK,UAAU,2BAA2B;CAEpE,MAAM,YACJ,KACA,UACA,6BACA,wEACF;CACA,MAAM,YACJ,KACA,gBACA,wCACA,oGACF;AACF;AAEA,eAAe,qBAAqB,KAAqC;CACvE,MAAM,mBAAmB,KAAK,YAAY,QAAQ;CAClD,MAAM,qBAAqB,GAAG;AAChC;AAEA,eAAe,kBAAkB,KAAqC;CACpE,KAAK,MAAM,cAAc,cAEvB,MAAM,iBAAiB,KAAK,UAAU;AAE1C;AAEA,eAAe,iBACb,KACA,YACe;CACf,IAAI,MAAM,cAAc,KAAK,UAAU,GACrC;CAEF,MAAM,cAAc,KAAK,UAAU;CACnC,MAAM,QAAQ,MAAM,WAAW,KAAK;CACpC,MAAM,SAAS,MAAM,WAAW,MAAM;CACtC,MAAM,SAAS,MAAM,WAAW,MAAM;CACtC,MAAM,eAAe,MAAM,WAAW,YAAY;CAClD,MAAM,IACJ,eAAe,MAAM,kBAAkB,WAAW,KAAK,gBAAgB,OAAO,eAAe,OAAO,GAAG,aAAa,oBACtH;AACF;AAEA,eAAe,cACb,KACA,YACkB;CAIlB,QAAO,MAHY,IACjB,4GAA4G,WAAW,MAAM,uBAAuB,WAAW,OAAO,iCAAiC,WAAW,OAAO,kCAAkC,WAAW,aAAa,UACrR,EAAA,CACY,SAAS;AACvB;AAEA,eAAe,cAAc,KAAsB,YAAgD;CACjG,MAAM,QAAQ,MAAM,WAAW,KAAK;CACpC,MAAM,SAAS,MAAM,WAAW,MAAM;CACtC,MAAM,SAAS,MAAM,WAAW,MAAM;CAEtC,MAAM,IACJ,eAAe,MAAM,SAAS,OAAO,6CAA6C,OAAO,SAAS,OAAO,GAFtF,MAAM,WAAW,YAEmF,EAAE,KAAK,MAAM,GAAG,OAAO,EAChJ;AACF;AAEA,SAAS,MAAM,YAA4B;CACzC,OAAO,KAAK,WAAW;AACzB;AAEA,eAAe,OAAO,KAAqC;CACzD,KAAK,MAAM,aAAa,gBAAgB,GAAG,GACzC,IAAI;EAEF,MAAM,IAAI,SAAS;CACrB,SAAS,OAAO;EACd,IAAI,CAAC,sBAAsB,KAAK,GAC9B,MAAM;CAEV;AAEJ;AAEA,SAAS,gBAAgB,KAAuB;CAC9C,OAAO,IACJ,MAAM,GAAG,CAAC,CACV,KAAK,cAAc,UAAU,KAAK,CAAC,CAAC,CACpC,QAAQ,cAAc,UAAU,SAAS,CAAC;AAC/C;AAEA,SAAS,sBAAsB,OAAyB;CACtD,MAAM,OAAQ,MAA4C;CAC1D,MAAM,QAAS,MAA6B;CAC5C,OAAO,SAAS,oBAAoB,UAAU;AAChD;AAEA,eAAe,aAAa,KAAsB,WAA2C;CAC3F,IAAI,MAAM,UAAU,KAAK,UAAU,OAAO,UAAU,MAAM,GACxD;CAEF,IAAI;EACF,MAAM,IACJ,eAAe,UAAU,MAAM,cAAc,UAAU,OAAO,GAAG,UAAU,YAC7E;CACF,SAAS,OAAO;EAEd,IAAI,CAAC,uBAAuB,KAAK,GAC/B,MAAM;CAEV;AACF;AAEA,SAAS,uBAAuB,OAAyB;CACvD,MAAM,OAAQ,MAA4B;CAC1C,MAAM,QAAS,MAA6B;CAC5C,OAAO,SAAS,sBAAsB,UAAU;AAClD;AAEA,eAAe,UAAU,KAAsB,OAAe,QAAkC;CAI9F,QAAO,MAHY,IACjB,8FAA8F,MAAM,uBAAuB,OAAO,UACpI,EAAA,CACY,SAAS;AACvB;AAEA,eAAe,YACb,KACA,OACA,MACA,KACe;CACf,IAAI,MAAM,SAAS,KAAK,OAAO,IAAI,GACjC;CAEF,MAAM,IAAI,GAAG;AACf;AAEA,eAAe,SAAS,KAAsB,OAAe,MAAgC;CAI3F,QAAO,MAHY,IACjB,iGAAiG,MAAM,sBAAsB,KAAK,UACpI,EAAA,CACY,SAAS;AACvB;AAEA,eAAe,cAAc,KAAsB,OAAe,MAAgC;CAIhG,MAAM,aAAa,MAHA,IACjB,wHAAwH,MAAM,sBAAsB,KAAK,UAC3J,EAAA,CACwB,EAAE,EAAmD;CAC7E,OAAO,cAAc,KAAA,KAAa,OAAO,SAAS,MAAM;AAC1D;AAEA,eAAe,kBAAkB,KAAsB,OAAe,MAA6B;CACjG,IAAI,MAAM,SAAS,KAAK,OAAO,IAAI,GACjC,MAAM,IAAI,eAAe,MAAM,cAAc,MAAM;AAEvD;AAEA,eAAe,mBACb,KACA,OACA,QACe;CACf,IAAI,MAAM,UAAU,KAAK,OAAO,MAAM,GACpC,MAAM,IAAI,eAAe,MAAM,eAAe,QAAQ;AAE1D;AAEA,eAAe,qBAAqB,KAAqC;CAKvE,KADoB,MAHD,IACjB,mKACF,EAAA,CACyB,EAAE,EAA2C,gBACnD,MACjB;CAEF,MAAM,IAAI,6DAA6D;AACzE"}
@@ -2,7 +2,6 @@ import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
3
  import { MysqlDatabaseOptions } from "./index.mjs";
4
4
  import { DatabaseAdapter } from "@storyshelf/core/adapter/database";
5
- //#region src/planetscale.d.ts
6
5
  /**
7
6
  * PlanetScale (serverless MySQL HTTP) preset.
8
7
  * For now an alias over the mysql2 pool — PlanetScale's HTTP driver
@@ -13,6 +12,5 @@ import { DatabaseAdapter } from "@storyshelf/core/adapter/database";
13
12
  */
14
13
  type PlanetscaleDatabaseOptions = MysqlDatabaseOptions;
15
14
  declare function createPlanetscaleDatabase(options: PlanetscaleDatabaseOptions): DatabaseAdapter;
16
- //#endregion
17
15
  export { PlanetscaleDatabaseOptions, createPlanetscaleDatabase };
18
16
  //# sourceMappingURL=planetscale.d.mts.map
@@ -2,11 +2,10 @@ import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
4
  import { createMysqlDatabase } from "./index.mjs";
5
- //#region src/planetscale.ts
5
+ // src/planetscale.ts
6
6
  function createPlanetscaleDatabase(options) {
7
7
  return createMysqlDatabase(options);
8
8
  }
9
- //#endregion
10
9
  export { createPlanetscaleDatabase };
11
10
 
12
11
  //# sourceMappingURL=planetscale.mjs.map
@@ -1,12 +1,11 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
- //#region src/schema/baseline.d.ts
4
3
  /** Narrow `baselines` table definition. */
5
- declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<{
4
+ declare const baselines: import("drizzle-orm/mysql-core/table.js").MySqlTableWithColumns<{
6
5
  name: "baselines";
7
6
  schema: undefined;
8
7
  columns: {
9
- id: import("drizzle-orm/mysql-core").MySqlColumn<{
8
+ id: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
10
9
  name: "id";
11
10
  tableName: "baselines";
12
11
  dataType: "string";
@@ -23,7 +22,7 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
23
22
  identity: undefined;
24
23
  generated: undefined;
25
24
  }, {}, {}>;
26
- projectId: import("drizzle-orm/mysql-core").MySqlColumn<{
25
+ projectId: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
27
26
  name: "project_id";
28
27
  tableName: "baselines";
29
28
  dataType: "string";
@@ -40,7 +39,7 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
40
39
  identity: undefined;
41
40
  generated: undefined;
42
41
  }, {}, {}>;
43
- storyId: import("drizzle-orm/mysql-core").MySqlColumn<{
42
+ storyId: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
44
43
  name: "story_id";
45
44
  tableName: "baselines";
46
45
  dataType: "string";
@@ -57,7 +56,7 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
57
56
  identity: undefined;
58
57
  generated: undefined;
59
58
  }, {}, {}>;
60
- viewportName: import("drizzle-orm/mysql-core").MySqlColumn<{
59
+ viewportName: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
61
60
  name: "viewport_name";
62
61
  tableName: "baselines";
63
62
  dataType: "string";
@@ -74,7 +73,7 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
74
73
  identity: undefined;
75
74
  generated: undefined;
76
75
  }, {}, {}>;
77
- branch: import("drizzle-orm/mysql-core").MySqlColumn<{
76
+ branch: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
78
77
  name: "branch";
79
78
  tableName: "baselines";
80
79
  dataType: "string";
@@ -91,7 +90,7 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
91
90
  identity: undefined;
92
91
  generated: undefined;
93
92
  }, {}, {}>;
94
- snapshotId: import("drizzle-orm/mysql-core").MySqlColumn<{
93
+ snapshotId: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
95
94
  name: "snapshot_id";
96
95
  tableName: "baselines";
97
96
  dataType: "string";
@@ -108,7 +107,24 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
108
107
  identity: undefined;
109
108
  generated: undefined;
110
109
  }, {}, {}>;
111
- screenshotPath: import("drizzle-orm/mysql-core").MySqlColumn<{
110
+ sourceBuildId: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
111
+ name: "source_build_id";
112
+ tableName: "baselines";
113
+ dataType: "string";
114
+ columnType: "MySqlText";
115
+ data: string;
116
+ driverParam: string;
117
+ notNull: false;
118
+ hasDefault: false;
119
+ isPrimaryKey: false;
120
+ isAutoincrement: false;
121
+ hasRuntimeDefault: false;
122
+ enumValues: [string, ...string[]];
123
+ baseColumn: never;
124
+ identity: undefined;
125
+ generated: undefined;
126
+ }, {}, {}>;
127
+ screenshotPath: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
112
128
  name: "screenshot_path";
113
129
  tableName: "baselines";
114
130
  dataType: "string";
@@ -125,7 +141,7 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
125
141
  identity: undefined;
126
142
  generated: undefined;
127
143
  }, {}, {}>;
128
- infraHash: import("drizzle-orm/mysql-core").MySqlColumn<{
144
+ infraHash: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
129
145
  name: "infra_hash";
130
146
  tableName: "baselines";
131
147
  dataType: "string";
@@ -142,7 +158,7 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
142
158
  identity: undefined;
143
159
  generated: undefined;
144
160
  }, {}, {}>;
145
- fingerprint: import("drizzle-orm/mysql-core").MySqlColumn<{
161
+ fingerprint: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
146
162
  name: "fingerprint";
147
163
  tableName: "baselines";
148
164
  dataType: "string";
@@ -159,7 +175,7 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
159
175
  identity: undefined;
160
176
  generated: undefined;
161
177
  }, {}, {}>;
162
- mode: import("drizzle-orm/mysql-core").MySqlColumn<{
178
+ mode: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
163
179
  name: "mode";
164
180
  tableName: "baselines";
165
181
  dataType: "string";
@@ -176,7 +192,7 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
176
192
  identity: undefined;
177
193
  generated: undefined;
178
194
  }, {}, {}>;
179
- browser: import("drizzle-orm/mysql-core").MySqlColumn<{
195
+ browser: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
180
196
  name: "browser";
181
197
  tableName: "baselines";
182
198
  dataType: "string";
@@ -193,7 +209,7 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
193
209
  identity: undefined;
194
210
  generated: undefined;
195
211
  }, {}, {}>;
196
- createdAt: import("drizzle-orm/mysql-core").MySqlColumn<{
212
+ createdAt: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
197
213
  name: "created_at";
198
214
  tableName: "baselines";
199
215
  dataType: "custom";
@@ -210,7 +226,7 @@ declare const baselines: import("drizzle-orm/mysql-core").MySqlTableWithColumns<
210
226
  identity: undefined;
211
227
  generated: undefined;
212
228
  }, {}, {}>;
213
- updatedAt: import("drizzle-orm/mysql-core").MySqlColumn<{
229
+ updatedAt: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
214
230
  name: "updated_at";
215
231
  tableName: "baselines";
216
232
  dataType: "custom";
@@ -238,6 +254,7 @@ interface Baseline {
238
254
  viewportName: string;
239
255
  branch: string;
240
256
  snapshotId: string | null;
257
+ sourceBuildId: string | null;
241
258
  screenshotPath: string;
242
259
  infraHash: string | null;
243
260
  fingerprint: string | null;
@@ -246,6 +263,5 @@ interface Baseline {
246
263
  createdAt: string;
247
264
  updatedAt: string;
248
265
  }
249
- //#endregion
250
266
  export { Baseline, baselines };
251
267
  //# sourceMappingURL=baseline.d.mts.map
@@ -4,7 +4,7 @@ import.meta.url;
4
4
  import { datetime } from "./datetime.mjs";
5
5
  import { projects } from "./project.mjs";
6
6
  import { index, mysqlTable, text, uniqueIndex } from "drizzle-orm/mysql-core";
7
- //#region src/schema/baseline.ts
7
+ // src/schema/baseline.ts
8
8
  /** Narrow `baselines` table definition. */
9
9
  const baselines = mysqlTable("baselines", {
10
10
  id: text("id").primaryKey(),
@@ -13,6 +13,7 @@ const baselines = mysqlTable("baselines", {
13
13
  viewportName: text("viewport_name").notNull().default("desktop"),
14
14
  branch: text("branch").notNull(),
15
15
  snapshotId: text("snapshot_id"),
16
+ sourceBuildId: text("source_build_id"),
16
17
  screenshotPath: text("screenshot_path").notNull(),
17
18
  infraHash: text("infra_hash"),
18
19
  fingerprint: text("fingerprint"),
@@ -27,7 +28,6 @@ const baselines = mysqlTable("baselines", {
27
28
  fsp: 3
28
29
  }).notNull()
29
30
  }, (t) => [uniqueIndex("baselines_project_story_mode_browser_branch_idx").on(t.projectId, t.storyId, t.viewportName, t.browser, t.branch), index("baselines_project_story_idx").on(t.projectId, t.storyId)]);
30
- //#endregion
31
31
  export { baselines };
32
32
 
33
33
  //# sourceMappingURL=baseline.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"baseline.mjs","names":[],"sources":["../../src/schema/baseline.ts"],"sourcesContent":["import { index, mysqlTable, text, uniqueIndex } from \"drizzle-orm/mysql-core\";\nimport { datetime } from \"./datetime.ts\";\nimport { projects } from \"./project.ts\";\n\n/** Narrow `baselines` table definition. */\nexport const baselines = mysqlTable(\n \"baselines\",\n {\n id: text(\"id\").primaryKey(),\n projectId: text(\"project_id\")\n .notNull()\n .references(() => projects.id, { onDelete: \"cascade\" }),\n storyId: text(\"story_id\").notNull(),\n viewportName: text(\"viewport_name\").notNull().default(\"desktop\"),\n branch: text(\"branch\").notNull(),\n snapshotId: text(\"snapshot_id\"),\n screenshotPath: text(\"screenshot_path\").notNull(),\n infraHash: text(\"infra_hash\"),\n fingerprint: text(\"fingerprint\"),\n mode: text(\"mode\"),\n browser: text(\"browser\").notNull().default(\"chromium\"),\n createdAt: datetime(\"created_at\", { mode: \"string\", fsp: 3 }).notNull(),\n updatedAt: datetime(\"updated_at\", { mode: \"string\", fsp: 3 }).notNull(),\n },\n (t) => [\n uniqueIndex(\"baselines_project_story_mode_browser_branch_idx\").on(\n t.projectId,\n t.storyId,\n t.viewportName,\n t.browser,\n t.branch,\n ),\n index(\"baselines_project_story_idx\").on(t.projectId, t.storyId),\n ],\n);\n\n/** A baseline row. */\nexport interface Baseline {\n id: string;\n projectId: string;\n storyId: string;\n viewportName: string;\n branch: string;\n snapshotId: string | null;\n screenshotPath: string;\n infraHash: string | null;\n fingerprint: string | null;\n mode?: string | null;\n browser?: string;\n createdAt: string;\n updatedAt: string;\n}\n"],"mappings":";;;;;;;;AAKA,MAAa,YAAY,WACvB,aACA;CACE,IAAI,KAAK,IAAI,CAAC,CAAC,WAAW;CAC1B,WAAW,KAAK,YAAY,CAAC,CAC1B,QAAQ,CAAC,CACT,iBAAiB,SAAS,IAAI,EAAE,UAAU,UAAU,CAAC;CACxD,SAAS,KAAK,UAAU,CAAC,CAAC,QAAQ;CAClC,cAAc,KAAK,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,SAAS;CAC/D,QAAQ,KAAK,QAAQ,CAAC,CAAC,QAAQ;CAC/B,YAAY,KAAK,aAAa;CAC9B,gBAAgB,KAAK,iBAAiB,CAAC,CAAC,QAAQ;CAChD,WAAW,KAAK,YAAY;CAC5B,aAAa,KAAK,aAAa;CAC/B,MAAM,KAAK,MAAM;CACjB,SAAS,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,UAAU;CACrD,WAAW,SAAS,cAAc;EAAE,MAAM;EAAU,KAAK;CAAE,CAAC,CAAC,CAAC,QAAQ;CACtE,WAAW,SAAS,cAAc;EAAE,MAAM;EAAU,KAAK;CAAE,CAAC,CAAC,CAAC,QAAQ;AACxE,IACC,MAAM,CACL,YAAY,iDAAiD,CAAC,CAAC,GAC7D,EAAE,WACF,EAAE,SACF,EAAE,cACF,EAAE,SACF,EAAE,MACJ,GACA,MAAM,6BAA6B,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAChE,CACF"}
1
+ {"version":3,"file":"baseline.mjs","names":[],"sources":["../../src/schema/baseline.ts"],"sourcesContent":["import { index, mysqlTable, text, uniqueIndex } from \"drizzle-orm/mysql-core\";\nimport { datetime } from \"./datetime.ts\";\nimport { projects } from \"./project.ts\";\n\n/** Narrow `baselines` table definition. */\nexport const baselines = mysqlTable(\n \"baselines\",\n {\n id: text(\"id\").primaryKey(),\n projectId: text(\"project_id\")\n .notNull()\n .references(() => projects.id, { onDelete: \"cascade\" }),\n storyId: text(\"story_id\").notNull(),\n viewportName: text(\"viewport_name\").notNull().default(\"desktop\"),\n branch: text(\"branch\").notNull(),\n snapshotId: text(\"snapshot_id\"),\n sourceBuildId: text(\"source_build_id\"),\n screenshotPath: text(\"screenshot_path\").notNull(),\n infraHash: text(\"infra_hash\"),\n fingerprint: text(\"fingerprint\"),\n mode: text(\"mode\"),\n browser: text(\"browser\").notNull().default(\"chromium\"),\n createdAt: datetime(\"created_at\", { mode: \"string\", fsp: 3 }).notNull(),\n updatedAt: datetime(\"updated_at\", { mode: \"string\", fsp: 3 }).notNull(),\n },\n (t) => [\n uniqueIndex(\"baselines_project_story_mode_browser_branch_idx\").on(\n t.projectId,\n t.storyId,\n t.viewportName,\n t.browser,\n t.branch,\n ),\n index(\"baselines_project_story_idx\").on(t.projectId, t.storyId),\n ],\n);\n\n/** A baseline row. */\nexport interface Baseline {\n id: string;\n projectId: string;\n storyId: string;\n viewportName: string;\n branch: string;\n snapshotId: string | null;\n sourceBuildId: string | null;\n screenshotPath: string;\n infraHash: string | null;\n fingerprint: string | null;\n mode?: string | null;\n browser?: string;\n createdAt: string;\n updatedAt: string;\n}\n"],"mappings":";;;;;;;;AAKA,MAAa,YAAY,WACvB,aACA;CACE,IAAI,KAAK,IAAI,CAAC,CAAC,WAAW;CAC1B,WAAW,KAAK,YAAY,CAAC,CAC1B,QAAQ,CAAC,CACT,iBAAiB,SAAS,IAAI,EAAE,UAAU,UAAU,CAAC;CACxD,SAAS,KAAK,UAAU,CAAC,CAAC,QAAQ;CAClC,cAAc,KAAK,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,SAAS;CAC/D,QAAQ,KAAK,QAAQ,CAAC,CAAC,QAAQ;CAC/B,YAAY,KAAK,aAAa;CAC9B,eAAe,KAAK,iBAAiB;CACrC,gBAAgB,KAAK,iBAAiB,CAAC,CAAC,QAAQ;CAChD,WAAW,KAAK,YAAY;CAC5B,aAAa,KAAK,aAAa;CAC/B,MAAM,KAAK,MAAM;CACjB,SAAS,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,UAAU;CACrD,WAAW,SAAS,cAAc;EAAE,MAAM;EAAU,KAAK;CAAE,CAAC,CAAC,CAAC,QAAQ;CACtE,WAAW,SAAS,cAAc;EAAE,MAAM;EAAU,KAAK;CAAE,CAAC,CAAC,CAAC,QAAQ;AACxE,IACC,MAAM,CACL,YAAY,iDAAiD,CAAC,CAAC,GAC7D,EAAE,WACF,EAAE,SACF,EAAE,cACF,EAAE,SACF,EAAE,MACJ,GACA,MAAM,6BAA6B,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAChE,CACF"}
@@ -1,12 +1,11 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
- //#region src/schema/build-component.d.ts
4
3
  /** Narrow `build_components` table definition: one row per component of a published build. */
5
- declare const buildComponents: import("drizzle-orm/mysql-core").MySqlTableWithColumns<{
4
+ declare const buildComponents: import("drizzle-orm/mysql-core/table.js").MySqlTableWithColumns<{
6
5
  name: "build_components";
7
6
  schema: undefined;
8
7
  columns: {
9
- id: import("drizzle-orm/mysql-core").MySqlColumn<{
8
+ id: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
10
9
  name: "id";
11
10
  tableName: "build_components";
12
11
  dataType: "string";
@@ -23,7 +22,7 @@ declare const buildComponents: import("drizzle-orm/mysql-core").MySqlTableWithCo
23
22
  identity: undefined;
24
23
  generated: undefined;
25
24
  }, {}, {}>;
26
- projectId: import("drizzle-orm/mysql-core").MySqlColumn<{
25
+ projectId: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
27
26
  name: "project_id";
28
27
  tableName: "build_components";
29
28
  dataType: "string";
@@ -40,7 +39,7 @@ declare const buildComponents: import("drizzle-orm/mysql-core").MySqlTableWithCo
40
39
  identity: undefined;
41
40
  generated: undefined;
42
41
  }, {}, {}>;
43
- buildId: import("drizzle-orm/mysql-core").MySqlColumn<{
42
+ buildId: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
44
43
  name: "build_id";
45
44
  tableName: "build_components";
46
45
  dataType: "string";
@@ -57,7 +56,7 @@ declare const buildComponents: import("drizzle-orm/mysql-core").MySqlTableWithCo
57
56
  identity: undefined;
58
57
  generated: undefined;
59
58
  }, {}, {}>;
60
- importPath: import("drizzle-orm/mysql-core").MySqlColumn<{
59
+ importPath: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
61
60
  name: "import_path";
62
61
  tableName: "build_components";
63
62
  dataType: "string";
@@ -74,7 +73,7 @@ declare const buildComponents: import("drizzle-orm/mysql-core").MySqlTableWithCo
74
73
  identity: undefined;
75
74
  generated: undefined;
76
75
  }, {}, {}>;
77
- title: import("drizzle-orm/mysql-core").MySqlColumn<{
76
+ title: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
78
77
  name: "title";
79
78
  tableName: "build_components";
80
79
  dataType: "string";
@@ -91,7 +90,7 @@ declare const buildComponents: import("drizzle-orm/mysql-core").MySqlTableWithCo
91
90
  identity: undefined;
92
91
  generated: undefined;
93
92
  }, {}, {}>;
94
- storyCount: import("drizzle-orm/mysql-core").MySqlColumn<{
93
+ storyCount: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
95
94
  name: "story_count";
96
95
  tableName: "build_components";
97
96
  dataType: "number";
@@ -108,7 +107,7 @@ declare const buildComponents: import("drizzle-orm/mysql-core").MySqlTableWithCo
108
107
  identity: undefined;
109
108
  generated: undefined;
110
109
  }, {}, {}>;
111
- hash: import("drizzle-orm/mysql-core").MySqlColumn<{
110
+ hash: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
112
111
  name: "hash";
113
112
  tableName: "build_components";
114
113
  dataType: "string";
@@ -125,7 +124,7 @@ declare const buildComponents: import("drizzle-orm/mysql-core").MySqlTableWithCo
125
124
  identity: undefined;
126
125
  generated: undefined;
127
126
  }, {}, {}>;
128
- createdAt: import("drizzle-orm/mysql-core").MySqlColumn<{
127
+ createdAt: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
129
128
  name: "created_at";
130
129
  tableName: "build_components";
131
130
  dataType: "custom";
@@ -145,6 +144,5 @@ declare const buildComponents: import("drizzle-orm/mysql-core").MySqlTableWithCo
145
144
  };
146
145
  dialect: 'mysql';
147
146
  }>;
148
- //#endregion
149
147
  export { buildComponents };
150
148
  //# sourceMappingURL=build-component.d.mts.map
@@ -5,7 +5,7 @@ import { datetime } from "./datetime.mjs";
5
5
  import { projects } from "./project.mjs";
6
6
  import { builds } from "./build.mjs";
7
7
  import { index, int, mysqlTable, text } from "drizzle-orm/mysql-core";
8
- //#region src/schema/build-component.ts
8
+ // src/schema/build-component.ts
9
9
  /** Narrow `build_components` table definition: one row per component of a published build. */
10
10
  const buildComponents = mysqlTable("build_components", {
11
11
  id: text("id").primaryKey(),
@@ -20,7 +20,6 @@ const buildComponents = mysqlTable("build_components", {
20
20
  fsp: 3
21
21
  }).notNull()
22
22
  }, (table) => [index("build_components_build_id_idx").on(table.buildId), index("build_components_project_import_path_idx").on(table.projectId, table.importPath)]);
23
- //#endregion
24
23
  export { buildComponents };
25
24
 
26
25
  //# sourceMappingURL=build-component.mjs.map
@@ -1,12 +1,11 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
- //#region src/schema/build-review.d.ts
4
3
  /** Narrow `build_reviews` table definition: one verdict of one reviewer on one build. */
5
- declare const buildReviews: import("drizzle-orm/mysql-core").MySqlTableWithColumns<{
4
+ declare const buildReviews: import("drizzle-orm/mysql-core/table.js").MySqlTableWithColumns<{
6
5
  name: "build_reviews";
7
6
  schema: undefined;
8
7
  columns: {
9
- id: import("drizzle-orm/mysql-core").MySqlColumn<{
8
+ id: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
10
9
  name: "id";
11
10
  tableName: "build_reviews";
12
11
  dataType: "string";
@@ -23,7 +22,7 @@ declare const buildReviews: import("drizzle-orm/mysql-core").MySqlTableWithColum
23
22
  identity: undefined;
24
23
  generated: undefined;
25
24
  }, {}, {}>;
26
- buildId: import("drizzle-orm/mysql-core").MySqlColumn<{
25
+ buildId: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
27
26
  name: "build_id";
28
27
  tableName: "build_reviews";
29
28
  dataType: "string";
@@ -40,7 +39,7 @@ declare const buildReviews: import("drizzle-orm/mysql-core").MySqlTableWithColum
40
39
  identity: undefined;
41
40
  generated: undefined;
42
41
  }, {}, {}>;
43
- userId: import("drizzle-orm/mysql-core").MySqlColumn<{
42
+ userId: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
44
43
  name: "user_id";
45
44
  tableName: "build_reviews";
46
45
  dataType: "string";
@@ -57,7 +56,7 @@ declare const buildReviews: import("drizzle-orm/mysql-core").MySqlTableWithColum
57
56
  identity: undefined;
58
57
  generated: undefined;
59
58
  }, {}, {}>;
60
- verdict: import("drizzle-orm/mysql-core").MySqlColumn<{
59
+ verdict: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
61
60
  name: "verdict";
62
61
  tableName: "build_reviews";
63
62
  dataType: "string";
@@ -76,7 +75,7 @@ declare const buildReviews: import("drizzle-orm/mysql-core").MySqlTableWithColum
76
75
  }, {}, {
77
76
  $type: "approved" | "rejected";
78
77
  }>;
79
- body: import("drizzle-orm/mysql-core").MySqlColumn<{
78
+ body: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
80
79
  name: "body";
81
80
  tableName: "build_reviews";
82
81
  dataType: "string";
@@ -93,7 +92,7 @@ declare const buildReviews: import("drizzle-orm/mysql-core").MySqlTableWithColum
93
92
  identity: undefined;
94
93
  generated: undefined;
95
94
  }, {}, {}>;
96
- createdAt: import("drizzle-orm/mysql-core").MySqlColumn<{
95
+ createdAt: import("drizzle-orm/mysql-core/index.js").MySqlColumn<{
97
96
  name: "created_at";
98
97
  tableName: "build_reviews";
99
98
  dataType: "custom";
@@ -113,6 +112,5 @@ declare const buildReviews: import("drizzle-orm/mysql-core").MySqlTableWithColum
113
112
  };
114
113
  dialect: 'mysql';
115
114
  }>;
116
- //#endregion
117
115
  export { buildReviews };
118
116
  //# sourceMappingURL=build-review.d.mts.map
@@ -5,7 +5,7 @@ import { datetime } from "./datetime.mjs";
5
5
  import { builds } from "./build.mjs";
6
6
  import { users } from "./user.mjs";
7
7
  import { index, mysqlTable, text } from "drizzle-orm/mysql-core";
8
- //#region src/schema/build-review.ts
8
+ // src/schema/build-review.ts
9
9
  /** Narrow `build_reviews` table definition: one verdict of one reviewer on one build. */
10
10
  const buildReviews = mysqlTable("build_reviews", {
11
11
  id: text("id").primaryKey(),
@@ -18,7 +18,6 @@ const buildReviews = mysqlTable("build_reviews", {
18
18
  fsp: 3
19
19
  }).notNull()
20
20
  }, (table) => [index("build_reviews_build_id_idx").on(table.buildId)]);
21
- //#endregion
22
21
  export { buildReviews };
23
22
 
24
23
  //# sourceMappingURL=build-review.mjs.map