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
|
@@ -50,16 +50,10 @@ declare module 'movehat' {
|
|
|
50
50
|
createAccount: () => Account;
|
|
51
51
|
getAccount: (privateKey: string) => Account;
|
|
52
52
|
getAccountByIndex: (index: number) => Account;
|
|
53
|
-
switchNetwork: (networkName: string) => Promise<
|
|
53
|
+
switchNetwork: (networkName: string) => Promise<MovehatRuntime>;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
export function getMovehat(): Promise<MovehatRuntime>;
|
|
57
56
|
export function initRuntime(configOverride?: Partial<MovehatConfig>): Promise<MovehatRuntime>;
|
|
58
|
-
export function getRuntime(): MovehatRuntime;
|
|
59
|
-
|
|
60
|
-
export const mh: {
|
|
61
|
-
readonly runtime: MovehatRuntime;
|
|
62
|
-
};
|
|
63
57
|
}
|
|
64
58
|
|
|
65
59
|
declare module 'movehat/helpers' {
|
|
@@ -68,12 +62,15 @@ declare module 'movehat/helpers' {
|
|
|
68
62
|
export interface TestEnvironment {
|
|
69
63
|
aptos: Aptos;
|
|
70
64
|
account: Account;
|
|
71
|
-
config:
|
|
65
|
+
config: import('movehat').MovehatConfig;
|
|
72
66
|
}
|
|
73
67
|
|
|
74
68
|
export class MoveContract {
|
|
75
69
|
constructor(aptos: Aptos, address: string, moduleName: string);
|
|
76
|
-
|
|
70
|
+
// args: any[] mirrors the runtime declaration — Move entry-function
|
|
71
|
+
// arguments are heterogeneous primitives validated by the Aptos SDK
|
|
72
|
+
// at submit time.
|
|
73
|
+
call(sender: Account, functionName: string, args: any[]): Promise<TransactionResult>;
|
|
77
74
|
view<T>(functionName: string, args: any[]): Promise<T>;
|
|
78
75
|
}
|
|
79
76
|
|
package/src/types/config.ts
CHANGED
|
@@ -59,6 +59,14 @@ export interface LocalTestOptions {
|
|
|
59
59
|
forkName?: string; // Name for the fork (default: 'test-local')
|
|
60
60
|
forkPort?: number; // Fork server port (default: 8080)
|
|
61
61
|
forkResetState?: boolean; // Clear fork state before tests (default: true)
|
|
62
|
+
/**
|
|
63
|
+
* Optional API key sent as `Authorization: Bearer <key>` on every
|
|
64
|
+
* outgoing Movement API request made by the fork's
|
|
65
|
+
* `MovementApiClient`. Use for rate-limited public endpoints or
|
|
66
|
+
* auth-gated nodes. The key stays in process memory only — not
|
|
67
|
+
* persisted to the fork's on-disk metadata.
|
|
68
|
+
*/
|
|
69
|
+
forkApiKey?: string;
|
|
62
70
|
|
|
63
71
|
// Common options (both modes)
|
|
64
72
|
autoFund?: boolean; // Auto-fund accounts (default: true)
|
package/src/types/fork.ts
CHANGED
|
@@ -37,5 +37,11 @@ export interface AccountData {
|
|
|
37
37
|
|
|
38
38
|
export interface AccountResource {
|
|
39
39
|
type: string;
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Move resource payload — structurally a JSON-shaped object whose
|
|
42
|
+
* schema depends on the resource type (CoinStore, AggregatorSnapshot, etc).
|
|
43
|
+
* unknown forces callers to narrow before access; the boundary-validation
|
|
44
|
+
* follow-up of #57 will add per-resource type guards.
|
|
45
|
+
*/
|
|
46
|
+
data: unknown;
|
|
41
47
|
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import type { DeploymentInfo } from "../core/deployments.js";
|
|
2
|
+
import type { ChildProcessAdapter } from "../utils/childProcessAdapter.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Options for `harness.deployCodeObject(options)`.
|
|
6
|
+
*
|
|
7
|
+
* Wraps `movement move deploy-object`. The Movement CLI derives the
|
|
8
|
+
* destination object address from the signing account; that address is
|
|
9
|
+
* bound to `moduleName` (passed as `--address-name`) at compile time.
|
|
10
|
+
* Callers retrieve the resulting object address via the returned
|
|
11
|
+
* `CodeObjectInfo.address`.
|
|
12
|
+
*/
|
|
13
|
+
export interface DeployCodeObjectOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Logical module identifier (the `name` part of `module addr::name`).
|
|
16
|
+
* Used as the persistence key (`deployments/{network}/{moduleName}.json`)
|
|
17
|
+
* and as the `name` arg you'd pass to `runtime.getContract(addr, name)`
|
|
18
|
+
* after deployment.
|
|
19
|
+
*
|
|
20
|
+
* If `addressName` is omitted, `moduleName` is also used as the CLI's
|
|
21
|
+
* `--address-name` flag (correct when the Move.toml's named address
|
|
22
|
+
* matches the module identifier). For packages where they differ —
|
|
23
|
+
* e.g. `module hello_blockchain::counter` (named address
|
|
24
|
+
* `hello_blockchain`, module `counter`) — set `addressName` explicitly.
|
|
25
|
+
*/
|
|
26
|
+
moduleName: string;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Move.toml named address that the derived object address binds to
|
|
30
|
+
* at compile time (the `--address-name` flag of `move deploy-object`).
|
|
31
|
+
*
|
|
32
|
+
* Defaults to `moduleName`. Set this when the Move.toml's named
|
|
33
|
+
* address differs from the on-chain module identifier:
|
|
34
|
+
*
|
|
35
|
+
* ```ts
|
|
36
|
+
* // Move source: `module hello_blockchain::counter`
|
|
37
|
+
* // Move.toml: `[addresses] hello_blockchain = "_"`
|
|
38
|
+
* await harness.deployCodeObject({
|
|
39
|
+
* moduleName: "counter", // for getContract + save key
|
|
40
|
+
* addressName: "hello_blockchain", // for --address-name
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
addressName?: string;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Extra named-address overrides merged on top of the addresses
|
|
48
|
+
* auto-detected from `<packageDir>/sources/**.move`. Values here win
|
|
49
|
+
* for the matching keys; auto-detected names not present here are
|
|
50
|
+
* still pinned to the deployer address (Publisher convention).
|
|
51
|
+
*/
|
|
52
|
+
namedAddresses?: Record<string, string>;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Path to the Move package. Defaults to `config.moveDir` from the
|
|
56
|
+
* harness's runtime config (usually `./move`).
|
|
57
|
+
*/
|
|
58
|
+
packageDir?: string;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Artifact set written into the on-chain package. Mirrors the CLI
|
|
62
|
+
* flag. Defaults to `'sparse'` (the Movement CLI default).
|
|
63
|
+
*/
|
|
64
|
+
includedArtifacts?: "none" | "sparse" | "all";
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Test-only override for the child-process adapter. Production callers
|
|
68
|
+
* leave this undefined so the default spawn-based adapter is used.
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
71
|
+
adapter?: ChildProcessAdapter;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Options for `harness.upgradeCodeObject(options)`.
|
|
76
|
+
*
|
|
77
|
+
* Wraps `movement move upgrade-object`. The object must already exist
|
|
78
|
+
* on-chain at `objectAddress` and have been deployed previously (typically
|
|
79
|
+
* via `deployCodeObject`).
|
|
80
|
+
*/
|
|
81
|
+
export interface UpgradeCodeObjectOptions extends DeployCodeObjectOptions {
|
|
82
|
+
/** Address of the existing code object to upgrade. Required. */
|
|
83
|
+
objectAddress: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Result of `deployCodeObject` / `upgradeCodeObject`.
|
|
88
|
+
*
|
|
89
|
+
* Today this is structurally identical to {@link DeploymentInfo} — the
|
|
90
|
+
* `address` field holds the derived **object address** (the value
|
|
91
|
+
* callers pass to `runtime.getContract(...)` to interact with the
|
|
92
|
+
* modules), and `deployer` is the signing account.
|
|
93
|
+
*
|
|
94
|
+
* The alias exists so future iterations can layer additional fields
|
|
95
|
+
* (e.g. an explicit `kind: 'code-object' | 'publish'` discriminator)
|
|
96
|
+
* without churning every callsite.
|
|
97
|
+
*/
|
|
98
|
+
export type CodeObjectInfo = DeploymentInfo;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Options for `harness.runViewFunction(options)`.
|
|
102
|
+
*
|
|
103
|
+
* Delegates to the Aptos SDK's `aptos.view(...)` — no CLI invocation,
|
|
104
|
+
* no profile management. Works on `createLocal`, `createFork`, and
|
|
105
|
+
* `createLive` harnesses (view functions are read-only).
|
|
106
|
+
*/
|
|
107
|
+
export interface RunViewFunctionOptions {
|
|
108
|
+
/**
|
|
109
|
+
* Fully qualified Move function id, e.g. `0xCAFE::counter::get`.
|
|
110
|
+
*/
|
|
111
|
+
function: string;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Move type-tag arguments, e.g. `['0x1::aptos_coin::AptosCoin']`.
|
|
115
|
+
*/
|
|
116
|
+
typeArguments?: string[];
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Move function arguments. SDK-validated at the boundary; pass values
|
|
120
|
+
* matching the Move function signature (strings for `address`,
|
|
121
|
+
* numbers / bigints for `u8`-`u256`, booleans, etc.).
|
|
122
|
+
*/
|
|
123
|
+
functionArguments?: unknown[];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Options for `harness.runMoveScript(options)`.
|
|
128
|
+
*
|
|
129
|
+
* Wraps `movement move run-script`. The CLI handles compilation
|
|
130
|
+
* inline when given a `.move` source; the user can also pass a
|
|
131
|
+
* pre-compiled `.mv` bytecode file.
|
|
132
|
+
*
|
|
133
|
+
* Not available on fork-mode harnesses (forks are read-only).
|
|
134
|
+
*/
|
|
135
|
+
export interface RunMoveScriptOptions {
|
|
136
|
+
/**
|
|
137
|
+
* Path to the Move script. Extension determines the CLI flag:
|
|
138
|
+
* - `.move` → `--script-path` (CLI auto-compiles)
|
|
139
|
+
* - `.mv` → `--compiled-script-path` (user pre-compiled)
|
|
140
|
+
* Other extensions throw synchronously before any CLI call.
|
|
141
|
+
*/
|
|
142
|
+
scriptPath: string;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* CLI-formatted typed arguments. Movement CLI expects each arg
|
|
146
|
+
* prefixed by its Move type, e.g. `'address:0x1'`, `'u8:42'`,
|
|
147
|
+
* `'bool:true'`, `'string:hello'`. See
|
|
148
|
+
* `movement move run-script --help` for the full grammar.
|
|
149
|
+
*/
|
|
150
|
+
args?: string[];
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Type-tag arguments for generic scripts, e.g.
|
|
154
|
+
* `['0x1::aptos_coin::AptosCoin']`.
|
|
155
|
+
*/
|
|
156
|
+
typeArgs?: string[];
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Optional working directory for compilation. Most callers leave
|
|
160
|
+
* this undefined — the CLI uses the script's parent directory.
|
|
161
|
+
*/
|
|
162
|
+
packageDir?: string;
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Test-only override for the child-process adapter.
|
|
166
|
+
* @internal
|
|
167
|
+
*/
|
|
168
|
+
adapter?: ChildProcessAdapter;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Result of `harness.runMoveScript`.
|
|
173
|
+
*
|
|
174
|
+
* Always carries `txHash` (parser throws if it can't extract one).
|
|
175
|
+
* `success` and `vmStatus` are best-effort: parsed from the CLI's
|
|
176
|
+
* JSON `Result` block when present, `undefined` if the parser misses.
|
|
177
|
+
*/
|
|
178
|
+
export interface MoveScriptResult {
|
|
179
|
+
txHash: string;
|
|
180
|
+
success?: boolean;
|
|
181
|
+
vmStatus?: string;
|
|
182
|
+
}
|
package/src/types/runtime.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Aptos, Account } from "@aptos-labs/ts-sdk";
|
|
|
2
2
|
import { MovehatConfig } from "./config.js";
|
|
3
3
|
import { MoveContract } from "../core/contract.js";
|
|
4
4
|
import { DeploymentInfo } from "../core/deployments.js";
|
|
5
|
+
import type { ChildProcessAdapter } from "../utils/childProcessAdapter.js";
|
|
5
6
|
|
|
6
7
|
export interface NetworkInfo {
|
|
7
8
|
name: string;
|
|
@@ -16,7 +17,7 @@ export interface MovehatRuntime {
|
|
|
16
17
|
// Network information
|
|
17
18
|
network: NetworkInfo;
|
|
18
19
|
|
|
19
|
-
//
|
|
20
|
+
// Movement TypeScript SDK client instance
|
|
20
21
|
aptos: Aptos;
|
|
21
22
|
|
|
22
23
|
// Default account from config (accounts[0])
|
|
@@ -33,6 +34,11 @@ export interface MovehatRuntime {
|
|
|
33
34
|
moduleName: string,
|
|
34
35
|
options?: {
|
|
35
36
|
packageDir?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Override the child-process adapter. Test-only: production callers
|
|
39
|
+
* leave this undefined so the default spawn-based adapter is used.
|
|
40
|
+
*/
|
|
41
|
+
adapter?: ChildProcessAdapter;
|
|
36
42
|
}
|
|
37
43
|
) => Promise<DeploymentInfo>;
|
|
38
44
|
getDeployment: (moduleName: string) => DeploymentInfo | null;
|
|
@@ -44,6 +50,8 @@ export interface MovehatRuntime {
|
|
|
44
50
|
getAccount: (privateKey: string) => Account;
|
|
45
51
|
getAccountByIndex: (index: number) => Account;
|
|
46
52
|
|
|
47
|
-
// Network switching
|
|
48
|
-
|
|
53
|
+
// Network switching — returns a new runtime bound to the requested
|
|
54
|
+
// network. As of M1.5 there is no module-cached runtime, so callers
|
|
55
|
+
// must capture and use the returned instance.
|
|
56
|
+
switchNetwork: (networkName: string) => Promise<MovehatRuntime>;
|
|
49
57
|
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
+
import {
|
|
3
|
+
shouldUseColor,
|
|
4
|
+
colors,
|
|
5
|
+
rgbToAnsi,
|
|
6
|
+
applyGradient,
|
|
7
|
+
gradients,
|
|
8
|
+
} from '../colors.js';
|
|
9
|
+
|
|
10
|
+
describe('shouldUseColor', () => {
|
|
11
|
+
const originalEnv = process.env;
|
|
12
|
+
const originalIsTTY = process.stdout.isTTY;
|
|
13
|
+
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
process.env = { ...originalEnv };
|
|
16
|
+
delete process.env.NO_COLOR;
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
process.env = originalEnv;
|
|
21
|
+
Object.defineProperty(process.stdout, 'isTTY', { value: originalIsTTY });
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('should return true when TTY and NO_COLOR not set', () => {
|
|
25
|
+
Object.defineProperty(process.stdout, 'isTTY', { value: true, configurable: true });
|
|
26
|
+
delete process.env.NO_COLOR;
|
|
27
|
+
expect(shouldUseColor()).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('should return false when NO_COLOR is set', () => {
|
|
31
|
+
Object.defineProperty(process.stdout, 'isTTY', { value: true, configurable: true });
|
|
32
|
+
process.env.NO_COLOR = '1';
|
|
33
|
+
expect(shouldUseColor()).toBe(false);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('should return false when not TTY', () => {
|
|
37
|
+
Object.defineProperty(process.stdout, 'isTTY', { value: false, configurable: true });
|
|
38
|
+
delete process.env.NO_COLOR;
|
|
39
|
+
expect(shouldUseColor()).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
describe('rgbToAnsi', () => {
|
|
44
|
+
it('should generate correct ANSI escape code', () => {
|
|
45
|
+
expect(rgbToAnsi(255, 0, 0)).toBe('\x1b[38;2;255;0;0m');
|
|
46
|
+
expect(rgbToAnsi(0, 255, 0)).toBe('\x1b[38;2;0;255;0m');
|
|
47
|
+
expect(rgbToAnsi(0, 0, 255)).toBe('\x1b[38;2;0;0;255m');
|
|
48
|
+
expect(rgbToAnsi(128, 128, 128)).toBe('\x1b[38;2;128;128;128m');
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('should handle edge values', () => {
|
|
52
|
+
expect(rgbToAnsi(0, 0, 0)).toBe('\x1b[38;2;0;0;0m');
|
|
53
|
+
expect(rgbToAnsi(255, 255, 255)).toBe('\x1b[38;2;255;255;255m');
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
describe('applyGradient', () => {
|
|
58
|
+
const originalEnv = process.env;
|
|
59
|
+
const originalIsTTY = process.stdout.isTTY;
|
|
60
|
+
|
|
61
|
+
beforeEach(() => {
|
|
62
|
+
process.env = { ...originalEnv };
|
|
63
|
+
delete process.env.NO_COLOR;
|
|
64
|
+
Object.defineProperty(process.stdout, 'isTTY', { value: true, configurable: true });
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
afterEach(() => {
|
|
68
|
+
process.env = originalEnv;
|
|
69
|
+
Object.defineProperty(process.stdout, 'isTTY', { value: originalIsTTY });
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('should apply gradient to text', () => {
|
|
73
|
+
const palette = [[255, 0, 0], [0, 255, 0]] as [number, number, number][];
|
|
74
|
+
const result = applyGradient('AB', palette);
|
|
75
|
+
|
|
76
|
+
expect(result).toContain('\x1b[38;2;255;0;0m'); // Red for 'A'
|
|
77
|
+
expect(result).toContain('\x1b[38;2;0;255;0m'); // Green for 'B'
|
|
78
|
+
expect(result).toContain('A');
|
|
79
|
+
expect(result).toContain('B');
|
|
80
|
+
expect(result).toContain('\x1b[0m'); // Reset at end
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('should return plain text when colors disabled', () => {
|
|
84
|
+
process.env.NO_COLOR = '1';
|
|
85
|
+
const palette = [[255, 0, 0]] as [number, number, number][];
|
|
86
|
+
const result = applyGradient('Hello', palette);
|
|
87
|
+
|
|
88
|
+
expect(result).toBe('Hello');
|
|
89
|
+
expect(result).not.toContain('\x1b');
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('should cycle through palette for long text', () => {
|
|
93
|
+
const palette = [[255, 0, 0], [0, 255, 0]] as [number, number, number][];
|
|
94
|
+
const result = applyGradient('ABCD', palette);
|
|
95
|
+
|
|
96
|
+
// Should alternate: A=red, B=green, C=red, D=green
|
|
97
|
+
expect(result).toContain('A');
|
|
98
|
+
expect(result).toContain('B');
|
|
99
|
+
expect(result).toContain('C');
|
|
100
|
+
expect(result).toContain('D');
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('should handle offset parameter', () => {
|
|
104
|
+
const palette = [[255, 0, 0], [0, 255, 0]] as [number, number, number][];
|
|
105
|
+
const result = applyGradient('AB', palette, 1);
|
|
106
|
+
|
|
107
|
+
// With offset 1: A=green, B=red
|
|
108
|
+
expect(result.indexOf('\x1b[38;2;0;255;0m')).toBeLessThan(result.indexOf('\x1b[38;2;255;0;0m'));
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
describe('gradients', () => {
|
|
113
|
+
it('should have movehat gradient with 5 colors', () => {
|
|
114
|
+
expect(gradients.movehat).toHaveLength(5);
|
|
115
|
+
gradients.movehat.forEach(([r, g, b]) => {
|
|
116
|
+
expect(r).toBeGreaterThanOrEqual(0);
|
|
117
|
+
expect(r).toBeLessThanOrEqual(255);
|
|
118
|
+
expect(g).toBeGreaterThanOrEqual(0);
|
|
119
|
+
expect(g).toBeLessThanOrEqual(255);
|
|
120
|
+
expect(b).toBeGreaterThanOrEqual(0);
|
|
121
|
+
expect(b).toBeLessThanOrEqual(255);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('should have success gradient', () => {
|
|
126
|
+
expect(gradients.success).toBeDefined();
|
|
127
|
+
expect(gradients.success.length).toBeGreaterThan(0);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it('should have error gradient', () => {
|
|
131
|
+
expect(gradients.error).toBeDefined();
|
|
132
|
+
expect(gradients.error.length).toBeGreaterThan(0);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
describe('colors object', () => {
|
|
137
|
+
it('should have all semantic color functions', () => {
|
|
138
|
+
expect(typeof colors.success).toBe('function');
|
|
139
|
+
expect(typeof colors.error).toBe('function');
|
|
140
|
+
expect(typeof colors.warning).toBe('function');
|
|
141
|
+
expect(typeof colors.info).toBe('function');
|
|
142
|
+
expect(typeof colors.primary).toBe('function');
|
|
143
|
+
expect(typeof colors.secondary).toBe('function');
|
|
144
|
+
expect(typeof colors.muted).toBe('function');
|
|
145
|
+
expect(typeof colors.dim).toBe('function');
|
|
146
|
+
expect(typeof colors.bold).toBe('function');
|
|
147
|
+
expect(typeof colors.brand).toBe('function');
|
|
148
|
+
expect(typeof colors.brandBright).toBe('function');
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it('should return strings when called', () => {
|
|
152
|
+
expect(typeof colors.success('test')).toBe('string');
|
|
153
|
+
expect(typeof colors.error('test')).toBe('string');
|
|
154
|
+
expect(typeof colors.brand('test')).toBe('string');
|
|
155
|
+
});
|
|
156
|
+
});
|
package/src/ui/colors.ts
CHANGED
|
@@ -86,8 +86,11 @@ export const applyGradient = (
|
|
|
86
86
|
let result = '';
|
|
87
87
|
for (let i = 0; i < text.length; i++) {
|
|
88
88
|
const colorIndex = (i + offset) % palette.length;
|
|
89
|
-
const
|
|
90
|
-
|
|
89
|
+
const color = palette[colorIndex];
|
|
90
|
+
const ch = text[i];
|
|
91
|
+
if (!color || ch === undefined) continue;
|
|
92
|
+
const [r, g, b] = color;
|
|
93
|
+
result += `${rgbToAnsi(r, g, b)}${ch}`;
|
|
91
94
|
}
|
|
92
95
|
return result + '\x1b[0m';
|
|
93
96
|
};
|
package/src/ui/logger.ts
CHANGED
|
@@ -119,6 +119,27 @@ export const warning = (message: string, indent: number = 0): void => {
|
|
|
119
119
|
console.warn(`${coloredSymbol('warning')} ${formatted}`);
|
|
120
120
|
};
|
|
121
121
|
|
|
122
|
+
/**
|
|
123
|
+
* Action / progress message (dim chevron prefix)
|
|
124
|
+
* Use for in-progress action lines like "Building package", "Publishing
|
|
125
|
+
* to blockchain" — anything that's a status update during a multi-step
|
|
126
|
+
* operation. Distinct from `info` (general updates) and `success`
|
|
127
|
+
* (completion).
|
|
128
|
+
*
|
|
129
|
+
* @param message - Message to log
|
|
130
|
+
* @param indent - Number of spaces to indent (default: 0)
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* logger.step('Building package...');
|
|
134
|
+
* logger.step('Publishing to blockchain...');
|
|
135
|
+
* logger.success('Module published successfully!');
|
|
136
|
+
*/
|
|
137
|
+
export const step = (message: string, indent: number = 0): void => {
|
|
138
|
+
if (config.silent) return;
|
|
139
|
+
const formatted = formatMessage(message, indent);
|
|
140
|
+
console.log(`${colors.dim(symbols.step)} ${formatted}`);
|
|
141
|
+
};
|
|
142
|
+
|
|
122
143
|
/**
|
|
123
144
|
* Plain message without symbol
|
|
124
145
|
* Use for continuation lines or when symbol is not appropriate
|
|
@@ -218,6 +239,7 @@ export const logger = {
|
|
|
218
239
|
success,
|
|
219
240
|
error,
|
|
220
241
|
warning,
|
|
242
|
+
step,
|
|
221
243
|
plain,
|
|
222
244
|
newline,
|
|
223
245
|
section,
|
package/src/ui/symbols.ts
CHANGED
|
@@ -16,7 +16,13 @@ export const symbols = {
|
|
|
16
16
|
warning: figures.warning, // ⚠ or ‼
|
|
17
17
|
info: figures.info, // ℹ or i
|
|
18
18
|
|
|
19
|
-
// Action symbols
|
|
19
|
+
// Action / progress symbols
|
|
20
|
+
step: '▸', // ▸ — used to prefix in-progress action lines
|
|
21
|
+
// (e.g. "▸ Building package"). Plain Unicode
|
|
22
|
+
// BLACK RIGHT-POINTING SMALL TRIANGLE, supported
|
|
23
|
+
// in every UTF-8 terminal. If a non-UTF-8
|
|
24
|
+
// environment ever surfaces, switch to
|
|
25
|
+
// figures.pointerSmall ('›' with ASCII fallback).
|
|
20
26
|
pointer: figures.pointer, // ❯ or >
|
|
21
27
|
checkboxOn: figures.checkboxOn, // ☑ or [×]
|
|
22
28
|
checkboxOff: figures.checkboxOff, // ☐ or [ ]
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import {
|
|
3
|
+
isHexAddress,
|
|
4
|
+
normalizeAddress,
|
|
5
|
+
normalizeAddressShort,
|
|
6
|
+
} from '../address.js';
|
|
7
|
+
|
|
8
|
+
const PADDED_ONE = '0x' + '0'.repeat(63) + '1';
|
|
9
|
+
const PADDED_DEAD = '0x' + '0'.repeat(60) + 'dead';
|
|
10
|
+
|
|
11
|
+
describe('normalizeAddress', () => {
|
|
12
|
+
it('pads a short hex to 64 chars and adds 0x', () => {
|
|
13
|
+
expect(normalizeAddress('1')).toBe(PADDED_ONE);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('preserves a fully padded address', () => {
|
|
17
|
+
const full = '0x' + 'a'.repeat(64);
|
|
18
|
+
expect(normalizeAddress(full)).toBe(full);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('lowercases mixed-case input', () => {
|
|
22
|
+
expect(normalizeAddress('0xDEAD')).toBe(PADDED_DEAD);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('adds the 0x prefix when missing', () => {
|
|
26
|
+
expect(normalizeAddress('dead')).toBe(PADDED_DEAD);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('returns 0x followed by 64 zeros for empty input', () => {
|
|
30
|
+
expect(normalizeAddress('')).toBe('0x' + '0'.repeat(64));
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('matches fork/manager.ts legacy semantics for the canonical case', () => {
|
|
34
|
+
// Mirrors the inline `private normalizeAddress` from fork/manager.ts:243.
|
|
35
|
+
expect(normalizeAddress('0X1')).toBe(PADDED_ONE);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
describe('normalizeAddressShort', () => {
|
|
40
|
+
it('adds 0x and lowercases without padding', () => {
|
|
41
|
+
expect(normalizeAddressShort('DEAD')).toBe('0xdead');
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('preserves the 0x prefix when already present', () => {
|
|
45
|
+
expect(normalizeAddressShort('0xBeef')).toBe('0xbeef');
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('does not pad a short address', () => {
|
|
49
|
+
expect(normalizeAddressShort('1')).toBe('0x1');
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('returns just 0x for empty input', () => {
|
|
53
|
+
expect(normalizeAddressShort('')).toBe('0x');
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
describe('isHexAddress', () => {
|
|
58
|
+
it('accepts short hex with 0x prefix', () => {
|
|
59
|
+
expect(isHexAddress('0x1')).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('accepts hex without 0x prefix', () => {
|
|
63
|
+
expect(isHexAddress('dead')).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('accepts uppercase 0X prefix', () => {
|
|
67
|
+
expect(isHexAddress('0Xabc')).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('accepts a full 64-char address', () => {
|
|
71
|
+
expect(isHexAddress('0x' + 'f'.repeat(64))).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('rejects empty string', () => {
|
|
75
|
+
expect(isHexAddress('')).toBe(false);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it('rejects lone 0x with no hex', () => {
|
|
79
|
+
expect(isHexAddress('0x')).toBe(false);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('rejects non-hex characters', () => {
|
|
83
|
+
expect(isHexAddress('0xghij')).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('rejects input longer than 64 hex chars', () => {
|
|
87
|
+
expect(isHexAddress('0x' + '0'.repeat(65))).toBe(false);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('accepts mixed case hex', () => {
|
|
91
|
+
expect(isHexAddress('0xAbCdEf')).toBe(true);
|
|
92
|
+
});
|
|
93
|
+
});
|