@instawp/cli 0.0.1-beta.2 → 0.0.1-beta.21

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +203 -0
  2. package/README.md +151 -17
  3. package/dist/commands/db.d.ts +2 -0
  4. package/dist/commands/db.js +305 -0
  5. package/dist/commands/db.js.map +1 -0
  6. package/dist/commands/exec.js +62 -3
  7. package/dist/commands/exec.js.map +1 -1
  8. package/dist/commands/local.js +514 -123
  9. package/dist/commands/local.js.map +1 -1
  10. package/dist/commands/login.js +23 -7
  11. package/dist/commands/login.js.map +1 -1
  12. package/dist/commands/logs.d.ts +2 -0
  13. package/dist/commands/logs.js +239 -0
  14. package/dist/commands/logs.js.map +1 -0
  15. package/dist/commands/open.d.ts +2 -0
  16. package/dist/commands/open.js +114 -0
  17. package/dist/commands/open.js.map +1 -0
  18. package/dist/commands/sites.js +240 -2
  19. package/dist/commands/sites.js.map +1 -1
  20. package/dist/commands/sync.js +6 -3
  21. package/dist/commands/sync.js.map +1 -1
  22. package/dist/commands/versions.d.ts +2 -0
  23. package/dist/commands/versions.js +324 -0
  24. package/dist/commands/versions.js.map +1 -0
  25. package/dist/index.js +49 -8
  26. package/dist/index.js.map +1 -1
  27. package/dist/lib/local-env.d.ts +31 -0
  28. package/dist/lib/local-env.js +60 -13
  29. package/dist/lib/local-env.js.map +1 -1
  30. package/dist/lib/local-instance.d.ts +43 -0
  31. package/dist/lib/local-instance.js +60 -0
  32. package/dist/lib/local-instance.js.map +1 -0
  33. package/dist/lib/output.js +14 -1
  34. package/dist/lib/output.js.map +1 -1
  35. package/dist/lib/paths.d.ts +22 -0
  36. package/dist/lib/paths.js +41 -0
  37. package/dist/lib/paths.js.map +1 -0
  38. package/dist/lib/sftp-sync.d.ts +35 -0
  39. package/dist/lib/sftp-sync.js +290 -0
  40. package/dist/lib/sftp-sync.js.map +1 -0
  41. package/dist/lib/site-resolver.js +25 -3
  42. package/dist/lib/site-resolver.js.map +1 -1
  43. package/dist/lib/sqlite-to-mysql.d.ts +47 -0
  44. package/dist/lib/sqlite-to-mysql.js +133 -0
  45. package/dist/lib/sqlite-to-mysql.js.map +1 -0
  46. package/dist/lib/ssh-connection.d.ts +11 -0
  47. package/dist/lib/ssh-connection.js +99 -3
  48. package/dist/lib/ssh-connection.js.map +1 -1
  49. package/dist/lib/ssh-keys.js +12 -5
  50. package/dist/lib/ssh-keys.js.map +1 -1
  51. package/dist/lib/windows-binaries.d.ts +10 -0
  52. package/dist/lib/windows-binaries.js +34 -0
  53. package/dist/lib/windows-binaries.js.map +1 -0
  54. package/dist/types.d.ts +14 -0
  55. package/package.json +12 -3
  56. package/vendor/win32/NOTICE.md +31 -0
  57. package/vendor/win32/busybox.exe +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"site-resolver.js","sourceRoot":"","sources":["../../src/lib/site-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAG1C,KAAK,UAAU,aAAa,CAAC,MAAW,EAAE,EAAmB;IAC3D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;IAChC,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB;IAClD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,0CAA0C;IAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,MAAM,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACjC,KAAK,CAAC,yBAAyB,UAAU,iDAAiD,CAAC,CAAC;YAC9F,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YACpF,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,OAAO,MAAM,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,4DAA4D;YAC5D,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG;gBAAE,MAAM,GAAG,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACtE,MAAM,KAAK,GAAU,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAE1C,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACxD,OAAO,IAAI,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,2BAA2B,UAAU,kDAAkD,CAAC,CAAC;YAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,yBAAyB,UAAU,IAAI,CAAC,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;YAC/F,CAAC;YACD,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,0DAA0D;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAEnC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACtD,mDAAmD;YACnD,IAAI,KAAK,CAAC,IAAI;gBAAE,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACnD,IAAI,KAAK,CAAC,UAAU;gBAAE,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/D,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI;gBAAE,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAClE,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAS,EAAE,GAAQ;IACxC,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;QACrB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,UAAU,IAAI,EAAE;QACxE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;QACxB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;QACjC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;QACnC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,MAAM;QAClC,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,GAAG,EAAE,eAAe,IAAI,EAAE;QACnE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,EAAE;KACxD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"site-resolver.js","sourceRoot":"","sources":["../../src/lib/site-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAG1C,KAAK,UAAU,aAAa,CAAC,MAAW,EAAE,EAAmB;IAC3D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;IAChC,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,aAAa,CAAC,MAAW;IACtC,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,sDAAsD;IAC7E,MAAM,GAAG,GAAU,EAAE,CAAC;IACtB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO,IAAI,IAAI,SAAS,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACjF,MAAM,KAAK,GAAU,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC;QAC3D,IAAI,IAAI,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QAClD,IAAI,EAAE,CAAC;IACT,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB;IAClD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,0CAA0C;IAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,MAAM,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACjC,KAAK,CAAC,yBAAyB,UAAU,iDAAiD,CAAC,CAAC;YAC9F,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YACpF,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,OAAO,MAAM,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,4DAA4D;YAC5D,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG;gBAAE,MAAM,GAAG,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,IAAI,CAAC;QACH,MAAM,KAAK,GAAU,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACxD,OAAO,IAAI,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,2BAA2B,UAAU,kDAAkD,CAAC,CAAC;YAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,yBAAyB,UAAU,IAAI,CAAC,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;YAC/F,CAAC;YACD,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,0DAA0D;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAEnC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACtD,mDAAmD;YACnD,IAAI,KAAK,CAAC,IAAI;gBAAE,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACnD,IAAI,KAAK,CAAC,UAAU;gBAAE,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/D,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI;gBAAE,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAClE,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAS,EAAE,GAAQ;IACxC,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;QACrB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,UAAU,IAAI,EAAE;QACxE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;QACxB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;QACjC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;QACnC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,MAAM;QAClC,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,GAAG,EAAE,eAAe,IAAI,EAAE;QACnE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,EAAE;KACxD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Generate a MySQL dump from a WordPress Playground SQLite database so a local
3
+ * site's content can be pushed back to its MySQL cloud origin.
4
+ *
5
+ * This is the reverse of `local clone` (which converts MySQL → SQLite via the
6
+ * bundled mysql2sqlite). The hard constraint: we CANNOT reliably reconstruct a
7
+ * valid MySQL schema from the converted SQLite (the original MySQL column types
8
+ * were lost during clone). So this dump is DATA-ONLY — `TRUNCATE` + `INSERT`
9
+ * against the cloud's existing tables — and the caller must restrict it to
10
+ * tables that already exist on the cloud (so a TRUNCATE never hits a missing
11
+ * table and aborts the import). URL/serialization rewriting is intentionally
12
+ * NOT done here; the caller runs `wp search-replace` on the cloud afterwards
13
+ * (serialization-safe).
14
+ */
15
+ /** Escape a string for a single-quoted MySQL literal (≈ mysql_real_escape_string). */
16
+ export declare function escapeMysqlString(s: string): string;
17
+ /** Format a value read from better-sqlite3 as a MySQL literal. */
18
+ export declare function formatMysqlValue(v: unknown): string;
19
+ /** Quote a MySQL identifier, escaping embedded backticks. */
20
+ export declare function quoteIdent(name: string): string;
21
+ export interface DumpParams {
22
+ /** Path to the Playground SQLite file (…/wp-content/database/.ht.sqlite). */
23
+ sqlitePath: string;
24
+ /** The cloud site's real table prefix (e.g. `wp_`). Local tables are `wp_*`. */
25
+ cloudPrefix: string;
26
+ /** Full table names that exist on the cloud — only their intersection with local is dumped. */
27
+ cloudTables: Set<string>;
28
+ /** Output .sql path. */
29
+ outPath: string;
30
+ }
31
+ export interface DumpResult {
32
+ /** Local→cloud table names actually written. */
33
+ tables: {
34
+ local: string;
35
+ cloud: string;
36
+ rows: number;
37
+ }[];
38
+ /** Local `wp_*` tables skipped because no matching cloud table exists. */
39
+ skipped: string[];
40
+ totalRows: number;
41
+ }
42
+ /**
43
+ * Read every `wp_*` table from the SQLite DB whose cloud-prefixed name exists in
44
+ * `cloudTables`, and write a data-only MySQL dump (TRUNCATE + chunked INSERTs)
45
+ * to `outPath`. Returns what was written/skipped.
46
+ */
47
+ export declare function generateMysqlDump(params: DumpParams): DumpResult;
@@ -0,0 +1,133 @@
1
+ import Database from 'better-sqlite3';
2
+ import { openSync, writeSync, closeSync } from 'node:fs';
3
+ /**
4
+ * Generate a MySQL dump from a WordPress Playground SQLite database so a local
5
+ * site's content can be pushed back to its MySQL cloud origin.
6
+ *
7
+ * This is the reverse of `local clone` (which converts MySQL → SQLite via the
8
+ * bundled mysql2sqlite). The hard constraint: we CANNOT reliably reconstruct a
9
+ * valid MySQL schema from the converted SQLite (the original MySQL column types
10
+ * were lost during clone). So this dump is DATA-ONLY — `TRUNCATE` + `INSERT`
11
+ * against the cloud's existing tables — and the caller must restrict it to
12
+ * tables that already exist on the cloud (so a TRUNCATE never hits a missing
13
+ * table and aborts the import). URL/serialization rewriting is intentionally
14
+ * NOT done here; the caller runs `wp search-replace` on the cloud afterwards
15
+ * (serialization-safe).
16
+ */
17
+ /** Escape a string for a single-quoted MySQL literal (≈ mysql_real_escape_string). */
18
+ export function escapeMysqlString(s) {
19
+ return s.replace(/[\0\b\t\n\r\x1a\\'"]/g, (c) => {
20
+ switch (c) {
21
+ case '\0': return '\\0';
22
+ case '\b': return '\\b';
23
+ case '\t': return '\\t';
24
+ case '\n': return '\\n';
25
+ case '\r': return '\\r';
26
+ case '\x1a': return '\\Z';
27
+ case '\\': return '\\\\';
28
+ case "'": return "\\'";
29
+ case '"': return '\\"';
30
+ default: return c;
31
+ }
32
+ });
33
+ }
34
+ /** Format a value read from better-sqlite3 as a MySQL literal. */
35
+ export function formatMysqlValue(v) {
36
+ if (v === null || v === undefined)
37
+ return 'NULL';
38
+ if (typeof v === 'number')
39
+ return Number.isFinite(v) ? String(v) : 'NULL';
40
+ if (typeof v === 'bigint')
41
+ return v.toString();
42
+ if (typeof v === 'boolean')
43
+ return v ? '1' : '0';
44
+ if (Buffer.isBuffer(v))
45
+ return v.length ? `0x${v.toString('hex')}` : "''";
46
+ return `'${escapeMysqlString(String(v))}'`;
47
+ }
48
+ /** Quote a MySQL identifier, escaping embedded backticks. */
49
+ export function quoteIdent(name) {
50
+ return '`' + name.replace(/`/g, '``') + '`';
51
+ }
52
+ // Flush an accumulated INSERT once it grows past this (keeps under MySQL's
53
+ // default max_allowed_packet, typically 16–64 MB).
54
+ const MAX_INSERT_BYTES = 4 * 1024 * 1024;
55
+ /**
56
+ * Read every `wp_*` table from the SQLite DB whose cloud-prefixed name exists in
57
+ * `cloudTables`, and write a data-only MySQL dump (TRUNCATE + chunked INSERTs)
58
+ * to `outPath`. Returns what was written/skipped.
59
+ */
60
+ export function generateMysqlDump(params) {
61
+ const { sqlitePath, cloudPrefix, cloudTables, outPath } = params;
62
+ // Open the file first, then the DB inside the try, so a DB-open failure can't
63
+ // leak the fd and vice versa (both closed in finally).
64
+ const fd = openSync(outPath, 'w');
65
+ let db = null;
66
+ const result = { tables: [], skipped: [], totalRows: 0 };
67
+ try {
68
+ db = new Database(sqlitePath, { readonly: true });
69
+ writeSync(fd, '-- InstaWP CLI: local SQLite → MySQL data dump\n');
70
+ // Pin a sane sql_mode so our backslash escaping is always honored (a server
71
+ // default of NO_BACKSLASH_ESCAPES would otherwise corrupt/mis-parse data).
72
+ // NO_AUTO_VALUE_ON_ZERO also preserves explicit 0 in auto-increment columns.
73
+ writeSync(fd, 'SET @OLD_SQL_MODE=@@SQL_MODE;\n');
74
+ writeSync(fd, "SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO';\n");
75
+ writeSync(fd, 'SET FOREIGN_KEY_CHECKS=0;\n');
76
+ writeSync(fd, 'SET NAMES utf8mb4;\n\n');
77
+ const localTables = db
78
+ .prepare("SELECT name FROM sqlite_master WHERE type='table'")
79
+ .all()
80
+ .map((r) => r.name)
81
+ .filter((n) => n.startsWith('wp_') && !n.startsWith('sqlite_'))
82
+ .sort();
83
+ for (const local of localTables) {
84
+ const suffix = local.slice('wp_'.length);
85
+ const cloud = cloudPrefix + suffix;
86
+ if (!cloudTables.has(cloud)) {
87
+ result.skipped.push(local);
88
+ continue;
89
+ }
90
+ const cloudQ = quoteIdent(cloud);
91
+ writeSync(fd, `\n-- ${local} → ${cloud}\n`);
92
+ writeSync(fd, `TRUNCATE TABLE ${cloudQ};\n`);
93
+ // safeIntegers(true): INTEGER columns arrive as JS bigint, not number, so
94
+ // values above 2^53 (e.g. plugin-stored 64-bit IDs) aren't silently
95
+ // truncated. formatMysqlValue already emits bigint losslessly.
96
+ const stmt = db.prepare(`SELECT * FROM ${quoteIdent(local)}`).raw(true).safeIntegers(true);
97
+ const cols = stmt.columns().map((c) => quoteIdent(c.name)).join(',');
98
+ const insertHead = `INSERT INTO ${cloudQ} (${cols}) VALUES `;
99
+ let rows = 0;
100
+ let batch = [];
101
+ let batchBytes = 0;
102
+ const flush = () => {
103
+ if (batch.length === 0)
104
+ return;
105
+ writeSync(fd, insertHead + batch.join(',') + ';\n');
106
+ batch = [];
107
+ batchBytes = 0;
108
+ };
109
+ for (const row of stmt.iterate()) {
110
+ const tuple = '(' + row.map(formatMysqlValue).join(',') + ')';
111
+ // Measure UTF-8 bytes (not JS chars) against the packet budget.
112
+ const tupleBytes = Buffer.byteLength(tuple, 'utf8');
113
+ if (batch.length > 0 && batchBytes + tupleBytes > MAX_INSERT_BYTES)
114
+ flush();
115
+ batch.push(tuple);
116
+ batchBytes += tupleBytes + 1;
117
+ rows++;
118
+ }
119
+ flush();
120
+ result.tables.push({ local, cloud, rows });
121
+ result.totalRows += rows;
122
+ }
123
+ writeSync(fd, '\nSET FOREIGN_KEY_CHECKS=1;\n');
124
+ writeSync(fd, 'SET SQL_MODE=@OLD_SQL_MODE;\n');
125
+ }
126
+ finally {
127
+ if (db)
128
+ db.close();
129
+ closeSync(fd);
130
+ }
131
+ return result;
132
+ }
133
+ //# sourceMappingURL=sqlite-to-mysql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-to-mysql.js","sourceRoot":"","sources":["../../src/lib/sqlite-to-mysql.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import type { SshConnection } from '../types.js';
2
+ /** Upload a single local file to the remote via scp. Returns the exit code. */
3
+ export declare function scpUpload(conn: SshConnection, localPath: string, remotePath: string): number;
2
4
  export declare function spawnInteractiveSsh(conn: SshConnection): number;
3
5
  export declare function execViaSsh(conn: SshConnection, command: string): {
4
6
  stdout: string;
@@ -14,3 +16,12 @@ export declare function execViaSshToFile(conn: SshConnection, command: string, o
14
16
  stderr: string;
15
17
  };
16
18
  export declare function rsyncViaSsh(conn: SshConnection, source: string, dest: string, extraArgs: string[], dryRun: boolean, stream: boolean): number;
19
+ /**
20
+ * Transfer files between local and remote. On macOS/Linux this shells out to
21
+ * rsync (delta sync). On Windows it uses a pure-JS SFTP client instead —
22
+ * the bundled msys rsync.exe cannot drive native Windows OpenSSH (incompatible
23
+ * pipe/signal semantics → "connection unexpectedly closed"), so rsync-over-ssh
24
+ * is unusable there. Same call shape as rsyncViaSsh; one of source/dest is a
25
+ * `user@host:path` spec.
26
+ */
27
+ export declare function syncFiles(conn: SshConnection, source: string, dest: string, extraArgs: string[], dryRun: boolean, stream: boolean): Promise<number>;
@@ -2,7 +2,15 @@ import { spawnSync } from 'node:child_process';
2
2
  import { homedir } from 'node:os';
3
3
  import path from 'node:path';
4
4
  import { existsSync, mkdirSync, openSync, closeSync } from 'node:fs';
5
+ import { toRsyncPath } from './paths.js';
6
+ import { syncViaSftp } from './sftp-sync.js';
5
7
  const KNOWN_HOSTS = path.join(homedir(), '.instawp', 'known_hosts');
8
+ // Paths embedded into the rsync `-e ssh ...` command are parsed by rsync's
9
+ // internal shell (msys/cygwin sh on Windows), where backslashes are escapes.
10
+ // Use forward slashes throughout. The actual ssh.exe on Windows accepts both.
11
+ function toSshPath(p) {
12
+ return p.replace(/\\/g, '/');
13
+ }
6
14
  function ensureKnownHosts() {
7
15
  const dir = path.dirname(KNOWN_HOSTS);
8
16
  if (!existsSync(dir)) {
@@ -21,6 +29,28 @@ function sshArgs(conn) {
21
29
  function sshTarget(conn) {
22
30
  return `${conn.username}@${conn.host}`;
23
31
  }
32
+ /** scp args mirroring sshArgs (key, port via uppercase -P, known-hosts). */
33
+ function scpArgs(conn) {
34
+ ensureKnownHosts();
35
+ return [
36
+ '-i', conn.privateKeyPath,
37
+ '-P', String(conn.port),
38
+ '-o', 'StrictHostKeyChecking=accept-new',
39
+ '-o', `UserKnownHostsFile=${KNOWN_HOSTS}`,
40
+ ];
41
+ }
42
+ /** Upload a single local file to the remote via scp. Returns the exit code. */
43
+ export function scpUpload(conn, localPath, remotePath) {
44
+ const target = `${conn.username}@${conn.host}:${remotePath}`;
45
+ const result = spawnSync('scp', [...scpArgs(conn), localPath, target], {
46
+ stdio: ['ignore', 'pipe', 'pipe'],
47
+ encoding: 'utf-8',
48
+ });
49
+ if ((result.status ?? 1) !== 0 && result.stderr) {
50
+ console.error(result.stderr);
51
+ }
52
+ return result.status ?? 1;
53
+ }
24
54
  export function spawnInteractiveSsh(conn) {
25
55
  const result = spawnSync('ssh', [...sshArgs(conn), sshTarget(conn)], {
26
56
  stdio: 'inherit',
@@ -66,7 +96,9 @@ export function execViaSshToFile(conn, command, outputPath) {
66
96
  }
67
97
  export function rsyncViaSsh(conn, source, dest, extraArgs, dryRun, stream) {
68
98
  ensureKnownHosts();
69
- const sshCmd = `ssh -i ${conn.privateKeyPath} -p ${conn.port} -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=${KNOWN_HOSTS}`;
99
+ const keyPath = toSshPath(conn.privateKeyPath);
100
+ const knownHosts = toSshPath(KNOWN_HOSTS);
101
+ const sshCmd = `ssh -i "${keyPath}" -p ${conn.port} -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile="${knownHosts}"`;
70
102
  const args = [
71
103
  '-arz',
72
104
  '--itemize-changes',
@@ -76,9 +108,10 @@ export function rsyncViaSsh(conn, source, dest, extraArgs, dryRun, stream) {
76
108
  ...(dryRun ? ['--dry-run'] : []),
77
109
  ...extraArgs,
78
110
  '-e', sshCmd,
79
- source,
80
- dest,
111
+ toRsyncPath(source),
112
+ toRsyncPath(dest),
81
113
  ];
114
+ // rsyncViaSsh only runs on macOS/Linux now (Windows uses syncViaSftp).
82
115
  const result = spawnSync('rsync', args, {
83
116
  stdio: stream ? 'inherit' : ['pipe', 'pipe', 'pipe'],
84
117
  encoding: stream ? undefined : 'utf-8',
@@ -91,4 +124,67 @@ export function rsyncViaSsh(conn, source, dest, extraArgs, dryRun, stream) {
91
124
  }
92
125
  return result.status ?? 1;
93
126
  }
127
+ /** Strip a `user@host:` prefix, returning the remote path (or null if not remote). */
128
+ function parseRemoteSpec(spec, conn) {
129
+ const prefix = `${conn.username}@${conn.host}:`;
130
+ if (spec.startsWith(prefix))
131
+ return spec.slice(prefix.length);
132
+ const m = spec.match(/^[^@/\\]+@[^:]+:(.*)$/);
133
+ return m ? m[1] : null;
134
+ }
135
+ /**
136
+ * Transfer files between local and remote. On macOS/Linux this shells out to
137
+ * rsync (delta sync). On Windows it uses a pure-JS SFTP client instead —
138
+ * the bundled msys rsync.exe cannot drive native Windows OpenSSH (incompatible
139
+ * pipe/signal semantics → "connection unexpectedly closed"), so rsync-over-ssh
140
+ * is unusable there. Same call shape as rsyncViaSsh; one of source/dest is a
141
+ * `user@host:path` spec.
142
+ */
143
+ export async function syncFiles(conn, source, dest, extraArgs, dryRun, stream) {
144
+ if (process.platform !== 'win32') {
145
+ return rsyncViaSsh(conn, source, dest, extraArgs, dryRun, stream);
146
+ }
147
+ const destRemote = parseRemoteSpec(dest, conn);
148
+ const sourceRemote = parseRemoteSpec(source, conn);
149
+ let direction;
150
+ let localPath;
151
+ let remotePath;
152
+ if (destRemote !== null) {
153
+ direction = 'push';
154
+ localPath = source;
155
+ remotePath = destRemote;
156
+ }
157
+ else if (sourceRemote !== null) {
158
+ direction = 'pull';
159
+ localPath = dest;
160
+ remotePath = sourceRemote;
161
+ }
162
+ else {
163
+ console.error('syncFiles: could not determine remote endpoint from source/dest');
164
+ return 1;
165
+ }
166
+ // rsyncViaSsh hardcodes these defaults; mirror them for SFTP.
167
+ const excludes = ['.git', 'node_modules', '.DS_Store'];
168
+ const includes = [];
169
+ for (const a of extraArgs) {
170
+ if (a.startsWith('--exclude='))
171
+ excludes.push(a.slice('--exclude='.length));
172
+ else if (a.startsWith('--include='))
173
+ includes.push(a.slice('--include='.length));
174
+ }
175
+ return syncViaSftp(conn, {
176
+ direction,
177
+ localPath,
178
+ remotePath,
179
+ excludes,
180
+ includes,
181
+ dryRun,
182
+ onItem: (action, rel) => {
183
+ if (action === 'error')
184
+ console.error(rel);
185
+ else if (rel)
186
+ console.log(` ${action === 'sent' ? '↑' : '↓'} ${rel}`);
187
+ },
188
+ });
189
+ }
94
190
  //# sourceMappingURL=ssh-connection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-connection.js","sourceRoot":"","sources":["../../src/lib/ssh-connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssh-connection.js","sourceRoot":"","sources":["../../src/lib/ssh-connection.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { existsSync, readFileSync, mkdirSync } from 'node:fs';
1
+ import { existsSync, readFileSync, mkdirSync, unlinkSync } from 'node:fs';
2
2
  import { execSync } from 'node:child_process';
3
3
  import { homedir } from 'node:os';
4
4
  import path from 'node:path';
5
5
  import { getClient } from './api.js';
6
6
  import { getSshCache, setSshCache, clearSshCache } from './config.js';
7
- import { error, spinner } from './output.js';
7
+ import { error, info, spinner } from './output.js';
8
8
  const INSTAWP_DIR = path.join(homedir(), '.instawp');
9
9
  const CLI_KEY_PATH = path.join(INSTAWP_DIR, 'cli_key');
10
10
  const CLI_KEY_PUB_PATH = CLI_KEY_PATH + '.pub';
@@ -40,15 +40,22 @@ function parseKeyMaterial(pubContent) {
40
40
  }
41
41
  function generateCliKey() {
42
42
  ensureInstawpDir();
43
+ // Remove old key if it exists (so ssh-keygen doesn't prompt to overwrite)
43
44
  try {
44
- // Use yes to auto-overwrite if an old key exists (e.g. wrong type)
45
- execSync(`yes | ssh-keygen -t rsa -b 4096 -f "${CLI_KEY_PATH}" -N "" -C "instawp-cli"`, {
45
+ if (existsSync(CLI_KEY_PATH))
46
+ unlinkSync(CLI_KEY_PATH);
47
+ if (existsSync(CLI_KEY_PUB_PATH))
48
+ unlinkSync(CLI_KEY_PUB_PATH);
49
+ }
50
+ catch { /* ignore */ }
51
+ try {
52
+ execSync(`ssh-keygen -t rsa -b 4096 -f "${CLI_KEY_PATH}" -N "" -C "instawp-cli"`, {
46
53
  stdio: 'ignore',
47
- shell: '/bin/sh',
48
54
  });
49
55
  }
50
56
  catch {
51
57
  error('Failed to generate SSH key. Ensure ssh-keygen (OpenSSH) is installed.');
58
+ info('Windows: Settings → Apps → Optional Features → OpenSSH Client');
52
59
  process.exit(1);
53
60
  }
54
61
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-keys.js","sourceRoot":"","sources":["../../src/lib/ssh-keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssh-keys.js","sourceRoot":"","sources":["../../src/lib/ssh-keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Absolute path to a bundled BusyBox-w64 executable, which provides `awk`
3
+ * via `busybox.exe awk -f script input`. Returns null off-Windows.
4
+ *
5
+ * Note: we no longer bundle rsync.exe — Windows file transfers use a pure-JS
6
+ * SFTP client (see lib/sftp-sync.ts) because msys rsync can't drive native
7
+ * Windows OpenSSH. busybox is the only bundled binary, used by `local clone`'s
8
+ * mysql2sqlite step.
9
+ */
10
+ export declare function bundledBusybox(): string | null;
@@ -0,0 +1,34 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { resolveFromModule } from './paths.js';
4
+ /**
5
+ * Path to the bundled Windows binaries directory, resolved relative to this
6
+ * module's location at runtime. After build, this module lives in
7
+ * `dist/lib/windows-binaries.js`, so `../../vendor/win32` lands at
8
+ * `<package-root>/vendor/win32`.
9
+ *
10
+ * NOTE: directory is named `vendor/win32` (not `bin/win32`) deliberately —
11
+ * npm's handling of the `bin` field interacts badly with a same-named `bin/`
12
+ * directory on Windows during global install (the subdir gets dropped),
13
+ * so we keep our bundled tools out of the conventional `bin/` slot.
14
+ */
15
+ const WIN_BIN_DIR = resolveFromModule(import.meta.url, '..', '..', 'vendor', 'win32');
16
+ function bundled(name) {
17
+ if (process.platform !== 'win32')
18
+ return null;
19
+ const p = join(WIN_BIN_DIR, name);
20
+ return existsSync(p) ? p : null;
21
+ }
22
+ /**
23
+ * Absolute path to a bundled BusyBox-w64 executable, which provides `awk`
24
+ * via `busybox.exe awk -f script input`. Returns null off-Windows.
25
+ *
26
+ * Note: we no longer bundle rsync.exe — Windows file transfers use a pure-JS
27
+ * SFTP client (see lib/sftp-sync.ts) because msys rsync can't drive native
28
+ * Windows OpenSSH. busybox is the only bundled binary, used by `local clone`'s
29
+ * mysql2sqlite step.
30
+ */
31
+ export function bundledBusybox() {
32
+ return bundled('busybox.exe');
33
+ }
34
+ //# sourceMappingURL=windows-binaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-binaries.js","sourceRoot":"","sources":["../../src/lib/windows-binaries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAEtF,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAClC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;AAChC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -52,6 +52,16 @@ export interface SiteDetails {
52
52
  server_username?: string;
53
53
  main_domain?: string;
54
54
  }
55
+ export interface SiteVersion {
56
+ id: number;
57
+ name: string | null;
58
+ site_id: number;
59
+ status: string;
60
+ size_mb?: number;
61
+ file_size_mb?: number;
62
+ db_size_mb?: number;
63
+ created_at?: string;
64
+ }
55
65
  export interface SshKeyInfo {
56
66
  id: number;
57
67
  label: string;
@@ -81,4 +91,8 @@ export interface LocalInstance {
81
91
  wp: string;
82
92
  path: string;
83
93
  createdAt: string;
94
+ /** Cloud site this instance was cloned from — `local push` targets it by default. */
95
+ cloudSiteId?: number;
96
+ /** Display name of the origin cloud site (for messaging). */
97
+ cloudSiteName?: string;
84
98
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instawp/cli",
3
- "version": "0.0.1-beta.2",
3
+ "version": "0.0.1-beta.21",
4
4
  "description": "InstaWP CLI - Create and manage WordPress sites from the terminal",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,7 +9,9 @@
9
9
  "files": [
10
10
  "dist",
11
11
  "!dist/__tests__",
12
- "scripts/mysql2sqlite"
12
+ "scripts/mysql2sqlite",
13
+ "vendor/win32/**",
14
+ "CHANGELOG.md"
13
15
  ],
14
16
  "scripts": {
15
17
  "build": "tsc",
@@ -41,15 +43,22 @@
41
43
  "license": "MIT",
42
44
  "dependencies": {
43
45
  "axios": "^1.7.0",
46
+ "better-sqlite3": "^11.10.0",
44
47
  "chalk": "^5.3.0",
45
48
  "cli-table3": "^0.6.5",
46
49
  "commander": "^12.1.0",
47
50
  "conf": "^13.0.0",
51
+ "cross-spawn": "^7.0.6",
48
52
  "open": "^10.1.0",
49
- "ora": "^8.1.0"
53
+ "ora": "^8.1.0",
54
+ "ssh2": "^1.17.0",
55
+ "ssh2-sftp-client": "^11.0.0"
50
56
  },
51
57
  "devDependencies": {
58
+ "@types/better-sqlite3": "^7.6.13",
59
+ "@types/cross-spawn": "^6.0.6",
52
60
  "@types/node": "^20.0.0",
61
+ "@types/ssh2-sftp-client": "^9.0.6",
53
62
  "typescript": "^5.5.0",
54
63
  "vitest": "^4.0.18"
55
64
  }
@@ -0,0 +1,31 @@
1
+ # Bundled Windows binary
2
+
3
+ `busybox.exe` is bundled into the npm package so that `instawp local clone`
4
+ works on Windows without requiring the user to install `awk`.
5
+
6
+ Populate/refresh it with `scripts/fetch-windows-binaries.sh`.
7
+
8
+ ## Component and license
9
+
10
+ ### busybox.exe
11
+ - **Source**: BusyBox-w64 by Ron Yorston — https://frippery.org/busybox/
12
+ - **License**: GPL-2.0
13
+ - **Used for**: provides `awk` (invoked as `busybox.exe awk -f ...`) for
14
+ converting MySQL dumps to SQLite via the vendored `scripts/mysql2sqlite`
15
+ awk script.
16
+ - Statically linked; no external DLL dependencies.
17
+
18
+ ## Why no rsync here
19
+
20
+ Earlier betas bundled `rsync.exe` + the msys2 runtime DLLs for file sync.
21
+ That was removed: msys rsync cannot drive native Windows OpenSSH (incompatible
22
+ pipe/signal semantics → "connection unexpectedly closed"). Windows file
23
+ transfers now use a pure-JS SFTP client (`src/lib/sftp-sync.ts`) instead, which
24
+ needs no native binaries.
25
+
26
+ ## License compliance
27
+
28
+ BusyBox is GPL-2.0. Recipients of the binary are entitled to its source:
29
+ https://busybox.net/downloads/ (and the busybox-w32 port at
30
+ https://frippery.org/busybox/). Keep this NOTICE.md shipped alongside the
31
+ binary in the npm tarball.
Binary file