treeForPublic: function() {
    var appEnv = this.app.env;
    var publicFiles = new Funnel(this.app.trees.public);

    this._requireBuildPackages();

    fs.stat(
      path.join(this.project.root, 'public', 'robots.txt'),
      function(err, stats) {
        if (stats && stats.isFile()) {
          console.log(chalk.yellow('There is a robots.txt in /public and ENV specific robots.txt are ignored!'));
        }
      }
    );

    publicFiles = stew.rename(
      publicFiles,
      'robots-' + appEnv + '.txt',
      'robots.txt'
    );

    return new Funnel(publicFiles, {
      srcDir: '/',
      destDir: '/'
    });
  },
Exemple #2
0
module.exports = function(tree) {
  var emberInflector = buildEmberInflector();
  var loadInitializers = buildLoadInitializers();
  var emberData = merge([tree, version()]);

  var javascripts = merge([
    emberInflector,
    loadInitializers,
    debugBuild('ember-data/initializers', 'app/initializers'),
    debugBuild('ember-data/instance-initializers', 'app/instance-initializers'),
    debugBuild('ember-data', emberData)
  ]);

  var strippedJavascripts = merge([
    emberInflector,
    makeStrippedBuild('ember-data', emberData)
  ]);

  var debug = collapse(javascripts, 'ember-data.js');
  var production = collapse(strippedJavascripts, 'ember-data.prod.js');
  var minified = stew.rename(minify(production), 'ember-data.prod.js', 'ember-data.min.js');
  // Hack to get around https://github.com/emberjs/data/blob/v2.1.0/lib/ember-addon/index.js#L28
  var emptySourcemapFile = fileCreator('ember-data.js.map', '');

  return merge([debug, production, minified, emptySourcemapFile]);
};
    this.d3Modules.forEach(function(packageName) {
      var d3PathToSrc, srcTree;

      // Import existing builds from node d3 packages, which are UMD packaged.
      var packageBuildPath = path.join('build', packageName + '.js');

      d3PathToSrc = path.join(d3PackagePath, 'node_modules', packageName);

      try {
        fs.statSync(path.join(d3PathToSrc)).isDirectory();
      } catch(err) {
        d3PathToSrc = lookupPackage(packageName);
      }

      try {
        fs.statSync(path.join(d3PathToSrc, packageBuildPath)).isFile()
      } catch(err) {
        console.error('[ERROR] D3 Package (' + packageName + ') is not built as expected, cannot continue. Please report this as a bug.');
        return;
      }

      var tree = new Funnel(d3PathToSrc, {
        include: [packageBuildPath],
        destDir: '/' + packageName,
        annotation: 'Funnel: D3 Source [' + packageName + ']'
      });

      srcTree = new AMDDefineFilter(tree, packageName);
      trees.push(rename(srcTree, function() {
        return '/' + packageName + '/' + packageName + '.js';
      }));
    });
 treeForVendor: function() {
   var primerPath = path.join(__dirname, 'node_modules', 'primer');
   var expandedPrimerPath = expand(path.join(primerPath, 'css', 'primer.css'));
   var primerCSS = rename(find(expandedPrimerPath), function() {
     return 'primer/primer.css';
   });
   return mergeTrees([primerCSS]);
 },
Exemple #5
0
  treeForBrowserVendor: function(vendorTree) {

    var trees = [];
    var options = this.momentOptions;

    if (vendorTree) {
      trees.push(vendorTree);
    }

    trees.push(new Funnel(options.momentPath, {
      destDir: 'moment',
      include: [new RegExp(/\.js$/)],
      exclude: ['tests', 'ender', 'package'].map(function(key) {
        return new RegExp(key + '\.js$');
      })
    }));

    if (Array.isArray(options.includeLocales) && options.includeLocales.length) {
      var localeTree = new Funnel(options.momentPath, {
        srcDir: 'locale',
        destDir: 'moment/locales',
        include: options.includeLocales.map(function(locale) {
          return new RegExp(locale + '.js$');
        })
      });

      trees.push(localeTree);
    }

    if (options.includeTimezone) {
      var momentTimezonePath = path.dirname(require.resolve('moment-timezone'));
      var timezonePath = [momentTimezonePath, 'builds'];

      switch(options.includeTimezone) {
        case 'all':
          timezonePath.push('moment-timezone-with-data.min.js');
          break;
        case '2010-2020':
          timezonePath.push('moment-timezone-with-data-2010-2020.min.js');
          break;
        case 'none':
          timezonePath.push('moment-timezone.min.js');
          break;
        default:
          throw new Error("ember-moment: Please specify the moment-timezone dataset to include as either 'all', '2010-2020', or 'none'.");
      }

      trees.push(rename(new Funnel(momentTimezonePath + '/builds', {
        files: [timezonePath[timezonePath.length - 1]]
      }), function(/*filepath*/) {
        return 'moment-timezone/tz.js';
      }));
    }

    return mergeTrees(trees);
  }
