Skip to content

Commit

Permalink
change publisher to work with workspace only, remove createNetworkFro…
Browse files Browse the repository at this point in the history
…mScope method (#2857)
  • Loading branch information
davidfirst committed Jul 17, 2020
1 parent 5bf6535 commit 6bdc653
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 35 deletions.
12 changes: 2 additions & 10 deletions src/extensions/isolator/isolator.extension.ts
Expand Up @@ -9,13 +9,12 @@ import { DependencyResolverExtension } from '../dependency-resolver';
import { Capsule } from './capsule';
import writeComponentsToCapsules from './write-components-to-capsules';
import Consumer from '../../consumer/consumer';
import { Scope } from '../../scope';
import CapsuleList from './capsule-list';
import { CapsuleListCmd } from './capsule-list.cmd';
import { CapsuleCreateCmd } from './capsule-create.cmd';
import Graph from '../../scope/graph/graph'; // TODO: use graph extension?
import { BitId, BitIds } from '../../bit-id';
import { buildOneGraphForComponents, buildOneGraphForComponentsUsingScope } from '../../scope/graph/components-graph';
import { buildOneGraphForComponents } from '../../scope/graph/components-graph';
import PackageJsonFile from '../../consumer/component/package-json-file';
import componentIdToPackageName from '../../utils/bit/component-id-to-package-name';
import { symlinkDependenciesToCapsules } from './symlink-dependencies-to-capsules';
Expand Down Expand Up @@ -72,13 +71,6 @@ export class IsolatorExtension {
opts = Object.assign(opts || {}, { consumer });
return this.createNetwork(seedersIds, graph, baseDir, opts);
}
async createNetworkFromScope(seeders: string[], scope: Scope, opts?: {}): Promise<Network> {
logger.debug(`isolatorExt, createNetworkFromScope ${seeders.join(', ')}`);
const seedersIds = await Promise.all(seeders.map((seeder) => scope.getParsedId(seeder)));
const graph = await buildOneGraphForComponentsUsingScope(seedersIds, scope);
const baseDir = path.join(CAPSULES_BASE_DIR, hash(scope.path)); // TODO: move this logic elsewhere
return this.createNetwork(seedersIds, graph, baseDir, opts);
}
private getBitIdsIncludeVersionsFromGraph(seedersIds: BitId[], graph: Graph): BitId[] {
const components: ConsumerComponent[] = graph.nodes().map((n) => graph.node(n));
return seedersIds.map((seederId) => {
Expand Down Expand Up @@ -116,7 +108,7 @@ export class IsolatorExtension {
);
const capsulesWithPackagesData = await getCapsulesPreviousPackageJson(capsules);

await writeComponentsToCapsules(components, graph, capsules, capsuleList);
await writeComponentsToCapsules(components, capsuleList);
updateWithCurrentPackageJsonData(capsulesWithPackagesData, capsules);
if (config.installPackages) {
const capsulesToInstall: Capsule[] = capsulesWithPackagesData
Expand Down
10 changes: 1 addition & 9 deletions src/extensions/isolator/write-components-to-capsules.ts
@@ -1,18 +1,11 @@
import ConsumerComponent from '../../consumer/component';
import { Capsule } from './capsule';
import CapsuleList from './capsule-list';
import Graph from '../../scope/graph/graph'; // TODO: use graph extension?
import { BitIds } from '../../bit-id';
import { ComponentID } from '../component';
import ComponentWriter, { ComponentWriterProps } from '../../consumer/component-ops/component-writer';
import BitMap from '../../consumer/bit-map';

export default async function writeComponentsToCapsules(
components: ConsumerComponent[],
graph: Graph,
capsules: Capsule[],
capsuleList: CapsuleList
) {
export default async function writeComponentsToCapsules(components: ConsumerComponent[], capsuleList: CapsuleList) {
components = components.map((c) => c.clone());
const allIds = BitIds.fromArray(components.map((c) => c.id));
await Promise.all(
Expand All @@ -25,7 +18,6 @@ export default async function writeComponentsToCapsules(
await component.dataToPersist.persistAllToCapsule(capsule, { keepExistingCapsule: true });
})
);
// return manyComponentsWriter.writtenComponents;
}

function getComponentWriteParams(component: ConsumerComponent, ids: BitIds): ComponentWriterProps {
Expand Down
13 changes: 8 additions & 5 deletions src/extensions/pkg/pack.ts
Expand Up @@ -8,6 +8,8 @@ import { IsolatorExtension } from '../isolator';
import GeneralError from '../../error/general-error';
import IsolatedEnvironment from '../../environment';
import { ComponentID } from '../component';
import { Consumer } from '../../consumer';
import { Workspace } from '../workspace';

export type PackResult = {
pkgJson: Record<any, string>;
Expand All @@ -25,7 +27,7 @@ export type PackOptions = {

export class Packer {
options: PackOptions;
constructor(private isolator: IsolatorExtension, private scope?: LegacyScope) {}
constructor(private isolator: IsolatorExtension, private scope?: LegacyScope, private workspace?: Workspace) {}

async packComponent(componentId: string, scopePath: string | undefined, options: PackOptions): Promise<PackResult> {
this.options = options;
Expand All @@ -37,7 +39,8 @@ export class Packer {
throw new ScopeNotFound(scopePath);
}
if (this.options.useCapsule) {
return this.packUsingCapsule(componentId, scope);
if (!this.workspace) throw new Error('pkg expects to have Workspace when using the new Capsule');
return this.packUsingCapsule(componentId, this.workspace.consumer);
}
return this.packLegacy(componentId, scope);
}
Expand All @@ -62,12 +65,12 @@ export class Packer {
return packResult;
}

private async packUsingCapsule(componentId: string, scope: LegacyScope) {
const bitId = await scope.getParsedId(componentId);
private async packUsingCapsule(componentId: string, consumer: Consumer) {
const bitId = consumer.getParsedId(componentId);
if (!bitId.hasScope()) {
throw new GeneralError(`unable to find "${componentId}" in the scope, make sure the component is tagged first`);
}
const network = await this.isolator.createNetworkFromScope([componentId], scope);
const network = await this.isolator.createNetworkFromConsumer([componentId], consumer);
const capsule = network.capsules.getCapsuleIgnoreVersion(new ComponentID(bitId));
if (!capsule) throw new Error(`capsule not found for ${componentId}`);
return this.runNpmPack(capsule.wrkDir);
Expand Down
16 changes: 12 additions & 4 deletions src/extensions/pkg/pkg.extension.ts
Expand Up @@ -12,6 +12,7 @@ import { IsolatorExtension } from '../isolator';
import { Publisher } from './publisher';
import { LoggerExt, Logger } from '../logger';
import { PublishDryRunTask } from './publish-dry-run.task';
import { WorkspaceExt, Workspace } from '../workspace';

export interface PackageJsonProps {
[key: string]: any;
Expand All @@ -33,18 +34,25 @@ export type ComponentPkgExtensionConfig = {

export class PkgExtension {
static id = '@teambit/pkg';
static dependencies = [CLIExtension, ScopeExtension, Environments, IsolatorExtension, LoggerExt];
static dependencies = [CLIExtension, ScopeExtension, Environments, IsolatorExtension, LoggerExt, WorkspaceExt];
static slots = [Slot.withType<PackageJsonProps>()];
static defaultConfig = {};

static provider(
[cli, scope, envs, isolator, logger]: [CLIExtension, ScopeExtension, Environments, IsolatorExtension, Logger],
[cli, scope, envs, isolator, logger, workspace]: [
CLIExtension,
ScopeExtension,
Environments,
IsolatorExtension,
Logger,
Workspace
],
config: PkgExtensionConfig,
[packageJsonPropsRegistry]: [PackageJsonPropsRegistry]
) {
const logPublisher = logger.createLogPublisher(PkgExtension.id);
const packer = new Packer(isolator, scope?.legacyScope);
const publisher = new Publisher(isolator, logPublisher, scope?.legacyScope);
const packer = new Packer(isolator, scope?.legacyScope, workspace);
const publisher = new Publisher(isolator, logPublisher, scope?.legacyScope, workspace);
const dryRunTask = new PublishDryRunTask(PkgExtension.id, publisher);
const pkg = new PkgExtension(config, packageJsonPropsRegistry, packer, envs, dryRunTask);

Expand Down
10 changes: 3 additions & 7 deletions src/extensions/pkg/publisher.ts
Expand Up @@ -2,12 +2,12 @@ import execa from 'execa';
import { IsolatorExtension, Capsule } from '../isolator';
import { Scope } from '../../scope';
import { LogPublisher } from '../types';
import { loadConsumer } from '../../consumer';
import { BitId, BitIds } from '../../bit-id';
import { ComponentID } from '../component';
import { PublishPostExportResult } from '../../scope/component-ops/publish-during-export';
import GeneralError from '../../error/general-error';
import { ExtensionDataList } from '../../consumer/config/extension-data';
import { Workspace } from '../workspace';

export type PublisherOptions = {
dryRun?: boolean;
Expand All @@ -22,6 +22,7 @@ export class Publisher {
private isolator: IsolatorExtension,
private logger: LogPublisher,
private scope: Scope,
private workspace: Workspace,
public options: PublisherOptions = {}
) {}

Expand Down Expand Up @@ -73,16 +74,11 @@ export class Publisher {
}

private async getComponentCapsules(componentIds: string[]): Promise<Capsule[]> {
// @todo hack alert!
// currently, when loading a component from the model, it doesn't load the extension
// as such, the package json value such as the main-file is not loaded from the env.
// change it back to `createNetworkFromScope` once Gilad fixes it.
const consumer = await loadConsumer();
const consumer = this.workspace.consumer;
if (consumer.isLegacy) {
// publish is supported on Harmony only
return [];
}
// const network = await this.isolator.createNetworkFromScope(componentIds, this.scope);
const idsToPublish = await this.getIdsToPublish(componentIds);
const network = await this.isolator.createNetworkFromConsumer(idsToPublish, consumer);
return network.seedersCapsules;
Expand Down

0 comments on commit 6bdc653

Please sign in to comment.