movehat 0.0.9-alpha.0 → 0.0.10-alpha.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.
Files changed (42) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +16 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/test-move.d.ts.map +1 -1
  5. package/dist/commands/test-move.js +10 -40
  6. package/dist/commands/test-move.js.map +1 -1
  7. package/dist/commands/test.d.ts.map +1 -1
  8. package/dist/commands/test.js +36 -51
  9. package/dist/commands/test.js.map +1 -1
  10. package/dist/commands/update.d.ts +5 -0
  11. package/dist/commands/update.d.ts.map +1 -0
  12. package/dist/commands/update.js +121 -0
  13. package/dist/commands/update.js.map +1 -0
  14. package/dist/helpers/move-tests.d.ts +13 -0
  15. package/dist/helpers/move-tests.d.ts.map +1 -0
  16. package/dist/helpers/move-tests.js +54 -0
  17. package/dist/helpers/move-tests.js.map +1 -0
  18. package/dist/helpers/npm-registry.d.ts +19 -0
  19. package/dist/helpers/npm-registry.d.ts.map +1 -0
  20. package/dist/helpers/npm-registry.js +47 -0
  21. package/dist/helpers/npm-registry.js.map +1 -0
  22. package/dist/helpers/semver-utils.d.ts +7 -0
  23. package/dist/helpers/semver-utils.d.ts.map +1 -0
  24. package/dist/helpers/semver-utils.js +47 -0
  25. package/dist/helpers/semver-utils.js.map +1 -0
  26. package/dist/helpers/version-check.d.ts +6 -0
  27. package/dist/helpers/version-check.d.ts.map +1 -0
  28. package/dist/helpers/version-check.js +85 -0
  29. package/dist/helpers/version-check.js.map +1 -0
  30. package/dist/templates/README.md +1 -1
  31. package/dist/templates/move/Move.toml +3 -2
  32. package/package.json +1 -1
  33. package/src/cli.ts +19 -2
  34. package/src/commands/test-move.ts +10 -45
  35. package/src/commands/test.ts +37 -56
  36. package/src/commands/update.ts +148 -0
  37. package/src/helpers/move-tests.ts +68 -0
  38. package/src/helpers/npm-registry.ts +71 -0
  39. package/src/helpers/semver-utils.ts +53 -0
  40. package/src/helpers/version-check.ts +97 -0
  41. package/src/templates/README.md +1 -1
  42. package/src/templates/move/Move.toml +3 -2
package/README.md CHANGED
@@ -25,7 +25,7 @@ Before installing Movehat, ensure you have:
25
25
 
26
26
  Verify: `movement --version`
27
27
 
28
- **⚠️ Without Movement CLI:** Compilation will fail with "movement: command not found"
28
+ **IMPORTANT: Without Movement CLI:** Compilation will fail with "movement: command not found"
29
29
 
30
30
  ## Installation
31
31
 
package/dist/cli.js CHANGED
@@ -8,15 +8,18 @@ import testMoveCommand from './commands/test-move.js';
8
8
  import compileCommand from './commands/compile.js';
9
9
  import initCommand from './commands/init.js';
10
10
  import runCommand from './commands/run.js';
11
+ import updateCommand from './commands/update.js';
11
12
  import forkCreateCommand from './commands/fork/create.js';
12
13
  import forkViewResourceCommand from './commands/fork/view-resource.js';
13
14
  import forkFundCommand from './commands/fork/fund.js';
14
15
  import forkListCommand from './commands/fork/list.js';
15
16
  import forkServeCommand from './commands/fork/serve.js';
17
+ import { checkForUpdates } from './helpers/version-check.js';
16
18
  const __filename = fileURLToPath(import.meta.url);
17
19
  const __dirname = dirname(__filename);
18
20
  const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
19
21
  const version = packageJson.version;
22
+ const packageName = packageJson.name;
20
23
  /**
21
24
  * Parse and validate port number
22
25
  */
@@ -27,6 +30,13 @@ function parsePort(value) {
27
30
  }
28
31
  return port;
29
32
  }
33
+ // Check for updates at startup (skip if running update command or help)
34
+ const args = process.argv.slice(2);
35
+ const isUpdateCommand = args.includes('update');
36
+ const isHelpOnly = args.length === 0 || args.includes('-h') || args.includes('--help');
37
+ if (!isUpdateCommand && !isHelpOnly) {
38
+ checkForUpdates(version, packageName);
39
+ }
30
40
  const program = new Command();
