├── .gitattributes
├── .gitignore
├── README.md
├── app.js
├── cypress.json
├── cypress
├── fixtures
│ ├── fiveTodos.json
│ ├── threeTodos.json
│ └── twoTodos.json
└── integration
│ ├── 01-using-should.js
│ ├── 02-using-then.js
│ ├── 03-using-each.js
│ ├── 04-first-position-fail.js
│ ├── 05-first-position-pass.js
│ └── 06-using-should-function.js
├── data.json
├── img
├── dragndrop.gif
├── login.png
└── signup.png
├── index.html
├── json-server.json
├── middleware.js
├── package-lock.json
├── package.json
└── vendor
├── Sortable.min.js
├── axios.min.js
├── cypress-icon.png
├── index.css
├── polyfill.min.js
├── vue-observe-visibility.min.js
├── vue-router.js
├── vue.js
└── vuex.js
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # todomvc-expanded
2 | Expanded todomvc with login, signup and drag and drop
3 |
4 | Simple todoMVC app build with Vue.js, originally forked from [testing-workshop-cypress](https://github.com/cypress-io/testing-workshop-cypress). I expanded the appliaction and added a couple of features.
5 |
6 | ## Features
7 | ### drag & drop
8 | Reorder todos in list.
9 | TBD: make sure the reorder keeps it’s state after refresh 🙂
10 | 
11 |
12 | ### signup page
13 | Signup page with ability to send a real welcome email. Using [sendmail](https://www.npmjs.com/package/sendmail) to do that. Signups are stored in data.json, in plain text. So, yeah.
14 | 
15 |
16 | ### login page
17 | Works with previously signed up emails. Server returns an auth cookie in form of auth=true, LOL 😆
18 | 
19 |
20 | ## api
21 | Backend is a json-server on a static json file. Middleware handles couple of cases. Some of these are:
22 |
23 | ### POST /reset
24 | Deletes all todos and all accounts, that were created on signup page.
25 |
26 | ### DELETE /todos
27 | Deletes all todos
28 |
29 | ### DELETE /accounts
30 | Deletes all accounts, created on signup page
31 |
32 | ## Installation
33 | 1. `npm i`
34 | 2. `npm start`
35 |
36 | App runs on localhost:3000 by default.
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | /* global Vue, Vuex, axios, VueRouter, Sortable */
2 | /* eslint-disable no-console */
3 | (function () {
4 | Vue.use(Vuex);
5 |
6 | function randomId () {
7 | return Math.random()
8 | .toString()
9 | .substr(2, 10);
10 | }
11 |
12 | const store = new Vuex.Store({
13 | state: {
14 | loading: true,
15 | sendEmail: false,
16 | todos: [],
17 | newTodo: '',
18 | email: '',
19 | password: '',
20 | errorMessage: {
21 | show: false,
22 | text: ''
23 | },
24 | loggedIn: false,
25 | },
26 | getters: {
27 | newTodo: state => state.newTodo,
28 | todos: state => state.todos,
29 | loading: state => state.loading,
30 | errorMessage: state => state.errorMessage,
31 | loggedIn: state => state.loggedIn,
32 | email: state => state.email,
33 | password: state => state.password,
34 | sendEmail: state => state.sendEmail
35 | },
36 | mutations: {
37 | SET_LOADING (state, flag) {
38 | state.loading = flag;
39 | },
40 | SHOW_ERROR (state) {
41 | state.errorMessage.show = true;
42 | setTimeout(() => {
43 | state.errorMessage.show = false;
44 | }, 4000);
45 | },
46 | ERROR_MESSAGE ( state, message ) {
47 | state.errorMessage.text = message;
48 | },
49 | LOGGED_IN_MESSAGE (state) {
50 | state.loggedIn = true;
51 | setTimeout(() => {
52 | state.loggedIn = false;
53 | }, 4000);
54 | },
55 | SIGNED_UP_MESSAGE (state) {
56 | state.signedUp = true;
57 | setTimeout(() => {
58 | state.signedUp = false;
59 | }, 4000);
60 | },
61 | SET_TODOS (state, todos) {
62 | state.todos = todos;
63 | },
64 | SET_NEW_TODO (state, todo) {
65 | state.newTodo = todo;
66 | },
67 | ADD_TODO (state, todoObject) {
68 | console.log('add todo', todoObject);
69 | state.todos.push(todoObject);
70 | },
71 | COMPLETE_TODO (todo) {
72 | console.log('complete todo ' + todo.id);
73 | },
74 | REMOVE_TODO (state, todo) {
75 | let todos = state.todos;
76 | console.log('removing todo');
77 | todos.splice(todos.indexOf(todo), 1);
78 | },
79 | CLEAR_NEW_TODO (state) {
80 | state.newTodo = '';
81 | console.log('clearing new todo');
82 | },
83 | SET_EMAIL (state, email) {
84 | state.email = email;
85 | },
86 | SET_PASSWORD (state, password) {
87 | state.password = password;
88 | },
89 | SEND_EMAIL_FLAG (state, flag) {
90 | console.log('I’m doing something');
91 | state.sendEmail = flag;
92 | }
93 | },
94 | actions: {
95 | loadTodos ({ commit }) {
96 | commit('SET_LOADING', true);
97 |
98 | axios
99 | .get('/todos')
100 | .then(r => r.data)
101 | .then(todos => {
102 | console.log('got %d todos', todos.length);
103 | commit('SET_TODOS', todos);
104 | commit('SET_LOADING', false);
105 | })
106 | .catch(e => {
107 | console.error('could not load todos');
108 | console.error(e.message);
109 | console.error(e.response.data);
110 | });
111 | },
112 | setNewTodo ({ commit }, todo) {
113 | commit('SET_NEW_TODO', todo);
114 | },
115 | addTodo ({ commit, state }) {
116 | if (!state.newTodo) {
117 | // do not add empty todos
118 | return;
119 | }
120 | const todo = {
121 | title: state.newTodo,
122 | completed: false,
123 | id: randomId()
124 | };
125 | axios.post('/todos', todo).then(() => {
126 | commit('ADD_TODO', todo);
127 | }).catch( () => {
128 | commit('SHOW_ERROR');
129 | commit('ERROR_MESSAGE', 'Sorry. There was an error creating todo item.');
130 | });
131 | },
132 | completeTodo ({ commit }, todo) {
133 | axios.patch(`/todos/${todo.id}`, {completed: !todo.completed});
134 | commit('COMPLETE_TODO');
135 | },
136 | removeTodo ({ commit }, todo) {
137 | axios.delete(`/todos/${todo.id}`).then(() => {
138 | console.log('removed todo', todo.id, 'from the server');
139 | commit('REMOVE_TODO', todo);
140 | });
141 | },
142 | clearNewTodo ({ commit }) {
143 | commit('CLEAR_NEW_TODO');
144 | },
145 | setEmail ({ commit }, email) {
146 | commit('SET_EMAIL', email);
147 | },
148 | setPassword ({ commit }, password) {
149 | commit('SET_PASSWORD', password);
150 | },
151 | login ({ commit, state }) {
152 | const credentials = {
153 | email: state.email,
154 | password: state.password
155 | };
156 | axios.post('/login', credentials ).then(() => {
157 | commit('LOGGED_IN_MESSAGE');
158 | router.push({ path: '/' });
159 | }).catch( () => {
160 | commit('SHOW_ERROR');
161 | commit('ERROR_MESSAGE', 'Wrong email or password');
162 | });
163 | },
164 | loggedIn ({ commit }) {
165 | commit('LOGGED_IN_MESSAGE');
166 | },
167 | signup ({ commit, state }) {
168 | const credentials = {
169 | email: state.email,
170 | password: state.password
171 | };
172 | const emailFlag = state.sendEmail;
173 | axios({
174 | method: 'POST',
175 | url: '/signup',
176 | data: credentials,
177 | headers: {
178 | sendWelcomeEmail: emailFlag
179 | }
180 | }).then(() => {
181 | commit('LOGGED_IN_MESSAGE');
182 | router.push({ path: '/' });
183 | }).catch( () => {
184 | commit('SHOW_ERROR');
185 | commit('ERROR_MESSAGE', 'Could not sign up');
186 | });
187 | },
188 | sendEmailFlag({ commit }, checked) {
189 | commit('SEND_EMAIL_FLAG', checked);
190 | }
191 | }
192 | });
193 |
194 | const login = Vue.component('login', {
195 | template: '#login',
196 | computed: {
197 | email () {
198 | return this.$store.getters.email;
199 | },
200 | password () {
201 | return this.$store.getters.password;
202 | }
203 | },
204 | methods: {
205 | setEmail (e) {
206 | this.$store.dispatch('setEmail', e.target.value);
207 | },
208 | setPassword (e) {
209 | this.$store.dispatch('setPassword', e.target.value);
210 | },
211 | loginSend () {
212 | this.$store.dispatch('login');
213 | }
214 | }
215 | });
216 |
217 | const signup = Vue.component('signup', {
218 | template: '#signup',
219 | computed: {
220 | email () {
221 | return this.$store.getters.email;
222 | },
223 | password () {
224 | return this.$store.getters.password;
225 | },
226 | sendEmail () {
227 | return this.$store.getters.sendEmail;
228 | }
229 | },
230 | methods: {
231 | setEmail (e) {
232 | this.$store.dispatch('setEmail', e.target.value);
233 | },
234 | setPassword (e) {
235 | this.$store.dispatch('setPassword', e.target.value);
236 | },
237 | signupSend () {
238 | this.$store.dispatch('signup');
239 | },
240 | sendEmailFlag (e) {
241 | this.$store.dispatch('sendEmailFlag', e.target.checked);
242 | }
243 | }
244 | });
245 |
246 | const todoapp = Vue.component('todoapp-template', {
247 | template: '#todoapp-template',
248 | data() {
249 | return {
250 | showByIndex: null
251 | };
252 | },
253 | created () {
254 | this.$store.dispatch('loadTodos');
255 | },
256 | computed: {
257 | loading () {
258 | return this.$store.getters.loading;
259 | },
260 | newTodo () {
261 | return this.$store.getters.newTodo;
262 | },
263 | todos () {
264 | return this.$store.getters.todos;
265 | }
266 | },
267 | methods: {
268 | setNewTodo (e) {
269 | this.$store.dispatch('setNewTodo', e.target.value);
270 | },
271 | addTodo (e) {
272 | e.target.value = '';
273 | this.$store.dispatch('addTodo');
274 | this.$store.dispatch('clearNewTodo');
275 | },
276 | completeTodo (todo) {
277 | this.$store.dispatch('completeTodo', todo);
278 | },
279 | removeTodo (todo) {
280 | this.$store.dispatch('removeTodo', todo);
281 | }
282 |
283 | }
284 | });
285 |
286 | const router = new VueRouter({
287 | mode: 'history',
288 | routes: [
289 | { path: '/', name: 'todoapp', component: todoapp },
290 | { path: '/login', name: 'login', component: login },
291 | { path: '/signup', name: 'signup', component: signup },
292 | { path: '*', redirect: {name: 'todoapp'} }
293 | ]
294 | });
295 |
296 | // app Vue instance
297 | new Vue({
298 | router,
299 | store,
300 | created() {
301 | if (getCookie('auth')) {
302 | this.$store.dispatch('loggedIn');
303 | }
304 | },
305 | computed: {
306 | errorMessage () {
307 | return this.$store.getters.errorMessage;
308 | },
309 | loggedIn() {
310 | return this.$store.getters.loggedIn;
311 | }
312 | }
313 | }).$mount('#app');
314 |
315 | function getCookie(name){
316 | var pattern = RegExp(name + '=.[^;]*');
317 | var matched = document.cookie.match(pattern);
318 | if (matched) {
319 | return true;
320 | }
321 | return false;
322 | }
323 |
324 | var el = document.getElementById('todo-list');
325 | if (el) {
326 | Sortable.create(el, {
327 | animation: 150
328 | });
329 | }
330 |
331 | })();
332 |
--------------------------------------------------------------------------------
/cypress.json:
--------------------------------------------------------------------------------
1 | {
2 | "viewportWidth": 600,
3 | "viewportHeight": 800,
4 | "baseUrl": "http://localhost:3000",
5 | "defaultCommandTimeout": 4000,
6 | "$schema": "https://on.cypress.io/cypress.schema.json"
7 | }
8 |
--------------------------------------------------------------------------------
/cypress/fixtures/fiveTodos.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "title": "buy milk",
4 | "completed": false,
5 | "id": "1"
6 | },
7 | {
8 | "title": "wash dishes",
9 | "completed": false,
10 | "id": "2"
11 | },
12 | {
13 | "title": "clean windows",
14 | "completed": false,
15 | "id": "3"
16 | },
17 | {
18 | "title": "clean up bedroom",
19 | "completed": false,
20 | "id": "4"
21 | },
22 | {
23 | "title": "wash clothes",
24 | "completed": false,
25 | "id": "5"
26 | }
27 | ]
--------------------------------------------------------------------------------
/cypress/fixtures/threeTodos.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "title": "buy milk",
4 | "completed": false,
5 | "id": "1"
6 | },
7 | {
8 | "title": "wash dishes",
9 | "completed": false,
10 | "id": "2"
11 | },
12 | {
13 | "title": "clean windows",
14 | "completed": false,
15 | "id": "3"
16 | }
17 | ]
--------------------------------------------------------------------------------
/cypress/fixtures/twoTodos.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "title": "buy milk",
4 | "completed": false,
5 | "id": "1"
6 | },
7 | {
8 | "title": "wash dishes",
9 | "completed": false,
10 | "id": "2"
11 | }
12 | ]
--------------------------------------------------------------------------------
/cypress/integration/01-using-should.js:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | const todos = require('../fixtures/twoTodos')
4 |
5 | beforeEach( () => {
6 |
7 | cy
8 | .request('POST', '/todos/seed', todos)
9 |
10 | cy
11 | .visit('localhost:3000');
12 |
13 | });
14 |
15 | it('Checks texts of todo items', () => {
16 |
17 | cy
18 | .get('.todo')
19 | .eq(0)
20 | .should('contain.text', 'buy milk');
21 |
22 | cy
23 | .get('.todo')
24 | .eq(1)
25 | .should('contain.text', 'wash dishes');
26 |
27 | });
--------------------------------------------------------------------------------
/cypress/integration/02-using-then.js:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | const todos = require('../fixtures/twoTodos')
4 |
5 | beforeEach( () => {
6 |
7 | cy
8 | .request('POST', '/todos/seed', todos)
9 |
10 | cy
11 | .visit('localhost:3000');
12 |
13 | });
14 |
15 | it('Checks texts of todos items', () => {
16 |
17 | cy
18 | .get('.todo').then( items => {
19 |
20 | expect(items[0]).to.contain.text('buy milk')
21 | expect(items[1]).to.contain.text('wash dishes')
22 |
23 | })
24 |
25 | });
--------------------------------------------------------------------------------
/cypress/integration/03-using-each.js:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | const todos = require('../fixtures/fiveTodos')
4 | const todosTitles = ["buy milk", "wash dishes", "clean windows", "clean up bedroom", "wash clothes"]
5 |
6 | beforeEach( () => {
7 |
8 | cy
9 | .request('POST', '/todos/seed', todos)
10 |
11 | cy
12 | .visit('localhost:3000');
13 |
14 | });
15 |
16 | it('Checks texts of todos item', () => {
17 |
18 | cy
19 | .get('.todo').each( (item, index) => {
20 |
21 | cy
22 | .wrap(item)
23 | .should('contain.text', todosTitles[index])
24 |
25 | })
26 |
27 | });
--------------------------------------------------------------------------------
/cypress/integration/04-first-position-fail.js:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | const todos = require('../fixtures/threeTodos')
4 |
5 | beforeEach( () => {
6 |
7 | cy
8 | .request('POST', '/todos/seed', todos)
9 |
10 | cy
11 | .visit('localhost:3000');
12 |
13 | });
14 |
15 | it('Has first todo item with text "wash dishes"', () => {
16 |
17 | cy
18 | .get('.todo')
19 | .eq(0)
20 | .should('contain.text', 'wash dishes');
21 |
22 | });
--------------------------------------------------------------------------------
/cypress/integration/05-first-position-pass.js:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | const todos = require('../fixtures/threeTodos')
4 |
5 | beforeEach( () => {
6 |
7 | cy
8 | .request('POST', '/todos/seed', todos)
9 |
10 | cy
11 | .visit('localhost:3000');
12 |
13 | });
14 |
15 | it('Has first todo item with text "wash dishes"', () => {
16 |
17 | cy
18 | .get('.todo')
19 | .should('have.length', 2)
20 | .eq(0)
21 | .should('contain.text', 'wash dishes');
22 |
23 | });
--------------------------------------------------------------------------------
/cypress/integration/06-using-should-function.js:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | const todos = require('../fixtures/twoTodos')
4 |
5 | beforeEach( () => {
6 |
7 | cy
8 | .request('POST', '/todos/seed', todos)
9 |
10 | cy
11 | .visit('localhost:3000');
12 |
13 | });
14 |
15 | it('Has first todo item with text "wash dishes"', () => {
16 |
17 | cy
18 | .get('.todo').should( items => {
19 |
20 | expect(items[0]).to.contain.text('wash dishes')
21 | expect(items[1]).to.contain.text('buy milk')
22 |
23 | })
24 |
25 | });
--------------------------------------------------------------------------------
/data.json:
--------------------------------------------------------------------------------
1 | {
2 | "todos": [
3 | {
4 | "title": "buy milk",
5 | "completed": false,
6 | "id": "1"
7 | },
8 | {
9 | "title": "wash dishes",
10 | "completed": false,
11 | "id": "2"
12 | }
13 | ],
14 | "accounts": []
15 | }
--------------------------------------------------------------------------------
/img/dragndrop.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/filiphric/testing-lists/11b0ed7c1653e6661a3b995cb0ff0807d9c1304f/img/dragndrop.gif
--------------------------------------------------------------------------------
/img/login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/filiphric/testing-lists/11b0ed7c1653e6661a3b995cb0ff0807d9c1304f/img/login.png
--------------------------------------------------------------------------------
/img/signup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/filiphric/testing-lists/11b0ed7c1653e6661a3b995cb0ff0807d9c1304f/img/signup.png
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | TodoMVC - Test automation in Cypress
8 |
9 |
10 |
15 |
16 |
17 |
18 |
40 |
52 |
67 |
68 |
69 |
70 |
78 | {{ errorMessage.text }}
79 | User is logged in
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/json-server.json:
--------------------------------------------------------------------------------
1 | {
2 | "port": 3000
3 | }
--------------------------------------------------------------------------------
/middleware.js:
--------------------------------------------------------------------------------
1 | const sendmail = require('sendmail')();
2 |
3 | module.exports = (req, res, next) => {
4 |
5 | const db = req.app.db;
6 |
7 | if (req.method === 'GET' && req.path === '/login') {
8 | return res.sendFile(`${__dirname}/index.html`);
9 | }
10 |
11 | if (req.method === 'GET' && req.path === '/signup') {
12 | return res.sendFile(`${__dirname}/index.html`);
13 | }
14 |
15 | if (req.method === 'POST' && req.path === '/signup') {
16 |
17 | if (!req.body.email || !req.body.password) {
18 | let response = res.status(401).jsonp({
19 | error: 'email and password are required'
20 | });
21 | return response;
22 | }
23 |
24 | if (db.get('accounts').find({email: req.body.email}).value()) {
25 | let response = res.status(409).jsonp({
26 | error: 'email is already taken'
27 | });
28 | return response;
29 | } else {
30 |
31 | // return auth cookie
32 | res.header('Set-Cookie', 'auth=true;');
33 |
34 | // send welcome email if header is true
35 | if (req.headers.sendwelcomeemail === 'true') {
36 |
37 | sendmail({
38 | from: 'todomvc@filiphric.sk',
39 | to: req.body.email,
40 | subject: 'Welcome to TodoMVC app',
41 | html: 'Your account was successfully created!\nIn the meantime, subscribe to my YouTube channel for Cypress tips!',
42 | }, function(err, reply) {
43 | console.log(err && err.stack);
44 | console.dir(reply);
45 | });
46 |
47 | }
48 |
49 | db.get('accounts').push(req.body).write();
50 | let response = res.status(201).jsonp(req.body);
51 | return response;
52 | }
53 |
54 | }
55 |
56 | if (req.method === 'POST' && req.path === '/reset') {
57 | db
58 | .setState({
59 | 'todos': [],
60 | 'accounts': []
61 | })
62 | .write();
63 |
64 | return res.sendStatus(204);
65 | }
66 |
67 | if (req.method === 'DELETE' && req.path === '/todos') {
68 | db.set('todos', []).write();
69 |
70 | return res.sendStatus(204);
71 | }
72 |
73 | if (req.method === 'POST' && req.path === '/todos/seed') {
74 |
75 | db.set('todos', req.body).write();
76 |
77 | return res.sendStatus(201);
78 | }
79 |
80 | if (req.method === 'DELETE' && req.path === '/accounts') {
81 | db.set('accounts', []).write();
82 |
83 | return res.sendStatus(204);
84 | }
85 |
86 | if (req.method === 'POST' && req.path === '/login') {
87 |
88 | if (db.get('accounts').find(req.body).value()) {
89 | res.header('Set-Cookie', 'auth=true;');
90 | let response = res.status(200).jsonp({
91 | message: 'User is logged in'
92 | });
93 | return response;
94 |
95 | } else {
96 |
97 | return res.sendStatus(401);
98 |
99 | }
100 |
101 | }
102 |
103 | next();
104 |
105 | };
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "todomvc-testing",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@sindresorhus/is": {
8 | "version": "0.14.0",
9 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
10 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
11 | "dev": true
12 | },
13 | "@szmarczak/http-timer": {
14 | "version": "1.1.2",
15 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
16 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
17 | "dev": true,
18 | "requires": {
19 | "defer-to-connect": "^1.0.1"
20 | }
21 | },
22 | "accepts": {
23 | "version": "1.3.7",
24 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
25 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
26 | "dev": true,
27 | "requires": {
28 | "mime-types": "~2.1.24",
29 | "negotiator": "0.6.2"
30 | }
31 | },
32 | "addressparser": {
33 | "version": "1.0.1",
34 | "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz",
35 | "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=",
36 | "dev": true
37 | },
38 | "ajv": {
39 | "version": "6.12.0",
40 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
41 | "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
42 | "dev": true,
43 | "requires": {
44 | "fast-deep-equal": "^3.1.1",
45 | "fast-json-stable-stringify": "^2.0.0",
46 | "json-schema-traverse": "^0.4.1",
47 | "uri-js": "^4.2.2"
48 | }
49 | },
50 | "ansi-align": {
51 | "version": "3.0.0",
52 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
53 | "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
54 | "dev": true,
55 | "requires": {
56 | "string-width": "^3.0.0"
57 | }
58 | },
59 | "ansi-regex": {
60 | "version": "4.1.0",
61 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
62 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
63 | "dev": true
64 | },
65 | "ansi-styles": {
66 | "version": "3.2.1",
67 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
68 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
69 | "dev": true,
70 | "requires": {
71 | "color-convert": "^1.9.0"
72 | }
73 | },
74 | "array-flatten": {
75 | "version": "1.1.1",
76 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
77 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
78 | "dev": true
79 | },
80 | "asn1": {
81 | "version": "0.2.4",
82 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
83 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
84 | "dev": true,
85 | "requires": {
86 | "safer-buffer": "~2.1.0"
87 | }
88 | },
89 | "assert-plus": {
90 | "version": "1.0.0",
91 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
92 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
93 | "dev": true
94 | },
95 | "asynckit": {
96 | "version": "0.4.0",
97 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
98 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
99 | "dev": true
100 | },
101 | "aws-sign2": {
102 | "version": "0.7.0",
103 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
104 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
105 | "dev": true
106 | },
107 | "aws4": {
108 | "version": "1.9.1",
109 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
110 | "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
111 | "dev": true
112 | },
113 | "basic-auth": {
114 | "version": "2.0.1",
115 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
116 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
117 | "dev": true,
118 | "requires": {
119 | "safe-buffer": "5.1.2"
120 | }
121 | },
122 | "bcrypt-pbkdf": {
123 | "version": "1.0.2",
124 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
125 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
126 | "dev": true,
127 | "requires": {
128 | "tweetnacl": "^0.14.3"
129 | }
130 | },
131 | "body-parser": {
132 | "version": "1.19.0",
133 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
134 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
135 | "dev": true,
136 | "requires": {
137 | "bytes": "3.1.0",
138 | "content-type": "~1.0.4",
139 | "debug": "2.6.9",
140 | "depd": "~1.1.2",
141 | "http-errors": "1.7.2",
142 | "iconv-lite": "0.4.24",
143 | "on-finished": "~2.3.0",
144 | "qs": "6.7.0",
145 | "raw-body": "2.4.0",
146 | "type-is": "~1.6.17"
147 | }
148 | },
149 | "boxen": {
150 | "version": "3.2.0",
151 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz",
152 | "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==",
153 | "dev": true,
154 | "requires": {
155 | "ansi-align": "^3.0.0",
156 | "camelcase": "^5.3.1",
157 | "chalk": "^2.4.2",
158 | "cli-boxes": "^2.2.0",
159 | "string-width": "^3.0.0",
160 | "term-size": "^1.2.0",
161 | "type-fest": "^0.3.0",
162 | "widest-line": "^2.0.0"
163 | }
164 | },
165 | "buildmail": {
166 | "version": "3.10.0",
167 | "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-3.10.0.tgz",
168 | "integrity": "sha1-xoJtcW55RbtvaxQ0tTmF4CmgMVk=",
169 | "dev": true,
170 | "requires": {
171 | "addressparser": "1.0.1",
172 | "libbase64": "0.1.0",
173 | "libmime": "2.1.0",
174 | "libqp": "1.1.0",
175 | "nodemailer-fetch": "1.6.0",
176 | "nodemailer-shared": "1.1.0"
177 | },
178 | "dependencies": {
179 | "iconv-lite": {
180 | "version": "0.4.13",
181 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz",
182 | "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=",
183 | "dev": true
184 | },
185 | "libmime": {
186 | "version": "2.1.0",
187 | "resolved": "https://registry.npmjs.org/libmime/-/libmime-2.1.0.tgz",
188 | "integrity": "sha1-Ubx23iKDFh65BRxLyArtcT5P0c0=",
189 | "dev": true,
190 | "requires": {
191 | "iconv-lite": "0.4.13",
192 | "libbase64": "0.1.0",
193 | "libqp": "1.1.0"
194 | }
195 | }
196 | }
197 | },
198 | "bytes": {
199 | "version": "3.1.0",
200 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
201 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
202 | "dev": true
203 | },
204 | "cacheable-request": {
205 | "version": "6.1.0",
206 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
207 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
208 | "dev": true,
209 | "requires": {
210 | "clone-response": "^1.0.2",
211 | "get-stream": "^5.1.0",
212 | "http-cache-semantics": "^4.0.0",
213 | "keyv": "^3.0.0",
214 | "lowercase-keys": "^2.0.0",
215 | "normalize-url": "^4.1.0",
216 | "responselike": "^1.0.2"
217 | },
218 | "dependencies": {
219 | "get-stream": {
220 | "version": "5.1.0",
221 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
222 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
223 | "dev": true,
224 | "requires": {
225 | "pump": "^3.0.0"
226 | }
227 | },
228 | "lowercase-keys": {
229 | "version": "2.0.0",
230 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
231 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
232 | "dev": true
233 | }
234 | }
235 | },
236 | "camelcase": {
237 | "version": "5.3.1",
238 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
239 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
240 | "dev": true
241 | },
242 | "caseless": {
243 | "version": "0.12.0",
244 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
245 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
246 | "dev": true
247 | },
248 | "chalk": {
249 | "version": "2.4.2",
250 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
251 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
252 | "dev": true,
253 | "requires": {
254 | "ansi-styles": "^3.2.1",
255 | "escape-string-regexp": "^1.0.5",
256 | "supports-color": "^5.3.0"
257 | }
258 | },
259 | "ci-info": {
260 | "version": "2.0.0",
261 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
262 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
263 | "dev": true
264 | },
265 | "cli-boxes": {
266 | "version": "2.2.0",
267 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz",
268 | "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==",
269 | "dev": true
270 | },
271 | "cliui": {
272 | "version": "5.0.0",
273 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
274 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
275 | "dev": true,
276 | "requires": {
277 | "string-width": "^3.1.0",
278 | "strip-ansi": "^5.2.0",
279 | "wrap-ansi": "^5.1.0"
280 | }
281 | },
282 | "clone-response": {
283 | "version": "1.0.2",
284 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
285 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
286 | "dev": true,
287 | "requires": {
288 | "mimic-response": "^1.0.0"
289 | }
290 | },
291 | "color-convert": {
292 | "version": "1.9.3",
293 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
294 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
295 | "dev": true,
296 | "requires": {
297 | "color-name": "1.1.3"
298 | }
299 | },
300 | "color-name": {
301 | "version": "1.1.3",
302 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
303 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
304 | "dev": true
305 | },
306 | "combined-stream": {
307 | "version": "1.0.8",
308 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
309 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
310 | "dev": true,
311 | "requires": {
312 | "delayed-stream": "~1.0.0"
313 | }
314 | },
315 | "compressible": {
316 | "version": "2.0.18",
317 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
318 | "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
319 | "dev": true,
320 | "requires": {
321 | "mime-db": ">= 1.43.0 < 2"
322 | }
323 | },
324 | "compression": {
325 | "version": "1.7.4",
326 | "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
327 | "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
328 | "dev": true,
329 | "requires": {
330 | "accepts": "~1.3.5",
331 | "bytes": "3.0.0",
332 | "compressible": "~2.0.16",
333 | "debug": "2.6.9",
334 | "on-headers": "~1.0.2",
335 | "safe-buffer": "5.1.2",
336 | "vary": "~1.1.2"
337 | },
338 | "dependencies": {
339 | "bytes": {
340 | "version": "3.0.0",
341 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
342 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
343 | "dev": true
344 | }
345 | }
346 | },
347 | "configstore": {
348 | "version": "4.0.0",
349 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz",
350 | "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==",
351 | "dev": true,
352 | "requires": {
353 | "dot-prop": "^4.1.0",
354 | "graceful-fs": "^4.1.2",
355 | "make-dir": "^1.0.0",
356 | "unique-string": "^1.0.0",
357 | "write-file-atomic": "^2.0.0",
358 | "xdg-basedir": "^3.0.0"
359 | }
360 | },
361 | "connect-pause": {
362 | "version": "0.1.1",
363 | "resolved": "https://registry.npmjs.org/connect-pause/-/connect-pause-0.1.1.tgz",
364 | "integrity": "sha1-smmyu4Ldsaw9tQmcD7WCq6mfs3o=",
365 | "dev": true
366 | },
367 | "content-disposition": {
368 | "version": "0.5.3",
369 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
370 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
371 | "dev": true,
372 | "requires": {
373 | "safe-buffer": "5.1.2"
374 | }
375 | },
376 | "content-type": {
377 | "version": "1.0.4",
378 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
379 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
380 | "dev": true
381 | },
382 | "cookie": {
383 | "version": "0.4.0",
384 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
385 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
386 | "dev": true
387 | },
388 | "cookie-signature": {
389 | "version": "1.0.6",
390 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
391 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
392 | "dev": true
393 | },
394 | "core-util-is": {
395 | "version": "1.0.2",
396 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
397 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
398 | "dev": true
399 | },
400 | "cors": {
401 | "version": "2.8.5",
402 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
403 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
404 | "dev": true,
405 | "requires": {
406 | "object-assign": "^4",
407 | "vary": "^1"
408 | }
409 | },
410 | "cross-spawn": {
411 | "version": "5.1.0",
412 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
413 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
414 | "dev": true,
415 | "requires": {
416 | "lru-cache": "^4.0.1",
417 | "shebang-command": "^1.2.0",
418 | "which": "^1.2.9"
419 | }
420 | },
421 | "crypto-random-string": {
422 | "version": "1.0.0",
423 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
424 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
425 | "dev": true
426 | },
427 | "dashdash": {
428 | "version": "1.14.1",
429 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
430 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
431 | "dev": true,
432 | "requires": {
433 | "assert-plus": "^1.0.0"
434 | }
435 | },
436 | "debug": {
437 | "version": "2.6.9",
438 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
439 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
440 | "dev": true,
441 | "requires": {
442 | "ms": "2.0.0"
443 | }
444 | },
445 | "decamelize": {
446 | "version": "1.2.0",
447 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
448 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
449 | "dev": true
450 | },
451 | "decompress-response": {
452 | "version": "3.3.0",
453 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
454 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
455 | "dev": true,
456 | "requires": {
457 | "mimic-response": "^1.0.0"
458 | }
459 | },
460 | "deep-extend": {
461 | "version": "0.6.0",
462 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
463 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
464 | "dev": true
465 | },
466 | "defer-to-connect": {
467 | "version": "1.1.3",
468 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
469 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
470 | "dev": true
471 | },
472 | "delayed-stream": {
473 | "version": "1.0.0",
474 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
475 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
476 | "dev": true
477 | },
478 | "depd": {
479 | "version": "1.1.2",
480 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
481 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
482 | "dev": true
483 | },
484 | "destroy": {
485 | "version": "1.0.4",
486 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
487 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
488 | "dev": true
489 | },
490 | "dkim-signer": {
491 | "version": "0.2.2",
492 | "resolved": "https://registry.npmjs.org/dkim-signer/-/dkim-signer-0.2.2.tgz",
493 | "integrity": "sha1-qoHsBx7u02IngbqpIgRNeADl8wg=",
494 | "dev": true,
495 | "requires": {
496 | "libmime": "^2.0.3"
497 | }
498 | },
499 | "dot-prop": {
500 | "version": "4.2.0",
501 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
502 | "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
503 | "dev": true,
504 | "requires": {
505 | "is-obj": "^1.0.0"
506 | }
507 | },
508 | "duplexer3": {
509 | "version": "0.1.4",
510 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
511 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
512 | "dev": true
513 | },
514 | "ecc-jsbn": {
515 | "version": "0.1.2",
516 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
517 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
518 | "dev": true,
519 | "requires": {
520 | "jsbn": "~0.1.0",
521 | "safer-buffer": "^2.1.0"
522 | }
523 | },
524 | "ee-first": {
525 | "version": "1.1.1",
526 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
527 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
528 | "dev": true
529 | },
530 | "emoji-regex": {
531 | "version": "7.0.3",
532 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
533 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
534 | "dev": true
535 | },
536 | "encodeurl": {
537 | "version": "1.0.2",
538 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
539 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
540 | "dev": true
541 | },
542 | "end-of-stream": {
543 | "version": "1.4.4",
544 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
545 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
546 | "dev": true,
547 | "requires": {
548 | "once": "^1.4.0"
549 | }
550 | },
551 | "errorhandler": {
552 | "version": "1.5.1",
553 | "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz",
554 | "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==",
555 | "dev": true,
556 | "requires": {
557 | "accepts": "~1.3.7",
558 | "escape-html": "~1.0.3"
559 | }
560 | },
561 | "escape-html": {
562 | "version": "1.0.3",
563 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
564 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
565 | "dev": true
566 | },
567 | "escape-string-regexp": {
568 | "version": "1.0.5",
569 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
570 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
571 | "dev": true
572 | },
573 | "etag": {
574 | "version": "1.8.1",
575 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
576 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
577 | "dev": true
578 | },
579 | "execa": {
580 | "version": "0.7.0",
581 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
582 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
583 | "dev": true,
584 | "requires": {
585 | "cross-spawn": "^5.0.1",
586 | "get-stream": "^3.0.0",
587 | "is-stream": "^1.1.0",
588 | "npm-run-path": "^2.0.0",
589 | "p-finally": "^1.0.0",
590 | "signal-exit": "^3.0.0",
591 | "strip-eof": "^1.0.0"
592 | }
593 | },
594 | "express": {
595 | "version": "4.17.1",
596 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
597 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
598 | "dev": true,
599 | "requires": {
600 | "accepts": "~1.3.7",
601 | "array-flatten": "1.1.1",
602 | "body-parser": "1.19.0",
603 | "content-disposition": "0.5.3",
604 | "content-type": "~1.0.4",
605 | "cookie": "0.4.0",
606 | "cookie-signature": "1.0.6",
607 | "debug": "2.6.9",
608 | "depd": "~1.1.2",
609 | "encodeurl": "~1.0.2",
610 | "escape-html": "~1.0.3",
611 | "etag": "~1.8.1",
612 | "finalhandler": "~1.1.2",
613 | "fresh": "0.5.2",
614 | "merge-descriptors": "1.0.1",
615 | "methods": "~1.1.2",
616 | "on-finished": "~2.3.0",
617 | "parseurl": "~1.3.3",
618 | "path-to-regexp": "0.1.7",
619 | "proxy-addr": "~2.0.5",
620 | "qs": "6.7.0",
621 | "range-parser": "~1.2.1",
622 | "safe-buffer": "5.1.2",
623 | "send": "0.17.1",
624 | "serve-static": "1.14.1",
625 | "setprototypeof": "1.1.1",
626 | "statuses": "~1.5.0",
627 | "type-is": "~1.6.18",
628 | "utils-merge": "1.0.1",
629 | "vary": "~1.1.2"
630 | }
631 | },
632 | "express-urlrewrite": {
633 | "version": "1.2.0",
634 | "resolved": "https://registry.npmjs.org/express-urlrewrite/-/express-urlrewrite-1.2.0.tgz",
635 | "integrity": "sha1-jmZ7d2H/HH/9sO+gXWQDU4fII+s=",
636 | "dev": true,
637 | "requires": {
638 | "debug": "*",
639 | "path-to-regexp": "^1.0.3"
640 | },
641 | "dependencies": {
642 | "path-to-regexp": {
643 | "version": "1.8.0",
644 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
645 | "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
646 | "dev": true,
647 | "requires": {
648 | "isarray": "0.0.1"
649 | }
650 | }
651 | }
652 | },
653 | "extend": {
654 | "version": "3.0.2",
655 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
656 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
657 | "dev": true
658 | },
659 | "extsprintf": {
660 | "version": "1.3.0",
661 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
662 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
663 | "dev": true
664 | },
665 | "fast-deep-equal": {
666 | "version": "3.1.1",
667 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
668 | "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
669 | "dev": true
670 | },
671 | "fast-json-stable-stringify": {
672 | "version": "2.1.0",
673 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
674 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
675 | "dev": true
676 | },
677 | "finalhandler": {
678 | "version": "1.1.2",
679 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
680 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
681 | "dev": true,
682 | "requires": {
683 | "debug": "2.6.9",
684 | "encodeurl": "~1.0.2",
685 | "escape-html": "~1.0.3",
686 | "on-finished": "~2.3.0",
687 | "parseurl": "~1.3.3",
688 | "statuses": "~1.5.0",
689 | "unpipe": "~1.0.0"
690 | }
691 | },
692 | "find-up": {
693 | "version": "3.0.0",
694 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
695 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
696 | "dev": true,
697 | "requires": {
698 | "locate-path": "^3.0.0"
699 | }
700 | },
701 | "forever-agent": {
702 | "version": "0.6.1",
703 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
704 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
705 | "dev": true
706 | },
707 | "form-data": {
708 | "version": "2.3.3",
709 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
710 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
711 | "dev": true,
712 | "requires": {
713 | "asynckit": "^0.4.0",
714 | "combined-stream": "^1.0.6",
715 | "mime-types": "^2.1.12"
716 | }
717 | },
718 | "forwarded": {
719 | "version": "0.1.2",
720 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
721 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
722 | "dev": true
723 | },
724 | "fresh": {
725 | "version": "0.5.2",
726 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
727 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
728 | "dev": true
729 | },
730 | "get-caller-file": {
731 | "version": "2.0.5",
732 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
733 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
734 | "dev": true
735 | },
736 | "get-stream": {
737 | "version": "3.0.0",
738 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
739 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
740 | "dev": true
741 | },
742 | "getpass": {
743 | "version": "0.1.7",
744 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
745 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
746 | "dev": true,
747 | "requires": {
748 | "assert-plus": "^1.0.0"
749 | }
750 | },
751 | "global-dirs": {
752 | "version": "0.1.1",
753 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
754 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
755 | "dev": true,
756 | "requires": {
757 | "ini": "^1.3.4"
758 | }
759 | },
760 | "got": {
761 | "version": "9.6.0",
762 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
763 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
764 | "dev": true,
765 | "requires": {
766 | "@sindresorhus/is": "^0.14.0",
767 | "@szmarczak/http-timer": "^1.1.2",
768 | "cacheable-request": "^6.0.0",
769 | "decompress-response": "^3.3.0",
770 | "duplexer3": "^0.1.4",
771 | "get-stream": "^4.1.0",
772 | "lowercase-keys": "^1.0.1",
773 | "mimic-response": "^1.0.1",
774 | "p-cancelable": "^1.0.0",
775 | "to-readable-stream": "^1.0.0",
776 | "url-parse-lax": "^3.0.0"
777 | },
778 | "dependencies": {
779 | "get-stream": {
780 | "version": "4.1.0",
781 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
782 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
783 | "dev": true,
784 | "requires": {
785 | "pump": "^3.0.0"
786 | }
787 | }
788 | }
789 | },
790 | "graceful-fs": {
791 | "version": "4.2.3",
792 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
793 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
794 | "dev": true
795 | },
796 | "har-schema": {
797 | "version": "2.0.0",
798 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
799 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
800 | "dev": true
801 | },
802 | "har-validator": {
803 | "version": "5.1.3",
804 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
805 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
806 | "dev": true,
807 | "requires": {
808 | "ajv": "^6.5.5",
809 | "har-schema": "^2.0.0"
810 | }
811 | },
812 | "has-flag": {
813 | "version": "3.0.0",
814 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
815 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
816 | "dev": true
817 | },
818 | "has-yarn": {
819 | "version": "2.1.0",
820 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
821 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
822 | "dev": true
823 | },
824 | "http-cache-semantics": {
825 | "version": "4.1.0",
826 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
827 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
828 | "dev": true
829 | },
830 | "http-errors": {
831 | "version": "1.7.2",
832 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
833 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
834 | "dev": true,
835 | "requires": {
836 | "depd": "~1.1.2",
837 | "inherits": "2.0.3",
838 | "setprototypeof": "1.1.1",
839 | "statuses": ">= 1.5.0 < 2",
840 | "toidentifier": "1.0.0"
841 | }
842 | },
843 | "http-signature": {
844 | "version": "1.2.0",
845 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
846 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
847 | "dev": true,
848 | "requires": {
849 | "assert-plus": "^1.0.0",
850 | "jsprim": "^1.2.2",
851 | "sshpk": "^1.7.0"
852 | }
853 | },
854 | "iconv-lite": {
855 | "version": "0.4.24",
856 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
857 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
858 | "dev": true,
859 | "requires": {
860 | "safer-buffer": ">= 2.1.2 < 3"
861 | }
862 | },
863 | "import-lazy": {
864 | "version": "2.1.0",
865 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
866 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
867 | "dev": true
868 | },
869 | "imurmurhash": {
870 | "version": "0.1.4",
871 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
872 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
873 | "dev": true
874 | },
875 | "inherits": {
876 | "version": "2.0.3",
877 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
878 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
879 | "dev": true
880 | },
881 | "ini": {
882 | "version": "1.3.5",
883 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
884 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
885 | "dev": true
886 | },
887 | "ipaddr.js": {
888 | "version": "1.9.1",
889 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
890 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
891 | "dev": true
892 | },
893 | "is-ci": {
894 | "version": "2.0.0",
895 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
896 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
897 | "dev": true,
898 | "requires": {
899 | "ci-info": "^2.0.0"
900 | }
901 | },
902 | "is-fullwidth-code-point": {
903 | "version": "2.0.0",
904 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
905 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
906 | "dev": true
907 | },
908 | "is-installed-globally": {
909 | "version": "0.1.0",
910 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
911 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
912 | "dev": true,
913 | "requires": {
914 | "global-dirs": "^0.1.0",
915 | "is-path-inside": "^1.0.0"
916 | }
917 | },
918 | "is-npm": {
919 | "version": "3.0.0",
920 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-3.0.0.tgz",
921 | "integrity": "sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==",
922 | "dev": true
923 | },
924 | "is-obj": {
925 | "version": "1.0.1",
926 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
927 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
928 | "dev": true
929 | },
930 | "is-path-inside": {
931 | "version": "1.0.1",
932 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
933 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
934 | "dev": true,
935 | "requires": {
936 | "path-is-inside": "^1.0.1"
937 | }
938 | },
939 | "is-promise": {
940 | "version": "2.1.0",
941 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
942 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
943 | "dev": true
944 | },
945 | "is-stream": {
946 | "version": "1.1.0",
947 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
948 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
949 | "dev": true
950 | },
951 | "is-typedarray": {
952 | "version": "1.0.0",
953 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
954 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
955 | "dev": true
956 | },
957 | "is-yarn-global": {
958 | "version": "0.3.0",
959 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
960 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
961 | "dev": true
962 | },
963 | "isarray": {
964 | "version": "0.0.1",
965 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
966 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
967 | "dev": true
968 | },
969 | "isexe": {
970 | "version": "2.0.0",
971 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
972 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
973 | "dev": true
974 | },
975 | "isstream": {
976 | "version": "0.1.2",
977 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
978 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
979 | "dev": true
980 | },
981 | "jju": {
982 | "version": "1.4.0",
983 | "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz",
984 | "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=",
985 | "dev": true
986 | },
987 | "jsbn": {
988 | "version": "0.1.1",
989 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
990 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
991 | "dev": true
992 | },
993 | "json-buffer": {
994 | "version": "3.0.0",
995 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
996 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
997 | "dev": true
998 | },
999 | "json-parse-helpfulerror": {
1000 | "version": "1.0.3",
1001 | "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
1002 | "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=",
1003 | "dev": true,
1004 | "requires": {
1005 | "jju": "^1.1.0"
1006 | }
1007 | },
1008 | "json-schema": {
1009 | "version": "0.2.3",
1010 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
1011 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
1012 | "dev": true
1013 | },
1014 | "json-schema-traverse": {
1015 | "version": "0.4.1",
1016 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1017 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1018 | "dev": true
1019 | },
1020 | "json-server": {
1021 | "version": "0.15.1",
1022 | "resolved": "https://registry.npmjs.org/json-server/-/json-server-0.15.1.tgz",
1023 | "integrity": "sha512-6Vc6tC1uLasnMd6Ksnq+4gSQcRqLuSJ/yLoIG4fr4P8f5dAR1gbCqgaVRlk8jfRune0NXcrfDrz7liwAD2WEeQ==",
1024 | "dev": true,
1025 | "requires": {
1026 | "body-parser": "^1.19.0",
1027 | "chalk": "^2.4.2",
1028 | "compression": "^1.7.4",
1029 | "connect-pause": "^0.1.1",
1030 | "cors": "^2.8.5",
1031 | "errorhandler": "^1.5.1",
1032 | "express": "^4.17.1",
1033 | "express-urlrewrite": "^1.2.0",
1034 | "json-parse-helpfulerror": "^1.0.3",
1035 | "lodash": "^4.17.15",
1036 | "lodash-id": "^0.14.0",
1037 | "lowdb": "^1.0.0",
1038 | "method-override": "^3.0.0",
1039 | "morgan": "^1.9.1",
1040 | "nanoid": "^2.1.0",
1041 | "object-assign": "^4.1.1",
1042 | "please-upgrade-node": "^3.2.0",
1043 | "pluralize": "^8.0.0",
1044 | "request": "^2.88.0",
1045 | "server-destroy": "^1.0.1",
1046 | "update-notifier": "^3.0.1",
1047 | "yargs": "^14.0.0"
1048 | }
1049 | },
1050 | "json-stringify-safe": {
1051 | "version": "5.0.1",
1052 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1053 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
1054 | "dev": true
1055 | },
1056 | "jsprim": {
1057 | "version": "1.4.1",
1058 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
1059 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
1060 | "dev": true,
1061 | "requires": {
1062 | "assert-plus": "1.0.0",
1063 | "extsprintf": "1.3.0",
1064 | "json-schema": "0.2.3",
1065 | "verror": "1.10.0"
1066 | }
1067 | },
1068 | "keyv": {
1069 | "version": "3.1.0",
1070 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
1071 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
1072 | "dev": true,
1073 | "requires": {
1074 | "json-buffer": "3.0.0"
1075 | }
1076 | },
1077 | "latest-version": {
1078 | "version": "5.1.0",
1079 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
1080 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
1081 | "dev": true,
1082 | "requires": {
1083 | "package-json": "^6.3.0"
1084 | }
1085 | },
1086 | "libbase64": {
1087 | "version": "0.1.0",
1088 | "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz",
1089 | "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=",
1090 | "dev": true
1091 | },
1092 | "libmime": {
1093 | "version": "2.1.3",
1094 | "resolved": "https://registry.npmjs.org/libmime/-/libmime-2.1.3.tgz",
1095 | "integrity": "sha1-JQF8pataHpiq2+JyUBfPHUikKgw=",
1096 | "dev": true,
1097 | "requires": {
1098 | "iconv-lite": "0.4.15",
1099 | "libbase64": "0.1.0",
1100 | "libqp": "1.1.0"
1101 | },
1102 | "dependencies": {
1103 | "iconv-lite": {
1104 | "version": "0.4.15",
1105 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
1106 | "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=",
1107 | "dev": true
1108 | }
1109 | }
1110 | },
1111 | "libqp": {
1112 | "version": "1.1.0",
1113 | "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz",
1114 | "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=",
1115 | "dev": true
1116 | },
1117 | "locate-path": {
1118 | "version": "3.0.0",
1119 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
1120 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
1121 | "dev": true,
1122 | "requires": {
1123 | "p-locate": "^3.0.0",
1124 | "path-exists": "^3.0.0"
1125 | }
1126 | },
1127 | "lodash": {
1128 | "version": "4.17.15",
1129 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
1130 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
1131 | "dev": true
1132 | },
1133 | "lodash-id": {
1134 | "version": "0.14.0",
1135 | "resolved": "https://registry.npmjs.org/lodash-id/-/lodash-id-0.14.0.tgz",
1136 | "integrity": "sha1-uvSJNOVDobXWNG+MhGmLGoyAOJY=",
1137 | "dev": true
1138 | },
1139 | "lowdb": {
1140 | "version": "1.0.0",
1141 | "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz",
1142 | "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==",
1143 | "dev": true,
1144 | "requires": {
1145 | "graceful-fs": "^4.1.3",
1146 | "is-promise": "^2.1.0",
1147 | "lodash": "4",
1148 | "pify": "^3.0.0",
1149 | "steno": "^0.4.1"
1150 | }
1151 | },
1152 | "lowercase-keys": {
1153 | "version": "1.0.1",
1154 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
1155 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
1156 | "dev": true
1157 | },
1158 | "lru-cache": {
1159 | "version": "4.1.5",
1160 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
1161 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
1162 | "dev": true,
1163 | "requires": {
1164 | "pseudomap": "^1.0.2",
1165 | "yallist": "^2.1.2"
1166 | }
1167 | },
1168 | "mailcomposer": {
1169 | "version": "3.12.0",
1170 | "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-3.12.0.tgz",
1171 | "integrity": "sha1-nF4RiKqOHGLsi4a9Q0aBArY56Pk=",
1172 | "dev": true,
1173 | "requires": {
1174 | "buildmail": "3.10.0",
1175 | "libmime": "2.1.0"
1176 | },
1177 | "dependencies": {
1178 | "iconv-lite": {
1179 | "version": "0.4.13",
1180 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz",
1181 | "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=",
1182 | "dev": true
1183 | },
1184 | "libmime": {
1185 | "version": "2.1.0",
1186 | "resolved": "https://registry.npmjs.org/libmime/-/libmime-2.1.0.tgz",
1187 | "integrity": "sha1-Ubx23iKDFh65BRxLyArtcT5P0c0=",
1188 | "dev": true,
1189 | "requires": {
1190 | "iconv-lite": "0.4.13",
1191 | "libbase64": "0.1.0",
1192 | "libqp": "1.1.0"
1193 | }
1194 | }
1195 | }
1196 | },
1197 | "make-dir": {
1198 | "version": "1.3.0",
1199 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
1200 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
1201 | "dev": true,
1202 | "requires": {
1203 | "pify": "^3.0.0"
1204 | }
1205 | },
1206 | "media-typer": {
1207 | "version": "0.3.0",
1208 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1209 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
1210 | "dev": true
1211 | },
1212 | "merge-descriptors": {
1213 | "version": "1.0.1",
1214 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1215 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
1216 | "dev": true
1217 | },
1218 | "method-override": {
1219 | "version": "3.0.0",
1220 | "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz",
1221 | "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==",
1222 | "dev": true,
1223 | "requires": {
1224 | "debug": "3.1.0",
1225 | "methods": "~1.1.2",
1226 | "parseurl": "~1.3.2",
1227 | "vary": "~1.1.2"
1228 | },
1229 | "dependencies": {
1230 | "debug": {
1231 | "version": "3.1.0",
1232 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
1233 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
1234 | "dev": true,
1235 | "requires": {
1236 | "ms": "2.0.0"
1237 | }
1238 | }
1239 | }
1240 | },
1241 | "methods": {
1242 | "version": "1.1.2",
1243 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1244 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
1245 | "dev": true
1246 | },
1247 | "mime": {
1248 | "version": "1.6.0",
1249 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1250 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
1251 | "dev": true
1252 | },
1253 | "mime-db": {
1254 | "version": "1.43.0",
1255 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
1256 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==",
1257 | "dev": true
1258 | },
1259 | "mime-types": {
1260 | "version": "2.1.26",
1261 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
1262 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
1263 | "dev": true,
1264 | "requires": {
1265 | "mime-db": "1.43.0"
1266 | }
1267 | },
1268 | "mimic-response": {
1269 | "version": "1.0.1",
1270 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
1271 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
1272 | "dev": true
1273 | },
1274 | "minimist": {
1275 | "version": "1.2.5",
1276 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
1277 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
1278 | "dev": true
1279 | },
1280 | "morgan": {
1281 | "version": "1.10.0",
1282 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
1283 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
1284 | "dev": true,
1285 | "requires": {
1286 | "basic-auth": "~2.0.1",
1287 | "debug": "2.6.9",
1288 | "depd": "~2.0.0",
1289 | "on-finished": "~2.3.0",
1290 | "on-headers": "~1.0.2"
1291 | },
1292 | "dependencies": {
1293 | "depd": {
1294 | "version": "2.0.0",
1295 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
1296 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
1297 | "dev": true
1298 | }
1299 | }
1300 | },
1301 | "ms": {
1302 | "version": "2.0.0",
1303 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1304 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1305 | "dev": true
1306 | },
1307 | "nanoid": {
1308 | "version": "2.1.11",
1309 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz",
1310 | "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==",
1311 | "dev": true
1312 | },
1313 | "negotiator": {
1314 | "version": "0.6.2",
1315 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
1316 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
1317 | "dev": true
1318 | },
1319 | "nodemailer-fetch": {
1320 | "version": "1.6.0",
1321 | "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz",
1322 | "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=",
1323 | "dev": true
1324 | },
1325 | "nodemailer-shared": {
1326 | "version": "1.1.0",
1327 | "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz",
1328 | "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=",
1329 | "dev": true,
1330 | "requires": {
1331 | "nodemailer-fetch": "1.6.0"
1332 | }
1333 | },
1334 | "normalize-url": {
1335 | "version": "4.5.0",
1336 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
1337 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
1338 | "dev": true
1339 | },
1340 | "npm-run-path": {
1341 | "version": "2.0.2",
1342 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
1343 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
1344 | "dev": true,
1345 | "requires": {
1346 | "path-key": "^2.0.0"
1347 | }
1348 | },
1349 | "oauth-sign": {
1350 | "version": "0.9.0",
1351 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
1352 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
1353 | "dev": true
1354 | },
1355 | "object-assign": {
1356 | "version": "4.1.1",
1357 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1358 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1359 | "dev": true
1360 | },
1361 | "on-finished": {
1362 | "version": "2.3.0",
1363 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1364 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
1365 | "dev": true,
1366 | "requires": {
1367 | "ee-first": "1.1.1"
1368 | }
1369 | },
1370 | "on-headers": {
1371 | "version": "1.0.2",
1372 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
1373 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
1374 | "dev": true
1375 | },
1376 | "once": {
1377 | "version": "1.4.0",
1378 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1379 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1380 | "dev": true,
1381 | "requires": {
1382 | "wrappy": "1"
1383 | }
1384 | },
1385 | "p-cancelable": {
1386 | "version": "1.1.0",
1387 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
1388 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
1389 | "dev": true
1390 | },
1391 | "p-finally": {
1392 | "version": "1.0.0",
1393 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
1394 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
1395 | "dev": true
1396 | },
1397 | "p-limit": {
1398 | "version": "2.2.2",
1399 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
1400 | "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
1401 | "dev": true,
1402 | "requires": {
1403 | "p-try": "^2.0.0"
1404 | }
1405 | },
1406 | "p-locate": {
1407 | "version": "3.0.0",
1408 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
1409 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
1410 | "dev": true,
1411 | "requires": {
1412 | "p-limit": "^2.0.0"
1413 | }
1414 | },
1415 | "p-try": {
1416 | "version": "2.2.0",
1417 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
1418 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
1419 | "dev": true
1420 | },
1421 | "package-json": {
1422 | "version": "6.5.0",
1423 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
1424 | "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
1425 | "dev": true,
1426 | "requires": {
1427 | "got": "^9.6.0",
1428 | "registry-auth-token": "^4.0.0",
1429 | "registry-url": "^5.0.0",
1430 | "semver": "^6.2.0"
1431 | }
1432 | },
1433 | "parseurl": {
1434 | "version": "1.3.3",
1435 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1436 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
1437 | "dev": true
1438 | },
1439 | "path-exists": {
1440 | "version": "3.0.0",
1441 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
1442 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
1443 | "dev": true
1444 | },
1445 | "path-is-inside": {
1446 | "version": "1.0.2",
1447 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
1448 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
1449 | "dev": true
1450 | },
1451 | "path-key": {
1452 | "version": "2.0.1",
1453 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
1454 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
1455 | "dev": true
1456 | },
1457 | "path-to-regexp": {
1458 | "version": "0.1.7",
1459 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1460 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
1461 | "dev": true
1462 | },
1463 | "performance-now": {
1464 | "version": "2.1.0",
1465 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
1466 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
1467 | "dev": true
1468 | },
1469 | "pify": {
1470 | "version": "3.0.0",
1471 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
1472 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
1473 | "dev": true
1474 | },
1475 | "please-upgrade-node": {
1476 | "version": "3.2.0",
1477 | "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
1478 | "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
1479 | "dev": true,
1480 | "requires": {
1481 | "semver-compare": "^1.0.0"
1482 | }
1483 | },
1484 | "pluralize": {
1485 | "version": "8.0.0",
1486 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
1487 | "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
1488 | "dev": true
1489 | },
1490 | "prepend-http": {
1491 | "version": "2.0.0",
1492 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
1493 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
1494 | "dev": true
1495 | },
1496 | "proxy-addr": {
1497 | "version": "2.0.6",
1498 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
1499 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
1500 | "dev": true,
1501 | "requires": {
1502 | "forwarded": "~0.1.2",
1503 | "ipaddr.js": "1.9.1"
1504 | }
1505 | },
1506 | "pseudomap": {
1507 | "version": "1.0.2",
1508 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
1509 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
1510 | "dev": true
1511 | },
1512 | "psl": {
1513 | "version": "1.8.0",
1514 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
1515 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
1516 | "dev": true
1517 | },
1518 | "pump": {
1519 | "version": "3.0.0",
1520 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
1521 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
1522 | "dev": true,
1523 | "requires": {
1524 | "end-of-stream": "^1.1.0",
1525 | "once": "^1.3.1"
1526 | }
1527 | },
1528 | "punycode": {
1529 | "version": "2.1.1",
1530 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1531 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1532 | "dev": true
1533 | },
1534 | "qs": {
1535 | "version": "6.7.0",
1536 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
1537 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
1538 | "dev": true
1539 | },
1540 | "range-parser": {
1541 | "version": "1.2.1",
1542 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1543 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
1544 | "dev": true
1545 | },
1546 | "raw-body": {
1547 | "version": "2.4.0",
1548 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
1549 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
1550 | "dev": true,
1551 | "requires": {
1552 | "bytes": "3.1.0",
1553 | "http-errors": "1.7.2",
1554 | "iconv-lite": "0.4.24",
1555 | "unpipe": "1.0.0"
1556 | }
1557 | },
1558 | "rc": {
1559 | "version": "1.2.8",
1560 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
1561 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
1562 | "dev": true,
1563 | "requires": {
1564 | "deep-extend": "^0.6.0",
1565 | "ini": "~1.3.0",
1566 | "minimist": "^1.2.0",
1567 | "strip-json-comments": "~2.0.1"
1568 | }
1569 | },
1570 | "registry-auth-token": {
1571 | "version": "4.1.1",
1572 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz",
1573 | "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==",
1574 | "dev": true,
1575 | "requires": {
1576 | "rc": "^1.2.8"
1577 | }
1578 | },
1579 | "registry-url": {
1580 | "version": "5.1.0",
1581 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
1582 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
1583 | "dev": true,
1584 | "requires": {
1585 | "rc": "^1.2.8"
1586 | }
1587 | },
1588 | "request": {
1589 | "version": "2.88.2",
1590 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
1591 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
1592 | "dev": true,
1593 | "requires": {
1594 | "aws-sign2": "~0.7.0",
1595 | "aws4": "^1.8.0",
1596 | "caseless": "~0.12.0",
1597 | "combined-stream": "~1.0.6",
1598 | "extend": "~3.0.2",
1599 | "forever-agent": "~0.6.1",
1600 | "form-data": "~2.3.2",
1601 | "har-validator": "~5.1.3",
1602 | "http-signature": "~1.2.0",
1603 | "is-typedarray": "~1.0.0",
1604 | "isstream": "~0.1.2",
1605 | "json-stringify-safe": "~5.0.1",
1606 | "mime-types": "~2.1.19",
1607 | "oauth-sign": "~0.9.0",
1608 | "performance-now": "^2.1.0",
1609 | "qs": "~6.5.2",
1610 | "safe-buffer": "^5.1.2",
1611 | "tough-cookie": "~2.5.0",
1612 | "tunnel-agent": "^0.6.0",
1613 | "uuid": "^3.3.2"
1614 | },
1615 | "dependencies": {
1616 | "qs": {
1617 | "version": "6.5.2",
1618 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
1619 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
1620 | "dev": true
1621 | }
1622 | }
1623 | },
1624 | "require-directory": {
1625 | "version": "2.1.1",
1626 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1627 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
1628 | "dev": true
1629 | },
1630 | "require-main-filename": {
1631 | "version": "2.0.0",
1632 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
1633 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
1634 | "dev": true
1635 | },
1636 | "responselike": {
1637 | "version": "1.0.2",
1638 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
1639 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
1640 | "dev": true,
1641 | "requires": {
1642 | "lowercase-keys": "^1.0.0"
1643 | }
1644 | },
1645 | "safe-buffer": {
1646 | "version": "5.1.2",
1647 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1648 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
1649 | "dev": true
1650 | },
1651 | "safer-buffer": {
1652 | "version": "2.1.2",
1653 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1654 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1655 | "dev": true
1656 | },
1657 | "semver": {
1658 | "version": "6.3.0",
1659 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1660 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1661 | "dev": true
1662 | },
1663 | "semver-compare": {
1664 | "version": "1.0.0",
1665 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
1666 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
1667 | "dev": true
1668 | },
1669 | "semver-diff": {
1670 | "version": "2.1.0",
1671 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
1672 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
1673 | "dev": true,
1674 | "requires": {
1675 | "semver": "^5.0.3"
1676 | },
1677 | "dependencies": {
1678 | "semver": {
1679 | "version": "5.7.1",
1680 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1681 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1682 | "dev": true
1683 | }
1684 | }
1685 | },
1686 | "send": {
1687 | "version": "0.17.1",
1688 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
1689 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
1690 | "dev": true,
1691 | "requires": {
1692 | "debug": "2.6.9",
1693 | "depd": "~1.1.2",
1694 | "destroy": "~1.0.4",
1695 | "encodeurl": "~1.0.2",
1696 | "escape-html": "~1.0.3",
1697 | "etag": "~1.8.1",
1698 | "fresh": "0.5.2",
1699 | "http-errors": "~1.7.2",
1700 | "mime": "1.6.0",
1701 | "ms": "2.1.1",
1702 | "on-finished": "~2.3.0",
1703 | "range-parser": "~1.2.1",
1704 | "statuses": "~1.5.0"
1705 | },
1706 | "dependencies": {
1707 | "ms": {
1708 | "version": "2.1.1",
1709 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1710 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
1711 | "dev": true
1712 | }
1713 | }
1714 | },
1715 | "sendmail": {
1716 | "version": "1.6.1",
1717 | "resolved": "https://registry.npmjs.org/sendmail/-/sendmail-1.6.1.tgz",
1718 | "integrity": "sha512-lIhvnjSi5e5jL8wA1GPP6j2QVlx6JOEfmdn0QIfmuJdmXYGmJ375kcOU0NSm/34J+nypm4sa1AXrYE5w3uNIIA==",
1719 | "dev": true,
1720 | "requires": {
1721 | "dkim-signer": "0.2.2",
1722 | "mailcomposer": "3.12.0"
1723 | }
1724 | },
1725 | "serve-static": {
1726 | "version": "1.14.1",
1727 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
1728 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
1729 | "dev": true,
1730 | "requires": {
1731 | "encodeurl": "~1.0.2",
1732 | "escape-html": "~1.0.3",
1733 | "parseurl": "~1.3.3",
1734 | "send": "0.17.1"
1735 | }
1736 | },
1737 | "server-destroy": {
1738 | "version": "1.0.1",
1739 | "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
1740 | "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=",
1741 | "dev": true
1742 | },
1743 | "set-blocking": {
1744 | "version": "2.0.0",
1745 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1746 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
1747 | "dev": true
1748 | },
1749 | "setprototypeof": {
1750 | "version": "1.1.1",
1751 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1752 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
1753 | "dev": true
1754 | },
1755 | "shebang-command": {
1756 | "version": "1.2.0",
1757 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
1758 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
1759 | "dev": true,
1760 | "requires": {
1761 | "shebang-regex": "^1.0.0"
1762 | }
1763 | },
1764 | "shebang-regex": {
1765 | "version": "1.0.0",
1766 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
1767 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
1768 | "dev": true
1769 | },
1770 | "signal-exit": {
1771 | "version": "3.0.3",
1772 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
1773 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
1774 | "dev": true
1775 | },
1776 | "sshpk": {
1777 | "version": "1.16.1",
1778 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
1779 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
1780 | "dev": true,
1781 | "requires": {
1782 | "asn1": "~0.2.3",
1783 | "assert-plus": "^1.0.0",
1784 | "bcrypt-pbkdf": "^1.0.0",
1785 | "dashdash": "^1.12.0",
1786 | "ecc-jsbn": "~0.1.1",
1787 | "getpass": "^0.1.1",
1788 | "jsbn": "~0.1.0",
1789 | "safer-buffer": "^2.0.2",
1790 | "tweetnacl": "~0.14.0"
1791 | }
1792 | },
1793 | "statuses": {
1794 | "version": "1.5.0",
1795 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1796 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
1797 | "dev": true
1798 | },
1799 | "steno": {
1800 | "version": "0.4.4",
1801 | "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz",
1802 | "integrity": "sha1-BxEFvfwobmYVwEA8J+nXtdy4Vcs=",
1803 | "dev": true,
1804 | "requires": {
1805 | "graceful-fs": "^4.1.3"
1806 | }
1807 | },
1808 | "string-width": {
1809 | "version": "3.1.0",
1810 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
1811 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
1812 | "dev": true,
1813 | "requires": {
1814 | "emoji-regex": "^7.0.1",
1815 | "is-fullwidth-code-point": "^2.0.0",
1816 | "strip-ansi": "^5.1.0"
1817 | }
1818 | },
1819 | "strip-ansi": {
1820 | "version": "5.2.0",
1821 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1822 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1823 | "dev": true,
1824 | "requires": {
1825 | "ansi-regex": "^4.1.0"
1826 | }
1827 | },
1828 | "strip-eof": {
1829 | "version": "1.0.0",
1830 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
1831 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
1832 | "dev": true
1833 | },
1834 | "strip-json-comments": {
1835 | "version": "2.0.1",
1836 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1837 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
1838 | "dev": true
1839 | },
1840 | "supports-color": {
1841 | "version": "5.5.0",
1842 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1843 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1844 | "dev": true,
1845 | "requires": {
1846 | "has-flag": "^3.0.0"
1847 | }
1848 | },
1849 | "term-size": {
1850 | "version": "1.2.0",
1851 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
1852 | "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
1853 | "dev": true,
1854 | "requires": {
1855 | "execa": "^0.7.0"
1856 | }
1857 | },
1858 | "to-readable-stream": {
1859 | "version": "1.0.0",
1860 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
1861 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
1862 | "dev": true
1863 | },
1864 | "toidentifier": {
1865 | "version": "1.0.0",
1866 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
1867 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
1868 | "dev": true
1869 | },
1870 | "tough-cookie": {
1871 | "version": "2.5.0",
1872 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
1873 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
1874 | "dev": true,
1875 | "requires": {
1876 | "psl": "^1.1.28",
1877 | "punycode": "^2.1.1"
1878 | }
1879 | },
1880 | "tunnel-agent": {
1881 | "version": "0.6.0",
1882 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1883 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1884 | "dev": true,
1885 | "requires": {
1886 | "safe-buffer": "^5.0.1"
1887 | }
1888 | },
1889 | "tweetnacl": {
1890 | "version": "0.14.5",
1891 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1892 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
1893 | "dev": true
1894 | },
1895 | "type-fest": {
1896 | "version": "0.3.1",
1897 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
1898 | "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==",
1899 | "dev": true
1900 | },
1901 | "type-is": {
1902 | "version": "1.6.18",
1903 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1904 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1905 | "dev": true,
1906 | "requires": {
1907 | "media-typer": "0.3.0",
1908 | "mime-types": "~2.1.24"
1909 | }
1910 | },
1911 | "unique-string": {
1912 | "version": "1.0.0",
1913 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
1914 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
1915 | "dev": true,
1916 | "requires": {
1917 | "crypto-random-string": "^1.0.0"
1918 | }
1919 | },
1920 | "unpipe": {
1921 | "version": "1.0.0",
1922 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1923 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
1924 | "dev": true
1925 | },
1926 | "update-notifier": {
1927 | "version": "3.0.1",
1928 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-3.0.1.tgz",
1929 | "integrity": "sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ==",
1930 | "dev": true,
1931 | "requires": {
1932 | "boxen": "^3.0.0",
1933 | "chalk": "^2.0.1",
1934 | "configstore": "^4.0.0",
1935 | "has-yarn": "^2.1.0",
1936 | "import-lazy": "^2.1.0",
1937 | "is-ci": "^2.0.0",
1938 | "is-installed-globally": "^0.1.0",
1939 | "is-npm": "^3.0.0",
1940 | "is-yarn-global": "^0.3.0",
1941 | "latest-version": "^5.0.0",
1942 | "semver-diff": "^2.0.0",
1943 | "xdg-basedir": "^3.0.0"
1944 | }
1945 | },
1946 | "uri-js": {
1947 | "version": "4.2.2",
1948 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
1949 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
1950 | "dev": true,
1951 | "requires": {
1952 | "punycode": "^2.1.0"
1953 | }
1954 | },
1955 | "url-parse-lax": {
1956 | "version": "3.0.0",
1957 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
1958 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
1959 | "dev": true,
1960 | "requires": {
1961 | "prepend-http": "^2.0.0"
1962 | }
1963 | },
1964 | "utils-merge": {
1965 | "version": "1.0.1",
1966 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1967 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
1968 | "dev": true
1969 | },
1970 | "uuid": {
1971 | "version": "3.4.0",
1972 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
1973 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
1974 | "dev": true
1975 | },
1976 | "vary": {
1977 | "version": "1.1.2",
1978 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1979 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
1980 | "dev": true
1981 | },
1982 | "verror": {
1983 | "version": "1.10.0",
1984 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1985 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1986 | "dev": true,
1987 | "requires": {
1988 | "assert-plus": "^1.0.0",
1989 | "core-util-is": "1.0.2",
1990 | "extsprintf": "^1.2.0"
1991 | }
1992 | },
1993 | "which": {
1994 | "version": "1.3.1",
1995 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1996 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1997 | "dev": true,
1998 | "requires": {
1999 | "isexe": "^2.0.0"
2000 | }
2001 | },
2002 | "which-module": {
2003 | "version": "2.0.0",
2004 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
2005 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
2006 | "dev": true
2007 | },
2008 | "widest-line": {
2009 | "version": "2.0.1",
2010 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
2011 | "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
2012 | "dev": true,
2013 | "requires": {
2014 | "string-width": "^2.1.1"
2015 | },
2016 | "dependencies": {
2017 | "ansi-regex": {
2018 | "version": "3.0.0",
2019 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
2020 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
2021 | "dev": true
2022 | },
2023 | "string-width": {
2024 | "version": "2.1.1",
2025 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
2026 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
2027 | "dev": true,
2028 | "requires": {
2029 | "is-fullwidth-code-point": "^2.0.0",
2030 | "strip-ansi": "^4.0.0"
2031 | }
2032 | },
2033 | "strip-ansi": {
2034 | "version": "4.0.0",
2035 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
2036 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
2037 | "dev": true,
2038 | "requires": {
2039 | "ansi-regex": "^3.0.0"
2040 | }
2041 | }
2042 | }
2043 | },
2044 | "wrap-ansi": {
2045 | "version": "5.1.0",
2046 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
2047 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
2048 | "dev": true,
2049 | "requires": {
2050 | "ansi-styles": "^3.2.0",
2051 | "string-width": "^3.0.0",
2052 | "strip-ansi": "^5.0.0"
2053 | }
2054 | },
2055 | "wrappy": {
2056 | "version": "1.0.2",
2057 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2058 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2059 | "dev": true
2060 | },
2061 | "write-file-atomic": {
2062 | "version": "2.4.3",
2063 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
2064 | "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
2065 | "dev": true,
2066 | "requires": {
2067 | "graceful-fs": "^4.1.11",
2068 | "imurmurhash": "^0.1.4",
2069 | "signal-exit": "^3.0.2"
2070 | }
2071 | },
2072 | "xdg-basedir": {
2073 | "version": "3.0.0",
2074 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
2075 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
2076 | "dev": true
2077 | },
2078 | "y18n": {
2079 | "version": "4.0.0",
2080 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
2081 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
2082 | "dev": true
2083 | },
2084 | "yallist": {
2085 | "version": "2.1.2",
2086 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
2087 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
2088 | "dev": true
2089 | },
2090 | "yargs": {
2091 | "version": "14.2.3",
2092 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz",
2093 | "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==",
2094 | "dev": true,
2095 | "requires": {
2096 | "cliui": "^5.0.0",
2097 | "decamelize": "^1.2.0",
2098 | "find-up": "^3.0.0",
2099 | "get-caller-file": "^2.0.1",
2100 | "require-directory": "^2.1.1",
2101 | "require-main-filename": "^2.0.0",
2102 | "set-blocking": "^2.0.0",
2103 | "string-width": "^3.0.0",
2104 | "which-module": "^2.0.0",
2105 | "y18n": "^4.0.0",
2106 | "yargs-parser": "^15.0.1"
2107 | }
2108 | },
2109 | "yargs-parser": {
2110 | "version": "15.0.1",
2111 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz",
2112 | "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==",
2113 | "dev": true,
2114 | "requires": {
2115 | "camelcase": "^5.0.0",
2116 | "decamelize": "^1.2.0"
2117 | }
2118 | }
2119 | }
2120 | }
2121 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "todomvc-testing",
3 | "version": "1.0.0",
4 | "description": "Testing TodoMVC using Cypress",
5 | "scripts": {
6 | "start": "./node_modules/.bin/json-server --static . data.json -m middleware.js --config json-server.json"
7 | },
8 | "devDependencies": {
9 | "json-server": "0.15.1",
10 | "sendmail": "^1.6.1"
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/vendor/Sortable.min.js:
--------------------------------------------------------------------------------
1 | /*! Sortable 1.8.4 - MIT | git://github.com/SortableJS/Sortable.git */
2 |
3 | !function(t){"use strict";"function"==typeof define&&define.amd?define(t):"undefined"!=typeof module&&void 0!==module.exports?module.exports=t():window.Sortable=t()}(function(){"use strict";if("undefined"==typeof window||!window.document)return function(){throw new Error("Sortable.js requires a window with a document")};var U,V,f,u,q,G,h,X,Y,A,K,n,Z,Q,l,s,c,p,k,J,$,tt,et,ot,g,nt,I=[],B=!1,v=!1,it=!1,d=[],rt=!1,at=!1,m=[],i=/\s+/g,lt="Sortable"+(new Date).getTime(),b=window,st=b.document,w=b.parseInt,ct=b.setTimeout,e=b.jQuery||b.Zepto,o=b.Polymer,r={capture:!1,passive:!1},dt=!!navigator.userAgent.match(/(?:Trident.*rv[ :]?11\.|msie|iemobile)/i),_=!!navigator.userAgent.match(/Edge/i),y=!!navigator.userAgent.match(/firefox/i),D=!(!navigator.userAgent.match(/safari/i)||navigator.userAgent.match(/chrome/i)||navigator.userAgent.match(/android/i)),S=!!navigator.userAgent.match(/iP(ad|od|hone)/i),T=_||dt?"cssFloat":"float",a="draggable"in st.createElement("div"),C=function(){if(dt)return!1;var t=st.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}(),ht=!1,E=!1,ut=Math.abs,x=Math.min,N=Math.max,M=[],P=function(t,e){var o=Dt(t),n=w(o.width)-w(o.paddingLeft)-w(o.paddingRight)-w(o.borderLeftWidth)-w(o.borderRightWidth),i=Mt(t,0,e),r=Mt(t,1,e),a=i&&Dt(i),l=r&&Dt(r),s=a&&w(a.marginLeft)+w(a.marginRight)+Lt(i).width,c=l&&w(l.marginLeft)+w(l.marginRight)+Lt(r).width;if("flex"===o.display)return"column"===o.flexDirection||"column-reverse"===o.flexDirection?"vertical":"horizontal";if("grid"===o.display)return o.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&"none"!==a.float){var d="left"===a.float?"left":"right";return!r||"both"!==l.clear&&l.clear!==d?"horizontal":"vertical"}return i&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||n<=s&&"none"===o[T]||r&&"none"===o[T]&&n=n.left-i&&t<=n.right+i,a=e>=n.top-i&&e<=n.bottom+i;if(r&&a)return d[o]}}(t.clientX,t.clientY);e&&e[lt]._onDragOver({clientX:t.clientX,clientY:t.clientY,target:e,rootEl:e})}};function mt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be HTMLElement, not "+{}.toString.call(t);this.el=t,this.options=e=Bt({},e),t[lt]=this;var o={group:null,sort:!0,disabled:!1,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0,draggable:/[uo]l/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return P(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,touchStartThreshold:w(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==mt.supportPointer&&("PointerEvent"in window||window.navigator&&"msPointerEnabled"in window.navigator),emptyInsertThreshold:5};for(var n in o)!(n in e)&&(e[n]=o[n]);for(var i in W(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&a,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?wt(t,"pointerdown",this._onTapStart):(wt(t,"mousedown",this._onTapStart),wt(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(wt(t,"dragover",this),wt(t,"dragenter",this)),d.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[])}function bt(t,e,o,n){if(t){o=o||st;do{if(null!=e&&(">"===e[0]&&t.parentNode===o&&kt(t,e.substring(1))||kt(t,e))||n&&t===o)return t;if(t===o)break}while(t=(i=t).host&&i!==st&&i.host.nodeType?i.host:i.parentNode)}var i;return null}function wt(t,e,o){t.addEventListener(e,o,r)}function _t(t,e,o){t.removeEventListener(e,o,r)}function yt(t,e,o){if(t&&e)if(t.classList)t.classList[o?"add":"remove"](e);else{var n=(" "+t.className+" ").replace(i," ").replace(" "+e+" "," ");t.className=(n+(o?" "+e:"")).replace(i," ")}}function Dt(t,e,o){var n=t&&t.style;if(n){if(void 0===o)return st.defaultView&&st.defaultView.getComputedStyle?o=st.defaultView.getComputedStyle(t,""):t.currentStyle&&(o=t.currentStyle),void 0===e?o:o[e];e in n||-1!==e.indexOf("webkit")||(e="-webkit-"+e),n[e]=o+("string"==typeof o?"":"px")}}function St(t){var e="";do{var o=Dt(t,"transform");o&&"none"!==o&&(e=o+" "+e)}while(t=t.parentNode);return window.DOMMatrix?new DOMMatrix(e):window.WebKitCSSMatrix?new WebKitCSSMatrix(e):window.CSSMatrix?new CSSMatrix(e):void 0}function Tt(t,e,o){if(t){var n=t.getElementsByTagName(e),i=0,r=n.length;if(o)for(;i=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){U&&xt(U),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;_t(t,"mouseup",this._disableDelayedDrag),_t(t,"touchend",this._disableDelayedDrag),_t(t,"touchcancel",this._disableDelayedDrag),_t(t,"mousemove",this._delayedDragTouchMoveHandler),_t(t,"touchmove",this._delayedDragTouchMoveHandler),_t(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||("touch"==t.pointerType?t:null),!this.nativeDraggable||e?this.options.supportPointer?wt(st,"pointermove",this._onTouchMove):wt(st,e?"touchmove":"mousemove",this._onTouchMove):(wt(U,"dragend",this),wt(q,"dragstart",this._onDragStart));try{st.selection?Ht(function(){st.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(v=!1,q&&U){this.nativeDraggable&&(wt(st,"dragover",this._handleAutoScroll),wt(st,"dragover",F));var o=this.options;!t&&yt(U,o.dragClass,!1),yt(U,o.ghostClass,!0),Dt(U,"transform",""),mt.active=this,t&&this._appendGhost(),Ct(this,q,"start",U,q,q,K,void 0,e)}else this._nulling()},_emulateDragOver:function(t){if(k){if(this._lastX===k.clientX&&this._lastY===k.clientY&&!t)return;this._lastX=k.clientX,this._lastY=k.clientY,z();for(var e=st.elementFromPoint(k.clientX,k.clientY),o=e;e&&e.shadowRoot;)o=e=e.shadowRoot.elementFromPoint(k.clientX,k.clientY);if(o)do{if(o[lt])if(o[lt]._onDragOver({clientX:k.clientX,clientY:k.clientY,target:e,rootEl:o})&&!this.options.dragoverBubble)break;e=o}while(o=o.parentNode);U.parentNode[lt]._computeIsAligned(k),j()}},_onTouchMove:function(t,e){if(p){var o=this.options,n=o.fallbackTolerance,i=o.fallbackOffset,r=t.touches?t.touches[0]:t,a=f&&St(f),l=f&&a&&a.a,s=f&&a&&a.d,c=S&&g&&Ft(g),d=(r.clientX-p.clientX+i.x)/(l||1)+(c?c[0]-m[0]:0)/(l||1),h=(r.clientY-p.clientY+i.y)/(s||1)+(c?c[1]-m[1]:0)/(s||1),u=t.touches?"translate3d("+d+"px,"+h+"px,0)":"translate("+d+"px,"+h+"px)";if(!mt.active&&!v){if(n&&x(ut(r.clientX-this._lastX),ut(r.clientY-this._lastY))
6 | * @license MIT
7 | */
8 | e.exports = function(e){return null != e && (n(e) || r(e) || !!e._isBuffer);};}, function(e, t, n){'use strict';function r(e){this.defaults = e, this.interceptors = {request: new s, response: new s};}var o = n(6), i = n(2), s = n(17), u = n(18);r.prototype.request = function(e){'string' == typeof e && (e = i.merge({url: arguments[0]}, arguments[1])), e = i.merge(o, this.defaults, {method: 'get'}, e), e.method = e.method.toLowerCase();var t = [u, void 0], n = Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled, e.rejected);}), this.interceptors.response.forEach(function(e){t.push(e.fulfilled, e.rejected);});t.length;)n = n.then(t.shift(), t.shift());return n;}, i.forEach(['delete', 'get', 'head', 'options'], function(e){r.prototype[e] = function(t, n){return this.request(i.merge(n || {}, {method: e, url: t}));};}), i.forEach(['post', 'put', 'patch'], function(e){r.prototype[e] = function(t, n, r){return this.request(i.merge(r || {}, {method: e, url: t, data: n}));};}), e.exports = r;}, function(e, t, n){'use strict';function r(e, t){!i.isUndefined(e) && i.isUndefined(e['Content-Type']) && (e['Content-Type'] = t);}function o(){var e;return'undefined' != typeof XMLHttpRequest ? e = n(8) : 'undefined' != typeof process && (e = n(8)), e;}var i = n(2), s = n(7), u = {'Content-Type': 'application/x-www-form-urlencoded'}, a = {adapter: o(), transformRequest: [function(e, t){return s(t, 'Content-Type'), i.isFormData(e) || i.isArrayBuffer(e) || i.isBuffer(e) || i.isStream(e) || i.isFile(e) || i.isBlob(e) ? e : i.isArrayBufferView(e) ? e.buffer : i.isURLSearchParams(e) ? (r(t, 'application/x-www-form-urlencoded;charset=utf-8'), e.toString()) : i.isObject(e) ? (r(t, 'application/json;charset=utf-8'), JSON.stringify(e)) : e;}], transformResponse: [function(e){if('string' == typeof e)try{e = JSON.parse(e);}catch(e){}return e;}], timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, validateStatus: function(e){return e >= 200 && e < 300;}};a.headers = {common: {Accept: 'application/json, text/plain, */*'}}, i.forEach(['delete', 'get', 'head'], function(e){a.headers[e] = {};}), i.forEach(['post', 'put', 'patch'], function(e){a.headers[e] = i.merge(u);}), e.exports = a;}, function(e, t, n){'use strict';var r = n(2);e.exports = function(e, t){r.forEach(e, function(n, r){r !== t && r.toUpperCase() === t.toUpperCase() && (e[t] = n, delete e[r]);});};}, function(e, t, n){'use strict';var r = n(2), o = n(9), i = n(12), s = n(13), u = n(14), a = n(10), c = 'undefined' != typeof window && window.btoa && window.btoa.bind(window) || n(15);e.exports = function(e){return new Promise(function(t, f){var p = e.data, d = e.headers;r.isFormData(p) && delete d['Content-Type'];var l = new XMLHttpRequest, h = 'onreadystatechange', m = !1;if('undefined' == typeof window || !window.XDomainRequest || 'withCredentials' in l || u(e.url) || (l = new window.XDomainRequest, h = 'onload', m = !0, l.onprogress = function(){}, l.ontimeout = function(){}), e.auth){var y = e.auth.username || '', w = e.auth.password || '';d.Authorization = 'Basic ' + c(y + ':' + w);}if(l.open(e.method.toUpperCase(), i(e.url, e.params, e.paramsSerializer), !0), l.timeout = e.timeout, l[h] = function(){if(l && (4 === l.readyState || m) && (0 !== l.status || l.responseURL && 0 === l.responseURL.indexOf('file:'))){var n = 'getAllResponseHeaders' in l ? s(l.getAllResponseHeaders()) : null, r = e.responseType && 'text' !== e.responseType ? l.response : l.responseText, i = {data: r, status: 1223 === l.status ? 204 : l.status, statusText: 1223 === l.status ? 'No Content' : l.statusText, headers: n, config: e, request: l};o(t, f, i), l = null;}}, l.onerror = function(){f(a('Network Error', e, null, l)), l = null;}, l.ontimeout = function(){f(a('timeout of ' + e.timeout + 'ms exceeded', e, 'ECONNABORTED', l)), l = null;}, r.isStandardBrowserEnv()){var g = n(16), v = (e.withCredentials || u(e.url)) && e.xsrfCookieName ? g.read(e.xsrfCookieName) : void 0;v && (d[e.xsrfHeaderName] = v);}if('setRequestHeader' in l && r.forEach(d, function(e, t){'undefined' == typeof p && 'content-type' === t.toLowerCase() ? delete d[t] : l.setRequestHeader(t, e);}), e.withCredentials && (l.withCredentials = !0), e.responseType)try{l.responseType = e.responseType;}catch(t){if('json' !== e.responseType)throw t;}'function' == typeof e.onDownloadProgress && l.addEventListener('progress', e.onDownloadProgress), 'function' == typeof e.onUploadProgress && l.upload && l.upload.addEventListener('progress', e.onUploadProgress), e.cancelToken && e.cancelToken.promise.then(function(e){l && (l.abort(), f(e), l = null);}), void 0 === p && (p = null), l.send(p);});};}, function(e, t, n){'use strict';var r = n(10);e.exports = function(e, t, n){var o = n.config.validateStatus;n.status && o && !o(n.status) ? t(r('Request failed with status code ' + n.status, n.config, null, n.request, n)) : e(n);};}, function(e, t, n){'use strict';var r = n(11);e.exports = function(e, t, n, o, i){var s = new Error(e);return r(s, t, n, o, i);};}, function(e, t){'use strict';e.exports = function(e, t, n, r, o){return e.config = t, n && (e.code = n), e.request = r, e.response = o, e;};}, function(e, t, n){'use strict';function r(e){return encodeURIComponent(e).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');}var o = n(2);e.exports = function(e, t, n){if(!t)return e;var i;if(n)i = n(t);else if(o.isURLSearchParams(t))i = t.toString();else{var s = [];o.forEach(t, function(e, t){null !== e && 'undefined' != typeof e && (o.isArray(e) && (t += '[]'), o.isArray(e) || (e = [e]), o.forEach(e, function(e){o.isDate(e) ? e = e.toISOString() : o.isObject(e) && (e = JSON.stringify(e)), s.push(r(t) + '=' + r(e));}));}), i = s.join('&');}return i && (e += (e.indexOf('?') === -1 ? '?' : '&') + i), e;};}, function(e, t, n){'use strict';var r = n(2), o = ['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent'];e.exports = function(e){var t, n, i, s = {};return e ? (r.forEach(e.split('\n'), function(e){if(i = e.indexOf(':'), t = r.trim(e.substr(0, i)).toLowerCase(), n = r.trim(e.substr(i + 1)), t){if(s[t] && o.indexOf(t) >= 0)return;'set-cookie' === t ? s[t] = (s[t] ? s[t] : []).concat([n]) : s[t] = s[t] ? s[t] + ', ' + n : n;}}), s) : s;};}, function(e, t, n){'use strict';var r = n(2);e.exports = r.isStandardBrowserEnv() ? function(){function e(e){var t = e;return n && (o.setAttribute('href', t), t = o.href), o.setAttribute('href', t), {href: o.href, protocol: o.protocol ? o.protocol.replace(/:$/, '') : '', host: o.host, search: o.search ? o.search.replace(/^\?/, '') : '', hash: o.hash ? o.hash.replace(/^#/, '') : '', hostname: o.hostname, port: o.port, pathname: '/' === o.pathname.charAt(0) ? o.pathname : '/' + o.pathname};}var t, n = /(msie|trident)/i.test(navigator.userAgent), o = document.createElement('a');return t = e(window.location.href), function(n){var o = r.isString(n) ? e(n) : n;return o.protocol === t.protocol && o.host === t.host;};}() : function(){return function(){return!0;};}();}, function(e, t){'use strict';function n(){this.message = 'String contains an invalid character';}function r(e){for(var t, r, i = String(e), s = '', u = 0, a = o;i.charAt(0 | u) || (a = '=', u % 1);s += a.charAt(63 & t >> 8 - u % 1 * 8)){if(r = i.charCodeAt(u += .75), r > 255)throw new n;t = t << 8 | r;}return s;}var o = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';n.prototype = new Error, n.prototype.code = 5, n.prototype.name = 'InvalidCharacterError', e.exports = r;}, function(e, t, n){'use strict';var r = n(2);e.exports = r.isStandardBrowserEnv() ? function(){return{write: function(e, t, n, o, i, s){var u = [];u.push(e + '=' + encodeURIComponent(t)), r.isNumber(n) && u.push('expires=' + new Date(n).toGMTString()), r.isString(o) && u.push('path=' + o), r.isString(i) && u.push('domain=' + i), s === !0 && u.push('secure'), document.cookie = u.join('; ');}, read: function(e){var t = document.cookie.match(new RegExp('(^|;\\s*)(' + e + ')=([^;]*)'));return t ? decodeURIComponent(t[3]) : null;}, remove: function(e){this.write(e, '', Date.now() - 864e5);}};}() : function(){return{write: function(){}, read: function(){return null;}, remove: function(){}};}();}, function(e, t, n){'use strict';function r(){this.handlers = [];}var o = n(2);r.prototype.use = function(e, t){return this.handlers.push({fulfilled: e, rejected: t}), this.handlers.length - 1;}, r.prototype.eject = function(e){this.handlers[e] && (this.handlers[e] = null);}, r.prototype.forEach = function(e){o.forEach(this.handlers, function(t){null !== t && e(t);});}, e.exports = r;}, function(e, t, n){'use strict';function r(e){e.cancelToken && e.cancelToken.throwIfRequested();}var o = n(2), i = n(19), s = n(20), u = n(6), a = n(21), c = n(22);e.exports = function(e){r(e), e.baseURL && !a(e.url) && (e.url = c(e.baseURL, e.url)), e.headers = e.headers || {}, e.data = i(e.data, e.headers, e.transformRequest), e.headers = o.merge(e.headers.common || {}, e.headers[e.method] || {}, e.headers || {}), o.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function(t){delete e.headers[t];});var t = e.adapter || u.adapter;return t(e).then(function(t){return r(e), t.data = i(t.data, t.headers, e.transformResponse), t;}, function(t){return s(t) || (r(e), t && t.response && (t.response.data = i(t.response.data, t.response.headers, e.transformResponse))), Promise.reject(t);});};}, function(e, t, n){'use strict';var r = n(2);e.exports = function(e, t, n){return r.forEach(n, function(n){e = n(e, t);}), e;};}, function(e, t){'use strict';e.exports = function(e){return!(!e || !e.__CANCEL__);};}, function(e, t){'use strict';e.exports = function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e);};}, function(e, t){'use strict';e.exports = function(e, t){return t ? e.replace(/\/+$/, '') + '/' + t.replace(/^\/+/, '') : e;};}, function(e, t){'use strict';function n(e){this.message = e;}n.prototype.toString = function(){return'Cancel' + (this.message ? ': ' + this.message : '');}, n.prototype.__CANCEL__ = !0, e.exports = n;}, function(e, t, n){'use strict';function r(e){if('function' != typeof e)throw new TypeError('executor must be a function.');var t;this.promise = new Promise(function(e){t = e;});var n = this;e(function(e){n.reason || (n.reason = new o(e), t(n.reason));});}var o = n(23);r.prototype.throwIfRequested = function(){if(this.reason)throw this.reason;}, r.source = function(){var e, t = new r(function(t){e = t;});return{token: t, cancel: e};}, e.exports = r;}, function(e, t){'use strict';e.exports = function(e){return function(t){return e.apply(null, t);};};}]);});
9 | //# sourceMappingURL=axios.min.map
--------------------------------------------------------------------------------
/vendor/cypress-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/filiphric/testing-lists/11b0ed7c1653e6661a3b995cb0ff0807d9c1304f/vendor/cypress-icon.png
--------------------------------------------------------------------------------
/vendor/index.css:
--------------------------------------------------------------------------------
1 | /*
2 | TodoMVC css from https://github.com/cypress-io/todomvc-app-css fork
3 | with improved contrast. You can install it using
4 |
5 | npm i -S cypress-io/todomvc-app-css#a9d4ea1
6 |
7 | but to keep this app simple, vendor files are checked in
8 | */
9 | html,
10 | body {
11 | margin: 0;
12 | padding: 0;
13 | }
14 |
15 | button.login-button, button.signup-button {
16 | background: #b83f45;
17 | cursor: pointer;
18 | border: none;
19 | color: white;
20 | padding: 15px 32px;
21 | text-align: center;
22 | text-decoration: none;
23 | display: inline-block;
24 | font-size: 16px;
25 | margin: 0 auto;
26 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2),
27 | 0 25px 50px 0 rgba(0, 0, 0, 0.1);
28 | }
29 |
30 | button.login-button:hover, button.signup-button:hover {
31 | background: #943338;
32 |
33 | }
34 |
35 | button {
36 | margin: 0;
37 | padding: 0;
38 | border: 0;
39 | background: none;
40 | font-size: 100%;
41 | vertical-align: baseline;
42 | font-family: inherit;
43 | font-weight: inherit;
44 | color: inherit;
45 | -webkit-appearance: none;
46 | appearance: none;
47 | -webkit-font-smoothing: antialiased;
48 | -moz-osx-font-smoothing: grayscale;
49 | }
50 |
51 | body {
52 | font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;
53 | line-height: 1.4em;
54 | background: #f5f5f5;
55 | color: #4d4d4d;
56 | min-width: 230px;
57 | max-width: 550px;
58 | margin: 0 auto;
59 | -webkit-font-smoothing: antialiased;
60 | -moz-osx-font-smoothing: grayscale;
61 | font-weight: 300;
62 | }
63 |
64 | :focus {
65 | outline: 0;
66 | }
67 |
68 | .hidden {
69 | display: none;
70 | }
71 |
72 | .todoapp, .login, .signup {
73 | z-index: 0;
74 | background: #fff;
75 | margin: 0px 0 40px 0;
76 | position: relative;
77 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2),
78 | 0 25px 50px 0 rgba(0, 0, 0, 0.1);
79 | }
80 |
81 | .todoapp input::-webkit-input-placeholder {
82 | font-style: italic;
83 | font-weight: 300;
84 | color: #111111;
85 | }
86 |
87 | .todoapp input::-moz-placeholder {
88 | font-style: italic;
89 | font-weight: 300;
90 | color: #111111;
91 | }
92 |
93 | .todoapp input::input-placeholder {
94 | font-style: italic;
95 | font-weight: 300;
96 | color: #111111;
97 | }
98 |
99 | .todoapp h1, h1 {
100 | position: relative;
101 | /* top: -155px; */
102 | width: 100%;
103 | font-size: 100px;
104 | font-weight: 100;
105 | text-align: center;
106 | color: #b83f45;
107 | -webkit-text-rendering: optimizeLegibility;
108 | -moz-text-rendering: optimizeLegibility;
109 | text-rendering: optimizeLegibility;
110 | margin-block-end: 1em;
111 | }
112 |
113 | .new-todo,
114 | .edit {
115 | position: relative;
116 | margin: 0;
117 | width: 100%;
118 | font-size: 24px;
119 | font-family: inherit;
120 | font-weight: inherit;
121 | line-height: 1.4em;
122 | color: inherit;
123 | padding: 6px;
124 | border: 1px solid #999;
125 | box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
126 | box-sizing: border-box;
127 | -webkit-font-smoothing: antialiased;
128 | -moz-osx-font-smoothing: grayscale;
129 | }
130 |
131 | .new-todo, .login input, .signup input {
132 | padding: 16px 16px 16px 60px;
133 | border: none;
134 | background: rgba(0, 0, 0, 0.003);
135 | box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03);
136 | }
137 |
138 | .main {
139 | position: relative;
140 | z-index: 2;
141 | border-top: 1px solid #111111;
142 | }
143 |
144 | .toggle-all {
145 | width: 1px;
146 | height: 1px;
147 | border: none; /* Mobile Safari */
148 | opacity: 0;
149 | position: absolute;
150 | right: 100%;
151 | bottom: 100%;
152 | }
153 |
154 | .toggle-all + label {
155 | width: 60px;
156 | height: 34px;
157 | font-size: 0;
158 | position: absolute;
159 | top: -52px;
160 | left: -13px;
161 | -webkit-transform: rotate(90deg);
162 | transform: rotate(90deg);
163 | }
164 |
165 | .toggle-all + label:before {
166 | content: '❯';
167 | font-size: 22px;
168 | color: #111111;
169 | padding: 10px 27px 10px 27px;
170 | }
171 |
172 | .toggle-all:checked + label:before {
173 | color: #737373;
174 | }
175 |
176 | .todo-list {
177 | margin: 0;
178 | padding: 0;
179 | list-style: none;
180 | }
181 |
182 | .todo-list li {
183 | position: relative;
184 | font-size: 24px;
185 | border-bottom: 1px solid #ededed;
186 | }
187 |
188 | .todo-list li:last-child {
189 | border-bottom: none;
190 | }
191 |
192 | .todo-list li.editing {
193 | border-bottom: none;
194 | padding: 0;
195 | }
196 |
197 | .todo-list li.editing .edit {
198 | display: block;
199 | width: calc(100% - 43px);
200 | padding: 12px 16px;
201 | margin: 0 0 0 43px;
202 | }
203 |
204 | .todo-list li.editing .view {
205 | display: none;
206 | }
207 |
208 | .todo-list li .toggle {
209 | text-align: center;
210 | width: 40px;
211 | /* auto, since non-WebKit browsers doesn't support input styling */
212 | height: auto;
213 | position: absolute;
214 | top: 0;
215 | bottom: 0;
216 | margin: auto 0;
217 | border: none; /* Mobile Safari */
218 | -webkit-appearance: none;
219 | appearance: none;
220 | }
221 |
222 | .todo-list li .toggle {
223 | opacity: 0;
224 | }
225 |
226 | .todo-list li .toggle + label {
227 | /*
228 | Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
229 | IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
230 | */
231 | background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E');
232 | background-repeat: no-repeat;
233 | background-position: center left;
234 | background-color: #fff;
235 | }
236 |
237 | .todo-list li .toggle:checked + label {
238 | background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E');
239 | }
240 |
241 | .todo-list li label {
242 | word-break: break-all;
243 | padding: 15px 15px 15px 60px;
244 | display: block;
245 | line-height: 1.2;
246 | transition: color 0.4s;
247 | }
248 |
249 | .todo-list li.completed label {
250 | color: #d9d9d9;
251 | text-decoration: line-through;
252 | }
253 |
254 | .todo-list li .destroy {
255 | display: block;
256 | position: absolute;
257 | top: 0;
258 | right: 10px;
259 | bottom: 0;
260 | width: 40px;
261 | height: 40px;
262 | margin: auto 0;
263 | font-size: 30px;
264 | color: #cc9a9a;
265 | margin-bottom: 11px;
266 | transition: color 0.2s ease-out;
267 | font-weight: 600;
268 | }
269 |
270 | .active {
271 | display: block !important;
272 | color: #ff0101;
273 | }
274 |
275 | /* .todo-list li .destroy:hover {
276 | color: #ff0101;
277 | } */
278 |
279 | .todo-list li .destroy:after {
280 | content: '×';
281 | }
282 |
283 | /* .todo-list li:hover .destroy {
284 | display: block;
285 | } */
286 |
287 | .todo-list li .edit {
288 | display: none;
289 | }
290 |
291 | .todo-list li.editing:last-child {
292 | margin-bottom: -1px;
293 | }
294 |
295 | .footer {
296 | padding: 10px 15px;
297 | height: 20px;
298 | text-align: center;
299 | border-top: 1px solid #111111;
300 | font-weight: 400;
301 | }
302 |
303 | .footer:before {
304 | content: '';
305 | position: absolute;
306 | right: 0;
307 | bottom: 0;
308 | left: 0;
309 | height: 50px;
310 | overflow: hidden;
311 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2),
312 | 0 8px 0 -3px #f6f6f6,
313 | 0 9px 1px -3px rgba(0, 0, 0, 0.2),
314 | 0 16px 0 -6px #f6f6f6,
315 | 0 17px 2px -6px rgba(0, 0, 0, 0.2);
316 | }
317 |
318 | .todo-count {
319 | float: left;
320 | text-align: left;
321 | }
322 |
323 | .todo-count strong {
324 | font-weight: 800;
325 | }
326 |
327 | .filters {
328 | margin: 0;
329 | padding: 0;
330 | list-style: none;
331 | position: absolute;
332 | right: 0;
333 | left: 0;
334 | }
335 |
336 | .filters li {
337 | display: inline;
338 | }
339 |
340 | .filters li a {
341 | color: inherit;
342 | margin: 3px;
343 | padding: 3px 7px;
344 | text-decoration: none;
345 | border: 1px solid transparent;
346 | border-radius: 3px;
347 | }
348 |
349 | .filters li a:hover {
350 | border-color: rgba(175, 47, 47, 0.1);
351 | }
352 |
353 | .filters li a.selected {
354 | border-color: rgba(175, 47, 47, 0.2);
355 | }
356 |
357 | .clear-completed,
358 | html .clear-completed:active {
359 | float: right;
360 | position: relative;
361 | line-height: 20px;
362 | text-decoration: none;
363 | cursor: pointer;
364 | }
365 |
366 | .clear-completed:hover {
367 | text-decoration: underline;
368 | }
369 |
370 | .info {
371 | margin: 65px auto 0;
372 | color: #4d4d4d;
373 | font-size: 10px;
374 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
375 | text-align: center;
376 | }
377 |
378 | .info p {
379 | line-height: 1;
380 | }
381 |
382 | .info a {
383 | color: inherit;
384 | text-decoration: none;
385 | font-weight: 400;
386 | }
387 |
388 | .info a:hover {
389 | text-decoration: underline;
390 | }
391 |
392 | /*
393 | Hack to remove background from Mobile Safari.
394 | Can't use it globally since it destroys checkboxes in Firefox
395 | */
396 | @media screen and (-webkit-min-device-pixel-ratio:0) {
397 | .toggle-all,
398 | .todo-list li .toggle {
399 | background: none;
400 | }
401 |
402 | .todo-list li .toggle {
403 | height: 40px;
404 | }
405 | }
406 |
407 | @media (max-width: 430px) {
408 | .footer {
409 | height: 50px;
410 | }
411 |
412 | .filters {
413 | bottom: 10px;
414 | }
415 | }
416 |
417 | .login input, .signup input {
418 | position: relative;
419 | margin: 0;
420 | width: 100%;
421 | font-size: 24px;
422 | font-family: inherit;
423 | font-weight: inherit;
424 | line-height: 1.4em;
425 | color: inherit;
426 | padding: 6px;
427 | /* border: 1px solid #999; */
428 | /* box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); */
429 | box-sizing: border-box;
430 | -webkit-font-smoothing: antialiased;
431 | -moz-osx-font-smoothing: grayscale;
432 | padding: 16px 16px 16px 60px;
433 | /* border: none; */
434 | background: #fff;
435 | box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03);
436 | }
437 |
438 | #errorMessage {
439 | -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
440 | -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
441 | background: #f85252;
442 | top: -50px;
443 | height: 24px;
444 | padding: 16px;
445 | box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
446 | color: #fff;
447 | font-weight: 300;
448 | left: 0;
449 | line-height: 1.4em;
450 | font-size: 18px;
451 | overflow: hidden;
452 | position: absolute;
453 | right: 0;
454 | text-align: center;
455 | z-index: 101;
456 | animation-name: slideDown;
457 | animation-duration: 4s;
458 | }
459 |
460 | #loginMessage, #signupMessage {
461 | -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
462 | -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
463 | background: #58BC82;
464 | top: -50px;
465 | height: 24px;
466 | padding: 16px;
467 | box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
468 | color: #fff;
469 | font-weight: 300;
470 | left: 0;
471 | line-height: 1.4em;
472 | font-size: 18px;
473 | overflow: hidden;
474 | position: absolute;
475 | right: 0;
476 | text-align: center;
477 | z-index: 101;
478 | animation-name: slideDown;
479 | animation-duration: 4s;
480 | }
481 |
482 | @-webkit-keyframes slideDown {
483 | 10%, 90% { -webkit-transform: translateY(50px); }
484 | 0%, 100% { -webkit-transform: translateY(0px); }
485 | }
486 | @-moz-keyframes slideDown {
487 | 10%, 90% { -moz-transform: translateY(50px); }
488 | 0%, 100% { -moz-transform: translateY(0px); }
489 | }
490 |
491 | @-webkit-keyframes slideUp {
492 | 0%, 100% { -webkit-transform: translateY(50px); }
493 | 10%, 90% { -webkit-transform: translateY(0px); }
494 | }
495 | @-moz-keyframes slideUp {
496 | 0%, 100% { -moz-transform: translateY(50px); }
497 | 10%, 90% { -moz-transform: translateY(0px); }
498 | }
--------------------------------------------------------------------------------
/vendor/vue-observe-visibility.min.js:
--------------------------------------------------------------------------------
1 | var VueObserveVisibility = function(e){'use strict';function t(e){return(t = 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator ? function(e){return typeof e;} : function(e){return e && 'function' == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? 'symbol' : typeof e;})(e);}function i(e, t){for(var i = 0;i < t.length;i++){var n = t[i];n.enumerable = n.enumerable || !1, n.configurable = !0, 'value' in n && (n.writable = !0), Object.defineProperty(e, n.key, n);}}function n(e){return function(e){if(Array.isArray(e)){for(var t = 0, i = new Array(e.length);t < e.length;t++)i[t] = e[t];return i;}}(e) || function(e){if(Symbol.iterator in Object(e) || '[object Arguments]' === Object.prototype.toString.call(e))return Array.from(e);}(e) || function(){throw new TypeError('Invalid attempt to spread non-iterable instance');}();}var r = function(){function e(t, i, n){!function(e, t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function');}(this, e), this.el = t, this.observer = null, this.frozen = !1, this.createObserver(i, n);}var t, r, o;return t = e, (r = [{key: 'createObserver', value: function(e, t){var i = this;if(this.observer && this.destroyObserver(), !this.frozen){var r;if(this.options = 'function' == typeof(r = e) ? {callback: r} : r, this.callback = function(e, t){i.options.callback(e, t), e && i.options.once && (i.frozen = !0, i.destroyObserver());}, this.callback && this.options.throttle){var o = (this.options.throttleOptions || {}).leading;this.callback = function(e, t){var i, r, o, l = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, s = function(s){for(var a = arguments.length, c = new Array(a > 1 ? a - 1 : 0), u = 1;u < a;u++)c[u - 1] = arguments[u];if(o = c, !i || s !== r){var f = l.leading;'function' == typeof f && (f = f(s, r)), i && s === r || !f || e.apply(void 0, [s].concat(n(o))), r = s, clearTimeout(i), i = setTimeout(function(){e.apply(void 0, [s].concat(n(o))), i = 0;}, t);}};return s._clear = function(){clearTimeout(i), i = null;}, s;}(this.callback, this.options.throttle, {leading: function(e){return'both' === o || 'visible' === o && e || 'hidden' === o && !e;}});}this.oldResult = void 0, this.observer = new IntersectionObserver(function(e){var t = e[0];if(e.length > 1){var n = e.find(function(e){return e.isIntersecting;});n && (t = n);}if(i.callback){var r = t.isIntersecting && t.intersectionRatio >= i.threshold;if(r === i.oldResult)return;i.oldResult = r, i.callback(r, t);}}, this.options.intersection), t.context.$nextTick(function(){i.observer && i.observer.observe(i.el);});}}}, {key: 'destroyObserver', value: function(){this.observer && (this.observer.disconnect(), this.observer = null), this.callback && this.callback._clear && (this.callback._clear(), this.callback = null);}}, {key: 'threshold', get: function(){return this.options.intersection && this.options.intersection.threshold || 0;}}]) && i(t.prototype, r), o && i(t, o), e;}();function o(e, t, i){var n = t.value;if(n)if('undefined' == typeof IntersectionObserver)console.warn('[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill');else{var o = new r(e, n, i);e._vue_visibilityState = o;}}function l(e){var t = e._vue_visibilityState;t && (t.destroyObserver(), delete e._vue_visibilityState);}var s = {bind: o, update: function(e, i, n){var r = i.value;if(!function e(i, n){if(i === n)return!0;if('object' === t(i)){for(var r in i)if(!e(i[r], n[r]))return!1;return!0;}return!1;}(r, i.oldValue)){var s = e._vue_visibilityState;r ? s ? s.createObserver(r, n) : o(e, {value: r}, n) : l(e);}}, unbind: l};function a(e){e.directive('observe-visibility', s);}var c = {version: '0.4.6', install: a}, u = null;return'undefined' != typeof window ? u = window.Vue : 'undefined' != typeof global && (u = global.Vue), u && u.use(c), e.ObserveVisibility = s, e.default = c, e.install = a, e;}({});
--------------------------------------------------------------------------------
/vendor/vuex.js:
--------------------------------------------------------------------------------
1 | /**
2 | * vuex v3.0.1
3 | * (c) 2017 Evan You
4 | * @license MIT
5 | */
6 | (function (global, factory) {
7 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8 | typeof define === 'function' && define.amd ? define(factory) :
9 | (global.Vuex = factory());
10 | }(this, (function () { 'use strict';
11 |
12 | var applyMixin = function (Vue) {
13 | var version = Number(Vue.version.split('.')[0]);
14 |
15 | if (version >= 2) {
16 | Vue.mixin({ beforeCreate: vuexInit });
17 | } else {
18 | // override init and inject vuex init procedure
19 | // for 1.x backwards compatibility.
20 | var _init = Vue.prototype._init;
21 | Vue.prototype._init = function (options) {
22 | if ( options === void 0 ) options = {};
23 |
24 | options.init = options.init
25 | ? [vuexInit].concat(options.init)
26 | : vuexInit;
27 | _init.call(this, options);
28 | };
29 | }
30 |
31 | /**
32 | * Vuex init hook, injected into each instances init hooks list.
33 | */
34 |
35 | function vuexInit () {
36 | var options = this.$options;
37 | // store injection
38 | if (options.store) {
39 | this.$store = typeof options.store === 'function'
40 | ? options.store()
41 | : options.store;
42 | } else if (options.parent && options.parent.$store) {
43 | this.$store = options.parent.$store;
44 | }
45 | }
46 | };
47 |
48 | var devtoolHook =
49 | typeof window !== 'undefined' &&
50 | window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
51 |
52 | function devtoolPlugin (store) {
53 | if (!devtoolHook) { return; }
54 |
55 | store._devtoolHook = devtoolHook;
56 |
57 | devtoolHook.emit('vuex:init', store);
58 |
59 | devtoolHook.on('vuex:travel-to-state', function (targetState) {
60 | store.replaceState(targetState);
61 | });
62 |
63 | store.subscribe(function (mutation, state) {
64 | devtoolHook.emit('vuex:mutation', mutation, state);
65 | });
66 | }
67 |
68 | /**
69 | * Get the first item that pass the test
70 | * by second argument function
71 | *
72 | * @param {Array} list
73 | * @param {Function} f
74 | * @return {*}
75 | */
76 | /**
77 | * Deep copy the given object considering circular structure.
78 | * This function caches all nested objects and its copies.
79 | * If it detects circular structure, use cached copy to avoid infinite loop.
80 | *
81 | * @param {*} obj
82 | * @param {Array