@matter/tools 0.11.0-alpha.0-20241005-e3e4e4a7a
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/LICENSE +201 -0
- package/README.md +100 -0
- package/bin/build.js +10 -0
- package/bin/prepare-chip.js +5 -0
- package/bin/run.js +7 -0
- package/bin/test.js +7 -0
- package/bin/version.js +7 -0
- package/chip/Dockerfile +23 -0
- package/dist/cjs/building/builder.d.ts +35 -0
- package/dist/cjs/building/builder.d.ts.map +1 -0
- package/dist/cjs/building/builder.js +210 -0
- package/dist/cjs/building/builder.js.map +6 -0
- package/dist/cjs/building/cli.d.ts +7 -0
- package/dist/cjs/building/cli.d.ts.map +1 -0
- package/dist/cjs/building/cli.js +100 -0
- package/dist/cjs/building/cli.js.map +6 -0
- package/dist/cjs/building/error.d.ts +16 -0
- package/dist/cjs/building/error.d.ts.map +1 -0
- package/dist/cjs/building/error.js +50 -0
- package/dist/cjs/building/error.js.map +6 -0
- package/dist/cjs/building/graph.d.ts +37 -0
- package/dist/cjs/building/graph.d.ts.map +1 -0
- package/dist/cjs/building/graph.js +222 -0
- package/dist/cjs/building/graph.js.map +6 -0
- package/dist/cjs/building/project.d.ts +56 -0
- package/dist/cjs/building/project.d.ts.map +1 -0
- package/dist/cjs/building/project.js +239 -0
- package/dist/cjs/building/project.js.map +6 -0
- package/dist/cjs/building/tsconfig.d.ts +16 -0
- package/dist/cjs/building/tsconfig.d.ts.map +1 -0
- package/dist/cjs/building/tsconfig.js +70 -0
- package/dist/cjs/building/tsconfig.js.map +6 -0
- package/dist/cjs/building/typescript/context.d.ts +16 -0
- package/dist/cjs/building/typescript/context.d.ts.map +1 -0
- package/dist/cjs/building/typescript/context.js +82 -0
- package/dist/cjs/building/typescript/context.js.map +6 -0
- package/dist/cjs/building/typescript/incremental-compiler.d.ts +10 -0
- package/dist/cjs/building/typescript/incremental-compiler.d.ts.map +1 -0
- package/dist/cjs/building/typescript/incremental-compiler.js +119 -0
- package/dist/cjs/building/typescript/incremental-compiler.js.map +6 -0
- package/dist/cjs/building/typescript/language-service.d.ts +13 -0
- package/dist/cjs/building/typescript/language-service.d.ts.map +1 -0
- package/dist/cjs/building/typescript/language-service.js +109 -0
- package/dist/cjs/building/typescript/language-service.js.map +6 -0
- package/dist/cjs/building/typescript/solution-builder.d.ts +10 -0
- package/dist/cjs/building/typescript/solution-builder.d.ts.map +1 -0
- package/dist/cjs/building/typescript/solution-builder.js +72 -0
- package/dist/cjs/building/typescript/solution-builder.js.map +6 -0
- package/dist/cjs/building/typescript.d.ts +13 -0
- package/dist/cjs/building/typescript.d.ts.map +1 -0
- package/dist/cjs/building/typescript.js +31 -0
- package/dist/cjs/building/typescript.js.map +6 -0
- package/dist/cjs/index.d.ts +15 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +32 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/running/cli.d.ts +19 -0
- package/dist/cjs/running/cli.d.ts.map +1 -0
- package/dist/cjs/running/cli.js +82 -0
- package/dist/cjs/running/cli.js.map +6 -0
- package/dist/cjs/running/execute.d.ts +8 -0
- package/dist/cjs/running/execute.d.ts.map +1 -0
- package/dist/cjs/running/execute.js +82 -0
- package/dist/cjs/running/execute.js.map +6 -0
- package/dist/cjs/testing/chip/pics-file.d.ts +20 -0
- package/dist/cjs/testing/chip/pics-file.d.ts.map +1 -0
- package/dist/cjs/testing/chip/pics-file.js +79 -0
- package/dist/cjs/testing/chip/pics-file.js.map +6 -0
- package/dist/cjs/testing/chip.d.ts +60 -0
- package/dist/cjs/testing/chip.d.ts.map +1 -0
- package/dist/cjs/testing/chip.js +306 -0
- package/dist/cjs/testing/chip.js.map +6 -0
- package/dist/cjs/testing/cli.d.ts +9 -0
- package/dist/cjs/testing/cli.d.ts.map +1 -0
- package/dist/cjs/testing/cli.js +117 -0
- package/dist/cjs/testing/cli.js.map +6 -0
- package/dist/cjs/testing/failure-detail.d.ts +19 -0
- package/dist/cjs/testing/failure-detail.d.ts.map +1 -0
- package/dist/cjs/testing/failure-detail.js +143 -0
- package/dist/cjs/testing/failure-detail.js.map +6 -0
- package/dist/cjs/testing/files.d.ts +8 -0
- package/dist/cjs/testing/files.d.ts.map +1 -0
- package/dist/cjs/testing/files.js +52 -0
- package/dist/cjs/testing/files.js.map +6 -0
- package/dist/cjs/testing/global-declarations.d.ts +38 -0
- package/dist/cjs/testing/global-declarations.d.ts.map +1 -0
- package/dist/cjs/testing/global-declarations.js +8 -0
- package/dist/cjs/testing/global-declarations.js.map +6 -0
- package/dist/cjs/testing/global-definitions.d.ts +7 -0
- package/dist/cjs/testing/global-definitions.d.ts.map +1 -0
- package/dist/cjs/testing/global-definitions.js +50 -0
- package/dist/cjs/testing/global-definitions.js.map +6 -0
- package/dist/cjs/testing/mocha.d.ts +36 -0
- package/dist/cjs/testing/mocha.d.ts.map +1 -0
- package/dist/cjs/testing/mocha.js +155 -0
- package/dist/cjs/testing/mocha.js.map +6 -0
- package/dist/cjs/testing/mocharc.cjs +68 -0
- package/dist/cjs/testing/mocharc.d.cts +7 -0
- package/dist/cjs/testing/mocks/crypto.d.ts +7 -0
- package/dist/cjs/testing/mocks/crypto.d.ts.map +1 -0
- package/dist/cjs/testing/mocks/crypto.js +79 -0
- package/dist/cjs/testing/mocks/crypto.js.map +6 -0
- package/dist/cjs/testing/mocks/environment.d.ts +7 -0
- package/dist/cjs/testing/mocks/environment.d.ts.map +1 -0
- package/dist/cjs/testing/mocks/environment.js +7 -0
- package/dist/cjs/testing/mocks/environment.js.map +6 -0
- package/dist/cjs/testing/mocks/index.d.ts +10 -0
- package/dist/cjs/testing/mocks/index.d.ts.map +1 -0
- package/dist/cjs/testing/mocks/index.js +27 -0
- package/dist/cjs/testing/mocks/index.js.map +6 -0
- package/dist/cjs/testing/mocks/logging.d.ts +28 -0
- package/dist/cjs/testing/mocks/logging.d.ts.map +1 -0
- package/dist/cjs/testing/mocks/logging.js +93 -0
- package/dist/cjs/testing/mocks/logging.js.map +6 -0
- package/dist/cjs/testing/mocks/time.d.ts +88 -0
- package/dist/cjs/testing/mocks/time.d.ts.map +1 -0
- package/dist/cjs/testing/mocks/time.js +250 -0
- package/dist/cjs/testing/mocks/time.js.map +6 -0
- package/dist/cjs/testing/node.d.ts +16 -0
- package/dist/cjs/testing/node.d.ts.map +1 -0
- package/dist/cjs/testing/node.js +108 -0
- package/dist/cjs/testing/node.js.map +6 -0
- package/dist/cjs/testing/options.d.ts +19 -0
- package/dist/cjs/testing/options.d.ts.map +1 -0
- package/dist/cjs/testing/options.js +62 -0
- package/dist/cjs/testing/options.js.map +6 -0
- package/dist/cjs/testing/reporter.d.ts +50 -0
- package/dist/cjs/testing/reporter.d.ts.map +1 -0
- package/dist/cjs/testing/reporter.js +137 -0
- package/dist/cjs/testing/reporter.js.map +6 -0
- package/dist/cjs/testing/runner.d.ts +22 -0
- package/dist/cjs/testing/runner.d.ts.map +1 -0
- package/dist/cjs/testing/runner.js +116 -0
- package/dist/cjs/testing/runner.js.map +6 -0
- package/dist/cjs/testing/web.d.ts +8 -0
- package/dist/cjs/testing/web.d.ts.map +1 -0
- package/dist/cjs/testing/web.js +165 -0
- package/dist/cjs/testing/web.js.map +6 -0
- package/dist/cjs/util/bootstrap.mjs +105 -0
- package/dist/cjs/util/docker.d.ts +27 -0
- package/dist/cjs/util/docker.d.ts.map +1 -0
- package/dist/cjs/util/docker.js +163 -0
- package/dist/cjs/util/docker.js.map +6 -0
- package/dist/cjs/util/errors.d.ts +8 -0
- package/dist/cjs/util/errors.d.ts.map +1 -0
- package/dist/cjs/util/errors.js +55 -0
- package/dist/cjs/util/errors.js.map +6 -0
- package/dist/cjs/util/index.d.ts +8 -0
- package/dist/cjs/util/index.d.ts.map +1 -0
- package/dist/cjs/util/index.js +25 -0
- package/dist/cjs/util/index.js.map +6 -0
- package/dist/cjs/util/node-shims.d.ts +7 -0
- package/dist/cjs/util/node-shims.d.ts.map +1 -0
- package/dist/cjs/util/node-shims.js +12 -0
- package/dist/cjs/util/node-shims.js.map +6 -0
- package/dist/cjs/util/package.d.ts +61 -0
- package/dist/cjs/util/package.d.ts.map +1 -0
- package/dist/cjs/util/package.js +324 -0
- package/dist/cjs/util/package.js.map +6 -0
- package/dist/cjs/util/progress.d.ts +31 -0
- package/dist/cjs/util/progress.d.ts.map +1 -0
- package/dist/cjs/util/progress.js +232 -0
- package/dist/cjs/util/progress.js.map +6 -0
- package/dist/cjs/util/tools-path.cjs +13 -0
- package/dist/cjs/util/tools-path.d.cts +7 -0
- package/dist/cjs/util/trace-unhandled.d.ts +9 -0
- package/dist/cjs/util/trace-unhandled.d.ts.map +1 -0
- package/dist/cjs/util/trace-unhandled.js +48 -0
- package/dist/cjs/util/trace-unhandled.js.map +6 -0
- package/dist/cjs/util/wtf.d.ts +10 -0
- package/dist/cjs/util/wtf.d.ts.map +1 -0
- package/dist/cjs/util/wtf.js +53 -0
- package/dist/cjs/util/wtf.js.map +6 -0
- package/dist/cjs/versioning/cli.d.ts +7 -0
- package/dist/cjs/versioning/cli.d.ts.map +1 -0
- package/dist/cjs/versioning/cli.js +62 -0
- package/dist/cjs/versioning/cli.js.map +6 -0
- package/dist/cjs/versioning/versioner.d.ts +18 -0
- package/dist/cjs/versioning/versioner.d.ts.map +1 -0
- package/dist/cjs/versioning/versioner.js +145 -0
- package/dist/cjs/versioning/versioner.js.map +6 -0
- package/dist/esm/building/builder.d.ts +35 -0
- package/dist/esm/building/builder.d.ts.map +1 -0
- package/dist/esm/building/builder.js +180 -0
- package/dist/esm/building/builder.js.map +6 -0
- package/dist/esm/building/cli.d.ts +7 -0
- package/dist/esm/building/cli.d.ts.map +1 -0
- package/dist/esm/building/cli.js +70 -0
- package/dist/esm/building/cli.js.map +6 -0
- package/dist/esm/building/error.d.ts +16 -0
- package/dist/esm/building/error.d.ts.map +1 -0
- package/dist/esm/building/error.js +30 -0
- package/dist/esm/building/error.js.map +6 -0
- package/dist/esm/building/graph.d.ts +37 -0
- package/dist/esm/building/graph.d.ts.map +1 -0
- package/dist/esm/building/graph.js +192 -0
- package/dist/esm/building/graph.js.map +6 -0
- package/dist/esm/building/project.d.ts +56 -0
- package/dist/esm/building/project.d.ts.map +1 -0
- package/dist/esm/building/project.js +219 -0
- package/dist/esm/building/project.js.map +6 -0
- package/dist/esm/building/tsconfig.d.ts +16 -0
- package/dist/esm/building/tsconfig.d.ts.map +1 -0
- package/dist/esm/building/tsconfig.js +50 -0
- package/dist/esm/building/tsconfig.js.map +6 -0
- package/dist/esm/building/typescript/context.d.ts +16 -0
- package/dist/esm/building/typescript/context.d.ts.map +1 -0
- package/dist/esm/building/typescript/context.js +68 -0
- package/dist/esm/building/typescript/context.js.map +6 -0
- package/dist/esm/building/typescript/incremental-compiler.d.ts +10 -0
- package/dist/esm/building/typescript/incremental-compiler.d.ts.map +1 -0
- package/dist/esm/building/typescript/incremental-compiler.js +99 -0
- package/dist/esm/building/typescript/incremental-compiler.js.map +6 -0
- package/dist/esm/building/typescript/language-service.d.ts +13 -0
- package/dist/esm/building/typescript/language-service.d.ts.map +1 -0
- package/dist/esm/building/typescript/language-service.js +99 -0
- package/dist/esm/building/typescript/language-service.js.map +6 -0
- package/dist/esm/building/typescript/solution-builder.d.ts +10 -0
- package/dist/esm/building/typescript/solution-builder.d.ts.map +1 -0
- package/dist/esm/building/typescript/solution-builder.js +52 -0
- package/dist/esm/building/typescript/solution-builder.js.map +6 -0
- package/dist/esm/building/typescript.d.ts +13 -0
- package/dist/esm/building/typescript.d.ts.map +1 -0
- package/dist/esm/building/typescript.js +11 -0
- package/dist/esm/building/typescript.js.map +6 -0
- package/dist/esm/index.d.ts +15 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/running/cli.d.ts +19 -0
- package/dist/esm/running/cli.d.ts.map +1 -0
- package/dist/esm/running/cli.js +62 -0
- package/dist/esm/running/cli.js.map +6 -0
- package/dist/esm/running/execute.d.ts +8 -0
- package/dist/esm/running/execute.d.ts.map +1 -0
- package/dist/esm/running/execute.js +52 -0
- package/dist/esm/running/execute.js.map +6 -0
- package/dist/esm/testing/chip/pics-file.d.ts +20 -0
- package/dist/esm/testing/chip/pics-file.d.ts.map +1 -0
- package/dist/esm/testing/chip/pics-file.js +59 -0
- package/dist/esm/testing/chip/pics-file.js.map +6 -0
- package/dist/esm/testing/chip.d.ts +60 -0
- package/dist/esm/testing/chip.d.ts.map +1 -0
- package/dist/esm/testing/chip.js +286 -0
- package/dist/esm/testing/chip.js.map +6 -0
- package/dist/esm/testing/cli.d.ts +9 -0
- package/dist/esm/testing/cli.d.ts.map +1 -0
- package/dist/esm/testing/cli.js +87 -0
- package/dist/esm/testing/cli.js.map +6 -0
- package/dist/esm/testing/failure-detail.d.ts +19 -0
- package/dist/esm/testing/failure-detail.d.ts.map +1 -0
- package/dist/esm/testing/failure-detail.js +113 -0
- package/dist/esm/testing/failure-detail.js.map +6 -0
- package/dist/esm/testing/files.d.ts +8 -0
- package/dist/esm/testing/files.d.ts.map +1 -0
- package/dist/esm/testing/files.js +32 -0
- package/dist/esm/testing/files.js.map +6 -0
- package/dist/esm/testing/global-declarations.d.ts +38 -0
- package/dist/esm/testing/global-declarations.d.ts.map +1 -0
- package/dist/esm/testing/global-declarations.js +7 -0
- package/dist/esm/testing/global-declarations.js.map +6 -0
- package/dist/esm/testing/global-definitions.d.ts +7 -0
- package/dist/esm/testing/global-definitions.d.ts.map +1 -0
- package/dist/esm/testing/global-definitions.js +27 -0
- package/dist/esm/testing/global-definitions.js.map +6 -0
- package/dist/esm/testing/mocha.d.ts +36 -0
- package/dist/esm/testing/mocha.d.ts.map +1 -0
- package/dist/esm/testing/mocha.js +135 -0
- package/dist/esm/testing/mocha.js.map +6 -0
- package/dist/esm/testing/mocharc.cjs +68 -0
- package/dist/esm/testing/mocharc.d.cts +7 -0
- package/dist/esm/testing/mocks/crypto.d.ts +7 -0
- package/dist/esm/testing/mocks/crypto.d.ts.map +1 -0
- package/dist/esm/testing/mocks/crypto.js +59 -0
- package/dist/esm/testing/mocks/crypto.js.map +6 -0
- package/dist/esm/testing/mocks/environment.d.ts +7 -0
- package/dist/esm/testing/mocks/environment.d.ts.map +1 -0
- package/dist/esm/testing/mocks/environment.js +6 -0
- package/dist/esm/testing/mocks/environment.js.map +6 -0
- package/dist/esm/testing/mocks/index.d.ts +10 -0
- package/dist/esm/testing/mocks/index.d.ts.map +1 -0
- package/dist/esm/testing/mocks/index.js +10 -0
- package/dist/esm/testing/mocks/index.js.map +6 -0
- package/dist/esm/testing/mocks/logging.d.ts +28 -0
- package/dist/esm/testing/mocks/logging.d.ts.map +1 -0
- package/dist/esm/testing/mocks/logging.js +63 -0
- package/dist/esm/testing/mocks/logging.js.map +6 -0
- package/dist/esm/testing/mocks/time.d.ts +88 -0
- package/dist/esm/testing/mocks/time.d.ts.map +1 -0
- package/dist/esm/testing/mocks/time.js +230 -0
- package/dist/esm/testing/mocks/time.js.map +6 -0
- package/dist/esm/testing/node.d.ts +16 -0
- package/dist/esm/testing/node.d.ts.map +1 -0
- package/dist/esm/testing/node.js +78 -0
- package/dist/esm/testing/node.js.map +6 -0
- package/dist/esm/testing/options.d.ts +19 -0
- package/dist/esm/testing/options.d.ts.map +1 -0
- package/dist/esm/testing/options.js +42 -0
- package/dist/esm/testing/options.js.map +6 -0
- package/dist/esm/testing/reporter.d.ts +50 -0
- package/dist/esm/testing/reporter.d.ts.map +1 -0
- package/dist/esm/testing/reporter.js +107 -0
- package/dist/esm/testing/reporter.js.map +6 -0
- package/dist/esm/testing/runner.d.ts +22 -0
- package/dist/esm/testing/runner.d.ts.map +1 -0
- package/dist/esm/testing/runner.js +86 -0
- package/dist/esm/testing/runner.js.map +6 -0
- package/dist/esm/testing/web.d.ts +8 -0
- package/dist/esm/testing/web.d.ts.map +1 -0
- package/dist/esm/testing/web.js +135 -0
- package/dist/esm/testing/web.js.map +6 -0
- package/dist/esm/util/bootstrap.mjs +105 -0
- package/dist/esm/util/docker.d.ts +27 -0
- package/dist/esm/util/docker.d.ts.map +1 -0
- package/dist/esm/util/docker.js +133 -0
- package/dist/esm/util/docker.js.map +6 -0
- package/dist/esm/util/errors.d.ts +8 -0
- package/dist/esm/util/errors.d.ts.map +1 -0
- package/dist/esm/util/errors.js +35 -0
- package/dist/esm/util/errors.js.map +6 -0
- package/dist/esm/util/index.d.ts +8 -0
- package/dist/esm/util/index.d.ts.map +1 -0
- package/dist/esm/util/index.js +8 -0
- package/dist/esm/util/index.js.map +6 -0
- package/dist/esm/util/node-shims.d.ts +7 -0
- package/dist/esm/util/node-shims.d.ts.map +1 -0
- package/dist/esm/util/node-shims.js +11 -0
- package/dist/esm/util/node-shims.js.map +6 -0
- package/dist/esm/util/package.d.ts +61 -0
- package/dist/esm/util/package.d.ts.map +1 -0
- package/dist/esm/util/package.js +304 -0
- package/dist/esm/util/package.js.map +6 -0
- package/dist/esm/util/progress.d.ts +31 -0
- package/dist/esm/util/progress.d.ts.map +1 -0
- package/dist/esm/util/progress.js +202 -0
- package/dist/esm/util/progress.js.map +6 -0
- package/dist/esm/util/tools-path.cjs +13 -0
- package/dist/esm/util/tools-path.d.cts +7 -0
- package/dist/esm/util/trace-unhandled.d.ts +9 -0
- package/dist/esm/util/trace-unhandled.d.ts.map +1 -0
- package/dist/esm/util/trace-unhandled.js +18 -0
- package/dist/esm/util/trace-unhandled.js.map +6 -0
- package/dist/esm/util/wtf.d.ts +10 -0
- package/dist/esm/util/wtf.d.ts.map +1 -0
- package/dist/esm/util/wtf.js +23 -0
- package/dist/esm/util/wtf.js.map +6 -0
- package/dist/esm/versioning/cli.d.ts +7 -0
- package/dist/esm/versioning/cli.d.ts.map +1 -0
- package/dist/esm/versioning/cli.js +32 -0
- package/dist/esm/versioning/cli.js.map +6 -0
- package/dist/esm/versioning/versioner.d.ts +18 -0
- package/dist/esm/versioning/versioner.d.ts.map +1 -0
- package/dist/esm/versioning/versioner.js +115 -0
- package/dist/esm/versioning/versioner.js.map +6 -0
- package/package.json +82 -0
- package/src/building/builder.ts +216 -0
- package/src/building/cli.ts +89 -0
- package/src/building/error.ts +29 -0
- package/src/building/graph.ts +251 -0
- package/src/building/project.ts +313 -0
- package/src/building/tsconfig.ts +69 -0
- package/src/building/typescript/context.ts +85 -0
- package/src/building/typescript/incremental-compiler.ts +126 -0
- package/src/building/typescript/language-service.ts +132 -0
- package/src/building/typescript/solution-builder.ts +67 -0
- package/src/building/typescript.ts +15 -0
- package/src/index.ts +15 -0
- package/src/running/cli.ts +95 -0
- package/src/running/execute.ts +63 -0
- package/src/testing/chip/pics-file.ts +71 -0
- package/src/testing/chip/pics.properties +53 -0
- package/src/testing/chip.ts +420 -0
- package/src/testing/cli.ts +122 -0
- package/src/testing/failure-detail.ts +126 -0
- package/src/testing/files.ts +35 -0
- package/src/testing/global-declarations.ts +50 -0
- package/src/testing/global-definitions.ts +35 -0
- package/src/testing/index.html +16 -0
- package/src/testing/mocha.ts +162 -0
- package/src/testing/mocharc.cjs +68 -0
- package/src/testing/mocharc.d.cts +7 -0
- package/src/testing/mocks/crypto.ts +70 -0
- package/src/testing/mocks/environment.ts +7 -0
- package/src/testing/mocks/index.ts +10 -0
- package/src/testing/mocks/logging.ts +99 -0
- package/src/testing/mocks/time.ts +294 -0
- package/src/testing/node.ts +114 -0
- package/src/testing/options.ts +58 -0
- package/src/testing/reporter.ts +144 -0
- package/src/testing/runner.ts +98 -0
- package/src/testing/web.ts +174 -0
- package/src/tsconfig.json +14 -0
- package/src/util/bootstrap.mjs +105 -0
- package/src/util/docker.ts +176 -0
- package/src/util/errors.ts +33 -0
- package/src/util/index.ts +8 -0
- package/src/util/node-shims.ts +13 -0
- package/src/util/package.ts +369 -0
- package/src/util/progress.ts +252 -0
- package/src/util/tools-path.cjs +13 -0
- package/src/util/tools-path.d.cts +7 -0
- package/src/util/trace-unhandled.ts +17 -0
- package/src/util/wtf.ts +25 -0
- package/src/versioning/cli.ts +43 -0
- package/src/versioning/versioner.ts +139 -0
- package/test/testing/mocks/MockTimeTest.ts +113 -0
- package/test/tsconfig.json +15 -0
- package/tsc/tsconfig.app.json +7 -0
- package/tsc/tsconfig.base.json +41 -0
- package/tsc/tsconfig.lib.json +12 -0
- package/tsc/tsconfig.test.json +7 -0
- package/tsconfig.json +5 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { existsSync, readFileSync, statSync } from "fs";
|
|
8
|
+
import { readdir, readFile, stat, writeFile } from "fs/promises";
|
|
9
|
+
import { glob } from "glob";
|
|
10
|
+
import { dirname, join, relative, resolve } from "path";
|
|
11
|
+
import { maybeStatSync } from "../testing/files.js";
|
|
12
|
+
import { ignoreError, ignoreErrorSync } from "./errors.js";
|
|
13
|
+
import { Progress } from "./progress.js";
|
|
14
|
+
import { toolsPath } from "./tools-path.cjs";
|
|
15
|
+
|
|
16
|
+
export class JsonNotFoundError extends Error {}
|
|
17
|
+
|
|
18
|
+
export const CONFIG_PATH = `src/build.config.ts`;
|
|
19
|
+
export const CODEGEN_PATH = `codegen`;
|
|
20
|
+
|
|
21
|
+
const packageForPath = {} as Record<string, Package | undefined | null>;
|
|
22
|
+
|
|
23
|
+
function findJson(filename: string, path: string = ".", title?: string) {
|
|
24
|
+
path = resolve(path);
|
|
25
|
+
while (true) {
|
|
26
|
+
const json = ignoreErrorSync(["ENOENT", "ENOTDIR"], () =>
|
|
27
|
+
JSON.parse(readFileSync(resolve(path, filename)).toString()),
|
|
28
|
+
);
|
|
29
|
+
if (json) {
|
|
30
|
+
if (title === undefined || json.name === title) {
|
|
31
|
+
return { root: path, json };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const parent = dirname(path);
|
|
35
|
+
if (parent === path) {
|
|
36
|
+
throw new JsonNotFoundError(`Could not locate ${title ?? filename}`);
|
|
37
|
+
}
|
|
38
|
+
path = parent;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function isDirectory(path: string) {
|
|
43
|
+
return !!ignoreErrorSync("ENOENT", () => statSync(path).isDirectory());
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export class Package {
|
|
47
|
+
path: string;
|
|
48
|
+
json: PackageJson;
|
|
49
|
+
supportsEsm: boolean;
|
|
50
|
+
supportsCjs: boolean;
|
|
51
|
+
hasSrc: boolean;
|
|
52
|
+
hasTests: boolean;
|
|
53
|
+
hasConfig: boolean;
|
|
54
|
+
isLibrary: boolean;
|
|
55
|
+
#aliases?: Record<string, string>;
|
|
56
|
+
|
|
57
|
+
constructor({
|
|
58
|
+
path = ".",
|
|
59
|
+
name,
|
|
60
|
+
}: {
|
|
61
|
+
path?: string;
|
|
62
|
+
name?: string;
|
|
63
|
+
} = {}) {
|
|
64
|
+
const { root, json } = findJson("package.json", path, name);
|
|
65
|
+
this.path = root;
|
|
66
|
+
this.json = json;
|
|
67
|
+
|
|
68
|
+
const { esm, cjs } = selectFormats(this.json);
|
|
69
|
+
this.supportsEsm = esm;
|
|
70
|
+
this.supportsCjs = cjs;
|
|
71
|
+
|
|
72
|
+
this.hasSrc = isDirectory(this.resolve("src"));
|
|
73
|
+
this.hasTests = isDirectory(this.resolve("test"));
|
|
74
|
+
|
|
75
|
+
this.isLibrary = !!(this.json.main || this.json.module || this.json.exports);
|
|
76
|
+
|
|
77
|
+
this.hasConfig = this.hasFile(this.resolve(CONFIG_PATH));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
get name() {
|
|
81
|
+
return this.json.name;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
get exports() {
|
|
85
|
+
return this.json.exports;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
get hasCodegen() {
|
|
89
|
+
return this.hasDirectory(CODEGEN_PATH);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
resolve(path: string) {
|
|
93
|
+
return resolve(this.path, path);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
relative(path: string) {
|
|
97
|
+
return relative(this.path, path);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
async glob(pattern: string) {
|
|
101
|
+
// Glob only understands forward-slash as separator because reasons
|
|
102
|
+
pattern = this.resolve(pattern).replace(/\\/g, "/");
|
|
103
|
+
|
|
104
|
+
return await glob(pattern);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
start(what: string) {
|
|
108
|
+
const progress = new Progress();
|
|
109
|
+
progress.startup(what, this);
|
|
110
|
+
return progress;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
async lastModified(...paths: string[]) {
|
|
114
|
+
return this.lastModifiedAbsolute(paths.map(p => this.resolve(p)));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
private async lastModifiedAbsolute(paths: string[]) {
|
|
118
|
+
let mtime = 0;
|
|
119
|
+
await Promise.all(
|
|
120
|
+
paths.map(async p => {
|
|
121
|
+
const stats = await ignoreError("ENOENT", async () => await stat(p));
|
|
122
|
+
if (!stats) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
let thisMtime;
|
|
127
|
+
if (stats.isDirectory()) {
|
|
128
|
+
const paths = (await readdir(p)).map(p2 => resolve(p, p2));
|
|
129
|
+
thisMtime = await this.lastModifiedAbsolute(paths);
|
|
130
|
+
} else {
|
|
131
|
+
thisMtime = stats.mtimeMs;
|
|
132
|
+
}
|
|
133
|
+
if (thisMtime > mtime) {
|
|
134
|
+
mtime = thisMtime;
|
|
135
|
+
}
|
|
136
|
+
}),
|
|
137
|
+
);
|
|
138
|
+
return mtime;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
get dependencies() {
|
|
142
|
+
let result = Array<string>();
|
|
143
|
+
for (const type of ["dependencies", "optionalDependencies", "devDependencies", "peerDependencies"]) {
|
|
144
|
+
if (typeof this.json[type] === "object" && this.json[type] !== null) {
|
|
145
|
+
result = [...result, ...Object.keys(this.json[type])];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return [...new Set(result)];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
get workspace() {
|
|
152
|
+
return Package.workspaceFor(this.path);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
static set workingDir(wd: string) {
|
|
156
|
+
workingDir = wd;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
static get workspace() {
|
|
160
|
+
return this.workspaceFor(workingDir);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
static workspaceFor(cwd: string) {
|
|
164
|
+
if (!workspace) {
|
|
165
|
+
workspace = find(cwd, pkg => Array.isArray(pkg.json.workspaces));
|
|
166
|
+
}
|
|
167
|
+
return workspace;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
static get tools() {
|
|
171
|
+
if (!tools) {
|
|
172
|
+
tools = new Package({ path: toolsPath });
|
|
173
|
+
}
|
|
174
|
+
return tools;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
static findExport(name: string, type: "cjs" | "esm" = "esm") {
|
|
178
|
+
return this.workspace.resolveImport(name, type);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
resolveExport(name: string, type: "cjs" | "esm" = "esm") {
|
|
182
|
+
if (!name.startsWith(".")) {
|
|
183
|
+
name = `./${name}`;
|
|
184
|
+
}
|
|
185
|
+
const exportDetail = this.exports?.[name];
|
|
186
|
+
|
|
187
|
+
if (exportDetail) {
|
|
188
|
+
const exp = findExportCondition(exportDetail, type);
|
|
189
|
+
if (exp) {
|
|
190
|
+
return this.resolve(exp);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (name === ".") {
|
|
195
|
+
if (type === "esm" && this.json.module) {
|
|
196
|
+
return this.resolve(this.json.module);
|
|
197
|
+
}
|
|
198
|
+
if (this.json.main) {
|
|
199
|
+
return this.resolve(this.json.main);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
throw new Error(`Cannot resolve export ${name} in package ${this.name}`);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
resolveImport(name: string, type: "cjs" | "esm" = "esm") {
|
|
207
|
+
const segments = name.split("/");
|
|
208
|
+
let subdir = segments.shift() as string;
|
|
209
|
+
if (subdir.startsWith("@") && segments.length) {
|
|
210
|
+
subdir = `${subdir}/${segments.shift()}`;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
let resolveIn = this.path;
|
|
214
|
+
while (true) {
|
|
215
|
+
if (isDirectory(resolve(resolveIn, "node_modules", subdir))) {
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
const nextResolveIn = dirname(resolveIn);
|
|
219
|
+
if (nextResolveIn === resolveIn) {
|
|
220
|
+
throw new Error(`Cannot find module ${subdir} from ${this.path}`);
|
|
221
|
+
}
|
|
222
|
+
resolveIn = nextResolveIn;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const pkg = Package.forPath(resolve(resolveIn, "node_modules", subdir));
|
|
226
|
+
return pkg.resolveExport(segments.length ? segments.join("/") : ".", type);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
hasFile(path: string) {
|
|
230
|
+
return !!this.#maybeStat(path)?.isFile();
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
hasDirectory(path: string) {
|
|
234
|
+
return !!this.#maybeStat(path)?.isDirectory();
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
async readFile(path: string) {
|
|
238
|
+
return readFile(this.resolve(path), "utf-8");
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
readFileSync(path: string) {
|
|
242
|
+
return readFileSync(this.resolve(path), "utf-8");
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
async writeFile(path: string, contents: unknown) {
|
|
246
|
+
await writeFile(this.resolve(path), `${contents}`);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
async save() {
|
|
250
|
+
await this.writeFile(join(this.path, "package.json"), JSON.stringify(this.json, undefined, 4));
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
async readJson(path: string) {
|
|
254
|
+
const text = await this.readFile(path);
|
|
255
|
+
try {
|
|
256
|
+
return JSON.parse(text);
|
|
257
|
+
} catch (e) {
|
|
258
|
+
if (!(e instanceof Error)) {
|
|
259
|
+
e = new Error(`${e}`);
|
|
260
|
+
}
|
|
261
|
+
(e as Error).message = `Error parsing "${this.resolve(path)}": ${(e as Error).message}`;
|
|
262
|
+
}
|
|
263
|
+
return JSON.parse(await this.readFile(path));
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
async writeJson(path: string, value: {}) {
|
|
267
|
+
await this.writeFile(path, JSON.stringify(value, undefined, 4));
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
static maybeForPath(path: string) {
|
|
271
|
+
function find(path: string): Package | null {
|
|
272
|
+
let result = packageForPath[path];
|
|
273
|
+
if (result === undefined) {
|
|
274
|
+
if (existsSync(join(path, "package.json"))) {
|
|
275
|
+
result = new Package({ path });
|
|
276
|
+
} else {
|
|
277
|
+
result = find(dirname(path));
|
|
278
|
+
}
|
|
279
|
+
packageForPath[path] = result;
|
|
280
|
+
}
|
|
281
|
+
return result;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
const result = find(path);
|
|
285
|
+
|
|
286
|
+
return result ?? undefined;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
static forPath(path: string) {
|
|
290
|
+
const result = this.maybeForPath(path);
|
|
291
|
+
if (result !== undefined) {
|
|
292
|
+
return result;
|
|
293
|
+
}
|
|
294
|
+
throw new Error(`Cannot find package.json for "${path}"`);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
get aliases(): Record<string, string> {
|
|
298
|
+
if (this.#aliases !== undefined) {
|
|
299
|
+
return this.#aliases;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
this.#aliases = {
|
|
303
|
+
...Package.maybeForPath(dirname(this.path))?.aliases,
|
|
304
|
+
...this.json.imports,
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
return this.#aliases;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
#maybeStat(path: string) {
|
|
311
|
+
return maybeStatSync(this.resolve(path));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export type PackageJson = {
|
|
316
|
+
name: string;
|
|
317
|
+
version: string;
|
|
318
|
+
imports: Record<string, string>;
|
|
319
|
+
[key: string]: any;
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
let workingDir = ".";
|
|
323
|
+
let workspace: Package | undefined;
|
|
324
|
+
let tools: Package | undefined;
|
|
325
|
+
|
|
326
|
+
function find(startDir: string, selector: (pkg: Package) => boolean): Package {
|
|
327
|
+
let pkg = new Package({ path: startDir });
|
|
328
|
+
while (!selector(pkg)) {
|
|
329
|
+
pkg = new Package({ path: dirname(pkg.path) });
|
|
330
|
+
}
|
|
331
|
+
return pkg;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
function selectFormats(json: any) {
|
|
335
|
+
let esm: boolean, cjs: boolean;
|
|
336
|
+
|
|
337
|
+
if (json.type === "module") {
|
|
338
|
+
esm = true;
|
|
339
|
+
cjs =
|
|
340
|
+
(json.main !== undefined && json.module !== undefined) ||
|
|
341
|
+
!!Object.values(json.exports ?? {}).find((exp: any) => exp.require);
|
|
342
|
+
} else {
|
|
343
|
+
cjs = true;
|
|
344
|
+
esm = !!json.module || !!Object.values(json.exports ?? {}).find((exp: any) => exp.import);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
return { esm, cjs };
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
function findExportCondition(detail: Record<string, any>, type: "esm" | "cjs"): string | undefined {
|
|
351
|
+
if (type === "esm" && detail.import) {
|
|
352
|
+
let exp = detail.import;
|
|
353
|
+
if (exp && typeof exp !== "string") {
|
|
354
|
+
exp = findExportCondition(exp, type);
|
|
355
|
+
}
|
|
356
|
+
if (exp) {
|
|
357
|
+
return exp;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
let exp = detail.require ?? detail.node ?? detail.default;
|
|
362
|
+
if (exp && typeof exp !== "string") {
|
|
363
|
+
exp = findExportCondition(exp, type);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
if (typeof exp === "string") {
|
|
367
|
+
return exp;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import colors from "ansi-colors";
|
|
8
|
+
import { stderr, stdout } from "process";
|
|
9
|
+
import { Package } from "./package.js";
|
|
10
|
+
|
|
11
|
+
const CLEAR = "\x1b[K";
|
|
12
|
+
const SPINNER = "◐◓◑◒"; //"⡜⠔⠢⢣"; //["⚫︎", "⚪︎"]; "⡈⠔⠢⢁";
|
|
13
|
+
const SPINNER_INTERVAL = 100;
|
|
14
|
+
|
|
15
|
+
function packageIdentity(pkg: Package) {
|
|
16
|
+
let identity = colors.bold(pkg.json.name);
|
|
17
|
+
if (pkg.json.version) {
|
|
18
|
+
identity = `${identity}@${pkg.json.version}`;
|
|
19
|
+
}
|
|
20
|
+
return identity;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Intercept writes to stderr and stdout so we can ensure our updates appear on different lines from other output.
|
|
25
|
+
*/
|
|
26
|
+
const writeStatus = (() => {
|
|
27
|
+
let lastStatus: undefined | string;
|
|
28
|
+
let needNewline = false;
|
|
29
|
+
|
|
30
|
+
function intercept(stream: NodeJS.WriteStream) {
|
|
31
|
+
const actualWrite = stream.write;
|
|
32
|
+
stream.write = (payload: Uint8Array | string, ...params: any[]) => {
|
|
33
|
+
if (lastStatus) {
|
|
34
|
+
actualWrite.call(stream, "\n");
|
|
35
|
+
lastStatus = undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (!payload.length) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Require a newline for status updates any time the cursor does not end at the beginning of a line
|
|
43
|
+
needNewline =
|
|
44
|
+
// Update ends in newline
|
|
45
|
+
payload[payload.length - 1] === "\n" &&
|
|
46
|
+
// Update ends in carriage return
|
|
47
|
+
payload[payload.length - 1] !== "\r";
|
|
48
|
+
|
|
49
|
+
return actualWrite.call(stream, payload, ...params);
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
intercept(stdout);
|
|
54
|
+
intercept(stderr);
|
|
55
|
+
|
|
56
|
+
return function writeStatus(text: string, willOverwrite = false) {
|
|
57
|
+
const columns = process.stdout.columns;
|
|
58
|
+
if (willOverwrite && columns !== undefined && text.length > columns - 2) {
|
|
59
|
+
text = filterAnsi(text, columns - 2) + "…";
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
text += willOverwrite ? "\r" : "\n";
|
|
63
|
+
if (text === lastStatus) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (lastStatus) {
|
|
68
|
+
lastStatus = undefined;
|
|
69
|
+
stdout.write(CLEAR);
|
|
70
|
+
} else if (needNewline && !text.startsWith("\n")) {
|
|
71
|
+
stdout.write("\n");
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
stdout.write(text);
|
|
75
|
+
|
|
76
|
+
lastStatus = text;
|
|
77
|
+
};
|
|
78
|
+
})();
|
|
79
|
+
|
|
80
|
+
export class Progress {
|
|
81
|
+
status = Progress.Status.Startup;
|
|
82
|
+
#ongoingText?: string;
|
|
83
|
+
#start?: number;
|
|
84
|
+
#spinner = "⧗";
|
|
85
|
+
#refreshInterval?: ReturnType<typeof setInterval>;
|
|
86
|
+
#spinnerPosition = 0;
|
|
87
|
+
#spinnerWindow?: number;
|
|
88
|
+
|
|
89
|
+
constructor() {}
|
|
90
|
+
|
|
91
|
+
emphasize(text: unknown) {
|
|
92
|
+
return colors.bold(`${text}`);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
deemphasize(text: unknown) {
|
|
96
|
+
return colors.dim(`${text}`);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
skip(why: string, pkg: Package) {
|
|
100
|
+
stdout.write(colors.dim(`Skip ${packageIdentity(pkg)}: ${why}\n\n`));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
startup(what: string, pkgOrOverwrite?: Package | boolean) {
|
|
104
|
+
if (process.stdout.isTTY) {
|
|
105
|
+
this.#updateSpinner();
|
|
106
|
+
this.#refreshInterval = setInterval(this.refresh.bind(this), SPINNER_INTERVAL);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
this.status = Progress.Status.Startup;
|
|
110
|
+
if (pkgOrOverwrite === undefined || typeof pkgOrOverwrite === "boolean") {
|
|
111
|
+
writeStatus(what, pkgOrOverwrite ?? true);
|
|
112
|
+
} else {
|
|
113
|
+
writeStatus(`${what} ${packageIdentity(pkgOrOverwrite)}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
update(text: string, extra?: string) {
|
|
118
|
+
this.status = Progress.Status.Ongoing;
|
|
119
|
+
let duration;
|
|
120
|
+
if (this.#start === undefined) {
|
|
121
|
+
this.#start = new Date().getTime();
|
|
122
|
+
duration = "";
|
|
123
|
+
} else {
|
|
124
|
+
duration = this.#duration;
|
|
125
|
+
}
|
|
126
|
+
extra = extra === undefined ? "" : ` ${extra}`;
|
|
127
|
+
this.#ongoingText = `${text} ${duration}${extra}`;
|
|
128
|
+
this.#writeOngoing();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
#writeOngoing() {
|
|
132
|
+
if (!this.#ongoingText) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
writeStatus(` ${colors.yellow(this.#spinner)} ${this.#ongoingText}`, true);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
success(text: string) {
|
|
140
|
+
this.status = Progress.Status.Success;
|
|
141
|
+
writeStatus(` ${colors.green("✓")} ${text} ${this.#duration}`);
|
|
142
|
+
this.#start = this.#ongoingText = undefined;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
failure(text: string) {
|
|
146
|
+
this.status = Progress.Status.Failure;
|
|
147
|
+
writeStatus(` ${colors.redBright("✗")} ${text} ${this.#duration}`);
|
|
148
|
+
this.#start = this.#ongoingText = undefined;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
info(label: string, value?: any) {
|
|
152
|
+
if (value) {
|
|
153
|
+
label = `${colors.dim(label)} ${value}`;
|
|
154
|
+
}
|
|
155
|
+
writeStatus(` ${colors.dim("‣")} ${label}`);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
shutdown() {
|
|
159
|
+
if (this.#refreshInterval) {
|
|
160
|
+
clearInterval(this.#refreshInterval);
|
|
161
|
+
this.#refreshInterval = undefined;
|
|
162
|
+
}
|
|
163
|
+
writeStatus("");
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
refresh() {
|
|
167
|
+
if (this.#updateSpinner()) {
|
|
168
|
+
this.#writeOngoing();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
#updateSpinner() {
|
|
173
|
+
if (!stdout.isTTY) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const window = Math.floor(new Date().getTime() / SPINNER_INTERVAL);
|
|
178
|
+
if (this.#spinnerWindow === window) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
this.#spinnerWindow = window;
|
|
182
|
+
|
|
183
|
+
this.#spinnerPosition = (this.#spinnerPosition + 1) % SPINNER.length;
|
|
184
|
+
this.#spinner = SPINNER[this.#spinnerPosition];
|
|
185
|
+
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
async run(what: string, fn: () => void | Promise<void>) {
|
|
190
|
+
this.update(what);
|
|
191
|
+
try {
|
|
192
|
+
await fn();
|
|
193
|
+
} catch (e) {
|
|
194
|
+
this.failure(what);
|
|
195
|
+
throw e;
|
|
196
|
+
}
|
|
197
|
+
this.success(what);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
get #duration() {
|
|
201
|
+
let ms = this.#start ? new Date().getTime() - this.#start : 0;
|
|
202
|
+
if (ms < 1000) {
|
|
203
|
+
ms = Math.round(ms / 10) / 100;
|
|
204
|
+
} else if (ms < 10000) {
|
|
205
|
+
ms = Math.round(ms / 100) / 10;
|
|
206
|
+
} else {
|
|
207
|
+
ms = Math.trunc(ms / 1000);
|
|
208
|
+
}
|
|
209
|
+
return colors.dim.yellow(`(${ms}s)`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export namespace Progress {
|
|
214
|
+
export enum Status {
|
|
215
|
+
Startup = "startup",
|
|
216
|
+
Ongoing = "ongoing",
|
|
217
|
+
Success = "success",
|
|
218
|
+
Failure = "failure",
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// See https://stackoverflow.com/questions/26238553/how-can-i-truncate-a-string-to-a-maximum-length-without-breaking-ansi-escape-cod
|
|
223
|
+
// TODO - this function doesn't seem entirely correct, still seems to truncate too much
|
|
224
|
+
// Crop the length of lines, ANSI escape code aware
|
|
225
|
+
// Always outputs every escape char, regardless of length (so we always end up with a sane state)
|
|
226
|
+
// Visible characters are filtered out once length is exceeded
|
|
227
|
+
function filterAnsi(str: string, len: number) {
|
|
228
|
+
if (!len || len < 10) return str; // probably not a valid console -- send back the whole line
|
|
229
|
+
let count = 0, // number of visible chars on line so far
|
|
230
|
+
esc = false, // in an escape sequence
|
|
231
|
+
longesc = false; // in a multi-character escape sequence
|
|
232
|
+
let outp = true; // should output this character
|
|
233
|
+
return str
|
|
234
|
+
.split("")
|
|
235
|
+
.filter(function (c) {
|
|
236
|
+
// filter characters...
|
|
237
|
+
if (esc && !longesc && c == "[") longesc = true; // have seen an escape, now '[', start multi-char escape
|
|
238
|
+
if (c == "\x1b") esc = true; // start of escape sequence
|
|
239
|
+
|
|
240
|
+
outp = count < len || esc; // if length exceeded, don't output non-escape chars
|
|
241
|
+
if (!esc && !longesc) count++; // if not in escape, count visible char
|
|
242
|
+
|
|
243
|
+
if (esc && !longesc && c != "\x1b") esc = false; // out of single char escape
|
|
244
|
+
if (longesc && c != "[" && c >= "@" && c <= "~") {
|
|
245
|
+
esc = false;
|
|
246
|
+
longesc = false;
|
|
247
|
+
} // end of multi-char escape
|
|
248
|
+
|
|
249
|
+
return outp; // result for filter
|
|
250
|
+
})
|
|
251
|
+
.join(""); // glue chars back into string
|
|
252
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { resolve } = require("path");
|
|
8
|
+
|
|
9
|
+
// Node makes it impossible to obtain the path of the current file in a matter that transpiles cleanly to both ESM and
|
|
10
|
+
// CJS. __dirname is not available in ESM but you can't reference import.meta.url in CJS even conditionally because it
|
|
11
|
+
// is a compile-time error. So instead we locate the root of the tools package in this file which always runs as CJS
|
|
12
|
+
// and is thus importable into both ESM and CJS.
|
|
13
|
+
exports.toolsPath = resolve(__dirname, "../..");
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export const traceUnhandled = {
|
|
8
|
+
async initialize() {
|
|
9
|
+
// We process args and environment manually so we don't need dependencies and can install as early as possible
|
|
10
|
+
if (!process.argv.includes("--trace-unhandled") && !process.env.MATTER_TRACE_UNHANDLED) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const { register } = await import("trace-unhandled");
|
|
15
|
+
register();
|
|
16
|
+
},
|
|
17
|
+
};
|
package/src/util/wtf.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export const wtf = {
|
|
8
|
+
async initialize() {
|
|
9
|
+
// This will only work under actual Node.js
|
|
10
|
+
if (typeof process !== "object" || process?.release?.name !== "node") {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// We process args and environment manually so we don't need dependencies and can install wtfnode as early as
|
|
15
|
+
// possible
|
|
16
|
+
if (!process.argv.includes("--wtf") && !process.env.MATTER_WTF) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const { dump } = await import("wtfnode");
|
|
21
|
+
this.dump = () => dump();
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
dump() {},
|
|
25
|
+
};
|