@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.
- package/dist/ddl.d.mts +1 -3
- package/dist/ddl.mjs +10 -3
- package/dist/ddl.mjs.map +1 -1
- package/dist/drizzle-factory-mysql.mjs +8 -7
- package/dist/drizzle-factory-mysql.mjs.map +1 -1
- package/dist/drizzle-factory.mjs +1 -2
- package/dist/foreign-keys.mjs +1 -2
- package/dist/index.d.mts +0 -2
- package/dist/index.mjs +2 -3
- package/dist/migrate.mjs +51 -3
- package/dist/migrate.mjs.map +1 -1
- package/dist/planetscale.d.mts +0 -2
- package/dist/planetscale.mjs +1 -2
- package/dist/schema/baseline.d.mts +32 -16
- package/dist/schema/baseline.mjs +2 -2
- package/dist/schema/baseline.mjs.map +1 -1
- package/dist/schema/build-component.d.mts +9 -11
- package/dist/schema/build-component.mjs +1 -2
- package/dist/schema/build-review.d.mts +7 -9
- package/dist/schema/build-review.mjs +1 -2
- package/dist/schema/build.d.mts +23 -25
- package/dist/schema/build.mjs +1 -2
- package/dist/schema/capture-attempt.d.mts +25 -27
- package/dist/schema/capture-attempt.mjs +1 -2
- package/dist/schema/capture-job.d.mts +19 -21
- package/dist/schema/capture-job.mjs +1 -2
- package/dist/schema/capture-shard.d.mts +15 -17
- package/dist/schema/capture-shard.mjs +1 -2
- package/dist/schema/comment.d.mts +12 -14
- package/dist/schema/comment.mjs +1 -2
- package/dist/schema/connection.d.mts +10 -12
- package/dist/schema/connection.mjs +1 -2
- package/dist/schema/content-refs.d.mts +5 -7
- package/dist/schema/content-refs.mjs +1 -2
- package/dist/schema/datetime.mjs +1 -2
- package/dist/schema/design.d.mts +33 -35
- package/dist/schema/design.mjs +1 -2
- package/dist/schema/insight.d.mts +36 -38
- package/dist/schema/insight.mjs +1 -2
- package/dist/schema/label.d.mts +15 -17
- package/dist/schema/label.mjs +1 -2
- package/dist/schema/member.d.mts +7 -9
- package/dist/schema/member.mjs +1 -2
- package/dist/schema/notification.d.mts +20 -22
- package/dist/schema/notification.mjs +1 -2
- package/dist/schema/project-group-mapping.d.mts +6 -8
- package/dist/schema/project-group-mapping.mjs +1 -2
- package/dist/schema/project.d.mts +25 -27
- package/dist/schema/project.mjs +1 -2
- package/dist/schema/site-setting.d.mts +6 -8
- package/dist/schema/site-setting.mjs +1 -2
- package/dist/schema/snapshot.d.mts +85 -33
- package/dist/schema/snapshot.mjs +4 -2
- package/dist/schema/snapshot.mjs.map +1 -1
- package/dist/schema/token.d.mts +8 -10
- package/dist/schema/token.mjs +1 -2
- package/dist/schema/usage.d.mts +15 -17
- package/dist/schema/usage.mjs +1 -2
- package/dist/schema/user-invite.d.mts +7 -9
- package/dist/schema/user-invite.mjs +1 -2
- package/dist/schema/user.d.mts +82 -10
- package/dist/schema/user.mjs +7 -4
- package/dist/schema/user.mjs.map +1 -1
- package/dist/schema/webhook.d.mts +8 -10
- package/dist/schema/webhook.mjs +1 -2
- package/dist/schema.d.mts +0 -2
- package/dist/schema.mjs +1 -2
- package/dist/tidb.d.mts +0 -2
- package/dist/tidb.mjs +1 -2
- package/package.json +4 -4
package/dist/migrate.mjs.map
CHANGED
|
@@ -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":"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"}
|
package/dist/planetscale.d.mts
CHANGED
|
@@ -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
|
package/dist/planetscale.mjs
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
package/dist/schema/baseline.mjs
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|