@wascartech/devbot 2.1.0 → 2.2.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/admin/settings-routes.js +2 -1
- package/dist/admin/settings-routes.js.map +1 -1
- package/dist/devcontainer.js +9 -0
- package/dist/devcontainer.js.map +1 -1
- package/dist/global-settings-store.js +11 -4
- package/dist/global-settings-store.js.map +1 -1
- package/dist/migrate.js +395 -30
- package/dist/migrate.js.map +1 -1
- package/dist/platform/gitealike/base.js +5 -0
- package/dist/platform/gitealike/base.js.map +1 -1
- package/dist/platform/github/index.js +5 -0
- package/dist/platform/github/index.js.map +1 -1
- package/dist/platform/gitlab/api.js +7 -1
- package/dist/platform/gitlab/api.js.map +1 -1
- package/dist/platform/gitlab/index.js +5 -0
- package/dist/platform/gitlab/index.js.map +1 -1
- package/dist/platform/gitlab/schemas.js +14 -0
- package/dist/platform/gitlab/schemas.js.map +1 -1
- package/dist/platform/port.js +1 -1
- package/dist/platform/port.js.map +1 -1
- package/dist/platform/types.js.map +1 -1
- package/dist/settings-store.js +28 -4
- package/dist/settings-store.js.map +1 -1
- package/dist/types/global-settings.js +6 -0
- package/dist/types/global-settings.js.map +1 -1
- package/dist/types/project-settings.js +1 -0
- package/dist/types/project-settings.js.map +1 -1
- package/dist/webhook.js +35 -4
- package/dist/webhook.js.map +1 -1
- package/migrations/0032_confidential_work_items.sql +11 -0
- package/package.json +3 -1
- package/public/assets/{DashboardSidebarCollapse-rIuzCmVm.js → DashboardSidebarCollapse-CWmehYha.js} +1 -1
- package/public/assets/{DashboardToolbar-DFCUqZ4Z.js → DashboardToolbar-DHcR2yAt.js} +1 -1
- package/public/assets/{ErrorLogModal.vue_vue_type_script_setup_true_lang-BCyNIf1E.js → ErrorLogModal.vue_vue_type_script_setup_true_lang-B0yvkhY5.js} +1 -1
- package/public/assets/{ErrorLogsPage-DyYK2Rop.js → ErrorLogsPage-ClPltTSr.js} +1 -1
- package/public/assets/{LogSlideover.vue_vue_type_script_setup_true_lang-33xie7TE.js → LogSlideover.vue_vue_type_script_setup_true_lang-F1i8DRzf.js} +1 -1
- package/public/assets/{OverviewPage-CFfa0uwg.js → OverviewPage-DWz8IJ46.js} +1 -1
- package/public/assets/{PageGrid-CBROIU87.js → PageGrid-DelloK5f.js} +1 -1
- package/public/assets/{PeriodRangePicker.vue_vue_type_script_setup_true_lang-DiFUNem7.js → PeriodRangePicker.vue_vue_type_script_setup_true_lang-YOwfelec.js} +1 -1
- package/public/assets/ProjectDetailPage-QEdo9Ytu.js +1 -0
- package/public/assets/{ProjectsPage-CFx8-elJ.js → ProjectsPage-BJzRIlvb.js} +1 -1
- package/public/assets/{RunDetailSlideover.vue_vue_type_script_setup_true_lang-DopYYmCT.js → RunDetailSlideover.vue_vue_type_script_setup_true_lang-BLDs3UaU.js} +1 -1
- package/public/assets/{RunsPage-CRnnXU4P.js → RunsPage-BYlDZjwk.js} +1 -1
- package/public/assets/{Select-Bvx32Diz.js → Select-DGVDts9_.js} +1 -1
- package/public/assets/{SelectMenu-BjMxc4VB.js → SelectMenu-B6n06FSV.js} +1 -1
- package/public/assets/{SettingsPage-Bb6LM3wO.js → SettingsPage-BpLc2GAe.js} +21 -21
- package/public/assets/{TimeCell.vue_vue_type_script_setup_true_lang-DW_UB0Fu.js → TimeCell.vue_vue_type_script_setup_true_lang-BNWTJF4u.js} +1 -1
- package/public/assets/{UsagePage-BLMDEsv-.js → UsagePage-CSt7StoP.js} +1 -1
- package/public/assets/{VolumesPage-CxcLc3L2.js → VolumesPage-Cxav6H5n.js} +1 -1
- package/public/assets/WebhookConfigPanel.vue_vue_type_script_setup_true_lang-DQNacZEe.js +1 -0
- package/public/assets/{WorkItemCell.vue_vue_type_script_setup_true_lang-BQn6vTjd.js → WorkItemCell.vue_vue_type_script_setup_true_lang-DAJMkNI8.js} +1 -1
- package/public/assets/{index-C5RBBrPj.js → index-Cs2OnrL7.js} +2 -2
- package/public/assets/{index-BMbMibyb.js → index-RZx6yIXX.js} +1 -1
- package/public/assets/{usage-format-jsb31_O8.js → usage-format-RcSEOPCq.js} +1 -1
- package/public/assets/{useManagedProjects-8rtjRqVJ.js → useManagedProjects-DnOY5lQq.js} +1 -1
- package/public/assets/{useRouteTab-DfwrcMic.js → useRouteTab-B-Vrl8p9.js} +1 -1
- package/public/index.html +1 -1
- package/public/assets/ProjectDetailPage-CreyvUit.js +0 -1
- package/public/assets/WebhookConfigPanel.vue_vue_type_script_setup_true_lang-B2V2GF6b.js +0 -1
|
@@ -52,6 +52,7 @@ function globalDefaults() {
|
|
|
52
52
|
autoMr: g.autoMr ? "true" : "false",
|
|
53
53
|
autoResolveConflicts: g.autoResolveConflicts ? "true" : "false",
|
|
54
54
|
ciFailAutoReport: g.ciFailAutoReport ? "true" : "false",
|
|
55
|
+
allowConfidentialWorkItems: g.allowConfidentialWorkItems ? "true" : "false",
|
|
55
56
|
lspServers: g.lspServers.join(","),
|
|
56
57
|
lspDisabled: "",
|
|
57
58
|
};
|
|
@@ -69,7 +70,7 @@ export function mountSettingsRoutes(app) {
|
|
|
69
70
|
return res.status(404).json({ error: "not managed" });
|
|
70
71
|
}
|
|
71
72
|
const settings = getProjectSettings(projectId) ?? {
|
|
72
|
-
planModel: "", buildModel: "", planVariant: "", buildVariant: "", plugins: "", baseBranches: "", lspServers: "", lspDisabled: "", builderImage: "", buildWorkflow: "", mrDescription: "", minRole: "", requireAuthorOrAssignee: "", autoPush: "", autoMr: "", autoResolveConflicts: "", ciFailAutoReport: "", assignee: "",
|
|
73
|
+
planModel: "", buildModel: "", planVariant: "", buildVariant: "", plugins: "", baseBranches: "", lspServers: "", lspDisabled: "", builderImage: "", buildWorkflow: "", mrDescription: "", minRole: "", requireAuthorOrAssignee: "", autoPush: "", autoMr: "", autoResolveConflicts: "", ciFailAutoReport: "", allowConfidentialWorkItems: "", assignee: "",
|
|
73
74
|
};
|
|
74
75
|
logReq(req, "debug", "get settings", { projectId });
|
|
75
76
|
return res.json({ settings, defaults: globalDefaults() });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-routes.js","sourceRoot":"","sources":["../../src/admin/settings-routes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"settings-routes.js","sourceRoot":"","sources":["../../src/admin/settings-routes.ts"],"names":[],"mappings":"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"}
|
package/dist/devcontainer.js
CHANGED
|
@@ -113,6 +113,12 @@ export function devcontainerVolumeArgs(podmanVolume) {
|
|
|
113
113
|
// $XDG_CONFIG_HOME/containers (now the out-of-tree xdg volume — still worth
|
|
114
114
|
// overriding so the inner runtime's config never mixes with opencode's). The
|
|
115
115
|
// referenced file is created by ensurePodmanStore.
|
|
116
|
+
//
|
|
117
|
+
// This does NOT cover containers.conf: podman still scans
|
|
118
|
+
// $XDG_CONFIG_HOME/containers/containers.conf.d before reading the storage
|
|
119
|
+
// override. The runtime path in docker/devbot-shell redirects XDG_CONFIG_HOME
|
|
120
|
+
// (and the other XDG dirs) to $HOME/agent for that reason; the runner must keep
|
|
121
|
+
// passing opencode's sealed xdg home to the container itself.
|
|
116
122
|
export function devcontainerEnvArgs() {
|
|
117
123
|
return [
|
|
118
124
|
"--env", `CONTAINERS_STORAGE_CONF=${PODMAN_STORE_DIR}/storage.conf`,
|
|
@@ -134,6 +140,9 @@ export function devcontainerPromptSection() {
|
|
|
134
140
|
"",
|
|
135
141
|
"- Build and run the project's own images, or pull service images (postgres, redis, etc.), then `podman network create` a private network so containers resolve each other by name.",
|
|
136
142
|
"- Prefer a repo `compose.yaml`/`docker-compose.yml` via `podman compose` when one exists; otherwise use raw `podman`.",
|
|
143
|
+
"- The runtime is preconfigured for the agent UID: do not set `XDG_*`, use `sudo`, or add `--privileged`, `--isolation=chroot`, or `--storage-driver` flags.",
|
|
144
|
+
"- Debian/Ubuntu images that run `apt-get update && apt-get install` build normally; no sandbox-specific Dockerfile line is needed.",
|
|
145
|
+
"- A `podman` failure with `containers.conf.d: permission denied`, or an apt build failing with `setgroups 65534 failed` / `setegid 65534 failed` (errno EINVAL 22), is a DevBot sandbox bug to report. Do not add sandbox-specific configuration such as `APT::Sandbox::User` to the project.",
|
|
137
146
|
"- The container store lives in a separate volume outside `/workspace`, so container artifacts are never part of the git diff and must not be committed.",
|
|
138
147
|
"- Stop long-running containers when you're done (`podman rm -f <name>`); they are reaped when this run exits.",
|
|
139
148
|
].join("\n");
|
package/dist/devcontainer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devcontainer.js","sourceRoot":"","sources":["../src/devcontainer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"devcontainer.js","sourceRoot":"","sources":["../src/devcontainer.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ export function initGlobalSettingsTables() {
|
|
|
28
28
|
auto_mr INTEGER NOT NULL DEFAULT 0,
|
|
29
29
|
auto_resolve_conflicts INTEGER NOT NULL DEFAULT 0,
|
|
30
30
|
ci_fail_auto_report INTEGER NOT NULL DEFAULT 0,
|
|
31
|
+
allow_confidential_work_items INTEGER NOT NULL DEFAULT 0,
|
|
31
32
|
lsp_servers TEXT NOT NULL DEFAULT '',
|
|
32
33
|
runtime TEXT NOT NULL DEFAULT '',
|
|
33
34
|
created_at INTEGER NOT NULL,
|
|
@@ -96,6 +97,11 @@ export function initGlobalSettingsTables() {
|
|
|
96
97
|
db.exec("ALTER TABLE global_settings ADD COLUMN ci_fail_auto_report INTEGER NOT NULL DEFAULT 0");
|
|
97
98
|
}
|
|
98
99
|
catch { /* exists */ }
|
|
100
|
+
// Pre-0032 DBs lack the confidential work item opt-in.
|
|
101
|
+
try {
|
|
102
|
+
db.exec("ALTER TABLE global_settings ADD COLUMN allow_confidential_work_items INTEGER NOT NULL DEFAULT 0");
|
|
103
|
+
}
|
|
104
|
+
catch { /* exists */ }
|
|
99
105
|
// Pre-0031 DBs lack the LSP server list.
|
|
100
106
|
try {
|
|
101
107
|
db.exec("ALTER TABLE global_settings ADD COLUMN lsp_servers TEXT NOT NULL DEFAULT ''");
|
|
@@ -128,7 +134,7 @@ export function getGlobalSettings() {
|
|
|
128
134
|
let row;
|
|
129
135
|
try {
|
|
130
136
|
row = db
|
|
131
|
-
.prepare("SELECT plan_model, build_model, plan_variant, build_variant, plugins, base_branches, builder_image, assignee, build_workflow, mr_description, min_role, require_author_or_assignee, auto_push, auto_mr, auto_resolve_conflicts, ci_fail_auto_report, lsp_servers, runtime FROM global_settings WHERE id = 1")
|
|
137
|
+
.prepare("SELECT plan_model, build_model, plan_variant, build_variant, plugins, base_branches, builder_image, assignee, build_workflow, mr_description, min_role, require_author_or_assignee, auto_push, auto_mr, auto_resolve_conflicts, ci_fail_auto_report, allow_confidential_work_items, lsp_servers, runtime FROM global_settings WHERE id = 1")
|
|
132
138
|
.get();
|
|
133
139
|
}
|
|
134
140
|
catch {
|
|
@@ -154,6 +160,7 @@ export function getGlobalSettings() {
|
|
|
154
160
|
autoMr: row.auto_mr === 1,
|
|
155
161
|
autoResolveConflicts: row.auto_resolve_conflicts === 1,
|
|
156
162
|
ciFailAutoReport: row.ci_fail_auto_report === 1,
|
|
163
|
+
allowConfidentialWorkItems: row.allow_confidential_work_items === 1,
|
|
157
164
|
lspServers: lspServersFromStoredJson(row.lsp_servers),
|
|
158
165
|
runtime: runtimeFromJson(typeof row.runtime === "string" ? row.runtime : ""),
|
|
159
166
|
});
|
|
@@ -170,10 +177,10 @@ export function upsertGlobalSettings(s) {
|
|
|
170
177
|
const v = parsed.data;
|
|
171
178
|
const now = Math.floor(Date.now() / 1000);
|
|
172
179
|
db.prepare(`INSERT OR REPLACE INTO global_settings
|
|
173
|
-
(id, plan_model, build_model, plan_variant, build_variant, plugins, base_branches, builder_image, assignee, build_workflow, mr_description, min_role, require_author_or_assignee, auto_push, auto_mr, auto_resolve_conflicts, ci_fail_auto_report, lsp_servers, runtime, created_at, updated_at)
|
|
174
|
-
VALUES (1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
|
|
180
|
+
(id, plan_model, build_model, plan_variant, build_variant, plugins, base_branches, builder_image, assignee, build_workflow, mr_description, min_role, require_author_or_assignee, auto_push, auto_mr, auto_resolve_conflicts, ci_fail_auto_report, allow_confidential_work_items, lsp_servers, runtime, created_at, updated_at)
|
|
181
|
+
VALUES (1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
|
|
175
182
|
COALESCE((SELECT created_at FROM global_settings WHERE id = 1), ?),
|
|
176
|
-
?)`).run(v.planModel, v.buildModel, v.planVariant, v.buildVariant, v.plugins, v.baseBranches || "dev,master", v.builderImage, v.assignee, v.buildWorkflow, v.mrDescription, v.minRole, v.requireAuthorOrAssignee ? 1 : 0, v.autoPush ? 1 : 0, v.autoMr ? 1 : 0, v.autoResolveConflicts ? 1 : 0, v.ciFailAutoReport ? 1 : 0, JSON.stringify(v.lspServers), JSON.stringify(v.runtime), now, now);
|
|
183
|
+
?)`).run(v.planModel, v.buildModel, v.planVariant, v.buildVariant, v.plugins, v.baseBranches || "dev,master", v.builderImage, v.assignee, v.buildWorkflow, v.mrDescription, v.minRole, v.requireAuthorOrAssignee ? 1 : 0, v.autoPush ? 1 : 0, v.autoMr ? 1 : 0, v.autoResolveConflicts ? 1 : 0, v.ciFailAutoReport ? 1 : 0, v.allowConfidentialWorkItems ? 1 : 0, JSON.stringify(v.lspServers), JSON.stringify(v.runtime), now, now);
|
|
177
184
|
}
|
|
178
185
|
// ---- Provider registry -----------------------------------------------------
|
|
179
186
|
function rowToProvider(row) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-settings-store.js","sourceRoot":"","sources":["../src/global-settings-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,GAMxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,4EAA4E;AAC5E,wEAAwE;AACxE,+EAA+E;AAC/E,2EAA2E;AAE3E,MAAM,UAAU,wBAAwB;IACtC,EAAE,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"global-settings-store.js","sourceRoot":"","sources":["../src/global-settings-store.ts"],"names":[],"mappings":"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"}
|
package/dist/migrate.js
CHANGED
|
@@ -8,66 +8,431 @@ import { log } from "./logger.js";
|
|
|
8
8
|
// migration is a numbered .sql file in migrations/ applied in order inside a
|
|
9
9
|
// transaction; schema_migrations records the applied version. Fail-closed: a
|
|
10
10
|
// half-applied migration aborts boot so a never half-schema serves requests.
|
|
11
|
+
//
|
|
12
|
+
// Additive migrations (ALTER TABLE ... ADD COLUMN plus the IF NOT EXISTS forms)
|
|
13
|
+
// are safe to replay against a schema that is ahead of schema_migrations: an
|
|
14
|
+
// existing column with the declared shape is skipped, a missing one is added,
|
|
15
|
+
// and the version is recorded only after every declared effect is present.
|
|
11
16
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
12
17
|
const MIGRATIONS_DIR = join(MODULE_DIR, "..", "migrations");
|
|
18
|
+
const IDENT = '(?:"[^"]+"|`[^`]+`|\\[[^\\]]+\\]|[A-Za-z_][A-Za-z0-9_$]*)';
|
|
19
|
+
const QUALIFIED_IDENT = `${IDENT}(?:\\s*\\.\\s*${IDENT})?`;
|
|
20
|
+
const ADD_COLUMN = new RegExp(`^ALTER\\s+TABLE\\s+(${QUALIFIED_IDENT})\\s+ADD\\s+(?:COLUMN\\s+)?(${IDENT})\\s+([\\s\\S]+)$`, "i");
|
|
21
|
+
const CREATE_TABLE = new RegExp(`^CREATE\\s+TABLE\\s+IF\\s+NOT\\s+EXISTS\\s+(${QUALIFIED_IDENT})`, "i");
|
|
22
|
+
const CREATE_INDEX = new RegExp(`^CREATE\\s+(?:UNIQUE\\s+)?INDEX\\s+IF\\s+NOT\\s+EXISTS\\s+(${QUALIFIED_IDENT})`, "i");
|
|
23
|
+
const CONSTRAINT_KEYWORDS = [
|
|
24
|
+
"PRIMARY",
|
|
25
|
+
"NOT",
|
|
26
|
+
"NULL",
|
|
27
|
+
"UNIQUE",
|
|
28
|
+
"CHECK",
|
|
29
|
+
"DEFAULT",
|
|
30
|
+
"COLLATE",
|
|
31
|
+
"REFERENCES",
|
|
32
|
+
"GENERATED",
|
|
33
|
+
"AS",
|
|
34
|
+
];
|
|
35
|
+
const NOT_COLUMN_KEYWORDS = new Set(["CONSTRAINT", "PRIMARY", "UNIQUE", "FOREIGN", "CHECK"]);
|
|
13
36
|
function loadMigrations() {
|
|
14
37
|
let names;
|
|
15
38
|
try {
|
|
16
|
-
names = readdirSync(MIGRATIONS_DIR).filter((
|
|
39
|
+
names = readdirSync(MIGRATIONS_DIR).filter((name) => name.endsWith(".sql"));
|
|
17
40
|
}
|
|
18
41
|
catch {
|
|
19
42
|
return [];
|
|
20
43
|
}
|
|
21
44
|
return names
|
|
22
45
|
.map((filename) => {
|
|
23
|
-
const
|
|
24
|
-
if (!
|
|
46
|
+
const match = /^(\d+)_.+\.sql$/.exec(filename);
|
|
47
|
+
if (!match)
|
|
25
48
|
return null;
|
|
26
|
-
const version = Number(
|
|
49
|
+
const version = Number(match[1]);
|
|
27
50
|
const sql = readFileSync(join(MIGRATIONS_DIR, filename), "utf8");
|
|
28
51
|
return { version, filename, sql };
|
|
29
52
|
})
|
|
30
|
-
.filter((
|
|
53
|
+
.filter((migration) => migration !== null)
|
|
31
54
|
.sort((a, b) => a.version - b.version);
|
|
32
55
|
}
|
|
33
|
-
function
|
|
34
|
-
|
|
56
|
+
function splitStatements(sql) {
|
|
57
|
+
const statements = [];
|
|
58
|
+
let current = "";
|
|
59
|
+
let quote = null;
|
|
60
|
+
let i = 0;
|
|
61
|
+
while (i < sql.length) {
|
|
62
|
+
const ch = sql[i];
|
|
63
|
+
const next = sql[i + 1];
|
|
64
|
+
if (quote !== null) {
|
|
65
|
+
current += ch;
|
|
66
|
+
if (ch === quote) {
|
|
67
|
+
if (next === quote) {
|
|
68
|
+
current += next;
|
|
69
|
+
i += 2;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
quote = null;
|
|
73
|
+
}
|
|
74
|
+
i++;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (ch === "-" && next === "-") {
|
|
78
|
+
i += 2;
|
|
79
|
+
while (i < sql.length && sql[i] !== "\n")
|
|
80
|
+
i++;
|
|
81
|
+
current += " ";
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (ch === "/" && next === "*") {
|
|
85
|
+
i += 2;
|
|
86
|
+
while (i < sql.length && !(sql[i] === "*" && sql[i + 1] === "/"))
|
|
87
|
+
i++;
|
|
88
|
+
i += 2;
|
|
89
|
+
current += " ";
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (ch === "'" || ch === '"' || ch === "`") {
|
|
93
|
+
quote = ch;
|
|
94
|
+
current += ch;
|
|
95
|
+
i++;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (ch === "[") {
|
|
99
|
+
quote = "]";
|
|
100
|
+
current += ch;
|
|
101
|
+
i++;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (ch === ";") {
|
|
105
|
+
const statement = current.trim();
|
|
106
|
+
if (statement)
|
|
107
|
+
statements.push(statement);
|
|
108
|
+
current = "";
|
|
109
|
+
i++;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
current += ch;
|
|
113
|
+
i++;
|
|
114
|
+
}
|
|
115
|
+
const statement = current.trim();
|
|
116
|
+
if (statement)
|
|
117
|
+
statements.push(statement);
|
|
118
|
+
return statements;
|
|
119
|
+
}
|
|
120
|
+
function lastIdentPart(raw) {
|
|
121
|
+
let quote = null;
|
|
122
|
+
let lastDot = -1;
|
|
123
|
+
for (let i = 0; i < raw.length; i++) {
|
|
124
|
+
const ch = raw[i];
|
|
125
|
+
if (quote !== null) {
|
|
126
|
+
if (ch === quote)
|
|
127
|
+
quote = null;
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (ch === "'" || ch === '"' || ch === "`") {
|
|
131
|
+
quote = ch;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (ch === "[") {
|
|
135
|
+
quote = "]";
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (ch === ".")
|
|
139
|
+
lastDot = i;
|
|
140
|
+
}
|
|
141
|
+
return unquoteIdent(raw.slice(lastDot + 1));
|
|
142
|
+
}
|
|
143
|
+
function unquoteIdent(raw) {
|
|
144
|
+
const value = raw.trim();
|
|
145
|
+
if (value.length < 2)
|
|
146
|
+
return value;
|
|
147
|
+
const first = value[0];
|
|
148
|
+
const last = value[value.length - 1];
|
|
149
|
+
if ((first === '"' && last === '"') || (first === "'" && last === "'") || (first === "`" && last === "`")) {
|
|
150
|
+
return value.slice(1, -1).replaceAll(first + first, first);
|
|
151
|
+
}
|
|
152
|
+
if (first === "[" && last === "]")
|
|
153
|
+
return value.slice(1, -1).replaceAll("]]", "]");
|
|
154
|
+
return value;
|
|
155
|
+
}
|
|
156
|
+
function parseAdditive(sql) {
|
|
157
|
+
const statements = splitStatements(sql);
|
|
158
|
+
if (statements.length === 0)
|
|
159
|
+
return null;
|
|
160
|
+
const effects = [];
|
|
161
|
+
for (const statement of statements) {
|
|
162
|
+
const add = ADD_COLUMN.exec(statement);
|
|
163
|
+
if (add) {
|
|
164
|
+
const table = lastIdentPart(add[1]);
|
|
165
|
+
const column = lastIdentPart(add[2]);
|
|
166
|
+
const definition = add[3].trim();
|
|
167
|
+
if (!definition || NOT_COLUMN_KEYWORDS.has(column.toUpperCase()))
|
|
168
|
+
return null;
|
|
169
|
+
effects.push({ kind: "column", sql: statement, table, column, definition });
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
const table = CREATE_TABLE.exec(statement);
|
|
173
|
+
if (table) {
|
|
174
|
+
effects.push({ kind: "table", sql: statement, name: lastIdentPart(table[1]) });
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
const index = CREATE_INDEX.exec(statement);
|
|
178
|
+
if (index) {
|
|
179
|
+
effects.push({ kind: "index", sql: statement, name: lastIdentPart(index[1]) });
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
return effects;
|
|
185
|
+
}
|
|
186
|
+
function topLevelIndex(sql, words) {
|
|
187
|
+
let quote = null;
|
|
188
|
+
let depth = 0;
|
|
189
|
+
for (let i = 0; i < sql.length; i++) {
|
|
190
|
+
const ch = sql[i];
|
|
191
|
+
if (quote !== null) {
|
|
192
|
+
if (ch === quote) {
|
|
193
|
+
if (sql[i + 1] === quote) {
|
|
194
|
+
i++;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
quote = null;
|
|
198
|
+
}
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (ch === "'" || ch === '"' || ch === "`") {
|
|
202
|
+
quote = ch;
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (ch === "[") {
|
|
206
|
+
quote = "]";
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
if (ch === "(") {
|
|
210
|
+
depth++;
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (ch === ")") {
|
|
214
|
+
depth = Math.max(0, depth - 1);
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
if (depth !== 0 || !/[A-Za-z_]/.test(ch))
|
|
218
|
+
continue;
|
|
219
|
+
let end = i + 1;
|
|
220
|
+
while (end < sql.length && /[A-Za-z0-9_$]/.test(sql[end]))
|
|
221
|
+
end++;
|
|
222
|
+
if (words.includes(sql.slice(i, end).toUpperCase()))
|
|
223
|
+
return i;
|
|
224
|
+
i = end - 1;
|
|
225
|
+
}
|
|
226
|
+
return -1;
|
|
227
|
+
}
|
|
228
|
+
function parseDefault(definition) {
|
|
229
|
+
const at = topLevelIndex(definition, ["DEFAULT"]);
|
|
230
|
+
if (at === -1)
|
|
231
|
+
return null;
|
|
232
|
+
let i = at + "DEFAULT".length;
|
|
233
|
+
while (i < definition.length && /\s/.test(definition[i]))
|
|
234
|
+
i++;
|
|
235
|
+
if (i >= definition.length)
|
|
236
|
+
return null;
|
|
237
|
+
const start = i;
|
|
238
|
+
const first = definition[i];
|
|
239
|
+
if (first === "'" || first === '"' || first === "`") {
|
|
240
|
+
i++;
|
|
241
|
+
while (i < definition.length) {
|
|
242
|
+
if (definition[i] === first) {
|
|
243
|
+
if (definition[i + 1] === first) {
|
|
244
|
+
i += 2;
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
i++;
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
i++;
|
|
251
|
+
}
|
|
252
|
+
return normalizeSql(definition.slice(start, i));
|
|
253
|
+
}
|
|
254
|
+
if (first === "(") {
|
|
255
|
+
let depth = 0;
|
|
256
|
+
while (i < definition.length) {
|
|
257
|
+
const ch = definition[i];
|
|
258
|
+
if (ch === "(")
|
|
259
|
+
depth++;
|
|
260
|
+
else if (ch === ")") {
|
|
261
|
+
depth--;
|
|
262
|
+
if (depth === 0) {
|
|
263
|
+
i++;
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
i++;
|
|
268
|
+
}
|
|
269
|
+
return normalizeSql(definition.slice(start, i));
|
|
270
|
+
}
|
|
271
|
+
while (i < definition.length && !/[\s,)]/.test(definition[i]))
|
|
272
|
+
i++;
|
|
273
|
+
return normalizeSql(definition.slice(start, i));
|
|
274
|
+
}
|
|
275
|
+
function normalizeSql(value) {
|
|
276
|
+
return value.trim().replace(/\s+/g, " ");
|
|
277
|
+
}
|
|
278
|
+
function parseColumnShape(definition) {
|
|
279
|
+
const typeEnd = topLevelIndex(definition, CONSTRAINT_KEYWORDS);
|
|
280
|
+
return {
|
|
281
|
+
type: normalizeSql(typeEnd === -1 ? definition : definition.slice(0, typeEnd)).toUpperCase(),
|
|
282
|
+
notNull: topLevelIndex(definition, ["NOT"]) !== -1,
|
|
283
|
+
default: parseDefault(definition),
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function quoteIdent(name) {
|
|
287
|
+
return `"${name.replaceAll('"', '""')}"`;
|
|
288
|
+
}
|
|
289
|
+
function columnState(database, effect) {
|
|
290
|
+
const rows = database.prepare(`PRAGMA table_info(${quoteIdent(effect.table)})`).all();
|
|
291
|
+
const row = rows.find((candidate) => candidate.name.toLowerCase() === effect.column.toLowerCase());
|
|
292
|
+
if (!row)
|
|
293
|
+
return "missing";
|
|
294
|
+
const expected = parseColumnShape(effect.definition);
|
|
295
|
+
const compatible = normalizeSql(row.type).toUpperCase() === expected.type &&
|
|
296
|
+
(row.notnull === 1) === expected.notNull &&
|
|
297
|
+
normalizeSql(row.dflt_value ?? "") === normalizeSql(expected.default ?? "");
|
|
298
|
+
return compatible ? "compatible" : "incompatible";
|
|
299
|
+
}
|
|
300
|
+
function objectExists(database, type, name) {
|
|
301
|
+
const row = database
|
|
302
|
+
.prepare("SELECT 1 AS ok FROM sqlite_master WHERE type = ? AND name = ? COLLATE NOCASE")
|
|
303
|
+
.get(type, name);
|
|
304
|
+
return row !== undefined;
|
|
305
|
+
}
|
|
306
|
+
function applyAdditiveMigration(database, effects) {
|
|
307
|
+
let skipped = 0;
|
|
308
|
+
let executed = 0;
|
|
309
|
+
for (const effect of effects) {
|
|
310
|
+
if (effect.kind === "column") {
|
|
311
|
+
const state = columnState(database, effect);
|
|
312
|
+
if (state === "compatible") {
|
|
313
|
+
skipped++;
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
if (state === "incompatible") {
|
|
317
|
+
throw new Error(`column ${effect.table}.${effect.column} exists with an incompatible definition`);
|
|
318
|
+
}
|
|
319
|
+
database.exec(effect.sql);
|
|
320
|
+
executed++;
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
database.exec(effect.sql);
|
|
324
|
+
executed++;
|
|
325
|
+
}
|
|
326
|
+
for (const effect of effects) {
|
|
327
|
+
if (effect.kind === "column") {
|
|
328
|
+
const state = columnState(database, effect);
|
|
329
|
+
if (state === "missing") {
|
|
330
|
+
throw new Error(`migration did not create column ${effect.table}.${effect.column}`);
|
|
331
|
+
}
|
|
332
|
+
if (state === "incompatible") {
|
|
333
|
+
throw new Error(`column ${effect.table}.${effect.column} exists with an incompatible definition`);
|
|
334
|
+
}
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
if (!objectExists(database, effect.kind, effect.name)) {
|
|
338
|
+
throw new Error(`migration did not create ${effect.kind} ${effect.name}`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return { skipped, executed };
|
|
342
|
+
}
|
|
343
|
+
function appliedVersions(database) {
|
|
344
|
+
database.exec(`
|
|
35
345
|
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
36
346
|
version INTEGER PRIMARY KEY,
|
|
37
347
|
applied_at INTEGER NOT NULL
|
|
38
348
|
)
|
|
39
349
|
`);
|
|
40
|
-
const
|
|
41
|
-
return row
|
|
350
|
+
const rows = database.prepare("SELECT version FROM schema_migrations").all();
|
|
351
|
+
return new Set(rows.map((row) => row.version));
|
|
42
352
|
}
|
|
43
|
-
export function
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
353
|
+
export function unrecordedBelowMax(applied, migrations) {
|
|
354
|
+
if (applied.size === 0)
|
|
355
|
+
return [];
|
|
356
|
+
const max = Math.max(...applied);
|
|
357
|
+
const missing = new Set();
|
|
358
|
+
for (const migration of migrations) {
|
|
359
|
+
if (migration.version < max && !applied.has(migration.version))
|
|
360
|
+
missing.add(migration.version);
|
|
361
|
+
}
|
|
362
|
+
return [...missing].sort((a, b) => a - b);
|
|
363
|
+
}
|
|
364
|
+
function migrateOne(database, migration) {
|
|
365
|
+
const started = Date.now();
|
|
366
|
+
try {
|
|
367
|
+
database.exec("BEGIN");
|
|
368
|
+
let skipped = 0;
|
|
369
|
+
let executed = 0;
|
|
370
|
+
if (migration.effects !== null) {
|
|
371
|
+
const result = applyAdditiveMigration(database, migration.effects);
|
|
372
|
+
skipped = result.skipped;
|
|
373
|
+
executed = result.executed;
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
database.exec(migration.sql);
|
|
377
|
+
executed = 1;
|
|
378
|
+
}
|
|
379
|
+
database.prepare("INSERT INTO schema_migrations (version, applied_at) VALUES (?, ?)").run(migration.version, Math.floor(Date.now() / 1000));
|
|
380
|
+
database.exec("COMMIT");
|
|
381
|
+
log.info("migration applied", {
|
|
382
|
+
version: migration.version,
|
|
383
|
+
file: migration.filename,
|
|
384
|
+
ms: Date.now() - started,
|
|
385
|
+
skippedColumns: skipped,
|
|
386
|
+
executedStatements: executed,
|
|
387
|
+
adopted: skipped > 0 && executed === 0,
|
|
388
|
+
});
|
|
50
389
|
}
|
|
51
|
-
|
|
52
|
-
for (const m of pending) {
|
|
53
|
-
const t0 = Date.now();
|
|
390
|
+
catch (e) {
|
|
54
391
|
try {
|
|
55
|
-
|
|
56
|
-
db.exec(m.sql);
|
|
57
|
-
db.prepare("INSERT INTO schema_migrations (version, applied_at) VALUES (?, ?)").run(m.version, Math.floor(Date.now() / 1000));
|
|
58
|
-
db.exec("COMMIT");
|
|
59
|
-
log.info("migration applied", { version: m.version, file: m.filename, ms: Date.now() - t0 });
|
|
392
|
+
database.exec("ROLLBACK");
|
|
60
393
|
}
|
|
61
|
-
catch
|
|
62
|
-
|
|
63
|
-
log.error("migration failed, aborting boot", { version: m.version, file: m.filename, err: e instanceof Error ? e.message : String(e) });
|
|
64
|
-
throw new Error(`migration ${m.version} (${m.filename}) failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
394
|
+
catch {
|
|
395
|
+
// BEGIN may have failed before a transaction was active.
|
|
65
396
|
}
|
|
397
|
+
log.error("migration failed, aborting boot", {
|
|
398
|
+
version: migration.version,
|
|
399
|
+
file: migration.filename,
|
|
400
|
+
err: e instanceof Error ? e.message : String(e),
|
|
401
|
+
});
|
|
402
|
+
throw new Error(`migration ${migration.version} (${migration.filename}) failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
66
403
|
}
|
|
67
404
|
}
|
|
405
|
+
export function runMigrations(database, migrations = loadMigrations()) {
|
|
406
|
+
const applied = appliedVersions(database);
|
|
407
|
+
const last = applied.size === 0 ? 0 : Math.max(...applied);
|
|
408
|
+
const pending = migrations
|
|
409
|
+
.filter((migration) => !applied.has(migration.version))
|
|
410
|
+
.sort((a, b) => a.version - b.version)
|
|
411
|
+
.map((migration) => ({ ...migration, effects: parseAdditive(migration.sql) }));
|
|
412
|
+
if (pending.length === 0) {
|
|
413
|
+
log.debug("migrations up to date", { applied: last });
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
const missing = unrecordedBelowMax(applied, migrations);
|
|
417
|
+
if (missing.length > 0) {
|
|
418
|
+
const filenames = new Map(migrations.map((migration) => [migration.version, migration.filename]));
|
|
419
|
+
log.warn("schema_migrations has unrecorded versions below the applied max", {
|
|
420
|
+
max: last,
|
|
421
|
+
missing: missing.map((version) => ({ version, filename: filenames.get(version) })),
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
const pendingLast = pending[pending.length - 1].version;
|
|
425
|
+
log.info("applying migrations", { from: last, to: pendingLast, count: pending.length });
|
|
426
|
+
for (const migration of pending)
|
|
427
|
+
migrateOne(database, migration);
|
|
428
|
+
}
|
|
429
|
+
export function migrate() {
|
|
430
|
+
runMigrations(db);
|
|
431
|
+
}
|
|
68
432
|
export function migrationStatus() {
|
|
69
|
-
const last = appliedVersion();
|
|
70
433
|
const all = loadMigrations();
|
|
71
|
-
|
|
434
|
+
const applied = appliedVersions(db);
|
|
435
|
+
const appliedCount = all.filter((migration) => applied.has(migration.version)).length;
|
|
436
|
+
return { appliedCount, pendingCount: all.length - appliedCount };
|
|
72
437
|
}
|
|
73
438
|
//# sourceMappingURL=migrate.js.map
|