├── .gitignore
├── .meteor
├── .finished-upgraders
├── .gitignore
├── .id
├── packages
├── platforms
├── release
└── versions
├── LICENSE
├── README.md
├── client
├── main.css
├── main.html
└── main.jsx
├── imports
├── api
│ ├── tasks.js
│ └── tasks.tests.js
└── ui
│ ├── App.jsx
│ ├── LoginForm.jsx
│ ├── Task.jsx
│ └── TaskForm.jsx
├── package-lock.json
├── package.json
├── screenshot.png
├── server
└── main.js
└── tests
└── main.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/.meteor/.finished-upgraders:
--------------------------------------------------------------------------------
1 | # This file contains information which helps Meteor properly upgrade your
2 | # app when you run 'meteor update'. You should check it into version control
3 | # with your project.
4 |
5 | notices-for-0.9.0
6 | notices-for-0.9.1
7 | 0.9.4-platform-file
8 | notices-for-facebook-graph-api-2
9 | 1.2.0-standard-minifiers-package
10 | 1.2.0-meteor-platform-split
11 | 1.2.0-cordova-changes
12 | 1.2.0-breaking-changes
13 | 1.3.0-split-minifiers-package
14 | 1.4.0-remove-old-dev-bundle-link
15 | 1.4.1-add-shell-server-package
16 | 1.4.3-split-account-service-packages
17 | 1.5-add-dynamic-import-package
18 | 1.7-split-underscore-from-meteor-base
19 | 1.8.3-split-jquery-from-blaze
20 |
--------------------------------------------------------------------------------
/.meteor/.gitignore:
--------------------------------------------------------------------------------
1 | local
2 |
--------------------------------------------------------------------------------
/.meteor/.id:
--------------------------------------------------------------------------------
1 | # This file contains a token that is unique to your project.
2 | # Check it into your repository along with the rest of this directory.
3 | # It can be used for purposes such as:
4 | # - ensuring you don't accidentally deploy one app on top of another
5 | # - providing package authors with aggregated statistics
6 |
7 | icx08c5o8tue.o91vpgtmehj
8 |
--------------------------------------------------------------------------------
/.meteor/packages:
--------------------------------------------------------------------------------
1 | # Meteor packages used by this project, one per line.
2 | # Check this file (and the other files in this directory) into your repository.
3 | #
4 | # 'meteor add' and 'meteor remove' will edit this file for you,
5 | # but you can also edit it by hand.
6 |
7 | meteor-base@1.4.0 # Packages every Meteor app needs to have
8 | mobile-experience@1.1.0 # Packages for a great mobile UX
9 | mongo@1.10.0 # The database Meteor supports right now
10 | reactive-var@1.0.11 # Reactive variable for tracker
11 |
12 | standard-minifier-css@1.6.0 # CSS minifier run for production mode
13 | standard-minifier-js@2.6.0 # JS minifier run for production mode
14 | es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers
15 | ecmascript@0.14.3 # Enable ECMAScript2015+ syntax in app code
16 | typescript@3.7.6 # Enable TypeScript syntax in .ts and .tsx modules
17 | shell-server@0.5.0 # Server-side component of the `meteor shell` command
18 |
19 | static-html # Define static page content in .html files
20 | react-meteor-data # React higher-order component for reactively tracking Meteor data
21 | accounts-password
22 | meteortesting:mocha
23 |
--------------------------------------------------------------------------------
/.meteor/platforms:
--------------------------------------------------------------------------------
1 | server
2 | browser
3 |
--------------------------------------------------------------------------------
/.meteor/release:
--------------------------------------------------------------------------------
1 | METEOR@1.10.2
2 |
--------------------------------------------------------------------------------
/.meteor/versions:
--------------------------------------------------------------------------------
1 | accounts-base@1.6.0
2 | accounts-password@1.6.0
3 | allow-deny@1.1.0
4 | autoupdate@1.6.0
5 | babel-compiler@7.5.3
6 | babel-runtime@1.5.0
7 | base64@1.0.12
8 | binary-heap@1.0.11
9 | blaze-tools@1.0.10
10 | boilerplate-generator@1.7.0
11 | caching-compiler@1.2.2
12 | caching-html-compiler@1.1.3
13 | callback-hook@1.3.0
14 | check@1.3.1
15 | ddp@1.4.0
16 | ddp-client@2.3.3
17 | ddp-common@1.4.0
18 | ddp-rate-limiter@1.0.7
19 | ddp-server@2.3.1
20 | deps@1.0.12
21 | diff-sequence@1.1.1
22 | dynamic-import@0.5.2
23 | ecmascript@0.14.3
24 | ecmascript-runtime@0.7.0
25 | ecmascript-runtime-client@0.10.0
26 | ecmascript-runtime-server@0.9.0
27 | ejson@1.1.1
28 | email@1.2.3
29 | es5-shim@4.8.0
30 | fetch@0.1.1
31 | geojson-utils@1.0.10
32 | hot-code-push@1.0.4
33 | html-tools@1.0.11
34 | htmljs@1.0.11
35 | http@1.4.2
36 | id-map@1.1.0
37 | inter-process-messaging@0.1.1
38 | launch-screen@1.2.0
39 | livedata@1.0.18
40 | lmieulet:meteor-coverage@1.1.4
41 | localstorage@1.2.0
42 | logging@1.1.20
43 | meteor@1.9.3
44 | meteor-base@1.4.0
45 | meteorhacks:picker@1.0.3
46 | meteortesting:browser-tests@1.0.0
47 | meteortesting:mocha@1.1.4
48 | meteortesting:mocha-core@7.0.1
49 | minifier-css@1.5.0
50 | minifier-js@2.6.0
51 | minimongo@1.6.0
52 | mobile-experience@1.1.0
53 | mobile-status-bar@1.1.0
54 | modern-browsers@0.1.5
55 | modules@0.15.0
56 | modules-runtime@0.12.0
57 | mongo@1.10.0
58 | mongo-decimal@0.1.1
59 | mongo-dev-server@1.1.0
60 | mongo-id@1.0.7
61 | npm-bcrypt@0.9.3
62 | npm-mongo@3.7.0
63 | ordered-dict@1.1.0
64 | promise@0.11.2
65 | random@1.2.0
66 | rate-limit@1.0.9
67 | react-meteor-data@2.0.1
68 | reactive-var@1.0.11
69 | reload@1.3.0
70 | retry@1.1.0
71 | routepolicy@1.1.0
72 | service-configuration@1.0.11
73 | sha@1.0.9
74 | shell-server@0.5.0
75 | socket-stream-client@0.3.0
76 | spacebars-compiler@1.1.3
77 | srp@1.1.0
78 | standard-minifier-css@1.6.0
79 | standard-minifier-js@2.6.0
80 | static-html@1.2.2
81 | templating-tools@1.1.2
82 | tracker@1.2.0
83 | typescript@3.7.6
84 | underscore@1.0.10
85 | url@1.3.0
86 | webapp@1.9.1
87 | webapp-hashing@1.0.9
88 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | ========================================
2 | Meteor is licensed under the MIT License
3 | ========================================
4 |
5 | Copyright (C) 2011--2016 Meteor Development Group
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy of
8 | this software and associated documentation files (the "Software"), to deal in
9 | the Software without restriction, including without limitation the rights to
10 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
11 | the Software, and to permit persons to whom the Software is furnished to do so,
12 | subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
19 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
20 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
21 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Simple Todo List (archived)
2 |
3 | The new React Tutorial lives here
4 | https://github.com/meteor/react-tutorial/
5 |
6 | Any PRs or issues should be created there now.
7 |
8 | You can check the tutorial here https://react-tutorial.meteor.com/
9 |
--------------------------------------------------------------------------------
/client/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
3 | font-size: 14px;
4 | }
5 |
6 | .simple-todos-react {
7 | margin: 0 auto;
8 | max-width: 512px;
9 | }
10 |
11 | .simple-todos-react .filters {
12 | margin-bottom: 1rem;
13 | }
14 |
15 | .simple-todos-react .tasks {
16 | padding: 0;
17 | margin: 0;
18 | list-style: none;
19 | }
20 |
21 | .simple-todos-react .tasks .task {
22 | display: flex;
23 | align-items: center;
24 | height: 32px;
25 | }
26 |
27 | .simple-todos-react .tasks .task span {
28 | flex-grow: 1;
29 | }
30 |
31 | .simple-todos-react .tasks .task button {
32 | cursor: pointer;
33 | background: transparent;
34 | outline: none;
35 | border: none;
36 | }
37 |
38 | .simple-todos-react .tasks .task.checked span {
39 | text-decoration: line-through;
40 | }
41 |
42 | .simple-todos-react .task-form {
43 | margin-top: 1rem;
44 | display: flex;
45 | }
46 |
47 | .simple-todos-react .task-form input {
48 | flex-grow: 1;
49 | }
50 |
51 | .simple-todos-react .login-form {
52 | margin-top: 2rem;
53 | }
54 |
55 | .simple-todos-react .login-form label,
56 | .simple-todos-react .login-form input {
57 | display: block;
58 | width: 100%;
59 | box-sizing: border-box;
60 | }
61 |
62 | .simple-todos-react .login-form label {
63 | margin-bottom: .4rem;
64 | }
65 |
66 | .simple-todos-react .login-form input {
67 | margin-bottom: .8rem;
68 | }
69 |
70 | .simple-todos-react .login-form button[type=submit] {
71 | float: right;
72 | }
73 |
--------------------------------------------------------------------------------
/client/main.html:
--------------------------------------------------------------------------------
1 |
2 | simple-todos-react
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/client/main.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Meteor } from 'meteor/meteor';
3 | import { render } from 'react-dom';
4 | import { App } from '/imports/ui/App';
5 |
6 | Meteor.startup(() => {
7 | render(, document.getElementById('react-target'));
8 | });
9 |
--------------------------------------------------------------------------------
/imports/api/tasks.js:
--------------------------------------------------------------------------------
1 | import { Mongo } from 'meteor/mongo';
2 | import { check } from 'meteor/check';
3 |
4 | export const Tasks = new Mongo.Collection('tasks');
5 |
6 | Meteor.methods({
7 | 'tasks.insert'(text) {
8 | check(text, String);
9 |
10 | if (!this.userId) {
11 | throw new Meteor.Error('Not authorized.');
12 | }
13 |
14 | Tasks.insert({
15 | text,
16 | createdAt: new Date,
17 | owner: this.userId,
18 | username: Meteor.users.findOne(this.userId).username
19 | })
20 | },
21 |
22 | 'tasks.remove'(taskId) {
23 | check(taskId, String);
24 |
25 | const task = Tasks.findOne(taskId);
26 |
27 | if (!this.userId || task.owner !== this.userId) {
28 | throw new Meteor.Error('Not authorized.');
29 | }
30 |
31 | Tasks.remove(taskId);
32 | },
33 |
34 | 'tasks.setChecked'(taskId, isChecked) {
35 | check(taskId, String);
36 | check(isChecked, Boolean);
37 |
38 | const task = Tasks.findOne(taskId);
39 |
40 | if (task.isPrivate && task.owner !== this.userId) {
41 | throw new Meteor.Error('Not authorized.');
42 | }
43 |
44 | Tasks.update(taskId, {
45 | $set: {
46 | isChecked
47 | }
48 | });
49 | },
50 |
51 | 'tasks.setPrivate'(taskId, isPrivate) {
52 | check(taskId, String);
53 | check(isPrivate, Boolean);
54 |
55 | const task = Tasks.findOne(taskId);
56 |
57 | if (!this.userId || task.owner !== this.userId) {
58 | throw new Meteor.Error('Not authorized.');
59 | }
60 |
61 | Tasks.update(taskId, {
62 | $set: {
63 | isPrivate
64 | }
65 | })
66 | }
67 | });
68 |
69 | if (Meteor.isServer) {
70 | Meteor.publish('tasks', function() {
71 | return Tasks.find({
72 | $or: [
73 | { private: { $ne: true } },
74 | { owner: this.userId }
75 | ]
76 | });
77 | })
78 | }
79 |
--------------------------------------------------------------------------------
/imports/api/tasks.tests.js:
--------------------------------------------------------------------------------
1 | import { Meteor } from 'meteor/meteor';
2 | import { Random } from 'meteor/random';
3 | import { assert } from 'chai';
4 |
5 | import { Tasks } from './tasks.js';
6 |
7 | if (Meteor.isServer) {
8 | describe('Tasks', () => {
9 | describe('methods', () => {
10 | const userId = Random.id();
11 | let taskId;
12 |
13 | beforeEach(() => {
14 | Tasks.remove({});
15 |
16 | taskId = Tasks.insert({
17 | text: 'Test Task',
18 | createdAt: new Date(),
19 | owner: userId,
20 | username: 'meteorite',
21 | });
22 | });
23 |
24 | it('can delete owned task', () => {
25 | // Isolate internal method implementation.
26 | const deleteTask = Meteor.server.method_handlers['tasks.remove'];
27 |
28 | // Set up a fake method call context.
29 | const invocation = { userId };
30 |
31 | // Run the method with `this` set to the mock context.
32 | deleteTask.apply(invocation, [taskId]);
33 |
34 | // Check its behavior.
35 | assert.equal(Tasks.find().count(), 0);
36 | });
37 | });
38 | });
39 | }
--------------------------------------------------------------------------------
/imports/ui/App.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import { useTracker } from 'meteor/react-meteor-data';
3 | import _ from 'lodash';
4 | import { Task } from './Task';
5 | import { Tasks } from '/imports/api/tasks';
6 | import { TaskForm } from './TaskForm';
7 | import { LoginForm } from './LoginForm';
8 |
9 | const toggleChecked = ({ _id, isChecked }) => {
10 | Meteor.call('tasks.setChecked', _id, !isChecked);
11 | };
12 |
13 | const togglePrivate = ({ _id, isPrivate }) => {
14 | Meteor.call('tasks.setPrivate', _id, !isPrivate);
15 | };
16 |
17 | const deleteTask = ({ _id }) => Meteor.call('tasks.remove', _id);
18 |
19 | export const App = () => {
20 | const filter = {};
21 |
22 | const [hideCompleted, setHideCompleted] = useState(false);
23 |
24 | if (hideCompleted) {
25 | _.set(filter, 'checked', false);
26 | }
27 |
28 | const { tasks, incompleteTasksCount, user } = useTracker(() => {
29 | Meteor.subscribe('tasks');
30 |
31 | return ({
32 | tasks: Tasks.find(filter, {sort: {createdAt: -1}}).fetch(),
33 | incompleteTasksCount: Tasks.find({checked: {$ne: true}}).count(),
34 | user: Meteor.user(),
35 | });
36 | });
37 |
38 | if (!user) {
39 | return (
40 |
41 |
42 |
43 | );
44 | }
45 |
46 | return (
47 |
48 |
Todo List ({ incompleteTasksCount })
49 |
50 |
51 |
60 |
61 |
62 |
63 | { tasks.map(task => ) }
70 |
71 |
72 |
73 |
74 | );
75 | };
76 |
--------------------------------------------------------------------------------
/imports/ui/LoginForm.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 |
3 | export const LoginForm = () => {
4 | const [username, setUsername] = useState('');
5 | const [password, setPassword] = useState('');
6 |
7 | const submit = (e) => {
8 | e.preventDefault();
9 |
10 | Meteor.loginWithPassword(username, password);
11 | };
12 |
13 | return (
14 |
39 | );
40 | };
41 |
--------------------------------------------------------------------------------
/imports/ui/Task.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import classnames from 'classnames';
3 |
4 | export const Task = ({ task, onCheckboxClick, onDeleteClick, onTogglePrivateClick }) => {
5 | const classes = classnames('task', {
6 | 'checked': Boolean(task.isChecked)
7 | });
8 |
9 | return (
10 |
11 |
12 |
13 | { task.text } { task.username && ({ task.username }) }
14 | onCheckboxClick(task) }
18 | readOnly
19 | />
20 |
21 | );
22 | };
23 |
--------------------------------------------------------------------------------
/imports/ui/TaskForm.jsx:
--------------------------------------------------------------------------------
1 | import React, {useState} from 'react';
2 |
3 | export const TaskForm = () => {
4 | const [text, setText] = useState("");
5 |
6 | const handleSubmit = () => {
7 | if (!text) return;
8 |
9 | Meteor.call('tasks.insert', text.trim());
10 |
11 | setText("");
12 | };
13 |
14 | return (
15 |
25 | );
26 | };
27 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "simple-todos-react",
3 | "requires": true,
4 | "lockfileVersion": 1,
5 | "dependencies": {
6 | "@babel/runtime": {
7 | "version": "7.10.3",
8 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.3.tgz",
9 | "integrity": "sha512-RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw==",
10 | "requires": {
11 | "regenerator-runtime": "^0.13.4"
12 | }
13 | },
14 | "abbrev": {
15 | "version": "1.1.1",
16 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
17 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
18 | },
19 | "ansi-regex": {
20 | "version": "2.1.1",
21 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
22 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
23 | },
24 | "aproba": {
25 | "version": "1.2.0",
26 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
27 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
28 | },
29 | "are-we-there-yet": {
30 | "version": "1.1.5",
31 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
32 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
33 | "requires": {
34 | "delegates": "^1.0.0",
35 | "readable-stream": "^2.0.6"
36 | }
37 | },
38 | "assertion-error": {
39 | "version": "1.1.0",
40 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
41 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
42 | "dev": true
43 | },
44 | "balanced-match": {
45 | "version": "1.0.0",
46 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
47 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
48 | },
49 | "bcrypt": {
50 | "version": "3.0.8",
51 | "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.8.tgz",
52 | "integrity": "sha512-jKV6RvLhI36TQnPDvUFqBEnGX9c8dRRygKxCZu7E+MgLfKZbmmXL8a7/SFFOyHoPNX9nV81cKRC5tbQfvEQtpw==",
53 | "requires": {
54 | "nan": "2.14.0",
55 | "node-pre-gyp": "0.14.0"
56 | }
57 | },
58 | "brace-expansion": {
59 | "version": "1.1.11",
60 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
61 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
62 | "requires": {
63 | "balanced-match": "^1.0.0",
64 | "concat-map": "0.0.1"
65 | }
66 | },
67 | "chai": {
68 | "version": "4.2.0",
69 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
70 | "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
71 | "dev": true,
72 | "requires": {
73 | "assertion-error": "^1.1.0",
74 | "check-error": "^1.0.2",
75 | "deep-eql": "^3.0.1",
76 | "get-func-name": "^2.0.0",
77 | "pathval": "^1.1.0",
78 | "type-detect": "^4.0.5"
79 | }
80 | },
81 | "check-error": {
82 | "version": "1.0.2",
83 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
84 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
85 | "dev": true
86 | },
87 | "chownr": {
88 | "version": "1.1.3",
89 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
90 | "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw=="
91 | },
92 | "classnames": {
93 | "version": "2.2.6",
94 | "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
95 | "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
96 | },
97 | "code-point-at": {
98 | "version": "1.1.0",
99 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
100 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
101 | },
102 | "concat-map": {
103 | "version": "0.0.1",
104 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
105 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
106 | },
107 | "console-control-strings": {
108 | "version": "1.1.0",
109 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
110 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
111 | },
112 | "core-util-is": {
113 | "version": "1.0.2",
114 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
115 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
116 | },
117 | "debug": {
118 | "version": "3.2.6",
119 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
120 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
121 | "requires": {
122 | "ms": "^2.1.1"
123 | }
124 | },
125 | "deep-eql": {
126 | "version": "3.0.1",
127 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
128 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
129 | "dev": true,
130 | "requires": {
131 | "type-detect": "^4.0.0"
132 | }
133 | },
134 | "deep-extend": {
135 | "version": "0.6.0",
136 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
137 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
138 | },
139 | "delegates": {
140 | "version": "1.0.0",
141 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
142 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
143 | },
144 | "detect-libc": {
145 | "version": "1.0.3",
146 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
147 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
148 | },
149 | "fs-minipass": {
150 | "version": "1.2.7",
151 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
152 | "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
153 | "requires": {
154 | "minipass": "^2.6.0"
155 | }
156 | },
157 | "fs.realpath": {
158 | "version": "1.0.0",
159 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
160 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
161 | },
162 | "gauge": {
163 | "version": "2.7.4",
164 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
165 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
166 | "requires": {
167 | "aproba": "^1.0.3",
168 | "console-control-strings": "^1.0.0",
169 | "has-unicode": "^2.0.0",
170 | "object-assign": "^4.1.0",
171 | "signal-exit": "^3.0.0",
172 | "string-width": "^1.0.1",
173 | "strip-ansi": "^3.0.1",
174 | "wide-align": "^1.1.0"
175 | }
176 | },
177 | "get-func-name": {
178 | "version": "2.0.0",
179 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
180 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
181 | "dev": true
182 | },
183 | "glob": {
184 | "version": "7.1.6",
185 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
186 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
187 | "requires": {
188 | "fs.realpath": "^1.0.0",
189 | "inflight": "^1.0.4",
190 | "inherits": "2",
191 | "minimatch": "^3.0.4",
192 | "once": "^1.3.0",
193 | "path-is-absolute": "^1.0.0"
194 | }
195 | },
196 | "has-unicode": {
197 | "version": "2.0.1",
198 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
199 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
200 | },
201 | "iconv-lite": {
202 | "version": "0.4.24",
203 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
204 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
205 | "requires": {
206 | "safer-buffer": ">= 2.1.2 < 3"
207 | }
208 | },
209 | "ignore-walk": {
210 | "version": "3.0.3",
211 | "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz",
212 | "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==",
213 | "requires": {
214 | "minimatch": "^3.0.4"
215 | }
216 | },
217 | "inflight": {
218 | "version": "1.0.6",
219 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
220 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
221 | "requires": {
222 | "once": "^1.3.0",
223 | "wrappy": "1"
224 | }
225 | },
226 | "inherits": {
227 | "version": "2.0.4",
228 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
229 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
230 | },
231 | "ini": {
232 | "version": "1.3.5",
233 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
234 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
235 | },
236 | "is-fullwidth-code-point": {
237 | "version": "1.0.0",
238 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
239 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
240 | "requires": {
241 | "number-is-nan": "^1.0.0"
242 | }
243 | },
244 | "isarray": {
245 | "version": "1.0.0",
246 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
247 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
248 | },
249 | "js-tokens": {
250 | "version": "4.0.0",
251 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
252 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
253 | },
254 | "lodash": {
255 | "version": "4.17.15",
256 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
257 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
258 | },
259 | "loose-envify": {
260 | "version": "1.4.0",
261 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
262 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
263 | "requires": {
264 | "js-tokens": "^3.0.0 || ^4.0.0"
265 | }
266 | },
267 | "meteor-node-stubs": {
268 | "version": "1.0.0",
269 | "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.0.0.tgz",
270 | "integrity": "sha512-QJwyv23wyXD3uEMzk5Xr/y5ezoVlCbHvBbrgdkVadn84dmifLRbs0PtD6EeNw5NLIk+SQSfxld7IMdEsneGz5w==",
271 | "requires": {
272 | "assert": "^1.4.1",
273 | "browserify-zlib": "^0.2.0",
274 | "buffer": "^5.2.1",
275 | "console-browserify": "^1.1.0",
276 | "constants-browserify": "^1.0.0",
277 | "crypto-browserify": "^3.12.0",
278 | "domain-browser": "^1.2.0",
279 | "events": "^3.0.0",
280 | "https-browserify": "^1.0.0",
281 | "os-browserify": "^0.3.0",
282 | "path-browserify": "^1.0.0",
283 | "process": "^0.11.10",
284 | "punycode": "^2.1.1",
285 | "querystring-es3": "^0.2.1",
286 | "readable-stream": "^3.3.0",
287 | "stream-browserify": "^2.0.2",
288 | "stream-http": "^3.0.0",
289 | "string_decoder": "^1.2.0",
290 | "timers-browserify": "^2.0.10",
291 | "tty-browserify": "0.0.1",
292 | "url": "^0.11.0",
293 | "util": "^0.11.1",
294 | "vm-browserify": "^1.1.0"
295 | },
296 | "dependencies": {
297 | "asn1.js": {
298 | "version": "4.10.1",
299 | "bundled": true,
300 | "requires": {
301 | "bn.js": "^4.0.0",
302 | "inherits": "^2.0.1",
303 | "minimalistic-assert": "^1.0.0"
304 | }
305 | },
306 | "assert": {
307 | "version": "1.4.1",
308 | "bundled": true,
309 | "requires": {
310 | "util": "0.10.3"
311 | },
312 | "dependencies": {
313 | "util": {
314 | "version": "0.10.3",
315 | "bundled": true,
316 | "requires": {
317 | "inherits": "2.0.1"
318 | }
319 | }
320 | }
321 | },
322 | "base64-js": {
323 | "version": "1.3.0",
324 | "bundled": true
325 | },
326 | "bn.js": {
327 | "version": "4.11.8",
328 | "bundled": true
329 | },
330 | "brorand": {
331 | "version": "1.1.0",
332 | "bundled": true
333 | },
334 | "browserify-aes": {
335 | "version": "1.2.0",
336 | "bundled": true,
337 | "requires": {
338 | "buffer-xor": "^1.0.3",
339 | "cipher-base": "^1.0.0",
340 | "create-hash": "^1.1.0",
341 | "evp_bytestokey": "^1.0.3",
342 | "inherits": "^2.0.1",
343 | "safe-buffer": "^5.0.1"
344 | }
345 | },
346 | "browserify-cipher": {
347 | "version": "1.0.1",
348 | "bundled": true,
349 | "requires": {
350 | "browserify-aes": "^1.0.4",
351 | "browserify-des": "^1.0.0",
352 | "evp_bytestokey": "^1.0.0"
353 | }
354 | },
355 | "browserify-des": {
356 | "version": "1.0.2",
357 | "bundled": true,
358 | "requires": {
359 | "cipher-base": "^1.0.1",
360 | "des.js": "^1.0.0",
361 | "inherits": "^2.0.1",
362 | "safe-buffer": "^5.1.2"
363 | }
364 | },
365 | "browserify-rsa": {
366 | "version": "4.0.1",
367 | "bundled": true,
368 | "requires": {
369 | "bn.js": "^4.1.0",
370 | "randombytes": "^2.0.1"
371 | }
372 | },
373 | "browserify-sign": {
374 | "version": "4.0.4",
375 | "bundled": true,
376 | "requires": {
377 | "bn.js": "^4.1.1",
378 | "browserify-rsa": "^4.0.0",
379 | "create-hash": "^1.1.0",
380 | "create-hmac": "^1.1.2",
381 | "elliptic": "^6.0.0",
382 | "inherits": "^2.0.1",
383 | "parse-asn1": "^5.0.0"
384 | }
385 | },
386 | "browserify-zlib": {
387 | "version": "0.2.0",
388 | "bundled": true,
389 | "requires": {
390 | "pako": "~1.0.5"
391 | }
392 | },
393 | "buffer": {
394 | "version": "5.2.1",
395 | "bundled": true,
396 | "requires": {
397 | "base64-js": "^1.0.2",
398 | "ieee754": "^1.1.4"
399 | }
400 | },
401 | "buffer-xor": {
402 | "version": "1.0.3",
403 | "bundled": true
404 | },
405 | "builtin-status-codes": {
406 | "version": "3.0.0",
407 | "bundled": true
408 | },
409 | "cipher-base": {
410 | "version": "1.0.4",
411 | "bundled": true,
412 | "requires": {
413 | "inherits": "^2.0.1",
414 | "safe-buffer": "^5.0.1"
415 | }
416 | },
417 | "console-browserify": {
418 | "version": "1.1.0",
419 | "bundled": true,
420 | "requires": {
421 | "date-now": "^0.1.4"
422 | }
423 | },
424 | "constants-browserify": {
425 | "version": "1.0.0",
426 | "bundled": true
427 | },
428 | "core-util-is": {
429 | "version": "1.0.2",
430 | "bundled": true
431 | },
432 | "create-ecdh": {
433 | "version": "4.0.3",
434 | "bundled": true,
435 | "requires": {
436 | "bn.js": "^4.1.0",
437 | "elliptic": "^6.0.0"
438 | }
439 | },
440 | "create-hash": {
441 | "version": "1.2.0",
442 | "bundled": true,
443 | "requires": {
444 | "cipher-base": "^1.0.1",
445 | "inherits": "^2.0.1",
446 | "md5.js": "^1.3.4",
447 | "ripemd160": "^2.0.1",
448 | "sha.js": "^2.4.0"
449 | }
450 | },
451 | "create-hmac": {
452 | "version": "1.1.7",
453 | "bundled": true,
454 | "requires": {
455 | "cipher-base": "^1.0.3",
456 | "create-hash": "^1.1.0",
457 | "inherits": "^2.0.1",
458 | "ripemd160": "^2.0.0",
459 | "safe-buffer": "^5.0.1",
460 | "sha.js": "^2.4.8"
461 | }
462 | },
463 | "crypto-browserify": {
464 | "version": "3.12.0",
465 | "bundled": true,
466 | "requires": {
467 | "browserify-cipher": "^1.0.0",
468 | "browserify-sign": "^4.0.0",
469 | "create-ecdh": "^4.0.0",
470 | "create-hash": "^1.1.0",
471 | "create-hmac": "^1.1.0",
472 | "diffie-hellman": "^5.0.0",
473 | "inherits": "^2.0.1",
474 | "pbkdf2": "^3.0.3",
475 | "public-encrypt": "^4.0.0",
476 | "randombytes": "^2.0.0",
477 | "randomfill": "^1.0.3"
478 | }
479 | },
480 | "date-now": {
481 | "version": "0.1.4",
482 | "bundled": true
483 | },
484 | "des.js": {
485 | "version": "1.0.0",
486 | "bundled": true,
487 | "requires": {
488 | "inherits": "^2.0.1",
489 | "minimalistic-assert": "^1.0.0"
490 | }
491 | },
492 | "diffie-hellman": {
493 | "version": "5.0.3",
494 | "bundled": true,
495 | "requires": {
496 | "bn.js": "^4.1.0",
497 | "miller-rabin": "^4.0.0",
498 | "randombytes": "^2.0.0"
499 | }
500 | },
501 | "domain-browser": {
502 | "version": "1.2.0",
503 | "bundled": true
504 | },
505 | "elliptic": {
506 | "version": "6.4.1",
507 | "bundled": true,
508 | "requires": {
509 | "bn.js": "^4.4.0",
510 | "brorand": "^1.0.1",
511 | "hash.js": "^1.0.0",
512 | "hmac-drbg": "^1.0.0",
513 | "inherits": "^2.0.1",
514 | "minimalistic-assert": "^1.0.0",
515 | "minimalistic-crypto-utils": "^1.0.0"
516 | }
517 | },
518 | "events": {
519 | "version": "3.0.0",
520 | "bundled": true
521 | },
522 | "evp_bytestokey": {
523 | "version": "1.0.3",
524 | "bundled": true,
525 | "requires": {
526 | "md5.js": "^1.3.4",
527 | "safe-buffer": "^5.1.1"
528 | }
529 | },
530 | "hash-base": {
531 | "version": "3.0.4",
532 | "bundled": true,
533 | "requires": {
534 | "inherits": "^2.0.1",
535 | "safe-buffer": "^5.0.1"
536 | }
537 | },
538 | "hash.js": {
539 | "version": "1.1.7",
540 | "bundled": true,
541 | "requires": {
542 | "inherits": "^2.0.3",
543 | "minimalistic-assert": "^1.0.1"
544 | },
545 | "dependencies": {
546 | "inherits": {
547 | "version": "2.0.3",
548 | "bundled": true
549 | }
550 | }
551 | },
552 | "hmac-drbg": {
553 | "version": "1.0.1",
554 | "bundled": true,
555 | "requires": {
556 | "hash.js": "^1.0.3",
557 | "minimalistic-assert": "^1.0.0",
558 | "minimalistic-crypto-utils": "^1.0.1"
559 | }
560 | },
561 | "https-browserify": {
562 | "version": "1.0.0",
563 | "bundled": true
564 | },
565 | "ieee754": {
566 | "version": "1.1.13",
567 | "bundled": true
568 | },
569 | "inherits": {
570 | "version": "2.0.1",
571 | "bundled": true
572 | },
573 | "isarray": {
574 | "version": "1.0.0",
575 | "bundled": true
576 | },
577 | "md5.js": {
578 | "version": "1.3.5",
579 | "bundled": true,
580 | "requires": {
581 | "hash-base": "^3.0.0",
582 | "inherits": "^2.0.1",
583 | "safe-buffer": "^5.1.2"
584 | }
585 | },
586 | "miller-rabin": {
587 | "version": "4.0.1",
588 | "bundled": true,
589 | "requires": {
590 | "bn.js": "^4.0.0",
591 | "brorand": "^1.0.1"
592 | }
593 | },
594 | "minimalistic-assert": {
595 | "version": "1.0.1",
596 | "bundled": true
597 | },
598 | "minimalistic-crypto-utils": {
599 | "version": "1.0.1",
600 | "bundled": true
601 | },
602 | "os-browserify": {
603 | "version": "0.3.0",
604 | "bundled": true
605 | },
606 | "pako": {
607 | "version": "1.0.10",
608 | "bundled": true
609 | },
610 | "parse-asn1": {
611 | "version": "5.1.4",
612 | "bundled": true,
613 | "requires": {
614 | "asn1.js": "^4.0.0",
615 | "browserify-aes": "^1.0.0",
616 | "create-hash": "^1.1.0",
617 | "evp_bytestokey": "^1.0.0",
618 | "pbkdf2": "^3.0.3",
619 | "safe-buffer": "^5.1.1"
620 | }
621 | },
622 | "path-browserify": {
623 | "version": "1.0.0",
624 | "bundled": true
625 | },
626 | "pbkdf2": {
627 | "version": "3.0.17",
628 | "bundled": true,
629 | "requires": {
630 | "create-hash": "^1.1.2",
631 | "create-hmac": "^1.1.4",
632 | "ripemd160": "^2.0.1",
633 | "safe-buffer": "^5.0.1",
634 | "sha.js": "^2.4.8"
635 | }
636 | },
637 | "process": {
638 | "version": "0.11.10",
639 | "bundled": true
640 | },
641 | "process-nextick-args": {
642 | "version": "2.0.0",
643 | "bundled": true
644 | },
645 | "public-encrypt": {
646 | "version": "4.0.3",
647 | "bundled": true,
648 | "requires": {
649 | "bn.js": "^4.1.0",
650 | "browserify-rsa": "^4.0.0",
651 | "create-hash": "^1.1.0",
652 | "parse-asn1": "^5.0.0",
653 | "randombytes": "^2.0.1",
654 | "safe-buffer": "^5.1.2"
655 | }
656 | },
657 | "punycode": {
658 | "version": "2.1.1",
659 | "bundled": true
660 | },
661 | "querystring": {
662 | "version": "0.2.0",
663 | "bundled": true
664 | },
665 | "querystring-es3": {
666 | "version": "0.2.1",
667 | "bundled": true
668 | },
669 | "randombytes": {
670 | "version": "2.1.0",
671 | "bundled": true,
672 | "requires": {
673 | "safe-buffer": "^5.1.0"
674 | }
675 | },
676 | "randomfill": {
677 | "version": "1.0.4",
678 | "bundled": true,
679 | "requires": {
680 | "randombytes": "^2.0.5",
681 | "safe-buffer": "^5.1.0"
682 | }
683 | },
684 | "readable-stream": {
685 | "version": "3.3.0",
686 | "bundled": true,
687 | "requires": {
688 | "inherits": "^2.0.3",
689 | "string_decoder": "^1.1.1",
690 | "util-deprecate": "^1.0.1"
691 | },
692 | "dependencies": {
693 | "inherits": {
694 | "version": "2.0.3",
695 | "bundled": true
696 | }
697 | }
698 | },
699 | "ripemd160": {
700 | "version": "2.0.2",
701 | "bundled": true,
702 | "requires": {
703 | "hash-base": "^3.0.0",
704 | "inherits": "^2.0.1"
705 | }
706 | },
707 | "safe-buffer": {
708 | "version": "5.1.2",
709 | "bundled": true
710 | },
711 | "setimmediate": {
712 | "version": "1.0.5",
713 | "bundled": true
714 | },
715 | "sha.js": {
716 | "version": "2.4.11",
717 | "bundled": true,
718 | "requires": {
719 | "inherits": "^2.0.1",
720 | "safe-buffer": "^5.0.1"
721 | }
722 | },
723 | "stream-browserify": {
724 | "version": "2.0.2",
725 | "bundled": true,
726 | "requires": {
727 | "inherits": "~2.0.1",
728 | "readable-stream": "^2.0.2"
729 | },
730 | "dependencies": {
731 | "readable-stream": {
732 | "version": "2.3.6",
733 | "bundled": true,
734 | "requires": {
735 | "core-util-is": "~1.0.0",
736 | "inherits": "~2.0.3",
737 | "isarray": "~1.0.0",
738 | "process-nextick-args": "~2.0.0",
739 | "safe-buffer": "~5.1.1",
740 | "string_decoder": "~1.1.1",
741 | "util-deprecate": "~1.0.1"
742 | },
743 | "dependencies": {
744 | "inherits": {
745 | "version": "2.0.3",
746 | "bundled": true
747 | }
748 | }
749 | },
750 | "string_decoder": {
751 | "version": "1.1.1",
752 | "bundled": true,
753 | "requires": {
754 | "safe-buffer": "~5.1.0"
755 | }
756 | }
757 | }
758 | },
759 | "stream-http": {
760 | "version": "3.0.0",
761 | "bundled": true,
762 | "requires": {
763 | "builtin-status-codes": "^3.0.0",
764 | "inherits": "^2.0.1",
765 | "readable-stream": "^3.0.6",
766 | "xtend": "^4.0.0"
767 | }
768 | },
769 | "string_decoder": {
770 | "version": "1.2.0",
771 | "bundled": true,
772 | "requires": {
773 | "safe-buffer": "~5.1.0"
774 | }
775 | },
776 | "timers-browserify": {
777 | "version": "2.0.10",
778 | "bundled": true,
779 | "requires": {
780 | "setimmediate": "^1.0.4"
781 | }
782 | },
783 | "tty-browserify": {
784 | "version": "0.0.1",
785 | "bundled": true
786 | },
787 | "url": {
788 | "version": "0.11.0",
789 | "bundled": true,
790 | "requires": {
791 | "punycode": "1.3.2",
792 | "querystring": "0.2.0"
793 | },
794 | "dependencies": {
795 | "punycode": {
796 | "version": "1.3.2",
797 | "bundled": true
798 | }
799 | }
800 | },
801 | "util": {
802 | "version": "0.11.1",
803 | "bundled": true,
804 | "requires": {
805 | "inherits": "2.0.3"
806 | },
807 | "dependencies": {
808 | "inherits": {
809 | "version": "2.0.3",
810 | "bundled": true
811 | }
812 | }
813 | },
814 | "util-deprecate": {
815 | "version": "1.0.2",
816 | "bundled": true
817 | },
818 | "vm-browserify": {
819 | "version": "1.1.0",
820 | "bundled": true
821 | },
822 | "xtend": {
823 | "version": "4.0.1",
824 | "bundled": true
825 | }
826 | }
827 | },
828 | "minimatch": {
829 | "version": "3.0.4",
830 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
831 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
832 | "requires": {
833 | "brace-expansion": "^1.1.7"
834 | }
835 | },
836 | "minimist": {
837 | "version": "0.0.8",
838 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
839 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
840 | },
841 | "minipass": {
842 | "version": "2.9.0",
843 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
844 | "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
845 | "requires": {
846 | "safe-buffer": "^5.1.2",
847 | "yallist": "^3.0.0"
848 | }
849 | },
850 | "minizlib": {
851 | "version": "1.3.3",
852 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
853 | "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
854 | "requires": {
855 | "minipass": "^2.9.0"
856 | }
857 | },
858 | "mkdirp": {
859 | "version": "0.5.1",
860 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
861 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
862 | "requires": {
863 | "minimist": "0.0.8"
864 | }
865 | },
866 | "ms": {
867 | "version": "2.1.2",
868 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
869 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
870 | },
871 | "nan": {
872 | "version": "2.14.0",
873 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
874 | "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
875 | },
876 | "needle": {
877 | "version": "2.3.2",
878 | "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.2.tgz",
879 | "integrity": "sha512-DUzITvPVDUy6vczKKYTnWc/pBZ0EnjMJnQ3y+Jo5zfKFimJs7S3HFCxCRZYB9FUZcrzUQr3WsmvZgddMEIZv6w==",
880 | "requires": {
881 | "debug": "^3.2.6",
882 | "iconv-lite": "^0.4.4",
883 | "sax": "^1.2.4"
884 | }
885 | },
886 | "node-pre-gyp": {
887 | "version": "0.14.0",
888 | "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz",
889 | "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==",
890 | "requires": {
891 | "detect-libc": "^1.0.2",
892 | "mkdirp": "^0.5.1",
893 | "needle": "^2.2.1",
894 | "nopt": "^4.0.1",
895 | "npm-packlist": "^1.1.6",
896 | "npmlog": "^4.0.2",
897 | "rc": "^1.2.7",
898 | "rimraf": "^2.6.1",
899 | "semver": "^5.3.0",
900 | "tar": "^4.4.2"
901 | }
902 | },
903 | "nopt": {
904 | "version": "4.0.1",
905 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
906 | "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
907 | "requires": {
908 | "abbrev": "1",
909 | "osenv": "^0.1.4"
910 | }
911 | },
912 | "npm-bundled": {
913 | "version": "1.1.1",
914 | "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz",
915 | "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==",
916 | "requires": {
917 | "npm-normalize-package-bin": "^1.0.1"
918 | }
919 | },
920 | "npm-normalize-package-bin": {
921 | "version": "1.0.1",
922 | "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
923 | "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="
924 | },
925 | "npm-packlist": {
926 | "version": "1.4.8",
927 | "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
928 | "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
929 | "requires": {
930 | "ignore-walk": "^3.0.1",
931 | "npm-bundled": "^1.0.1",
932 | "npm-normalize-package-bin": "^1.0.1"
933 | }
934 | },
935 | "npmlog": {
936 | "version": "4.1.2",
937 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
938 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
939 | "requires": {
940 | "are-we-there-yet": "~1.1.2",
941 | "console-control-strings": "~1.1.0",
942 | "gauge": "~2.7.3",
943 | "set-blocking": "~2.0.0"
944 | }
945 | },
946 | "number-is-nan": {
947 | "version": "1.0.1",
948 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
949 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
950 | },
951 | "object-assign": {
952 | "version": "4.1.1",
953 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
954 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
955 | },
956 | "once": {
957 | "version": "1.4.0",
958 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
959 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
960 | "requires": {
961 | "wrappy": "1"
962 | }
963 | },
964 | "os-homedir": {
965 | "version": "1.0.2",
966 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
967 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
968 | },
969 | "os-tmpdir": {
970 | "version": "1.0.2",
971 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
972 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
973 | },
974 | "osenv": {
975 | "version": "0.1.5",
976 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
977 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
978 | "requires": {
979 | "os-homedir": "^1.0.0",
980 | "os-tmpdir": "^1.0.0"
981 | }
982 | },
983 | "path-is-absolute": {
984 | "version": "1.0.1",
985 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
986 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
987 | },
988 | "pathval": {
989 | "version": "1.1.0",
990 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
991 | "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
992 | "dev": true
993 | },
994 | "process-nextick-args": {
995 | "version": "2.0.1",
996 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
997 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
998 | },
999 | "prop-types": {
1000 | "version": "15.7.2",
1001 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
1002 | "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
1003 | "requires": {
1004 | "loose-envify": "^1.4.0",
1005 | "object-assign": "^4.1.1",
1006 | "react-is": "^16.8.1"
1007 | }
1008 | },
1009 | "rc": {
1010 | "version": "1.2.8",
1011 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
1012 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
1013 | "requires": {
1014 | "deep-extend": "^0.6.0",
1015 | "ini": "~1.3.0",
1016 | "minimist": "^1.2.0",
1017 | "strip-json-comments": "~2.0.1"
1018 | },
1019 | "dependencies": {
1020 | "minimist": {
1021 | "version": "1.2.0",
1022 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1023 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
1024 | }
1025 | }
1026 | },
1027 | "react": {
1028 | "version": "16.13.1",
1029 | "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
1030 | "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
1031 | "requires": {
1032 | "loose-envify": "^1.1.0",
1033 | "object-assign": "^4.1.1",
1034 | "prop-types": "^15.6.2"
1035 | }
1036 | },
1037 | "react-dom": {
1038 | "version": "16.13.1",
1039 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
1040 | "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
1041 | "requires": {
1042 | "loose-envify": "^1.1.0",
1043 | "object-assign": "^4.1.1",
1044 | "prop-types": "^15.6.2",
1045 | "scheduler": "^0.19.1"
1046 | }
1047 | },
1048 | "react-is": {
1049 | "version": "16.13.1",
1050 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
1051 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
1052 | },
1053 | "readable-stream": {
1054 | "version": "2.3.7",
1055 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
1056 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
1057 | "requires": {
1058 | "core-util-is": "~1.0.0",
1059 | "inherits": "~2.0.3",
1060 | "isarray": "~1.0.0",
1061 | "process-nextick-args": "~2.0.0",
1062 | "safe-buffer": "~5.1.1",
1063 | "string_decoder": "~1.1.1",
1064 | "util-deprecate": "~1.0.1"
1065 | }
1066 | },
1067 | "regenerator-runtime": {
1068 | "version": "0.13.5",
1069 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
1070 | "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
1071 | },
1072 | "rimraf": {
1073 | "version": "2.7.1",
1074 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
1075 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
1076 | "requires": {
1077 | "glob": "^7.1.3"
1078 | }
1079 | },
1080 | "safe-buffer": {
1081 | "version": "5.1.2",
1082 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1083 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1084 | },
1085 | "safer-buffer": {
1086 | "version": "2.1.2",
1087 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1088 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1089 | },
1090 | "sax": {
1091 | "version": "1.2.4",
1092 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
1093 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
1094 | },
1095 | "scheduler": {
1096 | "version": "0.19.1",
1097 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
1098 | "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
1099 | "requires": {
1100 | "loose-envify": "^1.1.0",
1101 | "object-assign": "^4.1.1"
1102 | }
1103 | },
1104 | "semver": {
1105 | "version": "5.7.1",
1106 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1107 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
1108 | },
1109 | "set-blocking": {
1110 | "version": "2.0.0",
1111 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1112 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
1113 | },
1114 | "signal-exit": {
1115 | "version": "3.0.2",
1116 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
1117 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
1118 | },
1119 | "string-width": {
1120 | "version": "1.0.2",
1121 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
1122 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
1123 | "requires": {
1124 | "code-point-at": "^1.0.0",
1125 | "is-fullwidth-code-point": "^1.0.0",
1126 | "strip-ansi": "^3.0.0"
1127 | }
1128 | },
1129 | "string_decoder": {
1130 | "version": "1.1.1",
1131 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1132 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1133 | "requires": {
1134 | "safe-buffer": "~5.1.0"
1135 | }
1136 | },
1137 | "strip-ansi": {
1138 | "version": "3.0.1",
1139 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1140 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1141 | "requires": {
1142 | "ansi-regex": "^2.0.0"
1143 | }
1144 | },
1145 | "strip-json-comments": {
1146 | "version": "2.0.1",
1147 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1148 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
1149 | },
1150 | "tar": {
1151 | "version": "4.4.13",
1152 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
1153 | "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
1154 | "requires": {
1155 | "chownr": "^1.1.1",
1156 | "fs-minipass": "^1.2.5",
1157 | "minipass": "^2.8.6",
1158 | "minizlib": "^1.2.1",
1159 | "mkdirp": "^0.5.0",
1160 | "safe-buffer": "^5.1.2",
1161 | "yallist": "^3.0.3"
1162 | }
1163 | },
1164 | "type-detect": {
1165 | "version": "4.0.8",
1166 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
1167 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
1168 | "dev": true
1169 | },
1170 | "util-deprecate": {
1171 | "version": "1.0.2",
1172 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1173 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1174 | },
1175 | "wide-align": {
1176 | "version": "1.1.3",
1177 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
1178 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
1179 | "requires": {
1180 | "string-width": "^1.0.2 || 2"
1181 | }
1182 | },
1183 | "wrappy": {
1184 | "version": "1.0.2",
1185 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1186 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
1187 | },
1188 | "yallist": {
1189 | "version": "3.1.1",
1190 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
1191 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
1192 | }
1193 | }
1194 | }
1195 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "simple-todos-react",
3 | "private": true,
4 | "scripts": {
5 | "start": "meteor run",
6 | "test": "meteor test --once --driver-package meteortesting:mocha",
7 | "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha",
8 | "visualize": "meteor --production --extra-packages bundle-visualizer"
9 | },
10 | "dependencies": {
11 | "@babel/runtime": "^7.6.0",
12 | "bcrypt": "^3.0.8",
13 | "classnames": "^2.2.6",
14 | "lodash": "^4.17.15",
15 | "meteor-node-stubs": "^1.0.0",
16 | "react": "^16.13.0",
17 | "react-dom": "^16.13.0"
18 | },
19 | "meteor": {
20 | "mainModule": {
21 | "client": "client/main.jsx",
22 | "server": "server/main.js"
23 | },
24 | "testModule": "tests/main.js"
25 | },
26 | "devDependencies": {
27 | "chai": "^4.2.0"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/meteor/simple-todos-react/23c90b5c6258d70d40f2f927b136d7f8d8b80399/screenshot.png
--------------------------------------------------------------------------------
/server/main.js:
--------------------------------------------------------------------------------
1 | import { Meteor } from 'meteor/meteor';
2 | import '/imports/api/tasks';
3 |
4 | Meteor.startup(() => {
5 | if (!Accounts.findUserByUsername('meteorite')) {
6 | Accounts.createUser({
7 | username: 'meteorite',
8 | password: 'password'
9 | });
10 | }
11 | });
12 |
--------------------------------------------------------------------------------
/tests/main.js:
--------------------------------------------------------------------------------
1 | import assert from "assert";
2 |
3 | import "../imports/api/tasks.tests.js";
4 |
5 | describe("simple-todos-react", function () {
6 | it("package.json has correct name", async function () {
7 | const { name } = await import("../package.json");
8 | assert.strictEqual(name, "simple-todos-react");
9 | });
10 |
11 | if (Meteor.isClient) {
12 | it("client is not server", function () {
13 | assert.strictEqual(Meteor.isServer, false);
14 | });
15 | }
16 |
17 | if (Meteor.isServer) {
18 | it("server is not client", function () {
19 | assert.strictEqual(Meteor.isClient, false);
20 | });
21 | }
22 | });
23 |
--------------------------------------------------------------------------------