@teambit/workspace 0.0.565 → 0.0.569

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/__snapshots__/pick-outdated-pkgs.spec.ts.snap +88 -0
  2. package/component-config-file/component-config-file.ts +98 -0
  3. package/component-config-file/exceptions/already-exists.ts +7 -0
  4. package/component-config-file/exceptions/index.ts +1 -0
  5. package/component-config-file/index.ts +2 -0
  6. package/component-tree.widget.tsx +16 -0
  7. package/dist/__snapshots__/pick-outdated-pkgs.spec.js.snap +88 -0
  8. package/dist/__snapshots__/pick-outdated-pkgs.spec.ts.snap +88 -0
  9. package/dist/pick-outdated-pkgs.d.ts +12 -0
  10. package/dist/pick-outdated-pkgs.js +201 -0
  11. package/dist/pick-outdated-pkgs.js.map +1 -0
  12. package/dist/pick-outdated-pkgs.spec.d.ts +1 -0
  13. package/dist/pick-outdated-pkgs.spec.js +64 -0
  14. package/dist/pick-outdated-pkgs.spec.js.map +1 -0
  15. package/dist/update.cmd.d.ts +24 -0
  16. package/dist/update.cmd.js +48 -0
  17. package/dist/update.cmd.js.map +1 -0
  18. package/dist/workspace.d.ts +14 -0
  19. package/dist/workspace.js +117 -2
  20. package/dist/workspace.js.map +1 -1
  21. package/dist/workspace.provider.js +11 -1
  22. package/dist/workspace.provider.js.map +1 -1
  23. package/eject-conf.cmd.tsx +62 -0
  24. package/events/index.ts +3 -0
  25. package/events/on-component-add-event.ts +14 -0
  26. package/events/on-component-change-event.ts +14 -0
  27. package/events/on-component-removed-event.ts +14 -0
  28. package/exceptions/dependency-type-not-supported-in-policy.ts +7 -0
  29. package/exceptions/incorrect-env-aspect.ts +8 -0
  30. package/exceptions/index.ts +1 -0
  31. package/install.cmd.tsx +67 -0
  32. package/link/component-list-links.ts +50 -0
  33. package/link/core-aspects-links.ts +50 -0
  34. package/link/get-package-name-from-target.ts +5 -0
  35. package/link/index.ts +1 -0
  36. package/link/link-row.ts +20 -0
  37. package/link/link-to-dir.ts +13 -0
  38. package/link/link.cmd.ts +96 -0
  39. package/link/nested-deps-in-nm-links.ts +47 -0
  40. package/link/rewire-row.ts +17 -0
  41. package/list.cmd.tsx +30 -0
  42. package/package-tar/teambit-workspace-0.0.569.tgz +0 -0
  43. package/package.json +54 -65
  44. package/types/asset.d.ts +29 -0
  45. package/types/style.d.ts +42 -0
  46. package/ui/index.ts +1 -0
  47. package/ui/workspace/default-component.ts +7 -0
  48. package/ui/workspace/index.ts +1 -0
  49. package/ui/workspace/use-workspace.ts +193 -0
  50. package/ui/workspace/workspace-context.tsx +5 -0
  51. package/ui/workspace/workspace-model.ts +66 -0
  52. package/ui/workspace/workspace-overview/index.ts +1 -0
  53. package/ui/workspace/workspace-overview/workspace-overview.tsx +21 -0
  54. package/ui/workspace/workspace-provider.tsx +23 -0
  55. package/ui/workspace/workspace.tsx +99 -0
  56. package/ui/workspace-components-drawer/index.ts +1 -0
  57. package/ui/workspace-components-drawer/workspace-components.drawer.tsx +49 -0
  58. package/update.cmd.tsx +30 -0
  59. package/watch/check-types.ts +5 -0
  60. package/watch/output-formatter.ts +50 -0
  61. package/watch/watch.cmd.tsx +142 -0
  62. package/watch/watcher.ts +289 -0
  63. package/workspace-component/component-status.ts +67 -0
  64. package/workspace-component/index.ts +2 -0
  65. package/workspace-component/workspace-component-loader.ts +276 -0
  66. package/workspace-component/workspace-component.ts +51 -0
  67. package/workspace.ui.runtime.tsx +215 -0
@@ -101,6 +101,16 @@ function _install() {
101
101
  return data;
102
102
  }
103
103
 
