@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,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { relative, resolve } from "path";
|
|
8
|
+
import { Graph } from "./graph.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Unfortunately typescript's "project references" are redundant with package.json dependencies. We don't use them for
|
|
12
|
+
* build but there are still some advantages to maintaining them so we just ensure they're in sync during workspace
|
|
13
|
+
* builds.
|
|
14
|
+
*
|
|
15
|
+
* One discussion on the topic: https://github.com/microsoft/TypeScript/issues/25376
|
|
16
|
+
*/
|
|
17
|
+
export async function syncAllTsconfigs(graph: Graph) {
|
|
18
|
+
const workspace = graph.nodes[0].pkg.workspace;
|
|
19
|
+
const rootTsconfig = await workspace.readJson("tsconfig.json");
|
|
20
|
+
|
|
21
|
+
const originalReferences = rootTsconfig.references;
|
|
22
|
+
rootTsconfig.references = [];
|
|
23
|
+
|
|
24
|
+
for (const node of graph.nodes) {
|
|
25
|
+
await syncPackageTsconfigs(graph, node);
|
|
26
|
+
rootTsconfig.references.push({ path: workspace.relative(node.pkg.path) });
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (referencesChanged(originalReferences, rootTsconfig.references)) {
|
|
30
|
+
await workspace.writeJson("tsconfig.json", rootTsconfig);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function referencesChanged(originalReferences: unknown, newReferences: unknown) {
|
|
35
|
+
return JSON.stringify(originalReferences) !== JSON.stringify(newReferences);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export async function syncPackageTsconfigs(graph: Graph, node: Graph.Node) {
|
|
39
|
+
await syncSubproject(node, "src");
|
|
40
|
+
await syncSubproject(node, "test", node.pkg.resolve("src"), graph.get("@matter/tools").pkg.resolve("src"));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async function syncSubproject(node: Graph.Node, path: string, ...extraRefs: string[]) {
|
|
44
|
+
path = node.pkg.resolve(path);
|
|
45
|
+
|
|
46
|
+
const tsconfigPath = resolve(path, "tsconfig.json");
|
|
47
|
+
if (!node.pkg.hasFile(tsconfigPath)) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const tsconfig = await node.pkg.readJson(tsconfigPath);
|
|
52
|
+
|
|
53
|
+
let refs = tsconfig.refs as undefined | { path: string }[];
|
|
54
|
+
|
|
55
|
+
if (refs === undefined) {
|
|
56
|
+
refs = [];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const deps = node.dependencies.map(dep => dep.pkg.resolve("src")).filter(p => !p.match(/packages\/tools/));
|
|
60
|
+
|
|
61
|
+
const desired = [...new Set([...deps, ...extraRefs])];
|
|
62
|
+
|
|
63
|
+
const newReferences = desired.map(ref => ({ path: relative(path, ref) }));
|
|
64
|
+
|
|
65
|
+
if (referencesChanged(tsconfig.references, newReferences)) {
|
|
66
|
+
tsconfig.references = newReferences;
|
|
67
|
+
await node.pkg.writeJson(tsconfigPath, tsconfig);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { dirname } from "path";
|
|
8
|
+
import {
|
|
9
|
+
createCompilerHost,
|
|
10
|
+
Diagnostic,
|
|
11
|
+
formatDiagnosticsWithColorAndContext,
|
|
12
|
+
parseJsonConfigFileContent,
|
|
13
|
+
readConfigFile,
|
|
14
|
+
sys,
|
|
15
|
+
} from "typescript";
|
|
16
|
+
import { Package } from "../../util/package.js";
|
|
17
|
+
import { BuildError } from "../error.js";
|
|
18
|
+
|
|
19
|
+
export interface TypescriptContext {
|
|
20
|
+
build(pkg: Package, path: string, emit?: boolean): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export namespace TypescriptContext {
|
|
24
|
+
export function diagnose(diagnostics?: Diagnostic | Diagnostic[]) {
|
|
25
|
+
if (diagnostics === undefined) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (Array.isArray(diagnostics)) {
|
|
29
|
+
if (!diagnostics.length) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
} else {
|
|
33
|
+
diagnostics = [diagnostics];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const host = createCompilerHost({});
|
|
37
|
+
|
|
38
|
+
let formatted = formatDiagnosticsWithColorAndContext(diagnostics, host);
|
|
39
|
+
|
|
40
|
+
// Strangely there are not newlines between errors in this output like there is when you run tsc from the
|
|
41
|
+
// command line. Use the "light blue" ANSI escape code as an injection point for an additional newline
|
|
42
|
+
//
|
|
43
|
+
// eslint-disable-next-line no-control-regex
|
|
44
|
+
formatted = formatted.replace(/\u001b\[96m/gms, "\n\u001b[96m");
|
|
45
|
+
|
|
46
|
+
throw new BuildError(formatted);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function compilerOptionsFor(path: string, ignoreErrors = false) {
|
|
50
|
+
const file = readConfigFile(path, sys.readFile);
|
|
51
|
+
diagnose(file.error);
|
|
52
|
+
const config = parseJsonConfigFileContent(file.config, sys, dirname(path));
|
|
53
|
+
if (!ignoreErrors) {
|
|
54
|
+
diagnose(config.errors);
|
|
55
|
+
}
|
|
56
|
+
return config.options;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function instrumentHostForSpinner(host: {}, refreshCallback?: () => void) {
|
|
60
|
+
if (!refreshCallback) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// The refresh callback allows us to make spinner updates even though TS is synchronous.
|
|
65
|
+
//
|
|
66
|
+
// TODO - add interception points as spinner still hangs
|
|
67
|
+
|
|
68
|
+
for (const name of ["readFile", "writeFile", "getSourceFile"]) {
|
|
69
|
+
if (!(name in host)) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const fn = (host as Record<string, () => unknown>)[name];
|
|
74
|
+
if (typeof fn !== "function") {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
(host as Record<string, () => unknown>)[name] = (...args: any) => {
|
|
79
|
+
const result = fn.apply(host, args);
|
|
80
|
+
refreshCallback();
|
|
81
|
+
return result;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { existsSync } from "fs";
|
|
8
|
+
import { CompilerOptions, createIncrementalCompilerHost, createIncrementalProgram } from "typescript";
|
|
9
|
+
import { Package } from "../../util/package.js";
|
|
10
|
+
import { InternalBuildError } from "../error.js";
|
|
11
|
+
import { Graph } from "../graph.js";
|
|
12
|
+
import { TypescriptContext } from "./context.js";
|
|
13
|
+
|
|
14
|
+
export function createIncrementalCompilerContext(
|
|
15
|
+
_workspace: Package,
|
|
16
|
+
_graph: Graph | undefined,
|
|
17
|
+
refreshCallback?: () => void,
|
|
18
|
+
): TypescriptContext {
|
|
19
|
+
const baseOptions = {
|
|
20
|
+
...TypescriptContext.compilerOptionsFor(Package.tools.resolve("tsc/tsconfig.base.json")),
|
|
21
|
+
|
|
22
|
+
incremental: true,
|
|
23
|
+
isolatedModules: true,
|
|
24
|
+
skipLibCheck: true,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
return { build };
|
|
28
|
+
|
|
29
|
+
async function build(pkg: Package, path: string, emit?: boolean) {
|
|
30
|
+
let options;
|
|
31
|
+
if (emit) {
|
|
32
|
+
options = {
|
|
33
|
+
outDir: pkg.resolve("build/types"),
|
|
34
|
+
emitDeclarationOnly: true,
|
|
35
|
+
sourceMap: true,
|
|
36
|
+
declarationMap: true,
|
|
37
|
+
};
|
|
38
|
+
} else {
|
|
39
|
+
options = {
|
|
40
|
+
noEmit: true,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
options = {
|
|
45
|
+
...baseOptions,
|
|
46
|
+
tsBuildInfoFile: pkg.resolve("build/tsbuildinfo"),
|
|
47
|
+
rootDir: pkg.path,
|
|
48
|
+
...options,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
delete options.composite;
|
|
52
|
+
|
|
53
|
+
if (pkg.hasSrc) {
|
|
54
|
+
loadConfiguredOptions(pkg.resolve("src/tsconfig.json"), options);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (pkg.hasTests) {
|
|
58
|
+
loadConfiguredOptions(pkg.resolve("src/tsconfig.json"), options);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const host = createIncrementalCompilerHost(options);
|
|
62
|
+
|
|
63
|
+
TypescriptContext.instrumentHostForSpinner(host, refreshCallback);
|
|
64
|
+
const sources = Array<string>();
|
|
65
|
+
|
|
66
|
+
if (path === "src") {
|
|
67
|
+
if (pkg.hasSrc) {
|
|
68
|
+
sources.push(...(await pkg.glob("src/**/*.ts")));
|
|
69
|
+
}
|
|
70
|
+
} else if (path === "test") {
|
|
71
|
+
if (pkg.hasTests) {
|
|
72
|
+
sources.push(...(await pkg.glob("test/**/*.ts")));
|
|
73
|
+
}
|
|
74
|
+
} else {
|
|
75
|
+
throw new InternalBuildError(`Unsupported build path "${path}"`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const program = createIncrementalProgram({
|
|
79
|
+
rootNames: sources,
|
|
80
|
+
options,
|
|
81
|
+
host,
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// See https://github.com/microsoft/TypeScript/issues/31849
|
|
85
|
+
const diagnostics = [
|
|
86
|
+
...program.getConfigFileParsingDiagnostics(),
|
|
87
|
+
...program.getSyntacticDiagnostics(),
|
|
88
|
+
...program.getOptionsDiagnostics(),
|
|
89
|
+
...program.getSemanticDiagnostics(),
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
if (!options.noEmit) {
|
|
93
|
+
diagnostics.push(...program.emit().diagnostics);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
TypescriptContext.diagnose(diagnostics);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* As we largely configure based on convention, we mostly ignore tsconfig.json files in project directories. The
|
|
101
|
+
* limited number of project-specific options we allow load here.
|
|
102
|
+
*/
|
|
103
|
+
function loadConfiguredOptions(path: string, into: CompilerOptions) {
|
|
104
|
+
if (!existsSync(path)) {
|
|
105
|
+
// Package tsconfigs are optional
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const options = TypescriptContext.compilerOptionsFor(path);
|
|
110
|
+
|
|
111
|
+
delete options?.composite;
|
|
112
|
+
|
|
113
|
+
const types = options?.types;
|
|
114
|
+
if (types) {
|
|
115
|
+
if (into.types) {
|
|
116
|
+
const merged = new Set(into.types);
|
|
117
|
+
for (const type of types) {
|
|
118
|
+
merged.add(type);
|
|
119
|
+
}
|
|
120
|
+
into.types = [...merged];
|
|
121
|
+
} else {
|
|
122
|
+
into.types = types;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { statSync } from "fs";
|
|
8
|
+
import { join } from "path";
|
|
9
|
+
import {
|
|
10
|
+
createDocumentRegistry,
|
|
11
|
+
createLanguageService,
|
|
12
|
+
createModuleResolutionCache,
|
|
13
|
+
getDefaultLibFileName,
|
|
14
|
+
JSDocParsingMode,
|
|
15
|
+
LanguageServiceHost,
|
|
16
|
+
LanguageServiceMode,
|
|
17
|
+
ModuleKind,
|
|
18
|
+
ResolvedModuleWithFailedLookupLocations,
|
|
19
|
+
resolveModuleName,
|
|
20
|
+
ScriptSnapshot,
|
|
21
|
+
} from "typescript";
|
|
22
|
+
import { Package } from "../../util/package.js";
|
|
23
|
+
import { Graph } from "../graph.js";
|
|
24
|
+
import { TypescriptContext } from "./context.js";
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* This is highly experimental and not yet fully functional.
|
|
28
|
+
*/
|
|
29
|
+
export async function createLanguageServiceContext(
|
|
30
|
+
workspace: Package,
|
|
31
|
+
_graph: Graph | undefined,
|
|
32
|
+
refreshCallback: () => void,
|
|
33
|
+
): Promise<TypescriptContext> {
|
|
34
|
+
const baseOptions = TypescriptContext.compilerOptionsFor(Package.tools.resolve("tsc/tsconfig.base.json"), true);
|
|
35
|
+
const registry = createDocumentRegistry(true, workspace.path, JSDocParsingMode.ParseNone);
|
|
36
|
+
const resolutionCache = createModuleResolutionCache(workspace.path, name => name, baseOptions);
|
|
37
|
+
//const myPackageNames = new Set(graph?.nodes.map(node => node.pkg.name));
|
|
38
|
+
|
|
39
|
+
return { build };
|
|
40
|
+
|
|
41
|
+
async function build(pkg: Package, path: string, emit?: boolean) {
|
|
42
|
+
const files = await pkg.glob(join(path, "**/*.ts"));
|
|
43
|
+
const host = await createLanguageServiceHost(pkg, path, files);
|
|
44
|
+
const ls = createLanguageService(host, registry, LanguageServiceMode.Semantic);
|
|
45
|
+
|
|
46
|
+
TypescriptContext.diagnose(ls.getCompilerOptionsDiagnostics());
|
|
47
|
+
|
|
48
|
+
for (const path of files) {
|
|
49
|
+
TypescriptContext.diagnose([...ls.getSyntacticDiagnostics(path), ...ls.getSemanticDiagnostics(path)]);
|
|
50
|
+
|
|
51
|
+
if (emit) {
|
|
52
|
+
const relativePath = pkg.relative(path);
|
|
53
|
+
await pkg.writeFile(join("build/types", relativePath), ls.getEmitOutput(path));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
TypescriptContext.diagnose(ls.getCompilerOptionsDiagnostics());
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async function createLanguageServiceHost(pkg: Package, path: string, files: string[]) {
|
|
61
|
+
const host: LanguageServiceHost = {
|
|
62
|
+
getCompilationSettings() {
|
|
63
|
+
return TypescriptContext.compilerOptionsFor(join(path, "tsconfig.json"));
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
getScriptFileNames() {
|
|
67
|
+
return files;
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
getScriptVersion(filename) {
|
|
71
|
+
return statSync(filename).mtime.toISOString();
|
|
72
|
+
},
|
|
73
|
+
|
|
74
|
+
getScriptSnapshot(filename) {
|
|
75
|
+
try {
|
|
76
|
+
return ScriptSnapshot.fromString(pkg.readFileSync(filename));
|
|
77
|
+
} catch (e) {
|
|
78
|
+
switch ((e as { code: string }).code) {
|
|
79
|
+
case "ENOENT":
|
|
80
|
+
case "ENOTDIR":
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
throw e;
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
getCurrentDirectory() {
|
|
88
|
+
return path;
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
getDefaultLibFileName(options) {
|
|
92
|
+
return workspace.resolve(join("node_modules/typescript/lib", getDefaultLibFileName(options)));
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
readFile(path: string) {
|
|
96
|
+
refreshCallback();
|
|
97
|
+
return pkg.readFileSync(path);
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
fileExists(path: string) {
|
|
101
|
+
return pkg.hasFile(path);
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
resolveModuleNameLiterals(
|
|
105
|
+
moduleLiterals,
|
|
106
|
+
containingFile,
|
|
107
|
+
redirectedReferences,
|
|
108
|
+
options,
|
|
109
|
+
_containingSourceFile,
|
|
110
|
+
_reusedNames,
|
|
111
|
+
): ResolvedModuleWithFailedLookupLocations[] {
|
|
112
|
+
return moduleLiterals.map(name => {
|
|
113
|
+
const result = resolveModuleName(
|
|
114
|
+
name.text,
|
|
115
|
+
containingFile,
|
|
116
|
+
options,
|
|
117
|
+
host,
|
|
118
|
+
resolutionCache,
|
|
119
|
+
redirectedReferences,
|
|
120
|
+
ModuleKind.ESNext,
|
|
121
|
+
);
|
|
122
|
+
console.log(name.text, "->", result.resolvedModule?.resolvedFileName);
|
|
123
|
+
return result;
|
|
124
|
+
});
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
jsDocParsingMode: JSDocParsingMode.ParseNone,
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
return host;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { join } from "path";
|
|
8
|
+
import { createSolutionBuilder, createSolutionBuilderHost, Diagnostic, ExitStatus } from "typescript";
|
|
9
|
+
import { Package } from "../../util/package.js";
|
|
10
|
+
import { BuildError, InternalBuildError } from "../error.js";
|
|
11
|
+
import { Graph } from "../graph.js";
|
|
12
|
+
import { TypescriptContext } from "./context.js";
|
|
13
|
+
|
|
14
|
+
export async function createSolutionBuilderContext(
|
|
15
|
+
workspace: Package,
|
|
16
|
+
_graph: Graph | undefined,
|
|
17
|
+
refreshCallback?: () => void,
|
|
18
|
+
): Promise<TypescriptContext> {
|
|
19
|
+
let diagnostics: undefined | Diagnostic[];
|
|
20
|
+
const host = createSolutionBuilderHost();
|
|
21
|
+
host.reportDiagnostic = diagnostic => (diagnostics ??= []).push(diagnostic);
|
|
22
|
+
|
|
23
|
+
const createProgram = host.createProgram;
|
|
24
|
+
host.createProgram = (...args) => {
|
|
25
|
+
const result = createProgram(...args);
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const readDirectory = host.readDirectory;
|
|
30
|
+
host.readDirectory = (...args) => {
|
|
31
|
+
const result = readDirectory?.(...args);
|
|
32
|
+
return result ?? [];
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const builder = createSolutionBuilder(host, [workspace.resolve("tsconfig.json")], {});
|
|
36
|
+
|
|
37
|
+
TypescriptContext.diagnose(diagnostics);
|
|
38
|
+
|
|
39
|
+
TypescriptContext.instrumentHostForSpinner(host, refreshCallback);
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
async build(pkg: Package, path: string, _emit?: boolean) {
|
|
43
|
+
const status = builder.build(pkg.resolve(join(path, "tsconfig.json")));
|
|
44
|
+
|
|
45
|
+
TypescriptContext.diagnose(diagnostics);
|
|
46
|
+
|
|
47
|
+
switch (status) {
|
|
48
|
+
case undefined:
|
|
49
|
+
case ExitStatus.Success:
|
|
50
|
+
break;
|
|
51
|
+
|
|
52
|
+
case ExitStatus.InvalidProject_OutputsSkipped:
|
|
53
|
+
throw new BuildError(
|
|
54
|
+
`Typescript does not think ${path} is part of the project, this is probably a build tooling error`,
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
case ExitStatus.ProjectReferenceCycle_OutputsSkipped:
|
|
58
|
+
throw new BuildError(
|
|
59
|
+
`Typescript identified a cyclical project reference in ${path}, please check package dependencies`,
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
default:
|
|
63
|
+
throw new InternalBuildError(`Build error ${ExitStatus[status]} without diagnostics`);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { TypescriptContext } from "./typescript/context.js";
|
|
8
|
+
import { createSolutionBuilderContext } from "./typescript/solution-builder.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Create a {@link TypescriptContext} for validating types and optionally emitting .d.ts file.
|
|
12
|
+
*
|
|
13
|
+
* We have multiple implementations as we've tried TS API variants. We export the one we currently use here.
|
|
14
|
+
*/
|
|
15
|
+
export const createTypescriptContext = createSolutionBuilderContext;
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import "./testing/global-declarations.js";
|
|
8
|
+
export * from "./building/graph.js";
|
|
9
|
+
export * from "./building/project.js";
|
|
10
|
+
export * from "./testing/chip.js";
|
|
11
|
+
export * from "./testing/mocharc.cjs";
|
|
12
|
+
export * from "./util/docker.js";
|
|
13
|
+
export * from "./util/package.js";
|
|
14
|
+
export * from "./util/progress.js";
|
|
15
|
+
export * from "./util/wtf.js";
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { dirname, resolve } from "path";
|
|
8
|
+
import { exit } from "process";
|
|
9
|
+
import { Builder } from "../building/builder.js";
|
|
10
|
+
import { Graph } from "../building/graph.js";
|
|
11
|
+
import { Project } from "../building/project.js";
|
|
12
|
+
import { executeNode } from "./execute.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Execute a script in a package that conforms to matter.js conventions. This is primarily useful within a matter.js
|
|
16
|
+
* development environment but should also work when installed via NPM.
|
|
17
|
+
*
|
|
18
|
+
* First we translate source filenames to the transpiled *.js equivalent.
|
|
19
|
+
*
|
|
20
|
+
* If the target script is in a package not installed via NPM we build the package. If the package is an NPM workspace
|
|
21
|
+
* under a top-level package we also build dependencies.
|
|
22
|
+
*
|
|
23
|
+
* We then run the script in a child process so we can enable source maps using node --source-maps. You can disable
|
|
24
|
+
* this by setting the environment variable MATTER_DIRECT_EXEC.
|
|
25
|
+
*/
|
|
26
|
+
export async function main(argv = process.argv) {
|
|
27
|
+
let script = argv[2];
|
|
28
|
+
argv = argv.slice(3);
|
|
29
|
+
|
|
30
|
+
if (script === undefined || script === "") {
|
|
31
|
+
console.error("Error: Script name required");
|
|
32
|
+
exit(1);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
script = resolve(script);
|
|
36
|
+
let dir;
|
|
37
|
+
|
|
38
|
+
if (script.match(/[\\/]node_modules[\\/].bin[\\/]/)) {
|
|
39
|
+
// When executing a script linked under node_modules, search for the project from cwd. This occurs when running
|
|
40
|
+
// tooling such as "matter-test"
|
|
41
|
+
dir = process.cwd();
|
|
42
|
+
} else {
|
|
43
|
+
// When executing outside of node modules we want to build the project containing the script
|
|
44
|
+
dir = dirname(script);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const project = new Project(dir);
|
|
48
|
+
|
|
49
|
+
let format: "esm" | "cjs";
|
|
50
|
+
if (project.pkg.supportsEsm) {
|
|
51
|
+
format = "esm";
|
|
52
|
+
} else if (project.pkg.supportsCjs) {
|
|
53
|
+
format = "cjs";
|
|
54
|
+
} else {
|
|
55
|
+
console.error("Error: Could not identify project format");
|
|
56
|
+
exit(2);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// In development we currently build package and dependencies unconditionally before running
|
|
60
|
+
const isDevelopment = !dir.match(/[\\/]node_modules[\\/]/);
|
|
61
|
+
if (isDevelopment) {
|
|
62
|
+
const builder = new Builder();
|
|
63
|
+
const dependencies = await Graph.forProject(dir);
|
|
64
|
+
if (dependencies) {
|
|
65
|
+
// Project is in a workspace; build along with dependencies from the same workspace
|
|
66
|
+
await dependencies.build(builder, false);
|
|
67
|
+
} else {
|
|
68
|
+
// Project is not in a workspace; only build the project
|
|
69
|
+
await builder.build(project);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Determine the actual script to run
|
|
74
|
+
script = project.pkg.resolve(
|
|
75
|
+
project.pkg
|
|
76
|
+
.relative(script)
|
|
77
|
+
.replace(/\.ts$/, ".js")
|
|
78
|
+
.replace(/^src[\\/]/, `dist/${format}/`),
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
// If we run in the same process we cannot enable source maps so default mode is to fork. However for development
|
|
82
|
+
// purposes it can be useful to avoid the intermediary process. In this case you can set "--enable-source-maps"
|
|
83
|
+
// manually then set MATTER_DIRECT_EXEC
|
|
84
|
+
if (process.env.MATTER_DIRECT_EXEC) {
|
|
85
|
+
// This will not transpile properly to commonjs but we only use this module from ESM so that's OK
|
|
86
|
+
await import(script);
|
|
87
|
+
} else {
|
|
88
|
+
// Our behavior in response to SIGINT should mirror the child process's. So ignore the signal locally, only
|
|
89
|
+
// quitting once the child process does
|
|
90
|
+
process.on("SIGINT", () => {});
|
|
91
|
+
process.on("SIGTERM", () => {});
|
|
92
|
+
|
|
93
|
+
process.exitCode = await executeNode(script, argv);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { spawn, SpawnOptions } from "child_process";
|
|
8
|
+
import { platform } from "os";
|
|
9
|
+
|
|
10
|
+
import colors from "ansi-colors";
|
|
11
|
+
|
|
12
|
+
export async function execute(bin: string, argv: string[], env?: typeof process.env) {
|
|
13
|
+
return new Promise<number>((resolve, reject) => {
|
|
14
|
+
let finished = false;
|
|
15
|
+
|
|
16
|
+
const options: SpawnOptions = {
|
|
17
|
+
stdio: "inherit",
|
|
18
|
+
};
|
|
19
|
+
if (platform() === "win32") {
|
|
20
|
+
options.shell = true;
|
|
21
|
+
}
|
|
22
|
+
if (env !== undefined) {
|
|
23
|
+
options.env = { ...process.env, ...env };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const proc = spawn(bin, argv, options);
|
|
27
|
+
|
|
28
|
+
// Proxy SIGUSR2 to the child process
|
|
29
|
+
process.on("SIGUSR2", () => {
|
|
30
|
+
proc.kill("SIGUSR2");
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
proc.on("error", e => {
|
|
34
|
+
finished = true;
|
|
35
|
+
reject(e);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
proc.on("close", code => {
|
|
39
|
+
if (finished) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
finished = true;
|
|
43
|
+
|
|
44
|
+
resolve(code ?? 1);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export async function executeNode(script: string, argv: string[]) {
|
|
50
|
+
argv = ["--enable-source-maps", script, ...argv];
|
|
51
|
+
if (process.env.MATTER_RUN_ECHO) {
|
|
52
|
+
const command = colors.whiteBright(`node ${argv.join(" ")}`);
|
|
53
|
+
process.stdout.write(`${colors.greenBright("Matter execute:")} ${command}\n`);
|
|
54
|
+
}
|
|
55
|
+
const env = {} as NodeJS.ProcessEnv;
|
|
56
|
+
|
|
57
|
+
// Hmm this is a little much as a default
|
|
58
|
+
// if (process.env.MATTER_LOG_STACK_LIMIT === undefined) {
|
|
59
|
+
// env.MATTER_LOG_STACK_LIMIT = "100";
|
|
60
|
+
// }
|
|
61
|
+
|
|
62
|
+
return execute("node", argv, env);
|
|
63
|
+
}
|