31
41
  program
32
42
  .name('movehat')
@@ -63,8 +73,8 @@ program
63
73
  .description('Run all tests (Move + TypeScript)')
64
74
  .option('--move-only', 'Run only Move unit tests')
65
75
  .option('--ts-only', 'Run only TypeScript integration tests')
66
- .option('--watch', 'Run TypeScript tests in watch mode')
67
- .option('--filter <pattern>', 'Filter Move tests by name pattern')
76
+ .option('--watch', 'Run TypeScript tests in watch mode (implies --ts-only)')
77
+ .option('--filter <pattern>', 'Filter Move tests by name pattern (Move tests only)')
68
78
  .action((options) => testCommand(options));
69
79
  program
70
80
  .command('test:move')
@@ -77,6 +87,10 @@ program
77
87
  .description('Run TypeScript integration tests')
78
88
  .option('--watch', 'Run tests in watch mode')
79
89
  .action((options) => testCommand({ tsOnly: true, watch: options.watch }));
90
+ program
91
+ .command('update')
92
+ .description('Check for updates and upgrade to the latest version')
93
+ .action(() => updateCommand());
80
94
  // Fork commands
81
95
  const fork = program
82
96
  .command('fork')
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,eAAe,MAAM,yBAAyB,CAAC;AACtD,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,iBAAiB,MAAM,2BAA2B,CAAC;AAC1D,OAAO,uBAAuB,MAAM,kCAAkC,CAAC;AACvE,OAAO,eAAe,MAAM,yBAAyB,CAAC;AACtD,OAAO,eAAe,MAAM,yBAAyB,CAAC;AACtD,OAAO,gBAAgB,MAAM,0BAA0B,CAAC;AAExD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1F,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAEpC;;GAEG;AACH,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAC5C,MAAM,IAAI,0BAA0B,CAAC,6CAA6C,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,kBAAkB,EAAE,gDAAgD,CAAC;KAC5E,MAAM,CAAC,YAAY,EAAE,yCAAyC,CAAC;KAC/D,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,6DAA6D;IAC7D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC;IACvC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACF,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE;IACpB,WAAW,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,cAAc,CAAC,CAAC;AAE5B,OAAO;KACF,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,8DAA8D,CAAC;KAC3E,MAAM,CAAC,UAAU,CAAC,CAAC;AAExB,OAAO;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,WAAW,EAAE,uCAAuC,CAAC;KAC5D,MAAM,CAAC,SAAS,EAAE,oCAAoC,CAAC;KACvD,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/C,OAAO;KACF,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,oBAAoB,EAAE,8BAA8B,CAAC;KAC5D,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;KAC1D,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AAEnD,OAAO;KACF,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC;KAC5C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAE9E,gBAAgB;AAChB,MAAM,IAAI,GAAG,OAAO;KACf,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+CAA+C,CAAC,CAAC;AAElE,IAAI;KACC,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;KAChD,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;KACvD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;AAErD,IAAI;KACC,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;KAC/C,cAAc,CAAC,yBAAyB,EAAE,iBAAiB,CAAC;KAC5D,cAAc,CAAC,uBAAuB,EAAE,eAAe,CAAC;KACxD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3D,IAAI;KACC,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;KAC/C,cAAc,CAAC,yBAAyB,EAAE,iBAAiB,CAAC;KAC5D,cAAc,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;KACrD,MAAM,CAAC,oBAAoB,EAAE,WAAW,EAAE,4BAA4B,CAAC;KACvE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AAEnD,IAAI;KACC,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;AAErC,IAAI;KACC,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;KAC/C,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,EAAE,SAAS,EAAE,IAAI,CAAC;KACjF,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AAEpD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test-move.d.ts","sourceRoot":"","sources":["../../src/commands/test-move.ts"],"names":[],"mappings":"AAKA,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAA8B,eAAe,CAAC,OAAO,GAAE,eAAoB,iBAkD1E"}
1
+ {"version":3,"file":"test-move.d.ts","sourceRoot":"","sources":["../../src/commands/test-move.ts"],"names":[],"mappings":"AAEA,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAA8B,eAAe,CAAC,OAAO,GAAE,eAAoB,iBAkB1E"}
@@ -1,49 +1,19 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { spawn } from "child_process";
4
- import { loadUserConfig } from "../core/config.js";
1
+ import { runMoveTests } from "../helpers/move-tests.js";
5
2
  export default async function testMoveCommand(options = {}) {
6
3
  try {
7
- const userConfig = await loadUserConfig();
8
- const moveDir = path.resolve(process.cwd(), userConfig.moveDir || "./move");
9
- if (!fs.existsSync(moveDir)) {
10
- console.error(`Move directory not found: ${moveDir}`);
11
- console.error(` Update movehat.config.ts -> moveDir`);
12
- process.exit(1);
13
- }
14
4
  console.log("Running Move unit tests...\n");
15
- const args = ["move", "test", "--package-dir", moveDir];
16
- // Add filter if provided
17
- if (options.filter) {
18
- args.push("--filter", options.filter);
19
- }
20
- // Add ignore-warnings flag if provided
21
- if (options.ignoreWarnings) {
22
- args.push("--ignore-compile-warnings");
23
- }
24
- // Spawn movement CLI
25
- const child = spawn("movement", args, {
26
- stdio: "inherit",
27
- cwd: process.cwd(),
28
- });
29
- child.on("exit", (code) => {
30
- if (code === 0) {
31
- console.log("\n✓ Move tests passed");
32
- }
33
- else {
34
- console.error("\n✗ Move tests failed");
35
- }
36
- process.exit(code || 0);
37
- });
38
- child.on("error", (error) => {
39
- console.error(`Failed to run Move tests: ${error.message}`);
40
- console.error(" Make sure Movement CLI is installed");
41
- console.error(" Run: movement --version");
42
- process.exit(1);
5
+ await runMoveTests({
6
+ filter: options.filter,
7
+ ignoreWarnings: options.ignoreWarnings,
8
+ skipIfMissing: false, // Fail if no Move directory (standalone command mode)
43
9
  });
10
+ process.exit(0);
44
11
  }
45
12
  catch (err) {
46
- console.error("Move tests failed:", err.message ?? err);
13
+ console.error("\n✗ Move tests failed");
14
+ if (err.message) {
15
+ console.error(` ${err.message}`);
16
+ }
47
17
  process.exit(1);
48
18
  }
49
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test-move.js","sourceRoot":"","sources":["../../src/commands/test-move.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,eAAe,CAAC,UAA2B,EAAE;IACzE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;QAE5E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAE5C,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QAExD,yBAAyB;QACzB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,uCAAuC;QACvC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,CAAC;QAED,qBAAqB;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;YACpC,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;SACnB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"test-move.js","sourceRoot":"","sources":["../../src/commands/test-move.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAOxD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,eAAe,CAAC,UAA2B,EAAE;IACzE,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAE5C,MAAM,YAAY,CAAC;YACjB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,aAAa,EAAE,KAAK,EAAE,sDAAsD;SAC7E,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAMA,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAA8B,WAAW,CAAC,OAAO,GAAE,WAAgB,iBA2BlE"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAA8B,WAAW,CAAC,OAAO,GAAE,WAAgB,iBAyClE"}
@@ -1,18 +1,22 @@
1
1
  import { spawn } from "child_process";
2
2
  import { join } from "path";
3
3
  import { existsSync } from "fs";
4
- import { loadUserConfig } from "../core/config.js";
5
- import path from "path";
4
+ import { runMoveTests } from "../helpers/move-tests.js";
6
5
  export default async function testCommand(options = {}) {
7
6
  // Handle move-only flag
8
7
  if (options.moveOnly) {
8
+ if (options.watch) {
9
+ console.error("ERROR: --watch flag is not supported with --move-only");
10
+ console.error(" Watch mode only works with TypeScript tests");
11
+ process.exit(1);
12
+ }
9
13
  return runMoveTestsSync(options.filter);
10
14
  }
11
- // Handle ts-only flag (current behavior)
12
- if (options.tsOnly) {
15
+ // Handle ts-only flag or watch flag (watch implies ts-only)
16
+ if (options.tsOnly || options.watch) {
13
17
  return runTypeScriptTests(options.watch);
14
18
  }
15
- // Default: Run both Move and TypeScript tests
19
+ // Default: Run both Move and TypeScript tests (no watch mode)
16
20
  console.log("Running all tests...\n");
17
21
  console.log("=" + "=".repeat(60) + "\n");
18
22
  // First run Move tests (fail fast)
@@ -25,48 +29,25 @@ export default async function testCommand(options = {}) {
25
29
  console.log("\n" + "=" + "=".repeat(60));
26
30
  process.exit(1);
27
31
  }
28
- // Then run TypeScript tests
29
- return runTypeScriptTests(false);
32
+ // Then run TypeScript tests (never in watch mode for "all tests")
33
+ try {
34
+ await runTypeScriptTests(false);
35
+ console.log("\n" + "=" + "=".repeat(60));
36
+ console.log("\n✓ All tests passed!\n");
37
+ }
38
+ catch (error) {
39
+ console.error("\n" + "=" + "=".repeat(60));
40
+ const message = error instanceof Error ? error.message : String(error);
41
+ console.error(`\n${message}\n`);
42
+ process.exit(1);
43
+ }
30
44
  }
31
- function runMoveTestsSync(filter) {
32
- return new Promise(async (resolve, reject) => {
33
- console.log("1. Move Unit Tests");
34
- console.log("-" + "-".repeat(60) + "\n");
35
- try {
36
- const userConfig = await loadUserConfig();
37
- const moveDir = path.resolve(process.cwd(), userConfig.moveDir || "./move");
38
- if (!existsSync(moveDir)) {
39
- console.log("⊘ No Move directory found (./move not found)");
40
- console.log(" Skipping Move tests...\n");
41
- resolve();
42
- return;
43
- }
44
- const args = ["move", "test", "--package-dir", moveDir];
45
- if (filter) {
46
- args.push("--filter", filter);
47
- }
48
- const child = spawn("movement", args, {
49
- stdio: "inherit",
50
- cwd: process.cwd(),
51
- });
52
- child.on("exit", (code) => {
53
- if (code === 0) {
54
- console.log("\n✓ Move tests passed");
55
- resolve();
56
- }
57
- else {
58
- reject(new Error("Move tests failed"));
59
- }
60
- });
61
- child.on("error", (error) => {
62
- console.error(`Failed to run Move tests: ${error.message}`);
63
- console.error(" Make sure Movement CLI is installed");
64
- reject(error);
65
- });
66
- }
67
- catch (error) {
68
- reject(error);
69
- }
45
+ async function runMoveTestsSync(filter) {
46
+ console.log("1. Move Unit Tests");
47
+ console.log("-" + "-".repeat(60) + "\n");
48
+ return runMoveTests({
49
+ filter,
50
+ skipIfMissing: true, // Gracefully skip if no Move directory (orchestrated test mode)
70
51
  });
71
52
  }
72
53
  function runTypeScriptTests(watch = false) {
@@ -94,17 +75,21 @@ function runTypeScriptTests(watch = false) {
94
75
  ...process.env,
95
76
  },
96
77
  });
78
+ // In watch mode, Mocha never exits, so resolve immediately
79
+ if (watch) {
80
+ console.log("Watch mode active. Press Ctrl+C to exit.\n");
81
+ resolve();
82
+ return;
83
+ }
84
+ // Non-watch mode: wait for exit
97
85
  child.on("exit", (code) => {
98
86
  if (code === 0) {
99
87
  console.log("\n✓ TypeScript tests passed");
100
- console.log("\n" + "=" + "=".repeat(60));
101
- console.log("\n✓ All tests passed!\n");
102
88
  resolve();
103
89
  }
104
90
  else {
105
- console.error("\n✗ TypeScript tests failed");
106
- console.log("\n" + "=" + "=".repeat(60));
107
- process.exit(code || 1);
91
+ const exitCode = typeof code === "number" ? code : 1;
92
+ reject(new Error(`TypeScript tests failed with exit code ${exitCode}`));
108
93
  }
109
94
  });
110
95
  child.on("error", (error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,IAAI,MAAM,MAAM,CAAC;AASxB,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,WAAW,CAAC,UAAuB,EAAE;IACjE,wBAAwB;IACxB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,yCAAyC;IACzC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,8CAA8C;IAC9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAEzC,mCAAmC;IACnC,IAAI,CAAC;QACH,MAAM,gBAAgB,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,4BAA4B;IAC5B,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAe;IACvC,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAEzC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;YAE5E,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YAExD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAChC,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;gBACpC,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;aACnB,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;oBACrC,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1B,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5D,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBACxD,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAiB,KAAK;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAEzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAE7C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACjD,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE;YACnC,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;aACf;SACF,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACvC,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAClE,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Update command - checks for updates and installs the latest version
3
+ */
4
+ export default function updateCommand(): Promise<void>;
5
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AA8DA;;GAEG;AACH,wBAA8B,aAAa,kBAkF1C"}
@@ -0,0 +1,121 @@
1
+ import { spawn } from "child_process";
2
+ import { readFileSync, existsSync } from "fs";
3
+ import { join, dirname, resolve } from "path";
4
+ import { fileURLToPath } from "url";
5
+ import { homedir } from "os";
6
+ import { isNewerVersion } from "../helpers/semver-utils.js";
7
+ import { fetchLatestVersion } from "../helpers/npm-registry.js";
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ /**
11
+ * Detect which package manager to use for update
12
+ * Searches for lockfiles upward from cwd, checks user agent, or falls back to defaults
13
+ */
14
+ function detectPackageManager() {
15
+ // First, try to detect from lockfiles by searching upward
16
+ let currentDir = process.cwd();
17
+ const root = resolve("/");
18
+ while (currentDir !== root) {
19
+ if (existsSync(join(currentDir, "pnpm-lock.yaml"))) {
20
+ return "pnpm";
21
+ }
22
+ if (existsSync(join(currentDir, "yarn.lock"))) {
23
+ return "yarn";
24
+ }
25
+ if (existsSync(join(currentDir, "package-lock.json")) ||
26
+ existsSync(join(currentDir, "npm-shrinkwrap.json"))) {
27
+ return "npm";
28
+ }
29
+ const parentDir = dirname(currentDir);
30
+ if (parentDir === currentDir)
31
+ break; // Reached root
32
+ currentDir = parentDir;
33
+ }
34
+ // No lockfile found, check user agent environment variables
35
+ const userAgent = process.env.npm_config_user_agent || process.env.npm_execpath || "";
36
+ if (userAgent.includes("pnpm")) {
37
+ return "pnpm";
38
+ }
39
+ if (userAgent.includes("yarn")) {
40
+ return "yarn";
41
+ }
42
+ if (userAgent.includes("npm")) {
43
+ return "npm";
44
+ }
45
+ // Default fallback to npm for global installs
46
+ return "npm";
47
+ }
48
+ /**
49
+ * Update command - checks for updates and installs the latest version
50
+ */
51
+ export default async function updateCommand() {
52
+ try {
53
+ console.log("Checking for updates...\n");
54
+ // Read current version from package.json
55
+ const packageJsonPath = join(__dirname, "../../package.json");
56
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
57
+ const currentVersion = packageJson.version;
58
+ const packageName = packageJson.name;
59
+ console.log(`Current version: ${currentVersion}`);
60
+ // Fetch latest version from npm
61
+ const latestVersion = await fetchLatestVersion(packageName, {
62
+ throwOnError: true,
63
+ });
64
+ if (!latestVersion) {
65
+ console.error("Failed to fetch latest version from npm registry");
66
+ process.exit(1);
67
+ }
68
+ console.log(`Latest version: ${latestVersion}\n`);
69
+ // Compare versions
70
+ if (!isNewerVersion(currentVersion, latestVersion)) {
71
+ console.log("✓ You are already using the latest version!");
72
+ return;
73
+ }
74
+ console.log(`New version available: ${currentVersion} -> ${latestVersion}`);
75
+ console.log("\nUpdating movehat...\n");
76
+ // Detect package manager
77
+ const packageManager = detectPackageManager();
78
+ // Build update command based on package manager
79
+ let updateArgs;
80
+ switch (packageManager) {
81
+ case "yarn":
82
+ updateArgs = ["global", "upgrade", packageName];
83
+ break;
84
+ case "pnpm":
85
+ updateArgs = ["add", "-g", `${packageName}@latest`];
86
+ break;
87
+ case "npm":
88
+ default:
89
+ updateArgs = ["update", "-g", packageName];
90
+ break;
91
+ }
92
+ // Execute update
93
+ // Use home directory as cwd to avoid packageManager conflicts from local package.json
94
+ const child = spawn(packageManager, updateArgs, {
95
+ stdio: "inherit",
96
+ cwd: homedir() || process.cwd(),
97
+ });
98
+ child.on("exit", (code) => {
99
+ if (code === 0) {
100
+ console.log(`\n✓ Successfully updated to version ${latestVersion}!`);
101
+ process.exit(0);
102
+ }
103
+ else {
104
+ console.error("\n✗ Update failed");
105
+ console.error(` Try manually: ${packageManager} ${updateArgs.join(" ")}`);
106
+ process.exit(1);
107
+ }
108
+ });
109
+ child.on("error", (error) => {
110
+ console.error(`Failed to update: ${error.message}`);
111
+ console.error(` Try manually: ${packageManager} ${updateArgs.join(" ")}`);
112
+ process.exit(1);
113
+ });
114
+ }
115
+ catch (error) {
116
+ const message = error instanceof Error ? error.message : String(error);
117
+ console.error(`Error: ${message}`);
118
+ process.exit(1);
119
+ }
120
+ }
121
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ interface RunMoveTestsOptions {
2
+ filter?: string;
3
+ ignoreWarnings?: boolean;
4
+ skipIfMissing?: boolean;
5
+ }
6
+ /**
7
+ * Run Move unit tests using Movement CLI
8
+ * @param options Test options including filter, warnings, and skip behavior
9
+ * @returns Promise that resolves when tests complete successfully
10
+ */
11
+ export declare function runMoveTests(options?: RunMoveTestsOptions): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=move-tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move-tests.d.ts","sourceRoot":"","sources":["../../src/helpers/move-tests.ts"],"names":[],"mappings":"AAKA,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDnF"}
@@ -0,0 +1,54 @@
1
+ import { spawn } from "child_process";
2
+ import { existsSync } from "fs";
3
+ import { resolve } from "path";
4
+ import { loadUserConfig } from "../core/config.js";
5
+ /**
6
+ * Run Move unit tests using Movement CLI
7
+ * @param options Test options including filter, warnings, and skip behavior
8
+ * @returns Promise that resolves when tests complete successfully
9
+ */
10
+ export async function runMoveTests(options = {}) {
11
+ const userConfig = await loadUserConfig();
12
+ const moveDir = resolve(process.cwd(), userConfig.moveDir || "./move");
13
+ if (!existsSync(moveDir)) {
14
+ if (options.skipIfMissing) {
15
+ console.log("⊘ No Move directory found (./move not found)");
16
+ console.log(" Skipping Move tests...\n");
17
+ return;
18
+ }
19
+ else {
20
+ throw new Error(`Move directory not found: ${moveDir}\n` +
21
+ ` Update movehat.config.ts -> moveDir`);
22
+ }
23
+ }
24
+ const args = ["move", "test", "--package-dir", moveDir];
25
+ // Add dev flag for auto-detected addresses
26
+ args.push("--dev");
27
+ if (options.filter) {
28
+ args.push("--filter", options.filter);
29
+ }
30
+ if (options.ignoreWarnings) {
31
+ args.push("--ignore-compile-warnings");
32
+ }
33
+ return new Promise((resolve, reject) => {
34
+ const child = spawn("movement", args, {
35
+ stdio: "inherit",
36
+ cwd: process.cwd(),
37
+ });
38
+ child.on("exit", (code) => {
39
+ if (code === 0) {
40
+ console.log("\n✓ Move tests passed");
41
+ resolve();
42
+ }
43
+ else {
44
+ reject(new Error("Move tests failed"));
45
+ }
46
+ });
47
+ child.on("error", (error) => {
48
+ console.error(`Failed to run Move tests: ${error.message}`);
49
+ console.error(" Make sure Movement CLI is installed");
50
+ reject(error);
51
+ });
52
+ });
53
+ }
54
+ //# sourceMappingURL=move-tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move-tests.js","sourceRoot":"","sources":["../../src/helpers/move-tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQnD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAA+B,EAAE;IAClE,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;IAEvE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,6BAA6B,OAAO,IAAI;gBACxC,wCAAwC,CACzC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAExD,2CAA2C;IAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEnB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;YACpC,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;SACnB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBACrC,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface NpmRegistryResponse {
2
+ "dist-tags": {
3
+ latest: string;
4
+ [tag: string]: string;
5
+ };
6
+ versions: Record<string, unknown>;
7
+ }
8
+ export interface FetchOptions {
9
+ timeout?: number;
10
+ throwOnError?: boolean;
11
+ }
12
+ /**
13
+ * Fetch latest version from npm registry
14
+ * @param packageName - The npm package name
15
+ * @param options - Fetch options (timeout, error handling)
16
+ * @returns Latest version string, or null if failed and throwOnError is false
17
+ */
18
+ export declare function fetchLatestVersion(packageName: string, options?: FetchOptions): Promise<string | null>;
19
+ //# sourceMappingURL=npm-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-registry.d.ts","sourceRoot":"","sources":["../../src/helpers/npm-registry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgDxB"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Fetch latest version from npm registry
3
+ * @param packageName - The npm package name
4
+ * @param options - Fetch options (timeout, error handling)
5
+ * @returns Latest version string, or null if failed and throwOnError is false
6
+ */
7
+ export async function fetchLatestVersion(packageName, options = {}) {
8
+ const { timeout = 0, throwOnError = false } = options;
9
+ try {
10
+ const controller = timeout > 0 ? new AbortController() : undefined;
11
+ const timeoutId = timeout > 0 && controller
12
+ ? setTimeout(() => controller.abort(), timeout)
13
+ : undefined;
14
+ const response = await fetch(`https://registry.npmjs.org/${packageName}`, {
15
+ signal: controller?.signal,
16
+ });
17
+ if (timeoutId)
18
+ clearTimeout(timeoutId);
19
+ if (!response.ok) {
20
+ const error = new Error(`Failed to fetch package info: ${response.statusText}`);
21
+ if (throwOnError)
22
+ throw error;
23
+ return null;
24
+ }
25
+ const data = (await response.json());
26
+ // Defensive validation of registry response structure
27
+ if (!data ||
28
+ typeof data !== "object" ||
29
+ !data["dist-tags"] ||
30
+ typeof data["dist-tags"] !== "object" ||
31
+ typeof data["dist-tags"].latest !== "string") {
32
+ const error = new Error(`Invalid npm registry response: missing or malformed "dist-tags.latest" field`);
33
+ if (throwOnError)
34
+ throw error;
35
+ return null;
36
+ }
37
+ return data["dist-tags"].latest;
38
+ }
39
+ catch (error) {
40
+ if (throwOnError) {
41
+ throw new Error(`Failed to check for updates: ${error instanceof Error ? error.message : String(error)}`);
42
+ }
43
+ // Silently fail - don't interrupt user's workflow
44
+ return null;
45
+ }
46
+ }
47
+ //# sourceMappingURL=npm-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-registry.js","sourceRoot":"","sources":["../../src/helpers/npm-registry.ts"],"names":[],"mappings":"AAaA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,UAAwB,EAAE;IAE1B,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,YAAY,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,IAAI,UAAU;YACzC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC;YAC/C,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,8BAA8B,WAAW,EAAE,EAAE;YACxE,MAAM,EAAE,UAAU,EAAE,MAAM;SAC3B,CAAC,CAAC;QAEH,IAAI,SAAS;YAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,iCAAiC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAChF,IAAI,YAAY;gBAAE,MAAM,KAAK,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;QAE5D,sDAAsD;QACtD,IACE,CAAC,IAAI;YACL,OAAO,IAAI,KAAK,QAAQ;YACxB,CAAC,IAAI,CAAC,WAAW,CAAC;YAClB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ;YACrC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,QAAQ,EAC5C,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,8EAA8E,CAC/E,CAAC;YACF,IAAI,YAAY;gBAAE,MAAM,KAAK,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACzF,CAAC;QACJ,CAAC;QACD,kDAAkD;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Compare two semver versions
3
+ * Returns true if newVersion > currentVersion
4
+ * Handles variable-length versions (1.2, 1.2.3, 1.2.3.4, etc.)
5
+ */
6
+ export declare function isNewerVersion(currentVersion: string, newVersion: string): boolean;
7
+ //# sourceMappingURL=semver-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semver-utils.d.ts","sourceRoot":"","sources":["../../src/helpers/semver-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CA+ClF"}