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

[Storage] Rollup for tests in storage #2297

Merged
merged 45 commits into from
May 15, 2019
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
5663490
Rename test files for consistency
HarshaNalluru Apr 16, 2019
0fb1846
rollup for node tests
HarshaNalluru Apr 16, 2019
558cac6
rollup for node tests
HarshaNalluru Apr 16, 2019
e6803cb
this is undefined, update paths for rollup
HarshaNalluru Apr 16, 2019
9042ef6
Import dotenv in index.ts
HarshaNalluru Apr 16, 2019
9471ef0
Update output path in rollup
HarshaNalluru Apr 16, 2019
44570b2
del mocha report conf - pass args in live test cmd
HarshaNalluru Apr 16, 2019
e72f5cd
restructure package.json similar to other pkgs
HarshaNalluru Apr 16, 2019
154af83
remove commented code
HarshaNalluru Apr 16, 2019
66a5fed
Add mocha.reporter.config to publish node results
HarshaNalluru Apr 16, 2019
6d2fc3f
Merge remote-tracking branch 'upstream/master' into RollupStorage
HarshaNalluru Apr 22, 2019
6363eb4
Remove unwanted warnings, code for min version
HarshaNalluru Apr 22, 2019
93e42fc
Update gulp to zip both min and unmin versions
HarshaNalluru Apr 22, 2019
7bddadf
Update rollup to generate min and unmin versions
HarshaNalluru Apr 22, 2019
0a311f9
Add (commented) rollup visualizer
HarshaNalluru Apr 22, 2019
4fecbcc
remove unused import path
HarshaNalluru Apr 23, 2019
4eba327
remove unnecessary comment
HarshaNalluru Apr 23, 2019
3665dd4
Merge remote-tracking branch 'upstream/master' into RollupStorage
HarshaNalluru Apr 23, 2019
9921461
Update rollup for tests in storage-file
HarshaNalluru Apr 23, 2019
606fe5c
Update rollup for tests in storage-queue
HarshaNalluru Apr 23, 2019
7899e4c
add rollup-plugin-json in devdependency
HarshaNalluru Apr 23, 2019
ed5fc86
Update coverage commands
HarshaNalluru Apr 23, 2019
fb5970d
Merge remote-tracking branch 'upstream/master' into RollupStorage
HarshaNalluru Apr 24, 2019
ac390da
Update nycrc for code coverage - storage-blob
HarshaNalluru Apr 30, 2019
ce2e0b6
Update .nycrc - code coverage -storage{file,queue}
HarshaNalluru Apr 30, 2019
6ce31db
resolve merge conflicts
HarshaNalluru Apr 30, 2019
e9d95fc
Update test:node command - storage-blob
HarshaNalluru Apr 30, 2019
d9c9456
Add rollup-plugin-json
HarshaNalluru Apr 30, 2019
9ac4f0f
Update package.json as per rush
HarshaNalluru Apr 30, 2019
34e9fc5
Increase timeout to 120 seconds for tests
HarshaNalluru Apr 30, 2019
7d2b4ba
resolve merge conflicts
HarshaNalluru May 7, 2019
3237181
resolve merge conflicts
HarshaNalluru May 7, 2019
7788fd0
Update JavaScript Bundle file names
HarshaNalluru May 7, 2019
0e2d10d
Update test path in karma conf
HarshaNalluru May 7, 2019
cf6524c
Merge remote-tracking branch 'upstream/master' into RollupStorage
HarshaNalluru May 8, 2019
518a1f0
undo adding rollup-plugin-json for storage-pkgs
HarshaNalluru May 8, 2019
3dd97f2
resolve merge conflicts
HarshaNalluru May 8, 2019
fb50e69
Update test command as the per updates to master
HarshaNalluru May 8, 2019
ea3b017
Merge branch 'master' into RollupStorage
HarshaNalluru May 8, 2019
21f1302
Resolve merge conflicts
HarshaNalluru May 10, 2019
10b71ee
Merge branch 'RollupStorage' of https://github.com/HarshaNalluru/azur…
HarshaNalluru May 10, 2019
2d2c526
remove onwarn handler, update with context="null"
HarshaNalluru May 13, 2019
312b42b
Merge branch 'master' into RollupStorage
HarshaNalluru May 13, 2019
5a630c7
Merge branch 'master' into RollupStorage
HarshaNalluru May 14, 2019
c7f913e
Merge branch 'master' into RollupStorage
HarshaNalluru May 15, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 1 addition & 5 deletions sdk/storage/storage-blob/gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@ const zipFileName = `azurestoragejs.blob-${version}.zip`;

