movehat 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/__tests__/deployContract.test.d.ts +2 -0
- package/dist/__tests__/deployContract.test.d.ts.map +1 -0
- package/dist/__tests__/deployContract.test.js +368 -0
- package/dist/__tests__/deployContract.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +46 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts +24 -0
- package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts.map +1 -0
- package/dist/__tests__/fixtures/sigint-deploy-harness.js +82 -0
- package/dist/__tests__/fixtures/sigint-deploy-harness.js.map +1 -0
- package/dist/__tests__/fork/api.test.d.ts +2 -0
- package/dist/__tests__/fork/api.test.d.ts.map +1 -0
- package/dist/__tests__/fork/api.test.js +110 -0
- package/dist/__tests__/fork/api.test.js.map +1 -0
- package/dist/__tests__/harness/Harness.createLive.test.d.ts +2 -0
- package/dist/__tests__/harness/Harness.createLive.test.d.ts.map +1 -0
- package/dist/__tests__/harness/Harness.createLive.test.js +53 -0
- package/dist/__tests__/harness/Harness.createLive.test.js.map +1 -0
- package/dist/__tests__/harness/Harness.proxy.test.d.ts +2 -0
- package/dist/__tests__/harness/Harness.proxy.test.d.ts.map +1 -0
- package/dist/__tests__/harness/Harness.proxy.test.js +93 -0
- package/dist/__tests__/harness/Harness.proxy.test.js.map +1 -0
- package/dist/__tests__/harness/_fixture.d.ts +54 -0
- package/dist/__tests__/harness/_fixture.d.ts.map +1 -0
- package/dist/__tests__/harness/_fixture.js +69 -0
- package/dist/__tests__/harness/_fixture.js.map +1 -0
- package/dist/__tests__/harness/codeObject.deploy.test.d.ts +2 -0
- package/dist/__tests__/harness/codeObject.deploy.test.d.ts.map +1 -0
- package/dist/__tests__/harness/codeObject.deploy.test.js +288 -0
- package/dist/__tests__/harness/codeObject.deploy.test.js.map +1 -0
- package/dist/__tests__/harness/codeObject.upgrade.test.d.ts +2 -0
- package/dist/__tests__/harness/codeObject.upgrade.test.d.ts.map +1 -0
- package/dist/__tests__/harness/codeObject.upgrade.test.js +138 -0
- package/dist/__tests__/harness/codeObject.upgrade.test.js.map +1 -0
- package/dist/__tests__/harness/script.test.d.ts +2 -0
- package/dist/__tests__/harness/script.test.d.ts.map +1 -0
- package/dist/__tests__/harness/script.test.js +219 -0
- package/dist/__tests__/harness/script.test.js.map +1 -0
- package/dist/__tests__/harness/view.test.d.ts +2 -0
- package/dist/__tests__/harness/view.test.d.ts.map +1 -0
- package/dist/__tests__/harness/view.test.js +92 -0
- package/dist/__tests__/harness/view.test.js.map +1 -0
- package/dist/__tests__/runtime.test.d.ts +2 -0
- package/dist/__tests__/runtime.test.d.ts.map +1 -0
- package/dist/__tests__/runtime.test.js +141 -0
- package/dist/__tests__/runtime.test.js.map +1 -0
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/compile.test.d.ts +2 -0
- package/dist/commands/__tests__/compile.test.d.ts.map +1 -0
- package/dist/commands/__tests__/compile.test.js +351 -0
- package/dist/commands/__tests__/compile.test.js.map +1 -0
- package/dist/commands/__tests__/init.test.d.ts +2 -0
- package/dist/commands/__tests__/init.test.d.ts.map +1 -0
- package/dist/commands/__tests__/init.test.js +101 -0
- package/dist/commands/__tests__/init.test.js.map +1 -0
- package/dist/commands/__tests__/run.test.d.ts +2 -0
- package/dist/commands/__tests__/run.test.d.ts.map +1 -0
- package/dist/commands/__tests__/run.test.js +166 -0
- package/dist/commands/__tests__/run.test.js.map +1 -0
- package/dist/commands/__tests__/test-move.test.d.ts +2 -0
- package/dist/commands/__tests__/test-move.test.d.ts.map +1 -0
- package/dist/commands/__tests__/test-move.test.js +59 -0
- package/dist/commands/__tests__/test-move.test.js.map +1 -0
- package/dist/commands/__tests__/test.test.d.ts +2 -0
- package/dist/commands/__tests__/test.test.d.ts.map +1 -0
- package/dist/commands/__tests__/test.test.js +168 -0
- package/dist/commands/__tests__/test.test.js.map +1 -0
- package/dist/commands/__tests__/update.test.d.ts +2 -0
- package/dist/commands/__tests__/update.test.d.ts.map +1 -0
- package/dist/commands/__tests__/update.test.js +176 -0
- package/dist/commands/__tests__/update.test.js.map +1 -0
- package/dist/commands/compile.d.ts +7 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +150 -33
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/fork/__tests__/create.test.d.ts +2 -0
- package/dist/commands/fork/__tests__/create.test.d.ts.map +1 -0
- package/dist/commands/fork/__tests__/create.test.js +108 -0
- package/dist/commands/fork/__tests__/create.test.js.map +1 -0
- package/dist/commands/fork/__tests__/fund.test.d.ts +2 -0
- package/dist/commands/fork/__tests__/fund.test.d.ts.map +1 -0
- package/dist/commands/fork/__tests__/fund.test.js +72 -0
- package/dist/commands/fork/__tests__/fund.test.js.map +1 -0
- package/dist/commands/fork/__tests__/list.test.d.ts +2 -0
- package/dist/commands/fork/__tests__/list.test.d.ts.map +1 -0
- package/dist/commands/fork/__tests__/list.test.js +119 -0
- package/dist/commands/fork/__tests__/list.test.js.map +1 -0
- package/dist/commands/fork/__tests__/serve.test.d.ts +2 -0
- package/dist/commands/fork/__tests__/serve.test.d.ts.map +1 -0
- package/dist/commands/fork/__tests__/serve.test.js +97 -0
- package/dist/commands/fork/__tests__/serve.test.js.map +1 -0
- package/dist/commands/fork/__tests__/view-resource.test.d.ts +2 -0
- package/dist/commands/fork/__tests__/view-resource.test.d.ts.map +1 -0
- package/dist/commands/fork/__tests__/view-resource.test.js +77 -0
- package/dist/commands/fork/__tests__/view-resource.test.js.map +1 -0
- package/dist/commands/fork/create.d.ts +1 -1
- package/dist/commands/fork/create.d.ts.map +1 -1
- package/dist/commands/fork/create.js +3 -2
- package/dist/commands/fork/create.js.map +1 -1
- package/dist/commands/fork/fund.d.ts.map +1 -1
- package/dist/commands/fork/fund.js +15 -8
- package/dist/commands/fork/fund.js.map +1 -1
- package/dist/commands/fork/list.d.ts.map +1 -1
- package/dist/commands/fork/list.js +2 -1
- package/dist/commands/fork/list.js.map +1 -1
- package/dist/commands/fork/serve.d.ts +1 -0
- package/dist/commands/fork/serve.d.ts.map +1 -1
- package/dist/commands/fork/serve.js +4 -2
- package/dist/commands/fork/serve.js.map +1 -1
- package/dist/commands/fork/view-resource.d.ts.map +1 -1
- package/dist/commands/fork/view-resource.js +10 -5
- package/dist/commands/fork/view-resource.js.map +1 -1
- package/dist/commands/run.d.ts +15 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +50 -27
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/test-move.d.ts.map +1 -1
- package/dist/commands/test-move.js +3 -2
- package/dist/commands/test-move.js.map +1 -1
- package/dist/commands/test.js +52 -46
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +15 -13
- package/dist/commands/update.js.map +1 -1
- package/dist/core/AccountManager.d.ts +1 -1
- package/dist/core/AccountManager.d.ts.map +1 -1
- package/dist/core/AccountManager.js +20 -7
- package/dist/core/AccountManager.js.map +1 -1
- package/dist/core/Publisher.d.ts +31 -0
- package/dist/core/Publisher.d.ts.map +1 -0
- package/dist/core/Publisher.js +248 -0
- package/dist/core/Publisher.js.map +1 -0
- package/dist/core/__tests__/AccountManager.test.d.ts +2 -0
- package/dist/core/__tests__/AccountManager.test.d.ts.map +1 -0
- package/dist/core/__tests__/AccountManager.test.js +239 -0
- package/dist/core/__tests__/AccountManager.test.js.map +1 -0
- package/dist/core/__tests__/config.test.d.ts +2 -0
- package/dist/core/__tests__/config.test.d.ts.map +1 -0
- package/dist/core/__tests__/config.test.js +311 -0
- package/dist/core/__tests__/config.test.js.map +1 -0
- package/dist/core/__tests__/deployments.test.d.ts +2 -0
- package/dist/core/__tests__/deployments.test.d.ts.map +1 -0
- package/dist/core/__tests__/deployments.test.js +201 -0
- package/dist/core/__tests__/deployments.test.js.map +1 -0
- package/dist/core/__tests__/shell.test.d.ts +2 -0
- package/dist/core/__tests__/shell.test.d.ts.map +1 -0
- package/dist/core/__tests__/shell.test.js +107 -0
- package/dist/core/__tests__/shell.test.js.map +1 -0
- package/dist/core/config.d.ts +13 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +80 -11
- package/dist/core/config.js.map +1 -1
- package/dist/core/contract.d.ts +1 -1
- package/dist/core/contract.d.ts.map +1 -1
- package/dist/core/contract.js +15 -4
- package/dist/core/contract.js.map +1 -1
- package/dist/core/deployments.d.ts +2 -2
- package/dist/core/deployments.d.ts.map +1 -1
- package/dist/core/deployments.js +8 -6
- package/dist/core/deployments.js.map +1 -1
- package/dist/core/movementProfile.d.ts +34 -0
- package/dist/core/movementProfile.d.ts.map +1 -0
- package/dist/core/movementProfile.js +150 -0
- package/dist/core/movementProfile.js.map +1 -0
- package/dist/core/shell.d.ts +23 -7
- package/dist/core/shell.d.ts.map +1 -1
- package/dist/core/shell.js +32 -14
- package/dist/core/shell.js.map +1 -1
- package/dist/errors.d.ts +35 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +54 -0
- package/dist/errors.js.map +1 -1
- package/dist/fork/__tests__/manager.test.d.ts +2 -0
- package/dist/fork/__tests__/manager.test.d.ts.map +1 -0
- package/dist/fork/__tests__/manager.test.js +309 -0
- package/dist/fork/__tests__/manager.test.js.map +1 -0
- package/dist/fork/__tests__/server.test.d.ts +2 -0
- package/dist/fork/__tests__/server.test.d.ts.map +1 -0
- package/dist/fork/__tests__/server.test.js +54 -0
- package/dist/fork/__tests__/server.test.js.map +1 -0
- package/dist/fork/__tests__/storage.test.d.ts +2 -0
- package/dist/fork/__tests__/storage.test.d.ts.map +1 -0
- package/dist/fork/__tests__/storage.test.js +222 -0
- package/dist/fork/__tests__/storage.test.js.map +1 -0
- package/dist/fork/__tests__/test.test.d.ts +2 -0
- package/dist/fork/__tests__/test.test.d.ts.map +1 -0
- package/dist/fork/__tests__/test.test.js +81 -0
- package/dist/fork/__tests__/test.test.js.map +1 -0
- package/dist/fork/api.d.ts +14 -3
- package/dist/fork/api.d.ts.map +1 -1
- package/dist/fork/api.js +25 -14
- package/dist/fork/api.js.map +1 -1
- package/dist/fork/manager.d.ts +23 -9
- package/dist/fork/manager.d.ts.map +1 -1
- package/dist/fork/manager.js +79 -36
- package/dist/fork/manager.js.map +1 -1
- package/dist/fork/server.d.ts +11 -3
- package/dist/fork/server.d.ts.map +1 -1
- package/dist/fork/server.js +45 -13
- package/dist/fork/server.js.map +1 -1
- package/dist/fork/storage.d.ts +4 -4
- package/dist/fork/storage.d.ts.map +1 -1
- package/dist/fork/storage.js +7 -9
- package/dist/fork/storage.js.map +1 -1
- package/dist/fork/test.d.ts +13 -4
- package/dist/fork/test.d.ts.map +1 -1
- package/dist/fork/test.js +36 -27
- package/dist/fork/test.js.map +1 -1
- package/dist/harness/Harness.d.ts +124 -0
- package/dist/harness/Harness.d.ts.map +1 -0
- package/dist/harness/Harness.js +193 -0
- package/dist/harness/Harness.js.map +1 -0
- package/dist/harness/codeObject.d.ts +31 -0
- package/dist/harness/codeObject.d.ts.map +1 -0
- package/dist/harness/codeObject.js +271 -0
- package/dist/harness/codeObject.js.map +1 -0
- package/dist/harness/errors.d.ts +14 -0
- package/dist/harness/errors.d.ts.map +1 -0
- package/dist/harness/errors.js +22 -0
- package/dist/harness/errors.js.map +1 -0
- package/dist/harness/index.d.ts +4 -0
- package/dist/harness/index.d.ts.map +1 -0
- package/dist/harness/index.js +3 -0
- package/dist/harness/index.js.map +1 -0
- package/dist/harness/proxy.d.ts +7 -0
- package/dist/harness/proxy.d.ts.map +1 -0
- package/dist/harness/proxy.js +36 -0
- package/dist/harness/proxy.js.map +1 -0
- package/dist/harness/script.d.ts +21 -0
- package/dist/harness/script.d.ts.map +1 -0
- package/dist/harness/script.js +155 -0
- package/dist/harness/script.js.map +1 -0
- package/dist/harness/view.d.ts +22 -0
- package/dist/harness/view.d.ts.map +1 -0
- package/dist/harness/view.js +28 -0
- package/dist/harness/view.js.map +1 -0
- package/dist/helpers/__tests__/semver-utils.test.d.ts +2 -0
- package/dist/helpers/__tests__/semver-utils.test.d.ts.map +1 -0
- package/dist/helpers/__tests__/semver-utils.test.js +103 -0
- package/dist/helpers/__tests__/semver-utils.test.js.map +1 -0
- package/dist/helpers/index.d.ts +3 -2
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/helpers/index.js +2 -2
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/move-tests.d.ts +3 -3
- package/dist/helpers/move-tests.d.ts.map +1 -1
- package/dist/helpers/move-tests.js +21 -20
- package/dist/helpers/move-tests.js.map +1 -1
- package/dist/helpers/npm-registry.d.ts.map +1 -1
- package/dist/helpers/npm-registry.js +1 -3
- package/dist/helpers/npm-registry.js.map +1 -1
- package/dist/helpers/semver-utils.d.ts.map +1 -1
- package/dist/helpers/semver-utils.js +4 -3
- package/dist/helpers/semver-utils.js.map +1 -1
- package/dist/helpers/setup.d.ts.map +1 -1
- package/dist/helpers/setup.js +10 -6
- package/dist/helpers/setup.js.map +1 -1
- package/dist/helpers/setupLocalTesting.d.ts +32 -27
- package/dist/helpers/setupLocalTesting.d.ts.map +1 -1
- package/dist/helpers/setupLocalTesting.js +179 -180
- package/dist/helpers/setupLocalTesting.js.map +1 -1
- package/dist/helpers/testFixtures.d.ts +19 -53
- package/dist/helpers/testFixtures.d.ts.map +1 -1
- package/dist/helpers/testFixtures.js +89 -107
- package/dist/helpers/testFixtures.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/node/LocalNodeManager.d.ts +9 -1
- package/dist/node/LocalNodeManager.d.ts.map +1 -1
- package/dist/node/LocalNodeManager.js +75 -58
- package/dist/node/LocalNodeManager.js.map +1 -1
- package/dist/node/__tests__/LocalNodeManager.test.d.ts +2 -0
- package/dist/node/__tests__/LocalNodeManager.test.d.ts.map +1 -0
- package/dist/node/__tests__/LocalNodeManager.test.js +349 -0
- package/dist/node/__tests__/LocalNodeManager.test.js.map +1 -0
- package/dist/runtime.d.ts +12 -15
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +32 -241
- package/dist/runtime.js.map +1 -1
- package/dist/templates/README.md +1 -1
- package/dist/templates/movehat.config.ts +10 -0
- package/dist/templates/package.json +2 -1
- package/dist/templates/scripts/deploy-counter.ts +46 -38
- package/dist/templates/tests/Counter.test.ts +51 -51
- package/dist/templates/types/movehat.d.ts +6 -9
- package/dist/types/config.d.ts +8 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/fork.d.ts +7 -1
- package/dist/types/fork.d.ts.map +1 -1
- package/dist/types/harness.d.ts +166 -0
- package/dist/types/harness.d.ts.map +1 -0
- package/dist/types/harness.js +2 -0
- package/dist/types/harness.js.map +1 -0
- package/dist/types/runtime.d.ts +7 -1
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/ui/__tests__/colors.test.d.ts +2 -0
- package/dist/ui/__tests__/colors.test.d.ts.map +1 -0
- package/dist/ui/__tests__/colors.test.js +127 -0
- package/dist/ui/__tests__/colors.test.js.map +1 -0
- package/dist/ui/colors.d.ts.map +1 -1
- package/dist/ui/colors.js +6 -2
- package/dist/ui/colors.js.map +1 -1
- package/dist/ui/logger.d.ts +17 -0
- package/dist/ui/logger.d.ts.map +1 -1
- package/dist/ui/logger.js +22 -0
- package/dist/ui/logger.js.map +1 -1
- package/dist/ui/symbols.d.ts +1 -0
- package/dist/ui/symbols.d.ts.map +1 -1
- package/dist/ui/symbols.js +7 -1
- package/dist/ui/symbols.js.map +1 -1
- package/dist/utils/__tests__/address.test.d.ts +2 -0
- package/dist/utils/__tests__/address.test.d.ts.map +1 -0
- package/dist/utils/__tests__/address.test.js +70 -0
- package/dist/utils/__tests__/address.test.js.map +1 -0
- package/dist/utils/__tests__/childProcessAdapter.test.d.ts +2 -0
- package/dist/utils/__tests__/childProcessAdapter.test.d.ts.map +1 -0
- package/dist/utils/__tests__/childProcessAdapter.test.js +217 -0
- package/dist/utils/__tests__/childProcessAdapter.test.js.map +1 -0
- package/dist/utils/__tests__/runCli.test.d.ts +2 -0
- package/dist/utils/__tests__/runCli.test.d.ts.map +1 -0
- package/dist/utils/__tests__/runCli.test.js +187 -0
- package/dist/utils/__tests__/runCli.test.js.map +1 -0
- package/dist/utils/address.d.ts +33 -0
- package/dist/utils/address.d.ts.map +1 -0
- package/dist/utils/address.js +52 -0
- package/dist/utils/address.js.map +1 -0
- package/dist/utils/childProcessAdapter.d.ts +93 -0
- package/dist/utils/childProcessAdapter.d.ts.map +1 -0
- package/dist/utils/childProcessAdapter.js +109 -0
- package/dist/utils/childProcessAdapter.js.map +1 -0
- package/dist/utils/parseCliOutput.d.ts +20 -0
- package/dist/utils/parseCliOutput.d.ts.map +1 -0
- package/dist/utils/parseCliOutput.js +26 -0
- package/dist/utils/parseCliOutput.js.map +1 -0
- package/dist/utils/redact.d.ts +15 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +24 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/runCli.d.ts +24 -0
- package/dist/utils/runCli.d.ts.map +1 -0
- package/dist/utils/runCli.js +37 -0
- package/dist/utils/runCli.js.map +1 -0
- package/package.json +14 -4
- package/src/__tests__/deployContract.test.ts +429 -0
- package/src/__tests__/errors.test.ts +84 -0
- package/src/__tests__/fixtures/sigint-deploy-harness.ts +95 -0
- package/src/__tests__/fork/api.test.ts +143 -0
- package/src/__tests__/harness/Harness.createLive.test.ts +57 -0
- package/src/__tests__/harness/Harness.proxy.test.ts +115 -0
- package/src/__tests__/harness/_fixture.ts +131 -0
- package/src/__tests__/harness/codeObject.deploy.test.ts +319 -0
- package/src/__tests__/harness/codeObject.upgrade.test.ts +156 -0
- package/src/__tests__/harness/script.test.ts +245 -0
- package/src/__tests__/harness/view.test.ts +104 -0
- package/src/__tests__/runtime.test.ts +182 -0
- package/src/cli.ts +2 -1
- package/src/commands/__tests__/compile.test.ts +407 -0
- package/src/commands/__tests__/init.test.ts +125 -0
- package/src/commands/__tests__/run.test.ts +192 -0
- package/src/commands/__tests__/test-move.test.ts +81 -0
- package/src/commands/__tests__/test.test.ts +204 -0
- package/src/commands/__tests__/update.test.ts +223 -0
- package/src/commands/compile.ts +168 -32
- package/src/commands/fork/__tests__/create.test.ts +132 -0
- package/src/commands/fork/__tests__/fund.test.ts +104 -0
- package/src/commands/fork/__tests__/list.test.ts +139 -0
- package/src/commands/fork/__tests__/serve.test.ts +121 -0
- package/src/commands/fork/__tests__/view-resource.test.ts +101 -0
- package/src/commands/fork/create.ts +4 -3
- package/src/commands/fork/fund.ts +16 -9
- package/src/commands/fork/list.ts +3 -2
- package/src/commands/fork/serve.ts +6 -3
- package/src/commands/fork/view-resource.ts +11 -6
- package/src/commands/run.ts +54 -28
- package/src/commands/test-move.ts +4 -3
- package/src/commands/test.ts +56 -44
- package/src/commands/update.ts +19 -16
- package/src/core/AccountManager.ts +23 -10
- package/src/core/Publisher.ts +322 -0
- package/src/core/__tests__/AccountManager.test.ts +290 -0
- package/src/core/__tests__/config.test.ts +377 -0
- package/src/core/__tests__/deployments.test.ts +247 -0
- package/src/core/__tests__/shell.test.ts +138 -0
- package/src/core/config.ts +96 -12
- package/src/core/contract.ts +13 -4
- package/src/core/deployments.ts +13 -11
- package/src/core/movementProfile.ts +179 -0
- package/src/core/shell.ts +34 -14
- package/src/errors.ts +60 -0
- package/src/fork/__tests__/manager.test.ts +385 -0
- package/src/fork/__tests__/server.test.ts +65 -0
- package/src/fork/__tests__/storage.test.ts +281 -0
- package/src/fork/__tests__/test.test.ts +97 -0
- package/src/fork/api.ts +28 -14
- package/src/fork/manager.ts +88 -43
- package/src/fork/server.ts +53 -19
- package/src/fork/storage.ts +12 -15
- package/src/fork/test.ts +58 -32
- package/src/harness/Harness.ts +228 -0
- package/src/harness/codeObject.ts +388 -0
- package/src/harness/errors.ts +22 -0
- package/src/harness/index.ts +3 -0
- package/src/harness/proxy.ts +40 -0
- package/src/harness/script.ts +196 -0
- package/src/harness/view.ts +34 -0
- package/src/helpers/__tests__/semver-utils.test.ts +121 -0
- package/src/helpers/index.ts +2 -8
- package/src/helpers/move-tests.ts +27 -23
- package/src/helpers/npm-registry.ts +4 -3
- package/src/helpers/semver-utils.ts +4 -3
- package/src/helpers/setup.ts +9 -5
- package/src/helpers/setupLocalTesting.ts +219 -200
- package/src/helpers/testFixtures.ts +106 -118
- package/src/index.ts +9 -3
- package/src/node/LocalNodeManager.ts +87 -62
- package/src/node/__tests__/LocalNodeManager.test.ts +452 -0
- package/src/runtime.ts +33 -289
- package/src/templates/README.md +1 -1
- package/src/templates/movehat.config.ts +10 -0
- package/src/templates/package.json +2 -1
- package/src/templates/scripts/deploy-counter.ts +46 -38
- package/src/templates/tests/Counter.test.ts +51 -51
- package/src/templates/types/movehat.d.ts +6 -9
- package/src/types/config.ts +8 -0
- package/src/types/fork.ts +7 -1
- package/src/types/harness.ts +182 -0
- package/src/types/runtime.ts +11 -3
- package/src/ui/__tests__/colors.test.ts +156 -0
- package/src/ui/colors.ts +5 -2
- package/src/ui/logger.ts +22 -0
- package/src/ui/symbols.ts +7 -1
- package/src/utils/__tests__/address.test.ts +93 -0
- package/src/utils/__tests__/childProcessAdapter.test.ts +266 -0
- package/src/utils/__tests__/runCli.test.ts +240 -0
- package/src/utils/address.ts +56 -0
- package/src/utils/childProcessAdapter.ts +215 -0
- package/src/utils/parseCliOutput.ts +27 -0
- package/src/utils/redact.ts +24 -0
- package/src/utils/runCli.ts +64 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { existsSync, mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
|
|
6
|
+
const serverStart = vi.fn();
|
|
7
|
+
const serverStop = vi.fn();
|
|
8
|
+
const ForkServerCtor = vi.fn();
|
|
9
|
+
const loadUserConfigMock = vi.fn();
|
|
10
|
+
|
|
11
|
+
vi.mock("../../../fork/server.js", () => ({
|
|
12
|
+
ForkServer: class {
|
|
13
|
+
constructor(forkPath: string, port: number, host: string) {
|
|
14
|
+
ForkServerCtor(forkPath, port, host);
|
|
15
|
+
}
|
|
16
|
+
start = serverStart;
|
|
17
|
+
stop = serverStop;
|
|
18
|
+
},
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
vi.mock("../../../core/config.js", () => ({
|
|
22
|
+
loadUserConfig: loadUserConfigMock,
|
|
23
|
+
}));
|
|
24
|
+
|
|
25
|
+
const { default: forkServeCommand } = await import("../serve.js");
|
|
26
|
+
|
|
27
|
+
describe("forkServeCommand", () => {
|
|
28
|
+
let tmpCwd: string;
|
|
29
|
+
let origCwd: string;
|
|
30
|
+
let exitSpy: ReturnType<typeof vi.spyOn>;
|
|
31
|
+
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
serverStart.mockReset().mockResolvedValue(undefined);
|
|
34
|
+
serverStop.mockReset().mockResolvedValue(undefined);
|
|
35
|
+
ForkServerCtor.mockReset();
|
|
36
|
+
loadUserConfigMock.mockReset();
|
|
37
|
+
origCwd = process.cwd();
|
|
38
|
+
tmpCwd = mkdtempSync(join(tmpdir(), "movehat-forkserve-"));
|
|
39
|
+
process.chdir(tmpCwd);
|
|
40
|
+
exitSpy = vi
|
|
41
|
+
.spyOn(process, "exit")
|
|
42
|
+
.mockImplementation(((code?: number) => {
|
|
43
|
+
throw new Error(`__test_exit_${code ?? 0}__`);
|
|
44
|
+
}) as never);
|
|
45
|
+
vi.spyOn(console, "log").mockImplementation(() => undefined);
|
|
46
|
+
vi.spyOn(console, "error").mockImplementation(() => undefined);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
afterEach(() => {
|
|
50
|
+
process.chdir(origCwd);
|
|
51
|
+
if (existsSync(tmpCwd)) rmSync(tmpCwd, { recursive: true, force: true });
|
|
52
|
+
vi.restoreAllMocks();
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("happy path: starts server with explicit fork path + default port/host", async () => {
|
|
56
|
+
const forkPath = join(tmpCwd, "myfork");
|
|
57
|
+
mkdirSync(forkPath, { recursive: true });
|
|
58
|
+
writeFileSync(join(forkPath, "metadata.json"), "{}");
|
|
59
|
+
|
|
60
|
+
await forkServeCommand({ fork: forkPath });
|
|
61
|
+
|
|
62
|
+
expect(ForkServerCtor).toHaveBeenCalledWith(forkPath, 8080, "127.0.0.1");
|
|
63
|
+
expect(serverStart).toHaveBeenCalledTimes(1);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it("respects --port and --host overrides", async () => {
|
|
67
|
+
const forkPath = join(tmpCwd, "myfork");
|
|
68
|
+
mkdirSync(forkPath, { recursive: true });
|
|
69
|
+
writeFileSync(join(forkPath, "metadata.json"), "{}");
|
|
70
|
+
|
|
71
|
+
await forkServeCommand({ fork: forkPath, port: 9999, host: "0.0.0.0" });
|
|
72
|
+
|
|
73
|
+
expect(ForkServerCtor).toHaveBeenCalledWith(forkPath, 9999, "0.0.0.0");
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("resolves fork path from defaultNetwork when --fork is omitted", async () => {
|
|
77
|
+
loadUserConfigMock.mockResolvedValueOnce({
|
|
78
|
+
defaultNetwork: "testnet",
|
|
79
|
+
networks: { testnet: { url: "x", chainId: "testnet" } },
|
|
80
|
+
});
|
|
81
|
+
const expectedPath = join(tmpCwd, ".movehat", "forks", "testnet-fork");
|
|
82
|
+
mkdirSync(expectedPath, { recursive: true });
|
|
83
|
+
writeFileSync(join(expectedPath, "metadata.json"), "{}");
|
|
84
|
+
|
|
85
|
+
await forkServeCommand({});
|
|
86
|
+
|
|
87
|
+
// macOS /var → /private/var symlink — match by suffix.
|
|
88
|
+
const passedPath = ForkServerCtor.mock.calls[0]![0] as string;
|
|
89
|
+
expect(passedPath).toMatch(/\.movehat\/forks\/testnet-fork$/);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("exits 1 when the fork's metadata.json is missing", async () => {
|
|
93
|
+
const forkPath = join(tmpCwd, "missing-fork");
|
|
94
|
+
|
|
95
|
+
await expect(forkServeCommand({ fork: forkPath })).rejects.toThrow(
|
|
96
|
+
"__test_exit_1__"
|
|
97
|
+
);
|
|
98
|
+
expect(serverStart).not.toHaveBeenCalled();
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it("exits 1 when the configured network is unknown", async () => {
|
|
102
|
+
loadUserConfigMock.mockResolvedValueOnce({
|
|
103
|
+
defaultNetwork: "ghost",
|
|
104
|
+
networks: {},
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
await expect(forkServeCommand({})).rejects.toThrow("__test_exit_1__");
|
|
108
|
+
expect(serverStart).not.toHaveBeenCalled();
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("exits 1 when server.start throws", async () => {
|
|
112
|
+
const forkPath = join(tmpCwd, "myfork");
|
|
113
|
+
mkdirSync(forkPath, { recursive: true });
|
|
114
|
+
writeFileSync(join(forkPath, "metadata.json"), "{}");
|
|
115
|
+
serverStart.mockRejectedValueOnce(new Error("EADDRINUSE"));
|
|
116
|
+
|
|
117
|
+
await expect(forkServeCommand({ fork: forkPath })).rejects.toThrow(
|
|
118
|
+
"__test_exit_1__"
|
|
119
|
+
);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
|
|
3
|
+
const forkManagerLoad = vi.fn();
|
|
4
|
+
const forkManagerGetResource = vi.fn();
|
|
5
|
+
const ForkManagerCtor = vi.fn();
|
|
6
|
+
|
|
7
|
+
vi.mock("../../../fork/manager.js", () => ({
|
|
8
|
+
ForkManager: class {
|
|
9
|
+
constructor(forkPath: string) {
|
|
10
|
+
ForkManagerCtor(forkPath);
|
|
11
|
+
}
|
|
12
|
+
load = forkManagerLoad;
|
|
13
|
+
getResource = forkManagerGetResource;
|
|
14
|
+
},
|
|
15
|
+
}));
|
|
16
|
+
|
|
17
|
+
const { default: forkViewResourceCommand } = await import("../view-resource.js");
|
|
18
|
+
|
|
19
|
+
describe("forkViewResourceCommand", () => {
|
|
20
|
+
let exitSpy: ReturnType<typeof vi.spyOn>;
|
|
21
|
+
let logSpy: ReturnType<typeof vi.spyOn>;
|
|
22
|
+
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
forkManagerLoad.mockReset();
|
|
25
|
+
forkManagerGetResource.mockReset();
|
|
26
|
+
ForkManagerCtor.mockReset();
|
|
27
|
+
exitSpy = vi
|
|
28
|
+
.spyOn(process, "exit")
|
|
29
|
+
.mockImplementation(((code?: number) => {
|
|
30
|
+
throw new Error(`__test_exit_${code ?? 0}__`);
|
|
31
|
+
}) as never);
|
|
32
|
+
logSpy = vi.spyOn(console, "log").mockImplementation(() => undefined);
|
|
33
|
+
vi.spyOn(console, "error").mockImplementation(() => undefined);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
afterEach(() => {
|
|
37
|
+
vi.restoreAllMocks();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("exits 1 when --account is missing", async () => {
|
|
41
|
+
await expect(
|
|
42
|
+
forkViewResourceCommand({
|
|
43
|
+
account: "",
|
|
44
|
+
resource: "0x1::aptos_coin::AptosCoin",
|
|
45
|
+
} as never)
|
|
46
|
+
).rejects.toThrow("__test_exit_1__");
|
|
47
|
+
expect(forkManagerLoad).not.toHaveBeenCalled();
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("exits 1 when --resource is missing", async () => {
|
|
51
|
+
await expect(
|
|
52
|
+
forkViewResourceCommand({
|
|
53
|
+
account: "0xabc",
|
|
54
|
+
resource: "",
|
|
55
|
+
} as never)
|
|
56
|
+
).rejects.toThrow("__test_exit_1__");
|
|
57
|
+
expect(forkManagerLoad).not.toHaveBeenCalled();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("happy path: loads the fork, fetches the resource, JSON-pretty-prints it", async () => {
|
|
61
|
+
forkManagerGetResource.mockResolvedValueOnce({ coin: { value: "1000" } });
|
|
62
|
+
|
|
63
|
+
await forkViewResourceCommand({
|
|
64
|
+
account: "0xabc",
|
|
65
|
+
resource: "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>",
|
|
66
|
+
fork: "/tmp/fork",
|
|
67
|
+
} as never);
|
|
68
|
+
|
|
69
|
+
expect(forkManagerLoad).toHaveBeenCalledTimes(1);
|
|
70
|
+
expect(forkManagerGetResource).toHaveBeenCalledWith(
|
|
71
|
+
"0xabc",
|
|
72
|
+
"0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>"
|
|
73
|
+
);
|
|
74
|
+
// Pretty-printed JSON appears in stdout.
|
|
75
|
+
const printed = logSpy.mock.calls.flat().join(" ");
|
|
76
|
+
expect(printed).toContain("1000");
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("defaults forkPath to <cwd>/.movehat/forks/testnet-fork when --fork is omitted", async () => {
|
|
80
|
+
forkManagerGetResource.mockResolvedValueOnce({});
|
|
81
|
+
|
|
82
|
+
await forkViewResourceCommand({
|
|
83
|
+
account: "0xabc",
|
|
84
|
+
resource: "0x1::a::B",
|
|
85
|
+
} as never);
|
|
86
|
+
|
|
87
|
+
const passed = ForkManagerCtor.mock.calls[0]![0] as string;
|
|
88
|
+
expect(passed).toMatch(/\.movehat\/forks\/testnet-fork$/);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it("exits 1 when getResource throws (resource not found)", async () => {
|
|
92
|
+
forkManagerGetResource.mockRejectedValueOnce(new Error("not found"));
|
|
93
|
+
|
|
94
|
+
await expect(
|
|
95
|
+
forkViewResourceCommand({
|
|
96
|
+
account: "0xabc",
|
|
97
|
+
resource: "0x1::missing::X",
|
|
98
|
+
} as never)
|
|
99
|
+
).rejects.toThrow("__test_exit_1__");
|
|
100
|
+
});
|
|
101
|
+
});
|
|
@@ -12,7 +12,7 @@ interface ForkCreateOptions {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
* Create a local fork of a Movement
|
|
15
|
+
* Create a local fork of a Movement network
|
|
16
16
|
*
|
|
17
17
|
* This command:
|
|
18
18
|
* - Connects to the specified network RPC endpoint
|
|
@@ -100,9 +100,10 @@ export default async function forkCreateCommand(options: ForkCreateOptions = {})
|
|
|
100
100
|
logger.item(formatCommand('movehat fork list'), 2);
|
|
101
101
|
logger.newline();
|
|
102
102
|
|
|
103
|
-
} catch (error
|
|
103
|
+
} catch (error) {
|
|
104
104
|
logger.newline();
|
|
105
|
-
|
|
105
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
106
|
+
logger.error(`Error: ${msg}`);
|
|
106
107
|
logger.newline();
|
|
107
108
|
process.exit(1);
|
|
108
109
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
2
|
import { ForkManager } from '../../fork/manager.js';
|
|
3
|
+
import { logger } from '../../ui/index.js';
|
|
3
4
|
|
|
4
5
|
interface ForkFundOptions {
|
|
5
6
|
fork?: string;
|
|
@@ -30,11 +31,13 @@ export default async function forkFundCommand(options: ForkFundOptions) {
|
|
|
30
31
|
const forkPath = options.fork || join(process.cwd(), '.movehat', 'forks', 'testnet-fork');
|
|
31
32
|
const coinType = options.coinType || '0x1::aptos_coin::AptosCoin';
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
logger.newline();
|
|
35
|
+
logger.step("Funding account in fork");
|
|
36
|
+
logger.plain(` Fork: ${forkPath}`);
|
|
37
|
+
logger.plain(` Account: ${options.account}`);
|
|
38
|
+
logger.plain(` Amount: ${amount}`);
|
|
39
|
+
logger.plain(` Coin Type: ${coinType}`);
|
|
40
|
+
logger.newline();
|
|
38
41
|
|
|
39
42
|
// Load fork
|
|
40
43
|
const forkManager = new ForkManager(forkPath);
|
|
@@ -47,11 +50,15 @@ export default async function forkFundCommand(options: ForkFundOptions) {
|
|
|
47
50
|
const resourceType = `0x1::coin::CoinStore<${coinType}>`;
|
|
48
51
|
const coinStore = await forkManager.getResource(options.account, resourceType);
|
|
49
52
|
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
logger.newline();
|
|
54
|
+
logger.success("Account funded successfully!");
|
|
55
|
+
logger.plain(` New balance: ${coinStore.coin.value}`);
|
|
56
|
+
logger.newline();
|
|
52
57
|
|
|
53
|
-
} catch (error
|
|
54
|
-
|
|
58
|
+
} catch (error) {
|
|
59
|
+
logger.newline();
|
|
60
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
61
|
+
logger.newline();
|
|
55
62
|
process.exit(1);
|
|
56
63
|
}
|
|
57
64
|
}
|
|
@@ -88,9 +88,10 @@ export default async function forkListCommand() {
|
|
|
88
88
|
logger.item(formatCommand('movehat fork fund --fork <PATH> --account <ADDR> --amount <AMOUNT>'), 2);
|
|
89
89
|
logger.newline();
|
|
90
90
|
|
|
91
|
-
} catch (error
|
|
91
|
+
} catch (error) {
|
|
92
92
|
logger.newline();
|
|
93
|
-
|
|
93
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
94
|
+
logger.error(`Error: ${msg}`);
|
|
94
95
|
logger.newline();
|
|
95
96
|
process.exit(1);
|
|
96
97
|
}
|
|
@@ -6,6 +6,7 @@ import { ForkServer } from '../../fork/server.js';
|
|
|
6
6
|
interface ForkServeOptions {
|
|
7
7
|
fork?: string;
|
|
8
8
|
port?: number;
|
|
9
|
+
host?: string;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
/**
|
|
@@ -43,9 +44,10 @@ export default async function forkServeCommand(options: ForkServeOptions): Promi
|
|
|
43
44
|
|
|
44
45
|
// Get port (already validated by Commander's parsePort in cli.ts)
|
|
45
46
|
const port = options.port ?? 8080;
|
|
47
|
+
const host = options.host ?? '127.0.0.1';
|
|
46
48
|
|
|
47
49
|
// Create and start server
|
|
48
|
-
const server = new ForkServer(forkPath, port);
|
|
50
|
+
const server = new ForkServer(forkPath, port, host);
|
|
49
51
|
|
|
50
52
|
// Handle graceful shutdown (use 'once' to prevent duplicate shutdowns)
|
|
51
53
|
const shutdown = async () => {
|
|
@@ -70,8 +72,9 @@ export default async function forkServeCommand(options: ForkServeOptions): Promi
|
|
|
70
72
|
process.removeListener('SIGTERM', sigtermHandler);
|
|
71
73
|
}
|
|
72
74
|
|
|
73
|
-
} catch (error
|
|
74
|
-
|
|
75
|
+
} catch (error) {
|
|
76
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
77
|
+
console.error(`\nError starting fork server:`, msg);
|
|
75
78
|
process.exit(1);
|
|
76
79
|
}
|
|
77
80
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
2
|
import { ForkManager } from '../../fork/manager.js';
|
|
3
|
+
import { logger } from '../../ui/index.js';
|
|
3
4
|
|
|
4
5
|
interface ForkViewResourceOptions {
|
|
5
6
|
fork?: string;
|
|
@@ -23,10 +24,12 @@ export default async function forkViewResourceCommand(options: ForkViewResourceO
|
|
|
23
24
|
// Determine fork path
|
|
24
25
|
const forkPath = options.fork || join(process.cwd(), '.movehat', 'forks', 'testnet-fork');
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
logger.newline();
|
|
28
|
+
logger.step("Viewing resource from fork");
|
|
29
|
+
logger.plain(` Fork: ${forkPath}`);
|
|
30
|
+
logger.plain(` Account: ${options.account}`);
|
|
31
|
+
logger.plain(` Resource: ${options.resource}`);
|
|
32
|
+
logger.newline();
|
|
30
33
|
|
|
31
34
|
// Load fork
|
|
32
35
|
const forkManager = new ForkManager(forkPath);
|
|
@@ -39,8 +42,10 @@ export default async function forkViewResourceCommand(options: ForkViewResourceO
|
|
|
39
42
|
console.log(JSON.stringify(resource, null, 2));
|
|
40
43
|
console.log('');
|
|
41
44
|
|
|
42
|
-
} catch (error
|
|
43
|
-
|
|
45
|
+
} catch (error) {
|
|
46
|
+
logger.newline();
|
|
47
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
48
|
+
logger.newline();
|
|
44
49
|
process.exit(1);
|
|
45
50
|
}
|
|
46
51
|
}
|
package/src/commands/run.ts
CHANGED
|
@@ -1,14 +1,37 @@
|
|
|
1
|
-
import { spawn } from "child_process";
|
|
2
1
|
import { resolve, extname, dirname, join } from "path";
|
|
3
2
|
import { existsSync } from "fs";
|
|
4
3
|
import { fileURLToPath } from "url";
|
|
5
4
|
import { createRequire } from "module";
|
|
5
|
+
import { runCli } from "../utils/runCli.js";
|
|
6
|
+
import { logger } from "../ui/index.js";
|
|
7
|
+
import type { RunResult } from "../utils/childProcessAdapter.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Apply the exit policy for a child whose output was inherited by the
|
|
11
|
+
* parent. When the child dies via signal, re-raise it on the parent so
|
|
12
|
+
* shells and wrappers see the standard 128+N exit convention. Otherwise
|
|
13
|
+
* forward the numeric exit code, clamping any unexpected -1 to 1 (a -1
|
|
14
|
+
* would mask to 255 on Unix and drop signal-context).
|
|
15
|
+
*
|
|
16
|
+
* Exported so the branch is testable in isolation (a unit test against
|
|
17
|
+
* the full runCommand requires mocking fs + tsx resolution + runCli, all
|
|
18
|
+
* for 4 lines of policy).
|
|
19
|
+
*
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
export function propagateRunResultExit(result: RunResult): void {
|
|
23
|
+
if (result.signal) {
|
|
24
|
+
process.kill(process.pid, result.signal);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
process.exit(result.exitCode >= 0 ? result.exitCode : 1);
|
|
28
|
+
}
|
|
6
29
|
|
|
7
30
|
export default async function runCommand(scriptPath: string) {
|
|
8
31
|
if (!scriptPath) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
32
|
+
logger.error("No script path provided");
|
|
33
|
+
logger.plain("Usage: movehat run <script-path> [--network <name>]");
|
|
34
|
+
logger.plain("Example: movehat run scripts/deploy-counter.ts --network testnet");
|
|
12
35
|
process.exit(1);
|
|
13
36
|
}
|
|
14
37
|
|
|
@@ -16,24 +39,24 @@ export default async function runCommand(scriptPath: string) {
|
|
|
16
39
|
|
|
17
40
|
// Check if file exists
|
|
18
41
|
if (!existsSync(fullPath)) {
|
|
19
|
-
|
|
42
|
+
logger.error(`Script not found: ${scriptPath}`);
|
|
20
43
|
process.exit(1);
|
|
21
44
|
}
|
|
22
45
|
|
|
23
46
|
// Check if it's a TypeScript or JavaScript file
|
|
24
47
|
const ext = extname(fullPath);
|
|
25
48
|
if (![".ts", ".js", ".mjs"].includes(ext)) {
|
|
26
|
-
|
|
27
|
-
|
|
49
|
+
logger.error(`Unsupported file type: ${ext}`);
|
|
50
|
+
logger.plain("Supported extensions: .ts, .js, .mjs");
|
|
28
51
|
process.exit(1);
|
|
29
52
|
}
|
|
30
53
|
|
|
31
54
|
const network = process.env.MH_CLI_NETWORK;
|
|
32
|
-
|
|
55
|
+
logger.step(`Running script: ${scriptPath}`);
|
|
33
56
|
if (network) {
|
|
34
|
-
|
|
57
|
+
logger.plain(` Network: ${network}`);
|
|
35
58
|
}
|
|
36
|
-
|
|
59
|
+
logger.newline();
|
|
37
60
|
|
|
38
61
|
// Find tsx binary - try multiple locations for compatibility
|
|
39
62
|
// Uses require.resolve for cross-platform compatibility (works on Windows, macOS, Linux)
|
|
@@ -72,28 +95,31 @@ export default async function runCommand(scriptPath: string) {
|
|
|
72
95
|
}
|
|
73
96
|
|
|
74
97
|
if (!tsxPath) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
98
|
+
logger.error("tsx binary not found");
|
|
99
|
+
logger.plain(" Make sure 'tsx' is installed in your project:");
|
|
100
|
+
logger.plain(" npm install --save-dev tsx");
|
|
78
101
|
process.exit(1);
|
|
79
102
|
}
|
|
80
103
|
|
|
81
104
|
// Execute script with tsx (handles both .ts and .js files)
|
|
82
|
-
// Using 'node' to execute tsx for cross-platform compatibility
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
105
|
+
// Using 'node' to execute tsx for cross-platform compatibility.
|
|
106
|
+
try {
|
|
107
|
+
const result = await runCli(
|
|
108
|
+
{
|
|
109
|
+
command: "node",
|
|
110
|
+
args: [tsxPath, fullPath],
|
|
111
|
+
env: {
|
|
112
|
+
...process.env,
|
|
113
|
+
// MH_CLI_NETWORK is already set by the CLI hook
|
|
114
|
+
},
|
|
115
|
+
inheritStdio: true,
|
|
116
|
+
},
|
|
117
|
+
{ throwOnNonZeroExit: false }
|
|
118
|
+
);
|
|
94
119
|
|
|
95
|
-
|
|
96
|
-
|
|
120
|
+
propagateRunResultExit(result);
|
|
121
|
+
} catch (error) {
|
|
122
|
+
logger.error(`Failed to execute script: ${(error as Error).message}`);
|
|
97
123
|
process.exit(1);
|
|
98
|
-
}
|
|
124
|
+
}
|
|
99
125
|
}
|
|
@@ -16,10 +16,11 @@ export default async function testMoveCommand(options: TestMoveOptions = {}) {
|
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
process.exit(0);
|
|
19
|
-
} catch (err
|
|
19
|
+
} catch (err) {
|
|
20
20
|
console.error("\n✗ Move tests failed");
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
22
|
+
if (msg) {
|
|
23
|
+
console.error(` ${msg}`);
|
|
23
24
|
}
|
|
24
25
|
process.exit(1);
|
|
25
26
|
}
|
package/src/commands/test.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { spawn } from "child_process";
|
|
2
1
|
import { join } from "path";
|
|
3
2
|
import { existsSync } from "fs";
|
|
4
3
|
import prompts from "prompts";
|
|
5
4
|
import { runMoveTests } from "../helpers/move-tests.js";
|
|
6
5
|
import { logger, colors, symbols } from "../ui/index.js";
|
|
6
|
+
import { runCli } from "../utils/runCli.js";
|
|
7
7
|
|
|
8
8
|
interface TestOptions {
|
|
9
9
|
move?: boolean;
|
|
@@ -194,57 +194,69 @@ async function runAllTests(filter?: string): Promise<void> {
|
|
|
194
194
|
/**
|
|
195
195
|
* Run TypeScript tests using Mocha
|
|
196
196
|
*/
|
|
197
|
-
function runTypeScriptTests(watch: boolean = false): Promise<void> {
|
|
198
|
-
|
|
199
|
-
const testDir = join(process.cwd(), "tests");
|
|
197
|
+
async function runTypeScriptTests(watch: boolean = false): Promise<void> {
|
|
198
|
+
const testDir = join(process.cwd(), "tests");
|
|
200
199
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
}
|
|
200
|
+
if (!existsSync(testDir)) {
|
|
201
|
+
console.log(`${colors.muted(symbols.info)} No TypeScript tests found ${colors.muted("(tests/ directory not found)")}`);
|
|
202
|
+
console.log(` ${colors.muted("Skipping TypeScript tests...")}`);
|
|
203
|
+
logger.newline();
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
208
206
|
|
|
209
|
-
|
|
207
|
+
const mochaPath = join(process.cwd(), "node_modules", ".bin", "mocha");
|
|
210
208
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}
|
|
209
|
+
if (!existsSync(mochaPath)) {
|
|
210
|
+
logger.error("Mocha not found in project dependencies");
|
|
211
|
+
console.log(` ${colors.muted("Install it with:")} ${colors.info("npm install --save-dev mocha")}`);
|
|
212
|
+
throw new Error("Mocha not found");
|
|
213
|
+
}
|
|
217
214
|
|
|
218
|
-
|
|
215
|
+
const args = watch ? ["--watch"] : [];
|
|
219
216
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
217
|
+
// Watch mode: Mocha never exits. We fire-and-forget runCli so it owns the
|
|
218
|
+
// terminal until the user Ctrl+Cs the parent (which kills the child via
|
|
219
|
+
// inherited stdio). Attach .catch so a spawn-time failure doesn't become
|
|
220
|
+
// an unhandled rejection.
|
|
221
|
+
if (watch) {
|
|
222
|
+
runCli(
|
|
223
|
+
{
|
|
224
|
+
command: mochaPath,
|
|
225
|
+
args,
|
|
226
|
+
env: { ...process.env },
|
|
227
|
+
inheritStdio: true,
|
|
224
228
|
},
|
|
229
|
+
{ throwOnNonZeroExit: false }
|
|
230
|
+
).catch((error) => {
|
|
231
|
+
logger.error(`Mocha watch crashed: ${(error as Error).message}`);
|
|
232
|
+
process.exit(1);
|
|
225
233
|
});
|
|
226
234
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
resolve();
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
235
|
+
console.log(`${colors.info(symbols.info)} Watch mode active. Press Ctrl+C to exit.`);
|
|
236
|
+
logger.newline();
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
234
239
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
240
|
+
// Non-watch mode: await the run, surface the exit code as a thrown error
|
|
241
|
+
// so the orchestrator above can summarize the failure.
|
|
242
|
+
let result;
|
|
243
|
+
try {
|
|
244
|
+
result = await runCli(
|
|
245
|
+
{
|
|
246
|
+
command: mochaPath,
|
|
247
|
+
args,
|
|
248
|
+
env: { ...process.env },
|
|
249
|
+
inheritStdio: true,
|
|
250
|
+
},
|
|
251
|
+
{ throwOnNonZeroExit: false }
|
|
252
|
+
);
|
|
253
|
+
} catch (error) {
|
|
254
|
+
logger.error(`Failed to run TypeScript tests: ${(error as Error).message}`);
|
|
255
|
+
throw error;
|
|
256
|
+
}
|
|
244
257
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
});
|
|
258
|
+
if (result.exitCode === 0) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
throw new Error(`TypeScript tests failed with exit code ${result.exitCode}`);
|
|
250
262
|
}
|