swarm-mail 0.3.3 → 0.4.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/hive/adapter.d.ts.map +1 -1
- package/dist/index.js +60 -10
- package/dist/pglite.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/hive/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/hive/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AA+B5D;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,eAAe,EACnB,UAAU,EAAE,MAAM,GACjB,WAAW,CA6iBb"}
|
package/dist/index.js
CHANGED
|
@@ -18912,6 +18912,18 @@ function getDatabasePath2(projectPath) {
|
|
|
18912
18912
|
return join4(globalTmpDir, "streams");
|
|
18913
18913
|
}
|
|
18914
18914
|
var instances2 = new Map;
|
|
18915
|
+
var initPromises = new Map;
|
|
18916
|
+
function formatError2(error45) {
|
|
18917
|
+
if (error45 instanceof Error)
|
|
18918
|
+
return error45.message;
|
|
18919
|
+
if (typeof error45 === "string")
|
|
18920
|
+
return error45;
|
|
18921
|
+
try {
|
|
18922
|
+
return JSON.stringify(error45, Object.getOwnPropertyNames(error45));
|
|
18923
|
+
} catch {
|
|
18924
|
+
return String(error45);
|
|
18925
|
+
}
|
|
18926
|
+
}
|
|
18915
18927
|
function isWasmAbortError(error45) {
|
|
18916
18928
|
if (error45 instanceof Error) {
|
|
18917
18929
|
const message = error45.message.toLowerCase();
|
|
@@ -18927,16 +18939,18 @@ async function createPGliteWithRecovery(dbPath) {
|
|
|
18927
18939
|
} catch (error45) {
|
|
18928
18940
|
if (isWasmAbortError(error45)) {
|
|
18929
18941
|
console.warn(`[swarm-mail] PGLite WASM abort detected, recovering by deleting corrupted database: ${dbPath}`);
|
|
18930
|
-
if (existsSync4(dbPath)) {
|
|
18942
|
+
if (!existsSync4(dbPath)) {
|
|
18943
|
+
console.log("[swarm-mail] Database already cleaned up by another process");
|
|
18944
|
+
} else {
|
|
18931
18945
|
rmSync(dbPath, { recursive: true, force: true });
|
|
18932
18946
|
}
|
|
18933
18947
|
try {
|
|
18934
18948
|
const pglite = new PGlite2(dbPath);
|
|
18935
18949
|
await pglite.query("SELECT 1");
|
|
18936
|
-
console.log(
|
|
18950
|
+
console.log(`[swarm-mail] Successfully recovered from corrupted database: ${dbPath}`);
|
|
18937
18951
|
return pglite;
|
|
18938
18952
|
} catch (retryError) {
|
|
18939
|
-
throw new Error(`Failed to recover PGLite database after deleting corrupted data: ${
|
|
18953
|
+
throw new Error(`Failed to recover PGLite database after deleting corrupted data: ${formatError2(retryError)}`);
|
|
18940
18954
|
}
|
|
18941
18955
|
}
|
|
18942
18956
|
throw error45;
|
|
@@ -18945,7 +18959,13 @@ async function createPGliteWithRecovery(dbPath) {
|
|
|
18945
18959
|
async function getSwarmMail(projectPath) {
|
|
18946
18960
|
const dbPath = getDatabasePath2(projectPath);
|
|
18947
18961
|
const projectKey = projectPath || dbPath;
|
|
18948
|
-
if (
|
|
18962
|
+
if (instances2.has(dbPath)) {
|
|
18963
|
+
return instances2.get(dbPath).adapter;
|
|
18964
|
+
}
|
|
18965
|
+
if (initPromises.has(dbPath)) {
|
|
18966
|
+
return initPromises.get(dbPath);
|
|
18967
|
+
}
|
|
18968
|
+
const initPromise = (async () => {
|
|
18949
18969
|
const useSocket = process.env.SWARM_MAIL_SOCKET === "true";
|
|
18950
18970
|
if (useSocket) {
|
|
18951
18971
|
try {
|
|
@@ -18961,8 +18981,15 @@ async function getSwarmMail(projectPath) {
|
|
|
18961
18981
|
const adapter = createSwarmMailAdapter(db, projectKey);
|
|
18962
18982
|
await adapter.runMigrations();
|
|
18963
18983
|
instances2.set(dbPath, { adapter, pglite });
|
|
18984
|
+
return adapter;
|
|
18985
|
+
})();
|
|
18986
|
+
initPromises.set(dbPath, initPromise);
|
|
18987
|
+
try {
|
|
18988
|
+
const adapter = await initPromise;
|
|
18989
|
+
return adapter;
|
|
18990
|
+
} finally {
|
|
18991
|
+
initPromises.delete(dbPath);
|
|
18964
18992
|
}
|
|
18965
|
-
return instances2.get(dbPath).adapter;
|
|
18966
18993
|
}
|
|
18967
18994
|
async function getSwarmMailSocket(projectPath) {
|
|
18968
18995
|
const dbPath = getDatabasePath2(projectPath);
|
|
@@ -19027,6 +19054,10 @@ async function closeAllSwarmMail() {
|
|
|
19027
19054
|
// src/index.ts
|
|
19028
19055
|
init_streams();
|
|
19029
19056
|
|
|
19057
|
+
// src/hive/adapter.ts
|
|
19058
|
+
import { readFileSync, existsSync as existsSync5 } from "node:fs";
|
|
19059
|
+
import { join as join5 } from "node:path";
|
|
19060
|
+
|
|
19030
19061
|
// src/hive/store.ts
|
|
19031
19062
|
init_streams();
|
|
19032
19063
|
|
|
@@ -19296,7 +19327,7 @@ async function getInProgressCells(db, projectKey) {
|
|
|
19296
19327
|
async function getBlockedCells(db, projectKey) {
|
|
19297
19328
|
const result = await db.query(`SELECT b.*, bbc.blocker_ids
|
|
19298
19329
|
FROM beads b
|
|
19299
|
-
JOIN blocked_beads_cache bbc ON b.id =
|
|
19330
|
+
JOIN blocked_beads_cache bbc ON b.id = bbc.cell_id
|
|
19300
19331
|
WHERE b.project_key = $1 AND b.deleted_at IS NULL
|
|
19301
19332
|
ORDER BY b.priority DESC, b.created_at ASC`, [projectKey]);
|
|
19302
19333
|
return result.rows.map((r) => {
|
|
@@ -19884,10 +19915,29 @@ function createHiveAdapter(db, projectKey) {
|
|
|
19884
19915
|
};
|
|
19885
19916
|
}
|
|
19886
19917
|
function generateBeadId(projectKey) {
|
|
19918
|
+
const prefix = getProjectPrefix(projectKey);
|
|
19887
19919
|
const hash2 = projectKey.split("").reduce((acc, char) => (acc << 5) - acc + char.charCodeAt(0) | 0, 0).toString(36).slice(0, 6);
|
|
19888
19920
|
const timestamp = Date.now().toString(36);
|
|
19889
19921
|
const random = Math.random().toString(36).slice(2, 5);
|
|
19890
|
-
return
|
|
19922
|
+
return `${prefix}-${hash2}-${timestamp}${random}`;
|
|
19923
|
+
}
|
|
19924
|
+
function getProjectPrefix(projectKey) {
|
|
19925
|
+
try {
|
|
19926
|
+
const packageJsonPath = join5(projectKey, "package.json");
|
|
19927
|
+
if (!existsSync5(packageJsonPath)) {
|
|
19928
|
+
return "cell";
|
|
19929
|
+
}
|
|
19930
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
19931
|
+
if (!packageJson.name || typeof packageJson.name !== "string") {
|
|
19932
|
+
return "cell";
|
|
19933
|
+
}
|
|
19934
|
+
return slugifyProjectName(packageJson.name);
|
|
19935
|
+
} catch (error45) {
|
|
19936
|
+
return "cell";
|
|
19937
|
+
}
|
|
19938
|
+
}
|
|
19939
|
+
function slugifyProjectName(name) {
|
|
19940
|
+
return name.toLowerCase().replace(/[@/]/g, "-").replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
|
|
19891
19941
|
}
|
|
19892
19942
|
|
|
19893
19943
|
// src/hive/index.ts
|
|
@@ -20154,7 +20204,7 @@ async function importDependencies(adapter, projectKey, cellExport) {
|
|
|
20154
20204
|
return;
|
|
20155
20205
|
}
|
|
20156
20206
|
const db = await adapter.getDatabase();
|
|
20157
|
-
await db.query("DELETE FROM
|
|
20207
|
+
await db.query("DELETE FROM bead_dependencies WHERE cell_id = $1", [
|
|
20158
20208
|
cellExport.id
|
|
20159
20209
|
]);
|
|
20160
20210
|
for (const dep of cellExport.dependencies) {
|
|
@@ -20166,7 +20216,7 @@ async function importLabels(adapter, projectKey, cellExport) {
|
|
|
20166
20216
|
return;
|
|
20167
20217
|
}
|
|
20168
20218
|
const db = await adapter.getDatabase();
|
|
20169
|
-
await db.query("DELETE FROM
|
|
20219
|
+
await db.query("DELETE FROM bead_labels WHERE cell_id = $1", [
|
|
20170
20220
|
cellExport.id
|
|
20171
20221
|
]);
|
|
20172
20222
|
for (const label of cellExport.labels) {
|
|
@@ -20178,7 +20228,7 @@ async function importComments(adapter, projectKey, cellExport) {
|
|
|
20178
20228
|
return;
|
|
20179
20229
|
}
|
|
20180
20230
|
const db = await adapter.getDatabase();
|
|
20181
|
-
await db.query("DELETE FROM
|
|
20231
|
+
await db.query("DELETE FROM bead_comments WHERE cell_id = $1", [
|
|
20182
20232
|
cellExport.id
|
|
20183
20233
|
]);
|
|
20184
20234
|
for (const comment of cellExport.comments) {
|
package/dist/pglite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pglite.d.ts","sourceRoot":"","sources":["../src/pglite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAM9C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIjE;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAQ1D;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQjE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAkB5D;
|
|
1
|
+
{"version":3,"file":"pglite.d.ts","sourceRoot":"","sources":["../src/pglite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAM9C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIjE;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAQ1D;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQjE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAkB5D;AAoHD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,YAAY,CAChC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAmD3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AA0DD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,SAAS,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAM3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUvD;AAGD,OAAO,EAAE,MAAM,EAAE,CAAC"}
|