@hasna/cloud 0.1.8 → 0.1.10
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/cli/index.js +25 -2
- package/dist/index.js +25 -2
- package/dist/mcp/index.js +25 -2
- package/dist/sync.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/cli/index.js
CHANGED
|
@@ -11452,6 +11452,11 @@ async function syncTransfer(source, target, options, _direction) {
|
|
|
11452
11452
|
primaryKey: pkOption
|
|
11453
11453
|
} = options;
|
|
11454
11454
|
const results = [];
|
|
11455
|
+
if (!isAsyncAdapter(target)) {
|
|
11456
|
+
try {
|
|
11457
|
+
target.run("PRAGMA foreign_keys = OFF");
|
|
11458
|
+
} catch {}
|
|
11459
|
+
}
|
|
11455
11460
|
for (let i = 0;i < tables.length; i++) {
|
|
11456
11461
|
const table = tables[i];
|
|
11457
11462
|
const result = {
|
|
@@ -11569,6 +11574,11 @@ async function syncTransfer(source, target, options, _direction) {
|
|
|
11569
11574
|
}
|
|
11570
11575
|
results.push(result);
|
|
11571
11576
|
}
|
|
11577
|
+
if (!isAsyncAdapter(target)) {
|
|
11578
|
+
try {
|
|
11579
|
+
target.run("PRAGMA foreign_keys = ON");
|
|
11580
|
+
} catch {}
|
|
11581
|
+
}
|
|
11572
11582
|
return results;
|
|
11573
11583
|
}
|
|
11574
11584
|
async function batchUpsertPg(target, table, columns, updateCols, primaryKeys, batch) {
|
|
@@ -11595,7 +11605,7 @@ function batchUpsertSqlite(target, table, columns, updateCols, primaryKeys, batc
|
|
|
11595
11605
|
const setClause = updateCols.length > 0 ? updateCols.map((c) => `"${c}" = EXCLUDED."${c}"`).join(", ") : `"${primaryKeys[0]}" = EXCLUDED."${primaryKeys[0]}"`;
|
|
11596
11606
|
const sql = `INSERT INTO "${table}" (${colList}) VALUES ${valuePlaceholders}
|
|
11597
11607
|
ON CONFLICT (${pkList}) DO UPDATE SET ${setClause}`;
|
|
11598
|
-
const params = batch.flatMap((row) => columns.map((c) => row[c]
|
|
11608
|
+
const params = batch.flatMap((row) => columns.map((c) => coerceForSqlite(row[c])));
|
|
11599
11609
|
target.run(sql, ...params);
|
|
11600
11610
|
}
|
|
11601
11611
|
async function batchInsertPg(target, table, columns, batch) {
|
|
@@ -11616,9 +11626,22 @@ function batchInsertSqlite(target, table, columns, batch) {
|
|
|
11616
11626
|
const colList = columns.map((c) => `"${c}"`).join(", ");
|
|
11617
11627
|
const valuePlaceholders = batch.map(() => `(${columns.map(() => "?").join(", ")})`).join(", ");
|
|
11618
11628
|
const sql = `INSERT INTO "${table}" (${colList}) VALUES ${valuePlaceholders}`;
|
|
11619
|
-
const params = batch.flatMap((row) => columns.map((c) => row[c]
|
|
11629
|
+
const params = batch.flatMap((row) => columns.map((c) => coerceForSqlite(row[c])));
|
|
11620
11630
|
target.run(sql, ...params);
|
|
11621
11631
|
}
|
|
11632
|
+
function coerceForSqlite(value) {
|
|
11633
|
+
if (value === null || value === undefined)
|
|
11634
|
+
return null;
|
|
11635
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "bigint" || typeof value === "boolean")
|
|
11636
|
+
return value;
|
|
11637
|
+
if (value instanceof Date)
|
|
11638
|
+
return value.toISOString();
|
|
11639
|
+
if (Buffer.isBuffer(value) || value instanceof Uint8Array)
|
|
11640
|
+
return value;
|
|
11641
|
+
if (typeof value === "object")
|
|
11642
|
+
return JSON.stringify(value);
|
|
11643
|
+
return String(value);
|
|
11644
|
+
}
|
|
11622
11645
|
function isAsyncAdapter(adapter) {
|
|
11623
11646
|
return adapter.constructor.name === "PgAdapterAsync" || typeof adapter.raw?.connect === "function";
|
|
11624
11647
|
}
|
package/dist/index.js
CHANGED
|
@@ -9444,6 +9444,11 @@ async function syncTransfer(source, target, options, _direction) {
|
|
|
9444
9444
|
primaryKey: pkOption
|
|
9445
9445
|
} = options;
|
|
9446
9446
|
const results = [];
|
|
9447
|
+
if (!isAsyncAdapter(target)) {
|
|
9448
|
+
try {
|
|
9449
|
+
target.run("PRAGMA foreign_keys = OFF");
|
|
9450
|
+
} catch {}
|
|
9451
|
+
}
|
|
9447
9452
|
for (let i = 0;i < tables.length; i++) {
|
|
9448
9453
|
const table = tables[i];
|
|
9449
9454
|
const result = {
|
|
@@ -9561,6 +9566,11 @@ async function syncTransfer(source, target, options, _direction) {
|
|
|
9561
9566
|
}
|
|
9562
9567
|
results.push(result);
|
|
9563
9568
|
}
|
|
9569
|
+
if (!isAsyncAdapter(target)) {
|
|
9570
|
+
try {
|
|
9571
|
+
target.run("PRAGMA foreign_keys = ON");
|
|
9572
|
+
} catch {}
|
|
9573
|
+
}
|
|
9564
9574
|
return results;
|
|
9565
9575
|
}
|
|
9566
9576
|
async function batchUpsertPg(target, table, columns, updateCols, primaryKeys, batch) {
|
|
@@ -9587,7 +9597,7 @@ function batchUpsertSqlite(target, table, columns, updateCols, primaryKeys, batc
|
|
|
9587
9597
|
const setClause = updateCols.length > 0 ? updateCols.map((c) => `"${c}" = EXCLUDED."${c}"`).join(", ") : `"${primaryKeys[0]}" = EXCLUDED."${primaryKeys[0]}"`;
|
|
9588
9598
|
const sql = `INSERT INTO "${table}" (${colList}) VALUES ${valuePlaceholders}
|
|
9589
9599
|
ON CONFLICT (${pkList}) DO UPDATE SET ${setClause}`;
|
|
9590
|
-
const params = batch.flatMap((row) => columns.map((c) => row[c]
|
|
9600
|
+
const params = batch.flatMap((row) => columns.map((c) => coerceForSqlite(row[c])));
|
|
9591
9601
|
target.run(sql, ...params);
|
|
9592
9602
|
}
|
|
9593
9603
|
async function batchInsertPg(target, table, columns, batch) {
|
|
@@ -9608,9 +9618,22 @@ function batchInsertSqlite(target, table, columns, batch) {
|
|
|
9608
9618
|
const colList = columns.map((c) => `"${c}"`).join(", ");
|
|
9609
9619
|
const valuePlaceholders = batch.map(() => `(${columns.map(() => "?").join(", ")})`).join(", ");
|
|
9610
9620
|
const sql = `INSERT INTO "${table}" (${colList}) VALUES ${valuePlaceholders}`;
|
|
9611
|
-
const params = batch.flatMap((row) => columns.map((c) => row[c]
|
|
9621
|
+
const params = batch.flatMap((row) => columns.map((c) => coerceForSqlite(row[c])));
|
|
9612
9622
|
target.run(sql, ...params);
|
|
9613
9623
|
}
|
|
9624
|
+
function coerceForSqlite(value) {
|
|
9625
|
+
if (value === null || value === undefined)
|
|
9626
|
+
return null;
|
|
9627
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "bigint" || typeof value === "boolean")
|
|
9628
|
+
return value;
|
|
9629
|
+
if (value instanceof Date)
|
|
9630
|
+
return value.toISOString();
|
|
9631
|
+
if (Buffer.isBuffer(value) || value instanceof Uint8Array)
|
|
9632
|
+
return value;
|
|
9633
|
+
if (typeof value === "object")
|
|
9634
|
+
return JSON.stringify(value);
|
|
9635
|
+
return String(value);
|
|
9636
|
+
}
|
|
9614
9637
|
function isAsyncAdapter(adapter) {
|
|
9615
9638
|
return adapter.constructor.name === "PgAdapterAsync" || typeof adapter.raw?.connect === "function";
|
|
9616
9639
|
}
|
package/dist/mcp/index.js
CHANGED
|
@@ -24791,6 +24791,11 @@ async function syncTransfer(source, target, options, _direction) {
|
|
|
24791
24791
|
primaryKey: pkOption
|
|
24792
24792
|
} = options;
|
|
24793
24793
|
const results = [];
|
|
24794
|
+
if (!isAsyncAdapter(target)) {
|
|
24795
|
+
try {
|
|
24796
|
+
target.run("PRAGMA foreign_keys = OFF");
|
|
24797
|
+
} catch {}
|
|
24798
|
+
}
|
|
24794
24799
|
for (let i = 0;i < tables.length; i++) {
|
|
24795
24800
|
const table = tables[i];
|
|
24796
24801
|
const result = {
|
|
@@ -24908,6 +24913,11 @@ async function syncTransfer(source, target, options, _direction) {
|
|
|
24908
24913
|
}
|
|
24909
24914
|
results.push(result);
|
|
24910
24915
|
}
|
|
24916
|
+
if (!isAsyncAdapter(target)) {
|
|
24917
|
+
try {
|
|
24918
|
+
target.run("PRAGMA foreign_keys = ON");
|
|
24919
|
+
} catch {}
|
|
24920
|
+
}
|
|
24911
24921
|
return results;
|
|
24912
24922
|
}
|
|
24913
24923
|
async function batchUpsertPg(target, table, columns, updateCols, primaryKeys, batch) {
|
|
@@ -24934,7 +24944,7 @@ function batchUpsertSqlite(target, table, columns, updateCols, primaryKeys, batc
|
|
|
24934
24944
|
const setClause = updateCols.length > 0 ? updateCols.map((c) => `"${c}" = EXCLUDED."${c}"`).join(", ") : `"${primaryKeys[0]}" = EXCLUDED."${primaryKeys[0]}"`;
|
|
24935
24945
|
const sql = `INSERT INTO "${table}" (${colList}) VALUES ${valuePlaceholders}
|
|
24936
24946
|
ON CONFLICT (${pkList}) DO UPDATE SET ${setClause}`;
|
|
24937
|
-
const params = batch.flatMap((row) => columns.map((c) => row[c]
|
|
24947
|
+
const params = batch.flatMap((row) => columns.map((c) => coerceForSqlite(row[c])));
|
|
24938
24948
|
target.run(sql, ...params);
|
|
24939
24949
|
}
|
|
24940
24950
|
async function batchInsertPg(target, table, columns, batch) {
|
|
@@ -24955,9 +24965,22 @@ function batchInsertSqlite(target, table, columns, batch) {
|
|
|
24955
24965
|
const colList = columns.map((c) => `"${c}"`).join(", ");
|
|
24956
24966
|
const valuePlaceholders = batch.map(() => `(${columns.map(() => "?").join(", ")})`).join(", ");
|
|
24957
24967
|
const sql = `INSERT INTO "${table}" (${colList}) VALUES ${valuePlaceholders}`;
|
|
24958
|
-
const params = batch.flatMap((row) => columns.map((c) => row[c]
|
|
24968
|
+
const params = batch.flatMap((row) => columns.map((c) => coerceForSqlite(row[c])));
|
|
24959
24969
|
target.run(sql, ...params);
|
|
24960
24970
|
}
|
|
24971
|
+
function coerceForSqlite(value) {
|
|
24972
|
+
if (value === null || value === undefined)
|
|
24973
|
+
return null;
|
|
24974
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "bigint" || typeof value === "boolean")
|
|
24975
|
+
return value;
|
|
24976
|
+
if (value instanceof Date)
|
|
24977
|
+
return value.toISOString();
|
|
24978
|
+
if (Buffer.isBuffer(value) || value instanceof Uint8Array)
|
|
24979
|
+
return value;
|
|
24980
|
+
if (typeof value === "object")
|
|
24981
|
+
return JSON.stringify(value);
|
|
24982
|
+
return String(value);
|
|
24983
|
+
}
|
|
24961
24984
|
function isAsyncAdapter(adapter) {
|
|
24962
24985
|
return adapter.constructor.name === "PgAdapterAsync" || typeof adapter.raw?.connect === "function";
|
|
24963
24986
|
}
|
package/dist/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAMnD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kCAAkC;IAClC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAMD;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB;AAMD;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB;
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAMnD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kCAAkC;IAClC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAMD;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB;AAMD;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB;AAkkBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,EAAE,CAKxD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKxE"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/cloud",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Shared cloud infrastructure
|
|
3
|
+
"version": "0.1.10",
|
|
4
|
+
"description": "Shared cloud infrastructure — database adapter (SQLite + PostgreSQL), sync engine, feedback system, unified dotfile config",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -42,4 +42,4 @@
|
|
|
42
42
|
"@types/pg": "^8.11.11",
|
|
43
43
|
"typescript": "^5.7.3"
|
|
44
44
|
}
|
|
45
|
-
}
|
|
45
|
+
}
|