gulp.task("zip", function(callback) {
gulp
.src([
"browser/azure-storage.blob.js",
"browser/azure-storage.blob.min.js",
"browser/*.txt"
])
.src(["browser/index.js", "browser/*.txt"])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe we still want the minified version. The template uses the uglify rollup plugin to do that.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ Offline discussion with Jeremy ]

  • As per the template, the generated file is - browser/index.js (minified version)
  • This PR uses rollup-plugin-uglify to generate the minified version ("browser/index.js") just like the template does
  • Not sure if we should generate both the files
    ["browser/azure-storage.blob.js", "browser/azure-storage.blob.min.js" ]
    the way storage-blob previously does
  • Still have to decide on the names for generated outputs!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My thoughts here: the standalone unminified version seems not important for npm package scenarios, but is possibly important when downloading a .zip release from e.g. GitHub. If we go the GH release route, we should have an unminified version, but otherwise I'm fine leaving it out. I'll also note that the unminified code will likely not be super nice to debug as it will still be bundled and have a bunch of "plumbing" goop.

In terms of file names we discussed on teams, how about we go with the following rule: the bundle file name is the package name with @ removed, / replaced with -, and suffixed with .min if minified. So azure-storage-blob.min.js.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Modify template to generate both minified and unminified versions of src code through rollup and update the names of outputs"
Issue to track - #2416

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both js and min.js are needed in the generated zip bundle to be published. See https://aka.ms/downloadazurestoragejsblob

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes @XiaoningLiu, we are doing it now.
Now, the generated zip bundle contains both "azure-storage-blob.min.js" and "azure-storage-blob.js"

.pipe(zip(zipFileName))
.pipe(gulp.dest("browser"))
.on("end", callback);
Expand Down
8 changes: 4 additions & 4 deletions sdk/storage/storage-blob/mocha.reporter.config.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"reporterEnabled": "spec, mocha-junit-reporter",
"mochaJunitReporterReporterOptions": {
"mochaFile": "test-results.xml"
}
"reporterEnabled": "spec, mocha-junit-reporter",
"mochaJunitReporterReporterOptions": {
"mochaFile": "test-results.xml"
}
}
9 changes: 9 additions & 0 deletions sdk/storage/storage-blob/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 11 additions & 9 deletions sdk/storage/storage-blob/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
"rimraf": "^2.6.2",
"rollup": "^0.65.2",
"rollup-plugin-commonjs": "^9.1.8",
"rollup-plugin-json": "^4.0.0",
"rollup-plugin-multi-entry": "^2.0.2",
"rollup-plugin-node-resolve": "^3.4.0",
"rollup-plugin-replace": "^2.0.0",
Expand All @@ -64,17 +65,18 @@
"typescript": "^3.2.2"
},
"scripts": {
"unit-node": "npm run build && npm run test:node",
"unit-browser": "npm run build && npm run test:browser",
"test": "npm run test:node && npm run test:browser",
"test:node": "cross-env TS_NODE_COMPILER_OPTIONS=\"{\\\"module\\\": \\\"commonjs\\\"}\" nyc mocha --compilers ts-node/register --require source-map-support/register --reporter mocha-multi-reporters --reporter-options configFile=mocha.reporter.config.json --full-trace --no-timeouts test/*.test.ts test/node/*.test.ts",
"test:browser": "karma start --single-run",
"build": "npm run build:es6 && npm run build:nodebrowser && npm run build:browserzip && npm run build:test",
"build:test": "rollup -c rollup.test.config.js",
"build:nodebrowser": "rollup -c",
"build:es6": "tsc -p tsconfig.json",
"build:autorest": "autorest ./swagger/README.md --typescript --use=@microsoft.azure/autorest.typescript@2.1.3",
"build:nodebrowser": "rollup -c",
"build:browserzip": "gulp zip",
"build:test": "rollup -c rollup.test.config.js",
"build:autorest": "autorest ./swagger/README.md --typescript --use=@microsoft.azure/autorest.typescript@2.1.3",
"test": "npm run test:node && npm run test:browser",
"test:node": "mocha --reporter mocha-multi-reporters --reporter-options configFile=mocha.reporter.config.json -t 120000 dist-test/index.node.js",
"test:browser": "karma start --single-run",
"coverage:node": "npm run build-test && nyc --reporter=lcov mocha -t 120000 dist-test/index.node.js",
"unit-node": "npm run build && npm run test:node",
"unit-browser": "npm run build && npm run test:browser",
"clean": "rimraf dist dist-esm dist-test typings temp browser/*.js* browser/*.zip statistics.html coverage coverage-browser .nyc_output *.tgz *.log test*.xml TEST*.xml",
"extract-api": "tsc -p . && api-extractor run --local"
},
Expand All @@ -98,4 +100,4 @@
},
"homepage": "https://github.com/Azure/azure-sdk-for-js#readme",
"sideEffects": false
}
}
185 changes: 185 additions & 0 deletions sdk/storage/storage-blob/rollup.base.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