104
+ function _update() {
105
+ const data = _interopRequireDefault(require("./update.cmd"));
106
+
107
+ _update = function () {
108
+ return data;
109
+ };
110
+
111
+ return data;
112
+ }
113
+
104
114
  function _watch() {
105
115
  const data = require("./watch/watch.cmd");
106
116
 
@@ -262,7 +272,7 @@ async function provideWorkspace([pubsub, cli, scope, component, isolator, depend
262
272
  graphql.register(workspaceSchema);
263
273
  const capsuleCmd = new (_capsule().CapsuleCmd)();
264
274
  capsuleCmd.commands = [new (_capsule().CapsuleListCmd)(isolator, workspace), new (_capsule().CapsuleCreateCmd)(workspace, isolator)];
265
- const commands = [new (_install().default)(workspace, logger), new (_ejectConf().default)(workspace), capsuleCmd];
275
+ const commands = [new (_install().default)(workspace, logger), new (_update().default)(workspace), new (_ejectConf().default)(workspace), capsuleCmd];
266
276
  const watcher = new (_watcher().Watcher)(workspace, pubsub);
267
277
 
268
278
  if (workspace && !workspace.consumer.isLegacy) {
@@ -1 +1 @@
1
- {"version":3,"sources":["workspace.provider.ts"],"names":["provideWorkspace","pubsub","cli","scope","component","isolator","dependencyResolver","variants","loggerExt","graphql","ui","bundler","aspectLoader","envs","config","onComponentLoadSlot","onComponentChangeSlot","onComponentAddSlot","onComponentRemoveSlot","onPreWatchSlot","harmony","bitConfig","get","consumer","getConsumer","cwd","undefined","logger","createLogger","EXT_NAME","workspace","Workspace","getWorkspacePolicyFromPackageJson","packageJson","packageJsonObject","policyFromPackageJson","registerRootPolicy","ManyComponentsWriter","registerExternalInstaller","install","installOpts","dedupe","updateExisting","import","onCacheClear","push","clearCache","isLegacy","LegacyComponentLoader","registerOnComponentLoadSubscriber","legacyComponent","id","resolveComponentId","newComponent","state","_consumer","ConsumerComponent","registerOnComponentConfigLoading","componentId","componentFromScope","extensions","componentExtensions","defaultScope","componentDefaultScope","loadExtensions","extensionsWithLegacyIdsP","map","extension","legacyEntry","clone","extensionId","compId","_legacy","newExtensionId","extensionsWithLegacyIds","Promise","all","ExtensionDataList","fromArray","workspaceSchema","registerUiRoot","WorkspaceUIRoot","register","capsuleCmd","CapsuleCmd","commands","CapsuleListCmd","CapsuleCreateCmd","InstallCmd","EjectConfCmd","watcher","Watcher","unregister","WatchCommand","LinkCommand","Tag","registerHost","registerOnStart","loadAspects","getNotLoadedConfiguredExtensions","path"],"mappings":"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","sourcesContent":["import { PubsubMain } from '@teambit/pubsub';\nimport type { AspectLoaderMain } from '@teambit/aspect-loader';\nimport { BundlerMain } from '@teambit/bundler';\nimport { CLIMain, CommandList } from '@teambit/cli';\nimport type { ComponentMain, Component } from '@teambit/component';\nimport { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { EnvsMain } from '@teambit/envs';\nimport { GraphqlMain } from '@teambit/graphql';\nimport { Harmony, SlotRegistry } from '@teambit/harmony';\nimport { IsolatorMain } from '@teambit/isolator';\nimport { LoggerMain } from '@teambit/logger';\nimport type { ScopeMain } from '@teambit/scope';\nimport { UiMain } from '@teambit/ui';\nimport type { VariantsMain } from '@teambit/variants';\nimport { Consumer, loadConsumerIfExist } from '@teambit/legacy/dist/consumer';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport { registerDefaultScopeGetter } from '@teambit/legacy/dist/api/consumer';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport ManyComponentsWriter from '@teambit/legacy/dist/consumer/component-ops/many-components-writer';\nimport LegacyComponentLoader from '@teambit/legacy/dist/consumer/component/component-loader';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { EXT_NAME } from './constants';\nimport EjectConfCmd from './eject-conf.cmd';\nimport InstallCmd from './install.cmd';\nimport { OnComponentLoad, OnComponentAdd, OnComponentChange, OnComponentRemove } from './on-component-events';\nimport { WorkspaceExtConfig } from './types';\nimport { WatchCommand } from './watch/watch.cmd';\nimport { LinkCommand } from './link';\nimport { Watcher, WatchOptions } from './watch/watcher';\nimport { Workspace, WorkspaceInstallOptions } from './workspace';\nimport getWorkspaceSchema from './workspace.graphql';\nimport { WorkspaceUIRoot } from './workspace.ui-root';\nimport { Tag } from './tag-cmd';\nimport { CapsuleCmd, CapsuleCreateCmd, CapsuleListCmd } from './capsule.cmd';\n\nexport type WorkspaceDeps = [\n PubsubMain,\n CLIMain,\n ScopeMain,\n ComponentMain,\n IsolatorMain,\n DependencyResolverMain,\n VariantsMain,\n LoggerMain,\n GraphqlMain,\n UiMain,\n BundlerMain,\n AspectLoaderMain,\n EnvsMain\n];\n\nexport type OnComponentLoadSlot = SlotRegistry<OnComponentLoad>;\n\nexport type OnComponentChangeSlot = SlotRegistry<OnComponentChange>;\n\nexport type OnComponentAddSlot = SlotRegistry<OnComponentAdd>;\n\nexport type OnComponentRemoveSlot = SlotRegistry<OnComponentRemove>;\n\nexport type OnPreWatch = (components: Component[], watchOpts: WatchOptions) => Promise<void>;\nexport type OnPreWatchSlot = SlotRegistry<OnPreWatch>;\n\nexport default async function provideWorkspace(\n [\n pubsub,\n cli,\n scope,\n component,\n isolator,\n dependencyResolver,\n variants,\n loggerExt,\n graphql,\n ui,\n bundler,\n aspectLoader,\n envs,\n ]: WorkspaceDeps,\n config: WorkspaceExtConfig,\n [onComponentLoadSlot, onComponentChangeSlot, onComponentAddSlot, onComponentRemoveSlot, onPreWatchSlot]: [\n OnComponentLoadSlot,\n OnComponentChangeSlot,\n OnComponentAddSlot,\n OnComponentRemoveSlot,\n OnPreWatchSlot\n ],\n harmony: Harmony\n) {\n const bitConfig: any = harmony.config.get('teambit.harmony/bit');\n const consumer = await getConsumer(bitConfig.cwd);\n if (!consumer) return undefined;\n // TODO: get the 'workspace' name in a better way\n const logger = loggerExt.createLogger(EXT_NAME);\n const workspace = new Workspace(\n pubsub,\n config,\n consumer,\n scope,\n component,\n isolator,\n dependencyResolver,\n variants,\n aspectLoader,\n logger,\n undefined,\n harmony,\n onComponentLoadSlot,\n onComponentChangeSlot,\n envs,\n onComponentAddSlot,\n onComponentRemoveSlot,\n onPreWatchSlot,\n graphql\n );\n\n const getWorkspacePolicyFromPackageJson = () => {\n const packageJson = workspace.consumer.packageJson?.packageJsonObject || {};\n const policyFromPackageJson = dependencyResolver.getWorkspacePolicyFromPackageJson(packageJson);\n return policyFromPackageJson;\n };\n\n dependencyResolver.registerRootPolicy(getWorkspacePolicyFromPackageJson());\n\n ManyComponentsWriter.registerExternalInstaller({\n install: async () => {\n // TODO: think how we should pass this options\n const installOpts: WorkspaceInstallOptions = {\n dedupe: true,\n updateExisting: false,\n import: false,\n };\n return workspace.install(undefined, installOpts);\n },\n });\n\n consumer.onCacheClear.push(() => workspace.clearCache());\n\n if (!workspace.isLegacy) {\n LegacyComponentLoader.registerOnComponentLoadSubscriber(async (legacyComponent: ConsumerComponent) => {\n const id = await workspace.resolveComponentId(legacyComponent.id);\n const newComponent = await workspace.get(id, false, legacyComponent);\n return newComponent.state._consumer;\n });\n }\n\n ConsumerComponent.registerOnComponentConfigLoading(EXT_NAME, async (id) => {\n const componentId = await workspace.resolveComponentId(id);\n // We call here directly workspace.scope.get instead of workspace.get because part of the workspace get is loading consumer component\n // which in turn run this event, which will make an infinite loop\n // This component from scope here are only used for merging the extensions with the workspace components\n const componentFromScope = await workspace.scope.get(componentId);\n const extensions = await workspace.componentExtensions(componentId, componentFromScope);\n const defaultScope = await workspace.componentDefaultScope(componentId);\n\n await workspace.loadExtensions(extensions);\n const extensionsWithLegacyIdsP = extensions.map(async (extension) => {\n const legacyEntry = extension.clone();\n if (legacyEntry.extensionId) {\n const compId = await workspace.resolveComponentId(legacyEntry.extensionId);\n legacyEntry.extensionId = compId._legacy;\n legacyEntry.newExtensionId = compId;\n }\n\n return legacyEntry;\n });\n const extensionsWithLegacyIds = await Promise.all(extensionsWithLegacyIdsP);\n\n return {\n defaultScope,\n extensions: ExtensionDataList.fromArray(extensionsWithLegacyIds),\n };\n });\n\n /**\n * Add default scope from harmony during export.\n */\n registerDefaultScopeGetter(async (id: BitId) => {\n const componentId = await workspace.resolveComponentId(id);\n const defaultScope = await workspace.componentDefaultScope(componentId);\n return defaultScope;\n });\n\n const workspaceSchema = getWorkspaceSchema(workspace, graphql);\n ui.registerUiRoot(new WorkspaceUIRoot(workspace, bundler));\n graphql.register(workspaceSchema);\n const capsuleCmd = new CapsuleCmd();\n capsuleCmd.commands = [new CapsuleListCmd(isolator, workspace), new CapsuleCreateCmd(workspace, isolator)];\n const commands: CommandList = [new InstallCmd(workspace, logger), new EjectConfCmd(workspace), capsuleCmd];\n const watcher = new Watcher(workspace, pubsub);\n if (workspace && !workspace.consumer.isLegacy) {\n cli.unregister('watch');\n commands.push(new WatchCommand(pubsub, logger, watcher));\n cli.unregister('link');\n commands.push(new LinkCommand(workspace, logger));\n }\n commands.push(new Tag());\n cli.register(...commands);\n component.registerHost(workspace);\n\n cli.registerOnStart(async () => {\n await workspace.loadAspects(aspectLoader.getNotLoadedConfiguredExtensions());\n });\n\n return workspace;\n}\n\n/**\n * don't use loadConsumer() here, which throws ConsumerNotFound because some commands don't require\n * the consumer to be available. such as, `bit init` or `bit list --remote`.\n * most of the commands do need the consumer. the legacy commands that need the consumer throw an\n * error when is missing. in the new/Harmony commands, such as `bis compile`, the workspace object\n * is passed to the provider, so before using it, make sure it exists.\n * keep in mind that you can't verify it in the provider itself, because the provider is running\n * always for all commands before anything else is happening.\n */\nasync function getConsumer(path?: string): Promise<Consumer | undefined> {\n return loadConsumerIfExist(path);\n}\n"]}
1
+ {"version":3,"sources":["workspace.provider.ts"],"names":["provideWorkspace","pubsub","cli","scope","component","isolator","dependencyResolver","variants","loggerExt","graphql","ui","bundler","aspectLoader","envs","config","onComponentLoadSlot","onComponentChangeSlot","onComponentAddSlot","onComponentRemoveSlot","onPreWatchSlot","harmony","bitConfig","get","consumer","getConsumer","cwd","undefined","logger","createLogger","EXT_NAME","workspace","Workspace","getWorkspacePolicyFromPackageJson","packageJson","packageJsonObject","policyFromPackageJson","registerRootPolicy","ManyComponentsWriter","registerExternalInstaller","install","installOpts","dedupe","updateExisting","import","onCacheClear","push","clearCache","isLegacy","LegacyComponentLoader","registerOnComponentLoadSubscriber","legacyComponent","id","resolveComponentId","newComponent","state","_consumer","ConsumerComponent","registerOnComponentConfigLoading","componentId","componentFromScope","extensions","componentExtensions","defaultScope","componentDefaultScope","loadExtensions","extensionsWithLegacyIdsP","map","extension","legacyEntry","clone","extensionId","compId","_legacy","newExtensionId","extensionsWithLegacyIds","Promise","all","ExtensionDataList","fromArray","workspaceSchema","registerUiRoot","WorkspaceUIRoot","register","capsuleCmd","CapsuleCmd","commands","CapsuleListCmd","CapsuleCreateCmd","InstallCmd","UpdateCmd","EjectConfCmd","watcher","Watcher","unregister","WatchCommand","LinkCommand","Tag","registerHost","registerOnStart","loadAspects","getNotLoadedConfiguredExtensions","path"],"mappings":";;;;;;;;;;;;;AAcA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AA6Be,eAAeA,gBAAf,CACb,CACEC,MADF,EAEEC,GAFF,EAGEC,KAHF,EAIEC,SAJF,EAKEC,QALF,EAMEC,kBANF,EAOEC,QAPF,EAQEC,SARF,EASEC,OATF,EAUEC,EAVF,EAWEC,OAXF,EAYEC,YAZF,EAaEC,IAbF,CADa,EAgBbC,MAhBa,EAiBb,CAACC,mBAAD,EAAsBC,qBAAtB,EAA6CC,kBAA7C,EAAiEC,qBAAjE,EAAwFC,cAAxF,CAjBa,EAwBbC,OAxBa,EAyBb;AACA,QAAMC,SAAc,GAAGD,OAAO,CAACN,MAAR,CAAeQ,GAAf,CAAmB,qBAAnB,CAAvB;AACA,QAAMC,QAAQ,GAAG,MAAMC,WAAW,CAACH,SAAS,CAACI,GAAX,CAAlC;AACA,MAAI,CAACF,QAAL,EAAe,OAAOG,SAAP,CAHf,CAIA;;AACA,QAAMC,MAAM,GAAGnB,SAAS,CAACoB,YAAV,CAAuBC,qBAAvB,CAAf;AACA,QAAMC,SAAS,GAAG,KAAIC,sBAAJ,EAChB9B,MADgB,EAEhBa,MAFgB,EAGhBS,QAHgB,EAIhBpB,KAJgB,EAKhBC,SALgB,EAMhBC,QANgB,EAOhBC,kBAPgB,EAQhBC,QARgB,EAShBK,YATgB,EAUhBe,MAVgB,EAWhBD,SAXgB,EAYhBN,OAZgB,EAahBL,mBAbgB,EAchBC,qBAdgB,EAehBH,IAfgB,EAgBhBI,kBAhBgB,EAiBhBC,qBAjBgB,EAkBhBC,cAlBgB,EAmBhBV,OAnBgB,CAAlB;;AAsBA,QAAMuB,iCAAiC,GAAG,MAAM;AAAA;;AAC9C,UAAMC,WAAW,GAAG,0BAAAH,SAAS,CAACP,QAAV,CAAmBU,WAAnB,gFAAgCC,iBAAhC,KAAqD,EAAzE;AACA,UAAMC,qBAAqB,GAAG7B,kBAAkB,CAAC0B,iCAAnB,CAAqDC,WAArD,CAA9B;AACA,WAAOE,qBAAP;AACD,GAJD;;AAMA7B,EAAAA,kBAAkB,CAAC8B,kBAAnB,CAAsCJ,iCAAiC,EAAvE;;AAEAK,kCAAqBC,yBAArB,CAA+C;AAC7CC,IAAAA,OAAO,EAAE,YAAY;AACnB;AACA,YAAMC,WAAoC,GAAG;AAC3CC,QAAAA,MAAM,EAAE,IADmC;AAE3CC,QAAAA,cAAc,EAAE,KAF2B;AAG3CC,QAAAA,MAAM,EAAE;AAHmC,OAA7C;AAKA,aAAOb,SAAS,CAACS,OAAV,CAAkBb,SAAlB,EAA6Bc,WAA7B,CAAP;AACD;AAT4C,GAA/C;;AAYAjB,EAAAA,QAAQ,CAACqB,YAAT,CAAsBC,IAAtB,CAA2B,MAAMf,SAAS,CAACgB,UAAV,EAAjC;;AAEA,MAAI,CAAChB,SAAS,CAACiB,QAAf,EAAyB;AACvBC,+BAAsBC,iCAAtB,CAAwD,MAAOC,eAAP,IAA8C;AACpG,YAAMC,EAAE,GAAG,MAAMrB,SAAS,CAACsB,kBAAV,CAA6BF,eAAe,CAACC,EAA7C,CAAjB;AACA,YAAME,YAAY,GAAG,MAAMvB,SAAS,CAACR,GAAV,CAAc6B,EAAd,EAAkB,KAAlB,EAAyBD,eAAzB,CAA3B;AACA,aAAOG,YAAY,CAACC,KAAb,CAAmBC,SAA1B;AACD,KAJD;AAKD;;AAEDC,uBAAkBC,gCAAlB,CAAmD5B,qBAAnD,EAA6D,MAAOsB,EAAP,IAAc;AACzE,UAAMO,WAAW,GAAG,MAAM5B,SAAS,CAACsB,kBAAV,CAA6BD,EAA7B,CAA1B,CADyE,CAEzE;AACA;AACA;;AACA,UAAMQ,kBAAkB,GAAG,MAAM7B,SAAS,CAAC3B,KAAV,CAAgBmB,GAAhB,CAAoBoC,WAApB,CAAjC;AACA,UAAME,UAAU,GAAG,MAAM9B,SAAS,CAAC+B,mBAAV,CAA8BH,WAA9B,EAA2CC,kBAA3C,CAAzB;AACA,UAAMG,YAAY,GAAG,MAAMhC,SAAS,CAACiC,qBAAV,CAAgCL,WAAhC,CAA3B;AAEA,UAAM5B,SAAS,CAACkC,cAAV,CAAyBJ,UAAzB,CAAN;AACA,UAAMK,wBAAwB,GAAGL,UAAU,CAACM,GAAX,CAAe,MAAOC,SAAP,IAAqB;AACnE,YAAMC,WAAW,GAAGD,SAAS,CAACE,KAAV,EAApB;;AACA,UAAID,WAAW,CAACE,WAAhB,EAA6B;AAC3B,cAAMC,MAAM,GAAG,MAAMzC,SAAS,CAACsB,kBAAV,CAA6BgB,WAAW,CAACE,WAAzC,CAArB;AACAF,QAAAA,WAAW,CAACE,WAAZ,GAA0BC,MAAM,CAACC,OAAjC;AACAJ,QAAAA,WAAW,CAACK,cAAZ,GAA6BF,MAA7B;AACD;;AAED,aAAOH,WAAP;AACD,KATgC,CAAjC;AAUA,UAAMM,uBAAuB,GAAG,MAAMC,OAAO,CAACC,GAAR,CAAYX,wBAAZ,CAAtC;AAEA,WAAO;AACLH,MAAAA,YADK;AAELF,MAAAA,UAAU,EAAEiB,mCAAkBC,SAAlB,CAA4BJ,uBAA5B;AAFP,KAAP;AAID,GA1BD;AA4BA;AACF;AACA;;;AACE,+CAA2B,MAAOvB,EAAP,IAAqB;AAC9C,UAAMO,WAAW,GAAG,MAAM5B,SAAS,CAACsB,kBAAV,CAA6BD,EAA7B,CAA1B;AACA,UAAMW,YAAY,GAAG,MAAMhC,SAAS,CAACiC,qBAAV,CAAgCL,WAAhC,CAA3B;AACA,WAAOI,YAAP;AACD,GAJD;AAMA,QAAMiB,eAAe,GAAG,2BAAmBjD,SAAnB,EAA8BrB,OAA9B,CAAxB;AACAC,EAAAA,EAAE,CAACsE,cAAH,CAAkB,KAAIC,6BAAJ,EAAoBnD,SAApB,EAA+BnB,OAA/B,CAAlB;AACAF,EAAAA,OAAO,CAACyE,QAAR,CAAiBH,eAAjB;AACA,QAAMI,UAAU,GAAG,KAAIC,qBAAJ,GAAnB;AACAD,EAAAA,UAAU,CAACE,QAAX,GAAsB,CAAC,KAAIC,yBAAJ,EAAmBjF,QAAnB,EAA6ByB,SAA7B,CAAD,EAA0C,KAAIyD,2BAAJ,EAAqBzD,SAArB,EAAgCzB,QAAhC,CAA1C,CAAtB;AACA,QAAMgF,QAAqB,GAAG,CAC5B,KAAIG,kBAAJ,EAAe1D,SAAf,EAA0BH,MAA1B,CAD4B,EAE5B,KAAI8D,iBAAJ,EAAc3D,SAAd,CAF4B,EAG5B,KAAI4D,oBAAJ,EAAiB5D,SAAjB,CAH4B,EAI5BqD,UAJ4B,CAA9B;AAMA,QAAMQ,OAAO,GAAG,KAAIC,kBAAJ,EAAY9D,SAAZ,EAAuB7B,MAAvB,CAAhB;;AACA,MAAI6B,SAAS,IAAI,CAACA,SAAS,CAACP,QAAV,CAAmBwB,QAArC,EAA+C;AAC7C7C,IAAAA,GAAG,CAAC2F,UAAJ,CAAe,OAAf;AACAR,IAAAA,QAAQ,CAACxC,IAAT,CAAc,KAAIiD,qBAAJ,EAAiB7F,MAAjB,EAAyB0B,MAAzB,EAAiCgE,OAAjC,CAAd;AACAzF,IAAAA,GAAG,CAAC2F,UAAJ,CAAe,MAAf;AACAR,IAAAA,QAAQ,CAACxC,IAAT,CAAc,KAAIkD,mBAAJ,EAAgBjE,SAAhB,EAA2BH,MAA3B,CAAd;AACD;;AACD0D,EAAAA,QAAQ,CAACxC,IAAT,CAAc,KAAImD,aAAJ,GAAd;AACA9F,EAAAA,GAAG,CAACgF,QAAJ,CAAa,GAAGG,QAAhB;AACAjF,EAAAA,SAAS,CAAC6F,YAAV,CAAuBnE,SAAvB;AAEA5B,EAAAA,GAAG,CAACgG,eAAJ,CAAoB,YAAY;AAC9B,UAAMpE,SAAS,CAACqE,WAAV,CAAsBvF,YAAY,CAACwF,gCAAb,EAAtB,CAAN;AACD,GAFD;AAIA,SAAOtE,SAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAeN,WAAf,CAA2B6E,IAA3B,EAAyE;AACvE,SAAO,qCAAoBA,IAApB,CAAP;AACD","sourcesContent":["import { PubsubMain } from '@teambit/pubsub';\nimport type { AspectLoaderMain } from '@teambit/aspect-loader';\nimport { BundlerMain } from '@teambit/bundler';\nimport { CLIMain, CommandList } from '@teambit/cli';\nimport type { ComponentMain, Component } from '@teambit/component';\nimport { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { EnvsMain } from '@teambit/envs';\nimport { GraphqlMain } from '@teambit/graphql';\nimport { Harmony, SlotRegistry } from '@teambit/harmony';\nimport { IsolatorMain } from '@teambit/isolator';\nimport { LoggerMain } from '@teambit/logger';\nimport type { ScopeMain } from '@teambit/scope';\nimport { UiMain } from '@teambit/ui';\nimport type { VariantsMain } from '@teambit/variants';\nimport { Consumer, loadConsumerIfExist } from '@teambit/legacy/dist/consumer';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport { registerDefaultScopeGetter } from '@teambit/legacy/dist/api/consumer';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport ManyComponentsWriter from '@teambit/legacy/dist/consumer/component-ops/many-components-writer';\nimport LegacyComponentLoader from '@teambit/legacy/dist/consumer/component/component-loader';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { EXT_NAME } from './constants';\nimport EjectConfCmd from './eject-conf.cmd';\nimport InstallCmd from './install.cmd';\nimport UpdateCmd from './update.cmd';\nimport { OnComponentLoad, OnComponentAdd, OnComponentChange, OnComponentRemove } from './on-component-events';\nimport { WorkspaceExtConfig } from './types';\nimport { WatchCommand } from './watch/watch.cmd';\nimport { LinkCommand } from './link';\nimport { Watcher, WatchOptions } from './watch/watcher';\nimport { Workspace, WorkspaceInstallOptions } from './workspace';\nimport getWorkspaceSchema from './workspace.graphql';\nimport { WorkspaceUIRoot } from './workspace.ui-root';\nimport { Tag } from './tag-cmd';\nimport { CapsuleCmd, CapsuleCreateCmd, CapsuleListCmd } from './capsule.cmd';\n\nexport type WorkspaceDeps = [\n PubsubMain,\n CLIMain,\n ScopeMain,\n ComponentMain,\n IsolatorMain,\n DependencyResolverMain,\n VariantsMain,\n LoggerMain,\n GraphqlMain,\n UiMain,\n BundlerMain,\n AspectLoaderMain,\n EnvsMain\n];\n\nexport type OnComponentLoadSlot = SlotRegistry<OnComponentLoad>;\n\nexport type OnComponentChangeSlot = SlotRegistry<OnComponentChange>;\n\nexport type OnComponentAddSlot = SlotRegistry<OnComponentAdd>;\n\nexport type OnComponentRemoveSlot = SlotRegistry<OnComponentRemove>;\n\nexport type OnPreWatch = (components: Component[], watchOpts: WatchOptions) => Promise<void>;\nexport type OnPreWatchSlot = SlotRegistry<OnPreWatch>;\n\nexport default async function provideWorkspace(\n [\n pubsub,\n cli,\n scope,\n component,\n isolator,\n dependencyResolver,\n variants,\n loggerExt,\n graphql,\n ui,\n bundler,\n aspectLoader,\n envs,\n ]: WorkspaceDeps,\n config: WorkspaceExtConfig,\n [onComponentLoadSlot, onComponentChangeSlot, onComponentAddSlot, onComponentRemoveSlot, onPreWatchSlot]: [\n OnComponentLoadSlot,\n OnComponentChangeSlot,\n OnComponentAddSlot,\n OnComponentRemoveSlot,\n OnPreWatchSlot\n ],\n harmony: Harmony\n) {\n const bitConfig: any = harmony.config.get('teambit.harmony/bit');\n const consumer = await getConsumer(bitConfig.cwd);\n if (!consumer) return undefined;\n // TODO: get the 'workspace' name in a better way\n const logger = loggerExt.createLogger(EXT_NAME);\n const workspace = new Workspace(\n pubsub,\n config,\n consumer,\n scope,\n component,\n isolator,\n dependencyResolver,\n variants,\n aspectLoader,\n logger,\n undefined,\n harmony,\n onComponentLoadSlot,\n onComponentChangeSlot,\n envs,\n onComponentAddSlot,\n onComponentRemoveSlot,\n onPreWatchSlot,\n graphql\n );\n\n const getWorkspacePolicyFromPackageJson = () => {\n const packageJson = workspace.consumer.packageJson?.packageJsonObject || {};\n const policyFromPackageJson = dependencyResolver.getWorkspacePolicyFromPackageJson(packageJson);\n return policyFromPackageJson;\n };\n\n dependencyResolver.registerRootPolicy(getWorkspacePolicyFromPackageJson());\n\n ManyComponentsWriter.registerExternalInstaller({\n install: async () => {\n // TODO: think how we should pass this options\n const installOpts: WorkspaceInstallOptions = {\n dedupe: true,\n updateExisting: false,\n import: false,\n };\n return workspace.install(undefined, installOpts);\n },\n });\n\n consumer.onCacheClear.push(() => workspace.clearCache());\n\n if (!workspace.isLegacy) {\n LegacyComponentLoader.registerOnComponentLoadSubscriber(async (legacyComponent: ConsumerComponent) => {\n const id = await workspace.resolveComponentId(legacyComponent.id);\n const newComponent = await workspace.get(id, false, legacyComponent);\n return newComponent.state._consumer;\n });\n }\n\n ConsumerComponent.registerOnComponentConfigLoading(EXT_NAME, async (id) => {\n const componentId = await workspace.resolveComponentId(id);\n // We call here directly workspace.scope.get instead of workspace.get because part of the workspace get is loading consumer component\n // which in turn run this event, which will make an infinite loop\n // This component from scope here are only used for merging the extensions with the workspace components\n const componentFromScope = await workspace.scope.get(componentId);\n const extensions = await workspace.componentExtensions(componentId, componentFromScope);\n const defaultScope = await workspace.componentDefaultScope(componentId);\n\n await workspace.loadExtensions(extensions);\n const extensionsWithLegacyIdsP = extensions.map(async (extension) => {\n const legacyEntry = extension.clone();\n if (legacyEntry.extensionId) {\n const compId = await workspace.resolveComponentId(legacyEntry.extensionId);\n legacyEntry.extensionId = compId._legacy;\n legacyEntry.newExtensionId = compId;\n }\n\n return legacyEntry;\n });\n const extensionsWithLegacyIds = await Promise.all(extensionsWithLegacyIdsP);\n\n return {\n defaultScope,\n extensions: ExtensionDataList.fromArray(extensionsWithLegacyIds),\n };\n });\n\n /**\n * Add default scope from harmony during export.\n */\n registerDefaultScopeGetter(async (id: BitId) => {\n const componentId = await workspace.resolveComponentId(id);\n const defaultScope = await workspace.componentDefaultScope(componentId);\n return defaultScope;\n });\n\n const workspaceSchema = getWorkspaceSchema(workspace, graphql);\n ui.registerUiRoot(new WorkspaceUIRoot(workspace, bundler));\n graphql.register(workspaceSchema);\n const capsuleCmd = new CapsuleCmd();\n capsuleCmd.commands = [new CapsuleListCmd(isolator, workspace), new CapsuleCreateCmd(workspace, isolator)];\n const commands: CommandList = [\n new InstallCmd(workspace, logger),\n new UpdateCmd(workspace),\n new EjectConfCmd(workspace),\n capsuleCmd,\n ];\n const watcher = new Watcher(workspace, pubsub);\n if (workspace && !workspace.consumer.isLegacy) {\n cli.unregister('watch');\n commands.push(new WatchCommand(pubsub, logger, watcher));\n cli.unregister('link');\n commands.push(new LinkCommand(workspace, logger));\n }\n commands.push(new Tag());\n cli.register(...commands);\n component.registerHost(workspace);\n\n cli.registerOnStart(async () => {\n await workspace.loadAspects(aspectLoader.getNotLoadedConfiguredExtensions());\n });\n\n return workspace;\n}\n\n/**\n * don't use loadConsumer() here, which throws ConsumerNotFound because some commands don't require\n * the consumer to be available. such as, `bit init` or `bit list --remote`.\n * most of the commands do need the consumer. the legacy commands that need the consumer throw an\n * error when is missing. in the new/Harmony commands, such as `bis compile`, the workspace object\n * is passed to the provider, so before using it, make sure it exists.\n * keep in mind that you can't verify it in the provider itself, because the provider is running\n * always for all commands before anything else is happening.\n */\nasync function getConsumer(path?: string): Promise<Consumer | undefined> {\n return loadConsumerIfExist(path);\n}\n"]}
@@ -0,0 +1,62 @@
1
+ import { Command, CommandOptions } from '@teambit/cli';
2
+ import chalk from 'chalk';
3
+ import { Text } from 'ink';
4
+ import React from 'react';
5
+
6
+ import { EjectConfOptions, EjectConfResult, Workspace } from './workspace';
7
+
8
+ type EjectConfArgs = [string];
9
+ // From the cli we might get those as string in case we run it like --propagate true (return string) as opposed to only --propagate
10
+ type EjectConfOptionsCLI = {
11
+ propagate: string | boolean | undefined;
12
+ override: string | boolean | undefined;
13
+ };
14
+
15
+ export default class EjectConfCmd implements Command {
16
+ name = 'eject-conf [id]';
17
+ description = 'ejecting components configuration';
18
+ alias = '';
19
+ group = 'development';
20
+ shortDescription = 'eject the target component configuration file (e.g. create a `component.json` file)';
21
+ options = [
22
+ ['p', 'propagate', 'mark propagate true in the config file'],
23
+ ['o', 'override', 'override file if exist'],
24
+ ] as CommandOptions;
25
+
26
+ constructor(private workspace: Workspace) {}
27
+
28
+ // TODO: remove this ts-ignore
29
+ // @ts-ignore
30
+ async render(args: EjectConfArgs, options: EjectConfOptionsCLI) {
31
+ const ejectResult = await this.json(args, options);
32
+ const [componentId] = args;
33
+ return (
34
+ <Text color="yellow">
35
+ successfully ejected config for component {componentId} in path {ejectResult.configPath}
36
+ </Text>
37
+ );
38
+ }
39
+
40
+ async report(args: EjectConfArgs, options: EjectConfOptionsCLI): Promise<string> {
41
+ const ejectResult = await this.json(args, options);
42
+ const [componentId] = args;
43
+ return `successfully ejected config for component ${chalk.bold(componentId)} in path ${chalk.green(
44
+ ejectResult.configPath
45
+ )}`;
46
+ }
47
+
48
+ async json([componentId]: EjectConfArgs, options: EjectConfOptionsCLI): Promise<EjectConfResult> {
49
+ const ejectOptions = options;
50
+ if (ejectOptions.propagate === 'true') {
51
+ ejectOptions.propagate = true;
52
+ }
53
+ if (ejectOptions.override === 'true') {
54
+ ejectOptions.override = true;
55
+ }
56
+
57
+ const id = await this.workspace.resolveComponentId(componentId);
58
+
59
+ const results = await this.workspace.ejectConfig(id, ejectOptions as EjectConfOptions);
60
+ return results;
61
+ }
62
+ }
@@ -0,0 +1,3 @@
1
+ export * from './on-component-change-event';
2
+ export * from './on-component-add-event';
3
+ export * from './on-component-removed-event';
@@ -0,0 +1,14 @@
1
+ /* eslint-disable max-classes-per-file */
2
+ import { BitBaseEvent } from '@teambit/pubsub';
3
+
4
+ class OnComponentAddEventData {
5
+ constructor(readonly idStr, readonly hook) {}
6
+ }
7
+
8
+ export class OnComponentAddEvent extends BitBaseEvent<OnComponentAddEventData> {
9
+ static readonly TYPE = 'on-component-add';
10
+
11
+ constructor(readonly timestamp, readonly idStr, readonly hook) {
12
+ super(OnComponentAddEvent.TYPE, '0.0.1', timestamp, new OnComponentAddEventData(idStr, hook));
13
+ }
14
+ }
@@ -0,0 +1,14 @@
1
+ /* eslint-disable max-classes-per-file */
2
+ import { BitBaseEvent } from '@teambit/pubsub';
3
+
4
+ class OnComponentChangeEventData {
5
+ constructor(readonly idStr, readonly hook) {}
6
+ }
7
+
8
+ export class OnComponentChangeEvent extends BitBaseEvent<OnComponentChangeEventData> {
9
+ static readonly TYPE = 'on-component-change';
10
+
11
+ constructor(readonly timestamp, readonly idStr, readonly hook) {
12
+ super(OnComponentChangeEvent.TYPE, '0.0.1', timestamp, new OnComponentChangeEventData(idStr, hook));
13
+ }
14
+ }
@@ -0,0 +1,14 @@
1
+ /* eslint-disable max-classes-per-file */
2
+ import { BitBaseEvent } from '@teambit/pubsub';
3
+
4
+ class OnComponentRemovedEventData {
5
+ constructor(readonly idStr) {}
6
+ }
7
+
8
+ export class OnComponentRemovedEvent extends BitBaseEvent<OnComponentRemovedEventData> {
9
+ static readonly TYPE = 'on-component-removed';
10
+
11
+ constructor(readonly timestamp, readonly idStr) {
12
+ super(OnComponentRemovedEvent.TYPE, '0.0.1', timestamp, new OnComponentRemovedEventData(idStr));
13
+ }
14
+ }
@@ -0,0 +1,7 @@
1
+ import { BitError } from '@teambit/bit-error';
2
+
3
+ export class DependencyTypeNotSupportedInPolicy extends BitError {
4
+ constructor(type: string) {
5
+ super(`the workspace policy does not support ${type} dependencies`);
6
+ }
7
+ }
@@ -0,0 +1,8 @@
1
+ import { BitError } from '@teambit/bit-error';
2
+
3
+ export class IncorrectEnvAspect extends BitError {
4
+ constructor(id: string, envType: string, envId: string) {
5
+ super(`"${id}" is configured in workspace.json, but using the "${envId}" environment, which is type "${envType}".
6
+ please make sure to either apply the aspect environment or a composition of the aspect environment for the aspect to load.`);
7
+ }
8
+ }
@@ -0,0 +1 @@
1
+ export { DependencyTypeNotSupportedInPolicy } from './dependency-type-not-supported-in-policy';
@@ -0,0 +1,67 @@
1
+ import { Command, CommandOptions } from '@teambit/cli';
2
+ import { WorkspaceDependencyLifecycleType } from '@teambit/dependency-resolver';
3
+ import { Logger } from '@teambit/logger';
4
+ import chalk from 'chalk';
5
+
6
+ import { Workspace, WorkspaceInstallOptions } from './workspace';
7
+
8
+ type InstallCmdOptions = {
9
+ variants: string;
10
+ type: WorkspaceDependencyLifecycleType;
11
+ skipDedupe: boolean;
12
+ skipImport: boolean;
13
+ updateExisting: boolean;
14
+ savePrefix: string;
15
+ };
16
+
17
+ export default class InstallCmd implements Command {
18
+ name = 'install [packages...]';
19
+ description = 'install development workspace dependencies';
20
+ alias = 'in';
21
+ group = 'development';
22
+ shortDescription = '';
23
+ options = [
24
+ ['v', 'variants <variants>', 'add packages to specific variants'],
25
+ ['t', 'type [lifecycleType]', '"runtime" (default) or "peer" (dev is not a valid option)'],
26
+ ['u', 'update-existing [updateExisting]', 'update existing dependencies version and types'],
27
+ ['', 'save-prefix [savePrefix]', 'set the prefix to use when adding dependency to workspace.jsonc'],
28
+ ['', 'skip-dedupe [skipDedupe]', 'do not dedupe dependencies on installation'],
29
+ ['', 'skip-import [skipImport]', 'do not import bit objects post installation'],
30
+ ] as CommandOptions;
31
+
32
+ constructor(
33
+ /**
34
+ * workspace extension.
35
+ */
36
+ private workspace: Workspace,
37
+
38
+ /**
39
+ * logger extension.
40
+ */
41
+ private logger: Logger
42
+ ) {}
43
+
44
+ async report([packages = []]: [string[]], options: InstallCmdOptions) {
45
+ const startTime = Date.now();
46
+ this.logger.console(`Resolving component dependencies for workspace: '${chalk.cyan(this.workspace.name)}'`);
47
+ const installOpts: WorkspaceInstallOptions = {
48
+ variants: options.variants,
49
+ lifecycleType: options.type,
50
+ dedupe: !options.skipDedupe,
51
+ import: !options.skipImport,
52
+ updateExisting: options.updateExisting,
53
+ savePrefix: options.savePrefix,
54
+ };
55
+ const components = await this.workspace.install(packages, installOpts);
56
+ const endTime = Date.now();
57
+ const executionTime = calculateTime(startTime, endTime);
58
+ return `Successfully resolved dependencies for ${chalk.cyan(
59
+ components.toArray().length.toString()
60
+ )} component(s) in ${chalk.cyan(executionTime.toString())} seconds`;
61
+ }
62
+ }
63
+
64
+ function calculateTime(startTime: number, endTime: number) {
65
+ const diff = endTime - startTime;
66
+ return diff / 1000;
67
+ }
@@ -0,0 +1,50 @@
1
+ import chalk from 'chalk';
2
+ import { LinksResult as LegacyLinksResult } from '@teambit/legacy/dist/links/node-modules-linker';
3
+ import { getPackageNameFromTarget } from './get-package-name-from-target';
4
+ import { LinkRow, VerboseLinkRow } from './link-row';
5
+
6
+ type ComponentListLinksProps = {
7
+ componentListLinks?: LegacyLinksResult[];
8
+ verbose: boolean;
9
+ };
10
+
11
+ export function ComponentListLinks({ componentListLinks, verbose = false }: ComponentListLinksProps) {
12
+ if (!componentListLinks || !componentListLinks.length) {
13
+ return chalk.cyan('No components link were generated');
14
+ }
15
+ const title = chalk.bold.cyan('Components links');
16
+ const links = componentListLinks.map((componentLinks) => ComponentLinks({ componentLinks, verbose })).join('\n');
17
+
18
+ return `${title}\n${links}`;
19
+ }
20
+
21
+ type ComponentLinksProps = {
22
+ componentLinks: LegacyLinksResult;
23
+ verbose: boolean;
24
+ };
25
+ function ComponentLinks({ componentLinks, verbose = false }: ComponentLinksProps) {
26
+ if (!componentLinks.bound || componentLinks.bound.length < 1) return '';
27
+ if (verbose) return VerboseComponentLinks({ componentLinks });
28
+ return RegularComponentLinks({ componentLinks });
29
+ }
30
+
31
+ type RegularComponentLinksProps = {
32
+ componentLinks: LegacyLinksResult;
33
+ };
34
+ function RegularComponentLinks({ componentLinks }: RegularComponentLinksProps) {
35
+ const id = componentLinks.id.toString();
36
+ if (!componentLinks.bound || componentLinks.bound.length < 1) return '';
37
+ const packagePath = getPackageNameFromTarget(componentLinks.bound[0].to);
38
+ return LinkRow({ title: id, target: packagePath, padding: 50 });
39
+ }
40
+
41
+ type VerboseComponentLinksProps = {
42
+ componentLinks: LegacyLinksResult;
43
+ };
44
+ function VerboseComponentLinks({ componentLinks }: VerboseComponentLinksProps) {
45
+ const id = componentLinks.id.toString();
46
+ if (!componentLinks.bound || componentLinks.bound.length < 1) return '';
47
+ const title = chalk.bold.cyan(id);
48
+ const links = componentLinks.bound.map((link) => VerboseLinkRow({ from: link.from, to: link.to })).join('\n');
49
+ return `${title}\n${links}\n`;
50
+ }
@@ -0,0 +1,50 @@
1
+ import { CoreAspectLinkResult } from '@teambit/dependency-resolver';
2
+ import chalk from 'chalk';
3
+
4
+ import { getPackageNameFromTarget } from './get-package-name-from-target';
5
+ import { LinkRow, VerboseLinkRow } from './link-row';
6
+
7
+ type CoreAspectsLinksProps = {
8
+ coreAspectsLinks?: CoreAspectLinkResult[];
9
+ verbose: boolean;
10
+ };
11
+
12
+ export function CoreAspectsLinks({ coreAspectsLinks, verbose = false }: CoreAspectsLinksProps) {
13
+ if (!coreAspectsLinks || !coreAspectsLinks.length) {
14
+ return chalk.cyan('No core aspects were linked');
15
+ }
16
+ const title = chalk.cyan('Core aspects links');
17
+ const links = coreAspectsLinks.map((link) => CoreAspectLinkRow({ coreAspectLink: link, verbose })).join('\n');
18
+ return `${title}\n${links}`;
19
+ }
20
+
21
+ type CoreAspectLinkProps = {
22
+ coreAspectLink: CoreAspectLinkResult;
23
+ verbose: boolean;
24
+ };
25
+ function CoreAspectLinkRow({ coreAspectLink, verbose = false }: CoreAspectLinkProps) {
26
+ if (verbose) return VerboseCoreAspectLink({ coreAspectLink });
27
+ return RegularCoreAspectLink({ coreAspectLink });
28
+ }
29
+
30
+ type RegularCoreAspectLinkProps = {
31
+ coreAspectLink: CoreAspectLinkResult;
32
+ };
33
+ function RegularCoreAspectLink({ coreAspectLink }: RegularCoreAspectLinkProps) {
34
+ const id = coreAspectLink.aspectId.toString();
35
+ const packagePath = getPackageNameFromTarget(coreAspectLink.linkDetail.to);
36
+ return LinkRow({ title: id, target: packagePath, padding: 50 });
37
+ }
38
+
39
+ type VerboseCoreAspectLinkProps = {
40
+ coreAspectLink: CoreAspectLinkResult;
41
+ };
42
+ function VerboseCoreAspectLink({ coreAspectLink }: VerboseCoreAspectLinkProps) {
43
+ const id = coreAspectLink.aspectId.toString();
44
+ const title = chalk.bold.cyan(id);
45
+ const link = VerboseLinkRow({
46
+ from: coreAspectLink.linkDetail.from,
47
+ to: coreAspectLink.linkDetail.to,
48
+ });
49
+ return `${title}\n${link}`;
50
+ }
@@ -0,0 +1,5 @@
1
+ export function getPackageNameFromTarget(targetPath: string): string {
2
+ const subPath = targetPath.substring(targetPath.lastIndexOf('node_modules'));
3
+ const packagePath = subPath.split('/').slice(0, 3).join('/');
4
+ return `./${packagePath}`;
5
+ }
package/link/index.ts ADDED
@@ -0,0 +1 @@
1
+ export { LinkCommand } from './link.cmd';
@@ -0,0 +1,20 @@
1
+ import chalk from 'chalk';
2
+
3
+ type LinkRowProps = {
4
+ title: string;
5
+ target: string;
6
+ padding?: number;
7
+ };
8
+ export function LinkRow({ title, target, padding = 50 }: LinkRowProps) {
9
+ return chalk.bold(`${title.padEnd(padding)} ${'>'} ${target}`);
10
+ }
11
+
12
+ type VerboseLinkRowProps = {
13
+ from: string;
14
+ to: string;
15
+ };
16
+ export function VerboseLinkRow({ from, to }: VerboseLinkRowProps) {
17
+ return `${chalk.bold('from')}: ${from}
18
+ ${chalk.bold('to')}: ${to}
19
+ `;
20
+ }
@@ -0,0 +1,13 @@
1
+ import { LinkToDirResult } from '@teambit/dependency-resolver';
2
+ import chalk from 'chalk';
3
+ import { LinkRow } from './link-row';
4
+
5
+ export function linkToDir(links?: LinkToDirResult[]) {
6
+ if (!links || !links.length) return '';
7
+ const title = chalk.bold.cyan('Target Links');
8
+ const linksOutput = links
9
+ .map(({ componentId, linksDetail }) => LinkRow({ title: componentId, target: linksDetail.to }))
10
+ .join('\n');
11
+
12
+ return `${title}\n${linksOutput}\n`;
13
+ }
@@ -0,0 +1,96 @@
1
+ import { Command, CommandOptions } from '@teambit/cli';
2
+ import { LinkResults } from '@teambit/dependency-resolver';
3
+ import { Logger } from '@teambit/logger';
4
+ import { BASE_DOCS_DOMAIN } from '@teambit/legacy/dist/constants';
5
+ import { timeFormat } from '@teambit/toolbox.time.time-format';
6
+ import chalk from 'chalk';
7
+ import { Workspace, WorkspaceLinkOptions } from '../workspace';
8
+ import { ComponentListLinks } from './component-list-links';
9
+ import { CoreAspectsLinks } from './core-aspects-links';
10
+ import { NestedComponentLinksLinks } from './nested-deps-in-nm-links';
11
+ import { RewireRow } from './rewire-row';
12
+ import { linkToDir } from './link-to-dir';
13
+
14
+ type LinkCommandOpts = {
15
+ rewire: boolean;
16
+ verbose: boolean;
17
+ target: string;
18
+ skipFetchingObjects?: boolean;
19
+ };
20
+ export class LinkCommand implements Command {
21
+ name = 'link [ids...]';
22
+ alias = '';
23
+ description = `generate symlinks to resolve module paths for imported components.\n https://${BASE_DOCS_DOMAIN}/docs/dependencies#missing-links`;
24
+ shortDescription = 'link components and core aspects';
25
+ group = 'development';
26
+ private = false;
27
+ options = [
28
+ ['j', 'json', 'return the output as JSON'],
29
+ ['', 'verbose', 'verbose output'],
30
+ ['r', 'rewire', 'Replace relative paths with module paths in code (e.g. "../foo" => "@bit/foo")'],
31
+ [
32
+ '',
33
+ 'target <dir>',
34
+ 'EXPERIMENTAL. link to an external directory (similar to npm-link) so other projects could use these components',
35
+ ],
36
+ ['', 'skip-fetching-objects', 'skip fetch missing objects from remotes before linking'],
37
+ ] as CommandOptions;
38
+
39
+ constructor(
40
+ /**
41
+ * workspace extension.
42
+ */
43
+ private workspace: Workspace,
44
+
45
+ /**
46
+ * logger extension.
47
+ */
48
+ private logger: Logger
49
+ ) {}
50
+
51
+ async report([ids]: [string[]], opts: LinkCommandOpts) {
52
+ const startTime = Date.now();
53
+ const linkResults = await this.json([ids], opts);
54
+ const endTime = Date.now();
55
+ const numOfComponents = linkResults.legacyLinkResults?.length;
56
+ const timeDiff = timeFormat(endTime - startTime);
57
+ const coreAspectsLinksWithMainAspect = linkResults.coreAspectsLinks || [];
58
+ if (linkResults.teambitBitLink) {
59
+ coreAspectsLinksWithMainAspect.unshift(linkResults.teambitBitLink);
60
+ }
61
+ const numOfCoreAspects = coreAspectsLinksWithMainAspect.length;
62
+
63
+ const title = `Linked ${numOfComponents} components and ${numOfCoreAspects} core aspects to node_modules for workspace: ${this.workspace.name}`;
64
+ const coreLinks = CoreAspectsLinks({
65
+ coreAspectsLinks: coreAspectsLinksWithMainAspect,
66
+ verbose: opts.verbose,
67
+ });
68
+ const compsLinks = ComponentListLinks({ componentListLinks: linkResults.legacyLinkResults, verbose: opts.verbose });
69
+ const rewireRow = RewireRow({ legacyCodemodResults: linkResults.legacyLinkCodemodResults });
70
+ const nestedLinks = NestedComponentLinksLinks({
71
+ nestedDepsInNmLinks: linkResults.nestedDepsInNmLinks,
72
+ verbose: opts.verbose,
73
+ });
74
+ const targetLinks = linkToDir(linkResults.linkToDirResults);
75
+ const footer = `Finished. ${timeDiff}`;
76
+ return `${title}\n${coreLinks}\n${compsLinks}\n${rewireRow}${nestedLinks}${targetLinks}${footer}`;
77
+ }
78
+
79
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
80
+ async json([ids]: [string[]], opts: LinkCommandOpts): Promise<LinkResults> {
81
+ this.logger.console(
82
+ `Linking components and core aspects to node_modules for workspaces: '${chalk.cyan(this.workspace.name)}'`
83
+ );
84
+
85
+ const linkOpts: WorkspaceLinkOptions = {
86
+ legacyLink: true,
87
+ rewire: opts.rewire,
88
+ linkCoreAspects: true,
89
+ linkTeambitBit: true,
90
+ linkToDir: opts.target,
91
+ fetchObject: !opts.skipFetchingObjects,
92
+ };
93
+ const linkResults = await this.workspace.link(linkOpts);
94
+ return linkResults;
95
+ }
96
+ }
@@ -0,0 +1,47 @@
1
+ import chalk from 'chalk';
2
+ import { NestedNMDepsLinksResult } from '@teambit/dependency-resolver';
3
+ import { VerboseLinkRow } from './link-row';
4
+
5
+ type NestedComponentLinksLinksProps = {
6
+ nestedDepsInNmLinks?: NestedNMDepsLinksResult[];
7
+ verbose: boolean;
8
+ };
9
+
10
+ export function NestedComponentLinksLinks({ nestedDepsInNmLinks, verbose = false }: NestedComponentLinksLinksProps) {
11
+ if (!verbose) return '';
12
+ if (!nestedDepsInNmLinks || !nestedDepsInNmLinks.length) {
13
+ return '';
14
+ }
15
+ const title = chalk.bold.cyan('Nested dependencies links');
16
+ const links = nestedDepsInNmLinks
17
+ .map((nestedComponentLinks) =>
18
+ NestedComponentLinks({
19
+ nestedComponentLinks,
20
+ verbose,
21
+ })
22
+ )
23
+ .join('\n');
24
+ return `${title}\n${links}\n`;
25
+ }
26
+
27
+ type NestedComponentLinksProps = {
28
+ nestedComponentLinks: NestedNMDepsLinksResult;
29
+ verbose: boolean;
30
+ };
31
+ function NestedComponentLinks({ nestedComponentLinks, verbose = false }: NestedComponentLinksProps) {
32
+ if (!nestedComponentLinks.linksDetail || nestedComponentLinks.linksDetail.length < 1) return '';
33
+ if (verbose) return VerboseNestedComponentLinks({ nestedComponentLinks });
34
+ return '';
35
+ }
36
+
37
+ type VerboseNestedComponentLinksProps = {
38
+ nestedComponentLinks: NestedNMDepsLinksResult;
39
+ };
40
+ function VerboseNestedComponentLinks({ nestedComponentLinks }: VerboseNestedComponentLinksProps) {
41
+ const id = nestedComponentLinks.componentId.toString();
42
+ const title = chalk.cyan.bold(id);
43
+ const links = nestedComponentLinks.linksDetail
44
+ .map((link) => VerboseLinkRow({ from: link.from, to: link.to }))
45
+ .join('\n');
46
+ return `${title}\n${links}\n`;
47
+ }
@@ -0,0 +1,17 @@
1
+ import { CodemodResult } from '@teambit/legacy/dist/consumer/component-ops/codemod-components';
2
+ import chalk from 'chalk';
3
+
4
+ type RewireRowProps = {
5
+ legacyCodemodResults?: CodemodResult[];
6
+ };
7
+ export function RewireRow({ legacyCodemodResults }: RewireRowProps) {
8
+ if (!legacyCodemodResults || legacyCodemodResults.length < 1) return '';
9
+ const totalComps = legacyCodemodResults?.length;
10
+ const totalFiles = legacyCodemodResults.reduce((acc, curr) => {
11
+ return acc + curr.changedFiles.length || 0;
12
+ }, 0);
13
+
14
+ return `rewired ${chalk.cyan(totalComps.toString())} components and total of ${chalk.cyan(
15
+ totalFiles.toString()
16
+ )} files\n`;
17
+ }
package/list.cmd.tsx ADDED
@@ -0,0 +1,30 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import { Command } from '@teambit/cli';
3
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4
+ import { Text } from 'ink';
5
+ import React from 'react';
6
+
7
+ import { Workspace } from './workspace';
8
+
9
+ export class ListCmd implements Command {
10
+ constructor(private workspace: Workspace) {}
11
+
12
+ name = 'lister';
13
+
14
+ description = 'list all components in the workspace';
15
+
16
+ summery = 'a different text i dont really need';
17
+
18
+ group = 'workspace';
19
+
20
+ alias = '';
21
+
22
+ options = [];
23
+
24
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
25
+ async render(params: any, options: { [key: string]: any }) {
26
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
27
+ const list = await this.workspace.list();
28
+ return <Text color="green">hi there</Text>;
29
+ }
30
+ }