diff --git a/common/index.js b/common/index.js index 35785e2145..6aca241e03 100644 --- a/common/index.js +++ b/common/index.js @@ -1,4 +1,6 @@ -var pathToCommon; +'use strict'; + +let pathToCommon; if (process.env.NODE_ENV === 'production') { pathToCommon = './transpiled-babel/index'; diff --git a/common/script/api-v3/errors.js b/common/script/api-v3/errors.js index 5751a28c64..8c758051ab 100644 --- a/common/script/api-v3/errors.js +++ b/common/script/api-v3/errors.js @@ -1,6 +1,8 @@ +import extendableBuiltin from './libs/extendableBuiltin'; + // Base class for custom application errors // It extends Error and capture the stack trace -export class CustomError extends Error { +export class CustomError extends extendableBuiltin(Error) { constructor () { super(); Error.captureStackTrace(this, this.constructor); diff --git a/common/script/api-v3/libs/extendableBuiltin.js b/common/script/api-v3/libs/extendableBuiltin.js new file mode 100644 index 0000000000..56186301c4 --- /dev/null +++ b/common/script/api-v3/libs/extendableBuiltin.js @@ -0,0 +1,11 @@ +// Babel 6 doesn't support extending native class (Error, Array, ...) +// This function makes it possible to extend native classes with the same results as Babel 5 +module.exports = function extendableBuiltin (klass) { + function ExtendableBuiltin () { + klass.apply(this, arguments); + } + ExtendableBuiltin.prototype = Object.create(klass.prototype); + Object.setPrototypeOf(ExtendableBuiltin, klass); + + return ExtendableBuiltin; +}; diff --git a/common/script/api-v3/scoreTask.js b/common/script/api-v3/scoreTask.js index f0244571f5..638e89a6a9 100644 --- a/common/script/api-v3/scoreTask.js +++ b/common/script/api-v3/scoreTask.js @@ -1,7 +1,7 @@ import _ from 'lodash'; import { NotAuthorized, -} from '../../../website/src/libs/api-v3/errors'; +} from './errors'; import i18n from '../i18n'; const MAX_TASK_VALUE = 21.27; diff --git a/common/script/index.js b/common/script/index.js index a62bb72ef7..071a38da07 100644 --- a/common/script/index.js +++ b/common/script/index.js @@ -18,8 +18,17 @@ var $w, preenHistory, sortOrder, import content from './content/index'; import i18n from './i18n'; +import * as errors from './api-v3/errors'; +import scoreTask from './api-v3/scoreTask'; + let api = module.exports = {}; +// Temporary location of API v3 files (soon to be removed) +api.v3 = { + scoreTask, + errors, +}; + api.i18n = i18n; api.shouldDo = shouldDo; diff --git a/website/src/controllers/api-v3/tasks.js b/website/src/controllers/api-v3/tasks.js index a58ac0a628..cfab73241c 100644 --- a/website/src/controllers/api-v3/tasks.js +++ b/website/src/controllers/api-v3/tasks.js @@ -10,13 +10,14 @@ import { NotAuthorized, BadRequest, } from '../../libs/api-v3/errors'; -import shared from '../../../../common'; +import common from '../../../../common'; import Q from 'q'; import _ from 'lodash'; import moment from 'moment'; -import scoreTask from '../../../../common/script/api-v3/scoreTask'; import { preenHistory } from '../../libs/api-v3/preening'; +const scoreTask = common.v3.scoreTask; + let api = {}; // challenge must be passed only when a challenge task is being created @@ -334,8 +335,8 @@ api.updateTask = { function _generateWebhookTaskData (task, direction, delta, stats, user) { let extendedStats = _.extend(stats, { - toNextLevel: shared.tnl(user.stats.lvl), - maxHealth: shared.maxHealth, + toNextLevel: common.tnl(user.stats.lvl), + maxHealth: common.maxHealth, maxMP: user._statsComputed.maxMP, // TODO refactor as method not getter }); diff --git a/website/src/libs/api-v3/errors.js b/website/src/libs/api-v3/errors.js index 884b65f102..10c87befdb 100644 --- a/website/src/libs/api-v3/errors.js +++ b/website/src/libs/api-v3/errors.js @@ -1,4 +1,6 @@ -import { CustomError } from '../../../../common/script/api-v3/errors'; +import common from '../../../../common/script'; + +export const CustomError = common.v3.errors.CustomError; /** * @apiDefine NotAuthorized @@ -11,7 +13,7 @@ import { CustomError } from '../../../../common/script/api-v3/errors'; * "message": "Not authorized." * } */ -export { NotAuthorized } from '../../../../common/script/api-v3/errors'; +export const NotAuthorized = common.v3.errors.NotAuthorized; /** * @apiDefine BadRequest @@ -24,7 +26,7 @@ export { NotAuthorized } from '../../../../common/script/api-v3/errors'; * "message": "Bad request." * } */ -export { BadRequest } from '../../../../common/script/api-v3/errors'; +export const BadRequest = common.v3.errors.BadRequest; /** * @apiDefine NotFound @@ -37,7 +39,7 @@ export { BadRequest } from '../../../../common/script/api-v3/errors'; * "message": "Not found." * } */ -export { NotFound } from '../../../../common/script/api-v3/errors'; +export const NotFound = common.v3.errors.NotFound; /** * @apiDefine InternalServerError diff --git a/website/src/middlewares/api-v3/cron.js b/website/src/middlewares/api-v3/cron.js index 9b5042caf2..fecd6b05db 100644 --- a/website/src/middlewares/api-v3/cron.js +++ b/website/src/middlewares/api-v3/cron.js @@ -9,9 +9,10 @@ import Task from '../../models/task'; import Q from 'q'; import Group from '../../models/group'; import User from '../../models/user'; -import scoreTask from '../../../../common/script/api-v3/scoreTask'; import { preenUserHistory } from '../../libs/api-v3/preening'; +const scoreTask = common.v3.scoreTask; + let clearBuffs = { str: 0, int: 0, diff --git a/website/src/middlewares/api-v3/errorHandler.js b/website/src/middlewares/api-v3/errorHandler.js index 65c1bd935d..95a592514d 100644 --- a/website/src/middlewares/api-v3/errorHandler.js +++ b/website/src/middlewares/api-v3/errorHandler.js @@ -1,8 +1,8 @@ // The error handler middleware that handles all errors // and respond to the client import logger from '../../libs/api-v3/logger'; -import { CustomError } from '../../../../common/script/api-v3/errors'; import { + CustomError, BadRequest, InternalServerError, } from '../../libs/api-v3/errors';