From 013e1faf278dc972f663a455a23e1d53344db9b3 Mon Sep 17 00:00:00 2001 From: Tobias Bosch Date: Wed, 11 Feb 2015 11:40:29 -0800 Subject: [PATCH] fix(build): support transpile to commonjs --- README.md | 2 +- gulpfile.js | 92 +++++++------------ modules/angular2/e2e_test/perf_util.es6 | 2 +- modules/angular2/e2e_test/test_util.es6 | 2 +- .../angular2/src/core/zone/vm_turn_zone.es6 | 4 +- modules/angular2/src/facade/async.es6 | 7 +- modules/angular2/src/facade/collection.es6 | 8 +- modules/angular2/src/facade/dom.es6 | 4 +- modules/angular2/src/facade/lang.dart | 2 +- modules/angular2/src/facade/lang.es6 | 17 ++-- modules/angular2/src/facade/math.es6 | 4 +- .../e2e_test/change_detection_perf.es6 | 2 +- .../e2e_test/change_detection_spec.es6 | 2 +- modules/benchmarks/e2e_test/compiler_perf.es6 | 2 +- modules/benchmarks/e2e_test/compiler_spec.es6 | 2 +- modules/benchmarks/e2e_test/di_perf.es6 | 2 +- modules/benchmarks/e2e_test/di_spec.es6 | 2 +- .../e2e_test/element_injector_perf.es6 | 2 +- .../e2e_test/element_injector_spec.es6 | 2 +- .../e2e_test/naive_infinite_scroll_perf.es6 | 2 +- .../e2e_test/naive_infinite_scroll_spec.es6 | 2 +- modules/benchmarks/e2e_test/selector_perf.es6 | 2 +- modules/benchmarks/e2e_test/selector_spec.es6 | 2 +- modules/benchmarks/e2e_test/tree_perf.es6 | 2 +- modules/benchmarks/e2e_test/tree_spec.es6 | 2 +- .../e2e_test/compiler_perf.es6 | 2 +- .../e2e_test/compiler_spec.es6 | 2 +- .../e2e_test/largetable_perf.es6 | 2 +- .../e2e_test/largetable_spec.es6 | 2 +- .../e2e_test/naive_infinite_scroll_perf.es6 | 2 +- .../e2e_test/naive_infinite_scroll_spec.es6 | 2 +- .../e2e_test/tree_perf.es6 | 2 +- .../e2e_test/tree_spec.es6 | 2 +- .../e2e_test/hello_world/hello_world_spec.es6 | 2 +- package.json | 1 + protractor-e2e-dart2js.conf.js | 2 +- protractor-e2e-js.conf.js | 2 +- protractor-e2e-shared.js | 3 +- protractor-perf-dart2js.conf.js | 2 +- protractor-perf-js.conf.js | 2 +- protractor-perf-shared.js | 8 +- tools/build/linknodemodules.js | 32 +++++++ tools/transpiler/index.js | 27 ++++++ tools/transpiler/unittest/transpilertests.js | 32 +++++++ 44 files changed, 189 insertions(+), 112 deletions(-) create mode 100644 tools/build/linknodemodules.js diff --git a/README.md b/README.md index 45493286db..f1f1986215 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ to the preprocessor and run the tests without exiting karma ### Performance tests -1. `gulp build.cjs` (builds benchpress and tests into `dist/cjs` folder) +1. `gulp build.js.cjs` (builds benchpress and tests into `dist/js/cjs` folder) 2. `gulp serve.js.prod serve.js.dart2js` (runs local webserver) 3. `protractor protractor-perf-js.conf.js`: JS performance tests 4. `protractor protractor-perf-dart2js.conf.js`: Dart2JS performance tests diff --git a/gulpfile.js b/gulpfile.js index d1a68cd852..6eb0aafaf0 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -9,6 +9,7 @@ var deps = require('./tools/build/deps'); var transpile = require('./tools/build/transpile'); var html = require('./tools/build/html'); var pubspec = require('./tools/build/pubspec'); +var linknodemodules = require('./tools/build/linknodemodules'); var pubbuild = require('./tools/build/pubbuild'); var dartanalyzer = require('./tools/build/dartanalyzer'); var jsserve = require('./tools/build/jsserve'); @@ -32,18 +33,6 @@ var _COMPILER_CONFIG_JS_DEFAULT = { modules: 'instantiate' }; -var CJS_COMPILER_OPTIONS = { - sourceMaps: true, - annotations: false, // parse annotations - types: false, // parse types - // TODO(tbosch): Right now, traceur generates imports that - // rely on absolute paths. This is why we are not using this... - script: true, // parse as a script - memberVariables: false, // parse class fields - typeAssertions: false, - modules: null // not needed -}; - var _HTLM_DEFAULT_SCRIPTS_JS = [ {src: '/deps/traceur-runtime.js', mimeType: 'text/javascript'}, {src: '/rtts_assert/rtts_assert.js', mimeType: 'text/javascript'}, @@ -76,14 +65,10 @@ var CONFIG = { es6: 'dist/js/prod/es6', es5: 'dist/js/prod/es5' }, + cjs: 'dist/js/cjs', dart2js: 'dist/js/dart2js' }, dart: 'dist/dart', - cjs: { - all: 'dist/cjs', - tools: 'dist/cjs/tools', - e2eTest: 'dist/cjs/e2e_test' - }, docs: 'dist/docs' }, srcFolderInsertion: { @@ -119,20 +104,12 @@ var CONFIG = { }, transpile: { src: { - js: ['modules/**/*.js', 'modules/**/*.es6', '!modules/**/e2e_test/**'], - dart: ['modules/**/*.js', '!modules/**/e2e_test/**'], - cjs: { - tools: ['tools/**/*.es6', '!tools/transpiler/**'], - e2eTest: ['modules/**/e2e_test/**/*.es6'] - } + js: ['modules/**/*.js', 'modules/**/*.es6'], + dart: ['modules/**/*.js'], }, copy: { - js: ['modules/**/*.es5', '!modules/**/e2e_test/**'], + js: ['modules/**/*.es5'], dart: ['modules/**/*.dart', '!modules/**/e2e_test/**'], - cjs: { - tools: ['tools/**/*.es5', '!tools/transpiler/**'], - e2eTest: ['modules/**/e2e_test/**/*.es5'] - } }, options: { js: { @@ -144,6 +121,11 @@ var CONFIG = { prod: merge(true, _COMPILER_CONFIG_JS_DEFAULT, { typeAssertions: false, outputLanguage: 'es6' + }), + cjs: merge(true, _COMPILER_CONFIG_JS_DEFAULT, { + typeAssertionModule: 'rtts_assert/rtts_assert', + typeAssertions: true, + modules: 'commonjs' }) }, dart: { @@ -153,8 +135,7 @@ var CONFIG = { script: false, // parse as a module memberVariables: true, // parse class fields outputLanguage: 'dart' - }, - cjs: CJS_COMPILER_OPTIONS + } } }, copy: { @@ -214,10 +195,6 @@ gulp.task('build/clean.dart', clean(gulp, gulpPlugins, { path: CONFIG.dest.dart })); -gulp.task('build/clean.cjs', clean(gulp, gulpPlugins, { - path: CONFIG.dest.cjs.all -})); - gulp.task('build/clean.docs', clean(gulp, gulpPlugins, { path: CONFIG.dest.docs })); @@ -294,6 +271,15 @@ gulp.task('build/transpile.js.prod', function(done) { ); }); +gulp.task('build/transpile.js.cjs', transpile(gulp, gulpPlugins, { + src: CONFIG.transpile.src.js.concat(['tools/benchp*/**/*.es6']), + copy: CONFIG.transpile.copy.js, + dest: CONFIG.dest.js.cjs, + outputExt: 'js', + options: CONFIG.transpile.options.js.cjs, + srcFolderInsertion: CONFIG.srcFolderInsertion.js +})); + gulp.task('build/transpile.dart', transpile(gulp, gulpPlugins, { src: CONFIG.transpile.src.dart, copy: CONFIG.transpile.copy.dart, @@ -303,24 +289,6 @@ gulp.task('build/transpile.dart', transpile(gulp, gulpPlugins, { srcFolderInsertion: CONFIG.srcFolderInsertion.dart })); -gulp.task('build/transpile/tools.cjs', transpile(gulp, gulpPlugins, { - src: CONFIG.transpile.src.cjs.tools, - copy: CONFIG.transpile.copy.cjs.tools, - dest: CONFIG.dest.cjs.tools, - outputExt: 'js', - options: CONFIG.transpile.options.cjs, - srcFolderInsertion: CONFIG.srcFolderInsertion.js -})); - -gulp.task('build/transpile/e2eTest.cjs', transpile(gulp, gulpPlugins, { - src: CONFIG.transpile.src.cjs.e2eTest, - copy: CONFIG.transpile.copy.cjs.e2eTest, - dest: CONFIG.dest.cjs.e2eTest, - outputExt: 'js', - options: CONFIG.transpile.options.cjs, - srcFolderInsertion: CONFIG.srcFolderInsertion.js -})); - // ------------ // html @@ -394,6 +362,13 @@ gulp.task('build/pubspec.dart', pubspec(gulp, gulpPlugins, { command: DART_SDK.PUB })); +// ------------ +// linknodemodules + +gulp.task('build/linknodemodules.js.cjs', linknodemodules(gulp, gulpPlugins, { + dir: CONFIG.dest.js.cjs +})); + // ------------ // dartanalyzer @@ -571,15 +546,16 @@ gulp.task('build.js.prod', function(done) { ); }); -gulp.task('build.cjs', function(done) { +gulp.task('build.js.cjs', function(done) { runSequence( - ['build/transpile/tools.cjs', 'build/transpile/e2eTest.cjs'], + 'build/transpile.js.cjs', + 'build/linknodemodules.js.cjs', done - ); + );; }); -gulp.task('build.js', ['build.js.dev', 'build.js.prod']); +gulp.task('build.js', ['build.js.dev', 'build.js.prod', 'build.js.cjs']); -gulp.task('clean', ['build/clean.js', 'build/clean.dart', 'build/clean.cjs', 'build/clean.docs']); +gulp.task('clean', ['build/clean.js', 'build/clean.dart', 'build/clean.docs']); -gulp.task('build', ['build.js', 'build.dart', 'build.cjs']); +gulp.task('build', ['build.js', 'build.dart']); diff --git a/modules/angular2/e2e_test/perf_util.es6 b/modules/angular2/e2e_test/perf_util.es6 index 274ae2b4d9..fe08c66114 100644 --- a/modules/angular2/e2e_test/perf_util.es6 +++ b/modules/angular2/e2e_test/perf_util.es6 @@ -1,4 +1,4 @@ -var benchpress = require('../../../tools/benchpress/index.js'); +var benchpress = require('benchpress/index.js'); var webdriver = require('protractor/node_modules/selenium-webdriver'); module.exports = { diff --git a/modules/angular2/e2e_test/test_util.es6 b/modules/angular2/e2e_test/test_util.es6 index bfc829f492..ae50d874ef 100644 --- a/modules/angular2/e2e_test/test_util.es6 +++ b/modules/angular2/e2e_test/test_util.es6 @@ -1,4 +1,4 @@ -var benchpress = require('../../../tools/benchpress/index.js'); +var benchpress = require('benchpress/index.js'); module.exports = { verifyNoBrowserErrors: benchpress.verifyNoBrowserErrors, diff --git a/modules/angular2/src/core/zone/vm_turn_zone.es6 b/modules/angular2/src/core/zone/vm_turn_zone.es6 index 8207eeb68f..e5abf8ebba 100644 --- a/modules/angular2/src/core/zone/vm_turn_zone.es6 +++ b/modules/angular2/src/core/zone/vm_turn_zone.es6 @@ -1,5 +1,5 @@ import {List, ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection'; -import {normalizeBlank, isPresent} from 'angular2/src/facade/lang'; +import {normalizeBlank, isPresent, global} from 'angular2/src/facade/lang'; export class VmTurnZone { _outerZone; @@ -17,7 +17,7 @@ export class VmTurnZone { this._onTurnDone = null; this._onErrorHandler = null; - this._outerZone = window.zone; + this._outerZone = global.zone; this._innerZone = this._createInnerZone(this._outerZone, enableLongStackTrace); } diff --git a/modules/angular2/src/facade/async.es6 b/modules/angular2/src/facade/async.es6 index 3428347ef6..3f8cd85539 100644 --- a/modules/angular2/src/facade/async.es6 +++ b/modules/angular2/src/facade/async.es6 @@ -1,6 +1,7 @@ -import {int} from 'angular2/src/facade/lang'; +import {int, global} from 'angular2/src/facade/lang'; import {List} from 'angular2/src/facade/collection'; -export var Promise = window.Promise; + +export var Promise = global.Promise; export class PromiseWrapper { static resolve(obj):Promise { @@ -37,7 +38,7 @@ export class PromiseWrapper { } static setTimeout(fn:Function, millis:int) { - window.setTimeout(fn, millis); + global.setTimeout(fn, millis); } static isPromise(maybePromise):boolean { diff --git a/modules/angular2/src/facade/collection.es6 b/modules/angular2/src/facade/collection.es6 index ef1f885703..bd5572e996 100644 --- a/modules/angular2/src/facade/collection.es6 +++ b/modules/angular2/src/facade/collection.es6 @@ -1,8 +1,8 @@ -import {int, isJsObject} from 'angular2/src/facade/lang'; +import {int, isJsObject, global} from 'angular2/src/facade/lang'; -export var List = window.Array; -export var Map = window.Map; -export var Set = window.Set; +export var List = global.Array; +export var Map = global.Map; +export var Set = global.Set; export class MapWrapper { static create():Map { return new Map(); } diff --git a/modules/angular2/src/facade/dom.es6 b/modules/angular2/src/facade/dom.es6 index bd14f254f4..2721928d35 100644 --- a/modules/angular2/src/facade/dom.es6 +++ b/modules/angular2/src/facade/dom.es6 @@ -1,3 +1,5 @@ +import {List, MapWrapper, ListWrapper} from 'angular2/src/facade/collection'; + export var window = frames.window; export var DocumentFragment = window.DocumentFragment; export var Node = window.Node; @@ -10,8 +12,6 @@ export var document = window.document; export var location = window.location; export var gc = window.gc ? () => window.gc() : () => null; -import {List, MapWrapper, ListWrapper} from 'angular2/src/facade/collection'; - export class DOM { static query(selector) { return document.querySelector(selector); diff --git a/modules/angular2/src/facade/lang.dart b/modules/angular2/src/facade/lang.dart index d740c147a3..ef4a9aeb40 100644 --- a/modules/angular2/src/facade/lang.dart +++ b/modules/angular2/src/facade/lang.dart @@ -1,6 +1,6 @@ library angular.core.facade.lang; -export 'dart:core' show Type, RegExp; +export 'dart:core' show Type, RegExp, print; import 'dart:math' as math; class Math { diff --git a/modules/angular2/src/facade/lang.es6 b/modules/angular2/src/facade/lang.es6 index 7bd020aac5..191367c468 100644 --- a/modules/angular2/src/facade/lang.es6 +++ b/modules/angular2/src/facade/lang.es6 @@ -1,7 +1,10 @@ export {proxy} from 'rtts_assert/rtts_assert'; +var _global = typeof window === 'undefined' ? global : window; +export {_global as global}; + export var Type = Function; -export var Math = window.Math; +export var Math = _global.Math; var assertionsEnabled_ = typeof assert !== 'undefined'; @@ -9,14 +12,14 @@ var int; // global assert support, as Dart has it... // TODO: `assert` calls need to be removed in production code! if (assertionsEnabled_) { - window.assert = assert; + _global.assert = assert; // `int` is not a valid JS type int = assert.define('int', function(value) { return typeof value === 'number' && value%1 === 0; }); } else { int = {}; - window.assert = function() {}; + _global.assert = function() {}; } export {int}; @@ -173,8 +176,8 @@ var RegExp; if (assertionsEnabled_) { RegExp = assert.define('RegExp', function(obj) { assert(obj).is(assert.structure({ - single: window.RegExp, - multiple: window.RegExp + single: _global.RegExp, + multiple: _global.RegExp })); }); } else { @@ -185,8 +188,8 @@ export class RegExpWrapper { static create(regExpStr, flags:string = ''):RegExp { flags = flags.replace(/g/g, ''); return { - multiple: new window.RegExp(regExpStr, flags + 'g'), - single: new window.RegExp(regExpStr, flags) + multiple: new _global.RegExp(regExpStr, flags + 'g'), + single: new _global.RegExp(regExpStr, flags) }; } static firstMatch(regExp, input) { diff --git a/modules/angular2/src/facade/math.es6 b/modules/angular2/src/facade/math.es6 index e85edbda98..b97db71e19 100644 --- a/modules/angular2/src/facade/math.es6 +++ b/modules/angular2/src/facade/math.es6 @@ -1 +1,3 @@ -export var Math = window.Math; \ No newline at end of file +import {global} from 'angular2/src/facade/lang'; + +export var Math = global.Math; \ No newline at end of file diff --git a/modules/benchmarks/e2e_test/change_detection_perf.es6 b/modules/benchmarks/e2e_test/change_detection_perf.es6 index cf0f327863..294d7e9d4f 100644 --- a/modules/benchmarks/e2e_test/change_detection_perf.es6 +++ b/modules/benchmarks/e2e_test/change_detection_perf.es6 @@ -1,4 +1,4 @@ -var perfUtil = require('../../angular2/e2e_test/perf_util'); +var perfUtil = require('angular2/e2e_test/perf_util'); describe('ng2 change detection benchmark', function () { diff --git a/modules/benchmarks/e2e_test/change_detection_spec.es6 b/modules/benchmarks/e2e_test/change_detection_spec.es6 index 062f30f3c0..52972403df 100644 --- a/modules/benchmarks/e2e_test/change_detection_spec.es6 +++ b/modules/benchmarks/e2e_test/change_detection_spec.es6 @@ -1,4 +1,4 @@ -var testUtil = require('../../angular2/e2e_test/test_util'); +var testUtil = require('angular2/e2e_test/test_util'); describe('ng2 change detection benchmark', function () { diff --git a/modules/benchmarks/e2e_test/compiler_perf.es6 b/modules/benchmarks/e2e_test/compiler_perf.es6 index 89056f121d..795830b9d8 100644 --- a/modules/benchmarks/e2e_test/compiler_perf.es6 +++ b/modules/benchmarks/e2e_test/compiler_perf.es6 @@ -1,4 +1,4 @@ -var perfUtil = require('../../angular2/e2e_test/perf_util'); +var perfUtil = require('angular2/e2e_test/perf_util'); describe('ng2 compiler benchmark', function () { diff --git a/modules/benchmarks/e2e_test/compiler_spec.es6 b/modules/benchmarks/e2e_test/compiler_spec.es6 index 8a155eb898..2691de8a47 100644 --- a/modules/benchmarks/e2e_test/compiler_spec.es6 +++ b/modules/benchmarks/e2e_test/compiler_spec.es6 @@ -1,4 +1,4 @@ -var testUtil = require('../../angular2/e2e_test/test_util'); +var testUtil = require('angular2/e2e_test/test_util'); describe('ng2 compiler benchmark', function () { diff --git a/modules/benchmarks/e2e_test/di_perf.es6 b/modules/benchmarks/e2e_test/di_perf.es6 index 56e7e6f3db..63c5f2f1e3 100644 --- a/modules/benchmarks/e2e_test/di_perf.es6 +++ b/modules/benchmarks/e2e_test/di_perf.es6 @@ -1,4 +1,4 @@ -var perfUtil = require('../../angular2/e2e_test/perf_util'); +var perfUtil = require('angular2/e2e_test/perf_util'); describe('ng2 di benchmark', function () { diff --git a/modules/benchmarks/e2e_test/di_spec.es6 b/modules/benchmarks/e2e_test/di_spec.es6 index 634ed3d10e..c1c3d66978 100644 --- a/modules/benchmarks/e2e_test/di_spec.es6 +++ b/modules/benchmarks/e2e_test/di_spec.es6 @@ -1,4 +1,4 @@ -var testUtil = require('../../angular2/e2e_test/test_util'); +var testUtil = require('angular2/e2e_test/test_util'); describe('ng2 di benchmark', function () { diff --git a/modules/benchmarks/e2e_test/element_injector_perf.es6 b/modules/benchmarks/e2e_test/element_injector_perf.es6 index 198b2cdc1c..d176b58259 100644 --- a/modules/benchmarks/e2e_test/element_injector_perf.es6 +++ b/modules/benchmarks/e2e_test/element_injector_perf.es6 @@ -1,4 +1,4 @@ -var perfUtil = require('../../angular2/e2e_test/perf_util'); +var perfUtil = require('angular2/e2e_test/perf_util'); describe('ng2 element injector benchmark', function () { diff --git a/modules/benchmarks/e2e_test/element_injector_spec.es6 b/modules/benchmarks/e2e_test/element_injector_spec.es6 index 2a6ee0d774..71d9cd4757 100644 --- a/modules/benchmarks/e2e_test/element_injector_spec.es6 +++ b/modules/benchmarks/e2e_test/element_injector_spec.es6 @@ -1,4 +1,4 @@ -var testUtil = require('../../angular2/e2e_test/test_util'); +var testUtil = require('angular2/e2e_test/test_util'); describe('ng2 element injector benchmark', function () { diff --git a/modules/benchmarks/e2e_test/naive_infinite_scroll_perf.es6 b/modules/benchmarks/e2e_test/naive_infinite_scroll_perf.es6 index 072d0ef2f9..1dea913fbb 100644 --- a/modules/benchmarks/e2e_test/naive_infinite_scroll_perf.es6 +++ b/modules/benchmarks/e2e_test/naive_infinite_scroll_perf.es6 @@ -1,4 +1,4 @@ -var perfUtil = require('../../angular2/e2e_test/perf_util'); +var perfUtil = require('angular2/e2e_test/perf_util'); describe('ng2 naive infinite scroll benchmark', function () { diff --git a/modules/benchmarks/e2e_test/naive_infinite_scroll_spec.es6 b/modules/benchmarks/e2e_test/naive_infinite_scroll_spec.es6 index b27826f4d8..e95c2e05ed 100644 --- a/modules/benchmarks/e2e_test/naive_infinite_scroll_spec.es6 +++ b/modules/benchmarks/e2e_test/naive_infinite_scroll_spec.es6 @@ -1,4 +1,4 @@ -var testUtil = require('../../angular2/e2e_test/test_util'); +var testUtil = require('angular2/e2e_test/test_util'); describe('ng2 naive infinite scroll benchmark', function () { diff --git a/modules/benchmarks/e2e_test/selector_perf.es6 b/modules/benchmarks/e2e_test/selector_perf.es6 index c7c9016739..9b7344a7ff 100644 --- a/modules/benchmarks/e2e_test/selector_perf.es6 +++ b/modules/benchmarks/e2e_test/selector_perf.es6 @@ -1,4 +1,4 @@ -var perfUtil = require('../../angular2/e2e_test/perf_util'); +var perfUtil = require('angular2/e2e_test/perf_util'); describe('ng2 selector benchmark', function () { diff --git a/modules/benchmarks/e2e_test/selector_spec.es6 b/modules/benchmarks/e2e_test/selector_spec.es6 index 6e2516acc8..df0564eba2 100644 --- a/modules/benchmarks/e2e_test/selector_spec.es6 +++ b/modules/benchmarks/e2e_test/selector_spec.es6 @@ -1,4 +1,4 @@ -var testUtil = require('../../angular2/e2e_test/test_util'); +var testUtil = require('angular2/e2e_test/test_util'); describe('ng2 selector benchmark', function () { diff --git a/modules/benchmarks/e2e_test/tree_perf.es6 b/modules/benchmarks/e2e_test/tree_perf.es6 index 0d744e0ce9..1ee47fbaf3 100644 --- a/modules/benchmarks/e2e_test/tree_perf.es6 +++ b/modules/benchmarks/e2e_test/tree_perf.es6 @@ -1,4 +1,4 @@ -var perfUtil = require('../../angular2/e2e_test/perf_util'); +var perfUtil = require('angular2/e2e_test/perf_util'); describe('ng2 tree benchmark', function () { diff --git a/modules/benchmarks/e2e_test/tree_spec.es6 b/modules/benchmarks/e2e_test/tree_spec.es6 index 42f4984b74..c4a53b24c1 100644 --- a/modules/benchmarks/e2e_test/tree_spec.es6 +++ b/modules/benchmarks/e2e_test/tree_spec.es6 @@ -1,4 +1,4 @@ -var testUtil = require('../../angular2/e2e_test/test_util'); +var testUtil = require('angular2/e2e_test/test_util'); describe('ng2 tree benchmark', function () { diff --git a/modules/benchmarks_external/e2e_test/compiler_perf.es6 b/modules/benchmarks_external/e2e_test/compiler_perf.es6 index f6f49cbe19..d6c9bfb1ed 100644 --- a/modules/benchmarks_external/e2e_test/compiler_perf.es6 +++ b/modules/benchmarks_external/e2e_test/compiler_perf.es6 @@ -1,4 +1,4 @@ -var perfUtil = require('../../angular2/e2e_test/perf_util'); +var perfUtil = require('angular2/e2e_test/perf_util'); describe('ng1.x compiler benchmark', function () { diff --git a/modules/benchmarks_external/e2e_test/compiler_spec.es6 b/modules/benchmarks_external/e2e_test/compiler_spec.es6 index d67843127b..99be03e254 100644 --- a/modules/benchmarks_external/e2e_test/compiler_spec.es6 +++ b/modules/benchmarks_external/e2e_test/compiler_spec.es6 @@ -1,4 +1,4 @@ -var testUtil = require('../../angular2/e2e_test/test_util'); +var testUtil = require('angular2/e2e_test/test_util'); describe('ng1.x compiler benchmark', function () { diff --git a/modules/benchmarks_external/e2e_test/largetable_perf.es6 b/modules/benchmarks_external/e2e_test/largetable_perf.es6 index dd54e5be3e..146fe2d418 100644 --- a/modules/benchmarks_external/e2e_test/largetable_perf.es6 +++ b/modules/benchmarks_external/e2e_test/largetable_perf.es6 @@ -1,4 +1,4 @@ -var perfUtil = require('../../angular2/e2e_test/perf_util'); +var perfUtil = require('angular2/e2e_test/perf_util'); describe('ng1.x largetable benchmark', function () { var URL = 'benchmarks_external/src/largetable/largetable_benchmark.html'; diff --git a/modules/benchmarks_external/e2e_test/largetable_spec.es6 b/modules/benchmarks_external/e2e_test/largetable_spec.es6 index 727b84d244..7b06711d0e 100644 --- a/modules/benchmarks_external/e2e_test/largetable_spec.es6 +++ b/modules/benchmarks_external/e2e_test/largetable_spec.es6 @@ -1,4 +1,4 @@ -var testUtil = require('../../angular2/e2e_test/test_util'); +var testUtil = require('angular2/e2e_test/test_util'); describe('ng1.x largetable benchmark', function () { var URL = 'benchmarks_external/src/largetable/largetable_benchmark.html'; diff --git a/modules/benchmarks_external/e2e_test/naive_infinite_scroll_perf.es6 b/modules/benchmarks_external/e2e_test/naive_infinite_scroll_perf.es6 index 1d6b837e85..b202c52933 100644 --- a/modules/benchmarks_external/e2e_test/naive_infinite_scroll_perf.es6 +++ b/modules/benchmarks_external/e2e_test/naive_infinite_scroll_perf.es6 @@ -1,4 +1,4 @@ -var perfUtil = require('../../angular2/e2e_test/perf_util'); +var perfUtil = require('angular2/e2e_test/perf_util'); describe('ng-dart1.x naive infinite scroll benchmark', function () { diff --git a/modules/benchmarks_external/e2e_test/naive_infinite_scroll_spec.es6 b/modules/benchmarks_external/e2e_test/naive_infinite_scroll_spec.es6 index a5df5032ab..a8c49859d2 100644 --- a/modules/benchmarks_external/e2e_test/naive_infinite_scroll_spec.es6 +++ b/modules/benchmarks_external/e2e_test/naive_infinite_scroll_spec.es6 @@ -1,4 +1,4 @@ -var testUtil = require('../../angular2/e2e_test/test_util'); +var testUtil = require('angular2/e2e_test/test_util'); describe('ng-dart1.x naive infinite scroll benchmark', function () { diff --git a/modules/benchmarks_external/e2e_test/tree_perf.es6 b/modules/benchmarks_external/e2e_test/tree_perf.es6 index efda869d1e..1f91629b2d 100644 --- a/modules/benchmarks_external/e2e_test/tree_perf.es6 +++ b/modules/benchmarks_external/e2e_test/tree_perf.es6 @@ -1,4 +1,4 @@ -var perfUtil = require('../../angular2/e2e_test/perf_util'); +var perfUtil = require('angular2/e2e_test/perf_util'); describe('ng1.x tree benchmark', function () { diff --git a/modules/benchmarks_external/e2e_test/tree_spec.es6 b/modules/benchmarks_external/e2e_test/tree_spec.es6 index 7ecb26d1ac..e9b046fe46 100644 --- a/modules/benchmarks_external/e2e_test/tree_spec.es6 +++ b/modules/benchmarks_external/e2e_test/tree_spec.es6 @@ -1,4 +1,4 @@ -var testUtil = require('../../angular2/e2e_test/test_util'); +var testUtil = require('angular2/e2e_test/test_util'); describe('ng1.x tree benchmark', function () { diff --git a/modules/examples/e2e_test/hello_world/hello_world_spec.es6 b/modules/examples/e2e_test/hello_world/hello_world_spec.es6 index 37accb5ee8..1af813d371 100644 --- a/modules/examples/e2e_test/hello_world/hello_world_spec.es6 +++ b/modules/examples/e2e_test/hello_world/hello_world_spec.es6 @@ -1,4 +1,4 @@ -var benchpress = require('../../../../tools/benchpress/index.js'); +var benchpress = require('benchpress/index.js'); describe('hello world', function () { afterEach(benchpress.verifyNoBrowserErrors); diff --git a/package.json b/package.json index 6efa4020ad..00d63856ff 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "node-uuid": "1.4.x" }, "devDependencies": { + "temp": "^0.8.1", "angular": "1.3.5", "bower": "^1.3.12", "canonical-path": "0.0.2", diff --git a/protractor-e2e-dart2js.conf.js b/protractor-e2e-dart2js.conf.js index d696213861..5cdf1f6f72 100644 --- a/protractor-e2e-dart2js.conf.js +++ b/protractor-e2e-dart2js.conf.js @@ -2,5 +2,5 @@ var config = exports.config = require('./protractor-e2e-shared.js').config; config.baseUrl = 'http://localhost:8002/'; // TODO: remove this line when largetable dart has been added config.exclude = config.exclude || []; -config.exclude.push('dist/cjs/e2e_test/benchmarks_external/e2e_test/largetable_spec.js'); +config.exclude.push('dist/js/cjs/benchmarks_external/e2e_test/largetable_spec.js'); diff --git a/protractor-e2e-js.conf.js b/protractor-e2e-js.conf.js index 5752da40a6..ec58ef8496 100644 --- a/protractor-e2e-js.conf.js +++ b/protractor-e2e-js.conf.js @@ -3,4 +3,4 @@ config.baseUrl = 'http://localhost:8001/'; // TODO: remove exclusion when JS verison of scrolling benchmark is available config.exclude = config.exclude || []; -config.exclude.push('dist/cjs/e2e_test/benchmarks_external/e2e_test/naive_infinite_scroll_spec.js'); +config.exclude.push('dist/js/cjs/benchmarks_external/e2e_test/naive_infinite_scroll_spec.js'); diff --git a/protractor-e2e-shared.js b/protractor-e2e-shared.js index 14856fef99..e595526bb7 100644 --- a/protractor-e2e-shared.js +++ b/protractor-e2e-shared.js @@ -1,2 +1,3 @@ var config = exports.config = require('./protractor-shared.js').config; -config.specs = ['dist/cjs/**/*_spec.js']; +config.specs = ['dist/js/cjs/**/e2e_test/**/*_spec.js']; +config.exclude = ['dist/js/cjs/**/node_modules/**']; diff --git a/protractor-perf-dart2js.conf.js b/protractor-perf-dart2js.conf.js index 1d969e8a41..bed90a1142 100644 --- a/protractor-perf-dart2js.conf.js +++ b/protractor-perf-dart2js.conf.js @@ -3,4 +3,4 @@ config.baseUrl = 'http://localhost:8002/'; config.params.lang = 'dart'; // TODO: remove this line when largetable dart has been added config.exclude = config.exclude || []; -config.exclude.push('dist/cjs/e2e_test/benchmarks_external/e2e_test/largetable_perf.js'); +config.exclude.push('dist/js/cjs/benchmarks_external/e2e_test/largetable_perf.js'); diff --git a/protractor-perf-js.conf.js b/protractor-perf-js.conf.js index 3bf5655e0f..a7310110c2 100644 --- a/protractor-perf-js.conf.js +++ b/protractor-perf-js.conf.js @@ -4,4 +4,4 @@ config.params.lang = 'js'; // TODO: remove exclusion when JS verison of scrolling benchmark is available config.exclude = config.exclude || []; -config.exclude.push('dist/cjs/e2e_test/benchmarks_external/e2e_test/naive_infinite_scroll_perf.js'); +config.exclude.push('dist/js/cjs/benchmarks_external/e2e_test/naive_infinite_scroll_perf.js'); diff --git a/protractor-perf-shared.js b/protractor-perf-shared.js index 6cb2568e09..6c0c216303 100644 --- a/protractor-perf-shared.js +++ b/protractor-perf-shared.js @@ -14,7 +14,9 @@ if (process.env.CLOUD_SECRET_PATH) { }; } -config.specs = ['dist/cjs/**/*_perf.js']; +config.specs = ['dist/js/cjs/**/e2e_test/**/*_perf.js']; +config.exclude = ['dist/js/cjs/**/node_modules/**']; + config.jasmineNodeOpts.defaultTimeoutInterval = 80000; var runId = nodeUuid.v1(); @@ -32,8 +34,8 @@ config.params = { // forces a gc after every run forceGc: false, reporters: [ - require('./dist/cjs/tools/benchpress/src/console_reporter.js'), - cloudReporterConfig ? require('./dist/cjs/tools/benchpress/src/cloud_reporter.js') : null, + require('./dist/js/cjs/benchpress/src/console_reporter.js'), + cloudReporterConfig ? require('./dist/js/cjs/benchpress/src/cloud_reporter.js') : null, ], cloudReporter: cloudReporterConfig, scaling: [{ diff --git a/tools/build/linknodemodules.js b/tools/build/linknodemodules.js new file mode 100644 index 0000000000..acdc3b3430 --- /dev/null +++ b/tools/build/linknodemodules.js @@ -0,0 +1,32 @@ +var fs = require('fs'); +var path = require('path'); + +module.exports = function(gulp, plugins, config) { + return function() { + var nodeModulesDir = path.join(config.dir, 'node_modules'); + if (!fs.existsSync(nodeModulesDir)) { + fs.mkdirSync(nodeModulesDir); + } + getSubdirs(config.dir).forEach(function(relativeFolder) { + if (relativeFolder === 'node_modules') { + return; + } + var sourceDir = path.join('..', relativeFolder); + var linkDir = path.join(nodeModulesDir, relativeFolder); + if (!fs.existsSync(linkDir)) { + console.log('creating link', linkDir, sourceDir); + fs.symlinkSync(sourceDir, linkDir, 'dir'); + } + }); + }; +}; + +function getSubdirs(rootDir) { + return fs.readdirSync(rootDir).filter(function(file) { + if (file[0] === '.') { + return false; + } + var dirPath = path.join(rootDir, file); + return fs.statSync(dirPath).isDirectory(); + }); +} \ No newline at end of file diff --git a/tools/transpiler/index.js b/tools/transpiler/index.js index 022ae8be5d..59dde3981c 100644 --- a/tools/transpiler/index.js +++ b/tools/transpiler/index.js @@ -87,6 +87,7 @@ function reloadCompiler() { convertTypesToExpressionsInEs6Patch(); removeNonStaticFieldDeclarationsInEs6Patch(); disableGetterSetterAssertionPatch(); + patchCommonJSModuleTransformerToSupportExportStar(); } function loadModule(filepath, transpile) { @@ -221,3 +222,29 @@ function useRttsAssertModuleForConvertingTypesToExpressions() { // NYI } } + +// TODO(tbosch): patch exports for CommonJS to support `export * from ...` +// see https://github.com/google/traceur-compiler/issues/1042 +function patchCommonJSModuleTransformerToSupportExportStar() { + var traceurVersion = System.map['traceur']; + var CommonJsModuleTransformer = System.get(traceurVersion+'/src/codegeneration/CommonJsModuleTransformer').CommonJsModuleTransformer; + var parseStatement = System.get(traceurVersion+'/src/codegeneration/PlaceholderParser.js').parseStatement; + var prependStatements = System.get(traceurVersion+"/src/codegeneration/PrependStatements.js").prependStatements; + + var _wrapModule = CommonJsModuleTransformer.prototype.wrapModule; + CommonJsModuleTransformer.prototype.wrapModule = function(statements) { + if (this.hasStarExports()) { + var last = statements[statements.length - 1]; + statements = statements.slice(0, -1); + var exportObject = last.expression; + if (exportObject.propertyNameAndValues) { + throw new Error('Don\'t support export * with named exports right now...'); + } + statements.push(parseStatement(['module.exports = ', ';'], exportObject)); + return statements; + } else { + return _wrapModule.apply(this, arguments); + } + } +} + diff --git a/tools/transpiler/unittest/transpilertests.js b/tools/transpiler/unittest/transpilertests.js index a633c8754e..fa95e1f895 100644 --- a/tools/transpiler/unittest/transpilertests.js +++ b/tools/transpiler/unittest/transpilertests.js @@ -1,4 +1,8 @@ var compiler = require('../index'); +var temp = require('temp'); +var fs = require('fs'); + +temp.track(); var DEFAULT_OPTIONS = { sourceMaps: false, @@ -157,6 +161,34 @@ describe('transpile to es6', function() { }); +describe('transpile to cjs', function() { + var options; + + beforeEach(function() { + options = merge(DEFAULT_OPTIONS, {modules: 'commonjs'}); + }); + + function compileAndWrite(input) { + var transpiledCode = compiler.compile(options, "test.js", input).js; + var tempFile = temp.openSync('ng2transpiler'); + fs.writeSync(tempFile.fd, transpiledCode); + return tempFile.path; + } + + it('should transpile export *', function() { + var file1 = compileAndWrite('export var a = 1'); + var file2 = compileAndWrite('export * from "' + file1 + '"'); + expect(require(file2).a).toBe(1); + }); + + it('should transpile export {name}', function() { + var file1 = compileAndWrite('export var a = 1'); + var file2 = compileAndWrite('export {a} from "' + file1 + '"'); + expect(require(file2).a).toBe(1); + }); + +}); + function merge(a, b) { var result = {};