supaschema 0.1.0-rc.1
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/.agents/skills/supaschema/SKILL.md +61 -0
- package/.claude/hooks/block-generated-migration-edits.mjs +32 -0
- package/.claude/rules/supaschema.md +22 -0
- package/.claude/settings.json +16 -0
- package/.claude/skills/supaschema/SKILL.md +61 -0
- package/.codex/hooks/supaschema-tool-gate.mjs +73 -0
- package/.codex/hooks.json +16 -0
- package/.codex/rules/supaschema.rules +22 -0
- package/AGENTS.md +40 -0
- package/LICENSE +661 -0
- package/LICENSE-COMMERCIAL.md +35 -0
- package/README.md +249 -0
- package/benchmarks/README.md +104 -0
- package/benchmarks/compare.js +489 -0
- package/benchmarks/fixtures/additive/from.sql +8 -0
- package/benchmarks/fixtures/additive/manifest.json +1 -0
- package/benchmarks/fixtures/additive/to.sql +9 -0
- package/benchmarks/fixtures/functions-policies/from.sql +24 -0
- package/benchmarks/fixtures/functions-policies/manifest.json +5 -0
- package/benchmarks/fixtures/functions-policies/to.sql +24 -0
- package/benchmarks/plot-lib.js +234 -0
- package/benchmarks/plot-svg.js +339 -0
- package/benchmarks/plot.js +154 -0
- package/benchmarks/tools/bench-all.sh +49 -0
- package/benchmarks/tools/build-project-fixture.mjs +245 -0
- package/benchmarks/tools/compare-db.mjs +101 -0
- package/benchmarks/tools/compare-fixtures.mjs +84 -0
- package/benchmarks/tools/compare-report.mjs +90 -0
- package/benchmarks/tools/compare-supabase.mjs +67 -0
- package/benchmarks/tools/registry.js +266 -0
- package/benchmarks/tools/run-workflow.mjs +77 -0
- package/bin/postinstall.mjs +26 -0
- package/bin/supaschema +2 -0
- package/config-schema.json +208 -0
- package/corpus/supabase-style/corpus.json +6 -0
- package/corpus/supabase-style/migrations/20260101000000_init.sql +28 -0
- package/corpus/supabase-style/migrations/20260102000000_noise.sql +13 -0
- package/corpus/supabase-style/migrations/20260103000000_churn.sql +4 -0
- package/corpus/supabase-style/migrations/20260104000000_triggers.sql +17 -0
- package/corpus/supabase-style/roles.sql +13 -0
- package/corpus/supabase-style/tree/functions.sql +26 -0
- package/corpus/supabase-style/tree/policies.sql +4 -0
- package/corpus/supabase-style/tree/schema.sql +4 -0
- package/corpus/supabase-style/tree/tables.sql +20 -0
- package/corpus/supabase-style/tree/triggers.sql +3 -0
- package/corpus/supabase-style/tree/types.sql +2 -0
- package/corpus/supabase-style/tree/views.sql +6 -0
- package/dist/audit.d.ts +20 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +68 -0
- package/dist/benchmark-db.d.ts +5 -0
- package/dist/benchmark-db.d.ts.map +1 -0
- package/dist/benchmark-db.js +71 -0
- package/dist/benchmark-fixtures.d.ts +10 -0
- package/dist/benchmark-fixtures.d.ts.map +1 -0
- package/dist/benchmark-fixtures.js +201 -0
- package/dist/benchmark.d.ts +2 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +308 -0
- package/dist/catalog-comments.d.ts +9 -0
- package/dist/catalog-comments.d.ts.map +1 -0
- package/dist/catalog-comments.js +194 -0
- package/dist/catalog-extras.d.ts +12 -0
- package/dist/catalog-extras.d.ts.map +1 -0
- package/dist/catalog-extras.js +408 -0
- package/dist/catalog-foreign.d.ts +15 -0
- package/dist/catalog-foreign.d.ts.map +1 -0
- package/dist/catalog-foreign.js +114 -0
- package/dist/catalog-tables.d.ts +9 -0
- package/dist/catalog-tables.d.ts.map +1 -0
- package/dist/catalog-tables.js +114 -0
- package/dist/catalog.d.ts +8 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +351 -0
- package/dist/check-hazards.d.ts +7 -0
- package/dist/check-hazards.d.ts.map +1 -0
- package/dist/check-hazards.js +83 -0
- package/dist/check-reporters.d.ts +8 -0
- package/dist/check-reporters.d.ts.map +1 -0
- package/dist/check-reporters.js +76 -0
- package/dist/check.d.ts +3 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +229 -0
- package/dist/cli-defaults.d.ts +24 -0
- package/dist/cli-defaults.d.ts.map +1 -0
- package/dist/cli-defaults.js +65 -0
- package/dist/cli-diff.d.ts +13 -0
- package/dist/cli-diff.d.ts.map +1 -0
- package/dist/cli-diff.js +348 -0
- package/dist/cli-reports.d.ts +9 -0
- package/dist/cli-reports.d.ts.map +1 -0
- package/dist/cli-reports.js +90 -0
- package/dist/cli-tools.d.ts +17 -0
- package/dist/cli-tools.d.ts.map +1 -0
- package/dist/cli-tools.js +136 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +239 -0
- package/dist/config-schema-gen.d.ts +2 -0
- package/dist/config-schema-gen.d.ts.map +1 -0
- package/dist/config-schema-gen.js +11 -0
- package/dist/config.d.ts +58 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +132 -0
- package/dist/core.d.ts +115 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +1 -0
- package/dist/corpus.d.ts +26 -0
- package/dist/corpus.d.ts.map +1 -0
- package/dist/corpus.js +112 -0
- package/dist/database-url.d.ts +8 -0
- package/dist/database-url.d.ts.map +1 -0
- package/dist/database-url.js +74 -0
- package/dist/db-admin.d.ts +23 -0
- package/dist/db-admin.d.ts.map +1 -0
- package/dist/db-admin.js +147 -0
- package/dist/diagnostics.d.ts +16 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +155 -0
- package/dist/diff-score.d.ts +12 -0
- package/dist/diff-score.d.ts.map +1 -0
- package/dist/diff-score.js +339 -0
- package/dist/doctor.d.ts +17 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +110 -0
- package/dist/hash.d.ts +7 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +34 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/lineage.d.ts +23 -0
- package/dist/lineage.d.ts.map +1 -0
- package/dist/lineage.js +61 -0
- package/dist/migrations-status.d.ts +35 -0
- package/dist/migrations-status.d.ts.map +1 -0
- package/dist/migrations-status.js +131 -0
- package/dist/plan-order.d.ts +4 -0
- package/dist/plan-order.d.ts.map +1 -0
- package/dist/plan-order.js +178 -0
- package/dist/planner-replace.d.ts +4 -0
- package/dist/planner-replace.d.ts.map +1 -0
- package/dist/planner-replace.js +76 -0
- package/dist/planner-table.d.ts +3 -0
- package/dist/planner-table.d.ts.map +1 -0
- package/dist/planner-table.js +165 -0
- package/dist/planner.d.ts +5 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +385 -0
- package/dist/render-guards.d.ts +12 -0
- package/dist/render-guards.d.ts.map +1 -0
- package/dist/render-guards.js +159 -0
- package/dist/render.d.ts +7 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +325 -0
- package/dist/selfcheck.d.ts +11 -0
- package/dist/selfcheck.d.ts.map +1 -0
- package/dist/selfcheck.js +43 -0
- package/dist/source-normalize.d.ts +14 -0
- package/dist/source-normalize.d.ts.map +1 -0
- package/dist/source-normalize.js +420 -0
- package/dist/source.d.ts +4 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +233 -0
- package/dist/sql/ast.d.ts +42 -0
- package/dist/sql/ast.d.ts.map +1 -0
- package/dist/sql/ast.js +241 -0
- package/dist/sql/canonical-nodes.d.ts +5 -0
- package/dist/sql/canonical-nodes.d.ts.map +1 -0
- package/dist/sql/canonical-nodes.js +101 -0
- package/dist/sql/extract-helpers.d.ts +18 -0
- package/dist/sql/extract-helpers.d.ts.map +1 -0
- package/dist/sql/extract-helpers.js +127 -0
- package/dist/sql/extract.d.ts +13 -0
- package/dist/sql/extract.d.ts.map +1 -0
- package/dist/sql/extract.js +323 -0
- package/dist/sql/facts.d.ts +34 -0
- package/dist/sql/facts.d.ts.map +1 -0
- package/dist/sql/facts.js +392 -0
- package/dist/sql/identifiers.d.ts +13 -0
- package/dist/sql/identifiers.d.ts.map +1 -0
- package/dist/sql/identifiers.js +83 -0
- package/dist/sql/normalize-deparse.d.ts +25 -0
- package/dist/sql/normalize-deparse.d.ts.map +1 -0
- package/dist/sql/normalize-deparse.js +96 -0
- package/dist/sql/object-hash.d.ts +5 -0
- package/dist/sql/object-hash.d.ts.map +1 -0
- package/dist/sql/object-hash.js +24 -0
- package/dist/sql/parser.d.ts +8 -0
- package/dist/sql/parser.d.ts.map +1 -0
- package/dist/sql/parser.js +89 -0
- package/dist/sql/privileges.d.ts +33 -0
- package/dist/sql/privileges.d.ts.map +1 -0
- package/dist/sql/privileges.js +379 -0
- package/dist/sql/split.d.ts +3 -0
- package/dist/sql/split.d.ts.map +1 -0
- package/dist/sql/split.js +182 -0
- package/dist/sql/statements.d.ts +17 -0
- package/dist/sql/statements.d.ts.map +1 -0
- package/dist/sql/statements.js +284 -0
- package/dist/sql/table-constraints.d.ts +15 -0
- package/dist/sql/table-constraints.d.ts.map +1 -0
- package/dist/sql/table-constraints.js +304 -0
- package/dist/sql/table-shape.d.ts +38 -0
- package/dist/sql/table-shape.d.ts.map +1 -0
- package/dist/sql/table-shape.js +287 -0
- package/dist/sync.d.ts +27 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +86 -0
- package/dist/typegen-model.d.ts +78 -0
- package/dist/typegen-model.d.ts.map +1 -0
- package/dist/typegen-model.js +338 -0
- package/dist/typegen-views.d.ts +7 -0
- package/dist/typegen-views.d.ts.map +1 -0
- package/dist/typegen-views.js +92 -0
- package/dist/typegen-zod.d.ts +3 -0
- package/dist/typegen-zod.d.ts.map +1 -0
- package/dist/typegen-zod.js +149 -0
- package/dist/typegen.d.ts +4 -0
- package/dist/typegen.d.ts.map +1 -0
- package/dist/typegen.js +184 -0
- package/dist/validators.d.ts +3 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +104 -0
- package/dist/verify-environment.d.ts +5 -0
- package/dist/verify-environment.d.ts.map +1 -0
- package/dist/verify-environment.js +92 -0
- package/dist/verify.d.ts +3 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +261 -0
- package/docs/benchmarks/additive-correctness.svg +86 -0
- package/docs/benchmarks/additive-latency.svg +60 -0
- package/docs/benchmarks/functions-policies-correctness.svg +86 -0
- package/docs/benchmarks/functions-policies-latency.svg +60 -0
- package/docs/benchmarks/realistic-correctness.svg +86 -0
- package/docs/benchmarks/realistic-latency.svg +60 -0
- package/docs/benchmarks/scaling-latency.svg +106 -0
- package/docs/benchmarks/workflow-latency.svg +98 -0
- package/docs/benchmarks/xl-correctness.svg +86 -0
- package/docs/benchmarks/xl-latency.svg +60 -0
- package/docs/benchmarks/xxl-correctness.svg +86 -0
- package/docs/benchmarks/xxl-latency.svg +66 -0
- package/docs/case-study-anilize.md +51 -0
- package/docs/ci-gate.md +44 -0
- package/docs/ci.md +68 -0
- package/docs/commands.md +35 -0
- package/docs/config.md +72 -0
- package/docs/corpus.md +33 -0
- package/docs/diagnostics.md +77 -0
- package/docs/hints.md +92 -0
- package/docs/release.md +19 -0
- package/docs/support-matrix.md +57 -0
- package/examples/postgres/schemas/001_app.sql +17 -0
- package/examples/supabase/schemas/001_app.sql +13 -0
- package/examples/supabase/schemas-next/001_app.sql +21 -0
- package/examples/supabase/supaschema.config.json +15 -0
- package/package.json +99 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="410" viewBox="0 0 1200 410" role="img">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="supaGradient" x1="0" y1="0" x2="1" y2="0">
|
|
4
|
+
<stop offset="0%" stop-color="#059669" />
|
|
5
|
+
<stop offset="100%" stop-color="#34d399" />
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="slateGradient" x1="0" y1="0" x2="1" y2="0">
|
|
8
|
+
<stop offset="0%" stop-color="#3b4757" />
|
|
9
|
+
<stop offset="100%" stop-color="#526079" />
|
|
10
|
+
</linearGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect width="100%" height="100%" rx="14" fill="#0b1220" />
|
|
13
|
+
<text x="36.0" y="46.0" fill="#f8fafc" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="21" font-weight="700">Diff latency — functions-policies fixture (1 table)</text>
|
|
14
|
+
<text x="36.0" y="70.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12.5" font-weight="400">Median seconds per diff, log scale · whisker marks p95 · lower is better</text>
|
|
15
|
+
<line x1="300.0" y1="94" x2="300.0" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
16
|
+
<text x="300.0" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">0.10s</text>
|
|
17
|
+
<line x1="399.3" y1="94" x2="399.3" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
18
|
+
<text x="399.3" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">0.20s</text>
|
|
19
|
+
<line x1="530.7" y1="94" x2="530.7" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
20
|
+
<text x="530.7" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">0.50s</text>
|
|
21
|
+
<line x1="630.0" y1="94" x2="630.0" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
22
|
+
<text x="630.0" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">1.00s</text>
|
|
23
|
+
<line x1="729.3" y1="94" x2="729.3" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
24
|
+
<text x="729.3" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">2.00s</text>
|
|
25
|
+
<line x1="860.7" y1="94" x2="860.7" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
26
|
+
<text x="860.7" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">5.00s</text>
|
|
27
|
+
<line x1="960.0" y1="94" x2="960.0" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
28
|
+
<text x="960.0" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">10.0s</text>
|
|
29
|
+
<circle cx="41" cy="117" r="4" fill="#34d399" />
|
|
30
|
+
<text x="54.0" y="121.0" fill="#f8fafc" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="650">supaschema-file</text>
|
|
31
|
+
<rect x="300" y="108" width="107.7" height="18" rx="4" fill="url(#supaGradient)" />
|
|
32
|
+
<line x1="446.0" y1="105" x2="446.0" y2="129" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
33
|
+
<text x="1164.0" y="121.0" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="650" text-anchor="end">0.21s · p95 0.28s</text>
|
|
34
|
+
<circle cx="41" cy="151" r="4" fill="#34d399" />
|
|
35
|
+
<text x="54.0" y="155.0" fill="#f8fafc" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="650">supaschema-db</text>
|
|
36
|
+
<rect x="300" y="142" width="140.2" height="18" rx="4" fill="url(#supaGradient)" />
|
|
37
|
+
<line x1="545.1" y1="139" x2="545.1" y2="163" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
38
|
+
<text x="1164.0" y="155.0" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="650" text-anchor="end">0.27s · p95 0.55s</text>
|
|
39
|
+
<text x="54.0" y="189.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-pg-schema</text>
|
|
40
|
+
<rect x="300" y="176" width="529.8" height="18" rx="4" fill="url(#slateGradient)" />
|
|
41
|
+
<line x1="841.7" y1="173" x2="841.7" y2="197" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
42
|
+
<text x="1164.0" y="189.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450" text-anchor="end">4.03s · p95 4.38s</text>
|
|
43
|
+
<text x="54.0" y="223.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-pg-delta</text>
|
|
44
|
+
<rect x="300" y="210" width="530.3" height="18" rx="4" fill="url(#slateGradient)" />
|
|
45
|
+
<line x1="875.3" y1="207" x2="875.3" y2="231" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
46
|
+
<text x="1164.0" y="223.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450" text-anchor="end">4.05s · p95 5.54s</text>
|
|
47
|
+
<text x="54.0" y="257.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-migra</text>
|
|
48
|
+
<rect x="300" y="244" width="533.1" height="18" rx="4" fill="url(#slateGradient)" />
|
|
49
|
+
<line x1="839.9" y1="241" x2="839.9" y2="265" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
50
|
+
<text x="1164.0" y="257.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450" text-anchor="end">4.13s · p95 4.33s</text>
|
|
51
|
+
<text x="54.0" y="291.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-pgadmin</text>
|
|
52
|
+
<rect x="300" y="278" width="548.0" height="18" rx="4" fill="url(#slateGradient)" />
|
|
53
|
+
<line x1="862.7" y1="275" x2="862.7" y2="299" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
54
|
+
<text x="1164.0" y="291.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450" text-anchor="end">4.58s · p95 5.07s</text>
|
|
55
|
+
<text x="54.0" y="325.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-default</text>
|
|
56
|
+
<rect x="300" y="312" width="552.1" height="18" rx="4" fill="url(#slateGradient)" />
|
|
57
|
+
<line x1="855.8" y1="309" x2="855.8" y2="333" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
58
|
+
<text x="1164.0" y="325.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450" text-anchor="end">4.71s · p95 4.83s</text>
|
|
59
|
+
<text x="36.0" y="388.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400">supaschema 0.1.0 · Supabase CLI 2.106.0 · Node v24.14.0 · Apple Silicon · 3 iterations</text>
|
|
60
|
+
</svg>
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="454" viewBox="0 0 1200 454" role="img">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="supaGradient" x1="0" y1="0" x2="1" y2="0">
|
|
4
|
+
<stop offset="0%" stop-color="#059669" />
|
|
5
|
+
<stop offset="100%" stop-color="#34d399" />
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="slateGradient" x1="0" y1="0" x2="1" y2="0">
|
|
8
|
+
<stop offset="0%" stop-color="#3b4757" />
|
|
9
|
+
<stop offset="100%" stop-color="#526079" />
|
|
10
|
+
</linearGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect width="100%" height="100%" rx="14" fill="#0b1220" />
|
|
13
|
+
<text x="36.0" y="46.0" fill="#f8fafc" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="21" font-weight="700">Verification & accuracy — realistic fixture (50 tables)</text>
|
|
14
|
+
<text x="36.0" y="70.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12.5" font-weight="400">Each generated migration is applied in one transaction, applied again, and the catalog is fingerprinted against the target.</text>
|
|
15
|
+
<text x="36.0" y="88.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12.5" font-weight="400">Output F1 scores generated SQL content against the fixture's ground-truth change manifest (1.000 = exact).</text>
|
|
16
|
+
<text x="490.0" y="116.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">applies once</text>
|
|
17
|
+
<text x="670.0" y="116.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">applies twice</text>
|
|
18
|
+
<text x="850.0" y="116.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">matches target</text>
|
|
19
|
+
<text x="1045.0" y="116.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">output F1</text>
|
|
20
|
+
<circle cx="41" cy="143" r="4" fill="#34d399" />
|
|
21
|
+
<text x="54.0" y="147.0" fill="#f8fafc" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="650">supaschema-db</text>
|
|
22
|
+
<rect x="430" y="132" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
23
|
+
<text x="490.0" y="147.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
24
|
+
<rect x="610" y="132" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
25
|
+
<text x="670.0" y="147.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
26
|
+
<rect x="790" y="132" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
27
|
+
<text x="850.0" y="147.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
28
|
+
<rect x="985" y="132" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
29
|
+
<text x="1045.0" y="147.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">1.000</text>
|
|
30
|
+
<circle cx="41" cy="181" r="4" fill="#34d399" />
|
|
31
|
+
<text x="54.0" y="185.0" fill="#f8fafc" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="650">supaschema-file</text>
|
|
32
|
+
<rect x="430" y="170" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
33
|
+
<text x="490.0" y="185.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
34
|
+
<rect x="610" y="170" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
35
|
+
<text x="670.0" y="185.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
36
|
+
<rect x="790" y="170" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
37
|
+
<text x="850.0" y="185.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
38
|
+
<rect x="985" y="170" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
39
|
+
<text x="1045.0" y="185.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">1.000</text>
|
|
40
|
+
<text x="54.0" y="223.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-default</text>
|
|
41
|
+
<rect x="430" y="208" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
42
|
+
<text x="490.0" y="223.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
43
|
+
<rect x="610" y="208" width="120" height="23" rx="11.5" fill="rgba(239,68,68,0.12)" stroke="#ef4444" stroke-opacity="0.55" />
|
|
44
|
+
<text x="670.0" y="223.5" fill="#f87171" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✗ 0/3</text>
|
|
45
|
+
<rect x="790" y="208" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
46
|
+
<text x="850.0" y="223.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
47
|
+
<rect x="985" y="208" width="120" height="23" rx="11.5" fill="rgba(251,191,36,0.12)" stroke="#fbbf24" stroke-opacity="0.55" />
|
|
48
|
+
<text x="1045.0" y="223.5" fill="#fbbf24" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">0.982</text>
|
|
49
|
+
<text x="54.0" y="261.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-migra</text>
|
|
50
|
+
<rect x="430" y="246" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
51
|
+
<text x="490.0" y="261.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
52
|
+
<rect x="610" y="246" width="120" height="23" rx="11.5" fill="rgba(239,68,68,0.12)" stroke="#ef4444" stroke-opacity="0.55" />
|
|
53
|
+
<text x="670.0" y="261.5" fill="#f87171" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✗ 0/3</text>
|
|
54
|
+
<rect x="790" y="246" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
55
|
+
<text x="850.0" y="261.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
56
|
+
<rect x="985" y="246" width="120" height="23" rx="11.5" fill="rgba(251,191,36,0.12)" stroke="#fbbf24" stroke-opacity="0.55" />
|
|
57
|
+
<text x="1045.0" y="261.5" fill="#fbbf24" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">0.982</text>
|
|
58
|
+
<text x="54.0" y="299.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-pg-delta</text>
|
|
59
|
+
<rect x="430" y="284" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
60
|
+
<text x="490.0" y="299.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
61
|
+
<rect x="610" y="284" width="120" height="23" rx="11.5" fill="rgba(239,68,68,0.12)" stroke="#ef4444" stroke-opacity="0.55" />
|
|
62
|
+
<text x="670.0" y="299.5" fill="#f87171" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✗ 0/3</text>
|
|
63
|
+
<rect x="790" y="284" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
64
|
+
<text x="850.0" y="299.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
65
|
+
<rect x="985" y="284" width="120" height="23" rx="11.5" fill="rgba(251,191,36,0.12)" stroke="#fbbf24" stroke-opacity="0.55" />
|
|
66
|
+
<text x="1045.0" y="299.5" fill="#fbbf24" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">0.982</text>
|
|
67
|
+
<text x="54.0" y="337.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-pg-schema</text>
|
|
68
|
+
<rect x="430" y="322" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
69
|
+
<text x="490.0" y="337.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
70
|
+
<rect x="610" y="322" width="120" height="23" rx="11.5" fill="rgba(239,68,68,0.12)" stroke="#ef4444" stroke-opacity="0.55" />
|
|
71
|
+
<text x="670.0" y="337.5" fill="#f87171" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✗ 0/3</text>
|
|
72
|
+
<rect x="790" y="322" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
73
|
+
<text x="850.0" y="337.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
74
|
+
<rect x="985" y="322" width="120" height="23" rx="11.5" fill="rgba(251,191,36,0.12)" stroke="#fbbf24" stroke-opacity="0.55" />
|
|
75
|
+
<text x="1045.0" y="337.5" fill="#fbbf24" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">0.982</text>
|
|
76
|
+
<text x="54.0" y="375.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-pgadmin</text>
|
|
77
|
+
<rect x="430" y="360" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
78
|
+
<text x="490.0" y="375.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
79
|
+
<rect x="610" y="360" width="120" height="23" rx="11.5" fill="rgba(239,68,68,0.12)" stroke="#ef4444" stroke-opacity="0.55" />
|
|
80
|
+
<text x="670.0" y="375.5" fill="#f87171" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✗ 0/3</text>
|
|
81
|
+
<rect x="790" y="360" width="120" height="23" rx="11.5" fill="rgba(16,185,129,0.14)" stroke="#10b981" stroke-opacity="0.55" />
|
|
82
|
+
<text x="850.0" y="375.5" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">✓ 3/3</text>
|
|
83
|
+
<rect x="985" y="360" width="120" height="23" rx="11.5" fill="rgba(251,191,36,0.12)" stroke="#fbbf24" stroke-opacity="0.55" />
|
|
84
|
+
<text x="1045.0" y="375.5" fill="#fbbf24" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11.5" font-weight="600" text-anchor="middle">0.982</text>
|
|
85
|
+
<text x="36.0" y="432.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400">supaschema 0.1.0 · Supabase CLI 2.106.0 · Node v24.14.0 · Apple Silicon · 3 iterations</text>
|
|
86
|
+
</svg>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="410" viewBox="0 0 1200 410" role="img">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="supaGradient" x1="0" y1="0" x2="1" y2="0">
|
|
4
|
+
<stop offset="0%" stop-color="#059669" />
|
|
5
|
+
<stop offset="100%" stop-color="#34d399" />
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="slateGradient" x1="0" y1="0" x2="1" y2="0">
|
|
8
|
+
<stop offset="0%" stop-color="#3b4757" />
|
|
9
|
+
<stop offset="100%" stop-color="#526079" />
|
|
10
|
+
</linearGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect width="100%" height="100%" rx="14" fill="#0b1220" />
|
|
13
|
+
<text x="36.0" y="46.0" fill="#f8fafc" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="21" font-weight="700">Diff latency — realistic fixture (50 tables)</text>
|
|
14
|
+
<text x="36.0" y="70.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12.5" font-weight="400">Median seconds per diff, log scale · whisker marks p95 · lower is better</text>
|
|
15
|
+
<line x1="300.0" y1="94" x2="300.0" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
16
|
+
<text x="300.0" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">0.10s</text>
|
|
17
|
+
<line x1="399.3" y1="94" x2="399.3" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
18
|
+
<text x="399.3" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">0.20s</text>
|
|
19
|
+
<line x1="530.7" y1="94" x2="530.7" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
20
|
+
<text x="530.7" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">0.50s</text>
|
|
21
|
+
<line x1="630.0" y1="94" x2="630.0" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
22
|
+
<text x="630.0" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">1.00s</text>
|
|
23
|
+
<line x1="729.3" y1="94" x2="729.3" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
24
|
+
<text x="729.3" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">2.00s</text>
|
|
25
|
+
<line x1="860.7" y1="94" x2="860.7" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
26
|
+
<text x="860.7" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">5.00s</text>
|
|
27
|
+
<line x1="960.0" y1="94" x2="960.0" y2="336" stroke="#1e293b" stroke-width="1" />
|
|
28
|
+
<text x="960.0" y="358.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">10.0s</text>
|
|
29
|
+
<circle cx="41" cy="117" r="4" fill="#34d399" />
|
|
30
|
+
<text x="54.0" y="121.0" fill="#f8fafc" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="650">supaschema-db</text>
|
|
31
|
+
<rect x="300" y="108" width="124.3" height="18" rx="4" fill="url(#supaGradient)" />
|
|
32
|
+
<line x1="424.9" y1="105" x2="424.9" y2="129" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
33
|
+
<text x="1164.0" y="121.0" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="650" text-anchor="end">0.24s · p95 0.24s</text>
|
|
34
|
+
<circle cx="41" cy="151" r="4" fill="#34d399" />
|
|
35
|
+
<text x="54.0" y="155.0" fill="#f8fafc" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="650">supaschema-file</text>
|
|
36
|
+
<rect x="300" y="142" width="129.6" height="18" rx="4" fill="url(#supaGradient)" />
|
|
37
|
+
<line x1="435.8" y1="139" x2="435.8" y2="163" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
38
|
+
<text x="1164.0" y="155.0" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="650" text-anchor="end">0.25s · p95 0.26s</text>
|
|
39
|
+
<text x="54.0" y="189.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-pgadmin</text>
|
|
40
|
+
<rect x="300" y="176" width="543.5" height="18" rx="4" fill="url(#slateGradient)" />
|
|
41
|
+
<line x1="867.2" y1="173" x2="867.2" y2="197" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
42
|
+
<text x="1164.0" y="189.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450" text-anchor="end">4.44s · p95 5.23s</text>
|
|
43
|
+
<text x="54.0" y="223.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-pg-schema</text>
|
|
44
|
+
<rect x="300" y="210" width="555.8" height="18" rx="4" fill="url(#slateGradient)" />
|
|
45
|
+
<line x1="863.6" y1="207" x2="863.6" y2="231" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
46
|
+
<text x="1164.0" y="223.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450" text-anchor="end">4.83s · p95 5.10s</text>
|
|
47
|
+
<text x="54.0" y="257.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-pg-delta</text>
|
|
48
|
+
<rect x="300" y="244" width="563.4" height="18" rx="4" fill="url(#slateGradient)" />
|
|
49
|
+
<line x1="874.8" y1="241" x2="874.8" y2="265" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
50
|
+
<text x="1164.0" y="257.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450" text-anchor="end">5.10s · p95 5.52s</text>
|
|
51
|
+
<text x="54.0" y="291.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-default</text>
|
|
52
|
+
<rect x="300" y="278" width="567.2" height="18" rx="4" fill="url(#slateGradient)" />
|
|
53
|
+
<line x1="868.4" y1="275" x2="868.4" y2="299" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
54
|
+
<text x="1164.0" y="291.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450" text-anchor="end">5.24s · p95 5.28s</text>
|
|
55
|
+
<text x="54.0" y="325.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="13" font-weight="450">supabase-migra</text>
|
|
56
|
+
<rect x="300" y="312" width="570.9" height="18" rx="4" fill="url(#slateGradient)" />
|
|
57
|
+
<line x1="893.2" y1="309" x2="893.2" y2="333" stroke="#f8fafc" stroke-opacity="0.55" stroke-width="2" />
|
|
58
|
+
<text x="1164.0" y="325.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450" text-anchor="end">5.37s · p95 6.27s</text>
|
|
59
|
+
<text x="36.0" y="388.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400">supaschema 0.1.0 · Supabase CLI 2.106.0 · Node v24.14.0 · Apple Silicon · 3 iterations</text>
|
|
60
|
+
</svg>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="560" viewBox="0 0 1200 560" role="img">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="supaGradient" x1="0" y1="0" x2="1" y2="0">
|
|
4
|
+
<stop offset="0%" stop-color="#059669" />
|
|
5
|
+
<stop offset="100%" stop-color="#34d399" />
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="slateGradient" x1="0" y1="0" x2="1" y2="0">
|
|
8
|
+
<stop offset="0%" stop-color="#3b4757" />
|
|
9
|
+
<stop offset="100%" stop-color="#526079" />
|
|
10
|
+
</linearGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect width="100%" height="100%" rx="14" fill="#0b1220" />
|
|
13
|
+
<text x="36.0" y="46.0" fill="#f8fafc" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="21" font-weight="700">Diff latency vs schema size</text>
|
|
14
|
+
<text x="36.0" y="70.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12.5" font-weight="400">Median seconds per diff at each fixture scale, log scale · lower is better</text>
|
|
15
|
+
<line x1="96" y1="474.0" x2="910" y2="474.0" stroke="#1e293b" stroke-width="1" />
|
|
16
|
+
<text x="84.0" y="478.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">0.10s</text>
|
|
17
|
+
<line x1="96" y1="447.1" x2="910" y2="447.1" stroke="#1e293b" stroke-width="1" />
|
|
18
|
+
<text x="84.0" y="451.1" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">0.20s</text>
|
|
19
|
+
<line x1="96" y1="411.4" x2="910" y2="411.4" stroke="#1e293b" stroke-width="1" />
|
|
20
|
+
<text x="84.0" y="415.4" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">0.50s</text>
|
|
21
|
+
<line x1="96" y1="384.5" x2="910" y2="384.5" stroke="#1e293b" stroke-width="1" />
|
|
22
|
+
<text x="84.0" y="388.5" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">1.00s</text>
|
|
23
|
+
<line x1="96" y1="357.6" x2="910" y2="357.6" stroke="#1e293b" stroke-width="1" />
|
|
24
|
+
<text x="84.0" y="361.6" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">2.00s</text>
|
|
25
|
+
<line x1="96" y1="321.9" x2="910" y2="321.9" stroke="#1e293b" stroke-width="1" />
|
|
26
|
+
<text x="84.0" y="325.9" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">5.00s</text>
|
|
27
|
+
<line x1="96" y1="295.0" x2="910" y2="295.0" stroke="#1e293b" stroke-width="1" />
|
|
28
|
+
<text x="84.0" y="299.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">10.0s</text>
|
|
29
|
+
<line x1="96" y1="268.1" x2="910" y2="268.1" stroke="#1e293b" stroke-width="1" />
|
|
30
|
+
<text x="84.0" y="272.1" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">20.0s</text>
|
|
31
|
+
<line x1="96" y1="232.4" x2="910" y2="232.4" stroke="#1e293b" stroke-width="1" />
|
|
32
|
+
<text x="84.0" y="236.4" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">50.0s</text>
|
|
33
|
+
<line x1="96" y1="205.5" x2="910" y2="205.5" stroke="#1e293b" stroke-width="1" />
|
|
34
|
+
<text x="84.0" y="209.5" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">100s</text>
|
|
35
|
+
<line x1="96" y1="178.6" x2="910" y2="178.6" stroke="#1e293b" stroke-width="1" />
|
|
36
|
+
<text x="84.0" y="182.6" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">200s</text>
|
|
37
|
+
<line x1="96" y1="142.9" x2="910" y2="142.9" stroke="#1e293b" stroke-width="1" />
|
|
38
|
+
<text x="84.0" y="146.9" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">500s</text>
|
|
39
|
+
<line x1="96" y1="116.0" x2="910" y2="116.0" stroke="#1e293b" stroke-width="1" />
|
|
40
|
+
<text x="84.0" y="120.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">1000s</text>
|
|
41
|
+
<text x="96.0" y="500.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="550" text-anchor="middle">additive</text>
|
|
42
|
+
<text x="96.0" y="518.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">1 table</text>
|
|
43
|
+
<text x="299.5" y="500.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="550" text-anchor="middle">functions-policies</text>
|
|
44
|
+
<text x="299.5" y="518.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">1 table</text>
|
|
45
|
+
<text x="503.0" y="500.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="550" text-anchor="middle">realistic</text>
|
|
46
|
+
<text x="503.0" y="518.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">50 tables</text>
|
|
47
|
+
<text x="706.5" y="500.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="550" text-anchor="middle">xl</text>
|
|
48
|
+
<text x="706.5" y="518.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">1,000 tables</text>
|
|
49
|
+
<text x="910.0" y="500.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="550" text-anchor="middle">xxl</text>
|
|
50
|
+
<text x="910.0" y="518.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">2,500 tables</text>
|
|
51
|
+
<path d="M96.0,438.2 L299.5,436.0 L503.0,440.3 L706.5,364.7 L910.0,346.7" fill="none" stroke="#34d399" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" />
|
|
52
|
+
<circle cx="96.0" cy="438.2" r="4.5" fill="#34d399" />
|
|
53
|
+
<circle cx="299.5" cy="436.0" r="4.5" fill="#34d399" />
|
|
54
|
+
<circle cx="503.0" cy="440.3" r="4.5" fill="#34d399" />
|
|
55
|
+
<circle cx="706.5" cy="364.7" r="4.5" fill="#34d399" />
|
|
56
|
+
<circle cx="910.0" cy="346.7" r="4.5" fill="#34d399" />
|
|
57
|
+
<path d="M96.0,445.7 L299.5,444.8 L503.0,438.9 L706.5,371.3 L910.0,339.7" fill="none" stroke="#22d3ee" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" />
|
|
58
|
+
<circle cx="96.0" cy="445.7" r="4.5" fill="#22d3ee" />
|
|
59
|
+
<circle cx="299.5" cy="444.8" r="4.5" fill="#22d3ee" />
|
|
60
|
+
<circle cx="503.0" cy="438.9" r="4.5" fill="#22d3ee" />
|
|
61
|
+
<circle cx="706.5" cy="371.3" r="4.5" fill="#22d3ee" />
|
|
62
|
+
<circle cx="910.0" cy="339.7" r="4.5" fill="#22d3ee" />
|
|
63
|
+
<path d="M96.0,329.7 L299.5,324.3 L503.0,320.2 L706.5,238.3 L910.0,175.5" fill="none" stroke="#94a3b8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.75" />
|
|
64
|
+
<circle cx="96.0" cy="329.7" r="3.5" fill="#94a3b8" />
|
|
65
|
+
<circle cx="299.5" cy="324.3" r="3.5" fill="#94a3b8" />
|
|
66
|
+
<circle cx="503.0" cy="320.2" r="3.5" fill="#94a3b8" />
|
|
67
|
+
<circle cx="706.5" cy="238.3" r="3.5" fill="#94a3b8" />
|
|
68
|
+
<circle cx="910.0" cy="175.5" r="3.5" fill="#94a3b8" />
|
|
69
|
+
<path d="M96.0,330.3 L299.5,329.4 L503.0,319.2 L706.5,241.9 L910.0,177.2" fill="none" stroke="#7c8aa0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.75" />
|
|
70
|
+
<circle cx="96.0" cy="330.3" r="3.5" fill="#7c8aa0" />
|
|
71
|
+
<circle cx="299.5" cy="329.4" r="3.5" fill="#7c8aa0" />
|
|
72
|
+
<circle cx="503.0" cy="319.2" r="3.5" fill="#7c8aa0" />
|
|
73
|
+
<circle cx="706.5" cy="241.9" r="3.5" fill="#7c8aa0" />
|
|
74
|
+
<circle cx="910.0" cy="177.2" r="3.5" fill="#7c8aa0" />
|
|
75
|
+
<path d="M96.0,327.9 L299.5,330.2 L503.0,321.2 L706.5,240.2 L910.0,177.3" fill="none" stroke="#64748b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.75" />
|
|
76
|
+
<circle cx="96.0" cy="327.9" r="3.5" fill="#64748b" />
|
|
77
|
+
<circle cx="299.5" cy="330.2" r="3.5" fill="#64748b" />
|
|
78
|
+
<circle cx="503.0" cy="321.2" r="3.5" fill="#64748b" />
|
|
79
|
+
<circle cx="706.5" cy="240.2" r="3.5" fill="#64748b" />
|
|
80
|
+
<circle cx="910.0" cy="177.3" r="3.5" fill="#64748b" />
|
|
81
|
+
<path d="M96.0,325.7 L299.5,330.3 L503.0,323.3 L706.5,240.2 L910.0,175.4" fill="none" stroke="#8896ab" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.75" />
|
|
82
|
+
<circle cx="96.0" cy="325.7" r="3.5" fill="#8896ab" />
|
|
83
|
+
<circle cx="299.5" cy="330.3" r="3.5" fill="#8896ab" />
|
|
84
|
+
<circle cx="503.0" cy="323.3" r="3.5" fill="#8896ab" />
|
|
85
|
+
<circle cx="706.5" cy="240.2" r="3.5" fill="#8896ab" />
|
|
86
|
+
<circle cx="910.0" cy="175.4" r="3.5" fill="#8896ab" />
|
|
87
|
+
<path d="M96.0,329.9 L299.5,325.4 L503.0,326.6 L706.5,239.3 L910.0,176.4" fill="none" stroke="#566379" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.75" />
|
|
88
|
+
<circle cx="96.0" cy="329.9" r="3.5" fill="#566379" />
|
|
89
|
+
<circle cx="299.5" cy="325.4" r="3.5" fill="#566379" />
|
|
90
|
+
<circle cx="503.0" cy="326.6" r="3.5" fill="#566379" />
|
|
91
|
+
<circle cx="706.5" cy="239.3" r="3.5" fill="#566379" />
|
|
92
|
+
<circle cx="910.0" cy="176.4" r="3.5" fill="#566379" />
|
|
93
|
+
<text x="938.0" y="175.4" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450">supabase-pg-schema 217s</text>
|
|
94
|
+
<line x1="916" y1="175.5" x2="934" y2="189.4" stroke="#94a3b8" stroke-opacity="0.45" stroke-width="1" />
|
|
95
|
+
<text x="938.0" y="193.4" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450">supabase-default 216s</text>
|
|
96
|
+
<line x1="916" y1="176.4" x2="934" y2="207.4" stroke="#566379" stroke-opacity="0.45" stroke-width="1" />
|
|
97
|
+
<text x="938.0" y="211.4" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450">supabase-pgadmin 211s</text>
|
|
98
|
+
<line x1="916" y1="177.2" x2="934" y2="225.4" stroke="#7c8aa0" stroke-opacity="0.45" stroke-width="1" />
|
|
99
|
+
<text x="938.0" y="229.4" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450">supabase-migra 207s</text>
|
|
100
|
+
<line x1="916" y1="177.3" x2="934" y2="243.4" stroke="#64748b" stroke-opacity="0.45" stroke-width="1" />
|
|
101
|
+
<text x="938.0" y="247.4" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450">supabase-pg-delta 207s</text>
|
|
102
|
+
<text x="938.0" y="339.7" fill="#22d3ee" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="650">supaschema-file 3.17s</text>
|
|
103
|
+
<line x1="916" y1="346.7" x2="934" y2="353.7" stroke="#34d399" stroke-opacity="0.45" stroke-width="1" />
|
|
104
|
+
<text x="938.0" y="357.7" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="650">supaschema-db 2.64s</text>
|
|
105
|
+
<text x="36.0" y="538.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400">supaschema 0.1.0 · Supabase CLI 2.106.0 · Node v24.14.0 · Apple Silicon · 1–3 iterations per fixture</text>
|
|
106
|
+
</svg>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="560" viewBox="0 0 1200 560" role="img">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="supaGradient" x1="0" y1="0" x2="1" y2="0">
|
|
4
|
+
<stop offset="0%" stop-color="#059669" />
|
|
5
|
+
<stop offset="100%" stop-color="#34d399" />
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="slateGradient" x1="0" y1="0" x2="1" y2="0">
|
|
8
|
+
<stop offset="0%" stop-color="#3b4757" />
|
|
9
|
+
<stop offset="100%" stop-color="#526079" />
|
|
10
|
+
</linearGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect width="100%" height="100%" rx="14" fill="#0b1220" />
|
|
13
|
+
<text x="36.0" y="46.0" fill="#f8fafc" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="21" font-weight="700">Full workflow: migration + regenerated types</text>
|
|
14
|
+
<text x="36.0" y="70.0" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12.5" font-weight="400">supaschema: one diff = migration + TS types + Zod · Supabase engines: db diff + apply + gen types · log scale</text>
|
|
15
|
+
<line x1="96" y1="474.0" x2="910" y2="474.0" stroke="#1e293b" stroke-width="1" />
|
|
16
|
+
<text x="84.0" y="478.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">0.10s</text>
|
|
17
|
+
<line x1="96" y1="447.1" x2="910" y2="447.1" stroke="#1e293b" stroke-width="1" />
|
|
18
|
+
<text x="84.0" y="451.1" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">0.20s</text>
|
|
19
|
+
<line x1="96" y1="411.4" x2="910" y2="411.4" stroke="#1e293b" stroke-width="1" />
|
|
20
|
+
<text x="84.0" y="415.4" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">0.50s</text>
|
|
21
|
+
<line x1="96" y1="384.5" x2="910" y2="384.5" stroke="#1e293b" stroke-width="1" />
|
|
22
|
+
<text x="84.0" y="388.5" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">1.00s</text>
|
|
23
|
+
<line x1="96" y1="357.6" x2="910" y2="357.6" stroke="#1e293b" stroke-width="1" />
|
|
24
|
+
<text x="84.0" y="361.6" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">2.00s</text>
|
|
25
|
+
<line x1="96" y1="321.9" x2="910" y2="321.9" stroke="#1e293b" stroke-width="1" />
|
|
26
|
+
<text x="84.0" y="325.9" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">5.00s</text>
|
|
27
|
+
<line x1="96" y1="295.0" x2="910" y2="295.0" stroke="#1e293b" stroke-width="1" />
|
|
28
|
+
<text x="84.0" y="299.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">10.0s</text>
|
|
29
|
+
<line x1="96" y1="268.1" x2="910" y2="268.1" stroke="#1e293b" stroke-width="1" />
|
|
30
|
+
<text x="84.0" y="272.1" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">20.0s</text>
|
|
31
|
+
<line x1="96" y1="232.4" x2="910" y2="232.4" stroke="#1e293b" stroke-width="1" />
|
|
32
|
+
<text x="84.0" y="236.4" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">50.0s</text>
|
|
33
|
+
<line x1="96" y1="205.5" x2="910" y2="205.5" stroke="#1e293b" stroke-width="1" />
|
|
34
|
+
<text x="84.0" y="209.5" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">100s</text>
|
|
35
|
+
<line x1="96" y1="178.6" x2="910" y2="178.6" stroke="#1e293b" stroke-width="1" />
|
|
36
|
+
<text x="84.0" y="182.6" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">200s</text>
|
|
37
|
+
<line x1="96" y1="142.9" x2="910" y2="142.9" stroke="#1e293b" stroke-width="1" />
|
|
38
|
+
<text x="84.0" y="146.9" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">500s</text>
|
|
39
|
+
<line x1="96" y1="116.0" x2="910" y2="116.0" stroke="#1e293b" stroke-width="1" />
|
|
40
|
+
<text x="84.0" y="120.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="end">1000s</text>
|
|
41
|
+
<text x="96.0" y="500.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="550" text-anchor="middle">additive</text>
|
|
42
|
+
<text x="96.0" y="518.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">1 table</text>
|
|
43
|
+
<text x="299.5" y="500.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="550" text-anchor="middle">functions-policies</text>
|
|
44
|
+
<text x="299.5" y="518.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">1 table</text>
|
|
45
|
+
<text x="503.0" y="500.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="550" text-anchor="middle">realistic</text>
|
|
46
|
+
<text x="503.0" y="518.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">50 tables</text>
|
|
47
|
+
<text x="706.5" y="500.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="550" text-anchor="middle">xl</text>
|
|
48
|
+
<text x="706.5" y="518.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">1,000 tables</text>
|
|
49
|
+
<text x="910.0" y="500.0" fill="#e2e8f0" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="550" text-anchor="middle">xxl</text>
|
|
50
|
+
<text x="910.0" y="518.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400" text-anchor="middle">2,500 tables</text>
|
|
51
|
+
<path d="M96.0,439.3 L299.5,440.8 L503.0,436.3 L706.5,353.0 L910.0,320.3" fill="none" stroke="#34d399" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" />
|
|
52
|
+
<circle cx="96.0" cy="439.3" r="4.5" fill="#34d399" />
|
|
53
|
+
<circle cx="299.5" cy="440.8" r="4.5" fill="#34d399" />
|
|
54
|
+
<circle cx="503.0" cy="436.3" r="4.5" fill="#34d399" />
|
|
55
|
+
<circle cx="706.5" cy="353.0" r="4.5" fill="#34d399" />
|
|
56
|
+
<circle cx="910.0" cy="320.3" r="4.5" fill="#34d399" />
|
|
57
|
+
<path d="M96.0,313.8 L299.5,316.9 L503.0,309.8 L706.5,232.1 L910.0,174.7" fill="none" stroke="#94a3b8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.75" />
|
|
58
|
+
<circle cx="96.0" cy="313.8" r="3.5" fill="#94a3b8" />
|
|
59
|
+
<circle cx="299.5" cy="316.9" r="3.5" fill="#94a3b8" />
|
|
60
|
+
<circle cx="503.0" cy="309.8" r="3.5" fill="#94a3b8" />
|
|
61
|
+
<circle cx="706.5" cy="232.1" r="3.5" fill="#94a3b8" />
|
|
62
|
+
<circle cx="910.0" cy="174.7" r="3.5" fill="#94a3b8" />
|
|
63
|
+
<path d="M96.0,316.3 L299.5,316.7 L503.0,309.4 L706.5,236.7 L910.0,175.0" fill="none" stroke="#7c8aa0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.75" />
|
|
64
|
+
<circle cx="96.0" cy="316.3" r="3.5" fill="#7c8aa0" />
|
|
65
|
+
<circle cx="299.5" cy="316.7" r="3.5" fill="#7c8aa0" />
|
|
66
|
+
<circle cx="503.0" cy="309.4" r="3.5" fill="#7c8aa0" />
|
|
67
|
+
<circle cx="706.5" cy="236.7" r="3.5" fill="#7c8aa0" />
|
|
68
|
+
<circle cx="910.0" cy="175.0" r="3.5" fill="#7c8aa0" />
|
|
69
|
+
<path d="M96.0,313.4 L299.5,314.4 L503.0,312.5 L706.5,236.2 L910.0,173.4" fill="none" stroke="#64748b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.75" />
|
|
70
|
+
<circle cx="96.0" cy="313.4" r="3.5" fill="#64748b" />
|
|
71
|
+
<circle cx="299.5" cy="314.4" r="3.5" fill="#64748b" />
|
|
72
|
+
<circle cx="503.0" cy="312.5" r="3.5" fill="#64748b" />
|
|
73
|
+
<circle cx="706.5" cy="236.2" r="3.5" fill="#64748b" />
|
|
74
|
+
<circle cx="910.0" cy="173.4" r="3.5" fill="#64748b" />
|
|
75
|
+
<path d="M96.0,311.6 L299.5,313.8 L503.0,311.2 L706.5,236.1 L910.0,173.2" fill="none" stroke="#8896ab" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.75" />
|
|
76
|
+
<circle cx="96.0" cy="311.6" r="3.5" fill="#8896ab" />
|
|
77
|
+
<circle cx="299.5" cy="313.8" r="3.5" fill="#8896ab" />
|
|
78
|
+
<circle cx="503.0" cy="311.2" r="3.5" fill="#8896ab" />
|
|
79
|
+
<circle cx="706.5" cy="236.1" r="3.5" fill="#8896ab" />
|
|
80
|
+
<circle cx="910.0" cy="173.2" r="3.5" fill="#8896ab" />
|
|
81
|
+
<path d="M96.0,303.3 L299.5,315.2 L503.0,305.9 L706.5,234.7 L910.0,176.2" fill="none" stroke="#566379" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.75" />
|
|
82
|
+
<circle cx="96.0" cy="303.3" r="3.5" fill="#566379" />
|
|
83
|
+
<circle cx="299.5" cy="315.2" r="3.5" fill="#566379" />
|
|
84
|
+
<circle cx="503.0" cy="305.9" r="3.5" fill="#566379" />
|
|
85
|
+
<circle cx="706.5" cy="234.7" r="3.5" fill="#566379" />
|
|
86
|
+
<circle cx="910.0" cy="176.2" r="3.5" fill="#566379" />
|
|
87
|
+
<text x="938.0" y="173.2" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450">supabase-pg-schema-workflow 230s</text>
|
|
88
|
+
<line x1="916" y1="173.4" x2="934" y2="187.2" stroke="#64748b" stroke-opacity="0.45" stroke-width="1" />
|
|
89
|
+
<text x="938.0" y="191.2" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450">supabase-pg-delta-workflow 229s</text>
|
|
90
|
+
<line x1="916" y1="174.7" x2="934" y2="205.2" stroke="#94a3b8" stroke-opacity="0.45" stroke-width="1" />
|
|
91
|
+
<text x="938.0" y="209.2" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450">supabase-default-workflow 221s</text>
|
|
92
|
+
<line x1="916" y1="175.0" x2="934" y2="223.2" stroke="#7c8aa0" stroke-opacity="0.45" stroke-width="1" />
|
|
93
|
+
<text x="938.0" y="227.2" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450">supabase-migra-workflow 219s</text>
|
|
94
|
+
<line x1="916" y1="176.2" x2="934" y2="241.2" stroke="#566379" stroke-opacity="0.45" stroke-width="1" />
|
|
95
|
+
<text x="938.0" y="245.2" fill="#94a3b8" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="450">supabase-pgadmin-workflow 213s</text>
|
|
96
|
+
<text x="938.0" y="320.3" fill="#34d399" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="12" font-weight="650">supaschema-workflow 5.22s</text>
|
|
97
|
+
<text x="36.0" y="538.0" fill="#64748b" font-family="ui-sans-serif, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="11" font-weight="400">supaschema 0.1.0 · Supabase CLI 2.106.0 · Node v24.14.0 · Apple Silicon · 1–3 iterations per fixture</text>
|
|
98
|
+
</svg>
|