Exemple #6
0
    this.d3Modules.forEach(function(pkg) {
      if (!(pkg && pkg.path)) {
        return;
      }

      var tree = new Funnel(pkg.path, {
        include: [pkg.buildPath],
        destDir: `/${  pkg.name}`,
        annotation: `Funnel: D3 Source [${  pkg.name  }]`
      });

      var srcTree = new RecastFilter(tree, pkg.name, rewriteAMDFunction);
      trees.push(rename(srcTree, function() {
        return `/${  pkg.name  }/${  pkg.name  }.js`;
      }));
    });
Exemple #7
0
  treeForStyles: function(tree) {
    tree = this._super.treeForStyles.apply(this, [tree]);

    var addonThemesDir = 'app/styles/ember-reveal-js/css/theme/source';
    var addonThemeFiles = fs.readdirSync(addonThemesDir);

    var addonThemes = Array.prototype.map.call(addonThemeFiles, function(addonTheme) {
      return addonTheme.split('.')[0];
    });

    addonThemes.push('ember');

    var addonThemesScss = Array.prototype.map.call(addonThemes, function(addonTheme) {
      return '$themeName: \'' + addonTheme + '\';\n' +
        '@import \'css/theme/source/' + addonTheme + '\';\n\n';
    }).join('');
    addonThemesScss = '\n/* BEGIN ember-reveal-js-addon-themes */\n' + addonThemesScss;
    addonThemesScss += '/* END ember-reveal-js-addon-themes */\n';

    var stylesTree = replace(tree, {
      files: [
        'app/styles/ember-reveal-js/ember-reveal-js-themes.scss'
      ],
      pattern: {
        match: /\/\*__ember-reveal-js-addon-themes__\*\//g,
        replacement: addonThemesScss
      }
    });

    var revealCssTree = new Funnel(unwatchedTree(path.dirname(require.resolve('reveal.js/package.json'))), {
      srcDir: '/css',
      destDir: '/app/styles/ember-reveal-js/css',
      include: [
        'reveal.scss',
        'theme/**/*.scss'
      ]
    });

    var replaceCssTree = replace(revealCssTree, {
      files: [
        'app/styles/ember-reveal-js/css/theme/template/theme.scss',
        'app/styles/ember-reveal-js/css/theme/source/*.scss'
      ],
      patterns: [
        {
          match: /\.reveal/g,
          replacement: '.#{$themeName}.reveal'
        },
        {
          match: /body \{/g,
          replacement: '.#{$themeName}.reveal {'
        },
        {
          match: /\.\.\/\.\.\/lib\/font/g,
          replacement: 'ember-reveal-js/lib/font'
        }
      ]
    });

    replaceCssTree = replace(replaceCssTree, {
      files: [
        'app/styles/ember-reveal-js/css/reveal.scss'
      ],
      patterns: [
        {
          match: /html, body,/g,
          replacement: 'html.reveal, body.reveal,'
        }
      ]
    });

    var revealPrintCssTree = new Funnel(unwatchedTree(path.dirname(require.resolve('reveal.js/package.json'))), {
      srcDir: '/css/print',
      destDir: '/app/styles/ember-reveal-js/css/print'
    });
    revealPrintCssTree = stew.rename(revealPrintCssTree, '.css', '.scss');

    var fontCssTree = new Funnel(unwatchedTree(path.dirname(require.resolve('reveal.js/package.json'))), {
      srcDir: '/lib/font',
      destDir: '/app/styles/ember-reveal-js/lib/font',
      files: [
        'league-gothic/league-gothic.css',
        'source-sans-pro/source-sans-pro.css'
      ]
    });

    var highlightJsTree = new Funnel(unwatchedTree(path.dirname(require.resolve('highlight.js/package.json'))), {
      srcDir: '/styles',
      destDir: '/app/styles/ember-reveal-js/highlight.js'
    });
    highlightJsTree = stew.rename(highlightJsTree, '.css', '.scss');

    return mergeTrees([
        stylesTree,
        replaceCssTree,
        fontCssTree,
        revealPrintCssTree,
        highlightJsTree
      ], {
        overwrite: true
      }
    );
  },
Exemple #8
0
  memberVariables: true,  // parse class fields
  typeAssertionModule: 'rtts_assert/rtts_assert',
  // Don't use type assertions since this is partly transpiled by typescript
  typeAssertions: false,
  modules: 'commonjs'
};
var cjsTree = new TraceurCompiler(modulesTree, '.js', '.map', traceurOpts);

