@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 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] ?? null));
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] ?? null));
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] ?? null));
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] ?? null));
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] ?? null));
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] ?? null));
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
  }
@@ -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;AAoiBD;;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"}
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.8",
4
- "description": "Shared cloud infrastructure \u2014 database adapter (SQLite + PostgreSQL), sync engine, feedback system, unified dotfile config",
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
+ }