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,215 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import type { Readable, Writable } from 'node:stream';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Injectable abstraction over `child_process.spawn`.
|
|
6
|
+
*
|
|
7
|
+
* Tests inject a fake adapter; production code uses `defaultChildProcessAdapter`.
|
|
8
|
+
* Higher-level helpers (see `runCli`) wrap this with redaction and error handling.
|
|
9
|
+
*
|
|
10
|
+
* Two affordances:
|
|
11
|
+
* - `run` for one-shot commands whose stdout/stderr fit in memory.
|
|
12
|
+
* - `spawn` for long-running children where the caller wants to stream
|
|
13
|
+
* output incrementally and decide when to kill the process.
|
|
14
|
+
*/
|
|
15
|
+
export interface ChildProcessAdapter {
|
|
16
|
+
run(input: RunInput): Promise<RunResult>;
|
|
17
|
+
spawn(input: SpawnInput): SpawnedProcess;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface RunInput {
|
|
21
|
+
command: string;
|
|
22
|
+
args: readonly string[];
|
|
23
|
+
cwd?: string;
|
|
24
|
+
env?: NodeJS.ProcessEnv;
|
|
25
|
+
stdin?: string;
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
signal?: AbortSignal;
|
|
28
|
+
/**
|
|
29
|
+
* When `true`, the child inherits the parent's stdio (stdout, stderr,
|
|
30
|
+
* stdin go straight to the terminal). The resulting `RunResult.stdout`
|
|
31
|
+
* and `RunResult.stderr` will be empty strings because nothing is
|
|
32
|
+
* captured. Useful for interactive commands like `mocha`, `tsx`, or
|
|
33
|
+
* `pnpm install` where the user expects to see live output.
|
|
34
|
+
*
|
|
35
|
+
* If `inheritStdio` is `true`, `stdin` on this input is ignored — the
|
|
36
|
+
* child reads directly from the parent's stdin.
|
|
37
|
+
*
|
|
38
|
+
* Default: `false`.
|
|
39
|
+
*/
|
|
40
|
+
inheritStdio?: boolean;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface RunResult {
|
|
44
|
+
/**
|
|
45
|
+
* Numeric exit code from the child. `-1` when the child was terminated by
|
|
46
|
+
* a signal (no numeric exit code available) — in that case `signal` is
|
|
47
|
+
* populated.
|
|
48
|
+
*/
|
|
49
|
+
exitCode: number;
|
|
50
|
+
stdout: string;
|
|
51
|
+
stderr: string;
|
|
52
|
+
/**
|
|
53
|
+
* Populated when the child died from a signal (e.g. external abort, kill
|
|
54
|
+
* during shutdown). `undefined` for normal exits.
|
|
55
|
+
*/
|
|
56
|
+
signal?: NodeJS.Signals;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Input for `spawn()`. Mirrors the subset of `RunInput` that applies to
|
|
61
|
+
* long-running children: no `stdin`, no `timeoutMs`, no `signal`. Callers
|
|
62
|
+
* control the lifecycle via the returned `SpawnedProcess`.
|
|
63
|
+
*/
|
|
64
|
+
export interface SpawnInput {
|
|
65
|
+
command: string;
|
|
66
|
+
args: readonly string[];
|
|
67
|
+
cwd?: string;
|
|
68
|
+
env?: NodeJS.ProcessEnv;
|
|
69
|
+
/**
|
|
70
|
+
* `'pipe'` (default) makes stdout/stderr/stdin streams available on the
|
|
71
|
+
* returned `SpawnedProcess`. `'ignore'` silences the child entirely
|
|
72
|
+
* (streams are `null`). For `'inherit'`, use `run` with `inheritStdio: true`
|
|
73
|
+
* instead — the spawn handle isn't useful when the parent owns stdio.
|
|
74
|
+
*/
|
|
75
|
+
stdio?: 'pipe' | 'ignore';
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Handle returned by `spawn()`. Callers can listen on streams, kill the
|
|
80
|
+
* process, or await `exited` for the final exit code and signal.
|
|
81
|
+
*/
|
|
82
|
+
export interface SpawnedProcess {
|
|
83
|
+
pid: number | undefined;
|
|
84
|
+
stdout: Readable | null;
|
|
85
|
+
stderr: Readable | null;
|
|
86
|
+
stdin: Writable | null;
|
|
87
|
+
kill(signal?: NodeJS.Signals): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Resolves once when the child exits, regardless of how the caller
|
|
90
|
+
* triggered it (natural exit, `kill`, or process death). Safe to await
|
|
91
|
+
* multiple times.
|
|
92
|
+
*/
|
|
93
|
+
exited: Promise<{ code: number | null; signal: NodeJS.Signals | null }>;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
|
|
97
|
+
|
|
98
|
+
class DefaultChildProcessAdapter implements ChildProcessAdapter {
|
|
99
|
+
run(input: RunInput): Promise<RunResult> {
|
|
100
|
+
// Skip the default 5-minute timeout when the caller wires stdio
|
|
101
|
+
// through to the terminal — interactive sessions (mocha, tsx scripts,
|
|
102
|
+
// `movement move test`, `pnpm install`) routinely exceed 5 minutes and
|
|
103
|
+
// SIGTERM'ing them silently is a regression vs the direct-spawn code
|
|
104
|
+
// these callers used before M1.3a. An explicitly-passed `timeoutMs`
|
|
105
|
+
// is always honored, regardless of `inheritStdio`.
|
|
106
|
+
const timeoutMs =
|
|
107
|
+
input.timeoutMs ?? (input.inheritStdio ? undefined : DEFAULT_TIMEOUT_MS);
|
|
108
|
+
|
|
109
|
+
return new Promise<RunResult>((resolve, reject) => {
|
|
110
|
+
const child = spawn(input.command, [...input.args], {
|
|
111
|
+
cwd: input.cwd,
|
|
112
|
+
env: input.env ?? process.env,
|
|
113
|
+
stdio: input.inheritStdio ? 'inherit' : ['pipe', 'pipe', 'pipe'],
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
const stdoutChunks: Buffer[] = [];
|
|
117
|
+
const stderrChunks: Buffer[] = [];
|
|
118
|
+
|
|
119
|
+
// Streams are null when stdio is 'inherit'; the `?.` covers that.
|
|
120
|
+
child.stdout?.on('data', (chunk: Buffer) => stdoutChunks.push(chunk));
|
|
121
|
+
child.stderr?.on('data', (chunk: Buffer) => stderrChunks.push(chunk));
|
|
122
|
+
|
|
123
|
+
let timeoutHandle: NodeJS.Timeout | undefined;
|
|
124
|
+
const clearTimer = () => {
|
|
125
|
+
if (timeoutHandle) clearTimeout(timeoutHandle);
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
if (timeoutMs !== undefined) {
|
|
129
|
+
timeoutHandle = setTimeout(() => {
|
|
130
|
+
child.kill('SIGTERM');
|
|
131
|
+
reject(new Error(`Command timed out after ${timeoutMs}ms: ${input.command}`));
|
|
132
|
+
}, timeoutMs);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const onAbort = () => {
|
|
136
|
+
child.kill('SIGTERM');
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
if (input.signal) {
|
|
140
|
+
if (input.signal.aborted) {
|
|
141
|
+
clearTimer();
|
|
142
|
+
child.kill('SIGTERM');
|
|
143
|
+
reject(new Error('Command aborted before start'));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
input.signal.addEventListener('abort', onAbort, { once: true });
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
child.on('error', (err) => {
|
|
150
|
+
clearTimer();
|
|
151
|
+
input.signal?.removeEventListener('abort', onAbort);
|
|
152
|
+
reject(err);
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
child.on('close', (code, signal) => {
|
|
156
|
+
clearTimer();
|
|
157
|
+
input.signal?.removeEventListener('abort', onAbort);
|
|
158
|
+
const result: RunResult = {
|
|
159
|
+
exitCode: code !== null ? code : -1,
|
|
160
|
+
stdout: Buffer.concat(stdoutChunks).toString('utf8'),
|
|
161
|
+
stderr: Buffer.concat(stderrChunks).toString('utf8'),
|
|
162
|
+
};
|
|
163
|
+
if (signal) {
|
|
164
|
+
result.signal = signal;
|
|
165
|
+
}
|
|
166
|
+
resolve(result);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
// Under inheritStdio, child.stdin is null and the parent's stdin
|
|
170
|
+
// is wired through; we just skip the close call. Otherwise, end()
|
|
171
|
+
// either with the provided string or empty to close stdin cleanly.
|
|
172
|
+
if (!input.inheritStdio) {
|
|
173
|
+
if (input.stdin !== undefined) {
|
|
174
|
+
child.stdin?.end(input.stdin);
|
|
175
|
+
} else {
|
|
176
|
+
child.stdin?.end();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
spawn(input: SpawnInput): SpawnedProcess {
|
|
183
|
+
const stdio = input.stdio ?? 'pipe';
|
|
184
|
+
const child = spawn(input.command, [...input.args], {
|
|
185
|
+
cwd: input.cwd,
|
|
186
|
+
env: input.env ?? process.env,
|
|
187
|
+
stdio,
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
// `exited` must settle whether the child dies via natural exit, kill,
|
|
191
|
+
// or a spawn-time `error` (e.g. ENOENT). Both events resolve once;
|
|
192
|
+
// a settled guard prevents double-resolve if both happen to fire.
|
|
193
|
+
const exited = new Promise<{ code: number | null; signal: NodeJS.Signals | null }>((resolve) => {
|
|
194
|
+
let settled = false;
|
|
195
|
+
const finish = (code: number | null, signal: NodeJS.Signals | null) => {
|
|
196
|
+
if (settled) return;
|
|
197
|
+
settled = true;
|
|
198
|
+
resolve({ code, signal });
|
|
199
|
+
};
|
|
200
|
+
child.on('exit', (code, signal) => finish(code, signal));
|
|
201
|
+
child.on('error', () => finish(null, null));
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
return {
|
|
205
|
+
pid: child.pid,
|
|
206
|
+
stdout: child.stdout,
|
|
207
|
+
stderr: child.stderr,
|
|
208
|
+
stdin: child.stdin,
|
|
209
|
+
kill: (signal?: NodeJS.Signals) => child.kill(signal),
|
|
210
|
+
exited,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export const defaultChildProcessAdapter: ChildProcessAdapter = new DefaultChildProcessAdapter();
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for extracting fields out of Movement CLI stdout / stderr.
|
|
3
|
+
*
|
|
4
|
+
* @internal — not exported from `src/index.ts`.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Extract the transaction hash from a `movement` CLI subcommand's stdout.
|
|
9
|
+
*
|
|
10
|
+
* Tries the context-bearing pattern first (`transaction hash: 0x…`,
|
|
11
|
+
* `txn hash: 0x…`, `hash: 0x…`) and falls back to any 64-char hex
|
|
12
|
+
* literal in the buffer. Returns `undefined` if no candidate matches.
|
|
13
|
+
*
|
|
14
|
+
* Shared by `core/Publisher.ts` (publish), `harness/codeObject.ts`
|
|
15
|
+
* (deploy-object / upgrade-object), and `harness/script.ts`
|
|
16
|
+
* (run-script). All three CLI subcommands emit the txHash in the same
|
|
17
|
+
* shape — keep this helper as the single source of truth so a future
|
|
18
|
+
* CLI-format change is a one-line fix.
|
|
19
|
+
*/
|
|
20
|
+
export function parseTxHash(stdout: string): string | undefined {
|
|
21
|
+
const withContext = stdout.match(
|
|
22
|
+
/(?:transaction\s*(?:hash)?|txn\s*(?:hash)?|hash):\s*(0x[a-fA-F0-9]{64})\b/i
|
|
23
|
+
);
|
|
24
|
+
if (withContext?.[1]) return withContext[1];
|
|
25
|
+
const fallback = stdout.match(/\b(0x[a-fA-F0-9]{64})\b/);
|
|
26
|
+
return fallback?.[1];
|
|
27
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Patterns that match well-known secret shapes Movement tools emit on
|
|
3
|
+
* stderr / stdout / CLI arguments. Each match is replaced with
|
|
4
|
+
* `***REDACTED***` by `redactSecrets`.
|
|
5
|
+
*
|
|
6
|
+
* The labelled pattern (second entry) intentionally accepts bare `priv` and
|
|
7
|
+
* `key` prefixes. Over-redaction is fine; missing a real key is not.
|
|
8
|
+
*/
|
|
9
|
+
export const SECRET_PATTERNS: readonly RegExp[] = [
|
|
10
|
+
/ed25519-priv-0x[0-9a-fA-F]{64}/g,
|
|
11
|
+
/(private[_-]?key|priv[_-]?key|priv|key)\s*[:=]\s*0x[0-9a-fA-F]{32,}/gi,
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Replaces every match of every known secret pattern with `***REDACTED***`.
|
|
16
|
+
* Idempotent: running it on already-redacted text is a no-op.
|
|
17
|
+
*/
|
|
18
|
+
export function redactSecrets(text: string): string {
|
|
19
|
+
let out = text;
|
|
20
|
+
for (const pattern of SECRET_PATTERNS) {
|
|
21
|
+
out = out.replace(pattern, '***REDACTED***');
|
|
22
|
+
}
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { CliExecutionError } from '../errors.js';
|
|
2
|
+
import {
|
|
3
|
+
defaultChildProcessAdapter,
|
|
4
|
+
type ChildProcessAdapter,
|
|
5
|
+
type RunInput,
|
|
6
|
+
type RunResult,
|
|
7
|
+
} from './childProcessAdapter.js';
|
|
8
|
+
import { redactSecrets } from './redact.js';
|
|
9
|
+
|
|
10
|
+
export { redactSecrets } from './redact.js';
|
|
11
|
+
|
|
12
|
+
const STDOUT_PREVIEW_CHARS = 2000;
|
|
13
|
+
|
|
14
|
+
export interface RunCliOptions {
|
|
15
|
+
/** Override the child-process adapter (defaults to spawn-based). */
|
|
16
|
+
adapter?: ChildProcessAdapter | undefined;
|
|
17
|
+
/** When true (default), throw `CliExecutionError` on non-zero exit. */
|
|
18
|
+
throwOnNonZeroExit?: boolean | undefined;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Spawns a CLI command through the injectable adapter, redacts well-known
|
|
23
|
+
* secret shapes from stdout and stderr before returning, and throws
|
|
24
|
+
* `CliExecutionError` (with already-redacted payloads) on non-zero exits.
|
|
25
|
+
*
|
|
26
|
+
* Callers that need to inspect raw output should set `throwOnNonZeroExit:false`
|
|
27
|
+
* and consume the returned `RunResult` directly — fields are still redacted.
|
|
28
|
+
*
|
|
29
|
+
* Pass `input.inheritStdio: true` for interactive commands (mocha, tsx,
|
|
30
|
+
* package managers) where the user expects to see live output. Under that
|
|
31
|
+
* flag, `stdout` and `stderr` in the returned `RunResult` are empty strings
|
|
32
|
+
* (and so is `stdoutPreview` on any `CliExecutionError`), since the child
|
|
33
|
+
* writes directly to the terminal rather than to a captured buffer.
|
|
34
|
+
*/
|
|
35
|
+
export async function runCli(
|
|
36
|
+
input: RunInput,
|
|
37
|
+
options: RunCliOptions = {}
|
|
38
|
+
): Promise<RunResult> {
|
|
39
|
+
const adapter = options.adapter ?? defaultChildProcessAdapter;
|
|
40
|
+
const throwOnNonZeroExit = options.throwOnNonZeroExit ?? true;
|
|
41
|
+
|
|
42
|
+
const raw = await adapter.run(input);
|
|
43
|
+
const result: RunResult = {
|
|
44
|
+
exitCode: raw.exitCode,
|
|
45
|
+
stdout: redactSecrets(raw.stdout),
|
|
46
|
+
stderr: redactSecrets(raw.stderr),
|
|
47
|
+
};
|
|
48
|
+
if (raw.signal) {
|
|
49
|
+
result.signal = raw.signal;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (result.exitCode !== 0 && throwOnNonZeroExit) {
|
|
53
|
+
throw new CliExecutionError(
|
|
54
|
+
`Command failed with exit code ${result.exitCode}: ${input.command}`,
|
|
55
|
+
input.command,
|
|
56
|
+
input.args,
|
|
57
|
+
result.exitCode,
|
|
58
|
+
result.stderr,
|
|
59
|
+
result.stdout.slice(0, STDOUT_PREVIEW_CHARS)
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return result;
|
|
64
|
+
}
|