// Add the LICENSE file in each module
['angular2', 'benchmarks', 'benchmarks_external', 'benchpress', 'examples', 'rtts_assert'].forEach(
    function(destDir) {
      cjsTree = mergeTrees([cjsTree, new Funnel('.', {files: ['LICENSE'], destDir: destDir})]);
    });

extras = new Funnel(modulesTree, {include: ['**/*.md', '**/*.png'], exclude: ['**/*.dart.md']});
extras = stew.rename(extras, 'README.js.md', 'README.md');

var BASE_PACKAGE_JSON = require('./package.json');
var COMMON_PACKAGE_JSON = {
  version: BASE_PACKAGE_JSON.version,
  homepage: BASE_PACKAGE_JSON.homepage,
  bugs: BASE_PACKAGE_JSON.bugs,
  license: BASE_PACKAGE_JSON.license,
  contributors: BASE_PACKAGE_JSON.contributors,
  dependencies: BASE_PACKAGE_JSON.dependencies,
  devDependencies: {
    "yargs": BASE_PACKAGE_JSON.devDependencies['yargs'],
    "gulp-sourcemaps": BASE_PACKAGE_JSON.devDependencies['gulp-sourcemaps'],
    "gulp-traceur": BASE_PACKAGE_JSON.devDependencies['gulp-traceur'],
    "gulp": BASE_PACKAGE_JSON.devDependencies['gulp'],
    "gulp-rename": BASE_PACKAGE_JSON.devDependencies['gulp-rename'],
Exemple #9
0
  },

  _getAllD3Modules() {
    return d3DepsForPackage('d3', this.parent.nodeModulesPath, this.ui);
  },

  treeForVendor(tree) {
    var trees = [];

    if (tree) {
      var versionTree = new RecastFilter(tree, null, replaceVersionString, {
        version: d3Version('d3', this.parent.nodeModulesPath)
      });

      trees.push(rename(versionTree, function() {
        return path.posix.join('ember-d3', 'register-d3-version.js');
      }));
    }

    this.d3Modules.forEach(function(pkg) {
      if (!(pkg && pkg.path)) {
        return;
      }

      var tree = new Funnel(pkg.path, {
        include: [pkg.buildPath],
        destDir: `/${  pkg.name}`,
        annotation: `Funnel: D3 Source [${  pkg.name  }]`
      });

      var srcTree = new RecastFilter(tree, pkg.name, rewriteAMDFunction);
Exemple #10
0
  modules: 'amd',
});

const appScript = Concat(babelScript, {
  inputFiles: [
    '**/*.js',
  ],
  outputFile: '/app.js',
});

const compiledSass = new Sass(stylePaths, 'app.scss', 'app.css', {});
const optimizedCSS = new CssOptimizer(compiledSass);
const styles = new Autoprefixer(optimizedCSS);

if (process.env.EMBER_ENV === 'test') {
  const testTree = rename('tests', 'index.html', 'test.html');

  const testJs = Concat(testTree, {
    inputFiles: ['**/*.js'],
    outputFile: '/tests.js',
  });

  const testHTML = new Funnel(testTree, {
    files: ['test.html'],
  });

  module.exports = new Merge([pubFiles, styles, appScript, vendor, testJs, testHTML]);
} else {
  module.exports = new Merge([pubFiles, styles, appScript, vendor]);
}
function lowercaseTree(tree) {
  return rename(tree, function(filepath) {
    return filepath.toLocaleLowerCase();
  });
}
Exemple #12
0
// Use Traceur to transpile original sources to ES6
var es6DevTree = new TraceurCompiler(modulesTree, '.es6', {
  sourceMaps: true,
  annotations: true,      // parse annotations
  types: true,            // parse types
  script: false,          // parse as a module
  memberVariables: true,  // parse class fields
  modules: 'instantiate',
  typeAssertionModule: 'rtts_assert/rtts_assert',
  typeAssertions: true,
  outputLanguage: 'es6'
});
// Munge the filenames since we use an '.es6' extension
es6DevTree = stew.rename(es6DevTree, function(relativePath) {
  return relativePath.replace(/\.(js|es6)\.map$/, '.map').replace(/\.js$/, '.es6');
});

// Call Traceur again to lower the ES6 build tree to ES5
var es5DevTree = new TraceurCompiler(es6DevTree, '.js', {modules: 'instantiate', sourceMaps: true});
es5DevTree = stew.rename(es5DevTree, '.es6.map', '.js.map');

// Now we add a few more files to the es6 tree that Traceur should not see
['angular2', 'benchmarks', 'benchmarks_external', 'benchpress', 'examples', 'rtts_assert'].forEach(
    function(destDir) {
      var extras = new Funnel('tools/build', {files: ['es5build.js'], destDir: destDir});
      es6DevTree = mergeTrees([es6DevTree, extras]);
    });

var vendorScriptsTree = flatten(new Funnel('.', {
  files: [
  tests: false,
  trees: {
    app: new EmptyTree(),
    // I'm creating these empty files because badly behaved
    // preprocessors explode if they aren't present, even though we
    // aren't going to use them.
    styles: new EmptyTree(['app.css', 'app.scss']),
    templates: new EmptyTree(),
    public: new EmptyTree()
  }
});

var internal = stew.mv(path.join(__dirname, '..', 'lib'), 'giftwrap');

var js = concat(merge([app.appAndDependencies(), internal]), {
  header: '(function(){',
  headerFiles: [
    app.bowerDirectory + '/loader.js/loader.js']
    .concat(app.legacyFilesToAppend)
    .concat(['vendor/addons.js']),
  inputFiles: ['giftwrap/**/*.js'],
  outputFile: 'addons.js',
  footer: "window.GiftWrap = require('giftwrap-internal/container-injector');})();",
  description: 'Concat: giftwrap js'
});

var styles = stew.find(app.styles(), 'assets/vendor.css');
styles = stew.rename(styles, 'assets/vendor.css', 'addons.css');

module.exports = derequire(merge([styles, js]));
tool = browserify(tool, {
  entries: ['./dev/browserEntry.js'],
  debug: true
});

tool = concat(tool, {
  outputFile: '/where-eval.js',
  inputFiles: ['*.js'],
  sourceMapConfig: { enabled: true },
});

tool = pickFiles(tool, {
  include: ['where-eval.js', 'where-eval.map'],
});

var toolMin = rename(tool, 'where-eval.js', 'where-eval-min.js');

toolMin = uglify(toolMin, {
   mangle: true,
   compress: true
});

var all = mergeTrees([
  toolMin,
  tool,
  tests,
  testsStatic
]);

module.exports = all;
Exemple #15
0
var compileModules = require('broccoli-es6-module-transpiler');
var AMDFormatter = require('es6-module-transpiler-amd-formatter');
var ES6Modules = require('broccoli-es6modules');
var concat = require('broccoli-sourcemap-concat');
var path = require('path');
var mv = stew.mv;
var find = stew.find;
var log = stew.log;

var lib       = find('lib');
var tests     = find('tests');
var testIndex = find('tests/{index.html}');
var qunit     = find(path.dirname(require.resolve('qunitjs'))   + '/qunit.{js,css}');
var loader    = find(path.dirname(require.resolve('loader.js')) + '/{loader.js}');

qunit  = stew.rename(qunit, path.basename);
loader = stew.rename(loader, path.basename);

// folded bundle
var bundled = compileModules(lib, {
  format: 'bundle',
  entry:  'backburner.umd.js',
  output: 'backburner.js'
});

var amd = new ES6Modules(find(mv(lib, 'lib/', '/'), '!*.umd.js'), {
  esperantoOptions: {
    absolutePaths: true,
    strict: true
  }
});