import nodeResolve from "rollup-plugin-node-resolve";
import multiEntry from "rollup-plugin-multi-entry";
import cjs from "rollup-plugin-commonjs";
import json from "rollup-plugin-json";
import replace from "rollup-plugin-replace";
import { uglify } from "rollup-plugin-uglify";
import sourcemaps from "rollup-plugin-sourcemaps";
import shim from "rollup-plugin-shim";
// import visualizer from "rollup-plugin-visualizer";

import path from "path";

const version = require("./package.json").version;
const banner = [
"/*!",
` * Azure Storage SDK for JavaScript - Blob, ${version}`,
" * Copyright (c) Microsoft and contributors. All rights reserved.",
" */"
].join("\n");

const pkg = require("./package.json");
const depNames = Object.keys(pkg.dependencies);
const production = process.env.NODE_ENV === "production";

export function nodeConfig(test = false) {
const externalNodeBuiltins = [
"@azure/ms-rest-js",
"crypto",
"fs",
"events",
"os",
"stream"
];
const baseConfig = {
input: "dist-esm/src/index.js",
external: depNames.concat(externalNodeBuiltins),
output: {
file: "dist/index.js",
format: "cjs",
sourcemap: true
},
plugins: [
sourcemaps(),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does "sourcemaps()" do? I remembered a sourcemap file is generated under dist folder without this plugin.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This plugin helps in grabbing source maps from sourceMappingURLs.

For instance, look at the differences in nyc code coverage output.

  • with sourcemaps()
    image

  • without sourcemaps()
    image

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it. Can you remove "dotenv" from coverage report?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sourcemaps is for threading the sourcemap across multiple transformations. Rollup by default won't consume sourcemaps so the dist sourcemaps would be a mapping to dist-esm rather than the original TS code.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it. Can you remove "dotenv" from coverage report?

Update -

I tried excluding that specific file(and every possible node_modules path) by adding rules in .nycrc file and could not exclude this file in any way.

Looks like nyc is not properly honouring the exclude rule in .nycrc. I see some similar recent user issues in the nyc repo - istanbuljs/nyc#1099

I'm opening a new issue to investigate further - #2820

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HarshaNalluru - I apologize. The issue 1099 that you reference was mine. It was user error.

replace({
delimiters: ["", ""],
values: {
// replace dynamic checks with if (true) since this is for node only.
// Allows rollup's dead code elimination to be more aggressive.
"if (isNode)": "if (true)"
}
}),
nodeResolve({ preferBuiltins: true }),
cjs(),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is"common-js" plugin necessary? Previously we didn't have this.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • cjs() converts CommonJS modules to ES6, so they can be included in a Rollup bundle.
  • This is required for proper functioning of the dotenv module.
  • dotenv module has been added to the storage packages as a devDependency - [Storage] Environment variables for storage sdk #1610. This package helps to load the environment variables from a .env file instead of setting them each time we run the tests.
  • Example use case
    import { getBSU, getUniqueName } from "./utils";
    import * as dotenv from "dotenv";
    dotenv.config({path:"../.env"});
    // tslint:disable:no-empty

json()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is "json" plugin necessary?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From my understanding, rollup-plugin-json is not necessary.
Removed it - 518a1f0

]
};

if (test) {
// entry point is every test file
baseConfig.input = [
"dist-esm/test/*.spec.js",
"dist-esm/test/node/*.spec.js"
];
baseConfig.plugins.unshift(multiEntry({ exports: false }));

// different output file
baseConfig.output.file = "dist-test/index.node.js";

// mark assert as external
baseConfig.external.push("assert", "fs", "path");

baseConfig.onwarn = warning => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting, for 10.1.0-preview, we have similar roll up config for Node.js test cases. However, doesn't have met this "THIS_IS_UNDEFINED" warning. Can you check why previous version doesn't have this issue?

See https://github.com/Azure/azure-storage-js/blob/v10.1.0-preview-blob/blob/rollup.test.config.js

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's possible this ignore was added because it was needed in other projects and isn't needed here. Harsha can confirm.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do see "THIS_IS_UNDEFINED" warning which I could only get rid of using custom onwarn handlers.
Also, I've verified v10.1.0-preview branch, I need to look deeper on why it didn't throw those warnings previously.
I'm guessing this might be from version updates in the dependencies[not really sure].

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update -

From the documentation https://rollupjs.org/guide/en#danger-zone, it is not clear to me on what context = "null" does.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @HarshaNalluru ! Here is the description about "THIS NOT DEFINED" in rollup doc. options.context is a workaround to override default value of this. @bterlson previously added node.context = "null" in v10.1.0-preview. I believe this approach should work.

Error: "this is undefined"
In a JavaScript module, this is undefined at the top level (i.e., outside functions). Because of that, Rollup will rewrite any this references to undefined so that the resulting behaviour matches what will happen when modules are natively supported.

There are occasional valid reasons for this to mean something else. If you're getting errors in your bundle, you can use options.context and options.moduleContext to change this behaviour.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed onwarn handlers and updated with context = "null"
2d2c526

if (warning.code === "THIS_IS_UNDEFINED") {
// This error happens frequently due to TypeScript emitting `this` at the
// top-level of a module. In this case its fine if it gets rewritten to
// undefined, so ignore this error.
return;
}

if (
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you need this custom onwarn machinery? It's included in the template as an example, but if it's not needed here feel free to remove it.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I remember facing an issue with "this" which got resolved when I added this(for browser)
I'll verify once again.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

**Removed chai warning block(not required).
"THIS_IS_UNDEFINED" is required

warning.code === "CIRCULAR_DEPENDENCY" &&
warning.importer.indexOf(path.normalize("node_modules/chai/lib") === 0)
) {
// Chai contains circular references, but they are not fatal and can be ignored.
return;
}

console.error(`(!) ${warning.message}`);
};
} else if (production) {
baseConfig.plugins.push(uglify());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For Node.js, we released minified CJS bundle to customers. When there is an exception in SDK, stack trace is unreadable. Any good suggestions? @bterlson @jeremymeng @HarshaNalluru

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcemaps! See below.

}

