From b13e5fb41a24a20f24b81355855f7ffaaf97c4eb Mon Sep 17 00:00:00 2001
From: Bouncey
Date: Mon, 18 Feb 2019 19:32:49 +0000
Subject: [PATCH] feat: Use prettier-eslint to format code
---
api-server/common/models/User-Identity.js | 8 +-
api-server/common/models/block.js | 9 +-
api-server/common/utils/flash.js | 10 +-
api-server/common/utils/map.js | 35 +-
api-server/common/utils/polyvinyl.js | 61 +-
api-server/common/utils/themes.js | 9 +-
api-server/jest.config.js | 4 +-
api-server/server/boot/certificate.js | 5 +-
api-server/server/boot/challenge.js | 2 +-
api-server/server/boot/commit.js | 158 ++--
api-server/server/boot/donate.js | 56 +-
api-server/server/boot/explorer.js | 2 +-
api-server/server/boot/news.js | 4 +-
api-server/server/boot/randomAPIs.js | 8 +-
api-server/server/boot/status.js | 2 +-
api-server/server/boot/t-wiki.js | 4 +-
api-server/server/boot/user.js | 3 +-
api-server/server/component-passport.js | 5 +-
.../server/middlewares/add-return-to.js | 12 +-
.../server/middlewares/constant-headers.js | 3 +-
api-server/server/middlewares/csp.js | 8 +-
api-server/server/middlewares/csurf.js | 11 +-
.../server/middlewares/flash-cheaters.js | 4 +-
api-server/server/middlewares/validator.js | 30 +-
api-server/server/models/about.js | 22 +-
api-server/server/production-start.js | 1 -
api-server/server/rss/index.js | 41 +-
api-server/server/rss/medium.js | 17 +-
api-server/server/utils/about.js | 4 +-
api-server/server/utils/auth.js | 18 +-
api-server/server/utils/commit.js | 52 +-
.../server/utils/create-handled-error.js | 29 +-
api-server/server/utils/date-utils.js | 13 +-
.../server/utils/lang-passthrough-urls.js | 6 +-
api-server/server/utils/map.js | 218 ++---
api-server/server/utils/publicUserProps.js | 8 +-
api-server/server/utils/rx.js | 4 +-
api-server/server/utils/url-utils.js | 10 +-
api-server/server/utils/user-stats.js | 55 +-
client/jest.config.js | 4 +-
client/jest.transform.js | 8 +-
.../create-navigation-node.js | 5 +-
.../Donation/components/DonateCompletion.js | 10 +-
.../Donation/components/DonateModal.js | 47 +-
.../Donation/components/DonateText.js | 7 +-
.../Donation/components/StripeCardForm.js | 12 +-
client/src/components/Footer/index.js | 8 +-
client/src/components/Map/components/Block.js | 5 +-
client/src/components/formHelpers/Form.js | 4 +-
client/src/components/layouts/Default.js | 2 +-
.../layouts/components/guide/NavPanel.js | 4 +-
client/src/pages/donate-other.js | 281 +++---
client/src/pages/donate.js | 4 +-
client/src/pages/learn.js | 4 +-
client/src/redux/night-mode-saga.js | 2 +-
client/src/redux/rootSaga.js | 7 +-
.../src/templates/Challenges/backend/Show.js | 2 +-
.../components/Challenge-Description.js | 5 +-
.../Challenges/components/ResetModal.js | 5 +-
.../Challenges/components/Tool-Panel.js | 11 +-
.../Challenges/project/ProjectForm.js | 4 +-
.../Challenges/project/Tool-Panel.js | 35 +-
.../Challenges/rechallenge/throwers.js | 2 +-
.../Challenges/rechallenge/transformers.js | 4 +-
.../Challenges/redux/code-lock-epic.js | 5 +-
.../Challenges/redux/id-to-name-map-saga.js | 8 +-
.../Challenges/utils/fetch-and-cache.js | 3 +-
.../templates/Introduction/SuperBlockIntro.js | 5 +-
client/utils/buildChallenges.js | 9 +-
client/utils/formatting.js | 2 +-
client/utils/titleify.js | 23 +-
curriculum/getChallenges.js | 2 +-
curriculum/gulpfile.js | 8 +-
curriculum/index.js | 129 +--
curriculum/md-translation.js | 6 +-
curriculum/test/utils/challengeTitles.js | 2 +-
curriculum/test/utils/mongoIds.js | 2 +-
package-lock.json | 883 ++++++++++++++++++
package.json | 2 +
tools/scripts/createRedirects.test.js | 4 +-
tools/scripts/seed/seedAuthUser.js | 147 ++-
tools/scripts/seed/seedChallenges.js | 111 ++-
82 files changed, 1767 insertions(+), 1017 deletions(-)
diff --git a/api-server/common/models/User-Identity.js b/api-server/common/models/User-Identity.js
index d271b78da4..bff8f3e6a5 100644
--- a/api-server/common/models/User-Identity.js
+++ b/api-server/common/models/User-Identity.js
@@ -115,10 +115,10 @@ export default function(UserIdent) {
return identity
? Observable.of(identity.user())
: User.findOne$({ where: { email } }).flatMap(user => {
- return user
- ? Observable.of(user)
- : User.create$({ email }).toPromise();
- });
+ return user
+ ? Observable.of(user)
+ : User.create$({ email }).toPromise();
+ });
})
.flatMap(user => {
const createToken = observeQuery(AccessToken, 'create', {
diff --git a/api-server/common/models/block.js b/api-server/common/models/block.js
index fb8498cd53..888082e7c1 100644
--- a/api-server/common/models/block.js
+++ b/api-server/common/models/block.js
@@ -2,11 +2,8 @@ import { Observable } from 'rx';
export default function(Block) {
Block.on('dataSourceAttached', () => {
- Block.findOne$ =
- Observable.fromNodeCallback(Block.findOne, Block);
- Block.findById$ =
- Observable.fromNodeCallback(Block.findById, Block);
- Block.find$ =
- Observable.fromNodeCallback(Block.find, Block);
+ Block.findOne$ = Observable.fromNodeCallback(Block.findOne, Block);
+ Block.findById$ = Observable.fromNodeCallback(Block.findById, Block);
+ Block.find$ = Observable.fromNodeCallback(Block.find, Block);
});
}
diff --git a/api-server/common/utils/flash.js b/api-server/common/utils/flash.js
index b965b3680e..b1ece41452 100644
--- a/api-server/common/utils/flash.js
+++ b/api-server/common/utils/flash.js
@@ -1,10 +1,8 @@
import _ from 'lodash';
-export const alertTypes = _.keyBy([
- 'success',
- 'info',
- 'warning',
- 'danger'
-], _.identity);
+export const alertTypes = _.keyBy(
+ ['success', 'info', 'warning', 'danger'],
+ _.identity
+);
export const normalizeAlertType = alertType => alertTypes[alertType] || 'info';
diff --git a/api-server/common/utils/map.js b/api-server/common/utils/map.js
index 9ce2e1b8ff..92eda2ea01 100644
--- a/api-server/common/utils/map.js
+++ b/api-server/common/utils/map.js
@@ -1,15 +1,9 @@
import emptyProtector from './empty-protector';
-export function checkMapData(
- {
- entities: {
- challenge,
- block,
- superBlock
- },
- result: { superBlocks }
- }
-) {
+export function checkMapData({
+ entities: { challenge, block, superBlock },
+ result: { superBlocks }
+}) {
if (
!challenge ||
!block ||
@@ -17,9 +11,7 @@ export function checkMapData(
!superBlocks ||
!superBlocks.length
) {
- throw new Error(
- 'entities not found, db may not be properly seeded'
- );
+ throw new Error('entities not found, db may not be properly seeded');
}
}
// getFirstChallenge(
@@ -33,11 +25,8 @@ export function getFirstChallenge({
result: { superBlocks }
}) {
return challenge[
- emptyProtector(block[
- emptyProtector(superBlock[
- superBlocks[0]
- ]).blocks[0]
- ]).challenges[0]
+ emptyProtector(block[emptyProtector(superBlock[superBlocks[0]]).blocks[0]])
+ .challenges[0]
];
}
@@ -52,12 +41,10 @@ export function getFirstChallenge({
// };
export function createNameIdMap({ challenge }) {
return {
- challengeIdToName: Object.keys(challenge)
- .reduce((map, challengeName) => {
- map[challenge[challengeName].id] =
- challenge[challengeName].dashedName;
- return map;
- }, {})
+ challengeIdToName: Object.keys(challenge).reduce((map, challengeName) => {
+ map[challenge[challengeName].id] = challenge[challengeName].dashedName;
+ return map;
+ }, {})
};
}
// addNameIdMap(
diff --git a/api-server/common/utils/polyvinyl.js b/api-server/common/utils/polyvinyl.js
index ed3faf53aa..790f8bd508 100644
--- a/api-server/common/utils/polyvinyl.js
+++ b/api-server/common/utils/polyvinyl.js
@@ -3,14 +3,11 @@ import invariant from 'invariant';
import { Observable } from 'rx';
import castToObservable from '../../server/utils/cast-to-observable';
-
// createFileStream(
// files: [...PolyVinyl]
// ) => Observable[...Observable[...PolyVinyl]]
export function createFileStream(files = []) {
- return Observable.of(
- Observable.from(files)
- );
+ return Observable.of(Observable.from(files));
}
// Observable::pipe(
@@ -20,8 +17,8 @@ export function createFileStream(files = []) {
// ) => Observable[...Observable[...PolyVinyl]]
export function pipe(project) {
const source = this;
- return source.map(
- files => files.flatMap(file => castToObservable(project(file)))
+ return source.map(files =>
+ files.flatMap(file => castToObservable(project(file)))
);
}
@@ -44,24 +41,10 @@ export function pipe(project) {
// contents: String,
// history?: [...String],
// }) => PolyVinyl, throws
-export function createPoly({
- name,
- ext,
- contents,
- history,
- ...rest
-} = {}) {
- invariant(
- typeof name === 'string',
- 'name must be a string but got %s',
- name
- );
+export function createPoly({ name, ext, contents, history, ...rest } = {}) {
+ invariant(typeof name === 'string', 'name must be a string but got %s', name);
- invariant(
- typeof ext === 'string',
- 'ext must be a string, but was %s',
- ext
- );
+ invariant(typeof ext === 'string', 'ext must be a string, but was %s', ext);
invariant(
typeof contents === 'string',
@@ -71,7 +54,7 @@ export function createPoly({
return {
...rest,
- history: Array.isArray(history) ? history : [ name + ext ],
+ history: Array.isArray(history) ? history : [name + ext],
name,
ext,
path: name + '.' + ext,
@@ -83,11 +66,13 @@ export function createPoly({
// isPoly(poly: Any) => Boolean
export function isPoly(poly) {
- return poly &&
+ return (
+ poly &&
typeof poly.contents === 'string' &&
typeof poly.name === 'string' &&
typeof poly.ext === 'string' &&
- Array.isArray(poly.history);
+ Array.isArray(poly.history)
+ );
}
// checkPoly(poly: Any) => Void, throws
@@ -125,7 +110,7 @@ export function setExt(ext, poly) {
path: poly.name + '.' + ext,
key: poly.name + ext
};
- newPoly.history = [ ...poly.history, newPoly.path ];
+ newPoly.history = [...poly.history, newPoly.path];
return newPoly;
}
@@ -138,7 +123,7 @@ export function setName(name, poly) {
path: name + '.' + poly.ext,
key: name + poly.ext
};
- newPoly.history = [ ...poly.history, newPoly.path ];
+ newPoly.history = [...poly.history, newPoly.path];
return newPoly;
}
@@ -177,10 +162,12 @@ export function appendToTail(tail, poly) {
// compileHeadTail(padding: String, poly: PolyVinyl) => PolyVinyl
export function compileHeadTail(padding = '', poly) {
- return clearHeadTail(transformContents(
- () => [ poly.head, poly.contents, poly.tail ].join(padding),
- poly
- ));
+ return clearHeadTail(
+ transformContents(
+ () => [poly.head, poly.contents, poly.tail].join(padding),
+ poly
+ )
+ );
}
// transformContents(
@@ -192,10 +179,7 @@ export function compileHeadTail(padding = '', poly) {
// already contains a source, this version will continue as
// the source property
export function transformContents(wrap, poly) {
- const newPoly = setContent(
- wrap(poly.contents),
- poly
- );
+ const newPoly = setContent(wrap(poly.contents), poly);
// if no source exist, set the original contents as source
newPoly.source = poly.source || poly.contents;
return newPoly;
@@ -207,10 +191,7 @@ export function transformContents(wrap, poly) {
// ) => PolyVinyl
export function transformHeadTailAndContents(wrap, poly) {
return {
- ...transformContents(
- wrap,
- poly
- ),
+ ...transformContents(wrap, poly),
head: wrap(poly.head),
tail: wrap(poly.tail)
};
diff --git a/api-server/common/utils/themes.js b/api-server/common/utils/themes.js
index 0f96929894..97947e6c36 100644
--- a/api-server/common/utils/themes.js
+++ b/api-server/common/utils/themes.js
@@ -3,8 +3,7 @@ export const themes = {
default: 'default'
};
-export const invertTheme = currentTheme => (
- !currentTheme || currentTheme === themes.default ?
- themes.night :
- themes.default
-);
+export const invertTheme = currentTheme =>
+ !currentTheme || currentTheme === themes.default
+ ? themes.night
+ : themes.default;
diff --git a/api-server/jest.config.js b/api-server/jest.config.js
index b1cbc422f5..24956b05cf 100644
--- a/api-server/jest.config.js
+++ b/api-server/jest.config.js
@@ -16,7 +16,5 @@ module.exports = {
transform: {
'^.+\\.js$': 'babel-jest'
},
- transformIgnorePatterns: [
- 'node_modules/(?!(gatsby)/)'
- ]
+ transformIgnorePatterns: ['node_modules/(?!(gatsby)/)']
};
diff --git a/api-server/server/boot/certificate.js b/api-server/server/boot/certificate.js
index df9f84000f..a8f01ae7c8 100644
--- a/api-server/server/boot/certificate.js
+++ b/api-server/server/boot/certificate.js
@@ -350,9 +350,8 @@ function createShowCert(app) {
messages: [
{
type: 'info',
- message: `We could not find a user with the username "${
- username
- }"`
+ message:
+ 'We could not find a user with the username "' + username + '"'
}
]
});
diff --git a/api-server/server/boot/challenge.js b/api-server/server/boot/challenge.js
index 8f18aa0878..7eb5f61cf4 100644
--- a/api-server/server/boot/challenge.js
+++ b/api-server/server/boot/challenge.js
@@ -321,7 +321,7 @@ export default async function bootChallenge(app, done) {
) {
req.flash(
'danger',
- 'You haven\'t supplied the necessary URLs for us to inspect your work.'
+ "You haven't supplied the necessary URLs for us to inspect your work."
);
return res.sendStatus(403);
}
diff --git a/api-server/server/boot/commit.js b/api-server/server/boot/commit.js
index 8eb32c16e4..782b474bb8 100644
--- a/api-server/server/boot/commit.js
+++ b/api-server/server/boot/commit.js
@@ -6,23 +6,13 @@ import dedent from 'dedent';
import { homeLocation } from '../../../config/env';
import nonprofits from '../utils/commit.json';
-import {
- commitGoals,
- completeCommitment$
-} from '../utils/commit';
+import { commitGoals, completeCommitment$ } from '../utils/commit';
-import {
- unDasherize
-} from '../utils';
+import { unDasherize } from '../utils';
-import {
- observeQuery,
- saveInstance
-} from '../utils/rx';
+import { observeQuery, saveInstance } from '../utils/rx';
-import {
- ifNoUserRedirectTo
-} from '../utils/middleware';
+import { ifNoUserRedirectTo } from '../utils/middleware';
const sendNonUserToSignIn = ifNoUserRedirectTo(
`${homeLocation}/signin`,
@@ -41,12 +31,12 @@ const debug = debugFactory('fcc:commit');
function findNonprofit(name) {
let nonprofit;
if (name) {
- nonprofit = _.find(nonprofits, (nonprofit) => {
+ nonprofit = _.find(nonprofits, nonprofit => {
return name === nonprofit.name;
});
}
- nonprofit = nonprofit || nonprofits[ _.random(0, nonprofits.length - 1) ];
+ nonprofit = nonprofit || nonprofits[_.random(0, nonprofits.length - 1)];
return nonprofit;
}
@@ -55,33 +45,15 @@ export default function commit(app) {
const api = app.loopback.Router();
const { Pledge } = app.models;
- router.get(
- '/commit',
- commitToNonprofit
- );
+ router.get('/commit', commitToNonprofit);
- router.get(
- '/commit/pledge',
- sendNonUserToSignIn,
- pledge
- );
+ router.get('/commit/pledge', sendNonUserToSignIn, pledge);
- router.get(
- '/commit/directory',
- renderDirectory
- );
+ router.get('/commit/directory', renderDirectory);
- api.post(
- '/commit/stop-commitment',
- sendNonUserToCommit,
- stopCommit
- );
+ api.post('/commit/stop-commitment', sendNonUserToCommit, stopCommit);
- api.post(
- '/commit/complete-goal',
- sendNonUserToCommit,
- completeCommitment
- );
+ api.post('/commit/complete-goal', sendNonUserToCommit, completeCommitment);
app.use(api);
app.use(router);
@@ -101,33 +73,26 @@ export default function commit(app) {
}
return Observable.just();
})
- .subscribe(
- pledge => {
- if (pledge) {
- debug('found previous pledge');
- req.flash(
- 'info',
- dedent`
+ .subscribe(pledge => {
+ if (pledge) {
+ debug('found previous pledge');
+ req.flash(
+ 'info',
+ dedent`
Looks like you already have a pledge to ${pledge.displayName}.
Clicking "Commit" here will replace your old commitment. If you
do change your commitment, please remember to cancel your
previous recurring donation directly with ${pledge.displayName}.
`
- );
- }
- res.render(
- 'commit/',
- {
- title: 'Commit to a nonprofit. Commit to your goal.',
- pledge,
- ...commitGoals,
- ...nonprofit
- }
);
- },
- next
- );
-
+ }
+ res.render('commit/', {
+ title: 'Commit to a nonprofit. Commit to your goal.',
+ pledge,
+ ...commitGoals,
+ ...nonprofit
+ });
+ }, next);
}
function pledge(req, res, next) {
@@ -143,14 +108,12 @@ export default function commit(app) {
observeQuery(user, 'pledge')
.flatMap(oldPledge => {
// create new pledge for user
- const pledge = Pledge(
- {
- amount,
- goal,
- userId: user.id,
- ...nonprofit
- }
- );
+ const pledge = Pledge({
+ amount,
+ goal,
+ userId: user.id,
+ ...nonprofit
+ });
if (oldPledge) {
debug('user already has pledge, creating a new one');
@@ -159,28 +122,24 @@ export default function commit(app) {
oldPledge.formerUser = user.id;
oldPledge.endDate = new Date();
oldPledge.isOrphaned = true;
- return saveInstance(oldPledge)
- .flatMap(() => {
- return saveInstance(pledge);
- });
+ return saveInstance(oldPledge).flatMap(() => {
+ return saveInstance(pledge);
+ });
}
return saveInstance(pledge);
})
- .subscribe(
- ({ displayName, goal, amount }) => {
- req.flash(
- 'success',
- dedent`
+ .subscribe(({ displayName, goal, amount }) => {
+ req.flash(
+ 'success',
+ dedent`
Congratulations, you have committed to giving
${displayName} $${amount} each month until you have completed
your ${goal}. Please remember to cancel your pledge directly
with ${displayName} once you finish.
`
- );
- res.redirect('/' + user.username);
- },
- next
- );
+ );
+ res.redirect('/' + user.username);
+ }, next);
}
function renderDirectory(req, res) {
@@ -193,16 +152,12 @@ export default function commit(app) {
function completeCommitment(req, res, next) {
const { user } = req;
- return completeCommitment$(user)
- .subscribe(
- msgOrPledge => {
- if (typeof msgOrPledge === 'string') {
- return res.send(msgOrPledge);
- }
- return res.send(true);
- },
- next
- );
+ return completeCommitment$(user).subscribe(msgOrPledge => {
+ if (typeof msgOrPledge === 'string') {
+ return res.send(msgOrPledge);
+ }
+ return res.send(true);
+ }, next);
}
function stopCommit(req, res, next) {
@@ -220,23 +175,20 @@ export default function commit(app) {
pledge.dateEnded = new Date();
return saveInstance(pledge);
})
- .subscribe(
- pledge => {
- let msg = dedent`
+ .subscribe(pledge => {
+ let msg = dedent`
You have successfully stopped your pledge. Please
remember to cancel your recurring donation directly
with the nonprofit if you haven't already done so.
`;
- if (!pledge) {
- msg = dedent`
+ if (!pledge) {
+ msg = dedent`
It doesn't look like you had an active pledge, so
there's no pledge to stop.
`;
- }
- req.flash('info', msg);
- return res.redirect(`/${user.username}`);
- },
- next
- );
+ }
+ req.flash('info', msg);
+ return res.redirect(`/${user.username}`);
+ }, next);
}
}
diff --git a/api-server/server/boot/donate.js b/api-server/server/boot/donate.js
index 1feec901f6..0fb604ac66 100644
--- a/api-server/server/boot/donate.js
+++ b/api-server/server/boot/donate.js
@@ -6,7 +6,6 @@ import keys from '../../../config/secrets';
const log = debug('fcc:boot:donate');
export default function donateBoot(app, done) {
-
let stripe = false;
const { User } = app.models;
const api = app.loopback.Router();
@@ -25,7 +24,8 @@ export default function donateBoot(app, done) {
currency: 'usd',
id: `monthly-donation-${current}`
}
- }), {}
+ }),
+ {}
);
function connectToStripe() {
@@ -70,23 +70,26 @@ export default function donateBoot(app, done) {
return res.status(400).send({ error: 'Amount Required' });
}
- const { amount, token: {email, id} } = body;
+ const {
+ amount,
+ token: { email, id }
+ } = body;
- const fccUser = user ?
- Promise.resolve(user) :
- new Promise((resolve, reject) =>
- User.findOrCreate(
- { where: { email }},
- { email },
- (err, instance, isNew) => {
- log('is new user instance: ', isNew);
- if (err) {
- return reject(err);
- }
- return resolve(instance);
- }
- )
- );
+ const fccUser = user
+ ? Promise.resolve(user)
+ : new Promise((resolve, reject) =>
+ User.findOrCreate(
+ { where: { email } },
+ { email },
+ (err, instance, isNew) => {
+ log('is new user instance: ', isNew);
+ if (err) {
+ return reject(err);
+ }
+ return resolve(instance);
+ }
+ )
+ );
let donatingUser = {};
let donation = {
@@ -96,14 +99,13 @@ export default function donateBoot(app, done) {
startDate: new Date(Date.now()).toISOString()
};
- return fccUser.then(
- user => {
+ return fccUser
+ .then(user => {
donatingUser = user;
- return stripe.customers
- .create({
- email,
- card: id
- });
+ return stripe.customers.create({
+ email,
+ card: id
+ });
})
.then(customer => {
donation.customerId = customer.id;
@@ -121,7 +123,9 @@ export default function donateBoot(app, done) {
return res.send(subscription);
})
.then(() => {
- donatingUser.createDonation(donation).toPromise()
+ donatingUser
+ .createDonation(donation)
+ .toPromise()
.catch(err => {
throw new Error(err);
});
diff --git a/api-server/server/boot/explorer.js b/api-server/server/boot/explorer.js
index d5abb9e8c5..18b35142be 100644
--- a/api-server/server/boot/explorer.js
+++ b/api-server/server/boot/explorer.js
@@ -15,7 +15,7 @@ module.exports = function mountLoopBackExplorer(app) {
app.once('started', function() {
log(
'Run `npm install loopback-component-explorer` to enable ' +
- 'the LoopBack explorer'
+ 'the LoopBack explorer'
);
});
return;
diff --git a/api-server/server/boot/news.js b/api-server/server/boot/news.js
index c720929a66..a8c22e60f5 100644
--- a/api-server/server/boot/news.js
+++ b/api-server/server/boot/news.js
@@ -32,9 +32,7 @@ function createShortLinkHandler(app) {
if (!article) {
return res.redirect('/news');
}
- const {
- slugPart
- } = article;
+ const { slugPart } = article;
const slug = `/news/${slugPart}`;
return res.redirect(slug);
}
diff --git a/api-server/server/boot/randomAPIs.js b/api-server/server/boot/randomAPIs.js
index 5d00439b32..4990728ff5 100644
--- a/api-server/server/boot/randomAPIs.js
+++ b/api-server/server/boot/randomAPIs.js
@@ -88,7 +88,7 @@ module.exports = function(app) {
.then(() => {
req.flash(
'success',
- 'We\'ve successfully updated your email preferences.'
+ "We've successfully updated your email preferences."
);
return res.redirectWithFlash(
`${homeLocation}/unsubscribed/${unsubscribeId}`
@@ -144,7 +144,7 @@ module.exports = function(app) {
.then(() => {
req.flash(
'success',
- 'We\'ve successfully updated your email preferences. Thank you ' +
+ "We've successfully updated your email preferences. Thank you " +
'for resubscribing.'
);
return res.redirectWithFlash(homeLocation);
@@ -175,7 +175,7 @@ module.exports = function(app) {
}
pulls = pulls
? Object.keys(JSON.parse(pulls)).length
- : 'Can\'t connect to github';
+ : "Can't connect to github";
return request(
[
@@ -193,7 +193,7 @@ module.exports = function(app) {
issues =
pulls === parseInt(pulls, 10) && issues
? Object.keys(JSON.parse(issues)).length - pulls
- : 'Can\'t connect to GitHub';
+ : "Can't connect to GitHub";
return res.send({
issues: issues,
pulls: pulls
diff --git a/api-server/server/boot/status.js b/api-server/server/boot/status.js
index c49bd7ea15..6ac058c621 100644
--- a/api-server/server/boot/status.js
+++ b/api-server/server/boot/status.js
@@ -1,6 +1,6 @@
export default function bootStatus(app) {
const api = app.loopback.Router();
- api.get('/status/ping', (req, res) => res.json({msg: 'pong'}));
+ api.get('/status/ping', (req, res) => res.json({ msg: 'pong' }));
app.use(api);
}
diff --git a/api-server/server/boot/t-wiki.js b/api-server/server/boot/t-wiki.js
index 23e972abc0..55f9981734 100644
--- a/api-server/server/boot/t-wiki.js
+++ b/api-server/server/boot/t-wiki.js
@@ -5,8 +5,6 @@ module.exports = function(app) {
app.use(router);
function showForum(req, res) {
- res.redirect(
- 'http://forum.freecodecamp.org/'
- );
+ res.redirect('http://forum.freecodecamp.org/');
}
};
diff --git a/api-server/server/boot/user.js b/api-server/server/boot/user.js
index e1ee041be1..c768511607 100644
--- a/api-server/server/boot/user.js
+++ b/api-server/server/boot/user.js
@@ -219,8 +219,7 @@ function createPostReportUserProfile(app) {
if (!username || !report || report === '') {
return res.json({
type: 'danger',
- message:
- 'Oops, something is not right please re-check your submission.'
+ message: 'Oops, something is not right please re-check your submission.'
});
}
return Email.send$(
diff --git a/api-server/server/component-passport.js b/api-server/server/component-passport.js
index 73ec5b66bc..8f40c01ebb 100644
--- a/api-server/server/component-passport.js
+++ b/api-server/server/component-passport.js
@@ -1,5 +1,7 @@
import passport from 'passport';
+// eslint-disable-next-line
import {
+ // prettier ignore
PassportConfigurator
} from '@freecodecamp/loopback-component-passport';
import url from 'url';
@@ -132,9 +134,7 @@ export function setupPassport(app) {
}
export const saveResponseAuthCookies = () => {
-
return (req, res, next) => {
-
const user = req.user;
if (!user) {
@@ -157,7 +157,6 @@ export const saveResponseAuthCookies = () => {
};
export const loginRedirect = () => {
-
return (req, res) => {
const successRedirect = req => {
if (!!req && req.session && req.session.returnTo) {
diff --git a/api-server/server/middlewares/add-return-to.js b/api-server/server/middlewares/add-return-to.js
index 00935140f9..f43c0c5d61 100644
--- a/api-server/server/middlewares/add-return-to.js
+++ b/api-server/server/middlewares/add-return-to.js
@@ -11,11 +11,7 @@ const pathsOfNoReturn = [
'css'
];
-const pathsWhiteList = [
- 'challenges',
- 'map',
- 'commit'
-];
+const pathsWhiteList = ['challenges', 'map', 'commit'];
const pathsOfNoReturnRegex = new RegExp(pathsOfNoReturn.join('|'), 'i');
const whiteListRegex = new RegExp(pathsWhiteList.join('|'), 'i');
@@ -33,9 +29,9 @@ export default function addReturnToUrl() {
) {
return next();
}
- req.session.returnTo = req.originalUrl.includes('/map') ?
- '/' :
- req.originalUrl;
+ req.session.returnTo = req.originalUrl.includes('/map')
+ ? '/'
+ : req.originalUrl;
return next();
};
}
diff --git a/api-server/server/middlewares/constant-headers.js b/api-server/server/middlewares/constant-headers.js
index 28a1ad32bd..7677bba84c 100644
--- a/api-server/server/middlewares/constant-headers.js
+++ b/api-server/server/middlewares/constant-headers.js
@@ -1,7 +1,8 @@
export default function constantHeaders() {
return function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
- res.header('Access-Control-Allow-Headers',
+ res.header(
+ 'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-Type, Accept'
);
next();
diff --git a/api-server/server/middlewares/csp.js b/api-server/server/middlewares/csp.js
index 07b41137c9..335d9aa894 100644
--- a/api-server/server/middlewares/csp.js
+++ b/api-server/server/middlewares/csp.js
@@ -3,7 +3,7 @@ import helmet from 'helmet';
import { homeLocation } from '../../../config/env';
let trusted = [
- '\'self\'',
+ "'self'",
'https://search.freecodecamp.org',
homeLocation,
'https://' + process.env.AUTH0_DOMAIN
@@ -31,8 +31,8 @@ export default function csp() {
'https://*.algolia.net'
]),
scriptSrc: [
- '\'unsafe-eval\'',
- '\'unsafe-inline\'',
+ "'unsafe-eval'",
+ "'unsafe-inline'",
'*.google-analytics.com',
'*.gstatic.com',
'https://*.cloudflare.com',
@@ -48,7 +48,7 @@ export default function csp() {
'*.ytimg.com'
].concat(trusted),
styleSrc: [
- '\'unsafe-inline\'',
+ "'unsafe-inline'",
'*.gstatic.com',
'*.googleapis.com',
'*.bootstrapcdn.com',
diff --git a/api-server/server/middlewares/csurf.js b/api-server/server/middlewares/csurf.js
index 5366bb39dc..b28e39e781 100644
--- a/api-server/server/middlewares/csurf.js
+++ b/api-server/server/middlewares/csurf.js
@@ -1,15 +1,12 @@
import csurf from 'csurf';
export default function() {
- const protection = csurf(
- {
- cookie: {
- domain: process.env.COOKIE_DOMAIN || 'localhost'
- }
+ const protection = csurf({
+ cookie: {
+ domain: process.env.COOKIE_DOMAIN || 'localhost'
}
- );
+ });
return function csrf(req, res, next) {
-
const path = req.path.split('/')[1];
if ((/(^api$|^unauthenticated$|^internal$|^p$)/).test(path)) {
return next();
diff --git a/api-server/server/middlewares/flash-cheaters.js b/api-server/server/middlewares/flash-cheaters.js
index cb76259c95..f156ee9195 100644
--- a/api-server/server/middlewares/flash-cheaters.js
+++ b/api-server/server/middlewares/flash-cheaters.js
@@ -14,7 +14,9 @@ export default function flashCheaters() {
if (
ALLOWED_METHODS.indexOf(req.method) !== -1 &&
EXCLUDED_PATHS.indexOf(req.path) === -1 &&
- req.user && req.url !== '/' && req.user.isCheater
+ req.user &&
+ req.url !== '/' &&
+ req.user.isCheater
) {
req.flash(
'danger',
diff --git a/api-server/server/middlewares/validator.js b/api-server/server/middlewares/validator.js
index f3961bae55..84bdefd7f5 100644
--- a/api-server/server/middlewares/validator.js
+++ b/api-server/server/middlewares/validator.js
@@ -20,11 +20,13 @@ export default function() {
return false;
}
const keys = Object.keys(value);
- return !!keys.length &&
+ return (
+ !!keys.length &&
// every key is a file
keys.every(key => isObject(value[key])) &&
// every file has contents
- keys.map(key => value[key]).every(file => isPoly(file));
+ keys.map(key => value[key]).every(file => isPoly(file))
+ );
}
},
customSanitizers: {
@@ -32,16 +34,20 @@ export default function() {
trimTags(value) {
const tagBody = '(?:[^"\'>]|"[^"]*"|\'[^\']*\')*';
const tagOrComment = new RegExp(
- '<(?:'
- // Comment body.
- + '!--(?:(?:-*[^->])*--+|-?)'
- // Special "raw text" elements whose content should be elided.
- + '|script\\b' + tagBody + '>[\\s\\S]*?[\\s\\S]*?',
+ '<(?:' +
+ // Comment body.
+ '!--(?:(?:-*[^->])*--+|-?)' +
+ // Special "raw text" elements whose content should be elided.
+ '|script\\b' +
+ tagBody +
+ '>[\\s\\S]*?[\\s\\S]*?',
'gi'
);
let rawValue;
diff --git a/api-server/server/models/about.js b/api-server/server/models/about.js
index 1ea5037709..0ac115dedb 100644
--- a/api-server/server/models/about.js
+++ b/api-server/server/models/about.js
@@ -1,6 +1,5 @@
import { createActiveUsers } from '../utils/about.js';
-
module.exports = function(About) {
const activeUsers = createActiveUsers();
let activeUsersForRendering = 0;
@@ -14,17 +13,14 @@ module.exports = function(About) {
About.getActiveUsersForRendering = () => activeUsersForRendering;
- About.remoteMethod(
- 'getActiveUsers',
- {
- http: {
- path: '/get-active-users',
- verb: 'get'
- },
- returns: {
- type: 'number',
- arg: 'activeUsers'
- }
+ About.remoteMethod('getActiveUsers', {
+ http: {
+ path: '/get-active-users',
+ verb: 'get'
+ },
+ returns: {
+ type: 'number',
+ arg: 'activeUsers'
}
- );
+ });
};
diff --git a/api-server/server/production-start.js b/api-server/server/production-start.js
index 4dd934ba47..a1d27e974c 100644
--- a/api-server/server/production-start.js
+++ b/api-server/server/production-start.js
@@ -11,7 +11,6 @@ log.enabled = true;
// this is where server starts booting up
const app = require('./server');
-
let timeoutHandler;
let killTime = 15;
diff --git a/api-server/server/rss/index.js b/api-server/server/rss/index.js
index 9d41ac776f..a80a2419ab 100644
--- a/api-server/server/rss/index.js
+++ b/api-server/server/rss/index.js
@@ -11,7 +11,6 @@ const fiveMinutes = 1000 * 60 * 5;
class NewsFeed {
constructor() {
-
this.state = {
readyState: false,
mediumFeed: [],
@@ -27,26 +26,23 @@ class NewsFeed {
const newState = stateUpdater(this.state);
this.state = _.merge({}, this.state, newState);
return;
- }
+ };
refreshFeeds = () => {
const currentFeed = this.state.combinedFeed.slice(0);
log('grabbing feeds');
- return Promise.all([
- getMediumFeed(),
- getLybsynFeed()
- ]).then(
- ([mediumFeed, lybsynFeed]) => this.setState(
- state => ({
+ return Promise.all([getMediumFeed(), getLybsynFeed()])
+ .then(([mediumFeed, lybsynFeed]) =>
+ this.setState(state => ({
...state,
mediumFeed,
lybsynFeed
- })
- ))
+ }))
+ )
.then(() => {
log('crossing the streams');
- const { mediumFeed, lybsynFeed} = this.state;
- const combinedFeed = [ ...mediumFeed, ...lybsynFeed ].sort((a, b) => {
+ const { mediumFeed, lybsynFeed } = this.state;
+ const combinedFeed = [...mediumFeed, ...lybsynFeed].sort((a, b) => {
return compareDesc(a.isoDate, b.isoDate);
});
this.setState(state => ({
@@ -62,25 +58,24 @@ class NewsFeed {
combinedFeed: currentFeed
}));
});
- }
+ };
-
- getFeed = () => new Promise((resolve) => {
+ getFeed = () =>
+ new Promise(resolve => {
let notReadyCount = 0;
function waitForReady() {
log('notReadyCount', notReadyCount);
notReadyCount++;
- return this.state.readyState || notReadyCount === 5 ?
- resolve(this.state.combinedFeed) :
- setTimeout(waitForReady, 100);
+ return this.state.readyState || notReadyCount === 5
+ ? resolve(this.state.combinedFeed)
+ : setTimeout(waitForReady, 100);
}
log('are we ready?', this.state.readyState);
- return this.state.readyState ?
- resolve(this.state.combinedFeed) :
- setTimeout(waitForReady, 100);
- })
-
+ return this.state.readyState
+ ? resolve(this.state.combinedFeed)
+ : setTimeout(waitForReady, 100);
+ });
}
export default NewsFeed;
diff --git a/api-server/server/rss/medium.js b/api-server/server/rss/medium.js
index cb3e083fdc..88c87da2b6 100644
--- a/api-server/server/rss/medium.js
+++ b/api-server/server/rss/medium.js
@@ -9,7 +9,6 @@ function getExtract(str) {
return str.slice(0, str.indexOf('
') + 4);
}
-
function addResponsiveClass(str) {
return str.replace(/ _.pick(item, ['title', 'link', 'isoDate', 'content:encoded'])
- )
- .map(
- (item) => ({
- ...item,
- extract: getExtract(item['content:encoded'])
- })
+ .map(item =>
+ _.pick(item, ['title', 'link', 'isoDate', 'content:encoded'])
)
+ .map(item => ({
+ ...item,
+ extract: getExtract(item['content:encoded'])
+ }))
.map(item => _.omit(item, ['content:encoded']))
- .map(item => ({ ...item, extract: addResponsiveClass(item.extract)}));
+ .map(item => ({ ...item, extract: addResponsiveClass(item.extract) }));
resolve(items);
});
});
diff --git a/api-server/server/utils/about.js b/api-server/server/utils/about.js
index feab0a519a..039d3e1abd 100644
--- a/api-server/server/utils/about.js
+++ b/api-server/server/utils/about.js
@@ -64,7 +64,7 @@ export function createActiveUsers() {
credentials['client_email'],
null,
credentials['private_key'],
- [scope],
+ [scope]
);
const authorize = observeMethod(client, 'authorize');
const options = {
@@ -89,7 +89,5 @@ export function createActiveUsers() {
.do(null, err => console.error(err))
// always send a number down
.catch(() => Observable.of(0))
- // cache for 2 seconds to prevent hitting our daily request limit
::timeCache(2, 'seconds');
}
-
diff --git a/api-server/server/utils/auth.js b/api-server/server/utils/auth.js
index 7c44a27029..dd6d9aad0e 100644
--- a/api-server/server/utils/auth.js
+++ b/api-server/server/utils/auth.js
@@ -1,18 +1,18 @@
-const githubRegex = (/github/i);
+const githubRegex = /github/i;
const providerHash = {
facebook: ({ id }) => id,
github: ({ username }) => username,
twitter: ({ username }) => username,
linkedin({ _json }) {
- return _json && _json.publicProfileUrl || null;
+ return (_json && _json.publicProfileUrl) || null;
},
google: ({ id }) => id
};
export function getUsernameFromProvider(provider, profile) {
- return typeof providerHash[provider] === 'function' ?
- providerHash[provider](profile) :
- null;
+ return typeof providerHash[provider] === 'function'
+ ? providerHash[provider](profile)
+ : null;
}
// createProfileAttributes(provider: String, profile: {}) => Object
@@ -32,13 +32,7 @@ function createProfileAttributesFromGithub(profile) {
const {
profileUrl: githubProfile,
username,
- _json: {
- avatar_url: picture,
- blog: website,
- location,
- bio,
- name
- } = {}
+ _json: { avatar_url: picture, blog: website, location, bio, name } = {}
} = profile;
return {
name,
diff --git a/api-server/server/utils/commit.js b/api-server/server/utils/commit.js
index 2a04fb7bcc..d92eb2e68b 100644
--- a/api-server/server/utils/commit.js
+++ b/api-server/server/utils/commit.js
@@ -20,36 +20,34 @@ export function completeCommitment$(user) {
isInfosecQaCert
} = user;
- return Observable.fromNodeCallback(user.pledge, user)()
- .flatMap(pledge => {
- if (!pledge) {
- return Observable.just('No pledge found');
- }
+ return Observable.fromNodeCallback(user.pledge, user)().flatMap(pledge => {
+ if (!pledge) {
+ return Observable.just('No pledge found');
+ }
- const { goal } = pledge;
+ const { goal } = pledge;
- if (
- (isFrontEndCert && goal === commitGoals.frontEndCert) ||
- (isBackEndCert && goal === commitGoals.backEndCert) ||
- (isFullStackCert && goal === commitGoals.fullStackCert) ||
- (isRespWebDesignCert && goal === commitGoals.respWebDesignCert) ||
- (isFrontEndLibsCert && goal === commitGoals.frontEndLibsCert) ||
- (isJsAlgoDataStructCert && goal === commitGoals.jsAlgoDataStructCert) ||
- (isDataVisCert && goal === commitGoals.dataVisCert) ||
- (isApisMicroservicesCert &&
- goal === commitGoals.apisMicroservicesCert) ||
- (isInfosecQaCert && goal === commitGoals.infosecQaCert)
- ) {
- debug('marking goal complete');
- pledge.isCompleted = true;
- pledge.dateEnded = new Date();
- pledge.formerUserId = pledge.userId;
- pledge.userId = null;
- return Observable.fromNodeCallback(pledge.save, pledge)();
- }
- return Observable.just(dedent`
+ if (
+ (isFrontEndCert && goal === commitGoals.frontEndCert) ||
+ (isBackEndCert && goal === commitGoals.backEndCert) ||
+ (isFullStackCert && goal === commitGoals.fullStackCert) ||
+ (isRespWebDesignCert && goal === commitGoals.respWebDesignCert) ||
+ (isFrontEndLibsCert && goal === commitGoals.frontEndLibsCert) ||
+ (isJsAlgoDataStructCert && goal === commitGoals.jsAlgoDataStructCert) ||
+ (isDataVisCert && goal === commitGoals.dataVisCert) ||
+ (isApisMicroservicesCert && goal === commitGoals.apisMicroservicesCert) ||
+ (isInfosecQaCert && goal === commitGoals.infosecQaCert)
+ ) {
+ debug('marking goal complete');
+ pledge.isCompleted = true;
+ pledge.dateEnded = new Date();
+ pledge.formerUserId = pledge.userId;
+ pledge.userId = null;
+ return Observable.fromNodeCallback(pledge.save, pledge)();
+ }
+ return Observable.just(dedent`
You have not yet reached your goal of completing the ${goal}
Please retry when you have met the requirements.
`);
- });
+ });
}
diff --git a/api-server/server/utils/create-handled-error.js b/api-server/server/utils/create-handled-error.js
index 1d282319d1..2d94282961 100644
--- a/api-server/server/utils/create-handled-error.js
+++ b/api-server/server/utils/create-handled-error.js
@@ -8,25 +8,20 @@ export function unwrapHandledError(err) {
return err[_handledError] || {};
}
-export function wrapHandledError(err, {
- type,
- message,
- redirectTo,
- status = 200
-}) {
+export function wrapHandledError(
+ err,
+ { type, message, redirectTo, status = 200 }
+) {
err[_handledError] = { type, message, redirectTo, status };
return err;
}
// for use with express-validator error formatter
-export const createValidatorErrorFormatter = (type, redirectTo) =>
- ({ msg }) => wrapHandledError(
- new Error(msg),
- {
- type,
- message: msg,
- redirectTo,
- // we default to 400 as these are malformed requests
- status: 400
- }
- );
+export const createValidatorErrorFormatter = (type, redirectTo) => ({ msg }) =>
+ wrapHandledError(new Error(msg), {
+ type,
+ message: msg,
+ redirectTo,
+ // we default to 400 as these are malformed requests
+ status: 400
+ });
diff --git a/api-server/server/utils/date-utils.js b/api-server/server/utils/date-utils.js
index fa5c7bd7ba..ea68a8aad0 100644
--- a/api-server/server/utils/date-utils.js
+++ b/api-server/server/utils/date-utils.js
@@ -3,9 +3,16 @@ import moment from 'moment-timezone';
// day count between two epochs (inclusive)
export function dayCount([head, tail], timezone = 'UTC') {
return Math.ceil(
- moment(moment(head).tz(timezone).endOf('day')).diff(
- moment(tail).tz(timezone).startOf('day'),
+ moment(
+ moment(head)
+ .tz(timezone)
+ .endOf('day')
+ ).diff(
+ moment(tail)
+ .tz(timezone)
+ .startOf('day'),
'days',
- true)
+ true
+ )
);
}
diff --git a/api-server/server/utils/lang-passthrough-urls.js b/api-server/server/utils/lang-passthrough-urls.js
index 8d32df15aa..3938aa479d 100644
--- a/api-server/server/utils/lang-passthrough-urls.js
+++ b/api-server/server/utils/lang-passthrough-urls.js
@@ -1,8 +1,4 @@
-export default [
- 'auth',
- 'services',
- 'link'
-].reduce((throughs, route) => {
+export default ['auth', 'services', 'link'].reduce((throughs, route) => {
throughs[route] = true;
return throughs;
}, {});
diff --git a/api-server/server/utils/map.js b/api-server/server/utils/map.js
index 7693d719a8..dd7544b40c 100644
--- a/api-server/server/utils/map.js
+++ b/api-server/server/utils/map.js
@@ -32,64 +32,59 @@ const getFirstChallenge = _.once(_getFirstChallenge);
*/
export function _cachedMap({ Block, Challenge }) {
const challenges = Challenge.find$({
- order: [ 'order ASC', 'suborder ASC' ],
+ order: ['order ASC', 'suborder ASC'],
where: { isPrivate: false }
});
- const challengeMap = challenges
- .map(
- challenges => challenges
- .map(challenge => challenge.toJSON())
- .reduce((hash, challenge) => {
- hash[challenge.dashedName] = challenge;
- return hash;
- }, {})
- );
+ const challengeMap = challenges.map(challenges =>
+ challenges
+ .map(challenge => challenge.toJSON())
+ .reduce((hash, challenge) => {
+ hash[challenge.dashedName] = challenge;
+ return hash;
+ }, {})
+ );
const blocks = Block.find$({
- order: [ 'superOrder ASC', 'order ASC' ],
+ order: ['superOrder ASC', 'order ASC'],
where: { isPrivate: false }
});
const blockMap = Observable.combineLatest(
- blocks.map(
- blocks => blocks
- .map(block => block.toJSON())
- .reduce((hash, block) => {
- hash[block.dashedName] = block;
- return hash;
- }, {})
+ blocks.map(blocks =>
+ blocks.map(block => block.toJSON()).reduce((hash, block) => {
+ hash[block.dashedName] = block;
+ return hash;
+ }, {})
),
challenges
- )
- .map(([ blocksMap, challenges ]) => {
- return challenges.reduce((blocksMap, challenge) => {
- if (blocksMap[challenge.block].challenges) {
- blocksMap[challenge.block].challenges.push(challenge.dashedName);
- } else {
- blocksMap[challenge.block] = {
- ...blocksMap[challenge.block],
- challenges: [ challenge.dashedName ]
- };
- }
- return blocksMap;
- }, blocksMap);
- });
- const superBlockMap = blocks.map(blocks => blocks.reduce((map, block) => {
- if (
- map[block.superBlock] &&
- map[block.superBlock].blocks
- ) {
- map[block.superBlock].blocks.push(block.dashedName);
- } else {
- map[block.superBlock] = {
- title: _.startCase(block.superBlock),
- order: block.superOrder,
- name: nameify(_.startCase(block.superBlock)),
- dashedName: block.superBlock,
- blocks: [block.dashedName],
- message: block.superBlockMessage
- };
- }
- return map;
- }, {}));
+ ).map(([blocksMap, challenges]) => {
+ return challenges.reduce((blocksMap, challenge) => {
+ if (blocksMap[challenge.block].challenges) {
+ blocksMap[challenge.block].challenges.push(challenge.dashedName);
+ } else {
+ blocksMap[challenge.block] = {
+ ...blocksMap[challenge.block],
+ challenges: [challenge.dashedName]
+ };
+ }
+ return blocksMap;
+ }, blocksMap);
+ });
+ const superBlockMap = blocks.map(blocks =>
+ blocks.reduce((map, block) => {
+ if (map[block.superBlock] && map[block.superBlock].blocks) {
+ map[block.superBlock].blocks.push(block.dashedName);
+ } else {
+ map[block.superBlock] = {
+ title: _.startCase(block.superBlock),
+ order: block.superOrder,
+ name: nameify(_.startCase(block.superBlock)),
+ dashedName: block.superBlock,
+ blocks: [block.dashedName],
+ message: block.superBlockMessage
+ };
+ }
+ return map;
+ }, {})
+ );
const superBlocks = superBlockMap.map(superBlockMap => {
return Object.keys(superBlockMap)
.map(key => superBlockMap[key])
@@ -126,30 +121,25 @@ export function getChallengeById(map, id) {
return Observable.if(
() => !id,
map.map(getFirstChallenge),
- map.map(addNameIdMap)
- .map(map => {
- const {
- entities: { challenge: challengeMap, challengeIdToName }
- } = map;
- let finalChallenge;
- const dashedName = challengeIdToName[id];
- finalChallenge = challengeMap[dashedName];
- if (!finalChallenge) {
- finalChallenge = getFirstChallenge(map);
- }
- return finalChallenge;
- })
+ map.map(addNameIdMap).map(map => {
+ const {
+ entities: { challenge: challengeMap, challengeIdToName }
+ } = map;
+ let finalChallenge;
+ const dashedName = challengeIdToName[id];
+ finalChallenge = challengeMap[dashedName];
+ if (!finalChallenge) {
+ finalChallenge = getFirstChallenge(map);
+ }
+ return finalChallenge;
+ })
);
}
export function getChallengeInfo(map) {
- return map.map(addNameIdMap)
- .map(({
- entities: {
- challenge: challengeMap,
- challengeIdToName
- }
- }) => ({
+ return map
+ .map(addNameIdMap)
+ .map(({ entities: { challenge: challengeMap, challengeIdToName } }) => ({
challengeMap,
challengeIdToName
}));
@@ -168,42 +158,37 @@ function loadComingSoonOrBetaChallenge({
// this is a hard search
// falls back to soft search
-export function getChallenge(
- challengeDashedName,
- blockDashedName,
- map) {
- return map
- .flatMap(({ entities, result: { superBlocks } }) => {
- const superBlock = entities.superBlock;
- const block = entities.block[blockDashedName];
- const challenge = entities.challenge[challengeDashedName];
- return Observable.if(
- () => (
- !blockDashedName ||
- !block ||
- !challenge ||
- !loadComingSoonOrBetaChallenge(challenge)
- ),
- getChallengeByDashedName(challengeDashedName, map),
- Observable.just({ block, challenge })
- )
- .map(({ challenge, block }) => ({
- redirect: challenge.block !== blockDashedName ?
- `/challenges/${block.dashedName}/${challenge.dashedName}` :
- false,
- entities: {
- superBlock,
- challenge: {
- [challenge.dashedName]: challenge
- }
- },
- result: {
- block: block.dashedName,
- challenge: challenge.dashedName,
- superBlocks
- }
- }));
- });
+export function getChallenge(challengeDashedName, blockDashedName, map) {
+ return map.flatMap(({ entities, result: { superBlocks } }) => {
+ const superBlock = entities.superBlock;
+ const block = entities.block[blockDashedName];
+ const challenge = entities.challenge[challengeDashedName];
+ return Observable.if(
+ () =>
+ !blockDashedName ||
+ !block ||
+ !challenge ||
+ !loadComingSoonOrBetaChallenge(challenge),
+ getChallengeByDashedName(challengeDashedName, map),
+ Observable.just({ block, challenge })
+ ).map(({ challenge, block }) => ({
+ redirect:
+ challenge.block !== blockDashedName
+ ? `/challenges/${block.dashedName}/${challenge.dashedName}`
+ : false,
+ entities: {
+ superBlock,
+ challenge: {
+ [challenge.dashedName]: challenge
+ }
+ },
+ result: {
+ block: block.dashedName,
+ challenge: challenge.dashedName,
+ superBlocks
+ }
+ }));
+ });
}
export function getBlockForChallenge(map, challenge) {
@@ -211,19 +196,21 @@ export function getBlockForChallenge(map, challenge) {
}
export function getChallengeByDashedName(dashedName, map) {
- const challengeName = unDasherize(dashedName)
- .replace(challengesRegex, '');
+ const challengeName = unDasherize(dashedName).replace(challengesRegex, '');
const testChallengeName = new RegExp(challengeName, 'i');
return map
.map(({ entities }) => entities.challenge)
.flatMap(challengeMap => {
- return Observable.from(Object.keys(challengeMap))
- .map(key => challengeMap[key]);
+ return Observable.from(Object.keys(challengeMap)).map(
+ key => challengeMap[key]
+ );
})
.filter(challenge => {
- return loadComingSoonOrBetaChallenge(challenge) &&
- testChallengeName.test(challenge.name);
+ return (
+ loadComingSoonOrBetaChallenge(challenge) &&
+ testChallengeName.test(challenge.name)
+ );
})
.last({ defaultValue: null })
.flatMap(challengeOrNull => {
@@ -234,8 +221,9 @@ export function getChallengeByDashedName(dashedName, map) {
);
})
.flatMap(challenge => {
- return getBlockForChallenge(map, challenge)
- .map(block => ({ challenge, block }));
+ return getBlockForChallenge(map, challenge).map(block => ({
+ challenge,
+ block
+ }));
});
}
-
diff --git a/api-server/server/utils/publicUserProps.js b/api-server/server/utils/publicUserProps.js
index 9ef59e6546..ec7df9f9b5 100644
--- a/api-server/server/utils/publicUserProps.js
+++ b/api-server/server/utils/publicUserProps.js
@@ -57,9 +57,11 @@ export const userPropsForSession = [
export function normaliseUserFields(user) {
const about = user.bio && !user.about ? user.bio : user.about;
const picture = user.picture || addPlaceholderImage(user.username);
- const twitter = user.twitter && isURL(user.twitter) ?
- user.twitter :
- user.twitter && `https://www.twitter.com/${user.twitter.replace(/^@/, '')}`;
+ const twitter =
+ user.twitter && isURL(user.twitter)
+ ? user.twitter
+ : user.twitter &&
+ `https://www.twitter.com/${user.twitter.replace(/^@/, '')}`;
return { about, picture, twitter };
}
diff --git a/api-server/server/utils/rx.js b/api-server/server/utils/rx.js
index 36bd6c7ae1..2a5c7cade8 100644
--- a/api-server/server/utils/rx.js
+++ b/api-server/server/utils/rx.js
@@ -49,7 +49,9 @@ export function timeCache(time, unit) {
// set new expire time in MS and create new subscription to source
if (!expireCacheAt || expireCacheAt < Date.now()) {
// set expire in ms;
- expireCacheAt = moment().add(time, unit).valueOf();
+ expireCacheAt = moment()
+ .add(time, unit)
+ .valueOf();
cache = new AsyncSubject();
source.subscribe(cache);
}
diff --git a/api-server/server/utils/url-utils.js b/api-server/server/utils/url-utils.js
index feb345f1f5..d3a26ebd58 100644
--- a/api-server/server/utils/url-utils.js
+++ b/api-server/server/utils/url-utils.js
@@ -25,13 +25,7 @@ export function getHost() {
export function getServerFullURL() {
if (!isDev) {
- return getProtocol()
- + '://'
- + getHost();
+ return getProtocol() + '://' + getHost();
}
- return getProtocol()
- + '://'
- + getHost()
- + ':'
- + getPort();
+ return getProtocol() + '://' + getHost() + ':' + getPort();
}
diff --git a/api-server/server/utils/user-stats.js b/api-server/server/utils/user-stats.js
index bf5c8b86ce..2ee987bcce 100644
--- a/api-server/server/utils/user-stats.js
+++ b/api-server/server/utils/user-stats.js
@@ -13,7 +13,6 @@ const hoursBetween = 24;
const hoursDay = 24;
export function prepUniqueDaysByHours(cals, tz = 'UTC') {
-
let prev = null;
// compose goes bottom to top (map > sortBy > transform)
@@ -25,27 +24,34 @@ export function prepUniqueDaysByHours(cals, tz = 'UTC') {
} else if (
moment(cur)
.tz(tz)
- .diff(moment(prev).tz(tz).startOf('day'), 'hours')
- >= hoursDay
+ .diff(
+ moment(prev)
+ .tz(tz)
+ .startOf('day'),
+ 'hours'
+ ) >= hoursDay
) {
data.push(cur);
prev = cur;
}
}, []),
sortBy(e => e),
- map(ts => moment(ts).tz(tz).startOf('hours').valueOf())
+ map(ts =>
+ moment(ts)
+ .tz(tz)
+ .startOf('hours')
+ .valueOf()
+ )
)(cals);
}
export function calcCurrentStreak(cals, tz = 'UTC') {
-
let prev = last(cals);
if (
moment()
.tz(tz)
.startOf('day')
- .diff(moment(prev).tz(tz), 'hours')
- > hoursBetween
+ .diff(moment(prev).tz(tz), 'hours') > hoursBetween
) {
return 0;
}
@@ -56,8 +62,7 @@ export function calcCurrentStreak(cals, tz = 'UTC') {
moment(prev)
.tz(tz)
.startOf('day')
- .diff(moment(cur).tz(tz), 'hours')
- <= hoursBetween
+ .diff(moment(cur).tz(tz), 'hours') <= hoursBetween
) {
prev = cur;
currentStreak++;
@@ -72,20 +77,26 @@ export function calcCurrentStreak(cals, tz = 'UTC') {
}
export function calcLongestStreak(cals, tz = 'UTC') {
-
let tail = cals[0];
- const longest = cals.reduce((longest, head, index) => {
- const last = cals[index === 0 ? 0 : index - 1];
- // is streak broken
- if (moment(head).tz(tz).startOf('day').diff(moment(last).tz(tz), 'hours')
- > hoursBetween) {
- tail = head;
- }
- if (dayCount(longest, tz) < dayCount([head, tail], tz)) {
- return [head, tail];
- }
- return longest;
- }, [cals[0], cals[0]]);
+ const longest = cals.reduce(
+ (longest, head, index) => {
+ const last = cals[index === 0 ? 0 : index - 1];
+ // is streak broken
+ if (
+ moment(head)
+ .tz(tz)
+ .startOf('day')
+ .diff(moment(last).tz(tz), 'hours') > hoursBetween
+ ) {
+ tail = head;
+ }
+ if (dayCount(longest, tz) < dayCount([head, tail], tz)) {
+ return [head, tail];
+ }
+ return longest;
+ },
+ [cals[0], cals[0]]
+ );
return dayCount(longest, tz);
}
diff --git a/client/jest.config.js b/client/jest.config.js
index efc641a519..86cabeba97 100644
--- a/client/jest.config.js
+++ b/client/jest.config.js
@@ -16,7 +16,5 @@ module.exports = {
transform: {
'^.+\\.js$': '/jest.transform.js'
},
- transformIgnorePatterns: [
- 'node_modules/(?!(gatsby)/)'
- ]
+ transformIgnorePatterns: ['node_modules/(?!(gatsby)/)']
};
diff --git a/client/jest.transform.js b/client/jest.transform.js
index 9013d9d937..76ecf60501 100644
--- a/client/jest.transform.js
+++ b/client/jest.transform.js
@@ -1,12 +1,10 @@
const babelOptions = {
- presets: [
- '@babel/preset-env',
- '@babel/react'
- ],
+ presets: ['@babel/preset-env', '@babel/react'],
plugins: [
'@babel/plugin-proposal-function-bind',
[
- 'transform-imports', {
+ 'transform-imports',
+ {
'@freecodecamp/react-bootstrap': {
transform: '@freecodecamp/react-bootstrap/lib/${member}',
preventFullImport: true
diff --git a/client/plugins/fcc-create-nav-data/create-navigation-node.js b/client/plugins/fcc-create-nav-data/create-navigation-node.js
index b6ba69c520..824a746a90 100644
--- a/client/plugins/fcc-create-nav-data/create-navigation-node.js
+++ b/client/plugins/fcc-create-nav-data/create-navigation-node.js
@@ -29,7 +29,10 @@ exports.createNavigationNode = function createNavigationNode(node) {
const nodeDir = path.resolve(fileAbsolutePath).replace(indexMdRe, '');
const dashedName = nodeDir.split(path.sep).slice(-1)[0];
- const nodePath = nodeDir.split(pagesDir)[1].split(path.sep).join('/');
+ const nodePath = nodeDir
+ .split(pagesDir)[1]
+ .split(path.sep)
+ .join('/');
const parentPath = nodePath
.split('/')
.slice(0, -1)
diff --git a/client/src/components/Donation/components/DonateCompletion.js b/client/src/components/Donation/components/DonateCompletion.js
index d85ea8a805..a8229ee8b5 100644
--- a/client/src/components/Donation/components/DonateCompletion.js
+++ b/client/src/components/Donation/components/DonateCompletion.js
@@ -33,15 +33,9 @@ function DonateCompletion({ processing, reset, success, error = null }) {
/>
)}
{success && (
-
- Thank you for supporting the freeCodeCamp.org community.
-
- )}
- {error && (
-
- {error}
-
+ Thank you for supporting the freeCodeCamp.org community.
)}
+ {error && {error}
}
{error && (
diff --git a/client/src/components/Donation/components/DonateModal.js b/client/src/components/Donation/components/DonateModal.js
index 59ca18179a..7c4f304074 100644
--- a/client/src/components/Donation/components/DonateModal.js
+++ b/client/src/components/Donation/components/DonateModal.js
@@ -20,10 +20,9 @@ import DonateText from './DonateText';
import '../Donation.css';
-const mapStateToProps = createSelector(
- isDonationModalOpenSelector,
- show => ({ show })
-);
+const mapStateToProps = createSelector(isDonationModalOpenSelector, show => ({
+ show
+}));
const mapDispatchToProps = dispatch =>
bindActionCreators(
@@ -73,7 +72,9 @@ class DonateModal extends Component {
};
return (
- Close
+
+ Close
+
);
}
@@ -84,25 +85,25 @@ class DonateModal extends Component {
ga.modalview('/donation-modal');
}
return (
-
-
-
-
-
- Support Our NonProfit
-
-
-
-
-
- {this.renderMaybe()}
-
-
+
+
+
+
+
+ Support Our NonProfit
+
+
+
+
+
+ {this.renderMaybe()}
+
+
-
-
-
-
+
+
+
+
);
}
}
diff --git a/client/src/components/Donation/components/DonateText.js b/client/src/components/Donation/components/DonateText.js
index 4a2a0dddf0..a0f16ac3a8 100644
--- a/client/src/components/Donation/components/DonateText.js
+++ b/client/src/components/Donation/components/DonateText.js
@@ -19,15 +19,14 @@ const DonateText = ({ activeDonations }) => {
return (
- freeCodeCamp.org is a tiny nonprofit that's helping millions of
- people learn to code for free.
+ freeCodeCamp.org is a tiny nonprofit that's helping millions of people
+ learn to code for free.
Join {donationsLocale} supporters.
- Your $5 / month donation will help keep tech education free and
- open.
+ Your $5 / month donation will help keep tech education free and open.
);
diff --git a/client/src/components/Donation/components/StripeCardForm.js b/client/src/components/Donation/components/StripeCardForm.js
index c8422de4c0..47546428a6 100644
--- a/client/src/components/Donation/components/StripeCardForm.js
+++ b/client/src/components/Donation/components/StripeCardForm.js
@@ -77,9 +77,7 @@ class StripeCardForm extends Component {
return (
-
- Your Card Number:
-
+ Your Card Number:
-
- Your Card Expiration Month:
-
+ Your Card Expiration Month:
-
- Your Card CVC (3-digit security number):
-
+ Your Card CVC (3-digit security number):
Our Learning Resources
-
- Learn
-
-
- Guide
-
+ Learn
+ Guide
Youtube
Podcast
Twitter
diff --git a/client/src/components/Map/components/Block.js b/client/src/components/Map/components/Block.js
index 052f3dd8c7..3f8c6973c0 100644
--- a/client/src/components/Map/components/Block.js
+++ b/client/src/components/Map/components/Block.js
@@ -154,4 +154,7 @@ export class Block extends Component {
Block.displayName = 'Block';
Block.propTypes = propTypes;
-export default connect(mapStateToProps, mapDispatchToProps)(Block);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(Block);
diff --git a/client/src/components/formHelpers/Form.js b/client/src/components/formHelpers/Form.js
index 3bdf557a93..d1a3791d37 100644
--- a/client/src/components/formHelpers/Form.js
+++ b/client/src/components/formHelpers/Form.js
@@ -33,7 +33,9 @@ export function DynamicForm({
errors,
fields,
handleSubmit,
- fields: { _meta: { allPristine } },
+ fields: {
+ _meta: { allPristine }
+ },
// HOC
buttonText,
diff --git a/client/src/components/layouts/Default.js b/client/src/components/layouts/Default.js
index 923316618d..51a6c5cdb6 100644
--- a/client/src/components/layouts/Default.js
+++ b/client/src/components/layouts/Default.js
@@ -166,7 +166,7 @@ class DefaultLayout extends Component {
) : null}
{children}
- {showFooter && ()}
+ {showFooter && }
);
}
diff --git a/client/src/components/layouts/components/guide/NavPanel.js b/client/src/components/layouts/components/guide/NavPanel.js
index 0144193c0f..c37c902299 100644
--- a/client/src/components/layouts/components/guide/NavPanel.js
+++ b/client/src/components/layouts/components/guide/NavPanel.js
@@ -67,7 +67,9 @@ class NavPanel extends Component {
'caret ' + (isExpanded ? 'caretStyle expanded' : 'caretStyle')
}
/>
- {title}
+
+ {title}
+
);
}
diff --git a/client/src/pages/donate-other.js b/client/src/pages/donate-other.js
index 17ba6f23e2..11d902c3b5 100644
--- a/client/src/pages/donate-other.js
+++ b/client/src/pages/donate-other.js
@@ -8,32 +8,38 @@ import ReactGA from '../analytics/index.js';
import Spacer from '../components/helpers/Spacer';
const paypalMonthlyDonations = [
- { eventLabel: 'paypal',
+ {
+ eventLabel: 'paypal',
eventValue: 5,
defaultValueHash: 'KTAXU8B4MYAT8',
defaultValue: 'Donate $5 each month'
},
- { eventLabel: 'paypal',
+ {
+ eventLabel: 'paypal',
eventValue: 10,
defaultValueHash: 'BYEBQEHS5LHNC',
defaultValue: 'Donate $10 each month'
},
- { eventLabel: 'paypal',
+ {
+ eventLabel: 'paypal',
eventValue: 35,
defaultValueHash: '57ZPMKJ8G893Y',
defaultValue: 'Donate $35 each month'
},
- { eventLabel: 'paypal',
+ {
+ eventLabel: 'paypal',
eventValue: 50,
defaultValueHash: '2ZVYTHK6Q7AFW',
defaultValue: 'Donate $50 each month'
},
- { eventLabel: 'paypal',
+ {
+ eventLabel: 'paypal',
eventValue: 100,
defaultValueHash: 'C7PUT3LMJHKK2',
defaultValue: 'Donate $100 each month'
},
- { eventLabel: 'paypal',
+ {
+ eventLabel: 'paypal',
eventValue: 250,
defaultValueHash: '69JGTY4DHSTEN',
defaultValue: 'Donate $250 each month'
@@ -48,13 +54,19 @@ const paypalOneTimeDonation = {
};
class DonateOtherPage extends Component {
-
renderForm(item) {
return (