Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Speed up requiring index.js file #249

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 27 additions & 11 deletions packages/ember-svg-jar/lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,18 @@

const fs = require('fs');
const _ = require('lodash');
const Funnel = require('broccoli-funnel');
const MergeTrees = require('broccoli-merge-trees');
const SVGOptimizer = require('broccoli-svg-optimizer');
const broccoliReplace = require('broccoli-string-replace');
const Symbolizer = require('./symbolizer/symbolizer');
const InlinePacker = require('./inline-packer');
const ViewerAssetsBuilder = require('./viewer-assets-builder');
const ViewerBuilder = require('./viewer-builder');
const buildOptions = require('./build-options');
const { makeIDForPath } = require('./utils');
const prepareSymbolLoaderScript = require('./prepare-symbol-loader-script');

function mergeTreesIfNeeded(trees, options) {
if (trees.length === 1) {
return trees[0];
}

let mergedOptions = _.assign({ overwrite: true }, options);
return trees.length === 1 ? trees[0] : new MergeTrees(trees, mergedOptions);

const MergeTrees = require('broccoli-merge-trees');

return new MergeTrees(trees, mergedOptions);
}

module.exports = {
Expand All @@ -28,6 +25,9 @@ module.exports = {

included(app) {
this._super.included.apply(this, arguments);

const buildOptions = require('./build-options');

this.svgJarOptions = buildOptions(app);
},

Expand All @@ -41,6 +41,8 @@ module.exports = {
// Add viewer assets to public dir
let svgJarPublicTree = this._super.treeForPublic.apply(this, arguments);

const broccoliReplace = require('broccoli-string-replace');

svgJarPublicTree = broccoliReplace(svgJarPublicTree, {
files: ['**/index.html'],
pattern: {
Expand Down Expand Up @@ -78,6 +80,8 @@ module.exports = {
const outputFile = this.optionFor('symbol', 'outputFile');
const isTestEnv = app.environment === 'test';

const prepareSymbolLoaderScript = require('./prepare-symbol-loader-script');

return prepareSymbolLoaderScript(rootURL, outputFile, isTestEnv);
}

Expand All @@ -103,6 +107,8 @@ module.exports = {
originalSvgsFor(strategy) {
let sourceDirs = this.sourceDirsFor(strategy);

const Funnel = require('broccoli-funnel');

return new Funnel(mergeTreesIfNeeded(sourceDirs), {
include: ['**/*.svg'],
});
Expand All @@ -111,6 +117,8 @@ module.exports = {
optimizedSvgsFor(strategy, originalSvgs) {
let optimizerConfig = this.optionFor(strategy, 'optimizer');

const SVGOptimizer = require('broccoli-svg-optimizer');

return new SVGOptimizer(originalSvgs, {
svgoConfig: _.omit(optimizerConfig, 'svgoModule'),
svgoModule: optimizerConfig.svgoModule,
Expand All @@ -132,6 +140,8 @@ module.exports = {
let stripPath = this.optionFor(strategy, 'stripPath');
let prefix = this.optionFor(strategy, 'prefix');

const ViewerAssetsBuilder = require('./viewer-assets-builder');

return new ViewerAssetsBuilder(this.svgsFor(strategy), {
strategy,
validationConfig: this.svgJarOptions.validations,
Expand All @@ -143,6 +153,8 @@ module.exports = {
});
});

const ViewerBuilder = require('./viewer-builder');

return new ViewerBuilder(mergeTreesIfNeeded(viewerBuilderTrees), {
outputFile: 'svg-jar-viewer.json',
});
Expand All @@ -152,6 +164,8 @@ module.exports = {
let idGen = this.optionFor('inline', 'idGen');
let stripPath = this.optionFor('inline', 'stripPath');

const InlinePacker = require('./inline-packer');

return new InlinePacker(this.svgsFor('inline'), {
makeAssetID(relativePath) {
return makeIDForPath(relativePath, { idGen, stripPath });
Expand All @@ -164,6 +178,8 @@ module.exports = {
let stripPath = this.optionFor('symbol', 'stripPath');
let prefix = this.optionFor('symbol', 'prefix');

const Symbolizer = require('./symbolizer/symbolizer');

return new Symbolizer(this.svgsFor('symbol'), {
outputFile: this.optionFor('symbol', 'outputFile'),
svgAttrs: this.optionFor('symbol', 'containerAttrs'),
Expand Down
3 changes: 2 additions & 1 deletion packages/ember-svg-jar/lib/utils.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
'use strict';

const fs = require('fs');
const cheerio = require('cheerio').default;
const path = require('path').posix;
const osPathSep = require('path').sep;
const _ = require('lodash');
Expand Down Expand Up @@ -30,6 +29,8 @@ function makeIDForPath(relativePath, { idGen, stripPath, prefix }) {
}

function svgDataFor(svgContent) {
const cheerio = require('cheerio').default;

let $svg = cheerio.load(svgContent, { xmlMode: true })('svg');

return {
Expand Down