return baseConfig;
}

export function browserConfig(test = false) {
const baseConfig = {
input: "dist-esm/src/index.browser.js",
external: ["ms-rest-js"],
output: {
file: "browser/index.js",
banner: banner,
format: "umd",
name: "azblob",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a note: this will likely change to align with .net naming conventions. Expect something like Azure.Storage.Blob instead, but let's keep it the same for now.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please don't change this before next breaking change. : )

sourcemap: true
},
plugins: [
sourcemaps(),
replace(
// ms-rest-js is externalized so users must include it prior to using this bundle.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure this comment is relevant and can be deleted IMO.

{
delimiters: ["", ""],
values: {
// replace dynamic checks with if (false) since this is for
// browser only. Rollup's dead code elimination will remove
// any code guarded by if (isNode) { ... }
"if (isNode)": "if (false)"
}
}
),
// os is not used by the browser bundle, so just shim it
shim({
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these shims actually needed?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • dotenv is needed
  • os is present from the beginning

Update - shimming both of them is required.

dotenv: `export function config() { }`,
os: `
export const type = 1;
export const release = 1;
`
}),
nodeResolve({
module: true,
browser: true,
preferBuiltins: false
}),
cjs({
namedExports: {
events: ["EventEmitter"],
assert: [
"ok",
"deepEqual",
"equal",
"fail",
"deepStrictEqual",
"notDeepEqual"
]
}
}),
json()
]
};

