├── .eslintignore
├── .eslintrc.js
├── .github
└── FUNDING.yml
├── .gitignore
├── .npmignore
├── LICENSE
├── README.md
├── commands
└── basec
│ ├── index.js
│ └── templates
│ ├── Base.vue
│ └── BaseButton.vue
├── docs
├── README.md
└── images
│ ├── ui_doc_1.png
│ ├── ui_doc_2.png
│ ├── ui_doc_3.png
│ ├── ui_doc_4.png
│ └── ui_doc_5.png
├── generator
├── index.js
└── template
│ └── src
│ ├── App.vue
│ ├── router
│ └── index.js
│ ├── store
│ ├── index.js
│ └── modules
│ │ └── index.js
│ └── views
│ └── Home.vue
├── index.js
├── logo.png
├── optionals
├── baseComponents
│ ├── index.js
│ ├── resources
│ │ └── icons.svg
│ └── template
│ │ └── src
│ │ ├── components
│ │ └── base
│ │ │ └── BaseIcon.vue
│ │ └── main.js
├── index.js
└── prettier
│ └── index.js
├── package-lock.json
├── package.json
├── prompts.js
├── ui.js
└── utils
└── colors.js
/.eslintignore:
--------------------------------------------------------------------------------
1 | # ignore all template files
2 |
3 | optionals/baseComponents/*
4 | generator/*
5 |
6 | !optionals/baseComponents/index.js
7 | !generator/index.js
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | commonjs: true,
4 | es2020: true,
5 | node: true,
6 | },
7 | extends: ["airbnb-base"],
8 | parserOptions: {
9 | ecmaVersion: 2020,
10 | },
11 | rules: {
12 | quotes: [2, "double", { avoidEscape: true }],
13 | "linebreak-style": "off",
14 | "no-console": "off",
15 | "no-restricted-syntax": "off",
16 | "no-plusplus": [2, { allowForLoopAfterthoughts: true }],
17 | },
18 | };
19 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: devtonymanjarres
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # default
2 | .vscode
3 | node_modules
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | # default
2 | .vscode
3 | node_modules
4 |
5 | # ignore docs files
6 | docs
7 |
8 | # ignore eslint files
9 | .eslintignore
10 | .eslintrc.js
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Miguel Manjarres
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Vue CLI Plugin Clean
2 | [](https://github.com/DevTony101/vue-cli-plugin-clean/blob/master/LICENSE)
3 | [](https://www.npmjs.com/package/vue-cli-plugin-clean)
4 | [](https://www.npmjs.com/package/vue-cli-plugin-clean)
5 | [](https://github.com/DevTony101/vue-cli-plugin-clean)
6 | [](https://www.npmjs.com/package/vue-cli-plugin-clean)
7 |
8 | A Vue 2.x plugin that helps you bootstrap your application by performing some common configurations.
9 |
10 | Table of Contents
11 | =================
12 | * [Features](#features)
13 | * [General](#general)
14 | * [Support for base components](#support-for-base-components)
15 | * [Prettier configuration](#prettier-configuration)
16 | * [Automatic import for Vuex modules](#automatic-import-for-vuex-modules)
17 | * [Usage](#usage)
18 | * [Getting started](#getting-started)
19 | * [Using the BaseIcon component](#using-the-baseicon-component)
20 | * [Using the `basec` command](#using-the-basec-command)
21 | * [Using `basec` through NPM scripts](#using-basec-through-npm-scripts)
22 | * [Using `basec` through the Vue UI](#using-basec-through-the-vue-ui)
23 | * [About](#about)
24 | * [Why should you use this plugin?](#why-should-you-use-this-plugin)
25 | * [FAQ](#faq)
26 |
27 | ## Features
28 | ### General
29 | The main goal of this plugin is to quickly set up a project by deleting some files and components created by the Vue CLI service. By default this plugin will:
30 |
31 | - Delete everything in the `components` folder
32 | - Delete everything in the `views` folder except the `Home.vue` file
33 | - Re-write the `router/index.js` file to only include the route to the `Home.vue` file
34 | - Re-write the `App.vue` file to remove all the boilerplate code
35 |
36 | ### Support for base components
37 | This an opt-in feature that you can enable when installing this plugin (go to the [getting started](#general) section if you want to know more about that).
38 |
39 | It is a good practice that you keep a handful of components that you are going to use across all your Vue application (like buttons, form inputs, etc). These type of components are called **Base Components**. Normally you would add them to the global scope by editing the `main.js` file but, if you chose to add this feature, this plugin automatically adds the necessary code to register base components to a process called [global registering](https://vuejs.org/v2/guide/components-registration.html#Automatic-Global-Registration-of-Base-Components).
40 |
41 | In addition to that, this plugin will create a base component called `BaseIcon`, a component you can use to display **SVG** icons effortlessly. If you want know how to use it, refer to the [using the BaseIcon component](#using-the-baseicon-component) section.
42 |
43 | Lastly, this feature adds a new command to your project called `basec` that will let you create base components directly from the command line. If you wanna know more about that please refer to the [using the basec command](#using-the-basec-command) section.
44 |
45 | After all the configurations are done, the file structure of your app will the look something like this:
46 |
47 | ```diff
48 | public
49 | ├── favicon.ico
50 | + ├── icons.svg
51 | ├── index.html
52 | src
53 | └── assets
54 | │ ├── logo.png
55 | └── components
56 | │ └── base
57 | + │ ├── BaseIcon.vue
58 | └── router
59 | │ ├── index.js
60 | └── store
61 | │ ├── index.js
62 | └── views
63 | │ ├── Home.vue
64 | ├── App.vue
65 | ├── main.js
66 | ```
67 |
68 | ### Prettier configuration
69 | This an opt-in feature that you can enable when installing this plugin (go to the [getting started](#general) section if you want to know more about that).
70 |
71 | If you chose Prettier as your code formatter, you might want to configure it with some additional tweaks. This plugin adds a `.prettierrc.js` configuration file to your root folder with some default options. (It will only surt effect if the `@vue/eslint-config-prettier` plugin is installed on your project).
72 |
73 | ```js
74 | // Default structure of the .prettierrc.js config file
75 | module.exports = {
76 | trailingComma: "es5",
77 | vueIndentScriptAndStyle: true,
78 | };
79 | ```
80 |
81 | ### Automatic import for Vuex modules
82 | If you use **Vuex** in your project, Vue Clean will create a folder called `store/modules`. Inside of it there will be an `index.js` file that will automatically export all of the files you create inside the folder! Say goodbye to those days where you had to manually import your modules inside the Vuex instance. What's even better, there's no configuration needed from your side, you can start using right out-of-the-box after Vue Clean has successfully been installed.
83 |
84 | ## Usage
85 | ### Getting started
86 | Open your vue-cli project through your terminal and write:
87 |
88 | ```
89 | vue add clean
90 | ```
91 |
92 | After that, the vue-cli service will install the plugin and then ask you about some additional features you might want to add:
93 |
94 | - [Support for base components](#support-for-base-components)
95 | - [Additional prettier configuration](#prettier-configuration)
96 |
97 | Both of those features are **optional** but beware, the vue-cli service will try to add them by _default_. When the configurations are complete, the plugin will
98 | notify you about what files were _created_, _modified_ or _deleted_.
99 |
100 | ### Using the BaseIcon component
101 | The `BaseIcon` component renders an svg element that is located on the `icons.svg` file. The way you add a new svg elements is by writing the following inside the `defs` tags:
102 |
103 | ```html
104 |
105 |
106 |
107 | ```
108 |
109 | Then you can use the `BaseIcon` component like this:
110 |
111 | ```vue
112 |
113 | ```
114 |
115 | The `icon` prop is **required**. Note that the value you pass to the `icon` prop must match the value you put on the `id` field of the svg element you want to render.
116 |
117 | ### Using the `basec` command
118 | When the [support for the base components](#support-for-base-components) is added, the plugin adds a new vue-cli command called `basec`. The `basec` command lets you create a new base component
119 | directly from the command line.
120 |
121 | ```
122 | Usage: vue-cli-service basec name [options]
123 |
124 | Options:
125 |
126 | --scaffold-button Generates a predefined base component for a button
127 | --prefix The prefix for the name of the component. By default 'Base'
128 | ```
129 |
130 | The `name` is the name of the base component (without 'Base' or any other prefix).
131 |
132 | #### Examples
133 | ##### Creating a dummy base component
134 | Let's say we want to create a 'dummy' base component for prototyping purposes. We would do as follows:
135 |
136 | ```
137 | vue-cli-service basec dummy
138 | ```
139 |
140 | When executed, the command will create a new base component called `BaseDummy.vue`.
141 |
142 | ##### Creating a scaffolded button component
143 | Sometimes you would like to test your design quickly by adding new components. Among the most used components are buttons. The `basec` command lets you create a
144 | brand new button component, scaffolded with everything you would need:
145 |
146 | - Binding for listeners
147 | - Binding for attributes that are _not_ inherited by the div container
148 | - Some default styles and animations
149 |
150 | Let's then say we want to create a `BuyButton` for an e-commerce site. We would do as follows:
151 |
152 | ```
153 | vue-cli-service basec BuyButton --scaffold-button
154 | ```
155 |
156 | When executed, the command will create a new base component called `BaseBuyButton.vue`.
157 |
158 | ##### Defining a different prefix
159 | In certain cases you might want to define a different prefix than 'Base'. Although not recommended the `basec` command lets you define a different prefix like so:
160 |
161 | ```
162 | vue-cli-service basec BuyButton --scaffold-button --prefix custom
163 | ```
164 |
165 | When executed, the command will create a new base component called `CustomBuyButton.vue`.
166 |
167 | #### Using `basec` through NPM scripts
168 | You can also use the `basec` command through the npm script that is created when the plugin is installed. Be aware however, that if you want to pass the additional options
169 | seen in the previous section you must put them after a double dash like so:
170 |
171 | ```
172 | npm run basec BuyButton -- --scaffold-button --prefix custom
173 | ```
174 |
175 | This will have the same result as the previous example.
176 |
177 | #### Using `basec` through the Vue UI
178 | You can also use the `basec` command through the Vue user interface like so:
179 |
180 | - In the UI, open your project and go to the `Tasks` section, in a newly created project there are going to be three basic commands: `serve`, `build` and `lint`. Vue Clean also adds a new command called `basec`.
181 |
182 | - You can configure the options for the `basec` command in the modal window opened by the `Parameters` button. In the following example we are replicating the `BaseDummy` component we created in the previous section.
183 |
184 |
185 |
186 |
187 |
188 | Now if you press the `Run task` button, the following message will appear on the console:
189 |
190 |
191 |
192 |
193 |
194 | - Through the modal window you can also choose what template you want your component to use through a combobox element. In the following example we are replicating the `CustomBuyButton` we created in the previous section.
195 |
196 |
197 |
198 |
199 |
200 | The result is the same as you would expect:
201 |
202 |
203 |
204 |
205 |
206 | ## About
207 | ### Why should you use this plugin?
208 | Configuring a new Vue project can be tedious, deleting the autogenerated files, installing the necessary dependencies... This plugin aims to be your tool to aid you in that
209 | task, doing all the work so you can start your project as soon as possible. Also:
210 |
211 | - **It's dependency free**: This plugin does not depend on any additional NPM package, making the plugin easy to install and without incrementing your `node_modules` folder size.
212 | - **It has a unique set of features**: This plugin offers a unique set of tools and features that will help you create your next Vue project right away!
213 |
214 | ### FAQ
215 |
216 | #### What if I don't have vuex or vue-router?
217 | You may have seen that in the [directory graph](#support-for-base-components) above there are three folders: `store/`, `router/` and `views/` that are specific to `vuex` and `vue-router` respectively, does that mean that you have to have them installed in your project in order to use this plugin? **No**, they are put in there just as an example. These files: `router/index.js`, `views/**` and `src/main.js` will be created and/or modified **only** if they need to and if the user (you) agrees to.
218 |
219 | #### What if I use a code formatter other than Prettier?
220 | Currently, Vue Clean does not support other code formatters for additional configuration. This will be fixed in future versions.
221 |
222 | #### What other options exist for scaffolding a base component?
223 | Currently, Vue Clean only supports the button scaffolding. Form input based components are to be in next updates.
224 |
--------------------------------------------------------------------------------
/commands/basec/index.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-use-before-define */
2 | /* eslint-disable global-require */
3 | module.exports = (args, api) => {
4 | const fs = require("fs");
5 | const { EOL } = require("os");
6 | const { RED, GREEN } = require("../../utils/colors");
7 | const componentName = args._[0];
8 | const scaffoldButton = args["scaffold-button"];
9 | const prefix = args.prefix ? capitalize(args.prefix) : "Base";
10 |
11 | if (componentName || scaffoldButton) {
12 | let filename = componentName ? `${prefix + capitalize(componentName)}` : "BaseButton";
13 | let directory = `src/components/base/${filename}.vue`;
14 | let dirPath = api.resolve(directory);
15 | let auxFilename = filename;
16 | while (fs.existsSync(dirPath)) {
17 | auxFilename = `${filename}-${Math.random().toString(36).slice(-5)}`;
18 | directory = `src/components/base/${auxFilename}.vue`;
19 | dirPath = api.resolve(directory);
20 | }
21 | if (filename !== auxFilename) {
22 | console.log(`\n${filename} already existed.`);
23 | filename = auxFilename;
24 | }
25 | const content = replaceContent(`${__dirname}/templates/Base${scaffoldButton ? "Button" : ""}.vue`, /name: "base",/, ` name: "${filename}",`);
26 | fs.writeFileSync(dirPath, content.join(EOL), { encoding: "utf-8" });
27 | console.log(GREEN, "CREATED ", directory);
28 | } else {
29 | console.log(RED, "\nError: You must supply either a name or a scaffold option");
30 | }
31 |
32 | function replaceContent(path, strMatch, strReplace) {
33 | const content = fs.readFileSync(path, { encoding: "utf-8" });
34 | const lines = content.split(/\r?\n/g);
35 | const renderIndex = lines.findIndex((line) => line.match(strMatch));
36 | lines[renderIndex] = strReplace;
37 | return lines;
38 | }
39 |
40 | function capitalize(str) {
41 | return str[0].toUpperCase() + str.substring(1);
42 | }
43 | };
44 |
--------------------------------------------------------------------------------
/commands/basec/templates/Base.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/commands/basec/templates/BaseButton.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 | Submit
10 |
11 |
12 |
13 |
14 |
30 |
31 |
56 |
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
1 | # Docs
2 |
3 | This folder contains assets used for the documentation of this plugin.
4 |
5 | ## Content
6 |
7 | | sub-folder | description |
8 | | ---------- | --------------------------------------------------- |
9 | | `images/` | Contains the helper images used in the README file. |
--------------------------------------------------------------------------------
/docs/images/ui_doc_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevTony101/vue-cli-plugin-clean/638faa724a3064ca2b3cea3b5bc41cc01f5d0eb9/docs/images/ui_doc_1.png
--------------------------------------------------------------------------------
/docs/images/ui_doc_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevTony101/vue-cli-plugin-clean/638faa724a3064ca2b3cea3b5bc41cc01f5d0eb9/docs/images/ui_doc_2.png
--------------------------------------------------------------------------------
/docs/images/ui_doc_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevTony101/vue-cli-plugin-clean/638faa724a3064ca2b3cea3b5bc41cc01f5d0eb9/docs/images/ui_doc_3.png
--------------------------------------------------------------------------------
/docs/images/ui_doc_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevTony101/vue-cli-plugin-clean/638faa724a3064ca2b3cea3b5bc41cc01f5d0eb9/docs/images/ui_doc_4.png
--------------------------------------------------------------------------------
/docs/images/ui_doc_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevTony101/vue-cli-plugin-clean/638faa724a3064ca2b3cea3b5bc41cc01f5d0eb9/docs/images/ui_doc_5.png
--------------------------------------------------------------------------------
/generator/index.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-undef */
2 |
3 | const fs = require("fs");
4 | const path = require("path");
5 | const optionals = require("../optionals/index");
6 | const colors = require("../utils/colors");
7 |
8 | const { log } = console;
9 |
10 | module.exports = (api, options) => {
11 | global.deletedFiles = [];
12 | global.modifiedFiles = ["src/router/index.js", "src/views/Home.vue"];
13 | global.createdFiles = [];
14 | api.render("./template");
15 |
16 | if (options.prettier) optionals.addPrettierConfig(api);
17 | if (options.scaffold) {
18 | optionals.addBaseComponents(api);
19 | api.extendPackage({
20 | scripts: {
21 | basec: "vue-cli-service basec",
22 | },
23 | });
24 | }
25 |
26 | function emptyDirs(directories, exception, audit = true) {
27 | for (let i = 0; i < directories.length; i++) {
28 | const directory = `src/${directories[i]}`;
29 | const dirPath = api.resolve(directory);
30 | const files = fs.readdirSync(dirPath);
31 | for (const file of files) {
32 | const filePath = path.join(dirPath, file);
33 | if (fs.lstatSync(filePath).isFile() && !exception(file)) {
34 | fs.unlinkSync(filePath);
35 | if (audit) {
36 | deletedFiles.push(`${directory + file}`);
37 | }
38 | }
39 | }
40 | }
41 | }
42 |
43 | function showLogs() {
44 | log("\n");
45 | for (const file of deletedFiles) log(colors.RED, "DELETED ", file);
46 | for (const file of modifiedFiles) log(colors.YELLOW, "MODIFIED ", file);
47 | for (const file of createdFiles) log(colors.GREEN, "CREATED ", file);
48 | }
49 |
50 | api.onCreateComplete(() => {
51 | if (!api.hasPlugin("router")) {
52 | emptyDirs(["router/"], () => false, false);
53 | emptyDirs(["views/", "components/"], () => false);
54 | for (const dir of directories) fs.rmdirSync(api.resolve(`src/${dir}`));
55 | modifiedFiles.splice(0, 2);
56 | } else {
57 | emptyDirs(["views/", "components/"], (file) => file === "Home.vue");
58 | }
59 |
60 | if (!api.hasPlugin("vuex")) {
61 | emptyDirs(["store/modules/", "store/"], () => false, false);
62 | fs.rmdirSync(api.resolve("src/store/modules"));
63 | fs.rmdirSync(api.resolve("src/store"));
64 | }
65 |
66 | showLogs();
67 | });
68 | };
69 |
--------------------------------------------------------------------------------
/generator/template/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/generator/template/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 | import VueRouter from "vue-router";
3 | import Home from "../views/Home.vue";
4 |
5 | Vue.use(VueRouter);
6 |
7 | const routes = [
8 | {
9 | path: "/",
10 | name: "Home",
11 | component: Home,
12 | },
13 | ];
14 |
15 | const router = new VueRouter({
16 | mode: "history",
17 | base: process.env.BASE_URL,
18 | routes,
19 | });
20 |
21 | export default router;
22 |
--------------------------------------------------------------------------------
/generator/template/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Vuex from 'vuex';
3 |
4 | import modules from './modules';
5 |
6 | Vue.use(Vuex);
7 |
8 | export default new Vuex.Store({
9 | modules,
10 | state: {},
11 | mutations: {},
12 | actions: {},
13 | });
14 |
--------------------------------------------------------------------------------
/generator/template/src/store/modules/index.js:
--------------------------------------------------------------------------------
1 | const files = require.context('.', false, /\.js$/);
2 | const modules = {};
3 |
4 | files.keys().forEach(key => {
5 | if (key === './index.js') return;
6 | modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default ?? files(key);
7 | });
8 |
9 | export default modules;
10 |
--------------------------------------------------------------------------------
/generator/template/src/views/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | const basec = require("./commands/basec/index");
2 |
3 | module.exports = (api) => {
4 | api.registerCommand("basec", {
5 | description: "Generates a new base component",
6 | usage: "vue-cli-service basec name [options]",
7 | options: {
8 | name: "The name of the component",
9 | "--scaffold-button": "Generates a predefined base component for a button",
10 | "--prefix": "The prefix for the name of the component. By default 'Base'",
11 | },
12 | }, (args) => basec(args, api));
13 | };
14 |
--------------------------------------------------------------------------------
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevTony101/vue-cli-plugin-clean/638faa724a3064ca2b3cea3b5bc41cc01f5d0eb9/logo.png
--------------------------------------------------------------------------------
/optionals/baseComponents/index.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-undef */
2 |
3 | const fs = require("fs");
4 | const path = require("path");
5 |
6 | module.exports = function addBaseComponents(api) {
7 | const root = api.resolve("src/../");
8 | fs.copyFileSync(path.join(__dirname, "resources/icons.svg"), path.join(root, "public/icons.svg"));
9 | const addPlugin = (plugin, option = plugin) => {
10 | if (api.hasPlugin(plugin)) {
11 | api.injectImports(api.entryFile, `import ${option} from "./${option}"`);
12 | api.injectRootOptions(api.entryFile, `${option}`);
13 | }
14 | };
15 |
16 | api.extendPackage({
17 | devDependencies: {
18 | lodash: "^4.17.19",
19 | },
20 | });
21 |
22 | api.render("./template");
23 | addPlugin("vuex", "store");
24 | addPlugin("router");
25 |
26 | createdFiles.push("public/icons.svg");
27 | createdFiles.push("src/components/base/BaseIcon.vue");
28 | if (!modifiedFiles.includes(`${api.entryFile}`)) modifiedFiles.push(`${api.entryFile}`);
29 | };
30 |
--------------------------------------------------------------------------------
/optionals/baseComponents/resources/icons.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/optionals/baseComponents/template/src/components/base/BaseIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/optionals/baseComponents/template/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 | import App from "./App.vue";
3 | import upperFirst from "lodash/upperFirst";
4 | import camelCase from "lodash/camelCase";
5 |
6 | Vue.config.productionTip = false;
7 |
8 | const requireComponent = require.context(
9 | "./components/base",
10 | false,
11 | /Base[A-Z]\w+\.(vue|js)$/
12 | );
13 |
14 | requireComponent.keys().forEach(fileName => {
15 | const componentConfig = requireComponent(fileName);
16 | const componentName = upperFirst(
17 | camelCase(
18 | fileName
19 | .split("/")
20 | .pop()
21 | .replace(/\.\w+$/, "")
22 | )
23 | );
24 | Vue.component(componentName, componentConfig.default || componentConfig);
25 | });
26 |
27 | new Vue({
28 | render: h => h(App),
29 | }).$mount("#app");
--------------------------------------------------------------------------------
/optionals/index.js:
--------------------------------------------------------------------------------
1 | const addPrettierConfig = require("./prettier/index");
2 | const addBaseComponents = require("./baseComponents/index");
3 |
4 | module.exports = { addPrettierConfig, addBaseComponents };
5 |
--------------------------------------------------------------------------------
/optionals/prettier/index.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-param-reassign */
2 | /* eslint-disable no-undef */
3 |
4 | module.exports = function addPrettierConfig(api) {
5 | api.render((files) => {
6 | files[".prettierrc.js"] = api.genJSConfig({
7 | trailingComma: "es5",
8 | vueIndentScriptAndStyle: true,
9 | });
10 | });
11 |
12 | createdFiles.push(".prettierrc.js");
13 | };
14 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-cli-plugin-clean",
3 | "version": "0.5.2",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/code-frame": {
8 | "version": "7.10.4",
9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
10 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
11 | "dev": true,
12 | "requires": {
13 | "@babel/highlight": "^7.10.4"
14 | }
15 | },
16 | "@babel/helper-validator-identifier": {
17 | "version": "7.10.4",
18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
19 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
20 | "dev": true
21 | },
22 | "@babel/highlight": {
23 | "version": "7.10.4",
24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
25 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
26 | "dev": true,
27 | "requires": {
28 | "@babel/helper-validator-identifier": "^7.10.4",
29 | "chalk": "^2.0.0",
30 | "js-tokens": "^4.0.0"
31 | },
32 | "dependencies": {
33 | "chalk": {
34 | "version": "2.4.2",
35 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
36 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
37 | "dev": true,
38 | "requires": {
39 | "ansi-styles": "^3.2.1",
40 | "escape-string-regexp": "^1.0.5",
41 | "supports-color": "^5.3.0"
42 | }
43 | }
44 | }
45 | },
46 | "@eslint/eslintrc": {
47 | "version": "0.2.2",
48 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz",
49 | "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==",
50 | "dev": true,
51 | "requires": {
52 | "ajv": "^6.12.4",
53 | "debug": "^4.1.1",
54 | "espree": "^7.3.0",
55 | "globals": "^12.1.0",
56 | "ignore": "^4.0.6",
57 | "import-fresh": "^3.2.1",
58 | "js-yaml": "^3.13.1",
59 | "lodash": "^4.17.19",
60 | "minimatch": "^3.0.4",
61 | "strip-json-comments": "^3.1.1"
62 | }
63 | },
64 | "@types/json5": {
65 | "version": "0.0.29",
66 | "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
67 | "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
68 | "dev": true
69 | },
70 | "acorn": {
71 | "version": "7.4.1",
72 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
73 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
74 | "dev": true
75 | },
76 | "acorn-jsx": {
77 | "version": "5.3.1",
78 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
79 | "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
80 | "dev": true
81 | },
82 | "ajv": {
83 | "version": "6.12.6",
84 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
85 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
86 | "dev": true,
87 | "requires": {
88 | "fast-deep-equal": "^3.1.1",
89 | "fast-json-stable-stringify": "^2.0.0",
90 | "json-schema-traverse": "^0.4.1",
91 | "uri-js": "^4.2.2"
92 | }
93 | },
94 | "ansi-colors": {
95 | "version": "4.1.1",
96 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
97 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
98 | "dev": true
99 | },
100 | "ansi-regex": {
101 | "version": "5.0.0",
102 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
103 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
104 | "dev": true
105 | },
106 | "ansi-styles": {
107 | "version": "3.2.1",
108 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
109 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
110 | "dev": true,
111 | "requires": {
112 | "color-convert": "^1.9.0"
113 | }
114 | },
115 | "argparse": {
116 | "version": "1.0.10",
117 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
118 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
119 | "dev": true,
120 | "requires": {
121 | "sprintf-js": "~1.0.2"
122 | }
123 | },
124 | "array-includes": {
125 | "version": "3.1.2",
126 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz",
127 | "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==",
128 | "dev": true,
129 | "requires": {
130 | "call-bind": "^1.0.0",
131 | "define-properties": "^1.1.3",
132 | "es-abstract": "^1.18.0-next.1",
133 | "get-intrinsic": "^1.0.1",
134 | "is-string": "^1.0.5"
135 | }
136 | },
137 | "array.prototype.flat": {
138 | "version": "1.2.4",
139 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
140 | "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
141 | "dev": true,
142 | "requires": {
143 | "call-bind": "^1.0.0",
144 | "define-properties": "^1.1.3",
145 | "es-abstract": "^1.18.0-next.1"
146 | }
147 | },
148 | "astral-regex": {
149 | "version": "1.0.0",
150 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
151 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
152 | "dev": true
153 | },
154 | "balanced-match": {
155 | "version": "1.0.0",
156 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
157 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
158 | "dev": true
159 | },
160 | "brace-expansion": {
161 | "version": "1.1.11",
162 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
163 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
164 | "dev": true,
165 | "requires": {
166 | "balanced-match": "^1.0.0",
167 | "concat-map": "0.0.1"
168 | }
169 | },
170 | "call-bind": {
171 | "version": "1.0.0",
172 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
173 | "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
174 | "dev": true,
175 | "requires": {
176 | "function-bind": "^1.1.1",
177 | "get-intrinsic": "^1.0.0"
178 | }
179 | },
180 | "callsites": {
181 | "version": "3.1.0",
182 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
183 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
184 | "dev": true
185 | },
186 | "chalk": {
187 | "version": "4.1.0",
188 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
189 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
190 | "dev": true,
191 | "requires": {
192 | "ansi-styles": "^4.1.0",
193 | "supports-color": "^7.1.0"
194 | },
195 | "dependencies": {
196 | "ansi-styles": {
197 | "version": "4.3.0",
198 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
199 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
200 | "dev": true,
201 | "requires": {
202 | "color-convert": "^2.0.1"
203 | }
204 | },
205 | "color-convert": {
206 | "version": "2.0.1",
207 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
208 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
209 | "dev": true,
210 | "requires": {
211 | "color-name": "~1.1.4"
212 | }
213 | },
214 | "color-name": {
215 | "version": "1.1.4",
216 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
217 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
218 | "dev": true
219 | },
220 | "has-flag": {
221 | "version": "4.0.0",
222 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
223 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
224 | "dev": true
225 | },
226 | "supports-color": {
227 | "version": "7.2.0",
228 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
229 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
230 | "dev": true,
231 | "requires": {
232 | "has-flag": "^4.0.0"
233 | }
234 | }
235 | }
236 | },
237 | "color-convert": {
238 | "version": "1.9.3",
239 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
240 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
241 | "dev": true,
242 | "requires": {
243 | "color-name": "1.1.3"
244 | }
245 | },
246 | "color-name": {
247 | "version": "1.1.3",
248 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
249 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
250 | "dev": true
251 | },
252 | "concat-map": {
253 | "version": "0.0.1",
254 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
255 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
256 | "dev": true
257 | },
258 | "confusing-browser-globals": {
259 | "version": "1.0.10",
260 | "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz",
261 | "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==",
262 | "dev": true
263 | },
264 | "contains-path": {
265 | "version": "0.1.0",
266 | "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
267 | "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
268 | "dev": true
269 | },
270 | "cross-spawn": {
271 | "version": "7.0.3",
272 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
273 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
274 | "dev": true,
275 | "requires": {
276 | "path-key": "^3.1.0",
277 | "shebang-command": "^2.0.0",
278 | "which": "^2.0.1"
279 | }
280 | },
281 | "debug": {
282 | "version": "4.3.1",
283 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
284 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
285 | "dev": true,
286 | "requires": {
287 | "ms": "2.1.2"
288 | }
289 | },
290 | "deep-is": {
291 | "version": "0.1.3",
292 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
293 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
294 | "dev": true
295 | },
296 | "define-properties": {
297 | "version": "1.1.3",
298 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
299 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
300 | "dev": true,
301 | "requires": {
302 | "object-keys": "^1.0.12"
303 | }
304 | },
305 | "doctrine": {
306 | "version": "3.0.0",
307 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
308 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
309 | "dev": true,
310 | "requires": {
311 | "esutils": "^2.0.2"
312 | }
313 | },
314 | "emoji-regex": {
315 | "version": "7.0.3",
316 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
317 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
318 | "dev": true
319 | },
320 | "enquirer": {
321 | "version": "2.3.6",
322 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
323 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
324 | "dev": true,
325 | "requires": {
326 | "ansi-colors": "^4.1.1"
327 | }
328 | },
329 | "error-ex": {
330 | "version": "1.3.2",
331 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
332 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
333 | "dev": true,
334 | "requires": {
335 | "is-arrayish": "^0.2.1"
336 | }
337 | },
338 | "es-abstract": {
339 | "version": "1.18.0-next.1",
340 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
341 | "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
342 | "dev": true,
343 | "requires": {
344 | "es-to-primitive": "^1.2.1",
345 | "function-bind": "^1.1.1",
346 | "has": "^1.0.3",
347 | "has-symbols": "^1.0.1",
348 | "is-callable": "^1.2.2",
349 | "is-negative-zero": "^2.0.0",
350 | "is-regex": "^1.1.1",
351 | "object-inspect": "^1.8.0",
352 | "object-keys": "^1.1.1",
353 | "object.assign": "^4.1.1",
354 | "string.prototype.trimend": "^1.0.1",
355 | "string.prototype.trimstart": "^1.0.1"
356 | }
357 | },
358 | "es-to-primitive": {
359 | "version": "1.2.1",
360 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
361 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
362 | "dev": true,
363 | "requires": {
364 | "is-callable": "^1.1.4",
365 | "is-date-object": "^1.0.1",
366 | "is-symbol": "^1.0.2"
367 | }
368 | },
369 | "escape-string-regexp": {
370 | "version": "1.0.5",
371 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
372 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
373 | "dev": true
374 | },
375 | "eslint": {
376 | "version": "7.15.0",
377 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.15.0.tgz",
378 | "integrity": "sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA==",
379 | "dev": true,
380 | "requires": {
381 | "@babel/code-frame": "^7.0.0",
382 | "@eslint/eslintrc": "^0.2.2",
383 | "ajv": "^6.10.0",
384 | "chalk": "^4.0.0",
385 | "cross-spawn": "^7.0.2",
386 | "debug": "^4.0.1",
387 | "doctrine": "^3.0.0",
388 | "enquirer": "^2.3.5",
389 | "eslint-scope": "^5.1.1",
390 | "eslint-utils": "^2.1.0",
391 | "eslint-visitor-keys": "^2.0.0",
392 | "espree": "^7.3.1",
393 | "esquery": "^1.2.0",
394 | "esutils": "^2.0.2",
395 | "file-entry-cache": "^6.0.0",
396 | "functional-red-black-tree": "^1.0.1",
397 | "glob-parent": "^5.0.0",
398 | "globals": "^12.1.0",
399 | "ignore": "^4.0.6",
400 | "import-fresh": "^3.0.0",
401 | "imurmurhash": "^0.1.4",
402 | "is-glob": "^4.0.0",
403 | "js-yaml": "^3.13.1",
404 | "json-stable-stringify-without-jsonify": "^1.0.1",
405 | "levn": "^0.4.1",
406 | "lodash": "^4.17.19",
407 | "minimatch": "^3.0.4",
408 | "natural-compare": "^1.4.0",
409 | "optionator": "^0.9.1",
410 | "progress": "^2.0.0",
411 | "regexpp": "^3.1.0",
412 | "semver": "^7.2.1",
413 | "strip-ansi": "^6.0.0",
414 | "strip-json-comments": "^3.1.0",
415 | "table": "^5.2.3",
416 | "text-table": "^0.2.0",
417 | "v8-compile-cache": "^2.0.3"
418 | }
419 | },
420 | "eslint-config-airbnb-base": {
421 | "version": "14.2.1",
422 | "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz",
423 | "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==",
424 | "dev": true,
425 | "requires": {
426 | "confusing-browser-globals": "^1.0.10",
427 | "object.assign": "^4.1.2",
428 | "object.entries": "^1.1.2"
429 | }
430 | },
431 | "eslint-import-resolver-node": {
432 | "version": "0.3.4",
433 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz",
434 | "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==",
435 | "dev": true,
436 | "requires": {
437 | "debug": "^2.6.9",
438 | "resolve": "^1.13.1"
439 | },
440 | "dependencies": {
441 | "debug": {
442 | "version": "2.6.9",
443 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
444 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
445 | "dev": true,
446 | "requires": {
447 | "ms": "2.0.0"
448 | }
449 | },
450 | "ms": {
451 | "version": "2.0.0",
452 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
453 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
454 | "dev": true
455 | }
456 | }
457 | },
458 | "eslint-module-utils": {
459 | "version": "2.6.0",
460 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
461 | "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==",
462 | "dev": true,
463 | "requires": {
464 | "debug": "^2.6.9",
465 | "pkg-dir": "^2.0.0"
466 | },
467 | "dependencies": {
468 | "debug": {
469 | "version": "2.6.9",
470 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
471 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
472 | "dev": true,
473 | "requires": {
474 | "ms": "2.0.0"
475 | }
476 | },
477 | "ms": {
478 | "version": "2.0.0",
479 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
480 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
481 | "dev": true
482 | }
483 | }
484 | },
485 | "eslint-plugin-import": {
486 | "version": "2.22.1",
487 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz",
488 | "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==",
489 | "dev": true,
490 | "requires": {
491 | "array-includes": "^3.1.1",
492 | "array.prototype.flat": "^1.2.3",
493 | "contains-path": "^0.1.0",
494 | "debug": "^2.6.9",
495 | "doctrine": "1.5.0",
496 | "eslint-import-resolver-node": "^0.3.4",
497 | "eslint-module-utils": "^2.6.0",
498 | "has": "^1.0.3",
499 | "minimatch": "^3.0.4",
500 | "object.values": "^1.1.1",
501 | "read-pkg-up": "^2.0.0",
502 | "resolve": "^1.17.0",
503 | "tsconfig-paths": "^3.9.0"
504 | },
505 | "dependencies": {
506 | "debug": {
507 | "version": "2.6.9",
508 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
509 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
510 | "dev": true,
511 | "requires": {
512 | "ms": "2.0.0"
513 | }
514 | },
515 | "doctrine": {
516 | "version": "1.5.0",
517 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
518 | "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
519 | "dev": true,
520 | "requires": {
521 | "esutils": "^2.0.2",
522 | "isarray": "^1.0.0"
523 | }
524 | },
525 | "ms": {
526 | "version": "2.0.0",
527 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
528 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
529 | "dev": true
530 | }
531 | }
532 | },
533 | "eslint-scope": {
534 | "version": "5.1.1",
535 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
536 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
537 | "dev": true,
538 | "requires": {
539 | "esrecurse": "^4.3.0",
540 | "estraverse": "^4.1.1"
541 | }
542 | },
543 | "eslint-utils": {
544 | "version": "2.1.0",
545 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
546 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
547 | "dev": true,
548 | "requires": {
549 | "eslint-visitor-keys": "^1.1.0"
550 | },
551 | "dependencies": {
552 | "eslint-visitor-keys": {
553 | "version": "1.3.0",
554 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
555 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
556 | "dev": true
557 | }
558 | }
559 | },
560 | "eslint-visitor-keys": {
561 | "version": "2.0.0",
562 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
563 | "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
564 | "dev": true
565 | },
566 | "espree": {
567 | "version": "7.3.1",
568 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
569 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
570 | "dev": true,
571 | "requires": {
572 | "acorn": "^7.4.0",
573 | "acorn-jsx": "^5.3.1",
574 | "eslint-visitor-keys": "^1.3.0"
575 | },
576 | "dependencies": {
577 | "eslint-visitor-keys": {
578 | "version": "1.3.0",
579 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
580 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
581 | "dev": true
582 | }
583 | }
584 | },
585 | "esprima": {
586 | "version": "4.0.1",
587 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
588 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
589 | "dev": true
590 | },
591 | "esquery": {
592 | "version": "1.3.1",
593 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
594 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
595 | "dev": true,
596 | "requires": {
597 | "estraverse": "^5.1.0"
598 | },
599 | "dependencies": {
600 | "estraverse": {
601 | "version": "5.2.0",
602 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
603 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
604 | "dev": true
605 | }
606 | }
607 | },
608 | "esrecurse": {
609 | "version": "4.3.0",
610 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
611 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
612 | "dev": true,
613 | "requires": {
614 | "estraverse": "^5.2.0"
615 | },
616 | "dependencies": {
617 | "estraverse": {
618 | "version": "5.2.0",
619 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
620 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
621 | "dev": true
622 | }
623 | }
624 | },
625 | "estraverse": {
626 | "version": "4.3.0",
627 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
628 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
629 | "dev": true
630 | },
631 | "esutils": {
632 | "version": "2.0.3",
633 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
634 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
635 | "dev": true
636 | },
637 | "fast-deep-equal": {
638 | "version": "3.1.3",
639 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
640 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
641 | "dev": true
642 | },
643 | "fast-json-stable-stringify": {
644 | "version": "2.1.0",
645 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
646 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
647 | "dev": true
648 | },
649 | "fast-levenshtein": {
650 | "version": "2.0.6",
651 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
652 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
653 | "dev": true
654 | },
655 | "file-entry-cache": {
656 | "version": "6.0.0",
657 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz",
658 | "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==",
659 | "dev": true,
660 | "requires": {
661 | "flat-cache": "^3.0.4"
662 | }
663 | },
664 | "find-up": {
665 | "version": "2.1.0",
666 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
667 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
668 | "dev": true,
669 | "requires": {
670 | "locate-path": "^2.0.0"
671 | }
672 | },
673 | "flat-cache": {
674 | "version": "3.0.4",
675 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
676 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
677 | "dev": true,
678 | "requires": {
679 | "flatted": "^3.1.0",
680 | "rimraf": "^3.0.2"
681 | }
682 | },
683 | "flatted": {
684 | "version": "3.1.0",
685 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz",
686 | "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==",
687 | "dev": true
688 | },
689 | "fs.realpath": {
690 | "version": "1.0.0",
691 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
692 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
693 | "dev": true
694 | },
695 | "function-bind": {
696 | "version": "1.1.1",
697 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
698 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
699 | "dev": true
700 | },
701 | "functional-red-black-tree": {
702 | "version": "1.0.1",
703 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
704 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
705 | "dev": true
706 | },
707 | "get-intrinsic": {
708 | "version": "1.0.1",
709 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz",
710 | "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==",
711 | "dev": true,
712 | "requires": {
713 | "function-bind": "^1.1.1",
714 | "has": "^1.0.3",
715 | "has-symbols": "^1.0.1"
716 | }
717 | },
718 | "glob": {
719 | "version": "7.1.6",
720 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
721 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
722 | "dev": true,
723 | "requires": {
724 | "fs.realpath": "^1.0.0",
725 | "inflight": "^1.0.4",
726 | "inherits": "2",
727 | "minimatch": "^3.0.4",
728 | "once": "^1.3.0",
729 | "path-is-absolute": "^1.0.0"
730 | }
731 | },
732 | "glob-parent": {
733 | "version": "5.1.2",
734 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
735 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
736 | "dev": true,
737 | "requires": {
738 | "is-glob": "^4.0.1"
739 | }
740 | },
741 | "globals": {
742 | "version": "12.4.0",
743 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
744 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
745 | "dev": true,
746 | "requires": {
747 | "type-fest": "^0.8.1"
748 | }
749 | },
750 | "graceful-fs": {
751 | "version": "4.2.4",
752 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
753 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
754 | "dev": true
755 | },
756 | "has": {
757 | "version": "1.0.3",
758 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
759 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
760 | "dev": true,
761 | "requires": {
762 | "function-bind": "^1.1.1"
763 | }
764 | },
765 | "has-flag": {
766 | "version": "3.0.0",
767 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
768 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
769 | "dev": true
770 | },
771 | "has-symbols": {
772 | "version": "1.0.1",
773 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
774 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
775 | "dev": true
776 | },
777 | "hosted-git-info": {
778 | "version": "2.8.9",
779 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
780 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
781 | "dev": true
782 | },
783 | "ignore": {
784 | "version": "4.0.6",
785 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
786 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
787 | "dev": true
788 | },
789 | "import-fresh": {
790 | "version": "3.2.2",
791 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz",
792 | "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==",
793 | "dev": true,
794 | "requires": {
795 | "parent-module": "^1.0.0",
796 | "resolve-from": "^4.0.0"
797 | }
798 | },
799 | "imurmurhash": {
800 | "version": "0.1.4",
801 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
802 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
803 | "dev": true
804 | },
805 | "inflight": {
806 | "version": "1.0.6",
807 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
808 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
809 | "dev": true,
810 | "requires": {
811 | "once": "^1.3.0",
812 | "wrappy": "1"
813 | }
814 | },
815 | "inherits": {
816 | "version": "2.0.4",
817 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
818 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
819 | "dev": true
820 | },
821 | "is-arrayish": {
822 | "version": "0.2.1",
823 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
824 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
825 | "dev": true
826 | },
827 | "is-callable": {
828 | "version": "1.2.2",
829 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
830 | "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
831 | "dev": true
832 | },
833 | "is-core-module": {
834 | "version": "2.2.0",
835 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
836 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
837 | "dev": true,
838 | "requires": {
839 | "has": "^1.0.3"
840 | }
841 | },
842 | "is-date-object": {
843 | "version": "1.0.2",
844 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
845 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
846 | "dev": true
847 | },
848 | "is-extglob": {
849 | "version": "2.1.1",
850 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
851 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
852 | "dev": true
853 | },
854 | "is-fullwidth-code-point": {
855 | "version": "2.0.0",
856 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
857 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
858 | "dev": true
859 | },
860 | "is-glob": {
861 | "version": "4.0.1",
862 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
863 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
864 | "dev": true,
865 | "requires": {
866 | "is-extglob": "^2.1.1"
867 | }
868 | },
869 | "is-negative-zero": {
870 | "version": "2.0.1",
871 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
872 | "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
873 | "dev": true
874 | },
875 | "is-regex": {
876 | "version": "1.1.1",
877 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
878 | "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
879 | "dev": true,
880 | "requires": {
881 | "has-symbols": "^1.0.1"
882 | }
883 | },
884 | "is-string": {
885 | "version": "1.0.5",
886 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
887 | "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
888 | "dev": true
889 | },
890 | "is-symbol": {
891 | "version": "1.0.3",
892 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
893 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
894 | "dev": true,
895 | "requires": {
896 | "has-symbols": "^1.0.1"
897 | }
898 | },
899 | "isarray": {
900 | "version": "1.0.0",
901 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
902 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
903 | "dev": true
904 | },
905 | "isexe": {
906 | "version": "2.0.0",
907 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
908 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
909 | "dev": true
910 | },
911 | "js-tokens": {
912 | "version": "4.0.0",
913 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
914 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
915 | "dev": true
916 | },
917 | "js-yaml": {
918 | "version": "3.14.1",
919 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
920 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
921 | "dev": true,
922 | "requires": {
923 | "argparse": "^1.0.7",
924 | "esprima": "^4.0.0"
925 | }
926 | },
927 | "json-schema-traverse": {
928 | "version": "0.4.1",
929 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
930 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
931 | "dev": true
932 | },
933 | "json-stable-stringify-without-jsonify": {
934 | "version": "1.0.1",
935 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
936 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
937 | "dev": true
938 | },
939 | "json5": {
940 | "version": "1.0.1",
941 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
942 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
943 | "dev": true,
944 | "requires": {
945 | "minimist": "^1.2.0"
946 | }
947 | },
948 | "levn": {
949 | "version": "0.4.1",
950 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
951 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
952 | "dev": true,
953 | "requires": {
954 | "prelude-ls": "^1.2.1",
955 | "type-check": "~0.4.0"
956 | }
957 | },
958 | "load-json-file": {
959 | "version": "2.0.0",
960 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
961 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
962 | "dev": true,
963 | "requires": {
964 | "graceful-fs": "^4.1.2",
965 | "parse-json": "^2.2.0",
966 | "pify": "^2.0.0",
967 | "strip-bom": "^3.0.0"
968 | }
969 | },
970 | "locate-path": {
971 | "version": "2.0.0",
972 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
973 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
974 | "dev": true,
975 | "requires": {
976 | "p-locate": "^2.0.0",
977 | "path-exists": "^3.0.0"
978 | }
979 | },
980 | "lodash": {
981 | "version": "4.17.21",
982 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
983 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
984 | "dev": true
985 | },
986 | "lru-cache": {
987 | "version": "6.0.0",
988 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
989 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
990 | "dev": true,
991 | "requires": {
992 | "yallist": "^4.0.0"
993 | }
994 | },
995 | "minimatch": {
996 | "version": "3.0.4",
997 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
998 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
999 | "dev": true,
1000 | "requires": {
1001 | "brace-expansion": "^1.1.7"
1002 | }
1003 | },
1004 | "minimist": {
1005 | "version": "1.2.5",
1006 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
1007 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
1008 | "dev": true
1009 | },
1010 | "ms": {
1011 | "version": "2.1.2",
1012 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1013 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1014 | "dev": true
1015 | },
1016 | "natural-compare": {
1017 | "version": "1.4.0",
1018 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1019 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
1020 | "dev": true
1021 | },
1022 | "normalize-package-data": {
1023 | "version": "2.5.0",
1024 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
1025 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
1026 | "dev": true,
1027 | "requires": {
1028 | "hosted-git-info": "^2.1.4",
1029 | "resolve": "^1.10.0",
1030 | "semver": "2 || 3 || 4 || 5",
1031 | "validate-npm-package-license": "^3.0.1"
1032 | },
1033 | "dependencies": {
1034 | "semver": {
1035 | "version": "5.7.1",
1036 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1037 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1038 | "dev": true
1039 | }
1040 | }
1041 | },
1042 | "object-inspect": {
1043 | "version": "1.9.0",
1044 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
1045 | "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==",
1046 | "dev": true
1047 | },
1048 | "object-keys": {
1049 | "version": "1.1.1",
1050 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1051 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
1052 | "dev": true
1053 | },
1054 | "object.assign": {
1055 | "version": "4.1.2",
1056 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
1057 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
1058 | "dev": true,
1059 | "requires": {
1060 | "call-bind": "^1.0.0",
1061 | "define-properties": "^1.1.3",
1062 | "has-symbols": "^1.0.1",
1063 | "object-keys": "^1.1.1"
1064 | }
1065 | },
1066 | "object.entries": {
1067 | "version": "1.1.3",
1068 | "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz",
1069 | "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==",
1070 | "dev": true,
1071 | "requires": {
1072 | "call-bind": "^1.0.0",
1073 | "define-properties": "^1.1.3",
1074 | "es-abstract": "^1.18.0-next.1",
1075 | "has": "^1.0.3"
1076 | }
1077 | },
1078 | "object.values": {
1079 | "version": "1.1.2",
1080 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz",
1081 | "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==",
1082 | "dev": true,
1083 | "requires": {
1084 | "call-bind": "^1.0.0",
1085 | "define-properties": "^1.1.3",
1086 | "es-abstract": "^1.18.0-next.1",
1087 | "has": "^1.0.3"
1088 | }
1089 | },
1090 | "once": {
1091 | "version": "1.4.0",
1092 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1093 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1094 | "dev": true,
1095 | "requires": {
1096 | "wrappy": "1"
1097 | }
1098 | },
1099 | "optionator": {
1100 | "version": "0.9.1",
1101 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
1102 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
1103 | "dev": true,
1104 | "requires": {
1105 | "deep-is": "^0.1.3",
1106 | "fast-levenshtein": "^2.0.6",
1107 | "levn": "^0.4.1",
1108 | "prelude-ls": "^1.2.1",
1109 | "type-check": "^0.4.0",
1110 | "word-wrap": "^1.2.3"
1111 | }
1112 | },
1113 | "p-limit": {
1114 | "version": "1.3.0",
1115 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
1116 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
1117 | "dev": true,
1118 | "requires": {
1119 | "p-try": "^1.0.0"
1120 | }
1121 | },
1122 | "p-locate": {
1123 | "version": "2.0.0",
1124 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
1125 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
1126 | "dev": true,
1127 | "requires": {
1128 | "p-limit": "^1.1.0"
1129 | }
1130 | },
1131 | "p-try": {
1132 | "version": "1.0.0",
1133 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
1134 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
1135 | "dev": true
1136 | },
1137 | "parent-module": {
1138 | "version": "1.0.1",
1139 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1140 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1141 | "dev": true,
1142 | "requires": {
1143 | "callsites": "^3.0.0"
1144 | }
1145 | },
1146 | "parse-json": {
1147 | "version": "2.2.0",
1148 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
1149 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
1150 | "dev": true,
1151 | "requires": {
1152 | "error-ex": "^1.2.0"
1153 | }
1154 | },
1155 | "path-exists": {
1156 | "version": "3.0.0",
1157 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
1158 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
1159 | "dev": true
1160 | },
1161 | "path-is-absolute": {
1162 | "version": "1.0.1",
1163 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1164 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1165 | "dev": true
1166 | },
1167 | "path-key": {
1168 | "version": "3.1.1",
1169 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1170 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1171 | "dev": true
1172 | },
1173 | "path-parse": {
1174 | "version": "1.0.7",
1175 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1176 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1177 | "dev": true
1178 | },
1179 | "path-type": {
1180 | "version": "2.0.0",
1181 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
1182 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
1183 | "dev": true,
1184 | "requires": {
1185 | "pify": "^2.0.0"
1186 | }
1187 | },
1188 | "pify": {
1189 | "version": "2.3.0",
1190 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1191 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1192 | "dev": true
1193 | },
1194 | "pkg-dir": {
1195 | "version": "2.0.0",
1196 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
1197 | "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
1198 | "dev": true,
1199 | "requires": {
1200 | "find-up": "^2.1.0"
1201 | }
1202 | },
1203 | "prelude-ls": {
1204 | "version": "1.2.1",
1205 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
1206 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
1207 | "dev": true
1208 | },
1209 | "progress": {
1210 | "version": "2.0.3",
1211 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
1212 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
1213 | "dev": true
1214 | },
1215 | "punycode": {
1216 | "version": "2.1.1",
1217 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1218 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1219 | "dev": true
1220 | },
1221 | "read-pkg": {
1222 | "version": "2.0.0",
1223 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
1224 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
1225 | "dev": true,
1226 | "requires": {
1227 | "load-json-file": "^2.0.0",
1228 | "normalize-package-data": "^2.3.2",
1229 | "path-type": "^2.0.0"
1230 | }
1231 | },
1232 | "read-pkg-up": {
1233 | "version": "2.0.0",
1234 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
1235 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
1236 | "dev": true,
1237 | "requires": {
1238 | "find-up": "^2.0.0",
1239 | "read-pkg": "^2.0.0"
1240 | }
1241 | },
1242 | "regexpp": {
1243 | "version": "3.1.0",
1244 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
1245 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
1246 | "dev": true
1247 | },
1248 | "resolve": {
1249 | "version": "1.19.0",
1250 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
1251 | "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
1252 | "dev": true,
1253 | "requires": {
1254 | "is-core-module": "^2.1.0",
1255 | "path-parse": "^1.0.6"
1256 | }
1257 | },
1258 | "resolve-from": {
1259 | "version": "4.0.0",
1260 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
1261 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
1262 | "dev": true
1263 | },
1264 | "rimraf": {
1265 | "version": "3.0.2",
1266 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
1267 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
1268 | "dev": true,
1269 | "requires": {
1270 | "glob": "^7.1.3"
1271 | }
1272 | },
1273 | "semver": {
1274 | "version": "7.3.4",
1275 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
1276 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
1277 | "dev": true,
1278 | "requires": {
1279 | "lru-cache": "^6.0.0"
1280 | }
1281 | },
1282 | "shebang-command": {
1283 | "version": "2.0.0",
1284 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1285 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1286 | "dev": true,
1287 | "requires": {
1288 | "shebang-regex": "^3.0.0"
1289 | }
1290 | },
1291 | "shebang-regex": {
1292 | "version": "3.0.0",
1293 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1294 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1295 | "dev": true
1296 | },
1297 | "slice-ansi": {
1298 | "version": "2.1.0",
1299 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
1300 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
1301 | "dev": true,
1302 | "requires": {
1303 | "ansi-styles": "^3.2.0",
1304 | "astral-regex": "^1.0.0",
1305 | "is-fullwidth-code-point": "^2.0.0"
1306 | }
1307 | },
1308 | "spdx-correct": {
1309 | "version": "3.1.1",
1310 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
1311 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
1312 | "dev": true,
1313 | "requires": {
1314 | "spdx-expression-parse": "^3.0.0",
1315 | "spdx-license-ids": "^3.0.0"
1316 | }
1317 | },
1318 | "spdx-exceptions": {
1319 | "version": "2.3.0",
1320 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
1321 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
1322 | "dev": true
1323 | },
1324 | "spdx-expression-parse": {
1325 | "version": "3.0.1",
1326 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
1327 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
1328 | "dev": true,
1329 | "requires": {
1330 | "spdx-exceptions": "^2.1.0",
1331 | "spdx-license-ids": "^3.0.0"
1332 | }
1333 | },
1334 | "spdx-license-ids": {
1335 | "version": "3.0.7",
1336 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
1337 | "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
1338 | "dev": true
1339 | },
1340 | "sprintf-js": {
1341 | "version": "1.0.3",
1342 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
1343 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
1344 | "dev": true
1345 | },
1346 | "string-width": {
1347 | "version": "3.1.0",
1348 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
1349 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
1350 | "dev": true,
1351 | "requires": {
1352 | "emoji-regex": "^7.0.1",
1353 | "is-fullwidth-code-point": "^2.0.0",
1354 | "strip-ansi": "^5.1.0"
1355 | },
1356 | "dependencies": {
1357 | "ansi-regex": {
1358 | "version": "4.1.0",
1359 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
1360 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
1361 | "dev": true
1362 | },
1363 | "strip-ansi": {
1364 | "version": "5.2.0",
1365 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1366 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1367 | "dev": true,
1368 | "requires": {
1369 | "ansi-regex": "^4.1.0"
1370 | }
1371 | }
1372 | }
1373 | },
1374 | "string.prototype.trimend": {
1375 | "version": "1.0.3",
1376 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
1377 | "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==",
1378 | "dev": true,
1379 | "requires": {
1380 | "call-bind": "^1.0.0",
1381 | "define-properties": "^1.1.3"
1382 | }
1383 | },
1384 | "string.prototype.trimstart": {
1385 | "version": "1.0.3",
1386 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz",
1387 | "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==",
1388 | "dev": true,
1389 | "requires": {
1390 | "call-bind": "^1.0.0",
1391 | "define-properties": "^1.1.3"
1392 | }
1393 | },
1394 | "strip-ansi": {
1395 | "version": "6.0.0",
1396 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
1397 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
1398 | "dev": true,
1399 | "requires": {
1400 | "ansi-regex": "^5.0.0"
1401 | }
1402 | },
1403 | "strip-bom": {
1404 | "version": "3.0.0",
1405 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
1406 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
1407 | "dev": true
1408 | },
1409 | "strip-json-comments": {
1410 | "version": "3.1.1",
1411 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
1412 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
1413 | "dev": true
1414 | },
1415 | "supports-color": {
1416 | "version": "5.5.0",
1417 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1418 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1419 | "dev": true,
1420 | "requires": {
1421 | "has-flag": "^3.0.0"
1422 | }
1423 | },
1424 | "table": {
1425 | "version": "5.4.6",
1426 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
1427 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
1428 | "dev": true,
1429 | "requires": {
1430 | "ajv": "^6.10.2",
1431 | "lodash": "^4.17.14",
1432 | "slice-ansi": "^2.1.0",
1433 | "string-width": "^3.0.0"
1434 | }
1435 | },
1436 | "text-table": {
1437 | "version": "0.2.0",
1438 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
1439 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
1440 | "dev": true
1441 | },
1442 | "tsconfig-paths": {
1443 | "version": "3.9.0",
1444 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz",
1445 | "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==",
1446 | "dev": true,
1447 | "requires": {
1448 | "@types/json5": "^0.0.29",
1449 | "json5": "^1.0.1",
1450 | "minimist": "^1.2.0",
1451 | "strip-bom": "^3.0.0"
1452 | }
1453 | },
1454 | "type-check": {
1455 | "version": "0.4.0",
1456 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
1457 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
1458 | "dev": true,
1459 | "requires": {
1460 | "prelude-ls": "^1.2.1"
1461 | }
1462 | },
1463 | "type-fest": {
1464 | "version": "0.8.1",
1465 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
1466 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
1467 | "dev": true
1468 | },
1469 | "uri-js": {
1470 | "version": "4.4.0",
1471 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
1472 | "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
1473 | "dev": true,
1474 | "requires": {
1475 | "punycode": "^2.1.0"
1476 | }
1477 | },
1478 | "v8-compile-cache": {
1479 | "version": "2.2.0",
1480 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
1481 | "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
1482 | "dev": true
1483 | },
1484 | "validate-npm-package-license": {
1485 | "version": "3.0.4",
1486 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
1487 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
1488 | "dev": true,
1489 | "requires": {
1490 | "spdx-correct": "^3.0.0",
1491 | "spdx-expression-parse": "^3.0.0"
1492 | }
1493 | },
1494 | "which": {
1495 | "version": "2.0.2",
1496 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1497 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1498 | "dev": true,
1499 | "requires": {
1500 | "isexe": "^2.0.0"
1501 | }
1502 | },
1503 | "word-wrap": {
1504 | "version": "1.2.3",
1505 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
1506 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
1507 | "dev": true
1508 | },
1509 | "wrappy": {
1510 | "version": "1.0.2",
1511 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1512 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1513 | "dev": true
1514 | },
1515 | "yallist": {
1516 | "version": "4.0.0",
1517 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1518 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
1519 | "dev": true
1520 | }
1521 | }
1522 | }
1523 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-cli-plugin-clean",
3 | "version": "0.5.2",
4 | "description": "vue-cli plugin that helps you bootstrap your Vue application by doing some common configurations.",
5 | "main": "index.js",
6 | "scripts": {
7 | "lint": "eslint . --fix"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git+https://github.com/DevTony101/vue-cli-plugin-clean.git"
12 | },
13 | "keywords": [
14 | "vue",
15 | "cli",
16 | "clean",
17 | "utility",
18 | "plugin",
19 | "prettier",
20 | "configuration",
21 | "base component"
22 | ],
23 | "author": "Miguel Manjarres",
24 | "license": "MIT",
25 | "bugs": {
26 | "url": "https://github.com/DevTony101/vue-cli-plugin-clean/issues"
27 | },
28 | "homepage": "https://github.com/DevTony101/vue-cli-plugin-clean#readme",
29 | "devDependencies": {
30 | "eslint": "^7.15.0",
31 | "eslint-config-airbnb-base": "^14.2.1",
32 | "eslint-plugin-import": "^2.22.1"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/prompts.js:
--------------------------------------------------------------------------------
1 | module.exports = (pkg) => {
2 | const prompts = [
3 | {
4 | type: "confirm",
5 | name: "scaffold",
6 | message: "Add support for base components?",
7 | default: true,
8 | group: "Strongly recommended",
9 | description: "In addition to deleting all pre-built components, it will add lodash and the necessary configuration for supporting base components.",
10 | link: "https://github.com/DevTony101/vue-cli-plugin-clean#Features",
11 | },
12 | ];
13 |
14 | if ("@vue/eslint-config-prettier" in (pkg.devDependencies || {})) {
15 | prompts.push({
16 | type: "confirm",
17 | name: "prettier",
18 | message: "Add prettier configuration?",
19 | default: true,
20 | group: "Strongly recommended",
21 | description: "This will add a prettier configuration file and add a vue/plugin-recommended plugin to your eslint configuration file.",
22 | link: "https://github.com/DevTony101/vue-cli-plugin-clean#Features",
23 | });
24 | }
25 |
26 | return prompts;
27 | };
28 |
--------------------------------------------------------------------------------
/ui.js:
--------------------------------------------------------------------------------
1 | module.exports = (api) => {
2 | api.describeTask({
3 | match: /vue-cli-service basec/,
4 | description: "Generates a new base component",
5 | link: "https://github.com/DevTony101/vue-cli-plugin-clean#using-the-basec-command",
6 | prompts: [
7 | {
8 | name: "prefix",
9 | type: "input",
10 | default: "Base",
11 | description: "The prefix for the name of the component (it defaults to 'Base')",
12 | },
13 | {
14 | name: "name",
15 | type: "input",
16 | default: "button",
17 | description: "The name of the base component",
18 | },
19 | {
20 | name: "scaffold",
21 | type: "list",
22 | default: "none",
23 | choices: [
24 | {
25 | name: "button",
26 | value: "button",
27 | },
28 | {
29 | name: "none",
30 | value: "none",
31 | },
32 | ],
33 | description: "If different of none, it will create a base component with a predefined template for the selected option",
34 | },
35 | ],
36 | onBeforeRun: async ({ answers, args }) => {
37 | if (answers.name && answers.name.trim()) args.push(answers.name);
38 | if (answers.prefix && answers.prefix.trim()) args.push("--prefix", answers.prefix);
39 | switch (answers.scaffold) {
40 | case "button":
41 | args.push("--scaffold-button");
42 | break;
43 | default:
44 | break;
45 | }
46 | },
47 | });
48 | };
49 |
--------------------------------------------------------------------------------
/utils/colors.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | GREEN: "\x1b[32m%s\x1b[0m",
3 | RED: "\x1b[31m%s\x1b[0m",
4 | YELLOW: "\x1b[33m%s\x1b[0m",
5 | };
6 |
--------------------------------------------------------------------------------