diff --git a/.bitmap b/.bitmap index 24dbf6c62102..d049b7dea45e 100644 --- a/.bitmap +++ b/.bitmap @@ -14,7 +14,13 @@ "scope": "teambit.legacy", "version": "0.0.81", "mainFile": "index.ts", - "rootDir": "components/legacy/analytics" + "rootDir": "components/legacy/analytics", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "api-reference": { "name": "api-reference", @@ -210,7 +216,13 @@ "scope": "teambit.react", "version": "1.0.40", "mainFile": "index.ts", - "rootDir": "scopes/react/bit-react-transformer" + "rootDir": "scopes/react/bit-react-transformer", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "bit": { "name": "bit", @@ -224,7 +236,13 @@ "scope": "teambit.legacy", "version": "0.0.131", "mainFile": "index.ts", - "rootDir": "components/legacy/bit-map" + "rootDir": "components/legacy/bit-map", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "builder": { "name": "builder", @@ -238,7 +256,13 @@ "scope": "teambit.pipelines", "version": "0.0.399", "mainFile": "index.ts", - "rootDir": "scopes/pipelines/modules/builder-data" + "rootDir": "scopes/pipelines/modules/builder-data", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "bundler": { "name": "bundler", @@ -385,21 +409,39 @@ "scope": "teambit.legacy", "version": "0.0.128", "mainFile": "index.ts", - "rootDir": "components/legacy/component-diff" + "rootDir": "components/legacy/component-diff", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "component-issues": { "name": "component-issues", "scope": "teambit.component", "version": "0.0.164", "mainFile": "index.ts", - "rootDir": "components/component-issues" + "rootDir": "components/component-issues", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "component-list": { "name": "component-list", "scope": "teambit.legacy", "version": "0.0.128", "mainFile": "index.ts", - "rootDir": "components/legacy/component-list" + "rootDir": "components/legacy/component-list", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "component-log": { "name": "component-log", @@ -413,7 +455,13 @@ "scope": "teambit.component", "version": "0.0.443", "mainFile": "index.ts", - "rootDir": "scopes/component/component-package-version" + "rootDir": "scopes/component/component-package-version", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "component-sizer": { "name": "component-sizer", @@ -476,28 +524,52 @@ "scope": "teambit.legacy", "version": "0.0.18", "mainFile": "constants.ts", - "rootDir": "components/legacy/constants" + "rootDir": "components/legacy/constants", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "consumer": { "name": "consumer", "scope": "teambit.legacy", "version": "0.0.74", "mainFile": "index.ts", - "rootDir": "components/legacy/consumer" + "rootDir": "components/legacy/consumer", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "consumer-component": { "name": "consumer-component", "scope": "teambit.legacy", "version": "0.0.75", "mainFile": "index.ts", - "rootDir": "components/legacy/consumer-component" + "rootDir": "components/legacy/consumer-component", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "consumer-config": { "name": "consumer-config", "scope": "teambit.legacy", "version": "0.0.74", "mainFile": "index.ts", - "rootDir": "components/legacy/consumer-config" + "rootDir": "components/legacy/consumer-config", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "content/cli-reference": { "name": "content/cli-reference", @@ -525,7 +597,13 @@ "scope": "teambit.legacy", "version": "0.0.77", "mainFile": "index.ts", - "rootDir": "components/legacy/dependency-graph" + "rootDir": "components/legacy/dependency-graph", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "dependency-resolver": { "name": "dependency-resolver", @@ -560,7 +638,13 @@ "scope": "teambit.semantics", "version": "0.0.82", "mainFile": "index.ts", - "rootDir": "components/semantics/doc-parser" + "rootDir": "components/semantics/doc-parser", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "docs": { "name": "docs", @@ -595,14 +679,26 @@ "scope": "teambit.lanes", "version": "0.0.181", "mainFile": "index.ts", - "rootDir": "scopes/lanes/entities/lane-diff" + "rootDir": "scopes/lanes/entities/lane-diff", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "entities/semantic-schema": { "name": "entities/semantic-schema", "scope": "teambit.semantics", "version": "0.0.93", "mainFile": "index.ts", - "rootDir": "components/entities/semantic-schema" + "rootDir": "components/entities/semantic-schema", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "env": { "name": "env", @@ -630,14 +726,26 @@ "scope": "teambit.react", "version": "2.0.3", "mainFile": "index.js", - "rootDir": "scopes/react/eslint-config-bit-react" + "rootDir": "scopes/react/eslint-config-bit-react", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "eslint/config-mutator": { "name": "eslint/config-mutator", "scope": "teambit.defender", "version": "0.0.116", "mainFile": "index.ts", - "rootDir": "scopes/defender/eslint-config-mutator" + "rootDir": "scopes/defender/eslint-config-mutator", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "export": { "name": "export", @@ -658,7 +766,13 @@ "scope": "teambit.legacy", "version": "0.0.76", "mainFile": "index.ts", - "rootDir": "components/legacy/extension-data" + "rootDir": "components/legacy/extension-data", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "forking": { "name": "forking", @@ -714,7 +828,13 @@ "scope": "teambit.dependencies", "version": "0.0.38", "mainFile": "index.ts", - "rootDir": "scopes/dependencies/fs/linked-dependencies" + "rootDir": "scopes/dependencies/fs/linked-dependencies", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "fs/remove-empty-dir": { "name": "fs/remove-empty-dir", @@ -735,7 +855,13 @@ "scope": "teambit.bit", "version": "0.0.9", "mainFile": "index.ts", - "rootDir": "components/bit/get-bit-version" + "rootDir": "components/bit/get-bit-version", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "git": { "name": "git", @@ -777,14 +903,26 @@ "scope": "teambit.cloud", "version": "0.0.13", "mainFile": "index.ts", - "rootDir": "scopes/cloud/hooks/use-cloud-scopes" + "rootDir": "scopes/cloud/hooks/use-cloud-scopes", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "hooks/use-current-user": { "name": "hooks/use-current-user", "scope": "teambit.cloud", "version": "0.0.17", "mainFile": "index.ts", - "rootDir": "scopes/cloud/hooks/use-current-user" + "rootDir": "scopes/cloud/hooks/use-current-user", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "hooks/use-lane-components": { "name": "hooks/use-lane-components", @@ -805,14 +943,26 @@ "scope": "teambit.cloud", "version": "0.0.11", "mainFile": "index.ts", - "rootDir": "scopes/cloud/hooks/use-logout" + "rootDir": "scopes/cloud/hooks/use-logout", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "hooks/use-viewed-lane-from-url": { "name": "hooks/use-viewed-lane-from-url", "scope": "teambit.lanes", "version": "0.0.246", "mainFile": "index.ts", - "rootDir": "components/hooks/use-viewed-lane-from-url_1" + "rootDir": "components/hooks/use-viewed-lane-from-url_1", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "host-initializer": { "name": "host-initializer", @@ -882,7 +1032,13 @@ "scope": "teambit.component", "version": "0.0.411", "mainFile": "index.ts", - "rootDir": "components/legacy-component-log" + "rootDir": "components/legacy-component-log", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "linter": { "name": "linter", @@ -903,7 +1059,13 @@ "scope": "teambit.legacy", "version": "0.0.12", "mainFile": "index.ts", - "rootDir": "components/legacy/loader" + "rootDir": "components/legacy/loader", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "mcp-config-writer": { "name": "mcp-config-writer", @@ -952,28 +1114,52 @@ "scope": "teambit.compositions", "version": "0.0.513", "mainFile": "index.ts", - "rootDir": "scopes/compositions/model/composition-type" + "rootDir": "scopes/compositions/model/composition-type", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "models/cloud-scope": { "name": "models/cloud-scope", "scope": "teambit.cloud", "version": "0.0.13", "mainFile": "index.ts", - "rootDir": "scopes/cloud/models/cloud-scope" + "rootDir": "scopes/cloud/models/cloud-scope", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "models/cloud-user": { "name": "models/cloud-user", "scope": "teambit.cloud", "version": "0.0.13", "mainFile": "index.ts", - "rootDir": "scopes/cloud/models/cloud-user" + "rootDir": "scopes/cloud/models/cloud-user", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "models/scope-model": { "name": "models/scope-model", "scope": "teambit.scope", "version": "0.0.542", "mainFile": "index.ts", - "rootDir": "scopes/scope/models/scope-model" + "rootDir": "scopes/scope/models/scope-model", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/babel-compiler": { "name": "modules/babel-compiler", @@ -987,21 +1173,39 @@ "scope": "teambit.pkg", "version": "0.0.81", "mainFile": "index.ts", - "rootDir": "components/modules/component-package-name" + "rootDir": "components/modules/component-package-name", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/component-url": { "name": "modules/component-url", "scope": "teambit.component", "version": "0.0.181", "mainFile": "index.ts", - "rootDir": "scopes/component/component-url" + "rootDir": "scopes/component/component-url", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/concurrency": { "name": "modules/concurrency", "scope": "teambit.harmony", "version": "0.0.19", "mainFile": "index.ts", - "rootDir": "scopes/harmony/modules/concurrency" + "rootDir": "scopes/harmony/modules/concurrency", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/config-mutator": { "name": "modules/config-mutator", @@ -1015,21 +1219,39 @@ "scope": "teambit.html", "version": "0.0.118", "mainFile": "index.ts", - "rootDir": "scopes/html/modules/create-element-from-string" + "rootDir": "scopes/html/modules/create-element-from-string", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/create-lane": { "name": "modules/create-lane", "scope": "teambit.lanes", "version": "0.0.108", "mainFile": "index.ts", - "rootDir": "scopes/lanes/modules/create-lane" + "rootDir": "scopes/lanes/modules/create-lane", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/diff": { "name": "modules/diff", "scope": "teambit.lanes", "version": "0.0.572", "mainFile": "index.ts", - "rootDir": "scopes/lanes/diff" + "rootDir": "scopes/lanes/diff", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/feature-toggle": { "name": "modules/feature-toggle", @@ -1043,35 +1265,65 @@ "scope": "teambit.html", "version": "0.0.118", "mainFile": "index.ts", - "rootDir": "scopes/html/modules/fetch-html-from-url" + "rootDir": "scopes/html/modules/fetch-html-from-url", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/find-scope-path": { "name": "modules/find-scope-path", "scope": "teambit.scope", "version": "0.0.19", "mainFile": "index.ts", - "rootDir": "components/modules/find-scope-path" + "rootDir": "components/modules/find-scope-path", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/fs-cache": { "name": "modules/fs-cache", "scope": "teambit.workspace", "version": "0.0.38", "mainFile": "index.ts", - "rootDir": "scopes/workspace/modules/fs-cache" + "rootDir": "scopes/workspace/modules/fs-cache", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/generate-expose-loaders": { "name": "modules/generate-expose-loaders", "scope": "teambit.webpack", "version": "0.0.25", "mainFile": "index.ts", - "rootDir": "scopes/webpack/modules/generate-expose-loaders" + "rootDir": "scopes/webpack/modules/generate-expose-loaders", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/generate-externals": { "name": "modules/generate-externals", "scope": "teambit.webpack", "version": "0.0.25", "mainFile": "index.ts", - "rootDir": "scopes/webpack/modules/generate-externals" + "rootDir": "scopes/webpack/modules/generate-externals", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/generate-style-loaders": { "name": "modules/generate-style-loaders", @@ -1085,56 +1337,104 @@ "scope": "teambit.harmony", "version": "0.0.75", "mainFile": "index.ts", - "rootDir": "scopes/harmony/modules/get-basic-log" + "rootDir": "scopes/harmony/modules/get-basic-log", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/get-cloud-user": { "name": "modules/get-cloud-user", "scope": "teambit.cloud", "version": "0.0.75", "mainFile": "index.ts", - "rootDir": "scopes/cloud/modules/get-cloud-user" + "rootDir": "scopes/cloud/modules/get-cloud-user", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/git-executable": { "name": "modules/git-executable", "scope": "teambit.git", "version": "0.0.19", "mainFile": "index.ts", - "rootDir": "scopes/git/modules/git-executable" + "rootDir": "scopes/git/modules/git-executable", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/harmony-root-generator": { "name": "modules/harmony-root-generator", "scope": "teambit.harmony", "version": "0.0.23", "mainFile": "index.ts", - "rootDir": "components/modules/harmony-root-generator" + "rootDir": "components/modules/harmony-root-generator", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/ignore-file-reader": { "name": "modules/ignore-file-reader", "scope": "teambit.git", "version": "0.0.19", "mainFile": "index.ts", - "rootDir": "scopes/git/modules/ignore-file-reader" + "rootDir": "scopes/git/modules/ignore-file-reader", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/in-memory-cache": { "name": "modules/in-memory-cache", "scope": "teambit.harmony", "version": "0.0.21", "mainFile": "index.ts", - "rootDir": "scopes/harmony/modules/in-memory-cache" + "rootDir": "scopes/harmony/modules/in-memory-cache", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/match-pattern": { "name": "modules/match-pattern", "scope": "teambit.workspace", "version": "0.0.514", "mainFile": "index.ts", - "rootDir": "scopes/workspace/modules/match-pattern" + "rootDir": "scopes/workspace/modules/match-pattern", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/merge-component-results": { "name": "modules/merge-component-results", "scope": "teambit.pipelines", "version": "0.0.506", "mainFile": "index.ts", - "rootDir": "scopes/pipelines/modules/merge-component-results" + "rootDir": "scopes/pipelines/modules/merge-component-results", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/merge-helper": { "name": "modules/merge-helper", @@ -1155,42 +1455,78 @@ "scope": "teambit.workspace", "version": "0.0.302", "mainFile": "index.ts", - "rootDir": "scopes/workspace/modules/node-modules-linker" + "rootDir": "scopes/workspace/modules/node-modules-linker", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/requireable-component": { "name": "modules/requireable-component", "scope": "teambit.harmony", "version": "0.0.507", "mainFile": "index.ts", - "rootDir": "scopes/harmony/modules/requireable-component" + "rootDir": "scopes/harmony/modules/requireable-component", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/resolved-component": { "name": "modules/resolved-component", "scope": "teambit.harmony", "version": "0.0.507", "mainFile": "index.ts", - "rootDir": "scopes/harmony/modules/resolved-component" + "rootDir": "scopes/harmony/modules/resolved-component", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/semver-helper": { "name": "modules/semver-helper", "scope": "teambit.pkg", "version": "0.0.16", "mainFile": "index.ts", - "rootDir": "scopes/pkg/modules/semver-helper" + "rootDir": "scopes/pkg/modules/semver-helper", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/send-server-sent-events": { "name": "modules/send-server-sent-events", "scope": "teambit.harmony", "version": "0.0.11", "mainFile": "index.ts", - "rootDir": "scopes/harmony/modules/send-server-sent-events" + "rootDir": "scopes/harmony/modules/send-server-sent-events", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/style-regexps": { "name": "modules/style-regexps", "scope": "teambit.webpack", "version": "1.0.14", "mainFile": "index.ts", - "rootDir": "scopes/webpack/style-regexps" + "rootDir": "scopes/webpack/style-regexps", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "modules/ts-config-mutator": { "name": "modules/ts-config-mutator", @@ -1204,7 +1540,13 @@ "scope": "teambit.workspace", "version": "0.0.19", "mainFile": "index.ts", - "rootDir": "scopes/workspace/modules/workspace-locator" + "rootDir": "scopes/workspace/modules/workspace-locator", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "mover": { "name": "mover", @@ -1232,7 +1574,13 @@ "scope": "teambit.scope", "version": "0.0.74", "mainFile": "index.ts", - "rootDir": "scopes/scope/network" + "rootDir": "scopes/scope/network", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "network/get-port": { "name": "network/get-port", @@ -1323,7 +1671,13 @@ "scope": "teambit.webpack", "version": "0.0.18", "mainFile": "index.ts", - "rootDir": "scopes/webpack/plugins/inject-head-webpack-plugin" + "rootDir": "scopes/webpack/plugins/inject-head-webpack-plugin", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "pnpm": { "name": "pnpm", @@ -1344,7 +1698,13 @@ "scope": "teambit.defender", "version": "0.0.110", "mainFile": "index.ts", - "rootDir": "scopes/defender/prettier-config-mutator" + "rootDir": "scopes/defender/prettier-config-mutator", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "preview": { "name": "preview", @@ -1400,14 +1760,26 @@ "scope": "teambit.scope", "version": "0.0.74", "mainFile": "index.ts", - "rootDir": "scopes/scope/remote-actions" + "rootDir": "scopes/scope/remote-actions", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "remotes": { "name": "remotes", "scope": "teambit.scope", "version": "0.0.74", "mainFile": "index.ts", - "rootDir": "components/scope/remotes" + "rootDir": "components/scope/remotes", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "remove": { "name": "remove", @@ -1442,7 +1814,13 @@ "scope": "teambit.legacy", "version": "0.0.129", "mainFile": "index.ts", - "rootDir": "components/legacy/scope-api" + "rootDir": "components/legacy/scope-api", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "sidebar": { "name": "sidebar", @@ -1456,7 +1834,13 @@ "scope": "teambit.component", "version": "0.0.75", "mainFile": "index.ts", - "rootDir": "scopes/component/snap-distance" + "rootDir": "scopes/component/snap-distance", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "snapping": { "name": "snapping", @@ -1470,7 +1854,13 @@ "scope": "teambit.component", "version": "0.0.126", "mainFile": "index.ts", - "rootDir": "scopes/component/sources" + "rootDir": "scopes/component/sources", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "stash": { "name": "stash", @@ -1540,14 +1930,26 @@ "scope": "teambit.legacy", "version": "0.0.28", "mainFile": "index.ts", - "rootDir": "components/legacy/logger" + "rootDir": "components/legacy/logger", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "teambit.legacy/scope": { "name": "scope", "scope": "teambit.legacy", "version": "0.0.74", "mainFile": "index.ts", - "rootDir": "components/legacy/scope" + "rootDir": "components/legacy/scope", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "teambit.scope/scope": { "name": "scope", @@ -1568,21 +1970,39 @@ "scope": "teambit.harmony", "version": "0.0.333", "mainFile": "index.ts", - "rootDir": "scopes/harmony/testing/load-aspect" + "rootDir": "scopes/harmony/testing/load-aspect", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "testing/mock-components": { "name": "testing/mock-components", "scope": "teambit.component", "version": "0.0.338", "mainFile": "index.ts", - "rootDir": "scopes/component/testing/mock-components" + "rootDir": "scopes/component/testing/mock-components", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "testing/mock-workspace": { "name": "testing/mock-workspace", "scope": "teambit.workspace", "version": "0.0.123", "mainFile": "index.ts", - "rootDir": "scopes/workspace/testing/mock-workspace" + "rootDir": "scopes/workspace/testing/mock-workspace", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "time/timer": { "name": "time/timer", @@ -1603,7 +2023,13 @@ "scope": "teambit.typescript", "version": "0.0.69", "mainFile": "index.ts", - "rootDir": "scopes/typescript/ts-server" + "rootDir": "scopes/typescript/ts-server", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "types/serializable": { "name": "types/serializable", @@ -2037,7 +2463,13 @@ "scope": "teambit.legacy", "version": "0.0.27", "mainFile": "index.ts", - "rootDir": "components/legacy/utils" + "rootDir": "components/legacy/utils", + "config": { + "teambit.node/envs/node-babel-mocha@0.1.20": {}, + "teambit.envs/envs": { + "env": "teambit.node/envs/node-babel-mocha" + } + } }, "variants": { "name": "variants", diff --git a/.gitignore b/.gitignore index 264e65dbe52d..86b92ae33048 100644 --- a/.gitignore +++ b/.gitignore @@ -73,5 +73,8 @@ package-lock.json !.yarn/sdks !.yarn/versions +# bundle output +/bundle + # Claude Code files .claude/ diff --git a/components/bit/get-bit-version/esm.mjs b/components/bit/get-bit-version/esm.mjs new file mode 100644 index 000000000000..0212989892a4 --- /dev/null +++ b/components/bit/get-bit-version/esm.mjs @@ -0,0 +1,7 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const getBitVersion = cjsModule.getBitVersion; +export const getBitVersionGracefully = cjsModule.getBitVersionGracefully; + +export default cjsModule; \ No newline at end of file diff --git a/components/bit/get-bit-version/get-bit-version.ts b/components/bit/get-bit-version/get-bit-version.ts index 308007191402..2b7945c66517 100644 --- a/components/bit/get-bit-version/get-bit-version.ts +++ b/components/bit/get-bit-version/get-bit-version.ts @@ -1,11 +1,25 @@ import { join } from 'path'; +import { existsSync } from 'fs-extra'; export function getBitVersion(): string { - const teambitBit = require.resolve('@teambit/bit'); - // eslint-disable-next-line - const packageJson = require(join(teambitBit, '../..', 'package.json')); - if (packageJson.version) return packageJson.version; - throw new Error(`unable to find Bit version`); + const teambitBit = require.resolve('@teambit/bit'); + // For bundle cases, the teambitBit point to a flat folder that contains the package.json + let packageJsonPath = join(teambitBit, '../', 'package.json'); + if (!existsSync(packageJsonPath)) { + // for dev cases, the teambitBit point to the dist folder that doesn't contains the package.json + packageJsonPath = join(teambitBit, '../..', 'package.json'); + } + if (!existsSync(packageJsonPath)) { + throw new Error('unable to find Bit version (package.json not found)'); + } + // eslint-disable-next-line + const packageJson = require(packageJsonPath); + if (packageJson.version) return packageJson.version; + // this is running locally + if (packageJson.componentId && packageJson.componentId.version) { + return packageJson.componentId.version || `last-tag ${packageJson.componentId.version}`; + } + throw new Error('unable to find Bit version (version not found in package.json)'); } export function getBitVersionGracefully(): string | null { diff --git a/components/config-store/esm.mjs b/components/config-store/esm.mjs new file mode 100644 index 000000000000..5faca5196ce8 --- /dev/null +++ b/components/config-store/esm.mjs @@ -0,0 +1,12 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const ConfigStoreAspect = cjsModule.ConfigStoreAspect; +export const getConfig = cjsModule.getConfig; +export const getNumberFromConfig = cjsModule.getNumberFromConfig; +export const listConfig = cjsModule.listConfig; +export const Store = cjsModule.Store; +export const setGlobalConfig = cjsModule.setGlobalConfig; +export const delGlobalConfig = cjsModule.delGlobalConfig; + +export default cjsModule; \ No newline at end of file diff --git a/components/legacy/analytics/esm.mjs b/components/legacy/analytics/esm.mjs new file mode 100644 index 000000000000..3c7facb9b3e1 --- /dev/null +++ b/components/legacy/analytics/esm.mjs @@ -0,0 +1,7 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const Analytics = cjsModule.Analytics; +export const LEVEL = cjsModule.LEVEL; + +export default cjsModule; \ No newline at end of file diff --git a/components/legacy/constants/esm.mjs b/components/legacy/constants/esm.mjs new file mode 100644 index 000000000000..05dd18a405fd --- /dev/null +++ b/components/legacy/constants/esm.mjs @@ -0,0 +1,41 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './constants.js'; + +// Export all named exports +export const { + ACCEPTABLE_NPM_VERSIONS, + ANGULAR_BIT_ENTRY_POINT_FILE, + ANGULAR_PACKAGE_IDENTIFIER, + AUTO_GENERATED_MSG, + AUTO_GENERATED_STAMP, + AUTO_SNAPPED_MSG, + BASE_COMMUNITY_DOMAIN, + BASE_DOCS_DOMAIN, + BASE_LEGACY_DOCS_DOMAIN, + BASE_WEB_DOMAIN, + BITMAP_PREFIX_MESSAGE, + BITS_DIRNAME, + BIT_CACHE_DIRNAME, + BIT_GIT_DIR, + BIT_HIDDEN_DIR, + BIT_JSON, + BIT_MAP, + BIT_REGISTRY, + BIT_ROOTS_DIR, + BIT_SOURCES_DIRNAME, + BIT_TMP_DIRNAME, + BIT_USAGE, + BIT_WORKSPACE_TMP_DIRNAME, + BuildStatus, + CACHE_GLOBALS_ENV, + CACHE_ROOT, + CENTRAL_BIT_HUB_NAME, + CENTRAL_BIT_HUB_URL, + CENTRAL_BIT_HUB_URL_IMPORTER, + CENTRAL_BIT_HUB_URL_IMPORTER_V2, + GLOBAL_CONFIG, + GLOBAL_LOGS, + // Add other constants as needed... +} = cjsModule; + +export default cjsModule; \ No newline at end of file diff --git a/components/legacy/consumer-component/esm.mjs b/components/legacy/consumer-component/esm.mjs new file mode 100644 index 000000000000..42ad574c9d33 --- /dev/null +++ b/components/legacy/consumer-component/esm.mjs @@ -0,0 +1,25 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const CURRENT_SCHEMA = cjsModule.CURRENT_SCHEMA; +export const ComponentLoadOptions = cjsModule.ComponentLoadOptions; +export const ComponentLoader = cjsModule.ComponentLoader; +export const ComponentNotFoundInPath = cjsModule.ComponentNotFoundInPath; +export const ConsumerComponent = cjsModule.ConsumerComponent; +export const DEPENDENCIES_TYPES = cjsModule.DEPENDENCIES_TYPES; +export const DEPENDENCIES_TYPES_UI_MAP = cjsModule.DEPENDENCIES_TYPES_UI_MAP; +export const Dependencies = cjsModule.Dependencies; +export const Dependency = cjsModule.Dependency; +export const DependencyLoaderOpts = cjsModule.DependencyLoaderOpts; +export const IgnoredDirectory = cjsModule.IgnoredDirectory; +export const ImportSpecifier = cjsModule.ImportSpecifier; +export const InvalidComponent = cjsModule.InvalidComponent; +export const LoadManyResult = cjsModule.LoadManyResult; +export const ManuallyChangedDependencies = cjsModule.ManuallyChangedDependencies; +export const RelativePath = cjsModule.RelativePath; +export const SchemaFeature = cjsModule.SchemaFeature; +export const SchemaName = cjsModule.SchemaName; +export const Specifier = cjsModule.Specifier; +export const isSchemaSupport = cjsModule.isSchemaSupport; + +export default cjsModule; \ No newline at end of file diff --git a/components/legacy/consumer-config/esm.mjs b/components/legacy/consumer-config/esm.mjs new file mode 100644 index 000000000000..44726a44b468 --- /dev/null +++ b/components/legacy/consumer-config/esm.mjs @@ -0,0 +1,17 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const ComponentConfig = cjsModule.ComponentConfig; +export const ComponentConfigLoadOptions = cjsModule.ComponentConfigLoadOptions; +export const ComponentOverrides = cjsModule.ComponentOverrides; +export const ComponentOverridesData = cjsModule.ComponentOverridesData; +export const DependenciesOverridesData = cjsModule.DependenciesOverridesData; +export const ILegacyWorkspaceConfig = cjsModule.ILegacyWorkspaceConfig; +export const LegacyWorkspaceConfig = cjsModule.LegacyWorkspaceConfig; +export const LegacyWorkspaceConfigProps = cjsModule.LegacyWorkspaceConfigProps; +export const WorkspaceConfigLoadFunction = cjsModule.WorkspaceConfigLoadFunction; +export const componentOverridesForbiddenFields = cjsModule.componentOverridesForbiddenFields; +export const getBindingPrefixByDefaultScope = cjsModule.getBindingPrefixByDefaultScope; +export const nonPackageJsonFields = cjsModule.nonPackageJsonFields; + +export default cjsModule; \ No newline at end of file diff --git a/components/legacy/extension-data/esm.mjs b/components/legacy/extension-data/esm.mjs new file mode 100644 index 000000000000..b58133314aeb --- /dev/null +++ b/components/legacy/extension-data/esm.mjs @@ -0,0 +1,12 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const ExtensionDataEntry = cjsModule.ExtensionDataEntry; +export const ExtensionDataList = cjsModule.ExtensionDataList; +export const REMOVE_EXTENSION_SPECIAL_SIGN = cjsModule.REMOVE_EXTENSION_SPECIAL_SIGN; +export const ValidateBeforePersistResult = cjsModule.ValidateBeforePersistResult; +export const configEntryToDataEntry = cjsModule.configEntryToDataEntry; +export const getCompareExtPredicate = cjsModule.getCompareExtPredicate; +export const removeInternalConfigFields = cjsModule.removeInternalConfigFields; + +export default cjsModule; \ No newline at end of file diff --git a/components/legacy/loader/esm.mjs b/components/legacy/loader/esm.mjs new file mode 100644 index 000000000000..b5adbd5afb2b --- /dev/null +++ b/components/legacy/loader/esm.mjs @@ -0,0 +1,6 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const loader = cjsModule.loader; + +export default cjsModule; \ No newline at end of file diff --git a/components/legacy/logger/esm.mjs b/components/legacy/logger/esm.mjs new file mode 100644 index 000000000000..105fef017c1b --- /dev/null +++ b/components/legacy/logger/esm.mjs @@ -0,0 +1,12 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const IBitLogger = cjsModule.IBitLogger; +export const ServerSendOutStream = cjsModule.ServerSendOutStream; +export const getLevelFromArgv = cjsModule.getLevelFromArgv; +export const logger = cjsModule.logger; +export const printWarning = cjsModule.printWarning; +export const shouldDisableConsole = cjsModule.shouldDisableConsole; +export const shouldDisableLoader = cjsModule.shouldDisableLoader; + +export default cjsModule; \ No newline at end of file diff --git a/components/legacy/scope-api/esm.mjs b/components/legacy/scope-api/esm.mjs new file mode 100644 index 000000000000..c65f25972808 --- /dev/null +++ b/components/legacy/scope-api/esm.mjs @@ -0,0 +1,17 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const CURRENT_FETCH_SCHEMA = cjsModule.CURRENT_FETCH_SCHEMA; +export const ExternalActions = cjsModule.ExternalActions; +export const FETCH_OPTIONS = cjsModule.FETCH_OPTIONS; +export const LaneNotFound = cjsModule.LaneNotFound; +export const PushOptions = cjsModule.PushOptions; +export const action = cjsModule.action; +export const fetch = cjsModule.fetch; +export const initScope = cjsModule.initScope; +export const latestVersions = cjsModule.latestVersions; +export const put = cjsModule.put; +export const remove = cjsModule.remove; +export const scopeConfig = cjsModule.scopeConfig; + +export default cjsModule; \ No newline at end of file diff --git a/components/legacy/scope-api/lib/latest-versions.ts b/components/legacy/scope-api/lib/latest-versions.ts index 208e3881e6d0..052f2e933e9c 100644 --- a/components/legacy/scope-api/lib/latest-versions.ts +++ b/components/legacy/scope-api/lib/latest-versions.ts @@ -2,7 +2,7 @@ import type { ComponentID } from '@teambit/component-id'; import type { Scope } from '@teambit/legacy.scope'; import { loadScope } from '@teambit/legacy.scope'; -export default (async function latestVersions(path: string, componentIdsStr: string[]): Promise { +export default (async function (path: string, componentIdsStr: string[]): Promise { const scope: Scope = await loadScope(path); const bitIds: ComponentID[] = await Promise.all(componentIdsStr.map((id) => scope.getParsedId(id))); const componentsIds = await scope.latestVersions(bitIds); diff --git a/components/modules/find-scope-path/esm.mjs b/components/modules/find-scope-path/esm.mjs new file mode 100644 index 000000000000..0f9e7b6f50db --- /dev/null +++ b/components/modules/find-scope-path/esm.mjs @@ -0,0 +1,6 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const findScopePath = cjsModule.findScopePath; + +export default cjsModule; \ No newline at end of file diff --git a/package.json b/package.json index 162fc6c0b8bd..7e9023e5c7af 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "performance-test:debug": "npm run performance-test --debug", "performance-test-circle": "mocha --require ./babel-register --reporter mocha-multi-reporters --reporter-options configFile=mocha-multi-reporters-config.json --colors ./e2e/performance/*.performance*.ts", "bit-hub-test-circle": "mocha --require ./babel-register --reporter mocha-multi-reporters --reporter-options configFile=mocha-multi-reporters-config.json --colors ./e2e/bit-hub/*.ts", + "bundle": "node node_modules/@teambit/bit/dist/bundle/bundle.js", "clean-node-modules": "find . -type d -name node_modules -prune -exec rm -rf '{}' +", "setup": "bit install && bit compile", "full-setup": "rm -rf node_modules/.bin/bit && bit install && husky && bit compile", diff --git a/scopes/compilation/bundler/esm.mjs b/scopes/compilation/bundler/esm.mjs index 8978c3159e62..5733a1a428f0 100644 --- a/scopes/compilation/bundler/esm.mjs +++ b/scopes/compilation/bundler/esm.mjs @@ -3,5 +3,8 @@ import cjsModule from './index.js'; export const BundlerAspect = cjsModule.BundlerAspect; export const ComponentServer = cjsModule.ComponentServer; +export const ComponentServerStartedEvent = cjsModule.ComponentServerStartedEvent; +export const ComponentsServerStartedEvent = cjsModule.ComponentsServerStartedEvent; +export const NewDevServersCreatedEvent = cjsModule.NewDevServersCreatedEvent; export default cjsModule; diff --git a/scopes/defender/jest/jest.main.runtime.ts b/scopes/defender/jest/jest.main.runtime.ts index 2dcd89350892..c7ea49fcc06a 100644 --- a/scopes/defender/jest/jest.main.runtime.ts +++ b/scopes/defender/jest/jest.main.runtime.ts @@ -32,7 +32,17 @@ export class JestMain { static async provider([worker, loggerAspect]: [WorkerMain, LoggerMain]) { const logger = loggerAspect.createLogger(JestAspect.id); - const jestWorker = worker.declareWorker(WORKER_NAME, require.resolve('./jest.worker')); + // When bundled, worker files are copied to a separate directory + let workerPath: string; + try { + workerPath = require.resolve('./jest.worker'); + } catch { + // Fallback for bundled version where worker is in a separate directory + // Use dynamic path construction to avoid esbuild resolving at build time + const defenderPath = './defender' + '.jest/dist/jest.worker'; + workerPath = require.resolve(defenderPath); + } + const jestWorker = worker.declareWorker(WORKER_NAME, workerPath); return new JestMain(jestWorker, logger); } } diff --git a/scopes/dependencies/dependency-resolver/esm.mjs b/scopes/dependencies/dependency-resolver/esm.mjs index df4a2dc1744e..c71b0d59af23 100644 --- a/scopes/dependencies/dependency-resolver/esm.mjs +++ b/scopes/dependencies/dependency-resolver/esm.mjs @@ -12,6 +12,7 @@ export const DependencyList = cjsModule.DependencyList; export const BaseDependency = cjsModule.BaseDependency; export const ComponentDependency = cjsModule.ComponentDependency; export const KEY_NAME_BY_LIFECYCLE_TYPE = cjsModule.KEY_NAME_BY_LIFECYCLE_TYPE; +export const COMPONENT_DEP_TYPE = cjsModule.COMPONENT_DEP_TYPE; export const WorkspacePolicy = cjsModule.WorkspacePolicy; export const VariantPolicy = cjsModule.VariantPolicy; export const EnvPolicy = cjsModule.EnvPolicy; diff --git a/scopes/envs/envs/environments.main.runtime.ts b/scopes/envs/envs/environments.main.runtime.ts index 86f6bf6f3788..836dcbfb747b 100644 --- a/scopes/envs/envs/environments.main.runtime.ts +++ b/scopes/envs/envs/environments.main.runtime.ts @@ -1154,7 +1154,8 @@ if needed, use "bit env set" command to align the env id`; ); } - private async getEnvAspectDef(envId: string): Promise { + private async getEnvAspectDef(envId: string): Promise { + if (this.isCoreEnv(envId)) return undefined; const host = this.componentMain.getHost(); const id = await host.resolveComponentId(envId); // We don't want to filter by runtime here as we want to also get envs that configured as plugins. so they don't diff --git a/scopes/envs/envs/runtime/env-runtime.ts b/scopes/envs/envs/runtime/env-runtime.ts index f49c501f0666..cf47dc844f7f 100644 --- a/scopes/envs/envs/runtime/env-runtime.ts +++ b/scopes/envs/envs/runtime/env-runtime.ts @@ -26,6 +26,6 @@ export class EnvRuntime { /** * Aspect definition of the env. */ - readonly envAspectDefinition: AspectDefinition + readonly envAspectDefinition?: AspectDefinition ) {} } diff --git a/scopes/git/ci/esm.mjs b/scopes/git/ci/esm.mjs new file mode 100644 index 000000000000..c311e7205236 --- /dev/null +++ b/scopes/git/ci/esm.mjs @@ -0,0 +1,3 @@ +import cjsModule from './index.js'; +export const CiAspect = cjsModule.CiAspect; +export default cjsModule; \ No newline at end of file diff --git a/scopes/harmony/aspect-loader/core-aspects.ts b/scopes/harmony/aspect-loader/core-aspects.ts index 6f6d8a4f3cf4..e3036e619c55 100644 --- a/scopes/harmony/aspect-loader/core-aspects.ts +++ b/scopes/harmony/aspect-loader/core-aspects.ts @@ -1,8 +1,9 @@ import { BitError } from '@teambit/bit-error'; -import { existsSync, readdir } from 'fs-extra'; +import { existsSync, pathExists, readdir } from 'fs-extra'; import { join, resolve } from 'path'; import { Config } from '@teambit/bvm.config'; import { findCurrentBvmDir } from '@teambit/bvm.path'; +import findRoot from 'find-root'; let _bvmConfig; @@ -75,7 +76,13 @@ export function getAspectDir(id: string, isCore = true): string { dirPath = resolve(__dirname, '../..', aspectName, 'dist'); } if (!existsSync(dirPath)) { - throw new Error(`unable to find ${aspectName} in ${dirPath}`); + // Maybe it's bundle + const aspectPackage = getCoreAspectPackageName(id); + try { + dirPath = findRoot(require.resolve(aspectPackage)); + } catch { + throw new Error(`unable to find ${aspectName}`); + } } return dirPath; } @@ -120,7 +127,9 @@ export function getAspectDirFromBvm(id: string, bvmDirOptions?: BvmDirOptions): } export function getAspectDistDir(id: string, isCore = true) { - return resolve(`${getAspectDir(id, isCore)}/dist`); + const aspectDir = getAspectDir(id, isCore); + // When running from bundle there won't be a dist folder + return resolve(`${aspectDir}/dist`); } export function getCoreAspectName(id: string): string { @@ -146,9 +155,15 @@ function getNonCorePackageName(id: string): string { } export async function getAspectDef(aspectName: string, runtime?: string) { - const dirPath = getAspectDistDir(aspectName); + let dirPath = getAspectDir(aspectName); + const distDirPath = getAspectDistDir(aspectName); + const isDistDirExists = await pathExists(distDirPath); + if (distDirPath && isDistDirExists) { + dirPath = join(dirPath, '..'); + } - const files = await readdir(dirPath); + const filesDir = distDirPath && isDistDirExists ? distDirPath : dirPath; + const files = await readdir(filesDir); let runtimeFile; if (runtime) { runtimeFile = files.find((file) => file.includes(`.${runtime}.runtime.js`)) || null; @@ -157,7 +172,7 @@ export async function getAspectDef(aspectName: string, runtime?: string) { return { id: aspectName, - aspectPath: join(dirPath, '..'), + aspectPath: dirPath, aspectFilePath: aspectFile ? resolve(`${dirPath}/${aspectFile}`) : null, runtimePath: runtimeFile ? resolve(`${dirPath}/${runtimeFile}`) : null, }; diff --git a/scopes/harmony/bit/app.ts b/scopes/harmony/bit/app.ts index 2f010a614d19..86aa1b022f5e 100644 --- a/scopes/harmony/bit/app.ts +++ b/scopes/harmony/bit/app.ts @@ -1,4 +1,45 @@ import { runBit } from './run-bit'; +import fs from 'fs'; +import gracefulFs from 'graceful-fs'; +// monkey patch fs module to avoid EMFILE error (especially when running watch operation) +gracefulFs.gracefulify(fs); -// eslint-disable-next-line @typescript-eslint/no-floating-promises -runBit(); +import './hook-require'; +import { bootstrap } from './bootstrap'; +import { handleErrorAndExit } from '@teambit/cli'; +import { runCLI } from './load-bit'; +import { autocomplete } from './autocomplete'; +import { ServerCommander, shouldUseBitServer } from './server-commander'; +import { spawnPTY } from './server-forever'; + +if (process.argv.includes('--get-yargs-completions')) { + autocomplete(); + process.exit(0); +} + +// Export APIs from all core aspects to be used in the bundled app +export * from './core-aspects-exports'; + +if (process.argv.includes('server-forever')) { + spawnPTY(); +} else if (shouldUseBitServer()) { + new ServerCommander().execute().catch(() => { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + initApp(); + }); +} else { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + initApp(); +} + +async function initApp() { + try { + await bootstrap(); + // registerCoreExtensions(); + // const harmony = await Harmony.load([ConfigExt], {}); + await runCLI(); + } catch (err: any) { + const originalError = err.originalError || err; + await handleErrorAndExit(originalError, process.argv[2]); + } +} diff --git a/scopes/harmony/bit/bit.main.runtime.ts b/scopes/harmony/bit/bit.main.runtime.ts index a79d638c704b..605495c64bad 100644 --- a/scopes/harmony/bit/bit.main.runtime.ts +++ b/scopes/harmony/bit/bit.main.runtime.ts @@ -3,19 +3,23 @@ import { ExtensionDataList } from '@teambit/legacy.extension-data'; import { BitAspect } from './bit.aspect'; import { provideBit } from './bit.provider'; -import { manifestsMap } from './manifests'; +import { getManifestsMap } from './manifests'; -const manifests = Object.values(manifestsMap); +const manifestsMap = getManifestsMap(); export function registerCoreExtensions() { const allCoreExtensionsNames = Object.keys(manifestsMap); ExtensionDataList.registerManyCoreExtensionNames(allCoreExtensionsNames); } +function getDeps() { + return Object.values(manifestsMap); +} + export const BitMain = { name: 'bit', runtime: MainRuntime, - dependencies: manifests, + dependencies: getDeps(), provider: provideBit, }; diff --git a/scopes/harmony/bit/bit.provider.ts b/scopes/harmony/bit/bit.provider.ts index f321779232e0..8e0e3a675bd2 100644 --- a/scopes/harmony/bit/bit.provider.ts +++ b/scopes/harmony/bit/bit.provider.ts @@ -1,4 +1,4 @@ -import { manifestsMap } from './manifests'; +import { getManifestsMap } from './manifests'; export type BitDeps = []; @@ -16,6 +16,6 @@ export type BitConfig = { export async function provideBit() { return { - manifestsMap, + manifestsMap: getManifestsMap(), }; } diff --git a/scopes/harmony/bit/bundle/bundle.ts b/scopes/harmony/bit/bundle/bundle.ts new file mode 100644 index 000000000000..2f3bf735d6f4 --- /dev/null +++ b/scopes/harmony/bit/bundle/bundle.ts @@ -0,0 +1,37 @@ +import fs from 'fs-extra'; +import { omit } from 'lodash'; +import { runEsbuild } from './esbuild'; +import { generateCoreAspectsBarrelFile } from './generate-core-aspects-exports'; +import { generateCoreAspectsModules } from './generate-core-aspects-modules'; +import { generatePackageJson } from './create-package-json'; +import { generateNpmrc } from './generate-npmrc'; +// import { runTsup } from './tsup'; +import { copyFilesOfCoreAspects } from './copy-files-of-core-aspects'; +import { copyOtherFiles } from './copy-other-files'; +import { generateSeaConfig } from './generate-sea-config'; + +// const rootOutDir = '/Users/giladshoham/dev/bit/bit/bundle'; +const rootOutDir = '/tmp/bit-bundle'; +const bundleDirName = 'bundle'; +const bundleDir = `${rootOutDir}/${bundleDirName}`; +const appFileBaseName = 'bit.app'; +const jsAppFile = `${appFileBaseName}.js`; +const blobAppFile = `${appFileBaseName}.blob`; + +async function runBundle() { + const esbuildRes = await runEsbuild(bundleDir, jsAppFile); + // const tsupRes = await runTsup(bundleDir, jsAppFile); + await generateCoreAspectsModules(rootOutDir, jsAppFile); + await copyFilesOfCoreAspects(rootOutDir, bundleDir); + await copyOtherFiles(bundleDir); + generateNpmrc(rootOutDir); + await generatePackageJson(rootOutDir, bundleDirName, jsAppFile); + await generateCoreAspectsBarrelFile(); + await generateSeaConfig(bundleDir, jsAppFile, blobAppFile); + const metafile = esbuildRes.metafile; + await fs.writeJSON(`${bundleDir}/metafile.json`, metafile, { spaces: 2 }); + return omit(esbuildRes, ['metafile']); + // return tsupRes; +} + +runBundle().then((res) => console.log(JSON.stringify(res, null, 2))); diff --git a/scopes/harmony/bit/bundle/config-files-esbuild-plugin.ts b/scopes/harmony/bit/bundle/config-files-esbuild-plugin.ts new file mode 100644 index 000000000000..e2a811ce66e6 --- /dev/null +++ b/scopes/harmony/bit/bundle/config-files-esbuild-plugin.ts @@ -0,0 +1,227 @@ +import { basename, dirname, join, parse } from 'path'; +import { OnResolveArgs } from 'esbuild'; +import fs from 'fs-extra'; + +type ParsedArgs = { + scopeName: string; + componentName: string; + relativePath: string; +}; + +function handleConfigFile(args: OnResolveArgs, bundleDir: string) { + if ( + args.kind === 'require-resolve' && + (args.importer.includes('/scopes/') || args.importer.includes('node_modules/@teambit')) && + // ignore templates we want to keep it as is + !args.importer.includes('/templates/') + ) { + if (args.path.startsWith('@teambit')) { + return handleModulePath(args, bundleDir); + } + if (args.path.startsWith('.')) { + return handleRelativePath(args, bundleDir); + } + } + return undefined; +} + +function resolveRelativePath(filePath: string) { + try { + const resolvedFilePath = require.resolve(filePath); + return resolvedFilePath; + } catch (err) { + // Handle @teambit packages that have problematic exports adding .ts extension + if (filePath.startsWith('@teambit/')) { + const Module = require('module'); + const cwdRequire = Module.createRequire(join(process.cwd(), 'index.js')); + const paths = cwdRequire.resolve.paths(filePath); + + if (paths && paths.length > 0) { + // Try to find the file without the .ts extension that exports might add + const extensions = ['', '.js', '.json']; + for (const ext of extensions) { + const fullPath = join(paths[0], `${filePath}${ext}`); + if (require('fs').existsSync(fullPath)) { + return fullPath; + } + } + } + } + + // Fallback: try appending .js extension + try { + const resolvedFilePath = require.resolve(`${filePath}.js`); + return resolvedFilePath; + } catch { + throw err; + } + } +} + +async function handleRelativePath(args: OnResolveArgs, bundleDir: string) { + // const parsed = parse(args.path); + const { componentName, relativePath, scopeName } = await parseArgs(args); + // const packageDirName = getPackageDirName(args.resolveDir); + const packageDirName = `@teambit/${componentName}`; + // const origFilePath = join(args.resolveDir, args.path); + // const relativePath = getFilePathRelativeToPackage(args.resolveDir, args.path); + const origFilePath = join(packageDirName, relativePath); + // const targetDirName = getTargetDirName(args.resolveDir); + const targetDirName = `${scopeName}.${componentName}`; + // const targetDir = join(bundleDir, targetDirName, parsed.dir); + const targetDir = join(bundleDir, targetDirName, dirname(relativePath)); + await fs.ensureDir(targetDir); + const resolvedFilePath = resolveRelativePath(origFilePath); + const copyTarget = join(targetDir, basename(resolvedFilePath)); + await fs.copyFile(resolvedFilePath, copyTarget); + // const newPath = replaceRelativePath(targetDirName, parsed); + const newPath = `./${targetDirName}/${relativePath}`; + return { + path: newPath, + namespace: 'bit-config-file', + external: true, + }; +} + +async function parseArgs(args: OnResolveArgs): Promise { + if (args.resolveDir.includes('/scopes/')) { + return parseArgsFromSrc(args); + } + return parseArgsFromNodeModules(args); +} +async function parseArgsFromNodeModules(args: OnResolveArgs): Promise { + const resolveDir = args.resolveDir; + const filePath = args.path; + const parts = resolveDir.split('/@teambit/'); + const idParts = parts[1].split('/'); + const componentName = idParts[0]; + const componentDir = join(parts[0], '@teambit', componentName); + const relativeResolvedDir = resolveDir.replace(`${componentDir}/`, ''); + const relativePath = join(relativeResolvedDir, filePath.replace('./', '')); + const packageJsonPath = join(componentDir, 'package.json'); + const jsonValue = await fs.readJson(packageJsonPath); + const scopeName = jsonValue.componentId.scope.replace('teambit.', ''); + return { + scopeName, + componentName, + relativePath, + }; +} + +function parseArgsFromSrc(args: OnResolveArgs): ParsedArgs { + const resolveDir = args.resolveDir; + const filePath = args.path; + const parts = resolveDir.split('/scopes/'); + if (parts.length !== 2) { + throw new Error('unable to find scopes dir'); + } + const idParts = parts[1].split('/'); + const scopeName = idParts[0]; + const componentName = idParts[1]; + let relativePath = filePath; + if (idParts.length > 2) { + relativePath = join(idParts.slice(2).join('/'), filePath); + } + return { + scopeName, + componentName, + relativePath: relativePath.replace('./', ''), + }; +} + +async function handleModulePath(args: OnResolveArgs, bundleDir: string) { + const resolvedFilePath = resolveRelativePath(args.path); + const parsed = parse(args.path); + const targetDir = join(bundleDir, 'node_modules', parsed.dir); + await fs.ensureDir(targetDir); + await fs.copyFile(resolvedFilePath, join(targetDir, basename(resolvedFilePath))); + return { + // Keep the path as-is + path: args.path, + namespace: 'bit-config-file', + external: true, + }; +} + +export const configFilesEsbuildPlugin = (bundleDir: string) => { + return { + name: 'config-files', + setup(build) { + // Intercept import paths starting with "http:" and "https:" so + // esbuild doesn't attempt to map them to a file system location. + // Tag them with the "http-url" namespace to associate them with + // this plugin. + build.onResolve({ filter: /jest.config$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /jest.cjs.config$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /jest.base.config$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + + build.onResolve({ filter: /jest.worker$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + + build.onResolve({ filter: /eslintrc.js$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + + build.onResolve({ filter: /prettier.config.js$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + + build.onResolve({ filter: /asset.d.ts$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /style.d.ts$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + + build.onResolve({ filter: /tsconfig.json$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /tsconfig.cjs.json$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /refreshOverlayInterop$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /webpackHotDevClient$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /mount$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /html-docs-app$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /\/preview.preview.runtime$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /setupTests$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /css-transform$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /file-transform$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /cjs-transformer$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /esm-transformer$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /svg-transformer$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + build.onResolve({ filter: /file-mock.js$/ }, (args) => { + return handleConfigFile(args, bundleDir); + }); + }, + }; +}; diff --git a/scopes/harmony/bit/bundle/copy-files-of-core-aspects.ts b/scopes/harmony/bit/bundle/copy-files-of-core-aspects.ts new file mode 100644 index 000000000000..ed9a447939f7 --- /dev/null +++ b/scopes/harmony/bit/bundle/copy-files-of-core-aspects.ts @@ -0,0 +1,90 @@ +import { getWorkspaceInfo } from '@teambit/workspace.modules.workspace-locator'; +import { getCoreAspectPackageName } from '@teambit/aspect-loader'; +import fs from 'fs-extra'; +import { join } from 'path'; + +type Item = { + paths: string[]; + targets: string[]; +}; + +const FILES_TO_COPY = { + 'teambit.react/react': [ + { + paths: ['jest'], + // package - copy to "rootOutDir/node_modules/packageName" + // configs-dir - "rootOutDir/bundle-dir/{scopeName}.{aspectName}" + targets: ['package', 'configs-dir'], + }, + ], + 'teambit.defender/jest': [ + { + paths: ['dist/jest.worker.js', 'dist/jest.worker.js.map'], + targets: ['configs-dir'], + }, + ], +}; + +let wsRootDir: string; + +async function loadWsRootDir() { + const consumerInfo = await getWorkspaceInfo(process.cwd()); + if (!consumerInfo) throw new Error('unable to find consumer'); + wsRootDir = consumerInfo.path; + return consumerInfo.path; +} + +export async function copyFilesOfCoreAspects(rootOutDir: string, bundleDir: string) { + await loadWsRootDir(); + const coreAspectsIds = Object.keys(FILES_TO_COPY); + const generateOneAspectP = coreAspectsIds.map((id) => { + const packageName = getCoreAspectPackageName(id); + return handleOneAspect(id, rootOutDir, bundleDir, packageName); + }); + return Promise.all(generateOneAspectP); +} + +async function handleOneAspect(aspectId: string, rootOutDir: string, bundleDir: string, packageName: string) { + const items = FILES_TO_COPY[aspectId]; + const srcDir = join(wsRootDir, 'node_modules', packageName); + const packageTargetDir = join(rootOutDir, 'node_modules', packageName); + const configDirName = getConfigDirName(aspectId); + const configDirTargetDir = join(bundleDir, configDirName); + await Promise.all( + items.map(async (item) => { + return handleOneItem(item, srcDir, packageTargetDir, configDirTargetDir); + }) + ); +} + +function getConfigDirName(aspectId: string): string { + const parts = aspectId.split('/'); + const [, scopeName] = parts[0].split('.'); + return `${scopeName}.${parts[1]}`; +} + +async function handleOneItem(item: Item, srcDir: string, packageTargetDir: string, configDirTargetDir: string) { + const { paths, targets } = item; + const copyP = paths.flatMap((path) => { + return targets.map((target) => { + if (target === 'package') { + return handleOnePath(srcDir, packageTargetDir, path); + } + if (target === 'configs-dir') { + return handleOnePath(srcDir, configDirTargetDir, path); + } + return Promise.reject(new Error(`unknown target ${target}`)); + }); + }); + return Promise.all(copyP); +} + +async function handleOnePath(srcDir: string, targetDir: string, path: string) { + const srcPath = join(srcDir, path); + const targetPath = join(targetDir, path); + const exists = await fs.pathExists(targetPath); + if (exists) { + await fs.remove(targetPath); + } + return fs.copy(srcPath, targetPath, { dereference: true }); +} diff --git a/scopes/harmony/bit/bundle/copy-other-files.ts b/scopes/harmony/bit/bundle/copy-other-files.ts new file mode 100644 index 000000000000..478467c1ffee --- /dev/null +++ b/scopes/harmony/bit/bundle/copy-other-files.ts @@ -0,0 +1,42 @@ +import { getWorkspaceInfo } from '@teambit/workspace.modules.workspace-locator'; +import fs from 'fs-extra'; +import { basename, join } from 'path'; +import globby from 'globby'; + +const PATTERNS_TO_COPY = ['node_modules/typescript/lib/*.d.ts']; + +let wsRootDir: string; + +async function loadWsRootDir() { + const consumerInfo = await getWorkspaceInfo(process.cwd()); + if (!consumerInfo) throw new Error('unable to find consumer'); + wsRootDir = consumerInfo.path; + return consumerInfo.path; +} + +export async function copyOtherFiles(bundleDir: string) { + await loadWsRootDir(); + const copyP = PATTERNS_TO_COPY.map((file) => { + return handleOnePattern(wsRootDir, bundleDir, file); + }); + return Promise.all(copyP); +} + +async function handleOnePattern(srcDir: string, targetDir: string, pattern: string) { + const files = await globby(pattern, { cwd: srcDir }); + return Promise.all( + files.map((file) => { + return handleOnePath(srcDir, targetDir, file); + }) + ); +} + +async function handleOnePath(srcDir: string, targetDir: string, path: string) { + const srcPath = join(srcDir, path); + const targetPath = join(targetDir, basename(path)); + const exists = await fs.pathExists(targetPath); + if (exists) { + await fs.remove(targetPath); + } + return fs.copy(srcPath, targetPath, { dereference: true }); +} diff --git a/scopes/harmony/bit/bundle/create-package-json.ts b/scopes/harmony/bit/bundle/create-package-json.ts new file mode 100644 index 000000000000..5b7925dae3b5 --- /dev/null +++ b/scopes/harmony/bit/bundle/create-package-json.ts @@ -0,0 +1,149 @@ +import findUp from 'find-up'; +import { join } from 'path'; +import { get } from 'lodash'; +import fs from 'fs-extra'; +import { parse } from 'comment-json'; +import { getWorkspaceInfo } from '@teambit/workspace.modules.workspace-locator'; +import { externals } from './externals'; + +let wsJsonc: any; +let packageJson: any; + +async function getWsRootDir() { + const consumerInfo = await getWorkspaceInfo(process.cwd()); + if (!consumerInfo) throw new Error('unable to find consumer'); + return consumerInfo.path; +} + +function getPackageJsonPath(wsRootDir: string) { + return join(wsRootDir, 'package.json'); +} + +function getWorkspaceJsoncPath(wsRootDir: string) { + return join(wsRootDir, 'workspace.jsonc'); +} + +function loadPackageJson(wsRootDir: string) { + const packageJsonPath = getPackageJsonPath(wsRootDir); + // eslint-disable-next-line import/no-dynamic-require, global-require + const pkgJson = require(packageJsonPath); + packageJson = pkgJson; +} + +function loadWsJsonc(wsRootDir: string) { + const wsJsoncPath = getWorkspaceJsoncPath(wsRootDir); + // eslint-disable-next-line import/no-dynamic-require, global-require + const content = fs.readFileSync(wsJsoncPath, 'utf8'); + const parsed = parse(content); + wsJsonc = parsed; +} + +function resolveFromWsJsonc(packageName: string): string | undefined { + const wsJsoncPolicy = wsJsonc['teambit.dependencies/dependency-resolver'].policy; + const wsJsoncDependencies = wsJsoncPolicy.dependencies; + const wsJsoncPeerDependencies = wsJsoncPolicy.peerDependencies; + if (!wsJsoncPolicy) return undefined; + const val = wsJsoncDependencies[packageName] || wsJsoncPeerDependencies[packageName]; + if (!val) return undefined; + const packageVersion = typeof val === 'string' ? val : val.version; + return packageVersion; +} + +function resolveFromPackageJson(packageName: string): string | undefined { + const packageVersion = + get(packageJson, ['dependencies', packageName]) || + get(packageJson, ['devDependencies', packageName]) || + get(packageJson, ['peerDependencies', packageName]); + return packageVersion; +} + +async function resolveFromNodeModules(packageName: string): Promise { + try { + const resolvedPath = require.resolve(packageName); + if (!resolvedPath) return undefined; + const packageJsonPath = findUp.sync('package.json', { cwd: resolvedPath }); + if (!packageJsonPath) return undefined; + // eslint-disable-next-line import/no-dynamic-require, global-require + const pkgJson = require(packageJsonPath); + if (pkgJson.name !== packageName) return undefined; + return pkgJson.version; + } catch { + return undefined; + } +} + +function resolveHardCoded(packageName: string): string | undefined { + // TODO: resolve this in a better way + const hardCoded = { + assert: '2.0.0', + util: '0.12.3', + url: '0.11.0', + string_decoder: '1.3.0', + punycode: '2.1.1', + 'react-app-polyfill': '1.0.6', + 'identity-obj-proxy': '3.0.0', + uuid: '^10.0.0', + 'babel-preset-jest': '29.2.0', + espree: '9.6.1', + '@bitdev/react.webpack.refresh-overlay': '0.0.2', + '@surma/rollup-plugin-off-main-thread': '2.2.3', + '@babel/plugin-proposal-object-rest-spread': '7.20.7', + 'source-map-support': '0.5.21', + nconf: '0.12.1', + '@parcel/watcher': '^2.5.1', + }; + return hardCoded[packageName]; +} + +async function resolveExternalVersion(packageName: string) { + const hardCodedVersion = resolveHardCoded(packageName); + if (hardCodedVersion) return hardCodedVersion; + const wsJsoncVersion = resolveFromWsJsonc(packageName); + if (wsJsoncVersion) return wsJsoncVersion; + const packageJsonVersion = resolveFromPackageJson(packageName); + if (packageJsonVersion) return packageJsonVersion; + const nodeModulesVersion = await resolveFromNodeModules(packageName); + if (nodeModulesVersion) return nodeModulesVersion; + return undefined; +} + +const getPackageName = (packageName: string) => { + const parts = packageName.split('/'); + if (parts.length === 1) return parts[0]; + if (!parts[0].startsWith('@')) return parts[0]; + return `${parts[0]}/${parts[1]}`; +}; + +// function getPkgConfig() { +// const pkgConfig = { +// scripts: 'build/**/*.js', +// assets: 'views/**/*', +// targets: ['latest-macos-arm64'], +// outputPath: 'pkg-bundle', +// }; +// return pkgConfig; +// } + +export async function generatePackageJson(bundleDir: string, _bundleDirName: string, _jsAppFile: string) { + const wsRootDir = await getWsRootDir(); + loadPackageJson(wsRootDir); + loadWsJsonc(wsRootDir); + const deps = {}; + const depsP = externals.map(async (packageName) => { + const name = getPackageName(packageName); + const version = await resolveExternalVersion(name); + if (!version) { + console.log(`unable to resolve version for ${name}`); + return; + } + deps[name] = version; + }); + await Promise.all(depsP); + const finalPackageJson = { + name: 'bundle', + version: '0.0.0', + dependencies: deps, + }; + const packageJsonPath = join(bundleDir, 'package.json'); + fs.writeFileSync(packageJsonPath, JSON.stringify(finalPackageJson, null, 2)); +} diff --git a/scopes/harmony/bit/bundle/esbuild-plugin-time.ts b/scopes/harmony/bit/bundle/esbuild-plugin-time.ts new file mode 100644 index 000000000000..ade1178ff04d --- /dev/null +++ b/scopes/harmony/bit/bundle/esbuild-plugin-time.ts @@ -0,0 +1,28 @@ +// Based on https://github.com/DasRed/esbuild-plugin-time/blob/main/src/index.js +import chalk from 'chalk'; + +export const timeEsbuildPlugin = (name) => { + return { + name: 'Log', + setup(build) { + let time; + + build.onStart(() => { + time = new Date(); + if (name) { + console.log(`Build started for ${chalk.green(name)}`); + } else { + console.log(`Build started`); + } + }); + + build.onEnd(() => { + if (name) { + console.log(`Build ended ${chalk.green(name)}: ${chalk.yellow(`${new Date() - time}ms`)}`); + } else { + console.log(`Build ended: ${chalk.yellow(`${new Date() - time}ms`)}`); + } + }); + }, + }; +}; diff --git a/scopes/harmony/bit/bundle/esbuild.ts b/scopes/harmony/bit/bundle/esbuild.ts new file mode 100644 index 000000000000..fd5fd3bbc780 --- /dev/null +++ b/scopes/harmony/bit/bundle/esbuild.ts @@ -0,0 +1,89 @@ +import { build } from 'esbuild'; +import ignorePlugin from 'esbuild-plugin-ignore'; +import { join } from 'path'; +import { configFilesEsbuildPlugin } from './config-files-esbuild-plugin'; +import { timeEsbuildPlugin } from './esbuild-plugin-time'; +import { externals } from './externals'; + +export function runEsbuild(outDir: string, appFile: string) { + // const _outfile = join('/Users/giladshoham/dev/temp/bundle-bit/output', `${appFile}.js`); + const _outfile = join(outDir, appFile); + // const _outfile = join('/Users/giladshoham/dev/temp/bundle-bit/output', `test-app.js`); + return build({ + define: { + // 'process.env.JSON_LOGS': 'true', + // 'process.env.BIT_LOG': `'debug'`, + 'import.meta.url': 'import_meta_url', + }, + banner: { + js: `const { pathToFileURL } = require('url'); +const import_meta_url = pathToFileURL(__filename).href;`, + }, + entryPoints: [join(process.cwd(), 'scopes/harmony/bit/app.ts')], + // entryPoints: ['/Users/giladshoham/dev/bit/bit/node_modules/@teambit/bit/dist/app.js'], + // entryPoints: ['/Users/giladshoham/dev/temp/bundle-bit/node_modules/@my-scope/bit-bundle/dist/test-app.js'], + // entryPoints: ['/Users/giladshoham/dev/temp/bundle-bit/my-scope/bit-bundle/test-app.ts'] + bundle: true, + logLevel: 'error', + platform: 'node', + // minify: true, + metafile: true, + // TODO: maybe enable sourcemap later + // sourcemap: true, + mainFields: ['main', 'module'], + format: 'cjs', + keepNames: true, + outfile: _outfile, + // inject: [join(__dirname, './import-meta-url.js')], + + external: externals, + plugins: [ + // sassPlugin(), + ignorePlugin([ + // { resourceRegExp: /(.*)\.ui\.runtime\.*/g }, + { resourceRegExp: /\.(s[ac]ss|css)$/ }, + { resourceRegExp: /\.(mdx)$/ }, + { resourceRegExp: /\.(md)$/ }, + // { resourceRegExp: new RegExp('^@swc/core') }, + { resourceRegExp: new RegExp('^jest-resolve') }, + { resourceRegExp: new RegExp('^@vue/compiler-sfc') }, + { resourceRegExp: new RegExp('^batch') }, + { resourceRegExp: new RegExp('^../build/Release/cpufeatures.node') }, + { resourceRegExp: new RegExp('^pnpapi') }, + // { resourceRegExp: new RegExp('^shelljs') }, + // { resourceRegExp: new RegExp('^react') }, + // { resourceRegExp: new RegExp('^react-router-dom') }, + { resourceRegExp: new RegExp('^esbuild') }, + // { resourceRegExp: new RegExp('^../prelude/bootstrap.js') }, + // { resourceRegExp: new RegExp('^./html.docs.mdx') }, + // { resourceRegExp: new RegExp('^stream-browserify') }, + // { resourceRegExp: new RegExp('^expose-loader') }, + // { resourceRegExp: new RegExp('^querystring-es3') }, + // { resourceRegExp: new RegExp('^assert/') }, + // { resourceRegExp: new RegExp('^buffer/') }, + // { resourceRegExp: new RegExp('^constants-browserify') }, + // { resourceRegExp: new RegExp('^crypto-browserify') }, + // { resourceRegExp: new RegExp('^domain-browser') }, + // { resourceRegExp: new RegExp('^stream-http') }, + // { resourceRegExp: new RegExp('^https-browserify') }, + // { resourceRegExp: new RegExp('^os-browserify/browser') }, + // { resourceRegExp: new RegExp('^path-browserify') }, + // { resourceRegExp: new RegExp('^punycode/') }, + // { resourceRegExp: new RegExp('^process/browser') }, + // { resourceRegExp: new RegExp('^querystring-es3') }, + // { resourceRegExp: new RegExp('^stream-browserify') }, + // { resourceRegExp: new RegExp('^string_decoder/') }, + // { resourceRegExp: new RegExp('^util/') }, + // { resourceRegExp: new RegExp('^timers-browserify') }, + // { resourceRegExp: new RegExp('^tty-browserify') }, + // { resourceRegExp: new RegExp('^url/') }, + // { resourceRegExp: new RegExp('^util/') }, + // { resourceRegExp: new RegExp('^vm-browserify') }, + // { resourceRegExp: new RegExp('^browserify-zlib') }, + ]), + configFilesEsbuildPlugin(outDir), + timeEsbuildPlugin('Bit bundle'), + ], + loader: { '.png': 'binary', '.node': 'binary' }, + }); +} diff --git a/scopes/harmony/bit/bundle/externals.ts b/scopes/harmony/bit/bundle/externals.ts new file mode 100644 index 000000000000..44c70b5d647c --- /dev/null +++ b/scopes/harmony/bit/bundle/externals.ts @@ -0,0 +1,118 @@ +export const externals = [ + // 'jest.worker', + 'browserslist', + 'yoga-layout', + 'yoga-layout-prebuilt', + '@parcel/watcher', + 'nconf', + '@surma/rollup-plugin-off-main-thread', + '@babel/preset-react', + 'ink', + 'camelcase', + 'rrweb-cssom', + 'canvas', + 'style-loader', + '@lydell/node-pty', + 'mini-css-extract-plugin', + '@prerenderer/renderer-jsdom', + '@pmmmwh/react-refresh-webpack-plugin', + '@teambit/react.babel.bit-react-transformer', + 'source-map-loader', + 'babel-loader', + 'react-refresh/babel', + 'babel-loader', + '@babel/core', + '@testing-library/jest-dom', + '@babel/runtime', + '@babel/preset-react', + '@babel/preset-env', + '@teambit/mdx.modules.mdx-loader', + '@swc/core', + '@babel/plugin-proposal-class-properties', + '@babel/plugin-proposal-decorators', + '@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-syntax-typescript', + '@babel/plugin-transform-modules-commonjs', + '@babel/plugin-transform-runtime', + '@babel/preset-typescript', + '@mdx-js/react', + '@teambit/mdx.ui.mdx-scope-context', + '@teambit/node/jest/jest.config', + '@typescript-eslint/parser', + 'identity-obj-proxy', + 'uuid', + 'jest-environment-jsdom', + 'react-app-polyfill/jsdom', + 'assert/', + 'babel-jest', + 'babel-plugin-istanbul', + 'babel-plugin-transform-typescript-metadata', + 'babel-preset-current-node-syntax', + 'babel-preset-jest', + 'babel-preset-react-app/webpack-overrides', + 'browserify-zlib', + 'buffer/', + 'constants-browserify', + 'crypto-browserify', + 'css-loader', + 'domain-browser', + 'eslint-config-airbnb-typescript', + 'eslint-config-prettier', + 'espree', + 'expose-loader', + 'https-browserify', + 'jest', + 'jest-circus/runner', + 'jest-jasmine2', + 'less-loader', + 'os-browserify/browser', + 'path-browserify', + 'postcss-flexbugs-fixes', + 'postcss-loader', + 'postcss-normalize', + 'process/browser', + 'punycode/', + 'querystring-es3', + 'react', + 'react-dom', + 'react-dom/server', + 'react/jsx-dev-runtime.js', + 'react/jsx-runtime.js', + 'resolve-url-loader', + 'sass-loader', + 'stream-browserify', + 'stream-http', + 'string_decoder/', + 'timers-browserify', + 'tty-browserify', + 'url/', + 'util/', + 'vm-browserify', + 'watchpack', + 'webpack/hot/dev-server', + 'webpack/hot/only-dev-server', + 'source-map-support', + 'css-minimizer-webpack-plugin', + 'html-webpack-plugin', + 'jest-worker', + 'jest-environment-node', + 'mocha', + 'rollup-plugin-terser', + 'terser-webpack-plugin', + 'uglify-js', + 'uid-number', + 'webpack-dev-server', + '@svgr/webpack', + 'new-url-loader', + '@teambit/react.eslint-config-bit-react', + '@teambit/react.ui.docs-app', + '@teambit/react.ui.compositions-app', + 'babel-preset-react-app', + 'tippy.js', + '@babel/plugin-transform-object-rest-spread', + '@babel/plugin-transform-class-properties', + '@bitdev/react.webpack.refresh-overlay', + 'events', + // 'esbuild' + // 'mime' +]; diff --git a/scopes/harmony/bit/bundle/generate-core-aspects-exports.ts b/scopes/harmony/bit/bundle/generate-core-aspects-exports.ts new file mode 100644 index 000000000000..8637fc476894 --- /dev/null +++ b/scopes/harmony/bit/bundle/generate-core-aspects-exports.ts @@ -0,0 +1,33 @@ +import camelcase from 'camelcase'; +import { getCoreAspectName, getCoreAspectPackageName } from '@teambit/aspect-loader'; +import fs from 'fs-extra'; +import { join } from 'path'; + +import { coreAspectsIds } from '../core-aspects-ids'; + +const FILE_NAME = 'core-aspects-exports.ts'; +// const filePath = join('..', FILE_NAME); +// TODO: make it not hard coded +const filePath = join(process.cwd(), 'scopes/harmony/bit', FILE_NAME); + +export function generateCoreAspectsBarrelFile() { + const exports = generateExports(); + const autoGeneratedMessage = `// This file is auto generated by generate-core-aspects-exports.ts`; + const content = `${autoGeneratedMessage}\n${exports}`; + return fs.outputFile(filePath, content); +} + +function generateExports(): string { + const exportsLines = coreAspectsIds.map((id) => { + const name = getCoreAspectName(id); + const packageName = getCoreAspectPackageName(id); + return generateOneExport(name, packageName); + }); + exportsLines.push(generateOneExport('legacy', '@teambit/legacy')); + exportsLines.push(generateOneExport('harmony', '@teambit/harmony')); + return exportsLines.join('\n'); +} + +function generateOneExport(name, packageName) { + return `export * as ${camelcase(name)} from '${packageName}';`; +} diff --git a/scopes/harmony/bit/bundle/generate-core-aspects-modules.ts b/scopes/harmony/bit/bundle/generate-core-aspects-modules.ts new file mode 100644 index 000000000000..dde2f2688b1d --- /dev/null +++ b/scopes/harmony/bit/bundle/generate-core-aspects-modules.ts @@ -0,0 +1,75 @@ +import { getWorkspaceInfo } from '@teambit/workspace.modules.workspace-locator'; +import camelcase from 'camelcase'; +import { getCoreAspectName, getCoreAspectPackageName } from '@teambit/aspect-loader'; +import fs from 'fs-extra'; +import { join } from 'path'; + +import { coreAspectsIds } from '../core-aspects-ids'; + +let wsRootDir: string; + +async function loadWsRootDir() { + const consumerInfo = await getWorkspaceInfo(process.cwd()); + if (!consumerInfo) throw new Error('unable to find consumer'); + wsRootDir = consumerInfo.path; + return consumerInfo.path; +} + +export async function generateCoreAspectsModules(bundleDir: string, appName: string) { + await loadWsRootDir(); + const generateOneAspectP = coreAspectsIds.map((id) => { + const name = getCoreAspectName(id); + const packageName = getCoreAspectPackageName(id); + return handleOneAspect(bundleDir, name, packageName, appName); + }); + generateOneAspectP.push(handleOneAspect(bundleDir, 'legacy', '@teambit/legacy', appName)); + generateOneAspectP.push(handleOneAspect(bundleDir, 'harmony', '@teambit/harmony', appName)); + return Promise.all(generateOneAspectP); +} + +async function handleOneAspect(bundleDir: string, name: string, packageName: string, appName: string) { + const dirPath = join(bundleDir, 'node_modules', packageName); + await fs.ensureDir(dirPath); + await generateIndexFile(dirPath, name, appName); + await generateEsmMjsFile(dirPath, packageName); + await generatePackageJson(dirPath, packageName); +} + +async function generateIndexFile(dirPath: string, name: string, appName: string) { + const indexFilePath = join(dirPath, 'index.js'); + const indexFileContent = getIndexContent(name, appName); + return fs.outputFile(indexFilePath, indexFileContent); +} + +async function generateEsmMjsFile(dirPath: string, packageName: string) { + const esmMjsPath = join(wsRootDir, 'node_modules', packageName, 'esm.mjs'); + const exists = await fs.pathExists(esmMjsPath); + if (exists) { + const targetPath = join(dirPath, 'esm.mjs'); + return fs.copyFile(esmMjsPath, targetPath); + } + return Promise.resolve(); +} + +async function generatePackageJson(dirPath: string, packageName: string) { + const packageJsonPath = join(wsRootDir, 'node_modules', packageName, 'package.json'); + const targetPath = join(dirPath, 'package.json'); + const origPackageJson = await fs.readJson(packageJsonPath); + origPackageJson.main = 'index.js'; + if (origPackageJson.exports && origPackageJson.exports['.']) { + origPackageJson.exports['.'].node.require = './index.js'; + origPackageJson.exports['.'].node.import = './esm.mjs'; + origPackageJson.exports['.'].default = './index.js'; + } + return fs.writeJson(targetPath, origPackageJson, { spaces: 2 }); +} + +function getIndexContent(name: string, appName: string) { + const camelName = camelcase(name); + return ` +// This file is auto generated by generate-core-aspects-modules.ts +Object.defineProperty(exports, "__esModule", { value: true }); +const { ${camelName} } = require("../../../bundle/${appName}"); +module.exports = ${camelName}; +`; +} diff --git a/scopes/harmony/bit/bundle/generate-npmrc.ts b/scopes/harmony/bit/bundle/generate-npmrc.ts new file mode 100644 index 000000000000..80d1b0360ef7 --- /dev/null +++ b/scopes/harmony/bit/bundle/generate-npmrc.ts @@ -0,0 +1,10 @@ +import { ensureDirSync, writeFileSync } from 'fs-extra'; +import { join } from 'path'; + +const content = `@teambit:registry=https://node-registry.bit.cloud`; + +export function generateNpmrc(bundleDir: string) { + ensureDirSync(bundleDir); + const filePath = join(bundleDir, '.npmrc'); + writeFileSync(filePath, content); +} diff --git a/scopes/harmony/bit/bundle/generate-sea-config.ts b/scopes/harmony/bit/bundle/generate-sea-config.ts new file mode 100644 index 000000000000..a2c7a227f510 --- /dev/null +++ b/scopes/harmony/bit/bundle/generate-sea-config.ts @@ -0,0 +1,15 @@ +import fs from 'fs-extra'; +import { join } from 'path'; + +export async function generateSeaConfig(bundleDir: string, jsAppFile: string, blobAppFile: string) { + const config = { + main: join(bundleDir, jsAppFile), + output: join(bundleDir, blobAppFile), + disableExperimentalSEAWarning: true, // Default: false + useSnapshot: false, // Default: false + useCodeCache: true, // Default: false + }; + + const seaConfigPath = join(bundleDir, 'sea-config.json'); + fs.writeJSONSync(seaConfigPath, config, { spaces: 2 }); +} diff --git a/scopes/harmony/bit/bundle/readme.md b/scopes/harmony/bit/bundle/readme.md new file mode 100644 index 000000000000..4c93c291b1d2 --- /dev/null +++ b/scopes/harmony/bit/bundle/readme.md @@ -0,0 +1,42 @@ +## create bundle: + +``` +node node_modules/@teambit/bit/dist/bundle/bundle.js > bundle.result.json +``` + +## Use the bundle + +``` +node /bit/bundle/bit.app.js +``` + +## structure + +1. generate-npmrc.ts - generate an npmrc file with the bit registry + (so you can install external packages with regular pcaakge manager) +1. create-package-json.ts - generate a package.json file with all external packages +1. bundle.ts - main file to generate the bundle +1. esbuild.ts - running the esbuild bundler +1. generate-core-aspects-exports - This will generate a file that exports all the core aspects + +## binary + +1. node --experimental-sea-config sea-config.json +1. cp $(command -v node) bit-app +1. codesign --remove-signature bit-app +1. npx postject bit-app NODE_SEA_BLOB bit.app.blob \ + --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \ + --macho-segment-name NODE_SEA +1. codesign --sign - bit-app + +## binary script + +``` +node --experimental-sea-config sea-config.json +cp $(command -v node) bit-app +codesign --remove-signature bit-app +npx postject bit-app NODE_SEA_BLOB bit.app.blob \ + --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \ + --macho-segment-name NODE_SEA +codesign --sign - bit-app +``` diff --git a/scopes/harmony/bit/bundle/tsup.ts b/scopes/harmony/bit/bundle/tsup.ts new file mode 100644 index 000000000000..c9fc04cb7ffc --- /dev/null +++ b/scopes/harmony/bit/bundle/tsup.ts @@ -0,0 +1,42 @@ +import ignorePlugin from 'esbuild-plugin-ignore'; +import { join } from 'path'; +import { build, Options } from 'tsup'; +import { configFilesEsbuildPlugin } from './config-files-esbuild-plugin'; +import { timeEsbuildPlugin } from './esbuild-plugin-time'; +import { externals } from './externals'; + +export async function runTsup(outDir: string, _appFile: string) { + const opts: Options = { + entry: [join(process.cwd(), 'scopes/harmony/bit/app.ts')], + splitting: false, + sourcemap: true, + clean: true, + dts: true, + format: ['cjs'], + target: 'node18', + outDir, + platform: 'node', + external: externals, + keepNames: true, + esbuildPlugins: [ + ignorePlugin([ + // { resourceRegExp: /(.*)\.ui\.runtime\.*/g }, + { resourceRegExp: /\.(s[ac]ss|css)$/ }, + { resourceRegExp: /\.(mdx)$/ }, + { resourceRegExp: /\.(md)$/ }, + { resourceRegExp: new RegExp('^jest-resolve') }, + { resourceRegExp: new RegExp('^@vue/compiler-sfc') }, + { resourceRegExp: new RegExp('^batch') }, + { resourceRegExp: new RegExp('^../build/Release/cpufeatures.node') }, + { resourceRegExp: new RegExp('^pnpapi') }, + { resourceRegExp: new RegExp('^esbuild') }, + ]), + configFilesEsbuildPlugin(outDir), + timeEsbuildPlugin('Bit bundle'), + ], + esbuildOptions(options, _context) { + options.define['process.env.BIT_LOG'] = '"debug"'; + }, + }; + return build(opts); +} diff --git a/scopes/harmony/bit/core-aspects-exports.ts b/scopes/harmony/bit/core-aspects-exports.ts new file mode 100644 index 000000000000..c69451e29fd4 --- /dev/null +++ b/scopes/harmony/bit/core-aspects-exports.ts @@ -0,0 +1,109 @@ +// This file is auto generated by generate-core-aspects-exports.ts +export * as bit from '@teambit/bit'; +export * as config from '@teambit/config'; +export * as configMerger from '@teambit/config-merger'; +export * as aspectLoader from '@teambit/aspect-loader'; +export * as cli from '@teambit/cli'; +export * as devFiles from '@teambit/dev-files'; +export * as workspace from '@teambit/workspace'; +export * as workspaceConfigFiles from '@teambit/workspace-config-files'; +export * as install from '@teambit/install'; +export * as eslint from '@teambit/eslint'; +export * as prettier from '@teambit/prettier'; +export * as compiler from '@teambit/compiler'; +export * as linter from '@teambit/linter'; +export * as formatter from '@teambit/formatter'; +export * as component from '@teambit/component'; +export * as mdx from '@teambit/mdx'; +export * as readme from '@teambit/readme'; +export * as preview from '@teambit/preview'; +export * as componentSizer from '@teambit/component-sizer'; +export * as docs from '@teambit/docs'; +export * as yarn from '@teambit/yarn'; +export * as compositions from '@teambit/compositions'; +export * as globalConfig from '@teambit/global-config'; +export * as graphql from '@teambit/graphql'; +export * as pnpm from '@teambit/pnpm'; +export * as multiCompiler from '@teambit/multi-compiler'; +export * as ui from '@teambit/ui'; +export * as generator from '@teambit/generator'; +export * as envs from '@teambit/envs'; +export * as env from '@teambit/env'; +export * as graph from '@teambit/graph'; +export * as pubsub from '@teambit/pubsub'; +export * as dependencyResolver from '@teambit/dependency-resolver'; +export * as insights from '@teambit/insights'; +export * as isolator from '@teambit/isolator'; +export * as logger from '@teambit/logger'; +export * as pkg from '@teambit/pkg'; +export * as react from '@teambit/react'; +export * as worker from '@teambit/worker'; +export * as scope from '@teambit/scope'; +export * as tester from '@teambit/tester'; +export * as multiTester from '@teambit/multi-tester'; +export * as builder from '@teambit/builder'; +export * as variants from '@teambit/variants'; +export * as deprecation from '@teambit/deprecation'; +export * as express from '@teambit/express'; +export * as aspect from '@teambit/aspect'; +export * as webpack from '@teambit/webpack'; +export * as schema from '@teambit/schema'; +export * as reactRouter from '@teambit/react-router'; +export * as typescript from '@teambit/typescript'; +export * as panels from '@teambit/panels'; +export * as babel from '@teambit/babel'; +export * as node from '@teambit/node'; +export * as notifications from '@teambit/notifications'; +export * as bundler from '@teambit/bundler'; +export * as jest from '@teambit/jest'; +export * as cache from '@teambit/cache'; +export * as changelog from '@teambit/changelog'; +export * as code from '@teambit/code'; +export * as commandBar from '@teambit/command-bar'; +export * as sidebar from '@teambit/sidebar'; +export * as componentTree from '@teambit/component-tree'; +export * as export from '@teambit/export'; +export * as importer from '@teambit/importer'; +export * as harmonyUiApp from '@teambit/harmony-ui-app'; +export * as userAgent from '@teambit/user-agent'; +export * as application from '@teambit/application'; +export * as eject from '@teambit/eject'; +export * as lanes from '@teambit/lanes'; +export * as forking from '@teambit/forking'; +export * as renaming from '@teambit/renaming'; +export * as newComponentHelper from '@teambit/new-component-helper'; +export * as componentLog from '@teambit/component-log'; +export * as clearCache from '@teambit/clear-cache'; +export * as mocha from '@teambit/mocha'; +export * as diagnostic from '@teambit/diagnostic'; +export * as status from '@teambit/status'; +export * as community from '@teambit/community'; +export * as cloud from '@teambit/cloud'; +export * as snapping from '@teambit/snapping'; +export * as merging from '@teambit/merging'; +export * as issues from '@teambit/issues'; +export * as refactoring from '@teambit/refactoring'; +export * as componentCompare from '@teambit/component-compare'; +export * as lister from '@teambit/lister'; +export * as dependencies from '@teambit/dependencies'; +export * as remove from '@teambit/remove'; +export * as mergeLanes from '@teambit/merge-lanes'; +export * as checkout from '@teambit/checkout'; +export * as componentWriter from '@teambit/component-writer'; +export * as apiReference from '@teambit/api-reference'; +export * as apiServer from '@teambit/api-server'; +export * as tracker from '@teambit/tracker'; +export * as mover from '@teambit/mover'; +export * as watcher from '@teambit/watcher'; +export * as stash from '@teambit/stash'; +export * as git from '@teambit/git'; +export * as ipcEvents from '@teambit/ipc-events'; +export * as configStore from '@teambit/config-store'; +export * as versionHistory from '@teambit/version-history'; +export * as ci from '@teambit/ci'; +export * as cliMcpServer from '@teambit/cli-mcp-server'; +export * as vueAspect from '@teambit/vue-aspect'; +export * as hostInitializer from '@teambit/host-initializer'; +export * as doctor from '@teambit/doctor'; +export * as legacy from '@teambit/legacy'; +export * as harmony from '@teambit/harmony'; diff --git a/scopes/harmony/bit/core-aspects-ids.ts b/scopes/harmony/bit/core-aspects-ids.ts new file mode 100644 index 000000000000..dc03d357ca76 --- /dev/null +++ b/scopes/harmony/bit/core-aspects-ids.ts @@ -0,0 +1,109 @@ +// TODO: combine this with the manifests somehow +export const coreAspectsIds = [ + 'teambit.harmony/bit', + 'teambit.harmony/config', + 'teambit.harmony/config-merger', + 'teambit.harmony/aspect-loader', + 'teambit.harmony/cli', + 'teambit.component/dev-files', + 'teambit.workspace/workspace', + 'teambit.workspace/workspace-config-files', + 'teambit.bit/install', + 'teambit.defender/eslint', + 'teambit.defender/prettier', + 'teambit.compilation/compiler', + 'teambit.defender/linter', + 'teambit.defender/formatter', + 'teambit.component/component', + 'teambit.mdx/mdx', + 'teambit.mdx/readme', + 'teambit.preview/preview', + 'teambit.component/component-sizer', + 'teambit.docs/docs', + 'teambit.dependencies/yarn', + 'teambit.compositions/compositions', + 'teambit.harmony/global-config', + 'teambit.harmony/graphql', + 'teambit.dependencies/pnpm', + 'teambit.compilation/multi-compiler', + 'teambit.ui-foundation/ui', + 'teambit.generator/generator', + 'teambit.envs/envs', + 'teambit.envs/env', + 'teambit.component/graph', + 'teambit.harmony/pubsub', + 'teambit.dependencies/dependency-resolver', + 'teambit.explorer/insights', + 'teambit.component/isolator', + 'teambit.harmony/logger', + 'teambit.pkg/pkg', + 'teambit.react/react', + 'teambit.harmony/worker', + 'teambit.scope/scope', + 'teambit.defender/tester', + 'teambit.defender/multi-tester', + 'teambit.pipelines/builder', + 'teambit.workspace/variants', + 'teambit.component/deprecation', + 'teambit.harmony/express', + 'teambit.harmony/aspect', + 'teambit.webpack/webpack', + 'teambit.semantics/schema', + 'teambit.ui-foundation/react-router', + 'teambit.typescript/typescript', + 'teambit.ui-foundation/panels', + 'teambit.compilation/babel', + 'teambit.harmony/node', + 'teambit.ui-foundation/notifications', + 'teambit.compilation/bundler', + 'teambit.defender/jest', + 'teambit.harmony/cache', + 'teambit.component/changelog', + 'teambit.component/code', + 'teambit.explorer/command-bar', + 'teambit.ui-foundation/sidebar', + 'teambit.component/component-tree', + 'teambit.scope/export', + 'teambit.scope/importer', + 'teambit.ui-foundation/harmony-ui-app', + 'teambit.ui-foundation/user-agent', + 'teambit.harmony/application', + 'teambit.workspace/eject', + 'teambit.lanes/lanes', + 'teambit.component/forking', + 'teambit.component/renaming', + 'teambit.component/new-component-helper', + 'teambit.component/component-log', + 'teambit.bit/clear-cache', + 'teambit.defender/mocha', + 'teambit.harmony/diagnostic', + 'teambit.component/status', + 'teambit.community/community', + 'teambit.cloud/cloud', + 'teambit.component/snapping', + 'teambit.component/merging', + 'teambit.component/issues', + 'teambit.component/refactoring', + 'teambit.component/component-compare', + 'teambit.component/lister', + 'teambit.dependencies/dependencies', + 'teambit.component/remove', + 'teambit.lanes/merge-lanes', + 'teambit.component/checkout', + 'teambit.component/component-writer', + 'teambit.api-reference/api-reference', + 'teambit.harmony/api-server', + 'teambit.component/tracker', + 'teambit.component/mover', + 'teambit.workspace/watcher', + 'teambit.component/stash', + 'teambit.git/git', + 'teambit.harmony/ipc-events', + 'teambit.harmony/config-store', + 'teambit.scope/version-history', + 'teambit.ci/ci', + 'teambit.mcp/cli-mcp-server', + 'teambit.vue/vue-aspect', + 'teambit.harmony/host-initializer', + 'teambit.harmony/doctor', +]; diff --git a/scopes/harmony/bit/index.ts b/scopes/harmony/bit/index.ts index c115b228024d..5bdef57ba62c 100644 --- a/scopes/harmony/bit/index.ts +++ b/scopes/harmony/bit/index.ts @@ -1,7 +1,7 @@ export type { RuntimeManifest } from '@teambit/harmony'; export { Aspect, RuntimeDefinition } from '@teambit/harmony'; export { Hook, HookRegistry } from './hooks'; -export { manifestsMap, isCoreAspect, getAllCoreAspectsIds } from './manifests'; +export { getManifestsMap, isCoreAspect, getAllCoreAspectsIds } from './manifests'; export { registerCoreExtensions } from './bit.main.runtime'; export { BitAspect } from './bit.aspect'; export type { BitMain } from './bit.main.runtime'; diff --git a/scopes/harmony/bit/load-bit.ts b/scopes/harmony/bit/load-bit.ts index 6cce638ecbcd..ee2166a2bacd 100644 --- a/scopes/harmony/bit/load-bit.ts +++ b/scopes/harmony/bit/load-bit.ts @@ -22,7 +22,7 @@ import json from 'comment-json'; import userHome from 'user-home'; import type { CLIMain } from '@teambit/cli'; import { CLIAspect, MainRuntime } from '@teambit/cli'; -import { ConfigAspect, ConfigRuntime } from '@teambit/config'; +import { ConfigRuntime, getConfigAspect } from '@teambit/config'; import type { RuntimeDefinition, Extension, Aspect } from '@teambit/harmony'; import { Harmony } from '@teambit/harmony'; // TODO: expose this types from harmony (once we have a way to expose it only for node) @@ -47,7 +47,7 @@ import { logger } from '@teambit/legacy.logger'; import { ExternalActions } from '@teambit/legacy.scope-api'; import { readdir, readFile } from 'fs-extra'; import { resolve, join } from 'path'; -import { getAllCoreAspectsIds, isCoreAspect, manifestsMap } from './manifests'; +import { getAllCoreAspectsIds, isCoreAspect, getManifestsMap } from './manifests'; import { BitAspect } from './bit.aspect'; import { registerCoreExtensions } from './bit.main.runtime'; import type { BitConfig } from './bit.provider'; @@ -57,9 +57,13 @@ import type { GeneratorMain } from '@teambit/generator'; import { GeneratorAspect } from '@teambit/generator'; import { HostInitializerMain } from '@teambit/host-initializer'; +const manifestsMap = getManifestsMap(); + async function loadLegacyConfig(config: any) { - const harmony = await Harmony.load([ConfigAspect], ConfigRuntime.name, config.toObject()); - await harmony.run(async (aspect: Extension, runtime: RuntimeDefinition) => requireAspects(aspect, runtime)); + const aspectsToLoad = [getConfigAspect()]; + const harmony = await Harmony.load(aspectsToLoad, ConfigRuntime.name, config.toObject()); + // await harmony.run(async (aspect: Extension, runtime: RuntimeDefinition) => requireAspects(aspect, runtime)); + await harmony.run(); } async function getConfig(cwd = process.cwd()) { @@ -208,11 +212,11 @@ export async function requireAspects(aspect: Extension, runtime: RuntimeDefiniti } function getMainAspect() { - const mainAspectDir = getAspectDir(BitAspect.id); - let version: string | undefined; const packageName = getCoreAspectPackageName(BitAspect.id); - + let version: string | undefined; + let mainAspectDir = ''; try { + mainAspectDir = getAspectDir(BitAspect.id); // eslint-disable-next-line global-require const packageJson = require(`${mainAspectDir}/package.json`); version = packageJson.version; @@ -281,13 +285,15 @@ export async function loadBit(path = process.cwd(), additionalAspects?: Aspect[] const loadCLIOnly = shouldLoadInSafeMode(); if (isClearCacheCommand()) aspectsToLoad.push(ClearCacheAspect); if (!loadCLIOnly) { - aspectsToLoad.push(BitAspect); + // aspectsToLoad.push(BitAspect); + aspectsToLoad.push(...Object.values(manifestsMap)); } if (shouldRunAsDaemon()) { logger.isDaemon = true; } const harmony = await Harmony.load(aspectsToLoad, MainRuntime.name, configMap); - await harmony.run(async (aspect: Extension, runtime: RuntimeDefinition) => requireAspects(aspect, runtime)); + // await harmony.run(async (aspect: Extension, runtime: RuntimeDefinition) => requireAspects(aspect, runtime)); + await harmony.run(); if (loadCLIOnly) return harmony; const aspectLoader = harmony.get(AspectLoaderAspect.id); aspectLoader.setCoreAspects(Object.values(manifestsMap)); diff --git a/scopes/harmony/bit/manifests.ts b/scopes/harmony/bit/manifests.ts index 1e47a71ebf1d..4cb6e6a50ac2 100644 --- a/scopes/harmony/bit/manifests.ts +++ b/scopes/harmony/bit/manifests.ts @@ -1,111 +1,209 @@ -import { AspectAspect } from '@teambit/aspect'; -import { AspectLoaderAspect } from '@teambit/aspect-loader'; -import { BuilderAspect } from '@teambit/builder'; -import { BundlerAspect } from '@teambit/bundler'; -import { CacheAspect } from '@teambit/cache'; -import { CLIAspect } from '@teambit/cli'; -import { CompilerAspect } from '@teambit/compiler'; -import { ComponentAspect } from '@teambit/component'; -import { CompositionsAspect } from '@teambit/compositions'; -import { ConfigAspect } from '@teambit/config'; -import { DependencyResolverAspect } from '@teambit/dependency-resolver'; -import { DeprecationAspect } from '@teambit/deprecation'; -import { DocsAspect } from '@teambit/docs'; -import { EnvsAspect } from '@teambit/envs'; -import { EnvAspect } from '@teambit/env'; -import { ExpressAspect } from '@teambit/express'; -import { YarnAspect } from '@teambit/yarn'; -import { GeneratorAspect } from '@teambit/generator'; -import { HarmonyUiAppAspect } from '@teambit/harmony-ui-app'; -import { GraphAspect } from '@teambit/graph'; -import { GraphqlAspect } from '@teambit/graphql'; -import { InsightsAspect } from '@teambit/insights'; -import { IsolatorAspect } from '@teambit/isolator'; -import { JestAspect } from '@teambit/jest'; -import { LoggerAspect } from '@teambit/logger'; -import { NodeAspect } from '@teambit/node'; -import { NotificationsAspect } from '@teambit/notifications'; -import { PanelUiAspect } from '@teambit/panels'; -import { PkgAspect } from '@teambit/pkg'; -import { PnpmAspect } from '@teambit/pnpm'; -import { PreviewAspect } from '@teambit/preview'; -import { ComponentSizerAspect } from '@teambit/component-sizer'; -import { ReactAspect } from '@teambit/react'; -import { VueAspect } from '@teambit/vue-aspect'; -import { ReactRouterAspect } from '@teambit/react-router'; -import { SchemaAspect } from '@teambit/schema'; -import { PubsubAspect } from '@teambit/pubsub'; -import { ScopeAspect } from '@teambit/scope'; -// import { StencilAspect } from '@teambit/stencil'; -import { TesterAspect } from '@teambit/tester'; -import { MultiTesterAspect } from '@teambit/multi-tester'; -import { TypescriptAspect } from '@teambit/typescript'; -import { BabelAspect } from '@teambit/babel'; -import { UIAspect } from '@teambit/ui'; -import { VariantsAspect } from '@teambit/variants'; -import { WebpackAspect } from '@teambit/webpack'; -import { WorkspaceAspect } from '@teambit/workspace'; -import { WorkspaceConfigFilesAspect } from '@teambit/workspace-config-files'; -import { InstallAspect } from '@teambit/install'; -import { LinterAspect } from '@teambit/linter'; -import { FormatterAspect } from '@teambit/formatter'; -import { ChangelogAspect } from '@teambit/changelog'; -import { CodeAspect } from '@teambit/code'; -import { CommandBarAspect } from '@teambit/command-bar'; -import { SidebarAspect } from '@teambit/sidebar'; -import { ComponentTreeAspect } from '@teambit/component-tree'; -import { DevFilesAspect } from '@teambit/dev-files'; -import { ESLintAspect } from '@teambit/eslint'; -import { PrettierAspect } from '@teambit/prettier'; -import { WorkerAspect } from '@teambit/worker'; -import { GlobalConfigAspect } from '@teambit/global-config'; -import { MultiCompilerAspect } from '@teambit/multi-compiler'; -import { MDXAspect } from '@teambit/mdx'; -import { ReadmeAspect } from '@teambit/readme'; -import { ApplicationAspect } from '@teambit/application'; -import { ExportAspect } from '@teambit/export'; -import { ImporterAspect } from '@teambit/importer'; -import { EjectAspect } from '@teambit/eject'; -import { UserAgentAspect } from '@teambit/user-agent'; -import { LanesAspect } from '@teambit/lanes'; -import { ForkingAspect } from '@teambit/forking'; -import { RenamingAspect } from '@teambit/renaming'; -import { ComponentLogAspect } from '@teambit/component-log'; -import { ClearCacheAspect } from '@teambit/clear-cache'; -import { DiagnosticAspect } from '@teambit/diagnostic'; -import { NewComponentHelperAspect } from '@teambit/new-component-helper'; -import { MochaAspect } from '@teambit/mocha'; -import { CommunityAspect } from '@teambit/community'; -import { CloudAspect } from '@teambit/cloud'; -import { StatusAspect } from '@teambit/status'; -import { SnappingAspect } from '@teambit/snapping'; -import { MergingAspect } from '@teambit/merging'; -import { IssuesAspect } from '@teambit/issues'; -import { RefactoringAspect } from '@teambit/refactoring'; -import { ComponentCompareAspect } from '@teambit/component-compare'; -import { ListerAspect } from '@teambit/lister'; -import { DependenciesAspect } from '@teambit/dependencies'; -import { RemoveAspect } from '@teambit/remove'; -import { MergeLanesAspect } from '@teambit/merge-lanes'; -import { CheckoutAspect } from '@teambit/checkout'; -import { APIReferenceAspect } from '@teambit/api-reference'; -import { ApiServerAspect } from '@teambit/api-server'; -import { ComponentWriterAspect } from '@teambit/component-writer'; -import { TrackerAspect } from '@teambit/tracker'; -import { MoverAspect } from '@teambit/mover'; -import { WatcherAspect } from '@teambit/watcher'; -import { StashAspect } from '@teambit/stash'; -import { GitAspect } from '@teambit/git'; -import { IpcEventsAspect } from '@teambit/ipc-events'; -import { ConfigMergerAspect } from '@teambit/config-merger'; -import { VersionHistoryAspect } from '@teambit/version-history'; -import { HostInitializerAspect } from '@teambit/host-initializer'; -import { DoctorAspect } from '@teambit/doctor'; -import { ObjectsAspect } from '@teambit/objects'; +import { AspectAspect } from '@teambit/aspect/aspect.aspect'; +import { AspectLoaderAspect } from '@teambit/aspect-loader/aspect-loader.aspect'; +import { BuilderAspect } from '@teambit/builder/builder.aspect'; +import { BundlerAspect } from '@teambit/bundler/bundler.aspect'; +import { CacheAspect } from '@teambit/cache/cache.aspect'; +import { CLIAspect } from '@teambit/cli/cli.aspect'; +import { CompilerAspect } from '@teambit/compiler/compiler.aspect'; +import { ComponentAspect } from '@teambit/component/component.aspect'; +import { CompositionsAspect } from '@teambit/compositions/compositions.aspect'; +import { ConfigAspect } from '@teambit/config/config.aspect'; +import { DependencyResolverAspect } from '@teambit/dependency-resolver/dependency-resolver.aspect'; +import { DeprecationAspect } from '@teambit/deprecation/deprecation.aspect'; +import { DocsAspect } from '@teambit/docs/docs.aspect'; +import { EnvsAspect } from '@teambit/envs/environments.aspect'; +import { EnvAspect } from '@teambit/env/env.aspect'; +import { ExpressAspect } from '@teambit/express/express.aspect'; +import { YarnAspect } from '@teambit/yarn/yarn.aspect'; +import { GeneratorAspect } from '@teambit/generator/generator.aspect'; +import { HarmonyUiAppAspect } from '@teambit/harmony-ui-app/harmony-ui-app.aspect'; +import { GraphAspect } from '@teambit/graph/graph.aspect'; +import { GraphqlAspect } from '@teambit/graphql/graphql.aspect'; +import { InsightsAspect } from '@teambit/insights/insights.aspect'; +import { IsolatorAspect } from '@teambit/isolator/isolator.aspect'; +import { JestAspect } from '@teambit/jest/jest.aspect'; +import { LoggerAspect } from '@teambit/logger/logger.aspect'; +import { NodeAspect } from '@teambit/node/node.aspect'; +import { NotificationsAspect } from '@teambit/notifications/notifications.aspect'; +import { PanelUiAspect } from '@teambit/panels/panel-ui.aspect'; +import { PkgAspect } from '@teambit/pkg/pkg.aspect'; +import { PnpmAspect } from '@teambit/pnpm/pnpm.aspect'; +import { PreviewAspect } from '@teambit/preview/preview.aspect'; +import { ComponentSizerAspect } from '@teambit/component-sizer/component-sizer.aspect'; +import { ReactAspect } from '@teambit/react/react.aspect'; +import { VueAspect } from '@teambit/vue-aspect/vue.aspect'; +import { ReactRouterAspect } from '@teambit/react-router/react-router.aspect'; +import { SchemaAspect } from '@teambit/schema/schema.aspect'; +import { PubsubAspect } from '@teambit/pubsub/pubsub.aspect'; +import { ScopeAspect } from '@teambit/scope/scope.aspect'; +// import { StencilAspect } from '@teambit/stencil/stencil.aspect'; +import { TesterAspect } from '@teambit/tester/tester.aspect'; +import { MultiTesterAspect } from '@teambit/multi-tester/multi-tester.aspect'; +import { TypescriptAspect } from '@teambit/typescript/typescript.aspect'; +import { BabelAspect } from '@teambit/babel/babel.aspect'; +import { UIAspect } from '@teambit/ui/ui.aspect'; +import { VariantsAspect } from '@teambit/variants/variants.aspect'; +import { WebpackAspect } from '@teambit/webpack/webpack.aspect'; +import { WorkspaceAspect } from '@teambit/workspace/workspace.aspect'; +import { WorkspaceConfigFilesAspect } from '@teambit/workspace-config-files/workspace-config-files.aspect'; +import { InstallAspect } from '@teambit/install/install.aspect'; +import { LinterAspect } from '@teambit/linter/linter.aspect'; +import { FormatterAspect } from '@teambit/formatter/formatter.aspect'; +import { ChangelogAspect } from '@teambit/changelog/changelog.aspect'; +import { CodeAspect } from '@teambit/code/code.aspect'; +import { CommandBarAspect } from '@teambit/command-bar/command-bar.aspect'; +import { SidebarAspect } from '@teambit/sidebar/sidebar.aspect'; +import { ComponentTreeAspect } from '@teambit/component-tree/component-tree.aspect'; +import { DevFilesAspect } from '@teambit/dev-files/dev-files.aspect'; +import { ESLintAspect } from '@teambit/eslint/eslint.aspect'; +import { PrettierAspect } from '@teambit/prettier/prettier.aspect'; +import { WorkerAspect } from '@teambit/worker/worker.aspect'; +import { GlobalConfigAspect } from '@teambit/global-config/global-config.aspect'; +import { MultiCompilerAspect } from '@teambit/multi-compiler/multi-compiler.aspect'; +import { MDXAspect } from '@teambit/mdx/mdx.aspect'; +import { ReadmeAspect } from '@teambit/readme/readme.aspect'; +import { ApplicationAspect } from '@teambit/application/application.aspect'; +import { ExportAspect } from '@teambit/export/export.aspect'; +import { ImporterAspect } from '@teambit/importer/importer.aspect'; +import { EjectAspect } from '@teambit/eject/eject.aspect'; +import { UserAgentAspect } from '@teambit/user-agent/user-agent.aspect'; +import { LanesAspect } from '@teambit/lanes/lanes.aspect'; +import { ForkingAspect } from '@teambit/forking/forking.aspect'; +import { RenamingAspect } from '@teambit/renaming/renaming.aspect'; +import { ComponentLogAspect } from '@teambit/component-log/component-log.aspect'; +import { ClearCacheAspect } from '@teambit/clear-cache/clear-cache.aspect'; +import { DiagnosticAspect } from '@teambit/diagnostic/diagnostic.aspect'; +import { NewComponentHelperAspect } from '@teambit/new-component-helper/new-component-helper.aspect'; +import { MochaAspect } from '@teambit/mocha/mocha.aspect'; +import { CommunityAspect } from '@teambit/community/community.aspect'; +import { CloudAspect } from '@teambit/cloud/cloud.aspect'; +import { StatusAspect } from '@teambit/status/status.aspect'; +import { SnappingAspect } from '@teambit/snapping/snapping.aspect'; +import { MergingAspect } from '@teambit/merging/merging.aspect'; +import { IssuesAspect } from '@teambit/issues/issues.aspect'; +import { RefactoringAspect } from '@teambit/refactoring/refactoring.aspect'; +import { ComponentCompareAspect } from '@teambit/component-compare/component-compare.aspect'; +import { ListerAspect } from '@teambit/lister/lister.aspect'; +import { DependenciesAspect } from '@teambit/dependencies/dependencies.aspect'; +import { RemoveAspect } from '@teambit/remove/remove.aspect'; +import { MergeLanesAspect } from '@teambit/merge-lanes/merge-lanes.aspect'; +import { CheckoutAspect } from '@teambit/checkout/checkout.aspect'; +import { APIReferenceAspect } from '@teambit/api-reference/api-reference.aspect'; +import { ApiServerAspect } from '@teambit/api-server/api-server.aspect'; +import { ComponentWriterAspect } from '@teambit/component-writer/component-writer.aspect'; +import { TrackerAspect } from '@teambit/tracker/tracker.aspect'; +import { MoverAspect } from '@teambit/mover/mover.aspect'; +import { WatcherAspect } from '@teambit/watcher/watcher.aspect'; +import { StashAspect } from '@teambit/stash/stash.aspect'; +import { GitAspect } from '@teambit/git/git.aspect'; +import { IpcEventsAspect } from '@teambit/ipc-events/ipc-events.aspect'; +import { ConfigMergerAspect } from '@teambit/config-merger/config-merger.aspect'; +import { VersionHistoryAspect } from '@teambit/version-history/version-history.aspect'; +import { HostInitializerAspect } from '@teambit/host-initializer/host-initializer.aspect'; +import { DoctorAspect } from '@teambit/doctor/doctor.aspect'; import { BitAspect } from './bit.aspect'; -import { ConfigStoreAspect } from '@teambit/config-store'; -import { CliMcpServerAspect } from '@teambit/cli-mcp-server'; -import { CiAspect } from '@teambit/ci'; +import { ConfigStoreAspect } from '@teambit/config-store/config-store.aspect'; +import { CliMcpServerAspect } from '@teambit/cli-mcp-server/cli-mcp-server.aspect'; +import { CiAspect } from '@teambit/ci/ci.aspect'; + +import { AspectMain } from '@teambit/aspect/aspect.main.runtime'; +import { AspectLoaderMain } from '@teambit/aspect-loader/aspect-loader.main.runtime'; +import { BuilderMain } from '@teambit/builder/builder.main.runtime'; +import { BundlerMain } from '@teambit/bundler/bundler.main.runtime'; +import { CacheMain } from '@teambit/cache/cache.main.runtime'; +import { CLIMain } from '@teambit/cli/cli.main.runtime'; +import { CompilerMain } from '@teambit/compiler/compiler.main.runtime'; +import { ComponentMain } from '@teambit/component/component.main.runtime'; +import { CompositionsMain } from '@teambit/compositions/compositions.main.runtime'; +// import { ConfigMain } from '@teambit/config/config.main.runtime'; +import { DependencyResolverMain } from '@teambit/dependency-resolver/dependency-resolver.main.runtime'; +import { DeprecationMain } from '@teambit/deprecation/deprecation.main.runtime'; +import { DocsMain } from '@teambit/docs/docs.main.runtime'; +import { EnvsMain } from '@teambit/envs/environments.main.runtime'; +import { EnvMain } from '@teambit/env/env.main.runtime'; +import { ExpressMain } from '@teambit/express/express.main.runtime'; +import { YarnMain } from '@teambit/yarn/yarn.main.runtime'; +import { GeneratorMain } from '@teambit/generator/generator.main.runtime'; +import { HarmonyUiAppMain } from '@teambit/harmony-ui-app/harmony-ui-app.main.runtime'; +import { GraphMain } from '@teambit/graph/graph.main.runtime'; +import { GraphqlMain } from '@teambit/graphql/graphql.main.runtime'; +import { InsightsMain } from '@teambit/insights/insights.main.runtime'; +import { IsolatorMain } from '@teambit/isolator/isolator.main.runtime'; +import { JestMain } from '@teambit/jest/jest.main.runtime'; +import { LoggerMain } from '@teambit/logger/logger.main.runtime'; +import { NodeMain } from '@teambit/node/node.main.runtime'; +import { PanelUIMain } from '@teambit/panels/panel-ui.main.runtime'; +import { PkgMain } from '@teambit/pkg/pkg.main.runtime'; +import { PnpmMain } from '@teambit/pnpm/pnpm.main.runtime'; +import { PreviewMain } from '@teambit/preview/preview.main.runtime'; +import { ComponentSizerMain } from '@teambit/component-sizer/component-sizer.main.runtime'; +import { ReactMain } from '@teambit/react/react.main.runtime'; +import { SchemaMain } from '@teambit/schema/schema.main.runtime'; +import { PubsubMain } from '@teambit/pubsub/pubsub.main.runtime'; +import { ScopeMain } from '@teambit/scope/scope.main.runtime'; +// import { StencilMain } from '@teambit/stencil/stencil.main.runtime'; +import { TesterMain } from '@teambit/tester/tester.main.runtime'; +import { MultiTesterMain } from '@teambit/multi-tester/multi-tester.main.runtime'; +import { TypescriptMain } from '@teambit/typescript/typescript.main.runtime'; +import { BabelMain } from '@teambit/babel/babel.main.runtime'; +import { UiMain } from '@teambit/ui/ui.main.runtime'; +import { VariantsMain } from '@teambit/variants/variants.main.runtime'; +import { WebpackMain } from '@teambit/webpack/webpack.main.runtime'; +import { WorkspaceMain } from '@teambit/workspace/workspace.main.runtime'; +import { WorkspaceConfigFilesMain } from '@teambit/workspace-config-files/workspace-config-files.main.runtime'; +import { InstallMain } from '@teambit/install/install.main.runtime'; +import { LinterMain } from '@teambit/linter/linter.main.runtime'; +import { FormatterMain } from '@teambit/formatter/formatter.main.runtime'; +import { DevFilesMain } from '@teambit/dev-files/dev-files.main.runtime'; +import { ESLintMain } from '@teambit/eslint/eslint.main.runtime'; +import { PrettierMain } from '@teambit/prettier/prettier.main.runtime'; +import { WorkerMain } from '@teambit/worker/worker.main.runtime'; +import { GlobalConfigMain } from '@teambit/global-config/global-config.main.runtime'; +import { MultiCompilerMain } from '@teambit/multi-compiler/multi-compiler.main.runtime'; +import { MDXMain } from '@teambit/mdx/mdx.main.runtime'; +import { ReadmeMain } from '@teambit/readme/readme.main.runtime'; +import { ApplicationMain } from '@teambit/application/application.main.runtime'; +import { ExportMain } from '@teambit/export/export.main.runtime'; +import { ImporterMain } from '@teambit/importer/importer.main.runtime'; +import { EjectMain } from '@teambit/eject/eject.main.runtime'; +import { LanesMain } from '@teambit/lanes/lanes.main.runtime'; +import { ForkingMain } from '@teambit/forking/forking.main.runtime'; +import { RenamingMain } from '@teambit/renaming/renaming.main.runtime'; +import { ComponentLogMain } from '@teambit/component-log/component-log.main.runtime'; +import { ClearCacheMain } from '@teambit/clear-cache/clear-cache.main.runtime'; +import { DiagnosticMain } from '@teambit/diagnostic/diagnostic.main.runtime'; +import { NewComponentHelperMain } from '@teambit/new-component-helper/new-component-helper.main.runtime'; +import { MochaMain } from '@teambit/mocha/mocha.main.runtime'; +import { CommunityMain } from '@teambit/community/community.main.runtime'; +import { CloudMain } from '@teambit/cloud/cloud.main.runtime'; +import { StatusMain } from '@teambit/status/status.main.runtime'; +import { SnappingMain } from '@teambit/snapping/snapping.main.runtime'; +import { MergingMain } from '@teambit/merging/merging.main.runtime'; +import { IssuesMain } from '@teambit/issues/issues.main.runtime'; +import { RefactoringMain } from '@teambit/refactoring/refactoring.main.runtime'; +import { ComponentCompareMain } from '@teambit/component-compare/component-compare.main.runtime'; +import { ListerMain } from '@teambit/lister/lister.main.runtime'; +import { DependenciesMain } from '@teambit/dependencies/dependencies.main.runtime'; +import { RemoveMain } from '@teambit/remove/remove.main.runtime'; +import { MergeLanesMain } from '@teambit/merge-lanes/merge-lanes.main.runtime'; +import { CheckoutMain } from '@teambit/checkout/checkout.main.runtime'; +import { ApiServerMain } from '@teambit/api-server/api-server.main.runtime'; +import { ComponentWriterMain } from '@teambit/component-writer/component-writer.main.runtime'; +import { TrackerMain } from '@teambit/tracker/tracker.main.runtime'; +import { MoverMain } from '@teambit/mover/mover.main.runtime'; +import { WatcherMain } from '@teambit/watcher/watcher.main.runtime'; +import { StashMain } from '@teambit/stash/stash.main.runtime'; +import { GitMain } from '@teambit/git/git.main.runtime'; +import { IpcEventsMain } from '@teambit/ipc-events/ipc-events.main.runtime'; +import { ConfigMergerMain } from '@teambit/config-merger/config-merger.main.runtime'; +import { VersionHistoryMain } from '@teambit/version-history/version-history.main.runtime'; +import { HostInitializerMain } from '@teambit/host-initializer/host-initializer.main.runtime'; +import { DoctorMain } from '@teambit/doctor/doctor.main.runtime'; +import { ConfigStoreMain } from '@teambit/config-store/config-store.main.runtime'; +import { CliMcpServerMain } from '@teambit/cli-mcp-server/cli-mcp-server.main.runtime'; +import { CiMain } from '@teambit/ci/ci.main.runtime'; +import { VueMain } from '@teambit/vue-aspect/vue.main.runtime'; +// import { ApplyMain } from '@teambit/apply/apply.main.runtime'; /** * this is the place to register core aspects. @@ -113,122 +211,225 @@ import { CiAspect } from '@teambit/ci'; * teambit.harmony/testing/load-aspect component, which should not depend on this component. * (it's done automatically by Circle during tag workflow) */ -export const manifestsMap = { - [AspectLoaderAspect.id]: AspectLoaderAspect, - [CLIAspect.id]: CLIAspect, - [DevFilesAspect.id]: DevFilesAspect, - [WorkspaceAspect.id]: WorkspaceAspect, - [WorkspaceConfigFilesAspect.id]: WorkspaceConfigFilesAspect, - [InstallAspect.id]: InstallAspect, - [ESLintAspect.id]: ESLintAspect, - [PrettierAspect.id]: PrettierAspect, - [CompilerAspect.id]: CompilerAspect, - [LinterAspect.id]: LinterAspect, - [FormatterAspect.id]: FormatterAspect, - [ComponentAspect.id]: ComponentAspect, - [MDXAspect.id]: MDXAspect, - [ReadmeAspect.id]: ReadmeAspect, - [PreviewAspect.id]: PreviewAspect, - [ComponentSizerAspect.id]: ComponentSizerAspect, - [DocsAspect.id]: DocsAspect, - [YarnAspect.id]: YarnAspect, - [CompositionsAspect.id]: CompositionsAspect, - [GlobalConfigAspect.id]: GlobalConfigAspect, - [GraphqlAspect.id]: GraphqlAspect, - [PnpmAspect.id]: PnpmAspect, - [MultiCompilerAspect.id]: MultiCompilerAspect, - [UIAspect.id]: UIAspect, - [GeneratorAspect.id]: GeneratorAspect, - [EnvsAspect.id]: EnvsAspect, - [EnvAspect.id]: EnvAspect, - [GraphAspect.id]: GraphAspect, - [PubsubAspect.id]: PubsubAspect, - [DependencyResolverAspect.id]: DependencyResolverAspect, - [InsightsAspect.id]: InsightsAspect, - [IsolatorAspect.id]: IsolatorAspect, - [LoggerAspect.id]: LoggerAspect, - [PkgAspect.id]: PkgAspect, - [ReactAspect.id]: ReactAspect, - [VueAspect.id]: VueAspect, - [WorkerAspect.id]: WorkerAspect, - // [StencilAspect.id]: StencilAspect, - [ScopeAspect.id]: ScopeAspect, - [TesterAspect.id]: TesterAspect, - [MultiTesterAspect.id]: MultiTesterAspect, - [BuilderAspect.id]: BuilderAspect, - [VariantsAspect.id]: VariantsAspect, - [DeprecationAspect.id]: DeprecationAspect, - [ExpressAspect.id]: ExpressAspect, - [AspectAspect.id]: AspectAspect, - [WebpackAspect.id]: WebpackAspect, - [SchemaAspect.id]: SchemaAspect, - [ReactRouterAspect.id]: ReactRouterAspect, - [TypescriptAspect.id]: TypescriptAspect, - [PanelUiAspect.id]: PanelUiAspect, - [BabelAspect.id]: BabelAspect, - [NodeAspect.id]: NodeAspect, - [NotificationsAspect.id]: NotificationsAspect, - [BundlerAspect.id]: BundlerAspect, - [JestAspect.id]: JestAspect, - [CacheAspect.id]: CacheAspect, - [ChangelogAspect.id]: ChangelogAspect, - [CodeAspect.id]: CodeAspect, - [CommandBarAspect.id]: CommandBarAspect, - [SidebarAspect.id]: SidebarAspect, - [ComponentTreeAspect.id]: ComponentTreeAspect, - [ExportAspect.id]: ExportAspect, - [ImporterAspect.id]: ImporterAspect, - [HarmonyUiAppAspect.id]: HarmonyUiAppAspect, - [UserAgentAspect.id]: UserAgentAspect, - [ApplicationAspect.id]: ApplicationAspect, - [EjectAspect.id]: EjectAspect, - [LanesAspect.id]: LanesAspect, - [ForkingAspect.id]: ForkingAspect, - [RenamingAspect.id]: RenamingAspect, - [NewComponentHelperAspect.id]: NewComponentHelperAspect, - [ComponentLogAspect.id]: ComponentLogAspect, - [ClearCacheAspect.id]: ClearCacheAspect, - [MochaAspect.id]: MochaAspect, - [DiagnosticAspect.id]: DiagnosticAspect, - [StatusAspect.id]: StatusAspect, - [CommunityAspect.id]: CommunityAspect, - [CloudAspect.id]: CloudAspect, - [SnappingAspect.id]: SnappingAspect, - [MergingAspect.id]: MergingAspect, - [IssuesAspect.id]: IssuesAspect, - [RefactoringAspect.id]: RefactoringAspect, - [ComponentCompareAspect.id]: ComponentCompareAspect, - [ListerAspect.id]: ListerAspect, - [DependenciesAspect.id]: DependenciesAspect, - [RemoveAspect.id]: RemoveAspect, - [MergeLanesAspect.id]: MergeLanesAspect, - [CheckoutAspect.id]: CheckoutAspect, - [ComponentWriterAspect.id]: ComponentWriterAspect, - [APIReferenceAspect.id]: APIReferenceAspect, - [ApiServerAspect.id]: ApiServerAspect, - [TrackerAspect.id]: TrackerAspect, - [MoverAspect.id]: MoverAspect, - [WatcherAspect.id]: WatcherAspect, - [StashAspect.id]: StashAspect, - [GitAspect.id]: GitAspect, - [IpcEventsAspect.id]: IpcEventsAspect, - [ConfigMergerAspect.id]: ConfigMergerAspect, - [VersionHistoryAspect.id]: VersionHistoryAspect, - [HostInitializerAspect.id]: HostInitializerAspect, - [DoctorAspect.id]: DoctorAspect, - [ObjectsAspect.id]: ObjectsAspect, - [ConfigStoreAspect.id]: ConfigStoreAspect, - [CliMcpServerAspect.id]: CliMcpServerAspect, - [CiAspect.id]: CiAspect, +export function getManifestsMap() { + return { + [AspectLoaderAspect.id]: AspectLoaderAspect, + [CLIAspect.id]: CLIAspect, + [DevFilesAspect.id]: DevFilesAspect, + [WorkspaceAspect.id]: WorkspaceAspect, + [WorkspaceConfigFilesAspect.id]: WorkspaceConfigFilesAspect, + [InstallAspect.id]: InstallAspect, + [ESLintAspect.id]: ESLintAspect, + [PrettierAspect.id]: PrettierAspect, + [CompilerAspect.id]: CompilerAspect, + [LinterAspect.id]: LinterAspect, + [FormatterAspect.id]: FormatterAspect, + [ComponentAspect.id]: ComponentAspect, + [MDXAspect.id]: MDXAspect, + [ReadmeAspect.id]: ReadmeAspect, + [PreviewAspect.id]: PreviewAspect, + [ComponentSizerAspect.id]: ComponentSizerAspect, + [DocsAspect.id]: DocsAspect, + [YarnAspect.id]: YarnAspect, + [CompositionsAspect.id]: CompositionsAspect, + [GlobalConfigAspect.id]: GlobalConfigAspect, + [GraphqlAspect.id]: GraphqlAspect, + [PnpmAspect.id]: PnpmAspect, + [MultiCompilerAspect.id]: MultiCompilerAspect, + [UIAspect.id]: UIAspect, + [GeneratorAspect.id]: GeneratorAspect, + [EnvsAspect.id]: EnvsAspect, + [EnvAspect.id]: EnvAspect, + [GraphAspect.id]: GraphAspect, + [PubsubAspect.id]: PubsubAspect, + [DependencyResolverAspect.id]: DependencyResolverAspect, + [InsightsAspect.id]: InsightsAspect, + [IsolatorAspect.id]: IsolatorAspect, + [LoggerAspect.id]: LoggerAspect, + [PkgAspect.id]: PkgAspect, + [ReactAspect.id]: ReactAspect, + [VueAspect.id]: VueAspect, + [WorkerAspect.id]: WorkerAspect, + // [StencilAspect.id]: StencilAspect, + [ScopeAspect.id]: ScopeAspect, + [TesterAspect.id]: TesterAspect, + [MultiTesterAspect.id]: MultiTesterAspect, + [BuilderAspect.id]: BuilderAspect, + [VariantsAspect.id]: VariantsAspect, + [DeprecationAspect.id]: DeprecationAspect, + [ExpressAspect.id]: ExpressAspect, + [AspectAspect.id]: AspectAspect, + [WebpackAspect.id]: WebpackAspect, + [SchemaAspect.id]: SchemaAspect, + [ReactRouterAspect.id]: ReactRouterAspect, + [TypescriptAspect.id]: TypescriptAspect, + [PanelUiAspect.id]: PanelUiAspect, + [BabelAspect.id]: BabelAspect, + [NodeAspect.id]: NodeAspect, + [NotificationsAspect.id]: NotificationsAspect, + [BundlerAspect.id]: BundlerAspect, + [JestAspect.id]: JestAspect, + [CacheAspect.id]: CacheAspect, + [ChangelogAspect.id]: ChangelogAspect, + [CodeAspect.id]: CodeAspect, + [CommandBarAspect.id]: CommandBarAspect, + [SidebarAspect.id]: SidebarAspect, + [ComponentTreeAspect.id]: ComponentTreeAspect, + [ExportAspect.id]: ExportAspect, + [ImporterAspect.id]: ImporterAspect, + [HarmonyUiAppAspect.id]: HarmonyUiAppAspect, + [UserAgentAspect.id]: UserAgentAspect, + [ApplicationAspect.id]: ApplicationAspect, + [EjectAspect.id]: EjectAspect, + [LanesAspect.id]: LanesAspect, + [ForkingAspect.id]: ForkingAspect, + [RenamingAspect.id]: RenamingAspect, + [NewComponentHelperAspect.id]: NewComponentHelperAspect, + [ComponentLogAspect.id]: ComponentLogAspect, + [ClearCacheAspect.id]: ClearCacheAspect, + [MochaAspect.id]: MochaAspect, + [DiagnosticAspect.id]: DiagnosticAspect, + [StatusAspect.id]: StatusAspect, + [CommunityAspect.id]: CommunityAspect, + [CloudAspect.id]: CloudAspect, + [SnappingAspect.id]: SnappingAspect, + [MergingAspect.id]: MergingAspect, + [IssuesAspect.id]: IssuesAspect, + [RefactoringAspect.id]: RefactoringAspect, + [ComponentCompareAspect.id]: ComponentCompareAspect, + [ListerAspect.id]: ListerAspect, + [DependenciesAspect.id]: DependenciesAspect, + [RemoveAspect.id]: RemoveAspect, + [MergeLanesAspect.id]: MergeLanesAspect, + [CheckoutAspect.id]: CheckoutAspect, + [ComponentWriterAspect.id]: ComponentWriterAspect, + [APIReferenceAspect.id]: APIReferenceAspect, + [ApiServerAspect.id]: ApiServerAspect, + [TrackerAspect.id]: TrackerAspect, + [MoverAspect.id]: MoverAspect, + [WatcherAspect.id]: WatcherAspect, + [StashAspect.id]: StashAspect, + [GitAspect.id]: GitAspect, + [IpcEventsAspect.id]: IpcEventsAspect, + [ConfigMergerAspect.id]: ConfigMergerAspect, + [VersionHistoryAspect.id]: VersionHistoryAspect, + [HostInitializerAspect.id]: HostInitializerAspect, + [DoctorAspect.id]: DoctorAspect, + [ConfigStoreAspect.id]: ConfigStoreAspect, + [CliMcpServerAspect.id]: CliMcpServerAspect, + [CiAspect.id]: CiAspect, + }; +} + +export const runtimesMap = { + [AspectLoaderAspect.id]: AspectLoaderMain, + [CLIAspect.id]: CLIMain, + [DevFilesAspect.id]: DevFilesMain, + [WorkspaceAspect.id]: WorkspaceMain, + [WorkspaceConfigFilesAspect.id]: WorkspaceConfigFilesMain, + [InstallAspect.id]: InstallMain, + [ESLintAspect.id]: ESLintMain, + [PrettierAspect.id]: PrettierMain, + [CompilerAspect.id]: CompilerMain, + [LinterAspect.id]: LinterMain, + [FormatterAspect.id]: FormatterMain, + [ComponentAspect.id]: ComponentMain, + [MDXAspect.id]: MDXMain, + [ReadmeAspect.id]: ReadmeMain, + [PreviewAspect.id]: PreviewMain, + [ComponentSizerAspect.id]: ComponentSizerMain, + [DocsAspect.id]: DocsMain, + [YarnAspect.id]: YarnMain, + [CompositionsAspect.id]: CompositionsMain, + [GlobalConfigAspect.id]: GlobalConfigMain, + [GraphqlAspect.id]: GraphqlMain, + [PnpmAspect.id]: PnpmMain, + [MultiCompilerAspect.id]: MultiCompilerMain, + [UIAspect.id]: UiMain, + [GeneratorAspect.id]: GeneratorMain, + [EnvsAspect.id]: EnvsMain, + [EnvAspect.id]: EnvMain, + [GraphAspect.id]: GraphMain, + [PubsubAspect.id]: PubsubMain, + [DependencyResolverAspect.id]: DependencyResolverMain, + [InsightsAspect.id]: InsightsMain, + [IsolatorAspect.id]: IsolatorMain, + [LoggerAspect.id]: LoggerMain, + [PkgAspect.id]: PkgMain, + [ReactAspect.id]: ReactMain, + [WorkerAspect.id]: WorkerMain, + // [StencilAspect.id]: StencilMain, + [ScopeAspect.id]: ScopeMain, + [TesterAspect.id]: TesterMain, + [MultiTesterAspect.id]: MultiTesterMain, + [BuilderAspect.id]: BuilderMain, + [VariantsAspect.id]: VariantsMain, + [DeprecationAspect.id]: DeprecationMain, + [ExpressAspect.id]: ExpressMain, + [AspectAspect.id]: AspectMain, + [WebpackAspect.id]: WebpackMain, + [SchemaAspect.id]: SchemaMain, + [TypescriptAspect.id]: TypescriptMain, + [PanelUiAspect.id]: PanelUIMain, + [BabelAspect.id]: BabelMain, + [NodeAspect.id]: NodeMain, + [BundlerAspect.id]: BundlerMain, + [JestAspect.id]: JestMain, + [CacheAspect.id]: CacheMain, + [ExportAspect.id]: ExportMain, + [ImporterAspect.id]: ImporterMain, + [HarmonyUiAppAspect.id]: HarmonyUiAppMain, + [ApplicationAspect.id]: ApplicationMain, + [EjectAspect.id]: EjectMain, + // [HtmlAspect.id]: HtmlMain, + [LanesAspect.id]: LanesMain, + [ForkingAspect.id]: ForkingMain, + [RenamingAspect.id]: RenamingMain, + [NewComponentHelperAspect.id]: NewComponentHelperMain, + [ComponentLogAspect.id]: ComponentLogMain, + [ClearCacheAspect.id]: ClearCacheMain, + [MochaAspect.id]: MochaMain, + [DiagnosticAspect.id]: DiagnosticMain, + [StatusAspect.id]: StatusMain, + [CommunityAspect.id]: CommunityMain, + [CloudAspect.id]: CloudMain, + [SnappingAspect.id]: SnappingMain, + [MergingAspect.id]: MergingMain, + [IssuesAspect.id]: IssuesMain, + [RefactoringAspect.id]: RefactoringMain, + [ComponentCompareAspect.id]: ComponentCompareMain, + [ListerAspect.id]: ListerMain, + [DependenciesAspect.id]: DependenciesMain, + [RemoveAspect.id]: RemoveMain, + [MergeLanesAspect.id]: MergeLanesMain, + [CheckoutAspect.id]: CheckoutMain, + [ComponentWriterAspect.id]: ComponentWriterMain, + [ApiServerAspect.id]: ApiServerMain, + [TrackerAspect.id]: TrackerMain, + [MoverAspect.id]: MoverMain, + [WatcherAspect.id]: WatcherMain, + [StashAspect.id]: StashMain, + [GitAspect.id]: GitMain, + [IpcEventsAspect.id]: IpcEventsMain, + [ConfigMergerAspect.id]: ConfigMergerMain, + [VersionHistoryAspect.id]: VersionHistoryMain, + [HostInitializerAspect.id]: HostInitializerMain, + [DoctorAspect.id]: DoctorMain, + [ConfigStoreAspect.id]: ConfigStoreMain, + [CliMcpServerAspect.id]: CliMcpServerMain, + [CiAspect.id]: CiMain, + [VueAspect.id]: VueMain, }; export function isCoreAspect(id: string) { + const manifestsMap = getManifestsMap(); const _reserved = [BitAspect.id, ConfigAspect.id]; if (_reserved.includes(id)) return true; return !!manifestsMap[id]; } export function getAllCoreAspectsIds(): string[] { + const manifestsMap = getManifestsMap(); const _reserved = [BitAspect.id, ConfigAspect.id]; return [...Object.keys(manifestsMap), ..._reserved]; } diff --git a/scopes/harmony/cli/cli-parser.ts b/scopes/harmony/cli/cli-parser.ts index 44ce3bc69f49..a9a42f97faab 100644 --- a/scopes/harmony/cli/cli-parser.ts +++ b/scopes/harmony/cli/cli-parser.ts @@ -1,5 +1,5 @@ import didYouMean from 'didyoumean'; -import yargs from 'yargs'; +// import yargs from 'yargs'; import type { Command } from './command'; import type { GroupsType } from './command-groups'; import { compact } from 'lodash'; @@ -15,6 +15,10 @@ import type { OnCommandStartSlot } from './cli.main.runtime'; import type { CommandRunner } from './command-runner'; import { YargsExitWorkaround } from './exceptions/yargs-exit-workaround'; +// Using require instead of import because of this issue: +// https://github.com/evanw/esbuild/issues/1492 +const yargs = require('yargs'); + export class CLIParser { public parser = yargs; private yargsCommands: YargsAdapter[] = []; diff --git a/scopes/harmony/config/config.main.runtime.ts b/scopes/harmony/config/config.main.runtime.ts index 3fe0623c81ad..7c4fc96b2e46 100644 --- a/scopes/harmony/config/config.main.runtime.ts +++ b/scopes/harmony/config/config.main.runtime.ts @@ -127,9 +127,13 @@ export class ConfigMain { return configMain; } } - ConfigAspect.addRuntime(ConfigMain); +// Required for esbuild to work properly +export function getConfigAspect() { + return ConfigAspect; +} + async function loadWorkspaceConfigIfExist(cwd = process.cwd()): Promise { const consumerInfo = await getWorkspaceInfo(cwd); const configDirPath = consumerInfo?.path || cwd; diff --git a/scopes/harmony/config/index.ts b/scopes/harmony/config/index.ts index efb70ac6506a..85f2b1977790 100644 --- a/scopes/harmony/config/index.ts +++ b/scopes/harmony/config/index.ts @@ -1,4 +1,4 @@ -export { ConfigMain } from './config.main.runtime'; +export { ConfigMain, getConfigAspect } from './config.main.runtime'; export { ConfigAspect, ConfigRuntime } from './config.aspect'; export type { ComponentScopeDirMap, WorkspaceExtensionProps, WorkspaceConfigFileProps } from './workspace-config'; export { getWorkspaceConfigTemplateParsed, stringifyWorkspaceConfig, WorkspaceConfig } from './workspace-config'; diff --git a/scopes/mcp/cli-mcp-server/esm.mjs b/scopes/mcp/cli-mcp-server/esm.mjs new file mode 100644 index 000000000000..9a157b643fd6 --- /dev/null +++ b/scopes/mcp/cli-mcp-server/esm.mjs @@ -0,0 +1,3 @@ +import cjsModule from './index.js'; +export const CliMcpServerAspect = cjsModule.CliMcpServerAspect; +export default cjsModule; \ No newline at end of file diff --git a/scopes/react/react/eslint/eslintrc.js b/scopes/react/react/eslint/eslintrc.js index 90df02c9e916..daa08f0e71ed 100644 --- a/scopes/react/react/eslint/eslintrc.js +++ b/scopes/react/react/eslint/eslintrc.js @@ -7,6 +7,6 @@ module.exports = { // parser: require.resolve('@typescript-eslint/parser'), // createDefaultProgram: true, // resolve the env tsconfig. - project: require.resolve('../typescript/tsconfig.json'), + project: 'auto generated by bit linter', }, }; diff --git a/scopes/react/react/react.env.ts b/scopes/react/react/react.env.ts index d93a3c93a9f9..f0a435781fc5 100644 --- a/scopes/react/react/react.env.ts +++ b/scopes/react/react/react.env.ts @@ -46,7 +46,7 @@ import type { Linter, LinterContext } from '@teambit/linter'; import type { Formatter, FormatterContext } from '@teambit/formatter'; import { pathNormalizeToLinux } from '@teambit/toolbox.path.path'; import type { ComponentMeta } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta'; -import type { SchemaExtractor } from '@teambit/schema'; +import { SchemaExtractor } from '@teambit/schema'; import { join, resolve } from 'path'; import { outputFileSync } from 'fs-extra'; import type { Logger } from '@teambit/logger'; @@ -163,8 +163,9 @@ export class ReactEnv * @returns */ createCjsJestTester(jestConfigPath?: string, jestModulePath?: string): Tester { - const pathToSource = pathNormalizeToLinux(__dirname).replace('/dist', ''); - const defaultConfig = join(pathToSource, './jest/jest.cjs.config.js'); + // const pathToSource = pathNormalizeToLinux(__dirname).replace('/dist', ''); + // const defaultConfig = join(pathToSource, './jest/jest.cjs.config.js'); + const defaultConfig = require.resolve('./jest/jest.cjs.config'); const config = jestConfigPath || defaultConfig; const worker = this.getJestWorker(); const tester = JestTester.create( @@ -218,13 +219,14 @@ export class ReactEnv private createTsCompilerOptions(mode: CompilerMode = 'dev'): TypeScriptCompilerOptions { const tsconfig = mode === 'dev' ? cloneDeep(defaultTsConfig) : cloneDeep(buildTsConfig); - const pathToSource = pathNormalizeToLinux(__dirname).replace('/dist/', '/src/'); + // const pathToSource = pathNormalizeToLinux(__dirname).replace('/dist/', '/src/'); + const types = [require.resolve('./typescript/style.d.ts'), require.resolve('./typescript/asset.d.ts')]; const compileJs = true; const compileJsx = true; return { tsconfig, // TODO: @david please remove this line and refactor to be something that makes sense. - types: [resolve(pathToSource, './typescript/style.d.ts'), resolve(pathToSource, './typescript/asset.d.ts')], + types, compileJs, compileJsx, }; diff --git a/scopes/scope/objects/esm.mjs b/scopes/scope/objects/esm.mjs new file mode 100644 index 000000000000..591cac4c3555 --- /dev/null +++ b/scopes/scope/objects/esm.mjs @@ -0,0 +1,49 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const ModelComponent = cjsModule.ModelComponent; +export const ScopeMeta = cjsModule.ScopeMeta; +export const Source = cjsModule.Source; +export const Version = cjsModule.Version; +export const Symlink = cjsModule.Symlink; +export const Lane = cjsModule.Lane; +export const ExportMetadata = cjsModule.ExportMetadata; +export const VersionHistory = cjsModule.VersionHistory; +export const LaneHistory = cjsModule.LaneHistory; +export const BitObject = cjsModule.BitObject; +export const BitRawObject = cjsModule.BitRawObject; +export const Ref = cjsModule.Ref; +export const Repository = cjsModule.Repository; +export const ComponentLog = cjsModule.ComponentLog; +export const ScopeListItem = cjsModule.ScopeListItem; +export const AddVersionOpts = cjsModule.AddVersionOpts; +export const ComponentProps = cjsModule.ComponentProps; +export const VERSION_ZERO = cjsModule.VERSION_ZERO; +export const ComponentItem = cjsModule.ComponentItem; +export const IndexType = cjsModule.IndexType; +export const LaneItem = cjsModule.LaneItem; +export const ObjectItem = cjsModule.ObjectItem; +export const ObjectList = cjsModule.ObjectList; +export const ObjectItemsStream = cjsModule.ObjectItemsStream; +export const BitObjectList = cjsModule.BitObjectList; +export const LaneComponent = cjsModule.LaneComponent; +export const LaneLog = cjsModule.LaneLog; +export const LaneReadmeComponent = cjsModule.LaneReadmeComponent; +export const DependenciesGraph = cjsModule.DependenciesGraph; +export const DepEdge = cjsModule.DepEdge; +export const DepEdgeType = cjsModule.DepEdgeType; +export const SourceFileModel = cjsModule.SourceFileModel; +export const Log = cjsModule.Log; +export const ComponentWithCollectOptions = cjsModule.ComponentWithCollectOptions; +export const ObjectsReadableGenerator = cjsModule.ObjectsReadableGenerator; +export const ScopeIndex = cjsModule.ScopeIndex; +export const VersionHistoryGraph = cjsModule.VersionHistoryGraph; +export const VersionParents = cjsModule.VersionParents; +export const versionParentsToGraph = cjsModule.versionParentsToGraph; +export const HistoryItem = cjsModule.HistoryItem; +export const IdGraph = cjsModule.IdGraph; +export const objectListToGraph = cjsModule.objectListToGraph; +export const bitObjectListToGraph = cjsModule.bitObjectListToGraph; +export const ObjectsAspect = cjsModule.ObjectsAspect; + +export default cjsModule; diff --git a/scopes/workspace/modules/node-modules-linker/esm.mjs b/scopes/workspace/modules/node-modules-linker/esm.mjs new file mode 100644 index 000000000000..ebf3eacc8415 --- /dev/null +++ b/scopes/workspace/modules/node-modules-linker/esm.mjs @@ -0,0 +1,11 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const NodeModulesLinksResult = cjsModule.NodeModulesLinksResult; +export const PackageJsonTransformer = cjsModule.PackageJsonTransformer; +export const linkToNodeModulesByComponents = cjsModule.linkToNodeModulesByComponents; +export const linkToNodeModulesByIds = cjsModule.linkToNodeModulesByIds; +export const linkToNodeModulesWithCodemod = cjsModule.linkToNodeModulesWithCodemod; +export const removeLinksFromNodeModules = cjsModule.removeLinksFromNodeModules; + +export default cjsModule; \ No newline at end of file diff --git a/scopes/workspace/modules/workspace-locator/esm.mjs b/scopes/workspace/modules/workspace-locator/esm.mjs new file mode 100644 index 000000000000..b67960aeeb62 --- /dev/null +++ b/scopes/workspace/modules/workspace-locator/esm.mjs @@ -0,0 +1,7 @@ +// eslint-disable-next-line import/no-unresolved +import cjsModule from './index.js'; + +export const WorkspaceInfo = cjsModule.WorkspaceInfo; +export const getWorkspaceInfo = cjsModule.getWorkspaceInfo; + +export default cjsModule; \ No newline at end of file diff --git a/scopes/workspace/workspace/workspace-aspects-loader.ts b/scopes/workspace/workspace/workspace-aspects-loader.ts index 9c60439d18a2..364339651817 100644 --- a/scopes/workspace/workspace/workspace-aspects-loader.ts +++ b/scopes/workspace/workspace/workspace-aspects-loader.ts @@ -253,9 +253,6 @@ your workspace.jsonc has this component-id set. you might want to remove/change const callId = Math.floor(Math.random() * 1000); const loggerPrefix = `[${callId}] workspace resolveAspects,`; - this.logger.debug( - `${loggerPrefix}, resolving aspects for - runtimeName: ${runtimeName}, componentIds: ${componentIds}` - ); const defaultOpts: ResolveAspectsOptions = { excludeCore: false, requestedOnly: false, @@ -266,6 +263,13 @@ your workspace.jsonc has this component-id set. you might want to remove/change packageManagerConfigRootDir: this.workspace.path, }; const mergedOpts = { ...defaultOpts, ...opts }; + this.logger.debug( + `${loggerPrefix}, resolving aspects for - runtimeName: ${runtimeName}, componentIds: ${componentIds}, opts: ${JSON.stringify( + mergedOpts, + null, + 2 + )}` + ); const idsToResolve = componentIds ? componentIds.map((id) => id.toString()) : this.harmony.extensionsIds; const workspaceLocalAspectsIds = Object.keys(this.workspace.localAspects); const [localAspectsIds, nonLocalAspectsIds] = partition(idsToResolve, (id) => @@ -294,13 +298,15 @@ your workspace.jsonc has this component-id set. you might want to remove/change components, this.getWorkspaceAspectResolver([], runtimeName) ); - - const coreAspectDefs = await Promise.all( - coreAspectsIds.map(async (coreId) => { - const rawDef = await getAspectDef(coreId, runtimeName); - return this.aspectLoader.loadDefinition(rawDef); - }) - ); + let coreAspectDefs: AspectDefinition[] = []; + if (!mergedOpts.excludeCore) { + coreAspectDefs = await Promise.all( + coreAspectsIds.map(async (coreId) => { + const rawDef = await getAspectDef(coreId, runtimeName); + return this.aspectLoader.loadDefinition(rawDef); + }) + ); + } const idsToFilter = idsToResolve.map((idStr) => ComponentID.fromString(idStr)); const targetDefs = wsAspectDefs.concat(coreAspectDefs).concat(localDefs); diff --git a/workspace.jsonc b/workspace.jsonc index 9bc94b4e47b2..e8d7ad438ef6 100644 --- a/workspace.jsonc +++ b/workspace.jsonc @@ -464,7 +464,10 @@ "dreidels": "0.6.1", "enhanced-resolve": "4.5.0", "enquirer": "2.4.1", + "esbuild": "^0.24.0", + "esbuild-plugin-ignore": "^1.1.1", "eslint": "8.56.0", + "eslint-config-airbnb-typescript": "17.1.0", "eslint-config-prettier": "8.5.0", "eslint-import-resolver-node": "0.3.4", "eslint-plugin-import": "2.29.1", @@ -618,6 +621,7 @@ "terser-webpack-plugin": "5.2.0", "tippy.js": "6.2.7", "ts-graphviz": "^2.1.6", + "tsup": "7.2.0", "type-coverage": "2.15.1", "typescript": "5.5.3", "ua-parser-js": "0.7.40",