if (test) {
baseConfig.input = [
"dist-esm/test/*.spec.js",
"dist-esm/test/browser/*.spec.js"
];
baseConfig.plugins.unshift(multiEntry({ exports: false }));
baseConfig.output.file = "dist-test/index.browser.js";
baseConfig.onwarn = warning => {
if (warning.code === "THIS_IS_UNDEFINED") {
// This error happens frequently due to TypeScript emitting `this` at the
// top-level of a module. In this case its fine if it gets rewritten to
// undefined, so ignore this error.
return;
}

if (
warning.code === "CIRCULAR_DEPENDENCY" &&
warning.importer.indexOf(path.normalize("node_modules/chai/lib") === 0)
) {
// Chai contains circular references, but they are not fatal and can be ignored.
return;
}

console.error(`(!) ${warning.message}`);
};
} else if (production) {
baseConfig.plugins.push(uglify());
}

return baseConfig;
}
108 changes: 12 additions & 96 deletions sdk/storage/storage-blob/rollup.config.js
Original file line number Diff line number Diff line change
@@ -1,101 +1,17 @@
import nodeResolve from "rollup-plugin-node-resolve";
import { uglify } from "rollup-plugin-uglify";
import replace from "rollup-plugin-replace";
import commonjs from "rollup-plugin-commonjs";
import shim from "rollup-plugin-shim";
// import visualizer from "rollup-plugin-visualizer";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

const version = require("./package.json").version;
const banner = [
"/*!",
` * Azure Storage SDK for JavaScript - Blob, ${version}`,
" * Copyright (c) Microsoft and contributors. All rights reserved.",
" */"
].join("\n");
import * as base from "./rollup.base.config";

const nodeRollupConfigFactory = () => {
return {
external: ["@azure/ms-rest-js", "crypto", "fs", "events", "os", "stream"],
input: "dist-esm/src/index.js",
output: {
file: "dist/index.js",
format: "cjs",
sourcemap: true
},
plugins: [nodeResolve(), uglify()]
};
};
const inputs = [];

const browserRollupConfigFactory = isProduction => {
const browserRollupConfig = {
input: "dist-esm/src/index.browser.js",
output: {
file: "browser/azure-storage.blob.js",
banner: banner,
format: "umd",
name: "azblob",
sourcemap: true
},
plugins: [
replace({
delimiters: ["", ""],
values: {
// replace dynamic checks with if (false) since this is for
// browser only. Rollup's dead code elimination will remove
// any code guarded by if (isNode) { ... }
"if (isNode)": "if (false)"
}
}),
// os is not used by the browser bundle, so just shim it
shim({
dotenv: `export function config() { }`,
os: `
export const type = 1;
export const release = 1;
`
}),
nodeResolve({
module: true,
browser: true,
preferBuiltins: false
}),
commonjs({
namedExports: {
events: ["EventEmitter"],
assert: [
"ok",
"deepEqual",
"equal",
"fail",
"deepStrictEqual",
"notDeepEqual"
]
}
})
]
};
if (!process.env.ONLY_BROWSER) {
inputs.push(base.nodeConfig());
}

if (isProduction) {
browserRollupConfig.output.file = "browser/azure-storage.blob.min.js";
browserRollupConfig.plugins.push(
uglify({
output: {
preamble: banner
}
})
// Comment visualizer because it only works on Node.js 8+; Uncomment it to get bundle analysis report
// visualizer({
// filename: "./statistics.html",
// sourcemap: true
// })
);
}
// Disable this until we are ready to run rollup for the browser.
if (!process.env.ONLY_NODE) {
inputs.push(base.browserConfig());
}

return browserRollupConfig;
};

export default [
browserRollupConfigFactory(false),
browserRollupConfigFactory(true),
nodeRollupConfigFactory()
];
export default inputs;