├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── Gruntfile.js
├── LICENSE
├── README.md
├── grunt
├── aliases.yaml
├── gh-pages.yaml
├── ghpage.yaml
├── jshint.yaml
├── mochacli.yaml
├── notify.yaml
└── watch.yaml
├── index.js
├── lib
├── gruntconfig.js
├── readconfigdir.js
└── readfile.js
├── package.json
├── test
├── config
│ ├── aliases.yaml
│ ├── another-override
│ │ └── jsobj.js
│ ├── csonfile.cson
│ ├── htmlfile.html
│ ├── jsfun.js
│ ├── jsobj.js
│ ├── jsonfile.json
│ ├── override
│ │ └── jsobj.js
│ ├── yamlfile.yaml
│ └── ymlfile.yml
├── fixtures
│ ├── multiconfig
│ │ ├── jsfun-tasks.js
│ │ ├── test-tasks.yaml
│ │ └── watch.yaml
│ ├── output.js
│ └── output
│ │ └── multiconfig.js
├── gruntconfig.test.js
├── index.test.js
├── readconfigdir.test.js
└── readfile.test.js
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | *.iml
3 | node_modules
4 | site
5 | .DS_Store
6 | .grunt
7 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "node"
4 | - "lts/*"
5 | - "16"
6 | - "15"
7 | - "14"
8 | - "13"
9 | - "12"
10 | - "11"
11 | - "10"
12 | before_install: npm install -g grunt-cli
13 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | 5.0.0 / not released yet
2 | ==================
3 | * Dropped support of node lower than 10
4 | * Updated dependencies:
5 | * grunt-contrib-jshint from 2.1.0 to 3.0.0
6 |
7 | 4.0.0 / 2021-07-04
8 | ==================
9 | * Dropped support of CoffeeScript **(breaking change)**
10 | * Removed package-lock.json
11 | * Updated dependencies:
12 | * js-yaml from 3.13.1 to 4.1.0
13 | * cson from 5.1.0 to 7.20.0
14 | * glob 7.1.4 to 7.1.7
15 | * Added dependencies:
16 | * js-yaml-js-types version 1.0.0
17 | * Updated devDependencies:
18 | * grunt from 1.0.4 to 1.4.1
19 | * proxyquire from 2.1.1 to 2.1.3
20 | * grunt-gh-pages from 3.1.0 to 4.0.0
21 | * sinon from 7.3.2 to 11.1.1
22 | * Added devDependencies:
23 | * grunt-mocha-cli 7.0.0
24 | * Removed devDependencies:
25 | * grunt-simple-mocha
26 |
27 | 3.0.2 / 2021-07-04
28 | ==================
29 | * Updated dependencies:
30 | * lodash from 4.17.15 to 4.7.21
31 |
32 | 3.0.1 / 2019-09-10
33 | ==================
34 | * Allowed relative path for JS loading
35 |
36 | 3.0.0 / 2019-08-01
37 | ==================
38 |
39 | * Dropped support of node lower than 8
40 | * Added yarn.lock
41 | * Updated dependencies:
42 | * load-grunt-tasks from 4.0.0 to 5.1.0
43 | * lodash from 4.17.11 to 4.17.15
44 | * Updated devDependencies
45 |
46 | 2.0.1 / 2019-07-25
47 | ==================
48 |
49 | * Updated dependencies:
50 | * lodash from 4.7.11 to 4.7.15
51 | * Updated devDependencies
52 |
53 | 2.0.0 / 2019-06-20
54 | ==================
55 |
56 | * Dropped support of node lower than 6
57 | * Added package-lock.json
58 | * Updated dependencies:
59 | * js-yaml from ~3.12.0 to 3.13.1
60 | * cson from ~4.0.0 to 5.1.0
61 | * load-grunt-tasks from ~3.5.2 to 4.0.0
62 | * glob from ~7.1.3 to 7.1.4
63 | * Switched to strict dependencies versions
64 | * Updated devDependencies
65 |
66 | 1.0.2 / 2019-05-03
67 | ==================
68 |
69 | * Updated dependencies:
70 | * glob from ~7.1.1 to ~7.1.3
71 | * js-yaml from ~3.7.0 to ~3.12.0
72 |
73 | 1.0.1 / 2018-12-09
74 | ==================
75 |
76 | * Added ability to customize package.json file location
77 |
78 | 1.0.0 / 2018-12-09
79 | ==================
80 |
81 | * Dropped support of node lower than 4
82 | * Updated dependencies:
83 | * cson from ~3.0.2 to ~4.0.0
84 | * glob from ~5.0.15 to ~7.1.1
85 | * load-grunt-tasks from ~3.3.0 to ~3.5.2
86 | * js-yaml from ~3.4.3 to ~3.7.0
87 | * lodash from ~3.10.1 to ~4.17.11
88 | * Updated devDependencies:
89 | * grunt-contrib-jshint from ~0.11.3 to ~1.1.0
90 | * grunt-contrib-watch from ~0.6.1 to ~1.1.0
91 | * grunt from ~0.4.5 to ~1.0.1
92 | * grunt-gh-pages from ~1.0.0 to ~3.1.0
93 |
94 | 0.19.2 / 2016-04-27
95 | ==================
96 |
97 | * Updated dependencies:
98 | * jit-grunt from ~0.9.1 to 0.10.0
99 |
100 | 0.19.1 / 2015-12-01
101 | ==================
102 |
103 | * Fixed issue with array in configPath
104 | * Ignored unneeded files in npm package
105 |
106 | 0.19.0 / 2015-11-01
107 | ==================
108 |
109 | * Removed unused async dependency
110 | * Updated dependencies:
111 | * cson from ~3.0.1 to ~3.0.2
112 | * glob from ~3.2.6 to ~5.0.15
113 | * js-yaml from ~3.0.1 to ~3.4.3
114 | * lodash from ~2.4.1 to ~3.10.1
115 | * Updated devDependencies:
116 | * grunt-contrib-jshint from ~0.8.0 to ~0.11.3
117 | * grunt-contrib-watch from ~0.5.3 to ~0.6.1
118 | * grunt from ~0.4.2 to ~0.4.5
119 | * grunt-notify from ~0.2.13 to ~0.4.1
120 | * grunt-gh-pages from ~0.9.0 to ~1.0.0
121 | * sinon from ^1.9.0 to ~1.17.2
122 | * proxyquire from ^0.5.3 to ~1.7.3
123 | * Renamed History.md to CHANGELOG.md
124 |
125 |
126 | 0.18.0 / 2015-10-31
127 | ==================
128 |
129 | * Updated load-grunt-tasks dependency from ~0.3.0 to ~3.3.0
130 |
131 |
132 | 0.17.2 / 2015-07-02
133 | ==================
134 |
135 | * Removed unnecessary loop to find fullpaths (jigardafda)
136 | * Updated cson and jit-grunt dependencies
137 |
138 |
139 | 0.17.1 / 2015-04-19
140 | ==================
141 |
142 | * Revert "load js-yaml full schema support to allow regexp"
143 | * Use lodash instead of lodash-node to speed up execution
144 | * Speed up build time when there are no yaml files
145 |
146 |
147 | 0.17.0 / 2015-04-12
148 | ==================
149 |
150 | * Adds a small example for adding a description to the yaml
151 | * Aliases to functions when the alias is an object with a description
152 | * Updating Readme
153 | * Configurable function for config merge
154 | * Fixed lookup for CSON files in directory
155 | * Updated readme regarding CSON files support
156 | * Support CSON config files
157 | * load js-yaml full schema support to allow regexp
158 | * Update README.md: add alias task description
159 |
160 |
161 | 0.16.0 / 2014-10-29
162 | ==================
163 |
164 | * added preMerge hook. #94
165 |
166 | 0.15.0 / 2014-10-29
167 | ==================
168 |
169 | * added aliases to config-debug output. #93
170 | * moved config-debug output to after postProcess. #93
171 |
172 | 0.14.0 / 2014-10-19
173 | ==================
174 |
175 | * Update README.md (tawez)
176 | * configPath accepts array of strings (tawez)
177 | * overridePath accepts array of strings (tawez)
178 |
179 | 0.13.2 / 2014-10-02
180 | ==================
181 |
182 | * fixed issue with passing options to jit-grunt
183 |
184 | 0.13.1 / 2014-08-20
185 | ==================
186 |
187 | * Fix for aliases to functions
188 |
189 | 0.13.0 / 2014-08-06
190 | ==================
191 |
192 | * ability to have multiple targets in config grouping
193 | * added --config-debug support
194 |
195 | 0.12.0 / 2014-07-07
196 | ==================
197 |
198 | * support postProcess option to change config before running through grunt
199 |
200 | 0.11.0 / 2014-07-06
201 | ==================
202 |
203 | * Allow descriptions inside aliases (Belelros)
204 |
205 | 0.10.0 / 2014-06-17
206 | ==================
207 |
208 | * fixed support for json config files (SolomoN-ua)
209 | * Allow just-in-time loading (SolomoN-ua)
210 |
211 | 0.9.2 / 2014-05-12
212 | ==================
213 |
214 | * Allow group config files to return a function.
215 | * Livescript support
216 |
217 | 0.9.1 / 2014-05-04
218 | ==================
219 |
220 | * fix for mix and matching config grouping and task based config
221 | * fixed readme
222 |
223 | 0.9.0 / 2014-05-04
224 | ==================
225 |
226 | * added support for config groupings
227 | * fixed ghpage config
228 |
229 | 0.8.0 / 2014-04-16
230 | ==================
231 |
232 | * re-styling readfile.js a bit.
233 | * Merge pull request #35 from defaude/master
234 | * Fixing stupid typo...
235 | * Using js-yaml's safeLoad for YAML files instead of a simple require. Closes #28
236 |
237 | 0.8.0beta2 / 2014-03-20
238 | ==================
239 |
240 | * fixed bug where package.json wasn't getting added to config object. fixes #46
241 |
242 | 0.8.0beta1 / 2014-03-14
243 | ==================
244 |
245 | * updated readme
246 | * fixed exposing config/data to main grunt config
247 | * refactored everything to be sync
248 | * removed legacy files
249 | * finished up index.js functionality and tests
250 | * more tests passing on index.js
251 | * initial work on main lib
252 | * feat(gruntconfig): set up method with tests
253 | * refactor(tests): moved fixtures into config folder, added output fixture
254 | * refactor(readconfigdir): use extname and basename instead of regex
255 | * feat(readConfigDir): added new method
256 | * refactor(load-config.test): skip tests for now
257 | * feat(readfile): check if file exists
258 | * readfile with tests
259 | * switched build files to use yaml
260 |
261 | 0.7.2 / 2014-03-12
262 | ==================
263 |
264 | * Using js-yaml's safeLoad for YAML files instead of a simple require. Closes #28
265 |
266 | 0.7.1 / 2014-02-14
267 | ==================
268 |
269 | * Use lodash-node instead of `grunt.util._` (shinnn)
270 | * Update dependencies and devDependencies (shinnn)
271 | * added the .yml extension as an option for loading yaml files (travi)
272 |
273 | 0.7.0 / 2013-11-11
274 | ==================
275 |
276 | * added support for aliases file to easily register task aliases. fixes #5
277 |
278 | 0.6.1 / 2013-10-31
279 | ==================
280 |
281 | * use merge so empty objects don't kill settings [dylang]
282 | * updated readme to add coffee support
283 | * updated readme
284 |
285 | 0.6.0 / 2013-10-27
286 | ==================
287 |
288 | * bumped load-grunt-tasks dep. Fixes #10
289 | * configPath is now absolute. Fixes #11
290 | * Feature: enabled coffee-script support for config files
291 | * updated readme
292 |
293 | 0.5.0 / 2013-10-02
294 | ==================
295 |
296 | * Adding a test for functions that return options [cbas]
297 | * Pass grunt reference to function options [cbas]
298 |
299 | 0.4.1 / 2013-09-19
300 | ==================
301 |
302 | * changed load-grunt-tasks to loadGruntTasks #7
303 |
304 | 0.4.0 / 2013-09-19
305 | ==================
306 |
307 | * updated readme for load-grunt-tasks option passing. #7
308 | * ability to pass options to load-grunt-tasks. fixes #7
309 |
310 | 0.3.1 / 2013-09-17
311 | ==================
312 |
313 | * removed env option so it doesn't conflict with grunt-env. fixes #6
314 |
315 | 0.3.0 / 2013-09-16
316 | ==================
317 |
318 | * renamed to load-grunt-config
319 |
320 | 0.2.1 / 2013-09-15
321 | ==================
322 |
323 | * fixed missing dep
324 |
325 | 0.2.0 / 2013-09-15
326 | ==================
327 |
328 | * Added License. fixes #2
329 | * Added support for yaml files. fixes #3
330 | * typo in readme. fixes #1
331 |
332 | 0.1.1 / 2013-09-13
333 | ==================
334 |
335 | * added { config: {} } support
336 |
337 | 0.1.0 / 2013-09-13
338 | ==================
339 |
340 | * working commit
341 | * Initial commit
342 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | module.exports = function(grunt) {
2 |
3 | require('./index')(grunt, {
4 | config: {
5 | data: {
6 | doc: 'README.md',
7 | design: 'clean',
8 | ghPageData: {
9 | pageTitle: 'load-grunt-config - Modularize your Gruntfile',
10 | analytics: 'UA-24017782-2',
11 | github: 'github.com/firstandthird/load-grunt-config',
12 | builtBy: 'First + Third',
13 | twitterShare: 'load-grunt-config - Modularize your Gruntfile'
14 | }
15 | }
16 | }
17 | });
18 |
19 | };
20 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | (The MIT License)
2 |
3 | Copyright (c) 2013 First + Third
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining
6 | a copy of this software and associated documentation files (the
7 | 'Software'), to deal in the Software without restriction, including
8 | without limitation the rights to use, copy, modify, merge, publish,
9 | distribute, sublicense, and/or sell copies of the Software, and to
10 | permit persons to whom the Software is furnished to do so, subject to
11 | the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be
14 | included in all copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # load-grunt-config [](https://travis-ci.org/firstandthird/load-grunt-config)
2 |
3 | load-grunt-config is a Grunt library that allows you to break up your Gruntfile config by task. For most small projects a single Gruntfile.js is perfect. But as a project grows, the Gruntfile.js can quickly become unmanagable; this is where load-grunt-config comes in handy. It was heavily inspired by [Thomas Boyt's "More Maintainable Gruntfiles"](http://thomasboyt.github.io/2013/09/01/maintainable-grunt.html).
4 |
5 | ## Features
6 |
7 | - Each task has its own config file. Example: jshint.js, mocha.js, etc.
8 | - Auto load all grunt plugins. Uses [load-grunt-tasks](https://github.com/sindresorhus/load-grunt-tasks). (Optionally it can use [jit-grunt](https://github.com/shootaroo/jit-grunt))
9 | - Auto expose package.json (`<%= package.name %>`).
10 | - Support for YAML files.
11 | - Support for CSON files.
12 | - Support for returning a function.
13 | - [Easily register task aliases](#aliases) with `aliases.(js|json|yaml)`.
14 | - [Config overrides](#custom-config)
15 | - [Config grouping](#config-grouping)
16 |
17 | ## Installation
18 |
19 | ```bash
20 | npm install -D load-grunt-config
21 | ```
22 |
23 | ## Example
24 |
25 | Basic Gruntfile.js
26 | ```javascript
27 | module.exports = function(grunt) {
28 |
29 | require('load-grunt-config')(grunt);
30 |
31 | };
32 | ```
33 |
34 | Gruntfile.js with options
35 | ```javascript
36 | module.exports = function(grunt) {
37 | var path = require('path');
38 |
39 | require('load-grunt-config')(grunt, {
40 | // path to task.js files, defaults to grunt dir
41 | configPath: path.join(process.cwd(), 'grunt'),
42 |
43 | // path to project package.json file
44 | packageJsonPath: path.join(process.cwd(), 'package.json'),
45 |
46 | // auto grunt.initConfig
47 | init: true,
48 |
49 | // data passed into config. Can use with <%= test %>
50 | data: {
51 | test: false
52 | },
53 |
54 | // use different function to merge config files
55 | mergeFunction: require('recursive-merge'),
56 |
57 | // can optionally pass options to load-grunt-tasks.
58 | // If you set to false, it will disable auto loading tasks.
59 | loadGruntTasks: {
60 |
61 | pattern: 'grunt-*',
62 | config: require('./package.json'),
63 | scope: 'devDependencies'
64 | },
65 |
66 | //can post process config object before it gets passed to grunt
67 | postProcess: function(config) {},
68 |
69 | //allows to manipulate the config object before it gets merged with the data object
70 | preMerge: function(config, data) {}
71 | });
72 |
73 | };
74 | ```
75 |
76 | Optionally you can use [jit-grunt](https://github.com/shootaroo/jit-grunt) instead of [load-grunt-tasks](https://github.com/sindresorhus/load-grunt-tasks)
77 | ```javascript
78 | module.exports = function(grunt) {
79 |
80 | require('load-grunt-config')(grunt, {
81 | // ...
82 | jitGrunt: {
83 | // here you can pass options to jit-grunt (or just jitGrunt: true)
84 | staticMappings: {
85 | // here you can specify static mappings, for example:
86 | sprite: 'grunt-spritesmith',
87 | hello: 'custom/say-hello.js'
88 | }
89 | }
90 | });
91 |
92 | };
93 | ```
94 |
95 | Note: if you have problems with auto loading of some tasks please check [jit-grunt#static-mappings](https://github.com/shootaroo/jit-grunt#static-mappings)
96 |
97 | ### Grunt tasks files
98 |
99 | Here's what the files in your `grunt/` folder could look like. You can use either .js, .json, .yaml, or .cson - whatever you prefer and you can mix and match as you see fit.
100 |
101 | Example js file returning an object - `grunt/watch.js`
102 | ```javascript
103 | module.exports = {
104 | all: {
105 | files: [
106 | '<%= jshint.all %>',
107 | 'grunt/*.yaml'
108 | ],
109 | tasks: [
110 | 'default'
111 | ]
112 | }
113 | };
114 | ```
115 |
116 | Example js file returning a function - `grunt/jshint.js`
117 | ```javascript
118 | module.exports = function (grunt, options) {
119 | return {
120 | all: [
121 | 'Gruntfile.js',
122 | 'grunt/*.js',
123 | 'lib/*.js',
124 | 'test/*.js',
125 | options.someFile
126 | ]
127 | };
128 | };
129 | ```
130 |
131 | Example json file - `grunt/clean.json`
132 | ```json
133 | {
134 | "all": [
135 | "<%= project.dest %>",
136 | "target/*.js"
137 | ]
138 | }
139 | ```
140 |
141 | Example yaml file - `grunt/notify.yaml`
142 | ```yaml
143 | default:
144 | options:
145 | message: 'Default finished'
146 | ```
147 |
148 | ### Aliases
149 |
150 | If your `grunt/` folder contains an `aliases.(js|.json|yaml|cson)` file, `load-grunt-config` will use that to define your tasks aliases (like `grunt.registerTask('default', ['jshint']);`).
151 |
152 | The following examples show the same `aliasses` definition written in various formats
153 |
154 | Example yaml file - `grunt/aliases.yaml`
155 | ```yaml
156 | default: []
157 |
158 | lint:
159 | description: 'Helps to make our code better'
160 | tasks:
161 | - 'jshint'
162 | - 'csslint'
163 |
164 | build:
165 | - 'lint'
166 | - 'mocha'
167 | - 'notify'
168 | ```
169 |
170 | Example json file - `grunt/aliases.json`
171 | ```json
172 | {
173 | "default": [],
174 | "lint": [
175 | "jshint",
176 | "csslint"
177 | ],
178 | "build": [
179 | "lint",
180 | "mocha",
181 | "notify"
182 | ]
183 | }
184 | ```
185 |
186 | Example JavaScript file returning an object - `grunt/aliases.js`
187 | ```javascript
188 | module.exports = {
189 | 'default': [],
190 | 'lint': [
191 | 'jshint',
192 | 'csslint'
193 | ],
194 | 'build': [
195 | 'lint',
196 | 'mocha',
197 | 'notify'
198 | ]
199 | };
200 | ```
201 |
202 | Example JavaScript file returning a function `grunt/aliases.js`
203 | Useful if there is need to compute something before return.
204 |
205 | ```javascript
206 | module.exports = function (grunt, options) {
207 | // computation...
208 | return {
209 | 'default': [],
210 | 'lint': [
211 | 'jshint',
212 | 'csslint'
213 | ],
214 | 'build': [
215 | 'lint',
216 | 'mocha',
217 | 'notify'
218 | ]
219 | };
220 | };
221 | ```
222 |
223 | You can specify a task description - example JavaScript file `grunt/aliases.js`
224 | ```javascript
225 | module.exports = {
226 | 'lint': {
227 | description: 'Lint css and js',
228 | tasks: [
229 | 'jshint',
230 | 'csslint'
231 | ]
232 | }
233 | };
234 | ```
235 |
236 | ### Custom Config
237 |
238 | There are certain scenarios where you might have a base config for your team, and you want to be able to override some of the config based on your personal setup. You can do that with the `overridePath` property. In this case, the library will merge the two, with the override path taking priority. For example:
239 |
240 | ```javascript
241 | module.exports = function(grunt) {
242 | var path = require('path');
243 |
244 | require('load-grunt-config')(grunt, {
245 | configPath: path.join(process.cwd(), 'vendor'),
246 | overridePath: path.join(process.cwd(), 'config-'+process.env.USER)
247 | });
248 |
249 | };
250 | ```
251 |
252 | `configPath` and `overridePath` accept single string as well as array of strings. It means that you can compose config using multiple folders. For example:
253 |
254 | ```javascript
255 | module.exports = function(grunt) {
256 | var path = require('path');
257 |
258 | require('load-grunt-config')(grunt, {
259 | configPath: [
260 | path.join(process.cwd(), 'vendor'),
261 | path.join(process.cwd(), 'base-target')
262 | ],
263 | overridePath: [
264 | path.join(process.cwd(), 'variant-1'),
265 | path.join(process.cwd(), 'variant-n')
266 | ]
267 | });
268 |
269 | };
270 |
271 | ```
272 |
273 | ### Config Grouping
274 |
275 | `load-grunt-config` also supports grouping tasks. This is handy when you want to group all of your script or css tasks together. To do that, just add the suffix `-tasks` to your config filename and `load-grunt-config` will treat the filename as the task target and the top level keys as the task names.
276 |
277 | Here's an example
278 |
279 | Filename: `/config/scripts-tasks.yaml`
280 | ```yaml
281 | jshint:
282 | files:
283 | - '*.js'
284 | jshint__test:
285 | files:
286 | - 'test/*.js'
287 | watch:
288 | files:
289 | - '*.js'
290 | tasks:
291 | - 'scripts'
292 | ```
293 |
294 | This would be the equivalent in your `Gruntfile.js`:
295 | ```javascript
296 | {
297 | jshint: {
298 | scripts: {
299 | files: [
300 | '*.js'
301 | ]
302 | },
303 | scripts_test: {
304 | files: [
305 | 'test/*.js'
306 | ]
307 | }
308 | },
309 | watch: {
310 | scripts: {
311 | files: [
312 | '*.js'
313 | ],
314 | tasks: [
315 | 'scripts'
316 | ]
317 | }
318 | }
319 | }
320 | ```
321 |
322 | ### Debugging
323 |
324 | If you pass the parameter `--config-debug`, `load-grunt-config` will output the whole object it will pass
325 | to Grunt, which can be useful for debugging purposes or when asking for help.
326 |
327 | Note that this won't run grunt at all and no tasks would be run, nor loaded.
328 |
--------------------------------------------------------------------------------
/grunt/aliases.yaml:
--------------------------------------------------------------------------------
1 | test:
2 | - mochacli
3 | default:
4 | - jshint
5 | - test
6 | - notify
7 | dev:
8 | - default
9 | - watch
10 | site:
11 | - ghpage
12 | - gh-pages
13 |
--------------------------------------------------------------------------------
/grunt/gh-pages.yaml:
--------------------------------------------------------------------------------
1 | ghpage:
2 | options:
3 | base: 'site'
4 | src: '**/*'
5 |
--------------------------------------------------------------------------------
/grunt/ghpage.yaml:
--------------------------------------------------------------------------------
1 | ghpage:
2 | options:
3 | design: '<%= design %>'
4 | data: '<%= ghPageData %>'
5 | src: '<%= doc %>'
6 | dest: 'site'
7 |
--------------------------------------------------------------------------------
/grunt/jshint.yaml:
--------------------------------------------------------------------------------
1 | all:
2 | - Gruntfile.js
3 | - grunt/*.js
4 | - lib/*.js
5 | - test/*.js
6 | - index.js
7 |
--------------------------------------------------------------------------------
/grunt/mochacli.yaml:
--------------------------------------------------------------------------------
1 | options:
2 | reporter: spec
3 | ui: tdd
4 | all:
5 | src:
6 | - test/*.test.js
7 |
--------------------------------------------------------------------------------
/grunt/notify.yaml:
--------------------------------------------------------------------------------
1 | default:
2 | options:
3 | message: 'Default finished'
4 |
--------------------------------------------------------------------------------
/grunt/watch.yaml:
--------------------------------------------------------------------------------
1 | all:
2 | files:
3 | - <%= jshint.all %>
4 | - grunt/*.yaml
5 | - test/fixtures/**/*
6 | - test/config/*
7 | tasks:
8 | - default
9 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | var gruntConfig = require('./lib/gruntconfig');
2 | var path = require('path');
3 | var fs = require('fs');
4 | var _ = require('lodash');
5 |
6 | var cwd = process.cwd();
7 | var defaults = {
8 | configPath: [ path.join(cwd, 'grunt') ],
9 | packageJsonPath: path.join(cwd, 'package.json'),
10 | init: true,
11 | jitGrunt: false,
12 | loadGruntTasks: {
13 | },
14 | data: {},
15 | mergeFunction: _.merge
16 | };
17 |
18 | module.exports = function(grunt, options) {
19 | var debugOnly = process.argv.indexOf('--config-debug') > -1;
20 |
21 | options = options || {};
22 | if (options.config) {
23 | options.data = options.config;
24 | delete options.config;
25 | }
26 | var opts = _.mergeWith({}, defaults, options);
27 |
28 | if (fs.existsSync(opts.packageJsonPath)) {
29 | var packageData = require(opts.packageJsonPath);
30 | opts.data.package = packageData;
31 | }
32 |
33 | var config = gruntConfig(grunt, opts);
34 |
35 | if (typeof options.preMerge === 'function') {
36 | options.preMerge(config, opts.data);
37 | }
38 |
39 | config = _.mergeWith({}, config, opts.data);
40 |
41 | if (typeof options.postProcess === 'function') {
42 | options.postProcess(config);
43 | }
44 |
45 | if (debugOnly){
46 | console.log('CONFIG:');
47 | console.log('==============================');
48 | console.log(JSON.stringify(config, null, 2));
49 | console.log('');
50 | if (config.aliases) {
51 | console.log('ALIASES:');
52 | console.log('==============================');
53 | for (var cTaskName in config.aliases) {
54 | var cTask = config.aliases[cTaskName];
55 | console.log(cTaskName + ' ' + JSON.stringify(cTask));
56 | }
57 | console.log('');
58 | }
59 | process.exit(0);
60 | }
61 |
62 | if (opts.init) {
63 | grunt.initConfig(config);
64 | }
65 |
66 | if (opts.jitGrunt === false && opts.loadGruntTasks) {
67 | require('load-grunt-tasks')(grunt, opts.loadGruntTasks);
68 | } else if (opts.jitGrunt) {
69 | require('jit-grunt')(grunt, opts.jitGrunt.staticMappings)(opts.jitGrunt);
70 | }
71 |
72 | if (config.aliases) {
73 | var getTaskRunner = function (tasks) {
74 | return function () {
75 | grunt.task.run(tasks);
76 | };
77 | };
78 |
79 | for (var taskName in config.aliases) {
80 | var task = config.aliases[taskName];
81 |
82 | // The task variable contains the task to register, the alias has no description
83 | if (typeof task === 'string' || typeof task === 'function' || Array.isArray(task)) {
84 | grunt.registerTask(taskName, task);
85 |
86 | // The task variable is an object with two properties: tasks and description
87 | } else {
88 |
89 | // * The tasks property is a function, it can be register directly using registerTask
90 | if (typeof task.tasks === 'function') {
91 | grunt.registerTask(taskName, task.description, task.tasks);
92 |
93 | // * The tasks property is not a function, it must be wrapped inside one
94 | } else {
95 | grunt.registerTask(taskName, task.description, getTaskRunner(task.tasks));
96 | }
97 |
98 | }
99 | }
100 | }
101 |
102 | return config;
103 | };
104 |
--------------------------------------------------------------------------------
/lib/gruntconfig.js:
--------------------------------------------------------------------------------
1 | var readConfigDir = require('./readconfigdir');
2 | var _ = require('lodash');
3 |
4 | module.exports = function(grunt, options) {
5 | var merge = options.mergeFunction || _.merge;
6 | return _([[options.configPath], [options.overridePath]])
7 | .flattenDeep()
8 | .compact()
9 | .reduce(function (config, configPath) {
10 | var overrideConfig = readConfigDir(configPath, grunt, options);
11 | return merge(config, overrideConfig);
12 | }, {});
13 | };
14 |
--------------------------------------------------------------------------------
/lib/readconfigdir.js:
--------------------------------------------------------------------------------
1 | var glob = require('glob');
2 | var readfile = require('./readfile');
3 | var path = require('path');
4 | var _ = require('lodash');
5 |
6 | module.exports = function(dir, grunt, options) {
7 |
8 | var getKey = function(file) {
9 | var ext = path.extname(file);
10 | var base = path.basename(file, ext);
11 | return base;
12 | };
13 |
14 | var files = glob.sync('*.{js,json,yml,yaml,cson,ls}', { cwd: dir });
15 |
16 | var merge = options && options.mergeFunction || _.merge;
17 |
18 | var obj = {};
19 | files.forEach(function(file) {
20 | var filepath = path.join(dir, file);
21 | var result = readfile(filepath);
22 | var key = getKey(filepath);
23 | if (_.isFunction(result)) {
24 | result = result(grunt, options && options.data || {});
25 | }
26 |
27 | //check if multi config
28 | if (key.match(/-tasks$/)) {
29 | var target = key.replace(/-tasks$/, '');
30 | for (var newKey in result) {
31 | var newTarget = target;
32 | var originalKey = newKey;
33 | if (newKey.indexOf('__') != -1) {
34 | var spl = newKey.split('__');
35 | newKey = spl[0];
36 | newTarget = target + '_' + spl[1];
37 | }
38 | if (!obj[newKey]) {
39 | obj[newKey] = {};
40 | }
41 | obj[newKey][newTarget] = result[originalKey];
42 | }
43 | } else {
44 | if (!obj[key]) {
45 | obj[key] = {};
46 | }
47 | obj[key] = merge(obj[key], result);
48 | }
49 | });
50 | return obj;
51 |
52 | };
53 |
--------------------------------------------------------------------------------
/lib/readfile.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var fs = require('fs');
3 |
4 | module.exports = function(file) {
5 |
6 | // check for existence first
7 | if (!fs.existsSync(file)) {
8 | throw new Error(file + ' doesn\'t exist');
9 | }
10 |
11 | var ext = path.extname(file);
12 |
13 | // YAML file
14 | if (ext.match(/ya?ml/)) {
15 | var res = fs.readFileSync(file, 'utf8');
16 | var yaml = require('js-yaml');
17 | var schema = yaml.DEFAULT_SCHEMA.extend(require('js-yaml-js-types').regexp);
18 | return yaml.load(res, { schema: schema });
19 | }
20 |
21 | // CSON file
22 | if (ext.match(/cson/)) {
23 | var cson = require('cson');
24 | return cson.parseCSONFile(file);
25 | }
26 |
27 | // JS / JSON
28 | if (ext.match(/json|js|ls/)) {
29 | if (!path.isAbsolute(file)) {
30 | file = path.join(process.cwd(), file);
31 | }
32 | return require(file);
33 | }
34 |
35 | // unknown
36 | throw new Error(file + ' is an unsupported filetype');
37 |
38 | };
39 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "load-grunt-config",
3 | "version": "4.0.0",
4 | "description": "Grunt plugin that lets you break up your Gruntfile config by task",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "grunt test"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git://github.com/firstandthird/load-grunt-config.git"
12 | },
13 | "keywords": [
14 | "gruntplugin",
15 | "yaml",
16 | "cson",
17 | "grunt",
18 | "config"
19 | ],
20 | "author": "First + Third",
21 | "license": "MIT",
22 | "bugs": {
23 | "url": "https://github.com/firstandthird/load-grunt-config/issues"
24 | },
25 | "files": [
26 | "lib",
27 | "index.js"
28 | ],
29 | "engines": {
30 | "node": ">=10"
31 | },
32 | "devDependencies": {
33 | "grunt": "1.4.1",
34 | "grunt-contrib-jshint": "3.0.0",
35 | "grunt-contrib-watch": "1.1.0",
36 | "grunt-gh-pages": "4.0.0",
37 | "grunt-mocha-cli": "7.0.0",
38 | "grunt-notify": "0.4.5",
39 | "proxyquire": "2.1.3",
40 | "sinon": "11.1.1"
41 | },
42 | "dependencies": {
43 | "cson": "7.20.0",
44 | "glob": "7.1.7",
45 | "jit-grunt": "0.10.0",
46 | "js-yaml": "4.1.0",
47 | "js-yaml-js-types": "1.0.0",
48 | "load-grunt-tasks": "5.1.0",
49 | "lodash": "4.17.21"
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/test/config/aliases.yaml:
--------------------------------------------------------------------------------
1 | default:
2 | - 'test'
3 | anotherTask:
4 | description: 'This is an awesome task'
5 | tasks:
6 | - 'foo'
7 | - 'bar'
--------------------------------------------------------------------------------
/test/config/another-override/jsobj.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | jsobjFile: {
3 | options: {
4 | filename: 'another-override'
5 | }
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/test/config/csonfile.cson:
--------------------------------------------------------------------------------
1 | csonFile:
2 | options:
3 | filename: "read.cson"
4 |
--------------------------------------------------------------------------------
/test/config/htmlfile.html:
--------------------------------------------------------------------------------
1 |
Hi
2 |
--------------------------------------------------------------------------------
/test/config/jsfun.js:
--------------------------------------------------------------------------------
1 | module.exports = function(grunt, options) {
2 | return {
3 | jsFunFile: {
4 | options: {
5 | filename: 'jsfun.js',
6 | test: options.test
7 | }
8 | }
9 | };
10 | };
11 |
--------------------------------------------------------------------------------
/test/config/jsobj.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | jsobjFile: {
3 | options: {
4 | filename: 'jsobj.js',
5 | debug: true
6 | }
7 | }
8 | };
9 |
--------------------------------------------------------------------------------
/test/config/jsonfile.json:
--------------------------------------------------------------------------------
1 | {
2 | "jsonFile": {
3 | "options": {
4 | "filename": "read.json",
5 | "regexp": "/(\\d{1,})\\%/"
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/test/config/override/jsobj.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | jsobjFile: {
3 | options: {
4 | filename: 'override'
5 | }
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/test/config/yamlfile.yaml:
--------------------------------------------------------------------------------
1 | yamlFile:
2 | options:
3 | filename: read.yaml
4 | regexp: !!js/regexp /(\d{1,})\%/
5 |
--------------------------------------------------------------------------------
/test/config/ymlfile.yml:
--------------------------------------------------------------------------------
1 | ymlFile:
2 | options:
3 | filename: read.yml
4 | regexp: !!js/regexp /(\d{1,})\%/
5 |
--------------------------------------------------------------------------------
/test/fixtures/multiconfig/jsfun-tasks.js:
--------------------------------------------------------------------------------
1 | module.exports = function(grunt, options) {
2 | return {
3 | copy: {
4 | src: '*.js',
5 | dest: 'build'
6 | }
7 | };
8 | };
9 |
--------------------------------------------------------------------------------
/test/fixtures/multiconfig/test-tasks.yaml:
--------------------------------------------------------------------------------
1 | aliases:
2 | - jshint
3 | jshint:
4 | files:
5 | - '*.js'
6 | jshint__blah:
7 | files:
8 | - 'test/*.js'
9 | watch:
10 | files:
11 | - '*.js'
12 | tasks:
13 | - 'scripts'
14 |
--------------------------------------------------------------------------------
/test/fixtures/multiconfig/watch.yaml:
--------------------------------------------------------------------------------
1 | otherTarget:
2 | files:
3 | - '*.html'
4 | tasks:
5 | - html
6 |
7 |
--------------------------------------------------------------------------------
/test/fixtures/output.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | aliases: {
3 | default: [
4 | 'test'
5 | ],
6 | anotherTask: {
7 | description: 'This is an awesome task',
8 | tasks: [
9 | 'foo',
10 | 'bar'
11 | ]
12 | }
13 | },
14 | jsfun: {
15 | jsFunFile: {
16 | options: {
17 | filename: 'jsfun.js',
18 | test: 1
19 | }
20 | }
21 | },
22 | jsobj: {
23 | jsobjFile: {
24 | options: {
25 | filename: 'jsobj.js',
26 | debug: true
27 | }
28 | }
29 | },
30 | jsonfile: {
31 | jsonFile: {
32 | options: {
33 | filename: 'read.json',
34 | regexp: '/(\\d{1,})\\%/'
35 | }
36 | }
37 | },
38 | csonfile: {
39 | csonFile: {
40 | options: {
41 | filename: 'read.cson'
42 | }
43 | }
44 | },
45 | yamlfile: {
46 | yamlFile: {
47 | options: {
48 | filename: 'read.yaml',
49 | regexp: /(\d{1,})\%/
50 | }
51 | }
52 | },
53 | ymlfile: {
54 | ymlFile: {
55 | options: {
56 | filename: 'read.yml',
57 | regexp: /(\d{1,})\%/
58 | }
59 | }
60 | }
61 | };
62 |
--------------------------------------------------------------------------------
/test/fixtures/output/multiconfig.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | aliases: {
3 | test: [
4 | 'jshint'
5 | ]
6 | },
7 | jshint: {
8 | test: {
9 | files: [
10 | '*.js'
11 | ]
12 | },
13 | test_blah: {
14 | files: [
15 | 'test/*.js'
16 | ]
17 | }
18 | },
19 | watch: {
20 | test: {
21 | files: [
22 | '*.js'
23 | ],
24 | tasks: [
25 | 'scripts'
26 | ]
27 | },
28 | otherTarget: {
29 | files: [
30 | '*.html'
31 | ],
32 | tasks: [
33 | 'html'
34 | ]
35 | }
36 | },
37 | copy: {
38 | jsfun: {
39 | src: '*.js',
40 | dest: 'build'
41 | }
42 | }
43 | };
44 |
--------------------------------------------------------------------------------
/test/gruntconfig.test.js:
--------------------------------------------------------------------------------
1 | /* global suite, test */
2 | var assert = require('assert');
3 | var sinon = require('sinon');
4 | var gruntConfig = require('../lib/gruntconfig');
5 | var _ = require('lodash');
6 |
7 | var expected = require('./fixtures/output');
8 |
9 | suite('gruntConfig', function() {
10 |
11 |
12 | test('no configPath', function () {
13 | var grunt = {};
14 | var options = {
15 | data: {
16 | test: 1
17 | }
18 | };
19 |
20 | var config = gruntConfig(grunt, options);
21 |
22 | assert.deepEqual(config, {});
23 | });
24 |
25 |
26 | test('empty configPath', function () {
27 | var grunt = {};
28 | var options = {
29 | configPath: [],
30 | data: {
31 | test: 1
32 | }
33 | };
34 |
35 | var config = gruntConfig(grunt, options);
36 |
37 | assert.deepEqual(config, {});
38 | });
39 |
40 |
41 | test('single configPath', function() {
42 | var grunt = {};
43 | var options = {
44 | configPath: __dirname + '/config',
45 | data: {
46 | test: 1
47 | }
48 | };
49 |
50 | var config = gruntConfig(grunt, options);
51 | assert.deepEqual(config, expected);
52 | });
53 |
54 |
55 | test('multiple configPath', function () {
56 | var grunt = {};
57 | var options = {
58 | configPath: [
59 | __dirname + '/config',
60 | __dirname + '/config/override'
61 | ],
62 | data: {
63 | test: 1
64 | }
65 | };
66 |
67 | var config = gruntConfig(grunt, options);
68 |
69 | var expectedClone = _.cloneDeep(expected);
70 | expectedClone.jsobj.jsobjFile.options.filename = 'override';
71 | assert.deepEqual(config, expectedClone);
72 | });
73 |
74 |
75 | test('empty overridePath', function () {
76 | var grunt = {};
77 | var options = {
78 | overridePath: [],
79 | data: {
80 | test: 1
81 | }
82 | };
83 |
84 | var config = gruntConfig(grunt, options);
85 |
86 | assert.deepEqual(config, {});
87 | });
88 |
89 |
90 | test('single overridePath', function() {
91 | var grunt = {};
92 | var options = {
93 | overridePath: __dirname + '/config',
94 | data: {
95 | test: 1
96 | }
97 | };
98 |
99 | var config = gruntConfig(grunt, options);
100 | assert.deepEqual(config, expected);
101 | });
102 |
103 |
104 | test('multiple overridePath', function () {
105 | var grunt = {};
106 | var options = {
107 | overridePath: [
108 | __dirname + '/config',
109 | __dirname + '/config/override'
110 | ],
111 | data: {
112 | test: 1
113 | }
114 | };
115 |
116 | var config = gruntConfig(grunt, options);
117 |
118 | var expectedClone = _.cloneDeep(expected);
119 | expectedClone.jsobj.jsobjFile.options.filename = 'override';
120 | assert.deepEqual(config, expectedClone);
121 | });
122 |
123 |
124 | test('empty configPath and overridePath', function () {
125 | var grunt = {};
126 |
127 | var options = {
128 | configPath: [],
129 | overridePath: [],
130 | data: {
131 | test: 1
132 | }
133 | };
134 |
135 | var config = gruntConfig(grunt, options);
136 |
137 | assert.deepEqual(config, {});
138 | });
139 |
140 |
141 | test('single configPath with single overridePath', function () {
142 | var grunt = {};
143 | var options = {
144 | configPath: __dirname + '/config',
145 | overridePath: __dirname + '/config/override',
146 | data: {
147 | test: 1
148 | }
149 | };
150 |
151 | var config = gruntConfig(grunt, options);
152 |
153 | var expectedClone = _.cloneDeep(expected);
154 | expectedClone.jsobj.jsobjFile.options.filename = 'override';
155 | assert.deepEqual(config, expectedClone);
156 | });
157 |
158 |
159 | test('multiple configPath with single overridePath', function () {
160 | var grunt = {};
161 | var options = {
162 | configPath: [
163 | __dirname + '/config',
164 | __dirname + '/config/override'
165 | ],
166 | overridePath: __dirname + '/config/another-override',
167 | data: {
168 | test: 1
169 | }
170 | };
171 |
172 | var config = gruntConfig(grunt, options);
173 |
174 | var expectedClone = _.cloneDeep(expected);
175 | expectedClone.jsobj.jsobjFile.options.filename = 'another-override';
176 | assert.deepEqual(config, expectedClone);
177 | });
178 |
179 |
180 | test('single configPath with multiple overridePath', function () {
181 | var grunt = {};
182 | var options = {
183 | configPath: __dirname + '/config',
184 | overridePath: [
185 | __dirname + '/config/override',
186 | __dirname + '/config/another-override'
187 | ],
188 | data: {
189 | test: 1
190 | }
191 | };
192 |
193 | var config = gruntConfig(grunt, options);
194 |
195 | var expectedClone = _.cloneDeep(expected);
196 | expectedClone.jsobj.jsobjFile.options.filename = 'another-override';
197 | assert.deepEqual(config, expectedClone);
198 | });
199 |
200 |
201 | test('multiple configPath with multiple overridePath', function () {
202 | var grunt = {};
203 | var options = {
204 | configPath: [
205 | __dirname + '/config',
206 | __dirname + '/config/override'
207 | ],
208 | overridePath: [
209 | __dirname + '/config/another-override',
210 | __dirname + '/config/override'
211 | ],
212 | data: {
213 | test: 1
214 | }
215 | };
216 |
217 | var config = gruntConfig(grunt, options);
218 |
219 | var expectedClone = _.cloneDeep(expected);
220 | expectedClone.jsobj.jsobjFile.options.filename = 'override';
221 | assert.deepEqual(config, expectedClone);
222 | });
223 |
224 | test('uses specified mergeFunction', function() {
225 | var grunt = {};
226 | var spy = sinon.spy();
227 | var options = {
228 | mergeFunction: spy,
229 | configPath: [
230 | __dirname + '/config'
231 | ]
232 | };
233 | gruntConfig(grunt, options);
234 | assert.equal(spy.callCount, 8);
235 | });
236 |
237 | });
238 |
--------------------------------------------------------------------------------
/test/index.test.js:
--------------------------------------------------------------------------------
1 | /* global suite, test */
2 | var assert = require('assert');
3 | var proxyquire = require('proxyquire');
4 | var sinon = require('sinon');
5 | var path = require('path');
6 | var _ = require('lodash');
7 | var loadGruntConfig = require('../');
8 |
9 |
10 | suite('index', function() {
11 |
12 | var original;
13 | //fake grunt
14 | var grunt = {
15 | initConfig: sinon.stub(),
16 | registerTask: sinon.stub()
17 | };
18 |
19 | var fixture = require('./fixtures/output');
20 | var fixtureWithPackage = _.cloneDeep(fixture);
21 | fixtureWithPackage.package = require('../package.json');
22 |
23 | var gruntConfigStub = function(grunt, options) {
24 | return fixture;
25 | };
26 | var gruntConfigSpy = sinon.spy(gruntConfigStub);
27 | var loadGruntTasksSpy = sinon.spy();
28 | var jitGruntStub = function(grunt, mappings) {
29 | return function(options) {};
30 | };
31 | var jitGruntSpy = sinon.spy(jitGruntStub);
32 |
33 | setup(function(done) {
34 | original = loadGruntConfig;
35 |
36 | //hijack gruntConfig lib and just return back the options so we can test just the loadGruntConfig module
37 | loadGruntConfig = proxyquire('../', {
38 | './lib/gruntconfig': gruntConfigSpy,
39 | 'load-grunt-tasks': loadGruntTasksSpy,
40 | 'jit-grunt': jitGruntSpy
41 | });
42 | done();
43 |
44 | });
45 |
46 | teardown(function(done) {
47 | loadGruntConfig = original;
48 | grunt.initConfig.reset();
49 | grunt.registerTask.reset();
50 | gruntConfigSpy.resetHistory();
51 | loadGruntTasksSpy.resetHistory();
52 | jitGruntSpy.resetHistory();
53 | done();
54 | });
55 |
56 |
57 | suite('options', function() {
58 |
59 | test('should default to grunt dir', function() {
60 | loadGruntConfig(grunt, {});
61 | var args = gruntConfigSpy.args[0];
62 | var options = args[1];
63 | assert.equal(options.configPath, path.join(process.cwd(), 'grunt'));
64 | });
65 |
66 | test('should accept configPath property as string', function() {
67 | var configPath = 'config/path';
68 | loadGruntConfig(grunt, {
69 | configPath: configPath
70 | });
71 | var args = gruntConfigSpy.args[0];
72 | var options = args[1];
73 | assert.deepEqual(options.configPath, configPath);
74 | });
75 |
76 | test('should accept configPath property as array', function() {
77 | var configPath = ['first/config/path', 'second/config/path'];
78 | loadGruntConfig(grunt, {
79 | configPath: configPath
80 | });
81 | var args = gruntConfigSpy.args[0];
82 | var options = args[1];
83 | assert.deepEqual(options.configPath, configPath);
84 | });
85 |
86 | test('should default to init: true', function() {
87 | loadGruntConfig(grunt, {});
88 | var args = gruntConfigSpy.args[0];
89 | var options = args[1];
90 | assert.equal(options.init, true);
91 | });
92 |
93 | test('should support data passed in', function() {
94 | var options = {
95 | data: {
96 | test: 1
97 | }
98 | };
99 | var out = loadGruntConfig(grunt, options);
100 | var args = gruntConfigSpy.args[0];
101 | var spyOptions = args[1];
102 | assert.equal(spyOptions.data.test, 1);
103 | assert.equal(out.test, 1);
104 | });
105 |
106 | test('should support legacy config var', function() {
107 | var options = {
108 | config: {
109 | test: 1
110 | }
111 | };
112 | var out = loadGruntConfig(grunt, options);
113 | var args = gruntConfigSpy.args[0];
114 | var spyOptions = args[1];
115 | assert.equal(spyOptions.data.test, 1);
116 | assert.equal(typeof spyOptions.config, 'undefined');
117 | assert.equal(out.test, 1);
118 | });
119 |
120 | test('should have data object even if nothing passed in', function() {
121 | var options = {
122 | };
123 | loadGruntConfig(grunt, options);
124 | var args = gruntConfigSpy.args[0];
125 | var spyOptions = args[1];
126 | assert.equal(typeof spyOptions.data, 'object');
127 | });
128 |
129 | test('should pass contents of package.json to data', function() {
130 | loadGruntConfig(grunt, {});
131 | var args = gruntConfigSpy.args[0];
132 | var options = args[1];
133 |
134 | assert.equal(typeof options.data.package, 'object');
135 | assert.equal(options.data.package.name, 'load-grunt-config');
136 | });
137 |
138 | test('should add package.json to config obj', function() {
139 | var config = loadGruntConfig(grunt, {});
140 | assert.equal(typeof config.package, 'object');
141 | assert.equal(config.package.name, 'load-grunt-config');
142 | });
143 |
144 | test('should call postProcess to allow manipulation of config', function() {
145 | var config = loadGruntConfig(grunt, {
146 | postProcess: function(config) {
147 | config.post = true;
148 | }
149 | });
150 | assert.equal(config.post, true);
151 | });
152 |
153 | test('should call preMerge to allow manipulation of config and data', function() {
154 | var spy = sinon.spy();
155 | loadGruntConfig(grunt, {
156 | preMerge: spy
157 | });
158 |
159 | assert.equal(spy.callCount, 1);
160 | var args = spy.getCall(0).args;
161 | assert.equal(args.length, 2);
162 | assert.equal(typeof args[0], 'object');
163 | assert.equal(typeof args[1], 'object');
164 | });
165 |
166 | });
167 |
168 | suite('grunt.initConfig', function() {
169 |
170 | test('should call by default', function() {
171 | loadGruntConfig(grunt, {
172 | configPath: 'test/config'
173 | });
174 | assert.ok(grunt.initConfig.calledOnce);
175 | var config = grunt.initConfig.args[0][0];
176 | assert.equal(typeof config, 'object');
177 | assert.deepEqual(config, fixtureWithPackage);
178 | });
179 |
180 | test('should not call if init: false', function() {
181 | loadGruntConfig(grunt, {
182 | configPath: 'test/config',
183 | init: false
184 | });
185 | assert.ok(grunt.initConfig.notCalled);
186 | });
187 | });
188 |
189 |
190 | suite('load-grunt-tasks', function() {
191 |
192 | test('should call by default', function() {
193 | loadGruntConfig(grunt, {
194 | configPath: 'test/config'
195 | });
196 | assert.ok(loadGruntTasksSpy.called);
197 | var args = loadGruntTasksSpy.args[0];
198 | assert.ok(args.length, 2);
199 | });
200 |
201 | test('should pass in options', function() {
202 | loadGruntConfig(grunt, {
203 | configPath: 'test/config',
204 | loadGruntTasks: {
205 | test: 1
206 | }
207 | });
208 | assert.ok(loadGruntTasksSpy.called);
209 | var args = loadGruntTasksSpy.args[0];
210 | assert.deepEqual(args[1], { test: 1 });
211 | });
212 |
213 | test('should not call if loadGruntTasks: false', function() {
214 | loadGruntConfig(grunt, {
215 | configPath: 'test/config',
216 | loadGruntTasks: false
217 | });
218 | assert.ok(loadGruntTasksSpy.notCalled);
219 | });
220 |
221 | test('should not call if jitGrunt config specified', function() {
222 | loadGruntConfig(grunt, {
223 | configPath: 'test/config',
224 | jitGrunt: {}
225 | });
226 | assert.ok(loadGruntTasksSpy.notCalled);
227 | });
228 | });
229 |
230 | suite('jit-grunt', function() {
231 | test('should not call by default', function() {
232 | loadGruntConfig(grunt, {
233 | configPath: 'test/config'
234 | });
235 | assert.ok(jitGruntSpy.notCalled);
236 | });
237 |
238 | test('should call if jitGrunt config specified', function() {
239 | loadGruntConfig(grunt, {
240 | configPath: 'test/config',
241 | jitGrunt: {}
242 | });
243 | assert.ok(jitGruntSpy.called);
244 | var args = jitGruntSpy.args[0];
245 | assert.ok(args.length, 2);
246 | });
247 |
248 | test('should call if jitGrunt: true', function() {
249 | loadGruntConfig(grunt, {
250 | configPath: 'test/config',
251 | jitGrunt: true
252 | });
253 | assert.ok(jitGruntSpy.called);
254 | var args = jitGruntSpy.args[0];
255 | assert.ok(args.length, 2);
256 | });
257 |
258 | test('should not call if jitGrunt: false and gruntLoadTasks: false', function() {
259 | loadGruntConfig(grunt, {
260 | configPath: 'test/config',
261 | loadGruntTasks: false,
262 | jitGrunt: false
263 | });
264 | assert.ok(loadGruntTasksSpy.notCalled);
265 | assert.ok(jitGruntSpy.notCalled);
266 | });
267 | });
268 |
269 | suite('aliases', function() {
270 | test('should registerTask for each alias', function() {
271 | loadGruntConfig(grunt, {
272 | configPath: 'test/config'
273 | });
274 | assert.equal(grunt.registerTask.callCount, 2);
275 | var args = grunt.registerTask.args[0];
276 | assert.equal(args[0], 'default');
277 | assert.deepEqual(args[1], ['test']);
278 | });
279 |
280 | test('should pass the description if it\'s available', function () {
281 | loadGruntConfig(grunt, {
282 | configPath: 'test/config'
283 | });
284 | assert.equal(grunt.registerTask.callCount, 2);
285 |
286 | var args = grunt.registerTask.args[1];
287 |
288 | assert.equal(args[0], 'anotherTask');
289 | assert.equal(args[1], 'This is an awesome task');
290 | assert.equal(typeof args[2], 'function');
291 | });
292 |
293 | test('should support aliases to functions', function () {
294 | // Override the loadGruntConfig created at setup
295 | // Note the alternative of adding the alias into the fixture, implies lots
296 | // of changes in other tests
297 | var fnAliasFixture = {
298 | aliases: {
299 | aliasToFn: function () { return "A function"; }
300 | }
301 | };
302 |
303 | loadGruntConfig = proxyquire('../', {
304 | './lib/gruntconfig': function(grunt, options) {
305 | return fnAliasFixture;
306 | },
307 | 'load-grunt-tasks': loadGruntTasksSpy,
308 | 'jit-grunt': jitGruntSpy
309 | });
310 |
311 | loadGruntConfig(grunt, {
312 | configPath: 'test/config'
313 | });
314 |
315 | assert.equal(grunt.registerTask.callCount, 1);
316 | var args = grunt.registerTask.args[0];
317 |
318 | assert.equal(args[0], 'aliasToFn');
319 | assert.equal(typeof args[1], 'function');
320 | });
321 |
322 | test('should support aliases to functions with description', function () {
323 | // Same strategy as before
324 | var fnAliasFixture = {
325 | aliases: {
326 | aliasToFn: {
327 | 'description' : 'This is an awesome task',
328 | 'tasks' : function () { return "A function"; }
329 | }
330 | }
331 | };
332 |
333 | loadGruntConfig = proxyquire('../', {
334 | './lib/gruntconfig': function(grunt, options) {
335 | return fnAliasFixture;
336 | },
337 | 'load-grunt-tasks': loadGruntTasksSpy,
338 | 'jit-grunt': jitGruntSpy
339 | });
340 |
341 | loadGruntConfig(grunt, {
342 | configPath: 'test/config'
343 | });
344 |
345 | assert.equal(grunt.registerTask.callCount, 1);
346 | var args = grunt.registerTask.args[0];
347 |
348 | assert.equal(args[0], 'aliasToFn');
349 | assert.equal(args[1], 'This is an awesome task');
350 | assert.equal(typeof args[2], 'function');
351 | assert.equal(args[2](), 'A function');
352 | });
353 | });
354 |
355 | });
356 |
--------------------------------------------------------------------------------
/test/readconfigdir.test.js:
--------------------------------------------------------------------------------
1 | /* global suite, test */
2 |
3 | var assert = require('assert');
4 | var sinon = require('sinon');
5 | var readConfigDir = require('../lib/readconfigdir');
6 |
7 | suite('readConfigDir', function() {
8 |
9 | test('read fixture directory', function() {
10 |
11 | var grunt = {};
12 | var options = {
13 | data: {test: 1}
14 | };
15 |
16 | var obj = readConfigDir(__dirname+'/config', grunt, options);
17 | assert.deepEqual(obj, require('./fixtures/output'));
18 | });
19 |
20 | test('uses specified mergeFunction', function() {
21 | var grunt = {};
22 | var spy = sinon.spy();
23 | var options = {
24 | mergeFunction: spy
25 | };
26 |
27 | readConfigDir(__dirname+'/config', grunt, options);
28 | assert.equal(spy.callCount, 7);
29 | });
30 |
31 | test('multiconfig', function() {
32 | var grunt = {};
33 | var obj = readConfigDir(__dirname+'/fixtures/multiconfig', grunt);
34 | var expected = require('./fixtures/output/multiconfig');
35 | assert.deepEqual(obj, expected);
36 | });
37 |
38 | });
39 |
--------------------------------------------------------------------------------
/test/readfile.test.js:
--------------------------------------------------------------------------------
1 | /* global suite,test */
2 |
3 | var assert = require('assert');
4 | var readfile = require('../lib/readfile');
5 |
6 | suite('readfile', function() {
7 |
8 | test('read non-existing file', function() {
9 | assert.throws(function() {
10 | readfile(__dirname+'/config/fakefile.yaml');
11 | });
12 | });
13 |
14 | test('read yaml file', function() {
15 | var yaml = readfile(__dirname+'/config/yamlfile.yaml');
16 | assert.equal(yaml.yamlFile.options.filename, 'read.yaml');
17 | assert.equal(yaml.yamlFile.options.regexp, '/(\\d{1,})\\%/');
18 | });
19 |
20 | test('read yml file', function() {
21 | var yaml = readfile(__dirname+'/config/ymlfile.yml');
22 | assert.equal(yaml.ymlFile.options.filename, 'read.yml');
23 | assert.equal(yaml.ymlFile.options.regexp, '/(\\d{1,})\\%/');
24 | });
25 |
26 | test('read cson file', function() {
27 | var cson = readfile(__dirname+'/config/csonfile.cson');
28 | assert.equal(cson.csonFile.options.filename, 'read.cson');
29 | });
30 |
31 | test('read json file', function() {
32 | var json = readfile(__dirname+'/config/jsonfile.json');
33 | assert.equal(json.jsonFile.options.filename, 'read.json');
34 | assert.equal(json.jsonFile.options.regexp, '/(\\d{1,})\\%/');
35 | });
36 |
37 | test('read js object file', function() {
38 | var json = readfile(__dirname+'/config/jsobj.js');
39 | assert.equal(json.jsobjFile.options.filename, 'jsobj.js');
40 | });
41 |
42 | test('read js file with function, returns function', function() {
43 | var fn = readfile(__dirname+'/config/jsfun.js');
44 | assert.equal(typeof fn, 'function');
45 | //fn takes two args, grunt and options
46 | var obj = fn({}, { test: 1 });
47 | assert.equal(obj.jsFunFile.options.filename, 'jsfun.js');
48 | assert.equal(obj.jsFunFile.options.test, 1);
49 | });
50 |
51 | test('read unsupported file', function() {
52 | assert.throws(function() {
53 | readfile(__dirname+'/config/htmlfile.html');
54 | });
55 | });
56 |
57 | });
58 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.3":
6 | version "1.8.3"
7 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
8 | integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==
9 | dependencies:
10 | type-detect "4.0.8"
11 |
12 | "@sinonjs/fake-timers@^7.0.4", "@sinonjs/fake-timers@^7.1.0":
13 | version "7.1.2"
14 | resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5"
15 | integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==
16 | dependencies:
17 | "@sinonjs/commons" "^1.7.0"
18 |
19 | "@sinonjs/samsam@^6.0.2":
20 | version "6.0.2"
21 | resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-6.0.2.tgz#a0117d823260f282c04bff5f8704bdc2ac6910bb"
22 | integrity sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==
23 | dependencies:
24 | "@sinonjs/commons" "^1.6.0"
25 | lodash.get "^4.4.2"
26 | type-detect "^4.0.8"
27 |
28 | "@sinonjs/text-encoding@^0.7.1":
29 | version "0.7.1"
30 | resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5"
31 | integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==
32 |
33 | "@types/minimatch@^3.0.3":
34 | version "3.0.4"
35 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21"
36 | integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==
37 |
38 | "@ungap/promise-all-settled@1.1.2":
39 | version "1.1.2"
40 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
41 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
42 |
43 | abbrev@1:
44 | version "1.1.1"
45 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
46 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
47 |
48 | ansi-colors@4.1.1:
49 | version "4.1.1"
50 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
51 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
52 |
53 | ansi-regex@^3.0.0:
54 | version "3.0.0"
55 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
56 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
57 |
58 | ansi-regex@^5.0.0:
59 | version "5.0.0"
60 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
61 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
62 |
63 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
64 | version "4.3.0"
65 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
66 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
67 | dependencies:
68 | color-convert "^2.0.1"
69 |
70 | anymatch@~3.1.1:
71 | version "3.1.2"
72 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
73 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
74 | dependencies:
75 | normalize-path "^3.0.0"
76 | picomatch "^2.0.4"
77 |
78 | argparse@^1.0.7:
79 | version "1.0.10"
80 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
81 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
82 | dependencies:
83 | sprintf-js "~1.0.2"
84 |
85 | argparse@^2.0.1:
86 | version "2.0.1"
87 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
88 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
89 |
90 | array-differ@^3.0.0:
91 | version "3.0.0"
92 | resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b"
93 | integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==
94 |
95 | array-each@^1.0.1:
96 | version "1.0.1"
97 | resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
98 | integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8=
99 |
100 | array-slice@^1.0.0:
101 | version "1.1.0"
102 | resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4"
103 | integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==
104 |
105 | array-union@^2.1.0:
106 | version "2.1.0"
107 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
108 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
109 |
110 | arrify@^2.0.1:
111 | version "2.0.1"
112 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
113 | integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
114 |
115 | async@^2.6.0:
116 | version "2.6.3"
117 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
118 | integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
119 | dependencies:
120 | lodash "^4.17.14"
121 |
122 | async@^3.2.0, async@~3.2.0:
123 | version "3.2.0"
124 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
125 | integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==
126 |
127 | balanced-match@^1.0.0:
128 | version "1.0.2"
129 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
130 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
131 |
132 | binary-extensions@^2.0.0:
133 | version "2.2.0"
134 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
135 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
136 |
137 | body@^5.1.0:
138 | version "5.1.0"
139 | resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069"
140 | integrity sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=
141 | dependencies:
142 | continuable-cache "^0.3.1"
143 | error "^7.0.0"
144 | raw-body "~1.1.0"
145 | safe-json-parse "~1.0.1"
146 |
147 | brace-expansion@^1.1.7:
148 | version "1.1.11"
149 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
150 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
151 | dependencies:
152 | balanced-match "^1.0.0"
153 | concat-map "0.0.1"
154 |
155 | braces@^3.0.1, braces@~3.0.2:
156 | version "3.0.2"
157 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
158 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
159 | dependencies:
160 | fill-range "^7.0.1"
161 |
162 | browser-stdout@1.3.1:
163 | version "1.3.1"
164 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
165 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
166 |
167 | bytes@1:
168 | version "1.0.0"
169 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8"
170 | integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=
171 |
172 | call-bind@^1.0.0:
173 | version "1.0.2"
174 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
175 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
176 | dependencies:
177 | function-bind "^1.1.1"
178 | get-intrinsic "^1.0.2"
179 |
180 | camelcase@^6.0.0:
181 | version "6.2.0"
182 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
183 | integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
184 |
185 | chalk@^4.0.0, chalk@^4.1.0, chalk@~4.1.0:
186 | version "4.1.1"
187 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
188 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
189 | dependencies:
190 | ansi-styles "^4.1.0"
191 | supports-color "^7.1.0"
192 |
193 | chokidar@3.5.1:
194 | version "3.5.1"
195 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
196 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
197 | dependencies:
198 | anymatch "~3.1.1"
199 | braces "~3.0.2"
200 | glob-parent "~5.1.0"
201 | is-binary-path "~2.1.0"
202 | is-glob "~4.0.1"
203 | normalize-path "~3.0.0"
204 | readdirp "~3.5.0"
205 | optionalDependencies:
206 | fsevents "~2.3.1"
207 |
208 | cli@~1.0.0:
209 | version "1.0.1"
210 | resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14"
211 | integrity sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=
212 | dependencies:
213 | exit "0.1.2"
214 | glob "^7.1.1"
215 |
216 | cliui@^7.0.2:
217 | version "7.0.4"
218 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
219 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
220 | dependencies:
221 | string-width "^4.2.0"
222 | strip-ansi "^6.0.0"
223 | wrap-ansi "^7.0.0"
224 |
225 | coffeescript@1.12.7:
226 | version "1.12.7"
227 | resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.12.7.tgz#e57ee4c4867cf7f606bfc4a0f2d550c0981ddd27"
228 | integrity sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==
229 |
230 | color-convert@^2.0.1:
231 | version "2.0.1"
232 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
233 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
234 | dependencies:
235 | color-name "~1.1.4"
236 |
237 | color-name@~1.1.4:
238 | version "1.1.4"
239 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
240 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
241 |
242 | colors@~1.1.2:
243 | version "1.1.2"
244 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
245 | integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM=
246 |
247 | concat-map@0.0.1:
248 | version "0.0.1"
249 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
250 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
251 |
252 | console-browserify@1.1.x:
253 | version "1.1.0"
254 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
255 | integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
256 | dependencies:
257 | date-now "^0.1.4"
258 |
259 | continuable-cache@^0.3.1:
260 | version "0.3.1"
261 | resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f"
262 | integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=
263 |
264 | core-util-is@~1.0.0:
265 | version "1.0.2"
266 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
267 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
268 |
269 | cson-parser@^4.0.5:
270 | version "4.0.9"
271 | resolved "https://registry.yarnpkg.com/cson-parser/-/cson-parser-4.0.9.tgz#eef0cf77edd057f97861ef800300c8239224eedb"
272 | integrity sha512-I79SAcCYquWnEfXYj8hBqOOWKj6eH6zX1hhX3yqmS4K3bYp7jME3UFpHPzu3rUew0oyfc0s8T6IlWGXRAheHag==
273 | dependencies:
274 | coffeescript "1.12.7"
275 |
276 | cson@7.20.0:
277 | version "7.20.0"
278 | resolved "https://registry.yarnpkg.com/cson/-/cson-7.20.0.tgz#638f7ef2bd108151484d6f6613ae2717b4156226"
279 | integrity sha512-K7g/86vC77mJqi6PRFhd3p8U/y0R6SsCeTJb5RpOAaQdApHxCoK5JwfZ8WeJjpOZ6lyyi8tNvh3UuC184H3GWg==
280 | dependencies:
281 | cson-parser "^4.0.5"
282 | extract-opts "^4.3.0"
283 | requirefresh "^4.12.0"
284 | safefs "^6.12.0"
285 |
286 | date-now@^0.1.4:
287 | version "0.1.4"
288 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
289 | integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
290 |
291 | dateformat@~3.0.3:
292 | version "3.0.3"
293 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
294 | integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
295 |
296 | debug@4.3.1:
297 | version "4.3.1"
298 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
299 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
300 | dependencies:
301 | ms "2.1.2"
302 |
303 | debug@^3.1.0:
304 | version "3.2.7"
305 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
306 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
307 | dependencies:
308 | ms "^2.1.1"
309 |
310 | decamelize@^4.0.0:
311 | version "4.0.0"
312 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
313 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
314 |
315 | detect-file@^1.0.0:
316 | version "1.0.0"
317 | resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
318 | integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
319 |
320 | diff@5.0.0, diff@^5.0.0:
321 | version "5.0.0"
322 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
323 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
324 |
325 | dom-serializer@0:
326 | version "0.2.2"
327 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
328 | integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
329 | dependencies:
330 | domelementtype "^2.0.1"
331 | entities "^2.0.0"
332 |
333 | domelementtype@1:
334 | version "1.3.1"
335 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
336 | integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
337 |
338 | domelementtype@^2.0.1:
339 | version "2.2.0"
340 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
341 | integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
342 |
343 | domhandler@2.3:
344 | version "2.3.0"
345 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738"
346 | integrity sha1-LeWaCCLVAn+r/28DLCsloqir5zg=
347 | dependencies:
348 | domelementtype "1"
349 |
350 | domutils@1.5:
351 | version "1.5.1"
352 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
353 | integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
354 | dependencies:
355 | dom-serializer "0"
356 | domelementtype "1"
357 |
358 | eachr@^4.5.0:
359 | version "4.5.0"
360 | resolved "https://registry.yarnpkg.com/eachr/-/eachr-4.5.0.tgz#495eb3aab6a41811da1e04e510424df32075cf04"
361 | integrity sha512-9I664RWp6p8jvcHZIwo7bWaiSaUmA1wNSLKwNZEiaYjqiTARq3cGjyRiIunsopZv4QMmX3T5Hs17QoPAzdYxfg==
362 | dependencies:
363 | typechecker "^6.2.0"
364 |
365 | emoji-regex@^8.0.0:
366 | version "8.0.0"
367 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
368 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
369 |
370 | entities@1.0:
371 | version "1.0.0"
372 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26"
373 | integrity sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=
374 |
375 | entities@^2.0.0:
376 | version "2.2.0"
377 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
378 | integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
379 |
380 | error@^7.0.0:
381 | version "7.2.1"
382 | resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894"
383 | integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==
384 | dependencies:
385 | string-template "~0.2.1"
386 |
387 | escalade@^3.1.1:
388 | version "3.1.1"
389 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
390 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
391 |
392 | escape-string-regexp@4.0.0:
393 | version "4.0.0"
394 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
395 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
396 |
397 | esprima@^4.0.0, esprima@^4.0.1:
398 | version "4.0.1"
399 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
400 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
401 |
402 | eventemitter2@~0.4.13:
403 | version "0.4.14"
404 | resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab"
405 | integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=
406 |
407 | exit@0.1.2, exit@0.1.x, exit@~0.1.2:
408 | version "0.1.2"
409 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
410 | integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
411 |
412 | expand-tilde@^2.0.0, expand-tilde@^2.0.2:
413 | version "2.0.2"
414 | resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
415 | integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
416 | dependencies:
417 | homedir-polyfill "^1.0.1"
418 |
419 | extend@^3.0.2:
420 | version "3.0.2"
421 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
422 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
423 |
424 | extract-opts@^4.3.0:
425 | version "4.3.0"
426 | resolved "https://registry.yarnpkg.com/extract-opts/-/extract-opts-4.3.0.tgz#ee0a797249abb77e449bdaaba66ebeff4775505e"
427 | integrity sha512-Dmssi1tgKJkQsVmbP7TgW/kbdc42SAsNf6h9ClweP+dS7O24YYMTXsNwPelxhx0LF15npiWwY5ahKtyQiNgxWA==
428 | dependencies:
429 | eachr "^4.5.0"
430 | typechecker "^6.2.0"
431 |
432 | faye-websocket@~0.10.0:
433 | version "0.10.0"
434 | resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
435 | integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=
436 | dependencies:
437 | websocket-driver ">=0.5.1"
438 |
439 | fill-keys@^1.0.2:
440 | version "1.0.2"
441 | resolved "https://registry.yarnpkg.com/fill-keys/-/fill-keys-1.0.2.tgz#9a8fa36f4e8ad634e3bf6b4f3c8882551452eb20"
442 | integrity sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=
443 | dependencies:
444 | is-object "~1.0.1"
445 | merge-descriptors "~1.0.0"
446 |
447 | fill-range@^7.0.1:
448 | version "7.0.1"
449 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
450 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
451 | dependencies:
452 | to-regex-range "^5.0.1"
453 |
454 | find-up@5.0.0:
455 | version "5.0.0"
456 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
457 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
458 | dependencies:
459 | locate-path "^6.0.0"
460 | path-exists "^4.0.0"
461 |
462 | find-up@^3.0.0:
463 | version "3.0.0"
464 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
465 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
466 | dependencies:
467 | locate-path "^3.0.0"
468 |
469 | findup-sync@^4.0.0:
470 | version "4.0.0"
471 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0"
472 | integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==
473 | dependencies:
474 | detect-file "^1.0.0"
475 | is-glob "^4.0.0"
476 | micromatch "^4.0.2"
477 | resolve-dir "^1.0.1"
478 |
479 | findup-sync@~0.3.0:
480 | version "0.3.0"
481 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16"
482 | integrity sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=
483 | dependencies:
484 | glob "~5.0.0"
485 |
486 | fined@^1.2.0:
487 | version "1.2.0"
488 | resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b"
489 | integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==
490 | dependencies:
491 | expand-tilde "^2.0.2"
492 | is-plain-object "^2.0.3"
493 | object.defaults "^1.1.0"
494 | object.pick "^1.2.0"
495 | parse-filepath "^1.0.1"
496 |
497 | flagged-respawn@^1.0.1:
498 | version "1.0.1"
499 | resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41"
500 | integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==
501 |
502 | flat@^5.0.2:
503 | version "5.0.2"
504 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
505 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
506 |
507 | for-in@^1.0.1:
508 | version "1.0.2"
509 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
510 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
511 |
512 | for-own@^1.0.0:
513 | version "1.0.0"
514 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
515 | integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=
516 | dependencies:
517 | for-in "^1.0.1"
518 |
519 | fs-extra@^8.1.0:
520 | version "8.1.0"
521 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
522 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
523 | dependencies:
524 | graceful-fs "^4.2.0"
525 | jsonfile "^4.0.0"
526 | universalify "^0.1.0"
527 |
528 | fs.realpath@^1.0.0:
529 | version "1.0.0"
530 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
531 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
532 |
533 | fsevents@~2.3.1:
534 | version "2.3.2"
535 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
536 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
537 |
538 | function-bind@^1.1.1:
539 | version "1.1.1"
540 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
541 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
542 |
543 | gaze@^1.1.0:
544 | version "1.1.3"
545 | resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
546 | integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==
547 | dependencies:
548 | globule "^1.0.0"
549 |
550 | get-caller-file@^2.0.5:
551 | version "2.0.5"
552 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
553 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
554 |
555 | get-intrinsic@^1.0.2:
556 | version "1.1.1"
557 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
558 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
559 | dependencies:
560 | function-bind "^1.1.1"
561 | has "^1.0.3"
562 | has-symbols "^1.0.1"
563 |
564 | getobject@~1.0.0:
565 | version "1.0.1"
566 | resolved "https://registry.yarnpkg.com/getobject/-/getobject-1.0.1.tgz#17d86a05913c15d173a5bcf8662dc7c7ac5ce147"
567 | integrity sha512-tj18lLe+917AACr6BdVoUuHnBPTVd9BEJp1vxnMZ58ztNvuxz9Ufa+wf3g37tlGITH35jggwZ2d9lcgHJJgXfQ==
568 |
569 | glob-parent@~5.1.0:
570 | version "5.1.2"
571 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
572 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
573 | dependencies:
574 | is-glob "^4.0.1"
575 |
576 | glob@7.1.6:
577 | version "7.1.6"
578 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
579 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
580 | dependencies:
581 | fs.realpath "^1.0.0"
582 | inflight "^1.0.4"
583 | inherits "2"
584 | minimatch "^3.0.4"
585 | once "^1.3.0"
586 | path-is-absolute "^1.0.0"
587 |
588 | glob@7.1.7, glob@^7.1.1, glob@^7.1.3, glob@~7.1.1, glob@~7.1.6:
589 | version "7.1.7"
590 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
591 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
592 | dependencies:
593 | fs.realpath "^1.0.0"
594 | inflight "^1.0.4"
595 | inherits "2"
596 | minimatch "^3.0.4"
597 | once "^1.3.0"
598 | path-is-absolute "^1.0.0"
599 |
600 | glob@~5.0.0:
601 | version "5.0.15"
602 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
603 | integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
604 | dependencies:
605 | inflight "^1.0.4"
606 | inherits "2"
607 | minimatch "2 || 3"
608 | once "^1.3.0"
609 | path-is-absolute "^1.0.0"
610 |
611 | global-modules@^1.0.0:
612 | version "1.0.0"
613 | resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
614 | integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
615 | dependencies:
616 | global-prefix "^1.0.1"
617 | is-windows "^1.0.1"
618 | resolve-dir "^1.0.0"
619 |
620 | global-prefix@^1.0.1:
621 | version "1.0.2"
622 | resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
623 | integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
624 | dependencies:
625 | expand-tilde "^2.0.2"
626 | homedir-polyfill "^1.0.1"
627 | ini "^1.3.4"
628 | is-windows "^1.0.1"
629 | which "^1.2.14"
630 |
631 | globule@^1.0.0:
632 | version "1.3.2"
633 | resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4"
634 | integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==
635 | dependencies:
636 | glob "~7.1.1"
637 | lodash "~4.17.10"
638 | minimatch "~3.0.2"
639 |
640 | graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4:
641 | version "4.2.6"
642 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
643 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
644 |
645 | growl@1.10.5:
646 | version "1.10.5"
647 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
648 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
649 |
650 | grunt-cli@~1.4.2:
651 | version "1.4.3"
652 | resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.4.3.tgz#22c9f1a3d2780bf9b0d206e832e40f8f499175ff"
653 | integrity sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==
654 | dependencies:
655 | grunt-known-options "~2.0.0"
656 | interpret "~1.1.0"
657 | liftup "~3.0.1"
658 | nopt "~4.0.1"
659 | v8flags "~3.2.0"
660 |
661 | grunt-contrib-jshint@3.0.0:
662 | version "3.0.0"
663 | resolved "https://registry.yarnpkg.com/grunt-contrib-jshint/-/grunt-contrib-jshint-3.0.0.tgz#4b52395e78bab122134c99b3b2d8907f17e38cbd"
664 | integrity sha512-o0V3HNK54+w2Lss/AP0LsAUCEmPDQIcgsDFvTy0sE8sdPXq/8vHdNdMEitK9Wcfoq7H6v02v6soiiwJ0wavT7A==
665 | dependencies:
666 | chalk "^4.1.0"
667 | hooker "^0.2.3"
668 | jshint "~2.12.0"
669 |
670 | grunt-contrib-watch@1.1.0:
671 | version "1.1.0"
672 | resolved "https://registry.yarnpkg.com/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz#c143ca5b824b288a024b856639a5345aedb78ed4"
673 | integrity sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==
674 | dependencies:
675 | async "^2.6.0"
676 | gaze "^1.1.0"
677 | lodash "^4.17.10"
678 | tiny-lr "^1.1.1"
679 |
680 | grunt-gh-pages@4.0.0:
681 | version "4.0.0"
682 | resolved "https://registry.yarnpkg.com/grunt-gh-pages/-/grunt-gh-pages-4.0.0.tgz#699a90d1161c919be7e9790cef734a4f5e7de0ae"
683 | integrity sha512-vuU13G0/my6VM6hLYZwnGzNI8jNJiyJprT3vkMp2S3fjBs+etWTo2ldF9mkiH5MuZYkuS2yJ6B3Fy/Tj7fzRzg==
684 | dependencies:
685 | async "^3.2.0"
686 | fs-extra "^8.1.0"
687 | graceful-fs "^4.2.3"
688 | url-safe "^2.0.0"
689 |
690 | grunt-known-options@~2.0.0:
691 | version "2.0.0"
692 | resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-2.0.0.tgz#cac641e897f9a0a680b8c9839803d35f3325103c"
693 | integrity sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==
694 |
695 | grunt-legacy-log-utils@~2.1.0:
696 | version "2.1.0"
697 | resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz#49a8c7dc74051476dcc116c32faf9db8646856ef"
698 | integrity sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==
699 | dependencies:
700 | chalk "~4.1.0"
701 | lodash "~4.17.19"
702 |
703 | grunt-legacy-log@~3.0.0:
704 | version "3.0.0"
705 | resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz#1c6eaf92371ea415af31ea84ce50d434ef6d39c4"
706 | integrity sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==
707 | dependencies:
708 | colors "~1.1.2"
709 | grunt-legacy-log-utils "~2.1.0"
710 | hooker "~0.2.3"
711 | lodash "~4.17.19"
712 |
713 | grunt-legacy-util@~2.0.1:
714 | version "2.0.1"
715 | resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz#0f929d13a2faf9988c9917c82bff609e2d9ba255"
716 | integrity sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==
717 | dependencies:
718 | async "~3.2.0"
719 | exit "~0.1.2"
720 | getobject "~1.0.0"
721 | hooker "~0.2.3"
722 | lodash "~4.17.21"
723 | underscore.string "~3.3.5"
724 | which "~2.0.2"
725 |
726 | grunt-mocha-cli@7.0.0:
727 | version "7.0.0"
728 | resolved "https://registry.yarnpkg.com/grunt-mocha-cli/-/grunt-mocha-cli-7.0.0.tgz#f1e86d72d3f51eb89f7e8c4e2c6ff1bd629de140"
729 | integrity sha512-1uGjttc1jkAj4jIrhHQFHW+5l7e7brIrNkJxOo8mlV081xND3itoYgrQj3VaHRbo6I7p8T/nH+KKwPli9id1Uw==
730 | dependencies:
731 | mocha "^8.2.0"
732 |
733 | grunt-notify@0.4.5:
734 | version "0.4.5"
735 | resolved "https://registry.yarnpkg.com/grunt-notify/-/grunt-notify-0.4.5.tgz#05293990616110db6bc0ad15e6c0592ffe18ac31"
736 | integrity sha1-BSk5kGFhENtrwK0V5sBZL/4YrDE=
737 | dependencies:
738 | semver "^5.1.0"
739 | stack-parser "^0.0.1"
740 | which "^1.2.4"
741 |
742 | grunt@1.4.1:
743 | version "1.4.1"
744 | resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.4.1.tgz#7d1e17db1f9c8108777f7273d6b9359755576f50"
745 | integrity sha512-ZXIYXTsAVrA7sM+jZxjQdrBOAg7DyMUplOMhTaspMRExei+fD0BTwdWXnn0W5SXqhb/Q/nlkzXclSi3IH55PIA==
746 | dependencies:
747 | dateformat "~3.0.3"
748 | eventemitter2 "~0.4.13"
749 | exit "~0.1.2"
750 | findup-sync "~0.3.0"
751 | glob "~7.1.6"
752 | grunt-cli "~1.4.2"
753 | grunt-known-options "~2.0.0"
754 | grunt-legacy-log "~3.0.0"
755 | grunt-legacy-util "~2.0.1"
756 | iconv-lite "~0.4.13"
757 | js-yaml "~3.14.0"
758 | minimatch "~3.0.4"
759 | mkdirp "~1.0.4"
760 | nopt "~3.0.6"
761 | rimraf "~3.0.2"
762 |
763 | has-flag@^4.0.0:
764 | version "4.0.0"
765 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
766 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
767 |
768 | has-symbols@^1.0.1:
769 | version "1.0.2"
770 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
771 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
772 |
773 | has@^1.0.3:
774 | version "1.0.3"
775 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
776 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
777 | dependencies:
778 | function-bind "^1.1.1"
779 |
780 | he@1.2.0:
781 | version "1.2.0"
782 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
783 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
784 |
785 | homedir-polyfill@^1.0.1:
786 | version "1.0.3"
787 | resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
788 | integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
789 | dependencies:
790 | parse-passwd "^1.0.0"
791 |
792 | hooker@^0.2.3, hooker@~0.2.3:
793 | version "0.2.3"
794 | resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959"
795 | integrity sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=
796 |
797 | htmlparser2@3.8.x:
798 | version "3.8.3"
799 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068"
800 | integrity sha1-mWwosZFRaovoZQGn15dX5ccMEGg=
801 | dependencies:
802 | domelementtype "1"
803 | domhandler "2.3"
804 | domutils "1.5"
805 | entities "1.0"
806 | readable-stream "1.1"
807 |
808 | http-parser-js@>=0.5.1:
809 | version "0.5.3"
810 | resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9"
811 | integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==
812 |
813 | iconv-lite@~0.4.13:
814 | version "0.4.24"
815 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
816 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
817 | dependencies:
818 | safer-buffer ">= 2.1.2 < 3"
819 |
820 | inflight@^1.0.4:
821 | version "1.0.6"
822 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
823 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
824 | dependencies:
825 | once "^1.3.0"
826 | wrappy "1"
827 |
828 | inherits@2, inherits@~2.0.1:
829 | version "2.0.4"
830 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
831 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
832 |
833 | ini@^1.3.4:
834 | version "1.3.8"
835 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
836 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
837 |
838 | interpret@~1.1.0:
839 | version "1.1.0"
840 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
841 | integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=
842 |
843 | is-absolute@^1.0.0:
844 | version "1.0.0"
845 | resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576"
846 | integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==
847 | dependencies:
848 | is-relative "^1.0.0"
849 | is-windows "^1.0.1"
850 |
851 | is-binary-path@~2.1.0:
852 | version "2.1.0"
853 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
854 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
855 | dependencies:
856 | binary-extensions "^2.0.0"
857 |
858 | is-core-module@^2.2.0:
859 | version "2.4.0"
860 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
861 | integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
862 | dependencies:
863 | has "^1.0.3"
864 |
865 | is-extglob@^2.1.1:
866 | version "2.1.1"
867 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
868 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
869 |
870 | is-fullwidth-code-point@^2.0.0:
871 | version "2.0.0"
872 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
873 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
874 |
875 | is-fullwidth-code-point@^3.0.0:
876 | version "3.0.0"
877 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
878 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
879 |
880 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
881 | version "4.0.1"
882 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
883 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
884 | dependencies:
885 | is-extglob "^2.1.1"
886 |
887 | is-number@^7.0.0:
888 | version "7.0.0"
889 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
890 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
891 |
892 | is-object@~1.0.1:
893 | version "1.0.2"
894 | resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf"
895 | integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==
896 |
897 | is-plain-obj@^2.1.0:
898 | version "2.1.0"
899 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
900 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
901 |
902 | is-plain-object@^2.0.3, is-plain-object@^2.0.4:
903 | version "2.0.4"
904 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
905 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
906 | dependencies:
907 | isobject "^3.0.1"
908 |
909 | is-relative@^1.0.0:
910 | version "1.0.0"
911 | resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
912 | integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==
913 | dependencies:
914 | is-unc-path "^1.0.0"
915 |
916 | is-unc-path@^1.0.0:
917 | version "1.0.0"
918 | resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
919 | integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==
920 | dependencies:
921 | unc-path-regex "^0.1.2"
922 |
923 | is-windows@^1.0.1:
924 | version "1.0.2"
925 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
926 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
927 |
928 | isarray@0.0.1:
929 | version "0.0.1"
930 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
931 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
932 |
933 | isexe@^2.0.0:
934 | version "2.0.0"
935 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
936 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
937 |
938 | isobject@^3.0.0, isobject@^3.0.1:
939 | version "3.0.1"
940 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
941 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
942 |
943 | jit-grunt@0.10.0:
944 | version "0.10.0"
945 | resolved "https://registry.yarnpkg.com/jit-grunt/-/jit-grunt-0.10.0.tgz#008c3a7fe1e96bd0d84e260ea1fa1783457f79c2"
946 | integrity sha1-AIw6f+Hpa9DYTiYOofoXg0V/ecI=
947 |
948 | js-yaml-js-types@1.0.0:
949 | version "1.0.0"
950 | resolved "https://registry.yarnpkg.com/js-yaml-js-types/-/js-yaml-js-types-1.0.0.tgz#bf17cb75c7587c698294d15bbfa5f9b8b10b874b"
951 | integrity sha512-UNjPwuoaj4mcHkJCJSF6l4MgkzoFjG+JJkBXMYNvjgO3yE9gTeRt+E6PN022vduz/daZZ7HmlEiSEE36NrGE4w==
952 | dependencies:
953 | esprima "^4.0.1"
954 |
955 | js-yaml@4.0.0:
956 | version "4.0.0"
957 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f"
958 | integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==
959 | dependencies:
960 | argparse "^2.0.1"
961 |
962 | js-yaml@4.1.0:
963 | version "4.1.0"
964 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
965 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
966 | dependencies:
967 | argparse "^2.0.1"
968 |
969 | js-yaml@~3.14.0:
970 | version "3.14.1"
971 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
972 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
973 | dependencies:
974 | argparse "^1.0.7"
975 | esprima "^4.0.0"
976 |
977 | jshint@~2.12.0:
978 | version "2.12.0"
979 | resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.12.0.tgz#52e75bd058d587ef81a0e2f95e5cf18eb5dc5c37"
980 | integrity sha512-TwuuaUDmra0JMkuqvqy+WGo2xGHSNjv1BA1nTIgtH2K5z1jHuAEeAgp7laaR+hLRmajRjcrM71+vByBDanCyYA==
981 | dependencies:
982 | cli "~1.0.0"
983 | console-browserify "1.1.x"
984 | exit "0.1.x"
985 | htmlparser2 "3.8.x"
986 | lodash "~4.17.19"
987 | minimatch "~3.0.2"
988 | shelljs "0.3.x"
989 | strip-json-comments "1.0.x"
990 |
991 | jsonfile@^4.0.0:
992 | version "4.0.0"
993 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
994 | integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
995 | optionalDependencies:
996 | graceful-fs "^4.1.6"
997 |
998 | just-extend@^4.0.2:
999 | version "4.2.1"
1000 | resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744"
1001 | integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==
1002 |
1003 | kind-of@^6.0.2:
1004 | version "6.0.3"
1005 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
1006 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
1007 |
1008 | liftup@~3.0.1:
1009 | version "3.0.1"
1010 | resolved "https://registry.yarnpkg.com/liftup/-/liftup-3.0.1.tgz#1cb81aff0f368464ed3a5f1a7286372d6b1a60ce"
1011 | integrity sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==
1012 | dependencies:
1013 | extend "^3.0.2"
1014 | findup-sync "^4.0.0"
1015 | fined "^1.2.0"
1016 | flagged-respawn "^1.0.1"
1017 | is-plain-object "^2.0.4"
1018 | object.map "^1.0.1"
1019 | rechoir "^0.7.0"
1020 | resolve "^1.19.0"
1021 |
1022 | livereload-js@^2.3.0:
1023 | version "2.4.0"
1024 | resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c"
1025 | integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==
1026 |
1027 | load-grunt-tasks@5.1.0:
1028 | version "5.1.0"
1029 | resolved "https://registry.yarnpkg.com/load-grunt-tasks/-/load-grunt-tasks-5.1.0.tgz#14894c27a7e34ebbef9937c39cc35c573cd04c1c"
1030 | integrity sha512-oNj0Jlka1TsfDe+9He0kcA1cRln+TMoTsEByW7ij6kyktNLxBKJtslCFEvFrLC2Dj0S19IWJh3fOCIjLby2Xrg==
1031 | dependencies:
1032 | arrify "^2.0.1"
1033 | multimatch "^4.0.0"
1034 | pkg-up "^3.1.0"
1035 | resolve-pkg "^2.0.0"
1036 |
1037 | locate-path@^3.0.0:
1038 | version "3.0.0"
1039 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
1040 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
1041 | dependencies:
1042 | p-locate "^3.0.0"
1043 | path-exists "^3.0.0"
1044 |
1045 | locate-path@^6.0.0:
1046 | version "6.0.0"
1047 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
1048 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
1049 | dependencies:
1050 | p-locate "^5.0.0"
1051 |
1052 | lodash.get@^4.4.2:
1053 | version "4.4.2"
1054 | resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
1055 | integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
1056 |
1057 | lodash@4.17.21, lodash@^4.17.10, lodash@^4.17.14, lodash@~4.17.10, lodash@~4.17.19, lodash@~4.17.21:
1058 | version "4.17.21"
1059 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
1060 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
1061 |
1062 | log-symbols@4.0.0:
1063 | version "4.0.0"
1064 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"
1065 | integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==
1066 | dependencies:
1067 | chalk "^4.0.0"
1068 |
1069 | make-iterator@^1.0.0:
1070 | version "1.0.1"
1071 | resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6"
1072 | integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==
1073 | dependencies:
1074 | kind-of "^6.0.2"
1075 |
1076 | map-cache@^0.2.0:
1077 | version "0.2.2"
1078 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
1079 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
1080 |
1081 | merge-descriptors@~1.0.0:
1082 | version "1.0.1"
1083 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
1084 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
1085 |
1086 | micromatch@^4.0.2:
1087 | version "4.0.4"
1088 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
1089 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
1090 | dependencies:
1091 | braces "^3.0.1"
1092 | picomatch "^2.2.3"
1093 |
1094 | "minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2, minimatch@~3.0.4:
1095 | version "3.0.4"
1096 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1097 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1098 | dependencies:
1099 | brace-expansion "^1.1.7"
1100 |
1101 | mkdirp@~1.0.4:
1102 | version "1.0.4"
1103 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
1104 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
1105 |
1106 | mocha@^8.2.0:
1107 | version "8.4.0"
1108 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff"
1109 | integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==
1110 | dependencies:
1111 | "@ungap/promise-all-settled" "1.1.2"
1112 | ansi-colors "4.1.1"
1113 | browser-stdout "1.3.1"
1114 | chokidar "3.5.1"
1115 | debug "4.3.1"
1116 | diff "5.0.0"
1117 | escape-string-regexp "4.0.0"
1118 | find-up "5.0.0"
1119 | glob "7.1.6"
1120 | growl "1.10.5"
1121 | he "1.2.0"
1122 | js-yaml "4.0.0"
1123 | log-symbols "4.0.0"
1124 | minimatch "3.0.4"
1125 | ms "2.1.3"
1126 | nanoid "3.1.20"
1127 | serialize-javascript "5.0.1"
1128 | strip-json-comments "3.1.1"
1129 | supports-color "8.1.1"
1130 | which "2.0.2"
1131 | wide-align "1.1.3"
1132 | workerpool "6.1.0"
1133 | yargs "16.2.0"
1134 | yargs-parser "20.2.4"
1135 | yargs-unparser "2.0.0"
1136 |
1137 | module-not-found-error@^1.0.1:
1138 | version "1.0.1"
1139 | resolved "https://registry.yarnpkg.com/module-not-found-error/-/module-not-found-error-1.0.1.tgz#cf8b4ff4f29640674d6cdd02b0e3bc523c2bbdc0"
1140 | integrity sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=
1141 |
1142 | ms@2.1.2:
1143 | version "2.1.2"
1144 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1145 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1146 |
1147 | ms@2.1.3, ms@^2.1.1:
1148 | version "2.1.3"
1149 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1150 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1151 |
1152 | multimatch@^4.0.0:
1153 | version "4.0.0"
1154 | resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3"
1155 | integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==
1156 | dependencies:
1157 | "@types/minimatch" "^3.0.3"
1158 | array-differ "^3.0.0"
1159 | array-union "^2.1.0"
1160 | arrify "^2.0.1"
1161 | minimatch "^3.0.4"
1162 |
1163 | nanoid@3.1.20:
1164 | version "3.1.20"
1165 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788"
1166 | integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==
1167 |
1168 | nise@^5.1.0:
1169 | version "5.1.0"
1170 | resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.0.tgz#713ef3ed138252daef20ec035ab62b7a28be645c"
1171 | integrity sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==
1172 | dependencies:
1173 | "@sinonjs/commons" "^1.7.0"
1174 | "@sinonjs/fake-timers" "^7.0.4"
1175 | "@sinonjs/text-encoding" "^0.7.1"
1176 | just-extend "^4.0.2"
1177 | path-to-regexp "^1.7.0"
1178 |
1179 | nopt@~3.0.6:
1180 | version "3.0.6"
1181 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
1182 | integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
1183 | dependencies:
1184 | abbrev "1"
1185 |
1186 | nopt@~4.0.1:
1187 | version "4.0.3"
1188 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
1189 | integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
1190 | dependencies:
1191 | abbrev "1"
1192 | osenv "^0.1.4"
1193 |
1194 | normalize-path@^3.0.0, normalize-path@~3.0.0:
1195 | version "3.0.0"
1196 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1197 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1198 |
1199 | object-assign@^4.1.0:
1200 | version "4.1.1"
1201 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1202 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1203 |
1204 | object-inspect@^1.9.0:
1205 | version "1.10.3"
1206 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"
1207 | integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==
1208 |
1209 | object.defaults@^1.1.0:
1210 | version "1.1.0"
1211 | resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
1212 | integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=
1213 | dependencies:
1214 | array-each "^1.0.1"
1215 | array-slice "^1.0.0"
1216 | for-own "^1.0.0"
1217 | isobject "^3.0.0"
1218 |
1219 | object.map@^1.0.1:
1220 | version "1.0.1"
1221 | resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37"
1222 | integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=
1223 | dependencies:
1224 | for-own "^1.0.0"
1225 | make-iterator "^1.0.0"
1226 |
1227 | object.pick@^1.2.0:
1228 | version "1.3.0"
1229 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
1230 | integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
1231 | dependencies:
1232 | isobject "^3.0.1"
1233 |
1234 | once@^1.3.0:
1235 | version "1.4.0"
1236 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1237 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1238 | dependencies:
1239 | wrappy "1"
1240 |
1241 | os-homedir@^1.0.0:
1242 | version "1.0.2"
1243 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1244 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
1245 |
1246 | os-tmpdir@^1.0.0:
1247 | version "1.0.2"
1248 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1249 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
1250 |
1251 | osenv@^0.1.4:
1252 | version "0.1.5"
1253 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
1254 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
1255 | dependencies:
1256 | os-homedir "^1.0.0"
1257 | os-tmpdir "^1.0.0"
1258 |
1259 | p-limit@^2.0.0:
1260 | version "2.3.0"
1261 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1262 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1263 | dependencies:
1264 | p-try "^2.0.0"
1265 |
1266 | p-limit@^3.0.2:
1267 | version "3.1.0"
1268 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1269 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1270 | dependencies:
1271 | yocto-queue "^0.1.0"
1272 |
1273 | p-locate@^3.0.0:
1274 | version "3.0.0"
1275 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
1276 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
1277 | dependencies:
1278 | p-limit "^2.0.0"
1279 |
1280 | p-locate@^5.0.0:
1281 | version "5.0.0"
1282 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
1283 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
1284 | dependencies:
1285 | p-limit "^3.0.2"
1286 |
1287 | p-try@^2.0.0:
1288 | version "2.2.0"
1289 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1290 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1291 |
1292 | parse-filepath@^1.0.1:
1293 | version "1.0.2"
1294 | resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891"
1295 | integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=
1296 | dependencies:
1297 | is-absolute "^1.0.0"
1298 | map-cache "^0.2.0"
1299 | path-root "^0.1.1"
1300 |
1301 | parse-passwd@^1.0.0:
1302 | version "1.0.0"
1303 | resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
1304 | integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
1305 |
1306 | path-exists@^3.0.0:
1307 | version "3.0.0"
1308 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
1309 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
1310 |
1311 | path-exists@^4.0.0:
1312 | version "4.0.0"
1313 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1314 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1315 |
1316 | path-is-absolute@^1.0.0:
1317 | version "1.0.1"
1318 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1319 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1320 |
1321 | path-parse@^1.0.6:
1322 | version "1.0.7"
1323 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1324 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1325 |
1326 | path-root-regex@^0.1.0:
1327 | version "0.1.2"
1328 | resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
1329 | integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=
1330 |
1331 | path-root@^0.1.1:
1332 | version "0.1.1"
1333 | resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7"
1334 | integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=
1335 | dependencies:
1336 | path-root-regex "^0.1.0"
1337 |
1338 | path-to-regexp@^1.7.0:
1339 | version "1.8.0"
1340 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
1341 | integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
1342 | dependencies:
1343 | isarray "0.0.1"
1344 |
1345 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
1346 | version "2.3.0"
1347 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
1348 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
1349 |
1350 | pkg-up@^3.1.0:
1351 | version "3.1.0"
1352 | resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
1353 | integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
1354 | dependencies:
1355 | find-up "^3.0.0"
1356 |
1357 | proxyquire@2.1.3:
1358 | version "2.1.3"
1359 | resolved "https://registry.yarnpkg.com/proxyquire/-/proxyquire-2.1.3.tgz#2049a7eefa10a9a953346a18e54aab2b4268df39"
1360 | integrity sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==
1361 | dependencies:
1362 | fill-keys "^1.0.2"
1363 | module-not-found-error "^1.0.1"
1364 | resolve "^1.11.1"
1365 |
1366 | qs@^6.4.0:
1367 | version "6.10.1"
1368 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a"
1369 | integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==
1370 | dependencies:
1371 | side-channel "^1.0.4"
1372 |
1373 | randombytes@^2.1.0:
1374 | version "2.1.0"
1375 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1376 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1377 | dependencies:
1378 | safe-buffer "^5.1.0"
1379 |
1380 | raw-body@~1.1.0:
1381 | version "1.1.7"
1382 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425"
1383 | integrity sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=
1384 | dependencies:
1385 | bytes "1"
1386 | string_decoder "0.10"
1387 |
1388 | readable-stream@1.1:
1389 | version "1.1.13"
1390 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e"
1391 | integrity sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4=
1392 | dependencies:
1393 | core-util-is "~1.0.0"
1394 | inherits "~2.0.1"
1395 | isarray "0.0.1"
1396 | string_decoder "~0.10.x"
1397 |
1398 | readdirp@~3.5.0:
1399 | version "3.5.0"
1400 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
1401 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
1402 | dependencies:
1403 | picomatch "^2.2.1"
1404 |
1405 | rechoir@^0.7.0:
1406 | version "0.7.0"
1407 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca"
1408 | integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==
1409 | dependencies:
1410 | resolve "^1.9.0"
1411 |
1412 | require-directory@^2.1.1:
1413 | version "2.1.1"
1414 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
1415 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
1416 |
1417 | requirefresh@^4.12.0:
1418 | version "4.13.0"
1419 | resolved "https://registry.yarnpkg.com/requirefresh/-/requirefresh-4.13.0.tgz#bd4edaf45bf0194cbccecbc444794d1012604f21"
1420 | integrity sha512-APrzWWxqnwE2Bz3ysFepAU0Dc0aYjn8jsDLFIegedn+KVCS9LykAclkf+6YaJXk3ON9l6QAm04rN+bEA89cGIg==
1421 |
1422 | resolve-dir@^1.0.0, resolve-dir@^1.0.1:
1423 | version "1.0.1"
1424 | resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
1425 | integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
1426 | dependencies:
1427 | expand-tilde "^2.0.0"
1428 | global-modules "^1.0.0"
1429 |
1430 | resolve-from@^5.0.0:
1431 | version "5.0.0"
1432 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
1433 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
1434 |
1435 | resolve-pkg@^2.0.0:
1436 | version "2.0.0"
1437 | resolved "https://registry.yarnpkg.com/resolve-pkg/-/resolve-pkg-2.0.0.tgz#ac06991418a7623edc119084edc98b0e6bf05a41"
1438 | integrity sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==
1439 | dependencies:
1440 | resolve-from "^5.0.0"
1441 |
1442 | resolve@^1.11.1, resolve@^1.19.0, resolve@^1.9.0:
1443 | version "1.20.0"
1444 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
1445 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
1446 | dependencies:
1447 | is-core-module "^2.2.0"
1448 | path-parse "^1.0.6"
1449 |
1450 | rimraf@~3.0.2:
1451 | version "3.0.2"
1452 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1453 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1454 | dependencies:
1455 | glob "^7.1.3"
1456 |
1457 | safe-buffer@>=5.1.0, safe-buffer@^5.1.0:
1458 | version "5.2.1"
1459 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1460 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1461 |
1462 | safe-json-parse@~1.0.1:
1463 | version "1.0.1"
1464 | resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57"
1465 | integrity sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=
1466 |
1467 | safefs@^6.12.0:
1468 | version "6.14.0"
1469 | resolved "https://registry.yarnpkg.com/safefs/-/safefs-6.14.0.tgz#edf11702c6696bf6b1dc6aee4753b465c5034a88"
1470 | integrity sha512-giMaaBcOFXBBOlzppPg3BQa1fi55HQoTeK/V1NNFGT3iT+FWtfcweEWeq7cRjnpneIZwjYNk1PGDL+9YvD95HA==
1471 | dependencies:
1472 | graceful-fs "^4.2.4"
1473 |
1474 | "safer-buffer@>= 2.1.2 < 3":
1475 | version "2.1.2"
1476 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1477 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1478 |
1479 | semver@^5.1.0:
1480 | version "5.7.1"
1481 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
1482 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
1483 |
1484 | serialize-javascript@5.0.1:
1485 | version "5.0.1"
1486 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"
1487 | integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
1488 | dependencies:
1489 | randombytes "^2.1.0"
1490 |
1491 | shelljs@0.3.x:
1492 | version "0.3.0"
1493 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1"
1494 | integrity sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=
1495 |
1496 | side-channel@^1.0.4:
1497 | version "1.0.4"
1498 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
1499 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
1500 | dependencies:
1501 | call-bind "^1.0.0"
1502 | get-intrinsic "^1.0.2"
1503 | object-inspect "^1.9.0"
1504 |
1505 | sinon@11.1.1:
1506 | version "11.1.1"
1507 | resolved "https://registry.yarnpkg.com/sinon/-/sinon-11.1.1.tgz#99a295a8b6f0fadbbb7e004076f3ae54fc6eab91"
1508 | integrity sha512-ZSSmlkSyhUWbkF01Z9tEbxZLF/5tRC9eojCdFh33gtQaP7ITQVaMWQHGuFM7Cuf/KEfihuh1tTl3/ABju3AQMg==
1509 | dependencies:
1510 | "@sinonjs/commons" "^1.8.3"
1511 | "@sinonjs/fake-timers" "^7.1.0"
1512 | "@sinonjs/samsam" "^6.0.2"
1513 | diff "^5.0.0"
1514 | nise "^5.1.0"
1515 | supports-color "^7.2.0"
1516 |
1517 | sprintf-js@^1.0.3:
1518 | version "1.1.2"
1519 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
1520 | integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
1521 |
1522 | sprintf-js@~1.0.2:
1523 | version "1.0.3"
1524 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1525 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
1526 |
1527 | stack-parser@^0.0.1:
1528 | version "0.0.1"
1529 | resolved "https://registry.yarnpkg.com/stack-parser/-/stack-parser-0.0.1.tgz#7d3b63a17887e9e2c2bf55dbd3318fe34a39d1e7"
1530 | integrity sha1-fTtjoXiH6eLCv1Xb0zGP40o50ec=
1531 |
1532 | string-template@~0.2.1:
1533 | version "0.2.1"
1534 | resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add"
1535 | integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=
1536 |
1537 | "string-width@^1.0.2 || 2":
1538 | version "2.1.1"
1539 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
1540 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
1541 | dependencies:
1542 | is-fullwidth-code-point "^2.0.0"
1543 | strip-ansi "^4.0.0"
1544 |
1545 | string-width@^4.1.0, string-width@^4.2.0:
1546 | version "4.2.2"
1547 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
1548 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
1549 | dependencies:
1550 | emoji-regex "^8.0.0"
1551 | is-fullwidth-code-point "^3.0.0"
1552 | strip-ansi "^6.0.0"
1553 |
1554 | string_decoder@0.10, string_decoder@~0.10.x:
1555 | version "0.10.31"
1556 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1557 | integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
1558 |
1559 | strip-ansi@^4.0.0:
1560 | version "4.0.0"
1561 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
1562 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
1563 | dependencies:
1564 | ansi-regex "^3.0.0"
1565 |
1566 | strip-ansi@^6.0.0:
1567 | version "6.0.0"
1568 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
1569 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
1570 | dependencies:
1571 | ansi-regex "^5.0.0"
1572 |
1573 | strip-json-comments@1.0.x:
1574 | version "1.0.4"
1575 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
1576 | integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=
1577 |
1578 | strip-json-comments@3.1.1:
1579 | version "3.1.1"
1580 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1581 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1582 |
1583 | supports-color@8.1.1:
1584 | version "8.1.1"
1585 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
1586 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
1587 | dependencies:
1588 | has-flag "^4.0.0"
1589 |
1590 | supports-color@^7.1.0, supports-color@^7.2.0:
1591 | version "7.2.0"
1592 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1593 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1594 | dependencies:
1595 | has-flag "^4.0.0"
1596 |
1597 | tiny-lr@^1.1.1:
1598 | version "1.1.1"
1599 | resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab"
1600 | integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==
1601 | dependencies:
1602 | body "^5.1.0"
1603 | debug "^3.1.0"
1604 | faye-websocket "~0.10.0"
1605 | livereload-js "^2.3.0"
1606 | object-assign "^4.1.0"
1607 | qs "^6.4.0"
1608 |
1609 | to-regex-range@^5.0.1:
1610 | version "5.0.1"
1611 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1612 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1613 | dependencies:
1614 | is-number "^7.0.0"
1615 |
1616 | type-detect@4.0.8, type-detect@^4.0.8:
1617 | version "4.0.8"
1618 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
1619 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
1620 |
1621 | typechecker@^6.2.0:
1622 | version "6.4.0"
1623 | resolved "https://registry.yarnpkg.com/typechecker/-/typechecker-6.4.0.tgz#c087dc744c5a0f17524d58a17eb31a9660ab7324"
1624 | integrity sha512-EbOu+9szY13mhl0EsvLXnR+pTCa3gTHQQPLdce72ujcC9fRHXlVFBNXtHeRhgzLxLlKUh4zA9C0tezLDgshf+A==
1625 |
1626 | unc-path-regex@^0.1.2:
1627 | version "0.1.2"
1628 | resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
1629 | integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
1630 |
1631 | underscore.string@~3.3.5:
1632 | version "3.3.5"
1633 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023"
1634 | integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==
1635 | dependencies:
1636 | sprintf-js "^1.0.3"
1637 | util-deprecate "^1.0.2"
1638 |
1639 | universalify@^0.1.0:
1640 | version "0.1.2"
1641 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
1642 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
1643 |
1644 | url-safe@^2.0.0:
1645 | version "2.0.0"
1646 | resolved "https://registry.yarnpkg.com/url-safe/-/url-safe-2.0.0.tgz#dcd46de4666a7546ee43ea906ac175daa626de9e"
1647 | integrity sha1-3NRt5GZqdUbuQ+qQasF12qYm3p4=
1648 |
1649 | util-deprecate@^1.0.2:
1650 | version "1.0.2"
1651 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1652 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
1653 |
1654 | v8flags@~3.2.0:
1655 | version "3.2.0"
1656 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656"
1657 | integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==
1658 | dependencies:
1659 | homedir-polyfill "^1.0.1"
1660 |
1661 | websocket-driver@>=0.5.1:
1662 | version "0.7.4"
1663 | resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
1664 | integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
1665 | dependencies:
1666 | http-parser-js ">=0.5.1"
1667 | safe-buffer ">=5.1.0"
1668 | websocket-extensions ">=0.1.1"
1669 |
1670 | websocket-extensions@>=0.1.1:
1671 | version "0.1.4"
1672 | resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
1673 | integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
1674 |
1675 | which@2.0.2, which@~2.0.2:
1676 | version "2.0.2"
1677 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1678 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1679 | dependencies:
1680 | isexe "^2.0.0"
1681 |
1682 | which@^1.2.14, which@^1.2.4:
1683 | version "1.3.1"
1684 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
1685 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
1686 | dependencies:
1687 | isexe "^2.0.0"
1688 |
1689 | wide-align@1.1.3:
1690 | version "1.1.3"
1691 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
1692 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
1693 | dependencies:
1694 | string-width "^1.0.2 || 2"
1695 |
1696 | workerpool@6.1.0:
1697 | version "6.1.0"
1698 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b"
1699 | integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==
1700 |
1701 | wrap-ansi@^7.0.0:
1702 | version "7.0.0"
1703 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
1704 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
1705 | dependencies:
1706 | ansi-styles "^4.0.0"
1707 | string-width "^4.1.0"
1708 | strip-ansi "^6.0.0"
1709 |
1710 | wrappy@1:
1711 | version "1.0.2"
1712 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1713 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1714 |
1715 | y18n@^5.0.5:
1716 | version "5.0.8"
1717 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
1718 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
1719 |
1720 | yargs-parser@20.2.4:
1721 | version "20.2.4"
1722 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
1723 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
1724 |
1725 | yargs-parser@^20.2.2:
1726 | version "20.2.9"
1727 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
1728 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
1729 |
1730 | yargs-unparser@2.0.0:
1731 | version "2.0.0"
1732 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
1733 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
1734 | dependencies:
1735 | camelcase "^6.0.0"
1736 | decamelize "^4.0.0"
1737 | flat "^5.0.2"
1738 | is-plain-obj "^2.1.0"
1739 |
1740 | yargs@16.2.0:
1741 | version "16.2.0"
1742 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
1743 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
1744 | dependencies:
1745 | cliui "^7.0.2"
1746 | escalade "^3.1.1"
1747 | get-caller-file "^2.0.5"
1748 | require-directory "^2.1.1"
1749 | string-width "^4.2.0"
1750 | y18n "^5.0.5"
1751 | yargs-parser "^20.2.2"
1752 |
1753 | yocto-queue@^0.1.0:
1754 | version "0.1.0"
1755 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
1756 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
1757 |
--------------------------------------------------------------------------------