Skip to content

Commit

Permalink
refactor Compiler extension and fix "main" package.json prop during l…
Browse files Browse the repository at this point in the history
…ink process (#2863)

* refactor compiler extesnsion - remove dead code, change render() to report()

* rename src/extensions/compiler/compiler.cmd.tsx to src/extensions/compiler/compiler.cmd.ts

* restructure the "compile" class, extract the new compiler code to a new class CompileComponent

* fix "main" prop of package.json written for author to have the correct file given by the extensions

* rename src/extensions/compiler/compile.ts to src/extensions/compiler/workspace-compiler.ts
  • Loading branch information
davidfirst committed Jul 19, 2020
1 parent 09a5fec commit 030eeb7
Show file tree
Hide file tree
Showing 15 changed files with 238 additions and 254 deletions.
2 changes: 1 addition & 1 deletion e2e/harmony/compile.e2e.4.ts
Expand Up @@ -24,12 +24,12 @@ describe('compile extension', function () {
before(() => {
helper.scopeHelper.setNewLocalAndRemoteScopes();
helper.bitJsonc.addDefaultScope();
appOutput = helper.fixtures.populateComponentsTS(3, undefined, true);
const environments = {
env: '@teambit/react',
config: {},
};
helper.extensions.addExtensionToVariant('*', '@teambit/envs', environments);
appOutput = helper.fixtures.populateComponentsTS(3, undefined, true);
scopeBeforeTag = helper.scopeHelper.cloneLocalScope();
});
describe('compile from the cmd (compilation for development)', () => {
Expand Down
19 changes: 1 addition & 18 deletions src/consumer/component-ops/component-writer.ts
Expand Up @@ -20,7 +20,6 @@ import ComponentConfig from '../config/component-config';
import PackageJsonFile from '../component/package-json-file';
import ShowDoctorError from '../../error/show-doctor-error';
import { Artifact } from '../component/sources/artifact';
import { replacePlaceHolderWithComponentValue } from '../../utils/bit/component-placeholders';
import { BitIds } from '../../bit-id';

export type ComponentWriterProps = {
Expand Down Expand Up @@ -183,7 +182,7 @@ export default class ComponentWriter {
componentConfig.setTester(this.component.tester ? this.component.tester.toBitJsonObject() : {});
packageJson.addOrUpdateProperty('bit', componentConfig.toPlainObject());
if (this.applyExtensionsAddedConfig) {
this._mergePackageJsonPropsFromExtensions(packageJson);
packageJson.mergePropsFromExtensions(this.component);
}
this._mergeChangedPackageJsonProps(packageJson);
this._mergePackageJsonPropsFromOverrides(packageJson);
Expand Down Expand Up @@ -245,22 +244,6 @@ export default class ComponentWriter {
});
}

/**
* these changes were added by extensions
*/
_mergePackageJsonPropsFromExtensions(packageJson: PackageJsonFile) {
// The special keys will be merged in other place
const specialKeys = ['extensions', 'dependencies', 'devDependencies', 'peerDependencies'];
if (!this.component.extensionsAddedConfig || R.isEmpty(this.component.extensionsAddedConfig)) return;
const valuesToMerge = R.omit(specialKeys, this.component.extensionsAddedConfig);
const valuesToMergeFormatted = Object.keys(valuesToMerge).reduce((acc, current) => {
const value = replacePlaceHolderWithComponentValue(this.component, valuesToMerge[current]);
acc[current] = value;
return acc;
}, {});
packageJson.mergePackageJsonObject(valuesToMergeFormatted);
}

/**
* these changes were entered manually by a user via `overrides` key
*/
Expand Down
17 changes: 17 additions & 0 deletions src/consumer/component/package-json-file.ts
Expand Up @@ -12,6 +12,7 @@ import Component from './consumer-component';
import componentIdToPackageName from '../../utils/bit/component-id-to-package-name';
import PackageJsonVinyl from './package-json-vinyl';
import { Capsule } from '../../extensions/isolator';
import { replacePlaceHolderWithComponentValue } from '../../utils/bit/component-placeholders';

/**
* when a package.json file is loaded, we save the indentation and the type of newline it uses, so
Expand Down Expand Up @@ -216,6 +217,22 @@ export default class PackageJsonFile {
return clone;
}

/**
* these changes were added by extensions
*/
mergePropsFromExtensions(component: Component) {
// The special keys will be merged in other place
const specialKeys = ['extensions', 'dependencies', 'devDependencies', 'peerDependencies'];
if (!component.extensionsAddedConfig || R.isEmpty(component.extensionsAddedConfig)) return;
const valuesToMerge = R.omit(specialKeys, component.extensionsAddedConfig);
const valuesToMergeFormatted = Object.keys(valuesToMerge).reduce((acc, current) => {
const value = replacePlaceHolderWithComponentValue(component, valuesToMerge[current]);
acc[current] = value;
return acc;
}, {});
this.mergePackageJsonObject(valuesToMergeFormatted);
}

static propsNonUserChangeable() {
return ['name', 'version', 'main', 'dependencies', 'devDependencies', 'peerDependencies', 'license', 'bit'];
}
Expand Down
203 changes: 0 additions & 203 deletions src/extensions/compiler/compile.ts

This file was deleted.

@@ -1,6 +1,5 @@
import React from 'react';
import { Command, CommandOptions } from '../cli';
import { Compile } from './compile';
import { WorkspaceCompiler } from './workspace-compiler';

export class CompileCmd implements Command {
name = 'compile [component...]';
Expand All @@ -15,20 +14,18 @@ export class CompileCmd implements Command {
['j', 'json', 'return the compile results in json format'],
] as CommandOptions;

constructor(private compile: Compile) {}
constructor(private compile: WorkspaceCompiler) {}

async render([components]: [string[]], { verbose, noCache }: { verbose: boolean; noCache: boolean }) {
// @ts-ignore
const compileResults = await this.compile.compileOnWorkspace(components, { verbose, noCache });
async report([components]: [string[]], { verbose, noCache }: { verbose: boolean; noCache: boolean }) {
const compileResults = await this.compile.compileComponents(components, { verbose, noCache });
// eslint-disable-next-line no-console
console.log('compileResults', compileResults);
const output = `${compileResults.length} components have been compiled successfully`;
return <div>{output}</div>;
return `${compileResults.length} components have been compiled successfully`;
}

async json([components]: [string[]], { verbose, noCache }: { verbose: boolean; noCache: boolean }) {
// @ts-ignore
const compileResults = await this.compile.compileOnWorkspace(components, { verbose, noCache });
const compileResults = await this.compile.compileComponents(components, { verbose, noCache });
return {
data: compileResults,
// @todo: fix the code once compile is ready.
Expand Down
20 changes: 16 additions & 4 deletions src/extensions/compiler/compiler.extension.ts
Expand Up @@ -3,17 +3,29 @@ import { Environments } from '../environments';
import { Workspace } from '../workspace';
import { CLIExtension } from '../cli';
import { CompileCmd } from './compiler.cmd';
import { Compile } from './compile';
import { WorkspaceCompiler } from './workspace-compiler';
import { CompilerTask } from './compiler.task';
import { Extensions } from '../../constants';
import { BitId } from '../../bit-id';

export class CompilerExtension {
static id = Extensions.compiler;
static dependencies = [CLIExtension, WorkspaceExt, Environments];
constructor(private workspaceCompiler: WorkspaceCompiler, readonly task: CompilerTask) {}
compileOnWorkspace(
componentsIds: string[] | BitId[], // when empty, it compiles all
options: {
noCache?: boolean;
verbose?: boolean;
}
) {
return this.workspaceCompiler.compileComponents(componentsIds, options);
}
static async provider([cli, workspace, envs]: [CLIExtension, Workspace, Environments]) {
const compilerTask = new CompilerTask(CompilerExtension.id);
const compile = new Compile(workspace, envs, compilerTask);
cli.register(new CompileCmd(compile));
return compile;
const workspaceCompiler = new WorkspaceCompiler(workspace, envs);
const compilerExtension = new CompilerExtension(workspaceCompiler, compilerTask);
cli.register(new CompileCmd(workspaceCompiler));
return compilerExtension;
}
}
3 changes: 1 addition & 2 deletions src/extensions/compiler/compiler.task.ts
@@ -1,5 +1,4 @@
import { BuildContext } from '../builder';
import { BuildTask, BuildResults } from '../builder';
import { BuildTask, BuildContext, BuildResults } from '../builder';
import { Compiler } from './types';

/**
Expand Down
1 change: 0 additions & 1 deletion src/extensions/compiler/index.ts
@@ -1,3 +1,2 @@
export { Compile } from './compile';
export { Compiler } from './types';
export { CompilerExtension } from './compiler.extension';

0 comments on commit 030eeb7

Please sign in to comment.