diff --git a/.babelrc b/.babelrc index 3ddf9ba22..297164560 100644 --- a/.babelrc +++ b/.babelrc @@ -1,14 +1,31 @@ { "presets": [ - ["@babel/preset-env", { - "modules": false, - "useBuiltIns": false - }], + "@babel/preset-env", "@babel/preset-react" ], "plugins": [ ["@babel/plugin-proposal-class-properties", { "loose": true }], "@babel/plugin-proposal-optional-chaining", - "@babel/plugin-proposal-object-rest-spread" - ] + "@babel/plugin-proposal-object-rest-spread", + "@babel/plugin-proposal-export-default-from" + ], + "env": { + "module": { + "presets": [ + ["@babel/preset-env", { + "modules": false, + "useBuiltIns": false, + "targets": { + "esmodules": true + } + }] + ], + "plugins": [ + "./plugins/babel/stylus" + ], + "ignore": [ + "node_modules/**" + ] + }, + } } diff --git a/package.json b/package.json index 0cebbd3b9..fcac07a38 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "0.0.1-beta.6", "description": "🏔 Junipero Design System React components", "main": "dist/junipero.cjs.js", - "jsnext:main": "dist/junipero.es.js", - "module": "dist/junipero.es.js", + "jsnext:main": "dist/lib/index.js", + "module": "dist/lib/index.js", "unpkg": "dist/junipero.min.js", "cdn": "dist/junipero.min.js", "esnext": "src", @@ -18,8 +18,10 @@ "react-popper": "^1.3.0" }, "devDependencies": { - "@babel/core": "^7.1.2", + "@babel/cli": "^7.2.0", + "@babel/core": "^7.2.0", "@babel/plugin-proposal-class-properties": "^7.1.0", + "@babel/plugin-proposal-export-default-from": "^7.2.0", "@babel/plugin-proposal-object-rest-spread": "^7.0.0", "@babel/plugin-proposal-optional-chaining": "^7.0.0", "@babel/plugin-transform-runtime": "^7.1.0", @@ -28,6 +30,7 @@ "autoprefixer": "^9.3.1", "babel-eslint": "^10.0.1", "babel-loader": "^8.0.4", + "clean-css": "^4.2.1", "clean-webpack-plugin": "^0.1.19", "css-loader": "^1.0.1", "eslint": "^5.8.0", @@ -73,10 +76,11 @@ "prop-types": "^15.6.2" }, "scripts": { - "serve": "./node_modules/.bin/webpack-dev-server --config ./webpack.dev.js --hot --inline --open", + "serve": "./node_modules/.bin/webpack-dev-server --config ./webpack.config.js --hot --inline --open", "clean": "rm -r ./dist || true", - "build-webpack": "./node_modules/.bin/webpack --config webpack.release.js", - "build-rollup": "yarn clean && ./node_modules/.bin/rollup -c", - "prepack": "yarn build-rollup" + "build:module": "BABEL_ENV=module ./node_modules/.bin/babel ./src --out-dir ./dist/lib", + "build:browser": "BABEL_ENV=browser ./node_modules/.bin/rollup -c", + "build": "yarn clean && yarn build:browser && yarn build:module", + "prepack": "yarn build" } } diff --git a/plugins/babel/stylus.js b/plugins/babel/stylus.js new file mode 100644 index 000000000..28b790a1e --- /dev/null +++ b/plugins/babel/stylus.js @@ -0,0 +1,99 @@ +/* global process */ + +const fs = require('fs'); +const { dirname, isAbsolute, resolve } = require('path'); +const postCSS = require('postcss'); +const autoprefixer = require('autoprefixer'); +const stylus = require('stylus'); + +const cleanCSS = require('../post-css/clean-css'); + +/* + MODULE REGEX WILL RETURN STYLUS NODE_MODULE IMPORT + WILL RETURN TRUE FOR + * @import '~module' + * @require '~another-module' + WILL RETURN FALSE FOR + * @require 'module.styl' + * @require 'module' + * div ~ input +*/ + +const MODULE_REGEX = /(~*@).*/; + +const fileExists = filename => { + try { + const stats = fs.statSync(filename); + return stats.isFile(filename); + } catch (e) { + if (e.code === 'ENOENT') { + return false; + } else { + throw Error(e); + } + } +}; + +const compileStylusFile = (jsFile, stylusFile) => { + // try to resolve as file path + const from = resolveModulePath(jsFile); + let path = resolve(from, stylusFile); + if (!fileExists(path)) { + // try to resolve from node modules + path = resolve('./node_modules', stylusFile); + } + + if (!fileExists(path)) { + throw Error('Cannot find stylus file: ' + stylusFile); + } + + let stylusContent = fs.readFileSync(path, 'utf8'); + + if (stylusContent.match(MODULE_REGEX) !== null) { + const match = stylusContent.match(MODULE_REGEX); + stylusContent = stylusContent + .replace(MODULE_REGEX, match[0].replace('~', '')); + } + + let parsed = stylus(stylusContent) + .include(dirname(path)) + .include(resolve('./node_modules')) + .render(); + + return postCSS([ + autoprefixer, + cleanCSS, + ]).process(parsed).css; +}; + +const resolveModulePath = (filename) => { + const dir = dirname(filename); + if (isAbsolute(dir)) { return dir; } + if (process.env.PWD) { return resolve(process.env.PWD, dir); } + return resolve(dir); +}; + +module.exports = ({types: t}) => { + return { + visitor: { + ImportDeclaration: (path, state) => { + const node = path.node; + if (node && node.source && node.source.value && + node.source.type === 'StringLiteral' && + node.source.value.endsWith('.styl') + ) { + const jsFile = state.file.opts.filename; + const stylusFile = node.source.value; + const css = compileStylusFile(jsFile, stylusFile); + + const id = node.specifiers[0].local.name; + path.replaceWith( + t.variableDeclaration('var', [ + t.variableDeclarator(t.identifier(id), t.stringLiteral(css)), + ]) + ); + } + }, + }, + }; +}; diff --git a/plugins/post-css/clean-css.js b/plugins/post-css/clean-css.js new file mode 100644 index 000000000..188aa47fa --- /dev/null +++ b/plugins/post-css/clean-css.js @@ -0,0 +1,10 @@ +const PostCSS = require('postcss'); +const CleanCSS = require('clean-css'); + +module.exports = (css, res) => { + const cleancss = new CleanCSS(); + const minified = cleancss.minify(css.toString()); + + res.root = PostCSS.parse(minified.styles); + return res; +}; diff --git a/rollup.config.js b/rollup.config.js index 1040408d1..3894c91b8 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -66,7 +66,6 @@ const libConfig = (config = defaultConfig()) => ({ ...config, output: [ { file: 'dist/junipero.cjs.js', format: 'cjs' }, - { file: 'dist/junipero.es.js', format: 'es' }, ], }); diff --git a/src/index.js b/src/index.js index 05783eef6..9d32fdc4e 100644 --- a/src/index.js +++ b/src/index.js @@ -1,25 +1,26 @@ import { injectStyles } from './utils'; -export TextField from './TextField'; -export CodeField from './CodeField'; +export BreadCrumb from './BreadCrumb'; +export Button from './Button'; export CheckBox from './CheckBox'; +export CodeField from './CodeField'; +export ColorPicker from './ColorPicker'; +export DateField from './DateField'; +export Dropdown from './Dropdown'; +export DropdownItem from './DropdownItem'; +export DropdownMenu from './DropdownMenu'; +export DropdownToggle from './DropdownToggle'; +export Modal from './Modal'; export SelectField from './SelectField'; export Slider from './Slider'; -export Toggle from './Toggle'; -export DateField from './DateField'; -export Button from './Button'; +export Switch from './Switch'; +export Tab from './Tab'; +export Tabs from './Tabs'; export TagsField from './TagsField'; -export BreadCrumb from './BreadCrumb'; +export TextField from './TextField'; +export Toggle from './Toggle'; export Tooltip from './Tooltip'; -export Tabs from './Tabs'; -export Tab from './Tab'; -export Modal from './Modal'; -export ColorPicker from './ColorPicker'; -export Switch from './Switch'; -export Dropdown from './Dropdown'; -export DropdownToggle from './DropdownToggle'; -export DropdownMenu from './DropdownMenu'; -export DropdownItem from './DropdownItem'; +export { getContainerNode, omit, classNames } from './utils'; import styles from './theme/index.styl'; injectStyles(styles, { id: 'junipero-main-styles' }); diff --git a/webpack.common.js b/webpack.config.js similarity index 52% rename from webpack.common.js rename to webpack.config.js index 8a8821fbf..35343703e 100644 --- a/webpack.common.js +++ b/webpack.config.js @@ -1,13 +1,35 @@ +const webpack = require('webpack'); const path = require('path'); const autoprefixer = require('autoprefixer'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: { - 'junipero': './src/index.js', + 'examples': './examples/index.js', }, - target: 'web', - optimization: { - minimize: false, + devtool: 'inline-source-map', + mode: 'development', + devServer: { + contentBase: './dist', + port: 65000, + host: 'localhost', + historyApiFallback: true, + }, + plugins: [ + new webpack.LoaderOptionsPlugin({ + debug: true, + }), + new HtmlWebpackPlugin({ + template: './examples/index.html', + chunks: ['examples'], + inject: true, + }), + ], + resolve: { + extensions: ['.js'], + alias: { + '@poool/junipero': path.resolve('./src'), + }, }, module: { rules: [{ @@ -37,12 +59,4 @@ module.exports = { loader: 'file-loader', }], }, - node: false, - output: { - path: path.join(__dirname, 'dist'), - filename: '[name].js', - library: 'junipero', - libraryTarget: 'umd', - sourceMapFilename: '[name].js.map', - }, }; diff --git a/yarn.lock b/yarn.lock index 637e0089e..fa82988fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,23 @@ # yarn lockfile v1 +"@babel/cli@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.2.0.tgz#505ed8d351daee6a88918da02c046c18c8c5a24f" + integrity sha512-FLteTkEoony0DX8NbnT51CmwmLBzINdlXmiJCSqCLmqWCDA/xk8EITPWqwDnVLbuK0bsZONt/grqHnQzQ15j0Q== + dependencies: + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + lodash "^4.17.10" + mkdirp "^0.5.1" + output-file-sync "^2.0.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + chokidar "^2.0.3" + "@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" @@ -9,27 +26,27 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e" - integrity sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw== +"@babel/core@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.0.tgz#a4dd3814901998e93340f0086e9867fefa163ada" + integrity sha512-7pvAdC4B+iKjFFp9Ztj0QgBndJ++qaMeonT185wAqUnhipw8idm9Rv1UMyBuKtYjfl6ORNkgEgcsYLfHX/GpLw== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.2" - "@babel/helpers" "^7.1.2" - "@babel/parser" "^7.1.2" + "@babel/generator" "^7.2.0" + "@babel/helpers" "^7.2.0" + "@babel/parser" "^7.2.0" "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.1.2" + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.2.0" convert-source-map "^1.1.0" - debug "^3.1.0" - json5 "^0.5.0" + debug "^4.1.0" + json5 "^2.1.0" lodash "^4.17.10" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.1.2", "@babel/generator@^7.1.3": +"@babel/generator@^7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.3.tgz#2103ec9c42d9bdad9190a6ad5ff2d456fd7b8673" integrity sha512-ZoCZGcfIJFJuZBqxcY9OjC1KW2lWK64qrX1o4UYL3yshVhwKFYgzpWZ0vvtGMNJdTlvkw0W+HR1VnYN8q3QPFQ== @@ -40,6 +57,17 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.1.6", "@babel/generator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.0.tgz#eaf3821fa0301d9d4aef88e63d4bcc19b73ba16c" + integrity sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg== + dependencies: + "@babel/types" "^7.2.0" + jsesc "^2.5.1" + lodash "^4.17.10" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -203,14 +231,14 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helpers@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5" - integrity sha512-Myc3pUE8eswD73aWcartxB16K6CGmHDv9KxOmD2CeOs/FaEAQodr3VYGmlvOmog60vNQ2w8QbatuahepZwrHiA== +"@babel/helpers@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.2.0.tgz#8335f3140f3144270dc63c4732a4f8b0a50b7a21" + integrity sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A== dependencies: "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.1.2" + "@babel/traverse" "^7.1.5" + "@babel/types" "^7.2.0" "@babel/highlight@^7.0.0": version "7.0.0" @@ -226,6 +254,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.3.tgz#2c92469bac2b7fbff810b67fca07bd138b48af77" integrity sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w== +"@babel/parser@^7.1.6", "@babel/parser@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.0.tgz#02d01dbc330b6cbf36b76ac93c50752c69027065" + integrity sha512-M74+GvK4hn1eejD9lZ7967qAwvqTZayQa3g10ag4s9uewgR7TKjeaT0YMyoq+gVfKYABiWZ4MQD701/t5e1Jhg== + "@babel/plugin-proposal-async-generator-functions@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz#41c1a702e10081456e23a7b74d891922dd1bb6ce" @@ -247,6 +280,14 @@ "@babel/helper-replace-supers" "^7.1.0" "@babel/plugin-syntax-class-properties" "^7.0.0" +"@babel/plugin-proposal-export-default-from@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.2.0.tgz#737b0da44b9254b6152fe29bb99c64e5691f6f68" + integrity sha512-NVfNe7F6nsasG1FnvcFxh2FN0l04ZNe75qTOAVOILWPam0tw9a63RtT/Dab8dPjedZa4fTQaQ83yMMywF9OSug== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.2.0" + "@babel/plugin-proposal-json-strings@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e" @@ -302,6 +343,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-export-default-from@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.2.0.tgz#edd83b7adc2e0d059e2467ca96c650ab6d2f3820" + integrity sha512-c7nqUnNST97BWPtoe+Ssi+fJukc9P9/JMZ71IOMNQWza2E+Psrd46N6AEvtw6pqK+gt7ChjXyrw4SPDO79f3Lw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd" @@ -683,6 +731,21 @@ globals "^11.1.0" lodash "^4.17.10" +"@babel/traverse@^7.1.5", "@babel/traverse@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" + integrity sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.6" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.1.6" + "@babel/types" "^7.1.6" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.10" + "@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.3.tgz#3a767004567060c2f40fca49a304712c525ee37d" @@ -692,6 +755,15 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" +"@babel/types@^7.1.6", "@babel/types@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.0.tgz#7941c5b2d8060e06f9601d6be7c223eef906d5d8" + integrity sha512-b4v7dyfApuKDvmPb+O488UlGuR1WbwMXFsO/cyqMrnfvRAChZKJAYeeglWTjUO1b9UghKKgepAQM5tsvBJca6A== + dependencies: + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" @@ -1609,7 +1681,7 @@ check-types@^7.3.0: resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" integrity sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg== -chokidar@^2.0.0, chokidar@^2.0.2: +chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== @@ -1676,7 +1748,7 @@ classnames@^2.2.5: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== -clean-css@4.2.x: +clean-css@4.2.x, clean-css@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== @@ -1797,7 +1869,7 @@ commander@2.17.x, commander@~2.17.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.11.0, commander@^2.18.0: +commander@^2.11.0, commander@^2.18.0, commander@^2.8.1: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== @@ -2172,7 +2244,7 @@ date-now@^0.1.4: resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= -debug@*, debug@^4.0.1: +debug@*, debug@^4.0.1, debug@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== @@ -3121,6 +3193,11 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.2.1" +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -3225,7 +3302,7 @@ glob@7.0.x: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== @@ -3898,7 +3975,7 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-obj@^1.0.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= @@ -4084,6 +4161,13 @@ json5@^0.5.0: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= +json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -4890,6 +4974,15 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +output-file-sync@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-2.0.1.tgz#f53118282f5f553c2799541792b723a4c71430c0" + integrity sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ== + dependencies: + graceful-fs "^4.1.11" + is-plain-obj "^1.1.0" + mkdirp "^0.5.1" + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -6428,6 +6521,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slice-ansi@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"