├── .browserslistrc
├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── .github
└── workflows
│ └── npm-publish.yml
├── .gitignore
├── .htmllintrc
├── .stylelintrc
├── .vscode
└── settings.json
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── copy
├── _.browserslistrc
├── _.editorconfig
├── _.eslintignore
├── _.eslintrc.json
├── _.gitignore
├── _.htmllintrc
├── _.stylelintrc
└── _gulpfile.js
│ ├── .bump.json
│ ├── .critical.json
│ ├── .css.json
│ ├── .favicon-data-generated.json
│ ├── .favicon-data.json
│ ├── .favicon.json
│ ├── .gfx.json
│ ├── .helpers.json
│ ├── .html.json
│ ├── .js.json
│ ├── .jsdoc.json
│ ├── .kss.json
│ ├── .sassdoc.json
│ ├── .starter-project.json
│ ├── .sync.json
│ ├── .watch.json
│ ├── bump.js
│ ├── clean.js
│ ├── critical.js
│ ├── css.js
│ ├── favicon.js
│ ├── fonts.js
│ ├── gfx.js
│ ├── helpers.js
│ ├── html.js
│ ├── index.js
│ ├── js.js
│ ├── jsdoc.js
│ ├── kss.js
│ ├── sassdoc.js
│ ├── sync.js
│ └── webpack.js
├── gfx
├── ss.png
├── starter-project-cli-npm.svg
├── starter-project-cli.jpg
├── starter-project-cli.png
├── starter-project-npm.svg
└── starter-project-questions.png
├── index.js
├── lib
├── config.js
├── files.js
├── inquirer.js
├── log.js
└── starter-project.js
├── package.json
└── yarn.lock
/.browserslistrc:
--------------------------------------------------------------------------------
1 | last 5 versions
2 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: http://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | # Unix-style newlines with a newline ending every file
7 | [*]
8 | end_of_line = lf
9 | insert_final_newline = true
10 | indent_style = space
11 | indent_size = 2
12 | trim_trailing_whitespace = true
13 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | **/*.min.js
2 | **/vendor/*
3 | **/dist/*
4 | **/node_modules/*
5 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["airbnb-base"],
3 | "parser": "babel-eslint",
4 | "parserOptions": {
5 | "ecmaVersion": 6
6 | },
7 | "rules": {
8 | "no-console": "off"
9 | },
10 | "globals": {
11 | "requestAnimationFrame": true,
12 | "sessionStorage": true
13 | },
14 | "env": {
15 | "browser": true,
16 | "es6": true,
17 | "amd": true,
18 | "commonjs": true
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/.github/workflows/npm-publish.yml:
--------------------------------------------------------------------------------
1 | # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
3 |
4 | name: Node.js Package
5 |
6 | on:
7 | release:
8 | types: [created]
9 |
10 | jobs:
11 | build:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@v2
15 | - uses: actions/setup-node@v1
16 | with:
17 | node-version: 12
18 | - run: npm ci
19 | - run: npm test
20 |
21 | publish-npm:
22 | needs: build
23 | runs-on: ubuntu-latest
24 | steps:
25 | - uses: actions/checkout@v2
26 | - uses: actions/setup-node@v1
27 | with:
28 | node-version: 12
29 | registry-url: https://registry.npmjs.org/
30 | - run: npm ci
31 | - run: npm publish
32 | env:
33 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
34 |
35 | publish-gpr:
36 | needs: build
37 | runs-on: ubuntu-latest
38 | steps:
39 | - uses: actions/checkout@v2
40 | - uses: actions/setup-node@v1
41 | with:
42 | node-version: 12
43 | registry-url: https://npm.pkg.github.com/
44 | - run: npm ci
45 | - run: npm publish
46 | env:
47 | NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
48 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /node_modules/
3 | yarn-error.log
4 | .yarnclean
5 | /test/
6 | /dist/
7 | /src/
8 | gulpfile.js/.favicon-data-generated.json
9 | starter-project-cli-*
10 |
--------------------------------------------------------------------------------
/.htmllintrc:
--------------------------------------------------------------------------------
1 | {
2 | "attr-bans": false,
3 | "attr-name-ignore-regex": false,
4 | "attr-name-style": "dash",
5 | "attr-new-line": false,
6 | "attr-no-dup": true,
7 | "attr-no-unsafe-char": true,
8 | "attr-order": false,
9 | "attr-quote-style": "double",
10 | "attr-req-value": true,
11 | "attr-validate": true,
12 | "class-no-dup": true,
13 | "class-style": false,
14 | "doctype-first": true,
15 | "doctype-html5": true,
16 | "fig-req-figcaption": false,
17 | "focusable-tabindex-style": false,
18 | "head-req-title": true,
19 | "head-valid-content-model": true,
20 | "href-style": false,
21 | "html-req-lang": true,
22 | "html-valid-content-model": true,
23 | "id-class-ignore-regex": false,
24 | "id-class-no-ad": false,
25 | "id-class-style": false,
26 | "id-no-dup": true,
27 | "img-req-alt": true,
28 | "img-req-src": true,
29 | "indent-delta": false,
30 | "indent-style": false,
31 | "indent-width": false,
32 | "indent-width-cont": false,
33 | "input-radio-req-name": true,
34 | "input-req-label": true,
35 | "label-req-for": true,
36 | "lang-style": "case",
37 | "line-end-style": false,
38 | "line-max-len": false,
39 | "line-max-len-ignore-regex": false,
40 | "line-no-trailing-whitespace": true,
41 | "link-req-noopener": true,
42 | "maxerr": false,
43 | "raw-ignore-regex": false,
44 | "spec-char-escape": true,
45 | "table-req-caption": false,
46 | "table-req-header": false,
47 | "tag-bans": false,
48 | "tag-close": true,
49 | "tag-name-lowercase": true,
50 | "tag-name-match": true,
51 | "tag-req-attr": false,
52 | "tag-self-close": "never",
53 | "text-ignore-regex": false,
54 | "title-max-len": 60,
55 | "title-no-dup": true
56 | }
57 |
--------------------------------------------------------------------------------
/.stylelintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": [
3 | "stylelint-scss",
4 | "stylelint-order"
5 | ],
6 | "extends": "stylelint-config-sass-guidelines"
7 | }
8 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "emeraldwalk.runonsave": {
3 | "commands": [{
4 | "match": "\\.css?$",
5 | "cmd": "cd ${workspaceRoot} && stylefmt -c .stylelintrc ${file}"
6 | }]
7 | },
8 | "eslint.enable": true,
9 | "git.ignoreLimitWarning": true
10 | }
11 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to making participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, sex characteristics, gender identity and expression,
9 | level of experience, education, socio-economic status, nationality, personal
10 | appearance, race, religion, or sexual identity and orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at me@silvestar.codes. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72 |
73 | [homepage]: https://www.contributor-covenant.org
74 |
75 | For answers to common questions about this code of conduct, see
76 | https://www.contributor-covenant.org/faq
77 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Silvestar Bistrović
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 | # [Starter Project CLI](https://www.silvestar.codes/side-projects/starter-project/)
2 |
3 | [](https://www.npmjs.com/package/starter-project-cli)
4 | [](https://www.npmjs.com/package/starter-project)
5 |
6 | > Starter Project CLI creates a perfect Gulp development environment for everyone within a few minutes.
7 |
8 | 
9 |
10 | Starter Project CLI, or **SPRO** (pronounces es-pro), is a command line interface that could save you a vast amount of time that you usually spend on configuring your project. SPRO's mission is to set up a perfect development environment by learning about your project architecture and then setting up Gulp tasks for all your needs.
11 |
12 | SPRO should be considered as a boilerplate of predefined Gulp tasks. SPRO would install Gulp tasks for processing the following file types:
13 |
14 | - HTML (pug)
15 | - CSS (Sass)
16 | - JavaScript (es6)
17 | - Graphic (PNG, JPEG, SVG, GIF)
18 | - Fonts
19 | - Favicons
20 |
21 | The tasks include compiling, lintering, formatting, compressing, and transforming your source file to produce the most optimized production files.
22 |
23 | __Info: If you would like to add a Gulp task, feel free to open [a pull request], or request a feature by creating [a new issue].__
24 |
25 | ## Supporters
26 |
27 | [](https://github.com/maliMirkec/starter-project-cli/stargazers)
28 |
29 | ## Table of Contents
30 |
31 | - [Installation](#installation)
32 | - [Getting started](#getting-started)
33 | - [Gulp tasks](#gulp-tasks)
34 | - [Configuration file](#configuration-file)
35 | - [Path Placeholders](#path-placeholders)
36 | - [Command](#command)
37 | - [Task Configuration](#task-configuration)
38 | - [BrowserSync Configuration](#browsersync-configuration)
39 | - [Favicon Configuration](#favicon-configuration)
40 | - [HTML Configuration](#html-configuration)
41 | - [CSS Configuration](#css-configuration)
42 | - [JavaScript Configuration](#javascript-configuration)
43 | - [Images Configuration](#images-configuration)
44 | - [Critical CSS Configuration](#critical-css-configuration)
45 | - [Semver Configuration](#semver-configuration)
46 | - [KSS Configuration](#kss-configuration)
47 | - [SassDoc Configuration](#sassdoc-configuration)
48 | - [JSDoc Configuration](#jsdoc-configuration)
49 | - [Helpers Configuration](#helpers-configuration)
50 | - [Watch Configuration](#watch-configuration)
51 | - [Questions](#questions)
52 | - [Dependenciest](#Dependencies)
53 | - [Support](#support)
54 | - [ToDo](#todo)
55 |
56 | ## Installation
57 |
58 | You could use SPRO as a global or local package.
59 |
60 | To install the package locally, run:
61 |
62 | ```console
63 | npm install starter-project-cli --save
64 | ```
65 |
66 | To install the package globally, run:
67 |
68 | ```console
69 | npm install --global starter-project-cli --save
70 | ```
71 |
72 | ## Getting started
73 |
74 | After successful installation, you could run the `spro` command. If you have installed the package locally, you could initialize the package by running the following command:
75 |
76 | ```console
77 | node_modules/.bin/spro start
78 | ```
79 |
80 | If you have installed the package globally, you could initialize the package by running the following command:
81 |
82 | ```console
83 | spro start
84 | ```
85 |
86 | SPRO would prompt you to ask a few questions about the project structure.
87 |
88 | 
89 |
90 | Once you answer all questions, SPRO would do two things:
91 | - copy all required files (Gulp task files and configuration files), and
92 | - prepare a command for installation of dependencies required for the project.
93 |
94 | _Warning: Note that the installation process could last a few minutes._
95 |
96 | ## Gulp tasks
97 |
98 | In the `gulpfile.js` folder you could find all Gulp task files and configuration files.
99 |
100 | There are four available major Gulp tasks:
101 |
102 | | Task | Description |
103 | | --------- | --------------------------------------------------------------------------------------------- |
104 | | `default` | the task for running all the tasks (useful for more thorough development process) |
105 | | `build` | the task for running all tasks with the exit process (useful for Netlify builds, for example) |
106 | | `dev` | the task for running only essential tasks (useful for basic development process) |
107 | | `clean` | the task for deleting compiled code. |
108 |
109 | And there are three optional Gulp tasks for versioning (available only you choose SEMVER option):
110 |
111 | | Task | Description |
112 | | ----------- | -------------------------------------------------------------- |
113 | | `bumpPatch` | the task for bumping patch versions of the `package.json` file |
114 | | `bumpMinor` | the task for bumping minor versions of the `package.json` file |
115 | | `bumpMajor` | the task for bumping major versions of the `package.json` file |
116 |
117 | _Pro tip: Run `gulp --tasks` to see all available Gulp tasks._
118 |
119 | ## Configuration file
120 |
121 | If you want more control over your Gulp tasks, you could find the configuration files for every single Gulp task in the `gulpfile.js` folder.
122 |
123 | `.starter-project.json` is the main configuration file in which you could find all your answers from the command line.
124 |
125 | ```.starter-project.json
126 | {
127 | "proot": "./",
128 | "src": "src",
129 | "dist": "dist",
130 | "sync": {
131 | "run": true
132 | },
133 | "html": {
134 | "run": true,
135 | "src": "html",
136 | "dist": "",
137 | "pug": false,
138 | "minify": true,
139 | "inline": true,
140 | "lint": true
141 | },
142 | "css": {
143 | "run": true,
144 | "src": "scss",
145 | "dist": "css",
146 | "sass": true,
147 | "minify": true,
148 | "autoprefix": true,
149 | "sourcemaps": true,
150 | "lint": true
151 | },
152 | "js": {
153 | "run": true,
154 | "src": "js",
155 | "dist": "js",
156 | "uglify": true,
157 | "lint": true,
158 | "sourcemaps": true
159 | },
160 | "gfx": {
161 | "run": true,
162 | "src": "gfx",
163 | "dist": "gfx"
164 | },
165 | "fonts": {
166 | "run": true,
167 | "src": "fonts",
168 | "dist": "fonts"
169 | },
170 | "favicon": {
171 | "run": true
172 | },
173 | "critical": {
174 | "run": true
175 | },
176 | "kss": {
177 | "run": true,
178 | "dist": "docs/styleguide"
179 | },
180 | "sassdoc": {
181 | "run": true,
182 | "dist": "docs/sass"
183 | },
184 | "jsdoc": {
185 | "run": true,
186 | "dist": "docs/js"
187 | },
188 | "bump": {
189 | "run": true
190 | }
191 | }
192 | ```
193 |
194 | _Avoid editing this file manually, unless you know what you are doing. Run `spro start` command again instead._
195 |
196 | See more about individual configuring tasks [in the Task Configuration section].
197 |
198 | ### Path Placeholders
199 |
200 | SPRO provides _path placeholders_ for easier configuration. All path placeholders would be replaced with settings from the main config file, `.starter-project.json` file.
201 |
202 | **Use path placeholders to avoid hardcoding paths in the project.**
203 |
204 | Here is the list of all available path placeholders:
205 |
206 | | Placeholder | Replacement |
207 | | --------------------- | ----------------------------------- |
208 | | `helpers.proot` | project root path |
209 | | `helpers.source` | project source path |
210 | | `helpers.dist` | project destination path |
211 | | `config.html.src` | project HTML source path |
212 | | `config.html.dist` | project HTML source path |
213 | | `config.css.src` | project CSS source path |
214 | | `config.css.dist ` | project CSS destination path |
215 | | `config.js.src` | project JavaScript source path |
216 | | `config.js.dist` | project JavaScript destination path |
217 | | `config.kss.dist` | project KSS destination path |
218 | | `config.sassdoc.dist` | project SassDoc destination path |
219 | | `config.jsdoc.dist` | project JSdoc destination path |
220 |
221 | ## Command
222 |
223 | SPRO package has only one command:
224 |
225 | - `spro start`, `spro s`.
226 |
227 | Also, you could run `spro --version` to check the version of the package.
228 |
229 | ## Task Configuration
230 |
231 | Every task has its own configuration file.
232 |
233 | ### BrowserSync Configuration
234 |
235 | The default BrowserSync configuration is defined as follows:
236 |
237 | ```.sync.json
238 | {
239 | "port": 8080,
240 | "server": {
241 | "baseDir": ""
242 | }
243 | }
244 | ```
245 |
246 | You could see all available options [on BrowserSync the npm page].
247 |
248 | ### Favicon Configuration
249 |
250 | The default favicon configuration is defined as follows:
251 |
252 | ```.favicon.json
253 | {
254 | "run": true,
255 | "src": "helpers.source/config.html.src/_assets/favicon.pug",
256 | "dest": "helpers.source/config.html.src/_assets"
257 | }
258 | ```
259 |
260 | To make the favicon task work, you should visit the [RealFaviconGenerator] and run the wizard. At the end of the process, you should copy the setting and put them in the `.favicon-data.json` file under `gulpfile.js` directory.
261 |
262 | If you need more help understanding the configuration, please open [a new issue].
263 |
264 | ### HTML Configuration
265 |
266 | The default HTML configuration is defined as follows:
267 |
268 | ```.html.json
269 | {
270 | "pugConfig": {
271 | "basedir": "",
272 | "pretty": true
273 | },
274 | "htmllintConfig": {
275 | "config": "",
276 | "failOnError": false
277 | },
278 | "htmlminConfig": {
279 | "collapseWhitespace": true
280 | },
281 | "renameConfig": {
282 | "extname": ".html"
283 | },
284 | "inlineConfig": {
285 | "rootpath": ""
286 | }
287 | }
288 | ```
289 |
290 | If you need more help understanding the configuration, please open [a new issue].
291 |
292 | ### CSS Configuration
293 |
294 | The default CSS configuration is defined as follows:
295 |
296 | ```.css.json
297 | {
298 | "sassConfig": {
299 | "includePaths": [
300 | "helpers.proot/node_modules/modularscale-sass/stylesheets/",
301 | "helpers.proot/node_modules/sass-mq/",
302 | "helpers.proot/node_modules/normalize.css/",
303 | "helpers.source/config.css.src/",
304 | "helpers.source/config.css.src/components/"
305 | ]
306 | },
307 | "styleLintConfig": {
308 | "reporters": [{
309 | "formatter": "string",
310 | "console": true
311 | }]
312 | },
313 | "autoprefixerConfig": {
314 | "browsers": ["last 5 versions"],
315 | "cascade": false
316 | },
317 | "renameConfig": {
318 | "suffix": ".min"
319 | }
320 | }
321 | ```
322 |
323 | If you need more help understanding the configuration, please open [a new issue].
324 |
325 | ### JavaScript Configuration
326 |
327 | The default JavaScript configuration is defined as follows:
328 |
329 | ```.js.json
330 | {
331 | "eslintConfig": {
332 | "configFile": "helpers.proot/.eslintrc.json",
333 | "fix": true,
334 | "quiet": true
335 | },
336 | "includeConfig": {
337 | "hardFail": true,
338 | "includePaths": [
339 | "helpers.proot/node_modules"
340 | ]
341 | },
342 | "babelConfig": {
343 | "presets": ["@babel/env"]
344 | },
345 | "renameConfig": {
346 | "suffix": ".min"
347 | }
348 | }
349 | ```
350 |
351 | If you need more help understanding the configuration, please open [a new issue].
352 |
353 | ### Images Configuration
354 |
355 | The default images configuration is defined as follows:
356 |
357 | ```.gfx.json
358 | {
359 | "gifConfig": {
360 | "interlaced": true
361 | },
362 | "jpegConfig": {
363 | "quality": 90,
364 | "progressive": true
365 | },
366 | "pngConfig": {
367 | "quality": [0.8, 0.9]
368 | },
369 | "svgConfig": {
370 | "plugins": [
371 | {
372 | "cleanupAttrs": true
373 | },
374 | {
375 | "removeDoctype": true
376 | },
377 | {
378 | "removeComments": true
379 | },
380 | {
381 | "removeXMLProcInst": true
382 | },
383 | {
384 | "removeMetadata": true
385 | },
386 | {
387 | "removeTitle": false
388 | },
389 | {
390 | "removeDesc": false
391 | },
392 | {
393 | "removeUselessDefs": true
394 | },
395 | {
396 | "removeXMLNS": false
397 | },
398 | {
399 | "removeEditorsNSData": true
400 | },
401 | {
402 | "removeEmptyAttrs": true
403 | },
404 | {
405 | "removeHiddenElems": true
406 | },
407 | {
408 | "removeEditorsNSData": true
409 | },
410 | {
411 | "removeEmptyText": true
412 | },
413 | {
414 | "removeEmptyContainers": true
415 | },
416 | {
417 | "removeViewBox": false
418 | },
419 | {
420 | "cleanupEnableBackground": true
421 | },
422 | {
423 | "convertStyleToAttrs": true
424 | },
425 | {
426 | "convertColors": true
427 | },
428 | {
429 | "convertPathData": true
430 | },
431 | {
432 | "convertTransform": true
433 | },
434 | {
435 | "removeUnknownsAndDefaults": true
436 | },
437 | {
438 | "removeNonInheritableGroupAttrs": true
439 | },
440 | {
441 | "removeUselessStrokeAndFill": true
442 | },
443 | {
444 | "removeUnusedNS": true
445 | },
446 | {
447 | "cleanupIDs": false
448 | },
449 | {
450 | "cleanupNumericValues": true
451 | },
452 | {
453 | "cleanupListOfValues": true
454 | },
455 | {
456 | "moveElemsAttrsToGroup": true
457 | },
458 | {
459 | "moveGroupAttrsToElems": false
460 | },
461 | {
462 | "collapseGroups": true
463 | },
464 | {
465 | "removeRasterImages": true
466 | },
467 | {
468 | "mergePaths": true
469 | },
470 | {
471 | "convertShapeToPath": false
472 | },
473 | {
474 | "sortAttrs": true
475 | },
476 | {
477 | "removeDimensions": true
478 | },
479 | {
480 | "removeAttrs": false
481 | },
482 | {
483 | "removeElementsByAttr": false
484 | },
485 | {
486 | "addClassesToSVGElement": false
487 | },
488 | {
489 | "addAttributesToSVGElement": false
490 | },
491 | {
492 | "removeStyleElement": false
493 | },
494 | {
495 | "removeScriptElement": false
496 | },
497 | {
498 | "removeDimensions": false
499 | }
500 | ]
501 | }
502 | }
503 | ```
504 |
505 | If you need more help understanding the configuration, please open [a new issue].
506 |
507 | ### Critical CSS Configuration
508 |
509 | The default Critical CSS configuration is defined as follows:
510 |
511 | ```.critical.json
512 | [{
513 | "src": "style.css",
514 | "settings": {
515 | "out": "style.critical.css",
516 | "url": "http://localhost:8080/",
517 | "width": 1920,
518 | "height": 1200,
519 | "keepLargerMediaQueries": true,
520 | "strict": false,
521 | "blockJSRequests": false,
522 | "phantomJsOptions": {
523 | "ssl-protocol": "any",
524 | "ignore-ssl-errors": true
525 | }
526 | }
527 | }]
528 | ```
529 |
530 | If you need more help understanding the configuration, please open [a new issue].
531 |
532 | ### Semver Configuration
533 |
534 | The default Semver configuration is defined as follows:
535 |
536 | ```.bump.json
537 | {
538 | "src": ["helpers.proot/package.json"]
539 | }
540 | ```
541 |
542 | If you need more help understanding the configuration, please open [a new issue].
543 |
544 | ### KSS Configuration
545 |
546 | The default KSS configuration is defined as follows:
547 |
548 | ```.kss.json
549 | {
550 | "title": "Starter Project",
551 | "source": "helpers.source",
552 | "destination": "helpers.dist/docs/styleguide/",
553 | "css": [
554 | "helpers.dist/config.css.dist/style.css"
555 | ],
556 | "js": []
557 | }
558 | ```
559 |
560 | If you need more help understanding the configuration, please open [a new issue].
561 |
562 | ### SassDoc Configuration
563 |
564 | The default SassDoc configuration is defined as follows:
565 |
566 | ```.sassdoc.json
567 | {
568 | "dest": "/docs/sass/",
569 | "package": "package.json",
570 | "autofill": true,
571 | "verbose": true,
572 | "theme": "default",
573 | "display": {
574 | "access": ["public", "private"],
575 | "alias": true,
576 | "watermark": true
577 | },
578 | "groups": {
579 | "undefined": "Misc"
580 | },
581 | "basePath": "https://starter.silvestar.codes/docs/sass/"
582 | }
583 | ```
584 |
585 | If you need more help understanding the configuration, please open [a new issue].
586 |
587 | ### JSDoc Configuration
588 |
589 | The default JSDoc configuration is defined as follows:
590 |
591 | ```.jsdoc.json
592 | {
593 | "src": ["helpers.source/config.js.src/homepage.md", "helpers.source/config.js.src/"],
594 | "settings": {
595 | "tags": {
596 | "allowUnknownTags": true
597 | },
598 | "opts": {
599 | "destination": "helpers.dist/docs/js/"
600 | },
601 | "plugins": [
602 | "plugins/markdown"
603 | ],
604 | "templates": {
605 | "cleverLinks": true,
606 | "monospaceLinks": false,
607 | "default": {
608 | "outputSourceFiles": true
609 | },
610 | "path": "ink-docstrap",
611 | "theme": "simplex",
612 | "navType": "vertical",
613 | "linenums": true,
614 | "dateFormat": "MMMM Do YYYY, h:mm:ss a"
615 | }
616 | }
617 | }
618 | ```
619 |
620 | If you need more help understanding the configuration, please open [a new issue].
621 |
622 | ### Helpers Configuration
623 |
624 | The default helpers configuration is defined as follows:
625 |
626 | ```.helpers.json
627 | {
628 | "wait": 20000
629 | }
630 | ```
631 |
632 | ### Watch Configuration
633 |
634 | The default watch configuration is defined as follows:
635 |
636 | ```.watch.json
637 | {
638 | "ignoreInitial": true
639 | }
640 | ```
641 |
642 | This setting will tell Gulp when to terminate the build (watch) process.
643 |
644 | ## Questions
645 |
646 | SPRO would ask you the following questions:
647 |
648 | - [GENERAL] Do you want to override the project? Be sure to commit all changes before you proceed.',
649 | - [GENERAL] What is the root folder of the project?',
650 | - [GENERAL] Where is the folder with the source code of the project (relative to default path)?',
651 | - [GENERAL] Where do you want to store compiled code of the project (relative to default path)?',
652 | - [GENERAL] Are you sure that you want to override the project?',
653 | - [BROWSERSYNC] Do you want to run BrowserSync to preview changes in the browser?',
654 | - [HTML] Do you want to run HTML tasks?',
655 | - [HTML] Are you using Pug as a template engine?',
656 | - [HTML] Where is the folder with HTML source code (relative to default source path)?',
657 | - [HTML] Where do you want to store compiled HTML code (relative to default destination path)?',
658 | - [HTML] Do you want to minify HTML code?',
659 | - [HTML] Do you want to run inline source tasks (inline CSS or SVG in HTML code)?',
660 | - [HTML] Do you want to lint HTML code?',
661 | - [CSS] Do you want to run CSS tasks?',
662 | - [CSS] Are you using Sass?',
663 | - [CSS] Where is the folder with CSS source code (relative to default source path)?',
664 | - [CSS] Where do you want to store compiled CSS code (relative to default destination path)?',
665 | - [CSS] Do you want to minify CSS code?',
666 | - [CSS] Do you want to autoprefix CSS code?',
667 | - [CSS] Do you want to add sourcemaps for CSS code?',
668 | - [CSS] Do you want to lint CSS code?',
669 | - [JS] Do you want to run JavaScript (es6) tasks?',
670 | - [JS] Where is the folder with JavaScript source code (relative to default source path)?',
671 | - [JS] Where do you want to store compiled JavaScript code (relative to default destination path)?',
672 | - [JS] Do you want to minify JavaScript code?',
673 | - [JS] Do you want to add sourcemaps for JavaScript code?',
674 | - [JS] Do you want to lint JavaScript code?',
675 | - [IMAGES] Do you want to run image optimization tasks?',
676 | - [IMAGES] Where is the folder with images (relative to default source path)?',
677 | - [IMAGES] Where do you want to store optimized images (relative to default destination path)?',
678 | - [FONTS] Do you use local fonts? Do you want to run font tasks?',
679 | - [FONTS] Where is the folder with local fonts (relative to default source path)?',
680 | - [FONTS] Where do you want to store local fonts (relative to default destination path)?',
681 | - [FAVICON] Do you want to run favicon tasks?',
682 | - [CRITICAL] Do you want to extract Critical CSS?',
683 | - [KSS] Do you want to add KSS style guide?',
684 | - [KSS] Where do you want to store KSS style guide (relative to default destination path)?',
685 | - [SASSDOC] Do you want to add documentation for the SASS code (SassDoc)?',
686 | - [SASSDOC] Where do you want to store SassDoc files (relative to default destination path)?',
687 | - [JSDOC] Do you want to add documentation for the JS code (JSDoc)?',
688 | - [JSDOC] Where do you want to store JSdoc files (relative to default destination path)?',
689 | - [SEMVER] Do you want to add semver versioning tasks (for automatic bump of any version in any file which supports semver versioning, like package.json)?',
690 | - [YARN] Do you use Yarn as your default dependency manager?',
691 |
692 | ## Dependencies
693 |
694 | Every possible package for Gulp tasks:
695 |
696 | - @babel/core,
697 | - @babel/preset-env,
698 | - babel-eslint,
699 | - browser-sync,
700 | - del,
701 | - eslint,
702 | - eslint-config-airbnb-base,
703 | - eslint-plugin-import,
704 | - eslint-plugin-node,
705 | - gulp,
706 | - gulp-autoprefixer,
707 | - gulp-babel,
708 | - gulp-bump,
709 | - gulp-clean-css,
710 | - gulp-cssimport,
711 | - gulp-eslint,
712 | - gulp-exit,
713 | - gulp-htmllint,
714 | - gulp-htmlmin,
715 | - gulp-if,
716 | - gulp-imagemin,
717 | - gulp-include,
718 | - gulp-inline-source,
719 | - gulp-jsdoc3,
720 | - gulp-penthouse,
721 | - gulp-pug,
722 | - gulp-real-favicon,
723 | - gulp-rename,
724 | - gulp-sass,
725 | - gulp-sourcemaps,
726 | - gulp-stylelint,
727 | - gulp-uglify,
728 | - gulp-wait,
729 | - imagemin-mozjpeg,
730 | - imagemin-pngquant,
731 | - kss,
732 | - path,
733 | - sassdoc,
734 | - stylelint,
735 | - stylelint-config-sass-guidelines,
736 | - stylelint-order, and
737 | - stylelint-scss.
738 |
739 | ## Support
740 |
741 | Show your support by starring the project on [GitHub], or by [sharing on Twitter]. 🙏
742 |
743 | Contribute: create [a new issue] or create [a pull request].
744 |
745 | ## Todo
746 |
747 | - Consider adding terminalizer https://github.com/faressoft/terminalizer
748 | - Consider adding siteaudit https://github.com/thecreazy/siteaudit
749 |
750 | [in the Task Configuration section]: #task-configuration
751 | [on BrowserSync the npm page]: https://browsersync.io/docs/options
752 | [RealFaviconGenerator]: https://realfavicongenerator.net/
753 | [GitHub]: https://github.com/maliMirkec/starter-project-cli
754 | [sharing on Twitter]: https://twitter.com/intent/tweet?url=https://github.com/maliMirkec/starter-project-cli/&text=Starter%20Project%20CLI%20creates%20a%20perfect%20Gulp%20development%20environment%20for%20everyone%20within%20a%20few%20minutes.%20🔥%20Try%20it%20today!%20💯&via=malimirkeccita
755 | [a new issue]: https://github.com/maliMirkec/starter-project-cli/issues/new
756 | [a pull request]: https://github.com/maliMirkec/starter-project-cli/compare
757 |
--------------------------------------------------------------------------------
/copy/_.browserslistrc:
--------------------------------------------------------------------------------
1 | last 5 versions
2 |
--------------------------------------------------------------------------------
/copy/_.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: http://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | # Unix-style newlines with a newline ending every file
7 | [*]
8 | end_of_line = lf
9 | insert_final_newline = true
10 | indent_style = space
11 | indent_size = 2
12 | trim_trailing_whitespace = true
13 |
--------------------------------------------------------------------------------
/copy/_.eslintignore:
--------------------------------------------------------------------------------
1 | **/*.min.js
2 | **/vendor/*
3 | **/dist/*
4 | **/node_modules/*
5 |
--------------------------------------------------------------------------------
/copy/_.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["airbnb-base"],
3 | "parser": "babel-eslint",
4 | "parserOptions": {
5 | "ecmaVersion": 6
6 | },
7 | "rules": {
8 | "no-console": "off"
9 | },
10 | "globals": {
11 | "requestAnimationFrame": true,
12 | "sessionStorage": true
13 | },
14 | "env": {
15 | "browser": true,
16 | "es6": true,
17 | "amd": true,
18 | "commonjs": true
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/copy/_.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /node_modules/
3 | yarn-error.log
4 | .yarnclean
5 | /test/
6 | /dist/
7 | /src/
8 | gulpfile.js/.favicon-data-generated.json
9 | starter-project-cli-*
10 |
--------------------------------------------------------------------------------
/copy/_.htmllintrc:
--------------------------------------------------------------------------------
1 | {
2 | "attr-bans": false,
3 | "attr-name-ignore-regex": false,
4 | "attr-name-style": "dash",
5 | "attr-new-line": false,
6 | "attr-no-dup": true,
7 | "attr-no-unsafe-char": true,
8 | "attr-order": false,
9 | "attr-quote-style": "double",
10 | "attr-req-value": true,
11 | "attr-validate": true,
12 | "class-no-dup": true,
13 | "class-style": false,
14 | "doctype-first": true,
15 | "doctype-html5": true,
16 | "fig-req-figcaption": false,
17 | "focusable-tabindex-style": false,
18 | "head-req-title": true,
19 | "head-valid-content-model": true,
20 | "href-style": false,
21 | "html-req-lang": true,
22 | "html-valid-content-model": true,
23 | "id-class-ignore-regex": false,
24 | "id-class-no-ad": false,
25 | "id-class-style": false,
26 | "id-no-dup": true,
27 | "img-req-alt": true,
28 | "img-req-src": true,
29 | "indent-delta": false,
30 | "indent-style": false,
31 | "indent-width": false,
32 | "indent-width-cont": false,
33 | "input-radio-req-name": true,
34 | "input-req-label": true,
35 | "label-req-for": true,
36 | "lang-style": "case",
37 | "line-end-style": false,
38 | "line-max-len": false,
39 | "line-max-len-ignore-regex": false,
40 | "line-no-trailing-whitespace": true,
41 | "link-req-noopener": true,
42 | "maxerr": false,
43 | "raw-ignore-regex": false,
44 | "spec-char-escape": true,
45 | "table-req-caption": false,
46 | "table-req-header": false,
47 | "tag-bans": false,
48 | "tag-close": true,
49 | "tag-name-lowercase": true,
50 | "tag-name-match": true,
51 | "tag-req-attr": false,
52 | "tag-self-close": "never",
53 | "text-ignore-regex": false,
54 | "title-max-len": 60,
55 | "title-no-dup": true
56 | }
57 |
--------------------------------------------------------------------------------
/copy/_.stylelintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": [
3 | "stylelint-scss",
4 | "stylelint-order"
5 | ],
6 | "extends": "stylelint-config-sass-guidelines"
7 | }
8 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.bump.json:
--------------------------------------------------------------------------------
1 | {
2 | "src": ["helpers.proot/package.json"]
3 | }
4 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.critical.json:
--------------------------------------------------------------------------------
1 | {
2 | "temp": "helpers.source/critical/",
3 | "configs": [{
4 | "src": "style.css",
5 | "settings": {
6 | "out": "style.critical.css",
7 | "url": "http://localhost:8080/",
8 | "width": 1920,
9 | "height": 1200,
10 | "keepLargerMediaQueries": true,
11 | "strict": false,
12 | "blockJSRequests": false,
13 | "phantomJsOptions": {
14 | "ssl-protocol": "any",
15 | "ignore-ssl-errors": true
16 | }
17 | }
18 | }]
19 | }
20 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.css.json:
--------------------------------------------------------------------------------
1 | {
2 | "sassConfig": {
3 | "includePaths": [
4 | "helpers.proot/node_modules/modularscale-sass/stylesheets/",
5 | "helpers.proot/node_modules/sass-mq/",
6 | "helpers.proot/node_modules/normalize.css/",
7 | "helpers.source/config.css.src/",
8 | "helpers.source/config.css.src/components/"
9 | ]
10 | },
11 | "styleLintConfig": {
12 | "reporters": [{
13 | "formatter": "string",
14 | "console": true
15 | }]
16 | },
17 | "autoprefixerConfig": {
18 | "cascade": false
19 | },
20 | "renameConfig": {
21 | "suffix": ".min"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.favicon-data-generated.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maliMirkec/starter-project-cli/cdb788de243216697e1acf3e7864d27f22059699/copy/_gulpfile.js/.favicon-data-generated.json
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.favicon-data.json:
--------------------------------------------------------------------------------
1 | {
2 | "masterPicture": "helpers.source/gfx/svg/starter-project.svg",
3 | "temp": "helpers.source/favicons/",
4 | "dest": "helpers.dist/favicons/",
5 | "iconsPath": "/favicons/",
6 | "markupFile": "helpers.proot/gulpfile.js/.favicon-data-generated.json",
7 | "design": {
8 | "ios": {
9 | "pictureAspect": "backgroundAndMargin",
10 | "backgroundColor": "#ffffff",
11 | "margin": "14%",
12 | "assets": {
13 | "ios6AndPriorIcons": false,
14 | "ios7AndLaterIcons": false,
15 | "precomposedIcons": false,
16 | "declareOnlyDefaultIcon": true
17 | },
18 | "appName": "Starter Project"
19 | },
20 | "desktopBrowser": {},
21 | "windows": {
22 | "pictureAspect": "noChange",
23 | "backgroundColor": "#1ed9d9",
24 | "onConflict": "override",
25 | "assets": {
26 | "windows80Ie10Tile": false,
27 | "windows10Ie11EdgeTiles": {
28 | "small": false,
29 | "medium": true,
30 | "big": false,
31 | "rectangle": false
32 | }
33 | },
34 | "appName": "Starter Project"
35 | },
36 | "androidChrome": {
37 | "pictureAspect": "shadow",
38 | "themeColor": "#1ed9d9",
39 | "manifest": {
40 | "name": "Starter Project",
41 | "display": "standalone",
42 | "orientation": "notSet",
43 | "onConflict": "override",
44 | "declared": true
45 | },
46 | "assets": {
47 | "legacyIcon": false,
48 | "lowResolutionIcons": false
49 | }
50 | },
51 | "safariPinnedTab": {
52 | "pictureAspect": "blackAndWhite",
53 | "threshold": 35.3125,
54 | "themeColor": "#d91a79"
55 | }
56 | },
57 | "settings": {
58 | "compression": 5,
59 | "scalingAlgorithm": "Cubic",
60 | "errorOnImageTooSmall": false,
61 | "readmeFile": true,
62 | "htmlCodeFile": true,
63 | "usePathAsIs": false
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.favicon.json:
--------------------------------------------------------------------------------
1 | {
2 | "src": "helpers.source/config.html.src/_assets/favicon.pug",
3 | "dest": "helpers.source/config.html.src/_assets"
4 | }
5 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.gfx.json:
--------------------------------------------------------------------------------
1 | {
2 | "gifConfig": {
3 | "interlaced": true
4 | },
5 | "jpegConfig": {
6 | "quality": 90,
7 | "progressive": true
8 | },
9 | "pngConfig": {
10 | "quality": [0.8, 0.9]
11 | },
12 | "svgConfig": {
13 | "plugins": [
14 | {
15 | "cleanupAttrs": true
16 | },
17 | {
18 | "removeDoctype": true
19 | },
20 | {
21 | "removeComments": true
22 | },
23 | {
24 | "removeXMLProcInst": true
25 | },
26 | {
27 | "removeMetadata": true
28 | },
29 | {
30 | "removeTitle": false
31 | },
32 | {
33 | "removeDesc": false
34 | },
35 | {
36 | "removeUselessDefs": true
37 | },
38 | {
39 | "removeXMLNS": false
40 | },
41 | {
42 | "removeEditorsNSData": true
43 | },
44 | {
45 | "removeEmptyAttrs": true
46 | },
47 | {
48 | "removeHiddenElems": false
49 | },
50 | {
51 | "removeEditorsNSData": true
52 | },
53 | {
54 | "removeEmptyText": true
55 | },
56 | {
57 | "removeEmptyContainers": true
58 | },
59 | {
60 | "removeViewBox": false
61 | },
62 | {
63 | "cleanupEnableBackground": true
64 | },
65 | {
66 | "convertStyleToAttrs": true
67 | },
68 | {
69 | "convertColors": true
70 | },
71 | {
72 | "convertPathData": true
73 | },
74 | {
75 | "convertTransform": true
76 | },
77 | {
78 | "removeUnknownsAndDefaults": true
79 | },
80 | {
81 | "removeNonInheritableGroupAttrs": true
82 | },
83 | {
84 | "removeUselessStrokeAndFill": true
85 | },
86 | {
87 | "removeUnusedNS": true
88 | },
89 | {
90 | "cleanupIDs": false
91 | },
92 | {
93 | "cleanupNumericValues": true
94 | },
95 | {
96 | "cleanupListOfValues": true
97 | },
98 | {
99 | "moveElemsAttrsToGroup": true
100 | },
101 | {
102 | "moveGroupAttrsToElems": false
103 | },
104 | {
105 | "collapseGroups": true
106 | },
107 | {
108 | "removeRasterImages": true
109 | },
110 | {
111 | "mergePaths": true
112 | },
113 | {
114 | "convertShapeToPath": false
115 | },
116 | {
117 | "sortAttrs": true
118 | },
119 | {
120 | "removeDimensions": true
121 | },
122 | {
123 | "removeAttrs": false
124 | },
125 | {
126 | "removeElementsByAttr": false
127 | },
128 | {
129 | "addClassesToSVGElement": false
130 | },
131 | {
132 | "addAttributesToSVGElement": false
133 | },
134 | {
135 | "removeStyleElement": false
136 | },
137 | {
138 | "removeScriptElement": false
139 | },
140 | {
141 | "removeDimensions": false
142 | }
143 | ]
144 | }
145 | }
146 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.helpers.json:
--------------------------------------------------------------------------------
1 | {
2 | "wait": 30000
3 | }
4 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.html.json:
--------------------------------------------------------------------------------
1 | {
2 | "pugConfig": {
3 | "basedir": "",
4 | "pretty": true
5 | },
6 | "htmllintConfig": {
7 | "config": "",
8 | "failOnError": false
9 | },
10 | "htmlminConfig": {
11 | "collapseWhitespace": true
12 | },
13 | "renameConfig": {
14 | "extname": ".html"
15 | },
16 | "inlineConfig": {
17 | "rootpath": ""
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.js.json:
--------------------------------------------------------------------------------
1 | {
2 | "eslintConfig": {
3 | "configFile": "helpers.proot/.eslintrc.json",
4 | "fix": true,
5 | "quiet": true
6 | },
7 | "includeConfig": {
8 | "hardFail": true,
9 | "includePaths": [
10 | "helpers.proot/node_modules"
11 | ]
12 | },
13 | "babelConfig": {
14 | "presets": ["@babel/env"]
15 | },
16 | "renameConfig": {
17 | "suffix": ".min"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.jsdoc.json:
--------------------------------------------------------------------------------
1 | {
2 | "src": [
3 | "helpers.source/config.js.src/homepage.md",
4 | "helpers.source/config.js.src/"
5 | ],
6 | "settings": {
7 | "tags": {
8 | "allowUnknownTags": true
9 | },
10 | "opts": {
11 | "destination": "helpers.dist/config.jsdoc.dist/"
12 | },
13 | "plugins": [
14 | "plugins/markdown"
15 | ],
16 | "templates": {
17 | "cleverLinks": true,
18 | "monospaceLinks": false,
19 | "default": {
20 | "outputSourceFiles": true
21 | },
22 | "path": "ink-docstrap",
23 | "theme": "simplex",
24 | "navType": "vertical",
25 | "linenums": true,
26 | "dateFormat": "MMMM Do YYYY, h:mm:ss a"
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.kss.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Starter Project",
3 | "source": "helpers.source",
4 | "destination": "helpers.dist/config.kss.dist/",
5 | "css": [
6 | "helpers.dist/config.css.dist/style.css"
7 | ],
8 | "js": []
9 | }
10 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.sassdoc.json:
--------------------------------------------------------------------------------
1 | {
2 | "dest": "helpers.dist/config.sassdoc.dist/",
3 | "package": "package.json",
4 | "autofill": true,
5 | "verbose": true,
6 | "theme": "default",
7 | "display": {
8 | "access": ["public", "private"],
9 | "alias": true,
10 | "watermark": true
11 | },
12 | "groups": {
13 | "undefined": "Misc"
14 | },
15 | "basePath": "https://starter.silvestar.codes/docs/sass/"
16 | }
17 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.starter-project.json:
--------------------------------------------------------------------------------
1 | {
2 | "proot": "./",
3 | "src": "src",
4 | "dist": "dist",
5 | "sync": {
6 | "run": true
7 | },
8 | "html": {
9 | "run": true,
10 | "pug": true,
11 | "data": false,
12 | "inline": true,
13 | "src": "html",
14 | "dist": "",
15 | "minify": true,
16 | "lint": true
17 | },
18 | "css": {
19 | "run": true,
20 | "sass": true,
21 | "src": "scss",
22 | "dist": "css",
23 | "minify": true,
24 | "autoprefix": true,
25 | "sourcemaps": true,
26 | "lint": true
27 | },
28 | "js": {
29 | "run": true,
30 | "src": "js",
31 | "dist": "js",
32 | "uglify": true,
33 | "sourcemaps": true,
34 | "lint": true
35 | },
36 | "gfx": {
37 | "run": true,
38 | "src": "gfx",
39 | "dist": "gfx"
40 | },
41 | "fonts": {
42 | "run": true,
43 | "src": "fonts",
44 | "dist": "fonts"
45 | },
46 | "favicon": {
47 | "run": true
48 | },
49 | "critical": {
50 | "run": true
51 | },
52 | "kss": {
53 | "run": true,
54 | "dist": "docs/styleguide"
55 | },
56 | "sassdoc": {
57 | "run": true,
58 | "dist": "docs/sass"
59 | },
60 | "jsdoc": {
61 | "run": true,
62 | "dist": "docs/js"
63 | },
64 | "bump": {
65 | "run": true
66 | },
67 | "yarn": true
68 | }
69 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.sync.json:
--------------------------------------------------------------------------------
1 | {
2 | "port": 8080,
3 | "server": {
4 | "baseDir": ""
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/.watch.json:
--------------------------------------------------------------------------------
1 | {
2 | "ignoreInitial": true
3 | }
4 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/bump.js:
--------------------------------------------------------------------------------
1 | const { src, dest } = require('gulp');
2 | const bump = require('gulp-bump');
3 |
4 | const { helpers } = require('./helpers');
5 |
6 | const bumpConfig = require('./.bump.json');
7 |
8 | // Will patch the version
9 | function patch(cb) {
10 | src(bumpConfig.src.map((path) => helpers.parse(path)))
11 | .pipe(bump())
12 | .pipe(dest(global.config.proot));
13 |
14 | cb();
15 | }
16 |
17 | // Will update minor version
18 | function minor(cb) {
19 | src(bumpConfig.src.map((path) => helpers.parse(path)))
20 | .pipe(bump({
21 | type: 'minor',
22 | }))
23 | .pipe(dest(global.config.proot));
24 |
25 | cb();
26 | }
27 |
28 | // Will update major version
29 | function major(cb) {
30 | src(bumpConfig.src.map((path) => helpers.parse(path)))
31 | .pipe(bump({
32 | type: 'major',
33 | }))
34 | .pipe(dest(global.config.proot));
35 |
36 | cb();
37 | }
38 |
39 | // Will update prerelease version
40 | function prerelease(cb) {
41 | src(bumpConfig.src.map((path) => helpers.parse(path)))
42 | .pipe(bump({
43 | type: 'prerelease',
44 | }))
45 | .pipe(dest(global.config.proot));
46 |
47 | cb();
48 | }
49 |
50 | exports.bump = {
51 | patch,
52 | minor,
53 | major,
54 | prerelease,
55 | };
56 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/clean.js:
--------------------------------------------------------------------------------
1 | // const gulp = require('gulp')
2 | const del = require('del');
3 |
4 | const { helpers } = require('./helpers');
5 |
6 | // Will delete dist folder
7 | function cleanStart() {
8 | return del(helpers.dist());
9 | }
10 |
11 | exports.clean = {
12 | cleanStart,
13 | };
14 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/critical.js:
--------------------------------------------------------------------------------
1 | const { src, dest } = require('gulp');
2 | const critical = require('gulp-penthouse');
3 | const cleanCSS = require('gulp-clean-css');
4 | const rename = require('gulp-rename');
5 | const fs = require('fs');
6 |
7 | critical.DEBUG = process.env.NODE_ENV !== 'production';
8 |
9 | const { helpers } = require('./helpers');
10 |
11 | const criticalConfig = require('./.critical.json');
12 |
13 | if (criticalConfig.configs.length > 9) {
14 | process.setMaxListeners(0);
15 | }
16 |
17 | const cssConfig = require('./.css.json');
18 |
19 | const thisCriticalConfig = { ...criticalConfig, temp: `${helpers.parse(criticalConfig.temp)}` };
20 |
21 | // Will extract Critical CSS
22 | function criticalStart(cb) {
23 | const files = [];
24 |
25 | thisCriticalConfig.configs.forEach((config) => {
26 | const thisSettings = { ...config.settings, out: helpers.trim(`/${config.settings.out}`) };
27 |
28 | const thisFile = helpers.trim(`${thisCriticalConfig.temp}/${thisSettings.out}`);
29 |
30 | files.push(thisFile);
31 |
32 | if (fs.existsSync(thisFile)) {
33 | src(thisFile.replace('.css', '*.css'))
34 | .pipe(dest(helpers.trim(`${helpers.dist()}/${global.config.css.dist}`)));
35 | } else {
36 | const thisConfig = {
37 | ...config,
38 | src: helpers.trim(`${helpers.dist()}/${global.config.css.dist}/${config.src}`),
39 | settings: thisSettings,
40 | };
41 |
42 | src(thisConfig.src)
43 | .pipe(critical(thisConfig.settings))
44 | .pipe(dest(helpers.trim(`${thisCriticalConfig.temp}`)))
45 | .pipe(cleanCSS())
46 | .pipe(rename(cssConfig.renameConfig))
47 | .pipe(dest(helpers.trim(`${thisCriticalConfig.temp}`)))
48 | .pipe(dest(helpers.trim(`${helpers.dist()}/${global.config.css.dist}`)));
49 | }
50 | });
51 |
52 | const checkInterval = setInterval(() => {
53 | let checkFile = true;
54 |
55 | files.forEach((file) => {
56 | if (!fs.existsSync(file)) {
57 | checkFile = false;
58 | }
59 | });
60 |
61 | if (checkFile) {
62 | clearInterval(checkInterval);
63 | cb();
64 | }
65 | }, 250);
66 |
67 | return checkInterval;
68 | }
69 |
70 | exports.critical = {
71 | criticalStart,
72 | };
73 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/css.js:
--------------------------------------------------------------------------------
1 | const { src, dest, watch } = require('gulp');
2 | const gulpif = require('gulp-if');
3 | const cssimport = require('gulp-cssimport');
4 | const gulpStylelint = global.config.css.lint ? require('gulp-stylelint') : () => true;
5 | const sass = global.config.css.sass ? require('gulp-sass') : () => true;
6 | const autoprefixer = global.config.css.autoprefix ? require('gulp-autoprefixer') : () => true;
7 | const sourcemaps = global.config.css.sourcemaps ? require('gulp-sourcemaps') : () => true;
8 | const cleanCSS = global.config.css.minify ? require('gulp-clean-css') : () => true;
9 | const rename = global.config.css.minify ? require('gulp-rename') : () => true;
10 |
11 | const { helpers } = require('./helpers');
12 |
13 | const cssConfig = require('./.css.json');
14 |
15 | const ext = global.config.css.sass ? 'scss' : 'css';
16 |
17 | const thisSassConfig = (global.config.css.sass)
18 | ? ({
19 | ...cssConfig.sassConfig,
20 | includePaths: cssConfig.sassConfig.includePaths.map((path) => helpers.parse(path)),
21 | })
22 | : {};
23 |
24 | // gulp-if fix
25 | if (!global.config.css.sourcemaps) {
26 | sourcemaps.init = () => true;
27 | sourcemaps.write = () => true;
28 | }
29 |
30 | // Will process Sass files
31 | function cssStart() {
32 | return src(helpers.trim(`${helpers.source()}/${global.config.css.src}/*.${ext}`))
33 | .pipe(gulpif(global.config.css.sourcemaps, sourcemaps.init()))
34 | .pipe(gulpif(global.config.css.lint, gulpStylelint(cssConfig.styleLintConfig)))
35 | .pipe(gulpif(global.config.css.sass, sass(thisSassConfig).on('error', sass.logError)))
36 | .pipe(cssimport())
37 | .pipe(gulpif(global.config.css.autoprefix, autoprefixer(cssConfig.autoprefixerConfig)))
38 | .pipe(dest(helpers.trim(`${helpers.dist()}/${global.config.css.dist}`)))
39 | .pipe(gulpif(global.config.css.minify, cleanCSS()))
40 | .pipe(gulpif(global.config.css.minify, rename(cssConfig.renameConfig)))
41 | .pipe(gulpif(global.config.css.sourcemaps, sourcemaps.write(helpers.trim(`${helpers.source()}/${global.config.css.dist}`))))
42 | .pipe(dest(helpers.trim(`${helpers.dist()}/${global.config.css.dist}`)))
43 | .pipe(gulpif(global.config.sync.run, global.bs.stream()));
44 | }
45 |
46 | // Will process non Critical Sass files
47 | function cssStartListen() {
48 | return src([helpers.trim(`${helpers.source()}/${global.config.css.src}/*.${ext}`), helpers.trim(`!${helpers.source()}/${global.config.css.src}/*.critical.${ext}`)])
49 | .pipe(gulpif(global.config.css.sourcemaps, sourcemaps.init()))
50 | .pipe(gulpif(global.config.css.lint, gulpStylelint(cssConfig.styleLintConfig)))
51 | .pipe(gulpif(global.config.css.sass, sass(thisSassConfig).on('error', sass.logError)))
52 | .pipe(cssimport())
53 | .pipe(gulpif(global.config.css.autoprefix, autoprefixer(cssConfig.autoprefixerConfig)))
54 | .pipe(dest(helpers.trim(`${helpers.dist()}/${global.config.css.dist}`)))
55 | .pipe(gulpif(global.config.css.minify, cleanCSS()))
56 | .pipe(gulpif(global.config.css.minify, rename(cssConfig.renameConfig)))
57 | .pipe(gulpif(global.config.css.sourcemaps, sourcemaps.write(helpers.trim(`${helpers.source()}/${global.config.css.dist}`))))
58 | .pipe(dest(helpers.trim(`${helpers.dist()}/${global.config.css.dist}`)))
59 | .pipe(gulpif(global.config.sync.run, global.bs.stream()));
60 | }
61 |
62 | // When Sass file is changed, it will process Sass file, too
63 | function cssListen() {
64 | return watch(helpers.trim(`${helpers.source()}/${global.config.css.src}/**/*.${ext}`), global.config.watchConfig, cssStartListen, global.bs.reload);
65 | }
66 |
67 | exports.css = {
68 | cssStart,
69 | cssListen,
70 | };
71 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/favicon.js:
--------------------------------------------------------------------------------
1 | const { src, dest, watch } = require('gulp');
2 | const realFavicon = require('gulp-real-favicon');
3 | const fs = require('fs');
4 |
5 | const { helpers } = require('./helpers');
6 |
7 | const faviconConfig = require('./.favicon.json');
8 | const faviconDataConfig = require('./.favicon-data.json');
9 |
10 | const thisFaviconDataConfig = {
11 | ...faviconDataConfig,
12 | masterPicture: `${helpers.parse(faviconDataConfig.masterPicture)}`,
13 | temp: `${helpers.parse(faviconDataConfig.temp)}`,
14 | dest: `${helpers.parse(faviconDataConfig.dest)}`,
15 | iconsPath: `${helpers.parse(faviconDataConfig.iconsPath)}`,
16 | markupFile: `${helpers.parse(faviconDataConfig.markupFile)}`,
17 | };
18 |
19 | // Will process favicon file
20 | function faviconStart(cb) {
21 | if (fs.existsSync(helpers.trim(`${thisFaviconDataConfig.temp}/favicon.ico`))) {
22 | src(helpers.trim(`${thisFaviconDataConfig.temp}/*`))
23 | .pipe(dest(helpers.trim(`${thisFaviconDataConfig.dest}`)));
24 |
25 | cb();
26 | } else {
27 | realFavicon.generateFavicon(thisFaviconDataConfig, () => {
28 | if (fs.existsSync(thisFaviconDataConfig.markupFile)) {
29 | src(helpers.trim(`${thisFaviconDataConfig.dest}/*`))
30 | .pipe(dest(helpers.trim(`${thisFaviconDataConfig.temp}`)));
31 |
32 | const parsedFaviconFile = JSON.parse(fs.readFileSync(thisFaviconDataConfig.markupFile));
33 |
34 | src(helpers.parse(faviconConfig.src))
35 | .pipe(realFavicon.injectFaviconMarkups(parsedFaviconFile.favicon.html_code))
36 | .pipe(dest(helpers.parse(faviconConfig.dest)));
37 | }
38 |
39 | cb();
40 | });
41 | }
42 | }
43 |
44 | // When favicon file change, it will process favicon file, too
45 | function faviconListen() {
46 | return watch(helpers.trim(`${helpers.source()}/${global.config.favicon.src}/**/*`), global.config.watchConfig, faviconStart, global.bs.reload);
47 | }
48 |
49 | exports.favicon = {
50 | faviconStart,
51 | faviconListen,
52 | };
53 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/fonts.js:
--------------------------------------------------------------------------------
1 | const { src, dest, watch } = require('gulp');
2 |
3 | const { helpers } = require('./helpers');
4 |
5 | // Will process font files, too
6 | function fontsStart() {
7 | return src(helpers.trim(`${helpers.source()}/${global.config.fonts.src}/**/*`))
8 | .pipe(dest(helpers.trim(`${helpers.dist()}/${global.config.fonts.dist}`)));
9 | }
10 |
11 | // When font is changed, it will process font file, too
12 | function fontsListen() {
13 | return watch(helpers.trim(`${helpers.source()}/${global.config.fonts.src}/**/*`), global.config.watchConfig, fontsStart, global.bs.reload);
14 | }
15 |
16 | exports.fonts = {
17 | fontsStart,
18 | fontsListen,
19 | };
20 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/gfx.js:
--------------------------------------------------------------------------------
1 | const { src, dest, watch } = require('gulp');
2 | const gulpif = require('gulp-if');
3 | const imagemin = require('gulp-imagemin');
4 | const imageminMozjpeg = require('imagemin-mozjpeg');
5 | const imageminPngquant = require('imagemin-pngquant');
6 |
7 | const { helpers } = require('./helpers');
8 |
9 | const gfxConfig = require('./.gfx.json');
10 |
11 | // Will process image files
12 | function gfxStart() {
13 | return src(helpers.trim(`${helpers.source()}/${global.config.gfx.src}/**/*`))
14 | .pipe(imagemin([
15 | imagemin.gifsicle(gfxConfig.gifConfig),
16 | imageminMozjpeg(gfxConfig.jpegConfig),
17 | imageminPngquant(gfxConfig.pngConfig),
18 | imagemin.svgo(gfxConfig.svgConfig),
19 | ]))
20 | .pipe(dest(helpers.trim(`${helpers.dist()}/${global.config.gfx.dist}`)))
21 | .pipe(gulpif(global.config.sync.run, global.bs.stream()));
22 | }
23 |
24 | // When image is changed, it will process image file, too
25 | function gfxListen() {
26 | return watch(helpers.trim(`${helpers.source()}/${global.config.gfx.src}/**/*`), global.config.watchConfig, gfxStart, global.bs.reload);
27 | }
28 |
29 | exports.gfx = {
30 | gfxStart,
31 | gfxListen,
32 | };
33 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/helpers.js:
--------------------------------------------------------------------------------
1 | const { src } = require('gulp');
2 | const exit = require('gulp-exit');
3 | const wait = require('gulp-wait');
4 |
5 | const helpersConfig = require('./.helpers.json');
6 |
7 | // Will remove end slash from path
8 | const trim = (p) => {
9 | let r = p;
10 | while (r.indexOf('..') !== -1) {
11 | r = r.replace('..', '');
12 | }
13 |
14 | while (r.indexOf('//') !== -1) {
15 | r = r.replace('//', '/');
16 | }
17 |
18 | return r;
19 | };
20 |
21 | // Will return root folder
22 | const proot = () => trim(`${global.config.proot}/`);
23 |
24 | // Will return root src folder
25 | const source = () => trim(`${global.config.proot}/${global.config.src}`);
26 |
27 | // Will return root dest folder
28 | const dist = () => trim(`${global.config.proot}/${global.config.dist}`);
29 |
30 | // Will parse path
31 | const parse = (p) => p.replace('helpers.proot/', proot())
32 | .replace('helpers.dist', dist()).replace('helpers.source', source())
33 | .replace('config.css.src', global.config.css.src)
34 | .replace('config.css.dist', global.config.css.dist)
35 | .replace('config.js.src', global.config.js.src)
36 | .replace('config.js.dist', global.config.js.dist)
37 | .replace('config.html.src', global.config.html.src)
38 | .replace('config.html.dist', global.config.html.dist)
39 | .replace('config.gfx.src', global.config.gfx.src)
40 | .replace('config.gfx.dist', global.config.gfx.dist)
41 | .replace('config.kss.dist', global.config.kss.dist)
42 | .replace('config.sassdoc.dist', global.config.sassdoc.dist)
43 | .replace('config.jsdoc.dist', global.config.jsdoc.dist);
44 |
45 | // Will skip the task
46 | const skip = (cb) => cb();
47 |
48 | // Will kill all tasks after delay
49 | const kill = (cb) => {
50 | src(proot())
51 | .pipe(wait(helpersConfig.wait))
52 | .pipe(exit());
53 |
54 | cb();
55 | };
56 |
57 | // Will kill all tasks immidiately
58 | const killNow = (cb) => {
59 | src(proot())
60 | .pipe(exit());
61 |
62 | cb();
63 | };
64 |
65 | exports.helpers = {
66 | proot,
67 | trim,
68 | source,
69 | dist,
70 | skip,
71 | kill,
72 | killNow,
73 | parse,
74 | };
75 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/html.js:
--------------------------------------------------------------------------------
1 | const { src, dest, watch } = require('gulp');
2 | const gulpif = require('gulp-if');
3 | const rename = require('gulp-rename');
4 | const path = require('path');
5 | const pug = global.config.html.pug ? require('gulp-pug') : () => true;
6 | const data = global.config.html.data ? require('gulp-data') : () => true;
7 | const htmlmin = global.config.html.minify ? require('gulp-htmlmin') : () => true;
8 | const htmllint = global.config.html.lint ? require('gulp-htmllint') : () => true;
9 | const inlineSource = global.config.html.inline ? require('gulp-inline-source') : () => true;
10 | const fs = global.config.html.inline ? require('fs') : () => true;
11 |
12 | const { helpers } = require('./helpers');
13 |
14 | const htmlConfig = require('./.html.json');
15 |
16 | const ext = global.config.html.pug ? 'pug' : 'html';
17 |
18 | let thisPugConfig = {};
19 |
20 | const siteConfigs = global.config.html.data ? [{
21 | name: 'site',
22 | path: helpers.trim(`${helpers.proot()}/data/site.json`),
23 | }] : {};
24 |
25 | if (global.config.html.pug) {
26 | thisPugConfig = htmlConfig.pugConfig.basedir
27 | ? htmlConfig.pugConfig
28 | : ({
29 | ...htmlConfig.pugConfig,
30 | basedir: helpers.trim(`${helpers.source()}/${global.config.html.src}/`) });
31 | }
32 |
33 | let thisHtmllintConfig = {};
34 |
35 | if (global.config.html.lint) {
36 | thisHtmllintConfig = htmlConfig.htmllintConfig.config
37 | ? htmlConfig.htmllintConfig.config
38 | : ({ ...htmlConfig.htmllintConfig, config: `${helpers.proot()}.htmllintrc` });
39 | }
40 |
41 | let thisInlineConfig = {};
42 |
43 | if (global.config.html.inline) {
44 | thisInlineConfig = htmlConfig.inlineConfig.rootpath
45 | ? htmlConfig.inlineConfig
46 | : ({ ...htmlConfig.inlineConfig, rootpath: path.resolve(helpers.dist()) });
47 | }
48 |
49 | const htmlSrc = global.config.html.pug
50 | ? [helpers.trim(`${helpers.source()}/${global.config.html.src}/**/*.${ext}`), helpers.trim(`!${helpers.source()}/${global.config.html.src}/_**/*.${ext}`), helpers.trim(`!${helpers.source()}/${global.config.html.src}/**/_**/*.${ext}`)]
51 | : helpers.trim(`${helpers.source()}/${global.config.html.src}/**/*.html`);
52 |
53 | // Will process Pug files
54 | function htmlStart() {
55 | return src(htmlSrc)
56 | .pipe(gulpif(global.config.html.data, data(() => {
57 | const temp = {};
58 |
59 | siteConfigs.forEach((siteConfig) => {
60 | temp[siteConfig.name] = JSON.parse(fs.readFileSync(siteConfig.path));
61 | });
62 |
63 | return temp;
64 | })))
65 | .pipe(gulpif(global.config.html.pug, pug(thisPugConfig)))
66 | .pipe(gulpif(global.config.html.lint, htmllint(thisHtmllintConfig)))
67 | .pipe(gulpif(global.config.html.inline, inlineSource(thisInlineConfig)))
68 | .pipe(gulpif(global.config.html.minify, htmlmin(htmlConfig.htmlminConfig)))
69 | .pipe(rename(htmlConfig.renameConfig))
70 | .pipe(dest(helpers.trim(`${helpers.dist()}/${global.config.html.dist}`)))
71 | .pipe(gulpif(global.config.sync.run, global.bs.stream()));
72 | }
73 |
74 | // When Pug, md, or config file is changed, it will process Pug file, too
75 | function htmlListen() {
76 | return watch([...(global.config.html.data ? siteConfigs.map((siteConfig) => siteConfig.path) : ''), helpers.trim(`${helpers.source()}/${global.config.html.src}/**/*.${ext}`), helpers.trim(`${helpers.source()}/${global.config.html.src}/**/*.md`)], global.config.watchConfig, htmlStart);
77 | }
78 |
79 | exports.html = {
80 | htmlStart,
81 | htmlListen,
82 | };
83 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/index.js:
--------------------------------------------------------------------------------
1 | const { series, parallel } = require('gulp');
2 |
3 | const { helpers } = require('./helpers');
4 |
5 | global.config = require('./.starter-project.json');
6 |
7 | global.config.watchConfig = require('./.watch.json');
8 |
9 | global.bs = global.config.sync.run ? require('browser-sync').create() : () => true;
10 |
11 | const { clean } = require('./clean');
12 | const { sync } = global.config.sync.run ? require('./sync') : false;
13 | const { bump } = global.config.bump.run ? require('./bump') : false;
14 | const { css } = global.config.css.run ? require('./css') : false;
15 | const { js } = global.config.js.run ? require('./js') : false;
16 | const { gfx } = global.config.gfx.run ? require('./gfx') : false;
17 | const { fonts } = global.config.fonts.run ? require('./fonts') : false;
18 | const { favicon } = global.config.favicon.run ? require('./favicon') : false;
19 | const { html } = global.config.html.run ? require('./html') : false;
20 | const { critical } = global.config.critical.run ? require('./critical') : false;
21 |
22 | const { kss } = global.config.kss.run ? require('./kss') : false;
23 | const { sassdoc } = global.config.sassdoc.run ? require('./sassdoc') : false;
24 | const { jsdoc } = global.config.jsdoc.run ? require('./jsdoc') : false;
25 |
26 | if (global.config.bump.run) {
27 | exports.bumpPatch = bump.patch;
28 | exports.bumpMinor = bump.minor;
29 | exports.bumpPrerelease = bump.prerelease;
30 | }
31 |
32 | // gulp-if fix
33 | if (!global.config.sync.run) {
34 | global.bs.stream = () => true;
35 | global.bs.reload = () => true;
36 | }
37 |
38 | exports.clean = clean.cleanStart;
39 |
40 | exports.dev = series(
41 | clean.cleanStart,
42 | parallel(
43 | global.config.css.run ? css.cssStart : helpers.skip,
44 | global.config.js.run ? js.jsStartDev : helpers.skip,
45 | global.config.gfx.run ? gfx.gfxStart : helpers.skip,
46 | global.config.fonts.run ? fonts.fontsStart : helpers.skip,
47 | ),
48 | global.config.html.run ? html.htmlStart : helpers.skip,
49 | global.config.sync.run ? sync.syncStart : helpers.skip,
50 | parallel(
51 | global.config.css.run ? css.cssListen : helpers.skip,
52 | global.config.js.run ? js.jsListen : helpers.skip,
53 | global.config.gfx.run ? gfx.gfxListen : helpers.skip,
54 | global.config.fonts.run ? fonts.fontsListen : helpers.skip,
55 | global.config.html.run ? html.htmlListen : helpers.skip,
56 | ),
57 | );
58 |
59 | exports.build = series(
60 | clean.cleanStart,
61 | parallel(
62 | global.config.favicon.run ? favicon.faviconStart : helpers.skip,
63 | global.config.css.run ? css.cssStart : helpers.skip,
64 | global.config.js.run ? js.jsStartProd : helpers.skip,
65 | global.config.gfx.run ? gfx.gfxStart : helpers.skip,
66 | global.config.fonts.run ? fonts.fontsStart : helpers.skip,
67 | ),
68 | global.config.html.run ? html.htmlStart : helpers.skip,
69 | global.config.kss.run ? kss.kssStart : helpers.skip,
70 | global.config.sassdoc.run ? sassdoc.sassdocStart : helpers.skip,
71 | global.config.jsdoc.run ? jsdoc.jsdocStart : helpers.skip,
72 | global.config.sync.run && global.config.critical.run ? sync.syncStartBuild : helpers.skip,
73 | global.config.critical.run ? critical.criticalStart : helpers.skip,
74 | global.config.sync.run && global.config.critical.run ? sync.syncStop : helpers.skip,
75 | global.config.html.run
76 | && global.config.html.pug
77 | && global.config.critical.run ? html.htmlStart : helpers.skip,
78 | helpers.killNow,
79 | );
80 |
81 | exports.default = series(
82 | clean.cleanStart,
83 | parallel(
84 | global.config.favicon.run ? favicon.faviconStart : helpers.skip,
85 | global.config.css.run ? css.cssStart : helpers.skip,
86 | global.config.js.run ? js.jsStartProd : helpers.skip,
87 | global.config.gfx.run ? gfx.gfxStart : helpers.skip,
88 | global.config.fonts.run ? fonts.fontsStart : helpers.skip,
89 | ),
90 | global.config.html.run ? html.htmlStart : helpers.skip,
91 | global.config.kss.run ? kss.kssStart : helpers.skip,
92 | global.config.sassdoc.run ? sassdoc.sassdocStart : helpers.skip,
93 | global.config.jsdoc.run ? jsdoc.jsdocStart : helpers.skip,
94 | global.config.sync.run ? sync.syncStart : helpers.skip,
95 | global.config.critical.run ? critical.criticalStart : helpers.skip,
96 | global.config.html.run
97 | && global.config.html.pug
98 | && global.config.critical.run ? html.htmlStart : helpers.skip,
99 | parallel(
100 | global.config.css.run ? css.cssListen : helpers.skip,
101 | global.config.js.run ? js.jsListen : helpers.skip,
102 | global.config.gfx.run ? gfx.gfxListen : helpers.skip,
103 | global.config.fonts.run ? fonts.fontsListen : helpers.skip,
104 | global.config.html.run ? html.htmlListen : helpers.skip,
105 | global.config.kss.run ? kss.kssListen : helpers.skip,
106 | global.config.sassdoc.run ? sassdoc.sassdocListen : helpers.skip,
107 | global.config.jsdoc.run ? jsdoc.jsdocListen : helpers.skip,
108 | ),
109 | );
110 |
111 |
112 | // user warnings
113 | console.log(`IMPORTANT NOTICE!
114 | Since version 2.2.7, Starter Project is using updated Critical tasks and config.
115 | See more here: https://starter.silvestar.codes/#critical-css-configuration.
116 |
117 | Project homepage: https://starter.silvestar.codes.
118 | Developed by Silvestar: https://www.silvestar.codes.
119 | `);
120 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/js.js:
--------------------------------------------------------------------------------
1 | const { src, dest, watch } = require('gulp');
2 | const gulpif = require('gulp-if');
3 | const eslint = global.config.js.lint ? require('gulp-eslint') : () => true;
4 | const sourcemaps = global.config.js.sourcemaps ? require('gulp-sourcemaps') : () => true;
5 | const rename = global.config.js.uglify ? require('gulp-rename') : () => true;
6 | const webpack = require('webpack');
7 | const gulpWebpack = require('webpack-stream');
8 |
9 | const { helpers } = require('./helpers');
10 |
11 | const jsConfig = require('./.js.json');
12 | const webpackConfig = require('./webpack.js');
13 |
14 | // gulp-if fix
15 | if (!global.config.css.sourcemaps) {
16 | sourcemaps.init = () => true;
17 | sourcemaps.write = () => true;
18 | }
19 |
20 | const thisEslintConfig = (global.config.js.lint)
21 | ? ({ ...jsConfig.eslintConfig, configFile: helpers.parse(jsConfig.eslintConfig.configFile) })
22 | : {};
23 |
24 | if (!global.config.js.lint) {
25 | eslint.format = () => true;
26 | eslint.failAfterError = () => true;
27 | eslint.result = () => true;
28 | }
29 |
30 | webpackConfig.devtool = (global.config.js.sourcemaps) ? 'sourcemaps' : '';
31 |
32 | // Will process JS files
33 | function jsStart() {
34 | return src(helpers.trim(`${helpers.source()}/${global.config.js.src}/*.js`))
35 | .pipe(gulpif(global.config.js.sourcemaps, sourcemaps.init()))
36 | .pipe(gulpif(global.config.js.lint, eslint(thisEslintConfig)))
37 | .pipe(gulpif(global.config.js.lint, eslint.format()))
38 | .pipe(gulpif(global.config.js.lint, eslint.failAfterError()))
39 | .pipe(gulpif(global.config.js.lint, eslint.result((result) => {
40 | console.log(`[JS] ESLint complete: ${result.filePath}`);
41 | console.log(`[JS] Messages: ${result.messages.length}`);
42 | console.warn(`[JS] Warnings: ${result.warningCount}`);
43 | console.error(`[JS] Errors: ${result.errorCount}`);
44 | })))
45 | .pipe(
46 | gulpWebpack(webpackConfig),
47 | webpack,
48 | )
49 | .pipe(dest(helpers.trim(`${helpers.dist()}/${global.config.js.dist}`)))
50 | .pipe(gulpif(global.config.js.uglify, rename(jsConfig.renameConfig)))
51 | .pipe(gulpif(global.config.js.sourcemaps, sourcemaps.write(helpers.trim(`${helpers.source()}/${global.config.js.dist}`))))
52 | .pipe(dest(helpers.trim(`${helpers.dist()}/${global.config.js.dist}`)))
53 | .pipe(gulpif(global.config.sync.run, global.bs.stream()));
54 | }
55 |
56 | function jsStartDev(cb) {
57 | webpackConfig.mode = 'development';
58 |
59 | jsStart();
60 |
61 | cb();
62 | }
63 |
64 | function jsStartProd(cb) {
65 | webpackConfig.mode = (global.config.js.uglify) ? 'production' : 'development';
66 |
67 | jsStart();
68 |
69 | cb();
70 | }
71 |
72 | // When JS file is changed, it will process JS file, too
73 | function jsListen() {
74 | return watch(helpers.trim(`${helpers.source()}/${global.config.js.src}/*.js`), global.config.watchConfig, jsStart, global.bs.reload);
75 | }
76 |
77 | exports.js = {
78 | jsStart,
79 | jsStartDev,
80 | jsStartProd,
81 | jsListen,
82 | };
83 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/jsdoc.js:
--------------------------------------------------------------------------------
1 | const { src, watch } = require('gulp');
2 | const jsdoc = require('gulp-jsdoc3');
3 |
4 | const { helpers } = require('./helpers');
5 |
6 | const jsdocConfig = require('./.jsdoc.json');
7 |
8 | const thisSrc = jsdocConfig.src.map((path) => helpers.parse(path));
9 |
10 | const thisOpts = {
11 | ...jsdocConfig.settings.opts,
12 | destination: helpers.parse(jsdocConfig.settings.opts.destination),
13 | }
14 |
15 | const thisSettings = {
16 | ...jsdocConfig.settings,
17 | opts: thisOpts,
18 | }
19 |
20 | // Will process JSdoc docs
21 | function jsdocStart() {
22 | return src(thisSrc)
23 | .pipe(jsdoc(thisSettings));
24 | }
25 |
26 | // When JS file is changed, it will process JSdoc docs, too
27 | function jsdocListen() {
28 | return watch([helpers.trim(`${helpers.source()}/${global.config.js.src}/*.js`), helpers.trim(`${helpers.source()}/${global.config.js.src}/*.md`)], global.config.watchConfig, jsdocStart, global.bs.reload);
29 | }
30 |
31 | exports.jsdoc = {
32 | jsdocStart,
33 | jsdocListen,
34 | };
35 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/kss.js:
--------------------------------------------------------------------------------
1 | const { watch } = require('gulp');
2 | const kss = require('kss');
3 |
4 | const { helpers } = require('./helpers');
5 |
6 | const kssConfig = require('./.kss.json');
7 |
8 | const ext = global.config.css.sass ? 'scss' : 'css';
9 |
10 | const thisCss = kssConfig.css.map((path) => helpers.parse(path));
11 | const thisJs = kssConfig.js.map((path) => helpers.parse(path));
12 |
13 | const thisKssConfig = {
14 | ...kssConfig,
15 | source: helpers.parse(kssConfig.source),
16 | destination: helpers.parse(kssConfig.destination),
17 | css: thisCss,
18 | js: thisJs,
19 | };
20 |
21 | // Will process KSS docs
22 | function kssStart() {
23 | return kss(thisKssConfig);
24 | }
25 |
26 | // When Sass file is changed, it will process KSS docs, too
27 | function kssListen() {
28 | return watch(helpers.trim(`${helpers.source()}/${global.config.css.src}/**/*.${ext}`), global.config.watchConfig, kssStart, global.bs.reload);
29 | }
30 |
31 | exports.kss = {
32 | kssStart,
33 | kssListen,
34 | };
35 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/sassdoc.js:
--------------------------------------------------------------------------------
1 | const { src, watch } = require('gulp');
2 | const sassdoc = require('sassdoc');
3 |
4 | const { helpers } = require('./helpers');
5 |
6 | const sassdocConfig = require('./.sassdoc.json');
7 |
8 | const ext = global.config.css.sass ? 'scss' : 'css';
9 |
10 | const thisSassdocConfig = {
11 | ...sassdocConfig,
12 | package: `${helpers.proot()}${sassdocConfig.package}`,
13 | dest: helpers.parse(sassdocConfig.dest),
14 | };
15 |
16 | // Will process SassDoc docs
17 | function sassdocStart() {
18 | return src(helpers.trim(`${helpers.source()}/${global.config.css.src}/**/*.${ext}`))
19 | .pipe(sassdoc(thisSassdocConfig));
20 | }
21 |
22 | // When Sass file is changed, it will process SassDoc docs, too
23 | function sassdocListen() {
24 | return watch(helpers.trim(`${helpers.source()}/${global.config.css.src}/**/*.${ext}`), global.config.watchConfig, sassdocStart, global.bs.reload);
25 | }
26 |
27 | exports.sassdoc = {
28 | sassdocStart,
29 | sassdocListen,
30 | };
31 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/sync.js:
--------------------------------------------------------------------------------
1 | const { helpers } = require('./helpers');
2 |
3 | const syncConfig = require('./.sync.json');
4 |
5 | // Start static server
6 | function syncStart(cb) {
7 | if (global.config.sync.run) {
8 | let thisConfig = {};
9 |
10 | if (syncConfig.proxy) {
11 | thisConfig = {
12 | ...syncConfig,
13 | proxy: syncConfig.proxy,
14 | };
15 | } else {
16 | const thisServer = syncConfig.server.baseDir
17 | ? helpers.parse(syncConfig.server.baseDir)
18 | : ({
19 | ...syncConfig.server,
20 | baseDir: helpers.dist(),
21 | });
22 |
23 | thisConfig = {
24 | ...syncConfig,
25 | server: thisServer,
26 | };
27 | }
28 |
29 | global.bs.init(thisConfig);
30 | }
31 |
32 | cb();
33 | }
34 |
35 | // Start static dev server
36 | function syncStartBuild(cb) {
37 | syncConfig.open = false;
38 |
39 | syncStart(cb);
40 | }
41 |
42 | // Stop static server
43 | function syncStop(cb) {
44 | global.bs.cleanup();
45 | global.bs.exit();
46 |
47 | cb();
48 | }
49 |
50 | exports.sync = {
51 | syncStart,
52 | syncStartBuild,
53 | syncStop,
54 | };
55 |
--------------------------------------------------------------------------------
/copy/_gulpfile.js/webpack.js:
--------------------------------------------------------------------------------
1 | const { helpers } = require('./helpers')
2 | const path = require('path')
3 |
4 | module.exports = {
5 | mode: 'production',
6 | entry: {
7 | script: helpers.parse('helpers.source/config.js.src/script.js')
8 | },
9 | output: {
10 | path: path.resolve(`${__dirname}/${helpers.parse('helpers.dist/config.js.dist/')}`),
11 | filename: '[name].js'
12 | },
13 | module: {
14 | rules: [
15 | {
16 | test: /\.js$/,
17 | exclude: /node_modules/,
18 | use: {
19 | loader: 'babel-loader',
20 | options: {
21 | presets: ['@babel/env']
22 | }
23 | }
24 | }
25 | ]
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/gfx/ss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maliMirkec/starter-project-cli/cdb788de243216697e1acf3e7864d27f22059699/gfx/ss.png
--------------------------------------------------------------------------------
/gfx/starter-project-cli-npm.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/gfx/starter-project-cli.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maliMirkec/starter-project-cli/cdb788de243216697e1acf3e7864d27f22059699/gfx/starter-project-cli.jpg
--------------------------------------------------------------------------------
/gfx/starter-project-cli.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maliMirkec/starter-project-cli/cdb788de243216697e1acf3e7864d27f22059699/gfx/starter-project-cli.png
--------------------------------------------------------------------------------
/gfx/starter-project-npm.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/gfx/starter-project-questions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maliMirkec/starter-project-cli/cdb788de243216697e1acf3e7864d27f22059699/gfx/starter-project-questions.png
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const program = require('commander');
4 | const log = require('./lib/log');
5 | const inquirer = require('./lib/inquirer');
6 | const sp = require('./lib/starter-project');
7 |
8 | log.clear();
9 | log.figlet('S-PRO', false);
10 | log.message('\n ** Starter Project CLI **\n', false);
11 |
12 | program
13 | .version('1.0.33')
14 | .description('Starter Project CLI');
15 |
16 | program
17 | .command('start')
18 | .alias('s')
19 | .description('Initialize Starter Project')
20 | .action(() => {
21 | inquirer.basicInteraction().then((answers) => {
22 | sp.run(answers);
23 | });
24 | });
25 |
26 | // program
27 | // .command('command')
28 | // .alias('c')
29 | // .description('Returns Gulp install command')
30 | // .action(() => {
31 | // sp.cmd(answers)
32 | // })
33 |
34 | program.parse(process.argv);
35 |
--------------------------------------------------------------------------------
/lib/config.js:
--------------------------------------------------------------------------------
1 | const Configstore = require('configstore');
2 |
3 | const configPath = 'gulpfile.js/.starter-project.json';
4 |
5 | const files = require('./files');
6 | const log = require('./log');
7 |
8 | const conf = new Configstore('starter-project-cli', {
9 | proot: './',
10 | src: 'src',
11 | dist: 'dist',
12 | sync: {
13 | run: true,
14 | },
15 | html: {
16 | run: true,
17 | src: 'html',
18 | dist: '',
19 | pug: false,
20 | minify: true,
21 | inline: true,
22 | lint: true,
23 | },
24 | css: {
25 | run: true,
26 | src: 'scss',
27 | dist: 'css',
28 | sass: true,
29 | minify: true,
30 | autoprefix: true,
31 | sourcemaps: true,
32 | lint: true,
33 | },
34 | js: {
35 | run: true,
36 | src: 'js',
37 | dist: 'js',
38 | uglify: true,
39 | lint: true,
40 | sourcemaps: true,
41 | },
42 | gfx: {
43 | run: true,
44 | src: 'gfx',
45 | dist: 'gfx',
46 | },
47 | fonts: {
48 | run: true,
49 | src: 'fonts',
50 | dist: 'fonts',
51 | },
52 | favicon: {
53 | run: true,
54 | },
55 | critical: {
56 | run: true,
57 | },
58 | kss: {
59 | run: true,
60 | dist: 'docs/styleguide',
61 | },
62 | sassdoc: {
63 | run: true,
64 | dist: 'docs/sass',
65 | },
66 | jsdoc: {
67 | run: true,
68 | dist: 'docs/js',
69 | },
70 | bump: {
71 | run: true,
72 | },
73 | });
74 |
75 | const getConf = () => conf.all;
76 |
77 | const getOptionValue = (option) => conf.get(option);
78 |
79 | const setOptionValue = (option, value) => conf.set(option, value);
80 |
81 | const save = (dir) => {
82 | try {
83 | const configFilepath = `${files.slash(dir)}${configPath}`;
84 |
85 | return files.saveFile(configFilepath, getConf());
86 | } catch (err) {
87 | log.message(err);
88 |
89 | return false;
90 | }
91 | };
92 |
93 | module.exports = {
94 | getConf,
95 | getOptionValue,
96 | setOptionValue,
97 | save,
98 | };
99 |
--------------------------------------------------------------------------------
/lib/files.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 | const mkdirp = require('mkdirp');
4 | const ncp = require('ncp');
5 | const log = require('./log');
6 |
7 | ncp.limit = 16;
8 |
9 | const slash = (dirPath) => ((dirPath.substr(-1) !== '/') ? `${dirPath}/` : dirPath);
10 |
11 | const trim = (path) => path.replace('_', '').replace('copy/', '');
12 |
13 | const getCurrentDirectoryBase = () => {
14 | try {
15 | return path.basename(process.cwd());
16 | } catch (err) {
17 | log.message(err);
18 |
19 | return false;
20 | }
21 | };
22 |
23 | const fileExists = (filePath) => {
24 | try {
25 | return fs.existsSync(filePath);
26 | } catch (err) {
27 | log.message(err);
28 |
29 | return false;
30 | }
31 | };
32 |
33 | const directoryExists = (dirPath) => {
34 | try {
35 | if (!fileExists(dirPath)) {
36 | return false;
37 | }
38 |
39 | return fs.statSync(dirPath).isDirectory();
40 | } catch (err) {
41 | log.message(err);
42 |
43 | return false;
44 | }
45 | };
46 |
47 | const makeDirectory = (dirPath) => {
48 | try {
49 | if (!directoryExists(dirPath)) {
50 | return mkdirp(dirPath);
51 | }
52 |
53 | return true;
54 | } catch (err) {
55 | log.message(err);
56 |
57 | return false;
58 | }
59 | };
60 |
61 | const copyFile = (filePath, destPath = './', destFile) => {
62 | try {
63 | const destFileName = destFile.split('/').pop();
64 | const clb = (destFileName[0] !== '.');
65 |
66 | return ncp(path.join(__dirname, '..', filePath), `${slash(destPath)}${trim(destFile)}`, { clobber: clb }, log.message);
67 | } catch (err) {
68 | log.message(err);
69 |
70 | return false;
71 | }
72 | };
73 |
74 | const saveFile = (filePath, content) => {
75 | try {
76 | fs.writeFileSync(filePath, JSON.stringify(content, null, 2), 'utf-8');
77 |
78 | return true;
79 | } catch (err) {
80 | log.message(err);
81 |
82 | return false;
83 | }
84 | };
85 |
86 | module.exports = {
87 | slash,
88 | getCurrentDirectoryBase,
89 | directoryExists,
90 | makeDirectory,
91 | fileExists,
92 | copyFile,
93 | saveFile,
94 | };
95 |
--------------------------------------------------------------------------------
/lib/inquirer.js:
--------------------------------------------------------------------------------
1 | const inquirer = require('inquirer');
2 | const config = require('./config');
3 |
4 | const basicInteraction = () => {
5 | const questions = [
6 | {
7 | type: 'confirm',
8 | name: 'override',
9 | message: ' GENERAL | Do you want to override the project? Be sure to commit all changes before you proceed.',
10 | default: true,
11 | }, {
12 | type: 'input',
13 | name: 'proot',
14 | message: ' GENERAL | What is the root folder of the project?',
15 | default: config.getOptionValue('proot') || './',
16 | validate(value) {
17 | if (value.length) {
18 | return true;
19 | }
20 | return 'This field cannot be empty.';
21 | },
22 | when(answers) {
23 | return answers.override === true;
24 | },
25 | }, {
26 | type: 'input',
27 | name: 'src',
28 | message: ' GENERAL | Where is the folder with the source code of the project (relative to default path)?',
29 | default: config.getOptionValue('src') || 'src',
30 | validate(value) {
31 | if (value.length) {
32 | return true;
33 | }
34 | return 'This field cannot be empty.';
35 | },
36 | when(answers) {
37 | return answers.override === true;
38 | },
39 | }, {
40 | type: 'input',
41 | name: 'dist',
42 | message: ' GENERAL | Where do you want to store compiled code of the project (relative to default path)?',
43 | default: config.getOptionValue('dist') || 'dist',
44 | validate(value) {
45 | if (value.length) {
46 | return true;
47 | }
48 | return 'This field cannot be empty.';
49 | },
50 | when(answers) {
51 | return answers.override === true;
52 | },
53 | }, {
54 | type: 'confirm',
55 | name: 'override2',
56 | message: ' GENERAL | Are you sure that you want to override the project?',
57 | default: true,
58 | when(answers) {
59 | return answers.override === true;
60 | },
61 | }, {
62 | type: 'confirm',
63 | name: 'sync[run]',
64 | message: 'BROWSERSYNC | Do you want to run BrowserSync to preview changes in the browser?',
65 | default: config.getOptionValue('sync.run') || true,
66 | when(answers) {
67 | return answers.override2 === true;
68 | },
69 | }, {
70 | type: 'confirm',
71 | name: 'html[run]',
72 | message: ' HTML | Do you want to run HTML tasks?',
73 | default: config.getOptionValue('html.run') || true,
74 | when(answers) {
75 | return answers.override2 === true;
76 | },
77 | }, {
78 | type: 'confirm',
79 | name: 'html[pug]',
80 | message: ' HTML | Are you using Pug as a template engine?',
81 | default: config.getOptionValue('html.pug') || true,
82 | when(answers) {
83 | return answers.override2 === true && answers.html.run === true;
84 | },
85 | }, {
86 | type: 'confirm',
87 | name: 'html[data]',
88 | message: ' HTML | Do you want to inject data into pug files?',
89 | default: config.getOptionValue('html.data') || false,
90 | when(answers) {
91 | return answers.override2 === true && answers.html.run === true && answers.html.pug === true;
92 | },
93 | }, {
94 | type: 'confirm',
95 | name: 'html[inline]',
96 | message: ' HTML | Do you want to run inline source tasks (inline CSS or SVG in HTML code)?',
97 | default: config.getOptionValue('html.inline') || false,
98 | when(answers) {
99 | return answers.override2 === true && answers.html.run === true && answers.html.pug === true;
100 | },
101 | }, {
102 | type: 'input',
103 | name: 'html[src]',
104 | message: ' HTML | Where is the folder with HTML source code (relative to default source path)?',
105 | default: config.getOptionValue('html.src') || 'html',
106 | when(answers) {
107 | return answers.override2 === true && answers.html.run === true;
108 | },
109 | }, {
110 | type: 'input',
111 | name: 'html[dist]',
112 | message: ' HTML | Where do you want to store compiled HTML code (relative to default destination path)?',
113 | default: config.getOptionValue('html.dist') || '',
114 | when(answers) {
115 | return answers.override2 === true && answers.html.run === true;
116 | },
117 | }, {
118 | type: 'confirm',
119 | name: 'html[minify]',
120 | message: ' HTML | Do you want to minify HTML code?',
121 | default: config.getOptionValue('html.minify') || true,
122 | when(answers) {
123 | return answers.override2 === true && answers.html.run === true;
124 | },
125 | }, {
126 | type: 'confirm',
127 | name: 'html[lint]',
128 | message: ' HTML | Do you want to lint HTML code?',
129 | default: config.getOptionValue('html.lint') || false,
130 | when(answers) {
131 | return answers.override2 === true && answers.html.run === true;
132 | },
133 | }, {
134 | type: 'confirm',
135 | name: 'css[run]',
136 | message: ' CSS | Do you want to run CSS tasks?',
137 | default: config.getOptionValue('css.run') || true,
138 | when(answers) {
139 | return answers.override2 === true;
140 | },
141 | }, {
142 | type: 'confirm',
143 | name: 'css[sass]',
144 | message: ' CSS | Are you using Sass?',
145 | default: config.getOptionValue('css.sass') || true,
146 | when(answers) {
147 | return answers.override2 === true && answers.css.run === true;
148 | },
149 | }, {
150 | type: 'input',
151 | name: 'css[src]',
152 | message: ' CSS | Where is the folder with CSS source code (relative to default source path)?',
153 | default: config.getOptionValue('css.src') || 'scss',
154 | when(answers) {
155 | return answers.override2 === true && answers.css.run === true;
156 | },
157 | }, {
158 | type: 'input',
159 | name: 'css[dist]',
160 | message: ' CSS | Where do you want to store compiled CSS code (relative to default destination path)?',
161 | default: config.getOptionValue('css.dist') || 'css',
162 | when(answers) {
163 | return answers.override2 === true && answers.css.run === true;
164 | },
165 | }, {
166 | type: 'confirm',
167 | name: 'css[minify]',
168 | message: ' CSS | Do you want to minify CSS code?',
169 | default: config.getOptionValue('css.minify') || true,
170 | when(answers) {
171 | return answers.override2 === true && answers.css.run === true;
172 | },
173 | }, {
174 | type: 'confirm',
175 | name: 'css[autoprefix]',
176 | message: ' CSS | Do you want to autoprefix CSS code?',
177 | default: config.getOptionValue('css.autoprefix') || true,
178 | when(answers) {
179 | return answers.override2 === true && answers.css.run === true;
180 | },
181 | }, {
182 | type: 'confirm',
183 | name: 'css[sourcemaps]',
184 | message: ' CSS | Do you want to add sourcemaps for CSS code?',
185 | default: config.getOptionValue('css.sourcemaps') || true,
186 | when(answers) {
187 | return answers.override2 === true && answers.css.run === true;
188 | },
189 | }, {
190 | type: 'confirm',
191 | name: 'css[lint]',
192 | message: ' CSS | Do you want to lint CSS code?',
193 | default: config.getOptionValue('css.lint') || false,
194 | when(answers) {
195 | return answers.override2 === true && answers.css.run === true;
196 | },
197 | }, {
198 | type: 'confirm',
199 | name: 'js[run]',
200 | message: ' JS | Do you want to run JavaScript (es6) tasks?',
201 | default: config.getOptionValue('js.run') || true,
202 | when(answers) {
203 | return answers.override2 === true;
204 | },
205 | }, {
206 | type: 'input',
207 | name: 'js[src]',
208 | message: ' JS | Where is the folder with JavaScript source code (relative to default source path)?',
209 | default: config.getOptionValue('js.src') || 'js',
210 | when(answers) {
211 | return answers.override2 === true && answers.js.run === true;
212 | },
213 | }, {
214 | type: 'input',
215 | name: 'js[dist]',
216 | message: ' JS | Where do you want to store compiled JavaScript code (relative to default destination path)?',
217 | default: config.getOptionValue('js.dist') || 'js',
218 | when(answers) {
219 | return answers.override2 === true && answers.js.run === true;
220 | },
221 | }, {
222 | type: 'confirm',
223 | name: 'js[uglify]',
224 | message: ' JS | Do you want to minify JavaScript code?',
225 | default: config.getOptionValue('js.uglify') || true,
226 | when(answers) {
227 | return answers.override2 === true && answers.js.run === true;
228 | },
229 | }, {
230 | type: 'confirm',
231 | name: 'js[sourcemaps]',
232 | message: ' JS | Do you want to add sourcemaps for JavaScript code?',
233 | default: config.getOptionValue('js.sourcemaps') || true,
234 | when(answers) {
235 | return answers.override2 === true && answers.js.run === true;
236 | },
237 | }, {
238 | type: 'confirm',
239 | name: 'js[lint]',
240 | message: ' JS | Do you want to lint JavaScript code?',
241 | default: config.getOptionValue('js.lint') || false,
242 | when(answers) {
243 | return answers.override2 === true && answers.js.run === true;
244 | },
245 | }, {
246 | type: 'confirm',
247 | name: 'gfx[run]',
248 | message: ' IMAGES | Do you want to run image optimization tasks?',
249 | default: config.getOptionValue('gfx.run') || false,
250 | when(answers) {
251 | return answers.override2 === true;
252 | },
253 | }, {
254 | type: 'input',
255 | name: 'gfx[src]',
256 | message: ' IMAGES | Where is the folder with images (relative to default source path)?',
257 | default: config.getOptionValue('gfx.src') || 'gfx',
258 | when(answers) {
259 | return answers.override2 === true && answers.gfx.run === true;
260 | },
261 | }, {
262 | type: 'input',
263 | name: 'gfx[dist]',
264 | message: ' IMAGES | Where do you want to store optimized images (relative to default destination path)?',
265 | default: config.getOptionValue('gfx.dist') || 'gfx',
266 | when(answers) {
267 | return answers.override2 === true && answers.gfx.run === true;
268 | },
269 | }, {
270 | type: 'confirm',
271 | name: 'fonts[run]',
272 | message: ' FONTS | Do you use local fonts? Do you want to run font tasks?',
273 | default: config.getOptionValue('fonts.run') || false,
274 | when(answers) {
275 | return answers.override2 === true;
276 | },
277 | }, {
278 | type: 'input',
279 | name: 'fonts[src]',
280 | message: ' FONTS | Where is the folder with local fonts (relative to default source path)?',
281 | default: config.getOptionValue('fonts.src') || 'fonts',
282 | when(answers) {
283 | return answers.override2 === true && answers.fonts.run === true;
284 | },
285 | }, {
286 | type: 'input',
287 | name: 'fonts[dist]',
288 | message: ' FONTS | Where do you want to store local fonts (relative to default destination path)?',
289 | default: config.getOptionValue('fonts.dist') || 'fonts',
290 | when(answers) {
291 | return answers.override2 === true && answers.fonts.run === true;
292 | },
293 | }, {
294 | type: 'confirm',
295 | name: 'favicon[run]',
296 | message: ' FAVICON | Do you want to run favicon tasks?',
297 | default: config.getOptionValue('favicon.run') || false,
298 | when(answers) {
299 | return answers.override2 === true;
300 | },
301 | }, {
302 | type: 'confirm',
303 | name: 'critical[run]',
304 | message: ' CRITICAL | Do you want to extract Critical CSS?',
305 | default: config.getOptionValue('critical.run') || false,
306 | when(answers) {
307 | return answers.override2 === true;
308 | },
309 | }, {
310 | type: 'confirm',
311 | name: 'kss[run]',
312 | message: ' KSS | Do you want to add KSS style guide?',
313 | default: config.getOptionValue('kss.run') || false,
314 | when(answers) {
315 | return answers.override2 === true;
316 | },
317 | }, {
318 | type: 'input',
319 | name: 'kss[dist]',
320 | message: ' KSS | Where do you want to store KSS style guide (relative to default destination path)?',
321 | default: config.getOptionValue('kss.dist') || 'docs/styleguide',
322 | when(answers) {
323 | return answers.override2 === true && answers.kss.run === true;
324 | },
325 | }, {
326 | type: 'confirm',
327 | name: 'sassdoc[run]',
328 | message: ' SASSDOC | Do you want to add documentation for the SASS code (SassDoc)?',
329 | default: config.getOptionValue('sassdoc.run') || false,
330 | when(answers) {
331 | return answers.override2 === true;
332 | },
333 | }, {
334 | type: 'input',
335 | name: 'sassdoc[dist]',
336 | message: ' SASSDOC | Where do you want to store SassDoc files (relative to default destination path)?',
337 | default: config.getOptionValue('sassdoc.dist') || 'docs/sass',
338 | when(answers) {
339 | return answers.override2 === true && answers.sassdoc.run === true;
340 | },
341 | }, {
342 | type: 'confirm',
343 | name: 'jsdoc[run]',
344 | message: ' JSDOC | Do you want to add documentation for the JS code (JSDoc)?',
345 | default: config.getOptionValue('jsdoc.run') || false,
346 | when(answers) {
347 | return answers.override2 === true;
348 | },
349 | }, {
350 | type: 'input',
351 | name: 'jsdoc[dist]',
352 | message: ' JSDOC | Where do you want to store JSdoc files (relative to default destination path)?',
353 | default: config.getOptionValue('jsdoc.dist') || 'docs/js',
354 | when(answers) {
355 | return answers.override2 === true && answers.jsdoc.run === true;
356 | },
357 | }, {
358 | type: 'confirm',
359 | name: 'bump[run]',
360 | message: ' SEMVER | Do you want to add semver versioning tasks (for automatic bump of any version in any file which supports semver versioning, like package.json)?',
361 | default: config.getOptionValue('bump.run') || false,
362 | when(answers) {
363 | return answers.override2 === true;
364 | },
365 | }, {
366 | type: 'confirm',
367 | name: 'yarn',
368 | message: ' YARN | Do you use Yarn as your default dependency manager?',
369 | default: config.getOptionValue('yarn') || false,
370 | when(answers) {
371 | return answers.override2 === true;
372 | },
373 | },
374 | ];
375 | return inquirer.prompt(questions);
376 | };
377 |
378 | module.exports = {
379 | basicInteraction,
380 | };
381 |
--------------------------------------------------------------------------------
/lib/log.js:
--------------------------------------------------------------------------------
1 | const chalk = require('chalk');
2 | const clearLib = require('clear');
3 | const figletLib = require('figlet');
4 |
5 | const clear = () => clearLib();
6 |
7 | const figlet = (text, error = true) => console.log(chalk.hex(error ? '#e01258' : '#12e09f')(figletLib.textSync(text, {
8 | horizontalLayout: 'default',
9 | verticalLayout: 'default',
10 | kerning: 'fitted',
11 | font: 'Graceful',
12 | })));
13 |
14 | const message = (text, error = true) => (text ? console.log(chalk.hex(error ? '#e01258' : '#12e09f')(text)) : false);
15 |
16 | module.exports = {
17 | clear,
18 | figlet,
19 | message,
20 | };
21 |
--------------------------------------------------------------------------------
/lib/starter-project.js:
--------------------------------------------------------------------------------
1 | const clipboardy = require('clipboardy');
2 |
3 | const log = require('./log');
4 | const files = require('./files');
5 | const config = require('./config');
6 |
7 | const run = (answers) => {
8 | const destPath = answers.proot;
9 | const helpers = ['copy/_.editorconfig', 'copy/_gulpfile.js/index.js', 'copy/_gulpfile.js/clean.js', 'copy/_gulpfile.js/helpers.js', 'copy/_gulpfile.js/.helpers.json', 'copy/_gulpfile.js/.watch.json'];
10 | const libs = ['del', 'gulp', 'gulp-if', 'gulp-wait', 'gulp-exit'];
11 |
12 | const answerKeys = Object.keys(answers);
13 |
14 | for (let i = 0; i < answerKeys.length; i += 1) {
15 | const answer = answers[answerKeys[i]];
16 |
17 | if (answerKeys[i].indexOf('override') === -1) {
18 | config.setOptionValue(answerKeys[i], answer);
19 | }
20 |
21 | if (answer.run) {
22 | switch (answerKeys[i]) {
23 | case 'bump':
24 | helpers.push('copy/_gulpfile.js/bump.js');
25 | helpers.push('copy/_gulpfile.js/.bump.json');
26 |
27 | libs.push('gulp-bump');
28 |
29 | break;
30 | case 'critical':
31 | helpers.push('copy/_gulpfile.js/critical.js');
32 | helpers.push('copy/_gulpfile.js/.critical.json');
33 |
34 | libs.push('gulp-penthouse');
35 |
36 | break;
37 | case 'css':
38 | helpers.push('copy/_gulpfile.js/css.js');
39 | helpers.push('copy/_gulpfile.js/.css.json');
40 |
41 | libs.push('gulp-cssimport');
42 |
43 | if (answer.sass) {
44 | libs.push('gulp-sass');
45 | }
46 |
47 | if (answer.minify) {
48 | libs.push('gulp-clean-css');
49 | }
50 |
51 | if (answer.autoprefix) {
52 | helpers.push('copy/_.browserslistrc');
53 |
54 | libs.push('gulp-autoprefixer');
55 | libs.push('gulp-rename');
56 | }
57 |
58 | if (answer.sourcemaps) {
59 | libs.push('gulp-sourcemaps');
60 | }
61 |
62 | if (answer.lint) {
63 | helpers.push('copy/_.stylelintrc');
64 |
65 | libs.push('gulp-stylelint');
66 | libs.push('stylelint');
67 | libs.push('stylelint-config-sass-guidelines');
68 | libs.push('stylelint-order');
69 | libs.push('stylelint-scss');
70 | }
71 |
72 | break;
73 | case 'favicon':
74 | helpers.push('copy/_gulpfile.js/favicon.js');
75 | helpers.push('copy/_gulpfile.js/.favicon.json');
76 | helpers.push('copy/_gulpfile.js/.favicon-data.json');
77 |
78 | libs.push('gulp-real-favicon');
79 |
80 | break;
81 | case 'fonts':
82 | helpers.push('copy/_gulpfile.js/fonts.js');
83 |
84 | break;
85 | case 'gfx':
86 | helpers.push('copy/_gulpfile.js/gfx.js');
87 | helpers.push('copy/_gulpfile.js/.gfx.json');
88 |
89 | libs.push('gulp-imagemin');
90 | libs.push('imagemin-mozjpeg');
91 | libs.push('imagemin-pngquant');
92 |
93 | break;
94 | case 'html':
95 | helpers.push('copy/_gulpfile.js/html.js');
96 | helpers.push('copy/_gulpfile.js/.html.json');
97 |
98 | libs.push('path');
99 | libs.push('gulp-rename');
100 |
101 | if (answer.pug) {
102 | libs.push('gulp-pug');
103 | }
104 |
105 | if (answer.data) {
106 | libs.push('gulp-data');
107 | }
108 |
109 | if (answer.minify) {
110 | libs.push('gulp-htmlmin');
111 | }
112 |
113 | if (answer.inline) {
114 | libs.push('gulp-inline-source');
115 | }
116 |
117 | if (answer.lint) {
118 | helpers.push('copy/_.htmllintrc');
119 |
120 | libs.push('gulp-htmllint');
121 | }
122 |
123 | break;
124 | case 'js':
125 | helpers.push('copy/_gulpfile.js/js.js');
126 | helpers.push('copy/_gulpfile.js/.js.json');
127 | helpers.push('copy/_gulpfile.js/webpack.js');
128 |
129 | libs.push('babel-loader');
130 | libs.push('@babel/core');
131 | libs.push('@babel/preset-env');
132 | libs.push('gulp-include');
133 | libs.push('webpack');
134 | libs.push('webpack-stream');
135 |
136 | if (answer.uglify) {
137 | libs.push('gulp-uglify');
138 | libs.push('gulp-rename');
139 | }
140 |
141 | if (answer.lint) {
142 | helpers.push('copy/_.eslintignore');
143 | helpers.push('copy/_.eslintrc.json');
144 | libs.push('gulp-eslint');
145 | libs.push('eslint');
146 | libs.push('eslint-config-airbnb-base');
147 | libs.push('eslint-plugin-import');
148 | libs.push('eslint-plugin-node');
149 | libs.push('babel-eslint');
150 | }
151 |
152 | if (answer.sourcemaps) {
153 | libs.push('gulp-sourcemaps');
154 | }
155 |
156 | break;
157 | case 'jsdoc':
158 | helpers.push('copy/_gulpfile.js/jsdoc.js');
159 | helpers.push('copy/_gulpfile.js/.jsdoc.json');
160 |
161 | libs.push('gulp-jsdoc3');
162 |
163 | break;
164 | case 'kss':
165 | helpers.push('copy/_gulpfile.js/kss.js');
166 | helpers.push('copy/_gulpfile.js/.kss.json');
167 |
168 | libs.push('kss');
169 |
170 | break;
171 | case 'sassdoc':
172 | helpers.push('copy/_gulpfile.js/sassdoc.js');
173 | helpers.push('copy/_gulpfile.js/.sassdoc.json');
174 |
175 | libs.push('sassdoc');
176 |
177 | break;
178 | case 'sync':
179 | helpers.push('copy/_gulpfile.js/sync.js');
180 | helpers.push('copy/_gulpfile.js/.sync.json');
181 |
182 | libs.push('browser-sync');
183 |
184 | break;
185 | default:
186 | break;
187 | }
188 | }
189 | }
190 |
191 | if (!answers.override2) {
192 | log.message('SPRO aborted!');
193 | } else {
194 | const gulpPath = `${files.slash(destPath)}gulpfile.js`;
195 |
196 | if(files.makeDirectory(gulpPath)) {
197 | for (let i = 0; i < helpers.length; i += 1) {
198 | if (answers.override2) {
199 | files.copyFile(helpers[i], destPath, helpers[i], true);
200 | }
201 | }
202 |
203 | setTimeout(() => {
204 | const saved = config.save(destPath);
205 |
206 | if (saved) {
207 | const cmd = `${answers.yarn ? 'yarn add -s -D' : 'npm i -s -D'} ${libs.join(' ')}`;
208 |
209 | clipboardy.writeSync(cmd);
210 |
211 | log.message('Config saved successfully! Use the following command to install gulp dependencies:\n', false);
212 | log.message(cmd, false);
213 | log.message('\nCommand is copied to clipboard.');
214 | log.message('\nWarning: installation could last for a few minutes.');
215 | } else {
216 | log.message('Config not saved!');
217 | }
218 | }, 500);
219 |
220 | }
221 | }
222 | };
223 |
224 | module.exports = {
225 | run,
226 | };
227 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "starter-project-cli",
3 | "preferGlobal": true,
4 | "bin": {
5 | "spro": "./index.js"
6 | },
7 | "version": "1.1.14",
8 | "description": "Starter Project CLI creates a perfect Gulp development environment for everyone within a few minutes.",
9 | "main": "index.js",
10 | "repository": {
11 | "type": "git",
12 | "url": "git+https://github.com/maliMirkec/starter-project-cli.git"
13 | },
14 | "keywords": [
15 | "Yarn",
16 | "Gulp",
17 | "Semver versioning",
18 | "Browser-sync",
19 | "Sass",
20 | "Modular Scale",
21 | "CSS Locks",
22 | "Stylelint",
23 | "JavaScript",
24 | "es6",
25 | "Babel",
26 | "ESLint",
27 | "HTML",
28 | "Pug",
29 | "Markdown",
30 | "htmllint",
31 | "Fonts",
32 | "Imagemin",
33 | "mozjpeg",
34 | "pngquant",
35 | "Favicon",
36 | "Critical CSS",
37 | "Penthouse",
38 | "Sourcemaps",
39 | "SassDoc",
40 | "JSDoc",
41 | "Styleguide",
42 | "CLI",
43 | "Command Line Interface"
44 | ],
45 | "author": "Silvestar Bistrović ",
46 | "license": "MIT",
47 | "bugs": {
48 | "url": "https://github.com/maliMirkec/starter-project-cli/issues"
49 | },
50 | "homepage": "https://starter.silvestar.codes",
51 | "dependencies": {
52 | "babel-eslint": "^10.0.3",
53 | "chalk": "^4.1.0",
54 | "clear": "^0.1.0",
55 | "clipboardy": "^2.3.0",
56 | "commander": "^6.1.0",
57 | "configstore": "^5.0.0",
58 | "eslint-config-airbnb-base": "^14.2.0",
59 | "figlet": "^1.4.0",
60 | "inquirer": "^7.3.1",
61 | "mkdirp": "^1.0.3",
62 | "ncp": "^2.0.0",
63 | "path": "^0.12.7"
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4":
6 | version "7.10.4"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
8 | integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
9 | dependencies:
10 | "@babel/highlight" "^7.10.4"
11 |
12 | "@babel/generator@^7.10.4":
13 | version "7.10.4"
14 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.4.tgz#e49eeed9fe114b62fa5b181856a43a5e32f5f243"
15 | integrity sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==
16 | dependencies:
17 | "@babel/types" "^7.10.4"
18 | jsesc "^2.5.1"
19 | lodash "^4.17.13"
20 | source-map "^0.5.0"
21 |
22 | "@babel/helper-function-name@^7.10.4":
23 | version "7.10.4"
24 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a"
25 | integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==
26 | dependencies:
27 | "@babel/helper-get-function-arity" "^7.10.4"
28 | "@babel/template" "^7.10.4"
29 | "@babel/types" "^7.10.4"
30 |
31 | "@babel/helper-get-function-arity@^7.10.4":
32 | version "7.10.4"
33 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
34 | integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
35 | dependencies:
36 | "@babel/types" "^7.10.4"
37 |
38 | "@babel/helper-split-export-declaration@^7.10.4":
39 | version "7.10.4"
40 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1"
41 | integrity sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==
42 | dependencies:
43 | "@babel/types" "^7.10.4"
44 |
45 | "@babel/helper-validator-identifier@^7.10.4":
46 | version "7.10.4"
47 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
48 | integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
49 |
50 | "@babel/highlight@^7.10.4":
51 | version "7.10.4"
52 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
53 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
54 | dependencies:
55 | "@babel/helper-validator-identifier" "^7.10.4"
56 | chalk "^2.0.0"
57 | js-tokens "^4.0.0"
58 |
59 | "@babel/parser@^7.10.4", "@babel/parser@^7.7.0":
60 | version "7.10.4"
61 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64"
62 | integrity sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==
63 |
64 | "@babel/template@^7.10.4":
65 | version "7.10.4"
66 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
67 | integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==
68 | dependencies:
69 | "@babel/code-frame" "^7.10.4"
70 | "@babel/parser" "^7.10.4"
71 | "@babel/types" "^7.10.4"
72 |
73 | "@babel/traverse@^7.7.0":
74 | version "7.10.4"
75 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818"
76 | integrity sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==
77 | dependencies:
78 | "@babel/code-frame" "^7.10.4"
79 | "@babel/generator" "^7.10.4"
80 | "@babel/helper-function-name" "^7.10.4"
81 | "@babel/helper-split-export-declaration" "^7.10.4"
82 | "@babel/parser" "^7.10.4"
83 | "@babel/types" "^7.10.4"
84 | debug "^4.1.0"
85 | globals "^11.1.0"
86 | lodash "^4.17.13"
87 |
88 | "@babel/types@^7.10.4", "@babel/types@^7.7.0":
89 | version "7.10.4"
90 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee"
91 | integrity sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==
92 | dependencies:
93 | "@babel/helper-validator-identifier" "^7.10.4"
94 | lodash "^4.17.13"
95 | to-fast-properties "^2.0.0"
96 |
97 | "@types/color-name@^1.1.1":
98 | version "1.1.1"
99 | resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
100 | integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
101 |
102 | ansi-escapes@^4.2.1:
103 | version "4.3.1"
104 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
105 | integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
106 | dependencies:
107 | type-fest "^0.11.0"
108 |
109 | ansi-regex@^5.0.0:
110 | version "5.0.0"
111 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
112 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
113 |
114 | ansi-styles@^3.2.1:
115 | version "3.2.1"
116 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
117 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
118 | dependencies:
119 | color-convert "^1.9.0"
120 |
121 | ansi-styles@^4.1.0:
122 | version "4.2.1"
123 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
124 | integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
125 | dependencies:
126 | "@types/color-name" "^1.1.1"
127 | color-convert "^2.0.1"
128 |
129 | arch@^2.1.1:
130 | version "2.1.2"
131 | resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf"
132 | integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==
133 |
134 | babel-eslint@^10.0.3:
135 | version "10.1.0"
136 | resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
137 | integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
138 | dependencies:
139 | "@babel/code-frame" "^7.0.0"
140 | "@babel/parser" "^7.7.0"
141 | "@babel/traverse" "^7.7.0"
142 | "@babel/types" "^7.7.0"
143 | eslint-visitor-keys "^1.0.0"
144 | resolve "^1.12.0"
145 |
146 | call-bind@^1.0.0:
147 | version "1.0.0"
148 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce"
149 | integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==
150 | dependencies:
151 | function-bind "^1.1.1"
152 | get-intrinsic "^1.0.0"
153 |
154 | chalk@^2.0.0:
155 | version "2.4.2"
156 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
157 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
158 | dependencies:
159 | ansi-styles "^3.2.1"
160 | escape-string-regexp "^1.0.5"
161 | supports-color "^5.3.0"
162 |
163 | chalk@^4.1.0:
164 | version "4.1.0"
165 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
166 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
167 | dependencies:
168 | ansi-styles "^4.1.0"
169 | supports-color "^7.1.0"
170 |
171 | chardet@^0.7.0:
172 | version "0.7.0"
173 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
174 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
175 |
176 | clear@^0.1.0:
177 | version "0.1.0"
178 | resolved "https://registry.yarnpkg.com/clear/-/clear-0.1.0.tgz#b81b1e03437a716984fd7ac97c87d73bdfe7048a"
179 | integrity sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw==
180 |
181 | cli-cursor@^3.1.0:
182 | version "3.1.0"
183 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
184 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
185 | dependencies:
186 | restore-cursor "^3.1.0"
187 |
188 | cli-width@^3.0.0:
189 | version "3.0.0"
190 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
191 | integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
192 |
193 | clipboardy@^2.3.0:
194 | version "2.3.0"
195 | resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290"
196 | integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==
197 | dependencies:
198 | arch "^2.1.1"
199 | execa "^1.0.0"
200 | is-wsl "^2.1.1"
201 |
202 | color-convert@^1.9.0:
203 | version "1.9.3"
204 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
205 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
206 | dependencies:
207 | color-name "1.1.3"
208 |
209 | color-convert@^2.0.1:
210 | version "2.0.1"
211 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
212 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
213 | dependencies:
214 | color-name "~1.1.4"
215 |
216 | color-name@1.1.3:
217 | version "1.1.3"
218 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
219 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
220 |
221 | color-name@~1.1.4:
222 | version "1.1.4"
223 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
224 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
225 |
226 | commander@^6.1.0:
227 | version "6.2.0"
228 | resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75"
229 | integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==
230 |
231 | configstore@^5.0.0:
232 | version "5.0.1"
233 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"
234 | integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==
235 | dependencies:
236 | dot-prop "^5.2.0"
237 | graceful-fs "^4.1.2"
238 | make-dir "^3.0.0"
239 | unique-string "^2.0.0"
240 | write-file-atomic "^3.0.0"
241 | xdg-basedir "^4.0.0"
242 |
243 | confusing-browser-globals@^1.0.10:
244 | version "1.0.10"
245 | resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59"
246 | integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==
247 |
248 | cross-spawn@^6.0.0:
249 | version "6.0.5"
250 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
251 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
252 | dependencies:
253 | nice-try "^1.0.4"
254 | path-key "^2.0.1"
255 | semver "^5.5.0"
256 | shebang-command "^1.2.0"
257 | which "^1.2.9"
258 |
259 | crypto-random-string@^2.0.0:
260 | version "2.0.0"
261 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
262 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
263 |
264 | debug@^4.1.0:
265 | version "4.1.1"
266 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
267 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
268 | dependencies:
269 | ms "^2.1.1"
270 |
271 | define-properties@^1.1.3:
272 | version "1.1.3"
273 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
274 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
275 | dependencies:
276 | object-keys "^1.0.12"
277 |
278 | dot-prop@^5.2.0:
279 | version "5.2.0"
280 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb"
281 | integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==
282 | dependencies:
283 | is-obj "^2.0.0"
284 |
285 | emoji-regex@^8.0.0:
286 | version "8.0.0"
287 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
288 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
289 |
290 | end-of-stream@^1.1.0:
291 | version "1.4.4"
292 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
293 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
294 | dependencies:
295 | once "^1.4.0"
296 |
297 | es-abstract@^1.17.5:
298 | version "1.17.6"
299 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a"
300 | integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==
301 | dependencies:
302 | es-to-primitive "^1.2.1"
303 | function-bind "^1.1.1"
304 | has "^1.0.3"
305 | has-symbols "^1.0.1"
306 | is-callable "^1.2.0"
307 | is-regex "^1.1.0"
308 | object-inspect "^1.7.0"
309 | object-keys "^1.1.1"
310 | object.assign "^4.1.0"
311 | string.prototype.trimend "^1.0.1"
312 | string.prototype.trimstart "^1.0.1"
313 |
314 | es-to-primitive@^1.2.1:
315 | version "1.2.1"
316 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
317 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
318 | dependencies:
319 | is-callable "^1.1.4"
320 | is-date-object "^1.0.1"
321 | is-symbol "^1.0.2"
322 |
323 | escape-string-regexp@^1.0.5:
324 | version "1.0.5"
325 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
326 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
327 |
328 | eslint-config-airbnb-base@^14.2.0:
329 | version "14.2.1"
330 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e"
331 | integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==
332 | dependencies:
333 | confusing-browser-globals "^1.0.10"
334 | object.assign "^4.1.2"
335 | object.entries "^1.1.2"
336 |
337 | eslint-visitor-keys@^1.0.0:
338 | version "1.3.0"
339 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
340 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
341 |
342 | execa@^1.0.0:
343 | version "1.0.0"
344 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
345 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
346 | dependencies:
347 | cross-spawn "^6.0.0"
348 | get-stream "^4.0.0"
349 | is-stream "^1.1.0"
350 | npm-run-path "^2.0.0"
351 | p-finally "^1.0.0"
352 | signal-exit "^3.0.0"
353 | strip-eof "^1.0.0"
354 |
355 | external-editor@^3.0.3:
356 | version "3.1.0"
357 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
358 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
359 | dependencies:
360 | chardet "^0.7.0"
361 | iconv-lite "^0.4.24"
362 | tmp "^0.0.33"
363 |
364 | figlet@^1.4.0:
365 | version "1.5.0"
366 | resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.0.tgz#2db4d00a584e5155a96080632db919213c3e003c"
367 | integrity sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==
368 |
369 | figures@^3.0.0:
370 | version "3.2.0"
371 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
372 | integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
373 | dependencies:
374 | escape-string-regexp "^1.0.5"
375 |
376 | function-bind@^1.1.1:
377 | version "1.1.1"
378 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
379 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
380 |
381 | get-intrinsic@^1.0.0:
382 | version "1.0.1"
383 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be"
384 | integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==
385 | dependencies:
386 | function-bind "^1.1.1"
387 | has "^1.0.3"
388 | has-symbols "^1.0.1"
389 |
390 | get-stream@^4.0.0:
391 | version "4.1.0"
392 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
393 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
394 | dependencies:
395 | pump "^3.0.0"
396 |
397 | globals@^11.1.0:
398 | version "11.12.0"
399 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
400 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
401 |
402 | graceful-fs@^4.1.2:
403 | version "4.2.4"
404 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
405 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
406 |
407 | has-flag@^3.0.0:
408 | version "3.0.0"
409 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
410 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
411 |
412 | has-flag@^4.0.0:
413 | version "4.0.0"
414 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
415 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
416 |
417 | has-symbols@^1.0.1:
418 | version "1.0.1"
419 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
420 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
421 |
422 | has@^1.0.3:
423 | version "1.0.3"
424 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
425 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
426 | dependencies:
427 | function-bind "^1.1.1"
428 |
429 | iconv-lite@^0.4.24:
430 | version "0.4.24"
431 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
432 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
433 | dependencies:
434 | safer-buffer ">= 2.1.2 < 3"
435 |
436 | imurmurhash@^0.1.4:
437 | version "0.1.4"
438 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
439 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
440 |
441 | inherits@2.0.3:
442 | version "2.0.3"
443 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
444 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
445 |
446 | inquirer@^7.3.1:
447 | version "7.3.3"
448 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
449 | integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==
450 | dependencies:
451 | ansi-escapes "^4.2.1"
452 | chalk "^4.1.0"
453 | cli-cursor "^3.1.0"
454 | cli-width "^3.0.0"
455 | external-editor "^3.0.3"
456 | figures "^3.0.0"
457 | lodash "^4.17.19"
458 | mute-stream "0.0.8"
459 | run-async "^2.4.0"
460 | rxjs "^6.6.0"
461 | string-width "^4.1.0"
462 | strip-ansi "^6.0.0"
463 | through "^2.3.6"
464 |
465 | is-callable@^1.1.4, is-callable@^1.2.0:
466 | version "1.2.0"
467 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
468 | integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
469 |
470 | is-date-object@^1.0.1:
471 | version "1.0.2"
472 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
473 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
474 |
475 | is-docker@^2.0.0:
476 | version "2.0.0"
477 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b"
478 | integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==
479 |
480 | is-fullwidth-code-point@^3.0.0:
481 | version "3.0.0"
482 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
483 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
484 |
485 | is-obj@^2.0.0:
486 | version "2.0.0"
487 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
488 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
489 |
490 | is-regex@^1.1.0:
491 | version "1.1.0"
492 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff"
493 | integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==
494 | dependencies:
495 | has-symbols "^1.0.1"
496 |
497 | is-stream@^1.1.0:
498 | version "1.1.0"
499 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
500 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
501 |
502 | is-symbol@^1.0.2:
503 | version "1.0.3"
504 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
505 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
506 | dependencies:
507 | has-symbols "^1.0.1"
508 |
509 | is-typedarray@^1.0.0:
510 | version "1.0.0"
511 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
512 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
513 |
514 | is-wsl@^2.1.1:
515 | version "2.2.0"
516 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
517 | integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
518 | dependencies:
519 | is-docker "^2.0.0"
520 |
521 | isexe@^2.0.0:
522 | version "2.0.0"
523 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
524 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
525 |
526 | js-tokens@^4.0.0:
527 | version "4.0.0"
528 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
529 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
530 |
531 | jsesc@^2.5.1:
532 | version "2.5.2"
533 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
534 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
535 |
536 | lodash@^4.17.13, lodash@^4.17.19:
537 | version "4.17.19"
538 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
539 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
540 |
541 | make-dir@^3.0.0:
542 | version "3.1.0"
543 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
544 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
545 | dependencies:
546 | semver "^6.0.0"
547 |
548 | mimic-fn@^2.1.0:
549 | version "2.1.0"
550 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
551 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
552 |
553 | mkdirp@^1.0.3:
554 | version "1.0.4"
555 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
556 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
557 |
558 | ms@^2.1.1:
559 | version "2.1.2"
560 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
561 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
562 |
563 | mute-stream@0.0.8:
564 | version "0.0.8"
565 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
566 | integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
567 |
568 | ncp@^2.0.0:
569 | version "2.0.0"
570 | resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
571 | integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=
572 |
573 | nice-try@^1.0.4:
574 | version "1.0.5"
575 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
576 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
577 |
578 | npm-run-path@^2.0.0:
579 | version "2.0.2"
580 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
581 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
582 | dependencies:
583 | path-key "^2.0.0"
584 |
585 | object-inspect@^1.7.0:
586 | version "1.8.0"
587 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
588 | integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
589 |
590 | object-keys@^1.0.12, object-keys@^1.1.1:
591 | version "1.1.1"
592 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
593 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
594 |
595 | object.assign@^4.1.0, object.assign@^4.1.2:
596 | version "4.1.2"
597 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
598 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
599 | dependencies:
600 | call-bind "^1.0.0"
601 | define-properties "^1.1.3"
602 | has-symbols "^1.0.1"
603 | object-keys "^1.1.1"
604 |
605 | object.entries@^1.1.2:
606 | version "1.1.2"
607 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add"
608 | integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==
609 | dependencies:
610 | define-properties "^1.1.3"
611 | es-abstract "^1.17.5"
612 | has "^1.0.3"
613 |
614 | once@^1.3.1, once@^1.4.0:
615 | version "1.4.0"
616 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
617 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
618 | dependencies:
619 | wrappy "1"
620 |
621 | onetime@^5.1.0:
622 | version "5.1.0"
623 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
624 | integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
625 | dependencies:
626 | mimic-fn "^2.1.0"
627 |
628 | os-tmpdir@~1.0.2:
629 | version "1.0.2"
630 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
631 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
632 |
633 | p-finally@^1.0.0:
634 | version "1.0.0"
635 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
636 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
637 |
638 | path-key@^2.0.0, path-key@^2.0.1:
639 | version "2.0.1"
640 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
641 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
642 |
643 | path-parse@^1.0.6:
644 | version "1.0.6"
645 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
646 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
647 |
648 | path@^0.12.7:
649 | version "0.12.7"
650 | resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f"
651 | integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=
652 | dependencies:
653 | process "^0.11.1"
654 | util "^0.10.3"
655 |
656 | process@^0.11.1:
657 | version "0.11.10"
658 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
659 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
660 |
661 | pump@^3.0.0:
662 | version "3.0.0"
663 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
664 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
665 | dependencies:
666 | end-of-stream "^1.1.0"
667 | once "^1.3.1"
668 |
669 | resolve@^1.12.0:
670 | version "1.17.0"
671 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
672 | integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
673 | dependencies:
674 | path-parse "^1.0.6"
675 |
676 | restore-cursor@^3.1.0:
677 | version "3.1.0"
678 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
679 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
680 | dependencies:
681 | onetime "^5.1.0"
682 | signal-exit "^3.0.2"
683 |
684 | run-async@^2.4.0:
685 | version "2.4.1"
686 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
687 | integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
688 |
689 | rxjs@^6.6.0:
690 | version "6.6.0"
691 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84"
692 | integrity sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==
693 | dependencies:
694 | tslib "^1.9.0"
695 |
696 | "safer-buffer@>= 2.1.2 < 3":
697 | version "2.1.2"
698 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
699 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
700 |
701 | semver@^5.5.0:
702 | version "5.7.1"
703 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
704 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
705 |
706 | semver@^6.0.0:
707 | version "6.3.0"
708 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
709 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
710 |
711 | shebang-command@^1.2.0:
712 | version "1.2.0"
713 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
714 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
715 | dependencies:
716 | shebang-regex "^1.0.0"
717 |
718 | shebang-regex@^1.0.0:
719 | version "1.0.0"
720 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
721 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
722 |
723 | signal-exit@^3.0.0, signal-exit@^3.0.2:
724 | version "3.0.3"
725 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
726 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
727 |
728 | source-map@^0.5.0:
729 | version "0.5.7"
730 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
731 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
732 |
733 | string-width@^4.1.0:
734 | version "4.2.0"
735 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
736 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
737 | dependencies:
738 | emoji-regex "^8.0.0"
739 | is-fullwidth-code-point "^3.0.0"
740 | strip-ansi "^6.0.0"
741 |
742 | string.prototype.trimend@^1.0.1:
743 | version "1.0.1"
744 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
745 | integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
746 | dependencies:
747 | define-properties "^1.1.3"
748 | es-abstract "^1.17.5"
749 |
750 | string.prototype.trimstart@^1.0.1:
751 | version "1.0.1"
752 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
753 | integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
754 | dependencies:
755 | define-properties "^1.1.3"
756 | es-abstract "^1.17.5"
757 |
758 | strip-ansi@^6.0.0:
759 | version "6.0.0"
760 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
761 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
762 | dependencies:
763 | ansi-regex "^5.0.0"
764 |
765 | strip-eof@^1.0.0:
766 | version "1.0.0"
767 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
768 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
769 |
770 | supports-color@^5.3.0:
771 | version "5.5.0"
772 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
773 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
774 | dependencies:
775 | has-flag "^3.0.0"
776 |
777 | supports-color@^7.1.0:
778 | version "7.1.0"
779 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
780 | integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
781 | dependencies:
782 | has-flag "^4.0.0"
783 |
784 | through@^2.3.6:
785 | version "2.3.8"
786 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
787 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
788 |
789 | tmp@^0.0.33:
790 | version "0.0.33"
791 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
792 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
793 | dependencies:
794 | os-tmpdir "~1.0.2"
795 |
796 | to-fast-properties@^2.0.0:
797 | version "2.0.0"
798 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
799 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
800 |
801 | tslib@^1.9.0:
802 | version "1.13.0"
803 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
804 | integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
805 |
806 | type-fest@^0.11.0:
807 | version "0.11.0"
808 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
809 | integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
810 |
811 | typedarray-to-buffer@^3.1.5:
812 | version "3.1.5"
813 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
814 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
815 | dependencies:
816 | is-typedarray "^1.0.0"
817 |
818 | unique-string@^2.0.0:
819 | version "2.0.0"
820 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
821 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
822 | dependencies:
823 | crypto-random-string "^2.0.0"
824 |
825 | util@^0.10.3:
826 | version "0.10.4"
827 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901"
828 | integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==
829 | dependencies:
830 | inherits "2.0.3"
831 |
832 | which@^1.2.9:
833 | version "1.3.1"
834 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
835 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
836 | dependencies:
837 | isexe "^2.0.0"
838 |
839 | wrappy@1:
840 | version "1.0.2"
841 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
842 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
843 |
844 | write-file-atomic@^3.0.0:
845 | version "3.0.3"
846 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
847 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
848 | dependencies:
849 | imurmurhash "^0.1.4"
850 | is-typedarray "^1.0.0"
851 | signal-exit "^3.0.2"
852 | typedarray-to-buffer "^3.1.5"
853 |
854 | xdg-basedir@^4.0.0:
855 | version "4.0.0"
856 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
857 | integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
858 |
--------------------------------------------------------------------------------