Commit b1d712e8 authored by Vadym Gidulian's avatar Vadym Gidulian

Merge branch 'dev'

parents e5abb7d4 2861b96f
FROM node:10-alpine
MAINTAINER Vadym Gidulian <vadym.gidulian@gvia.group>
COPY package.json yarn.lock /app/
......
......@@ -3,10 +3,14 @@
"version": "0.3.0",
"dependencies": {
"ejs": "^2.6.1",
"express": "^4.16.3",
"glob": "^7.1.3",
"handlebars": "^4.0.12",
"nodemailer": "^4.6.8",
"@gviagroup/jsvv": "~0.6.0"
"pug": "^2.0.3",
"response-time": "^2.3.2",
"@gviagroup/jsvv": "~0.11.0"
},
"devDependencies": {
"nodemon": "^1.18.4"
......
'use strict';
const express = require('express');
const responseTime = require('response-time');
const jsvv = require('@gviagroup/jsvv');
const mailerModel = require('./models/mailer');
const templatesModel = require('./models/templates');
const requestSchema = require('./schemas/request');
const templateNameSchema = require('./schemas/template-name');
......@@ -20,17 +22,22 @@ app.use((req, res, next) => {
res.header('Access-Control-Allow-Methods', 'OPTIONS, POST');
next();
});
app.use(responseTime());
app.post('/*', async (req, res) => {
let templateName = req.url.slice(1);
app.post('/:template', async (req, res) => {
try {
req.params.template = jsvv(req.params.template, templateNameSchema);
req.body = jsvv(req.body, requestSchema);
templateName = jsvv(templateName, templateNameSchema, {root: 'Template name'});
req.body = jsvv(req.body, requestSchema, {root: 'requestBody'});
} catch (e) {
return res.status(400).send(e.message);
}
if (!templatesModel.isTemplateExists(templateName)) return res.status(404).send();
try {
res.status(200).send(await mailerModel.sendMessage(req.params.template, req.body));
res.status(200).send(await mailerModel.sendMessage(templateName, req.body));
} catch (e) {
console.error(e);
res.status(500).send();
......
......@@ -8,7 +8,6 @@
});
const {promisify} = require('util');
const handlebars = require('handlebars');
const nodemailer = require('nodemailer');
const templatesModel = require('./templates');
......@@ -43,7 +42,7 @@ const sendMail = promisify(transporter.sendMail).bind(transporter);
module.exports = {
async sendMessage(template, request) {
const text = handlebars.compile(templatesModel.getTemplate(template))(request.vars);
const text = templatesModel.render(template, request.vars);
const message = {
from: SMTP_SENDER,
......
'use strict';
const fs = require('fs');
const ejs = require('ejs');
const glob = require('glob');
const handlebars = require('handlebars');
const pug = require('pug');
const TEMPLATES_DIR = '/app/templates';
const templates = {};
const TEMPLATES = new Map();
module.exports = {
prepareTemplates() {
try {
if (fs.statSync(TEMPLATES_DIR)) {
const filenames = fs.readdirSync(TEMPLATES_DIR);
const filenames = glob.sync('**/*', {cwd: TEMPLATES_DIR, nodir: true});
filenames.forEach(filename => {
templates[filename] = fs.readFileSync(`${TEMPLATES_DIR}/${filename}`, {encoding: 'utf-8'});
TEMPLATES.set(filename, fs.readFileSync(`${TEMPLATES_DIR}/${filename}`, {encoding: 'utf-8'}));
});
}
console.log(`Loaded templates: ${Object.keys(templates).map(name => `"${name}"`).join(', ')}`);
console.log(`Loaded templates: ${[...TEMPLATES.keys()].map(name => `"${name}"`).join(', ')}`);
} catch (e) {
console.error(e);
process.exit(1);
}
},
getTemplate(name) {
return templates[name] || '';
isTemplateExists(name) {
return TEMPLATES.has(name);
},
render(templateName, vars) {
const [, ext] = templateName.split('.');
const template = TEMPLATES.get(templateName) || '';
const templatePath = `${TEMPLATES_DIR}/${templateName}`;
switch (ext) {
case 'ejs':
return ejs.compile(template, {filename: templatePath, root: TEMPLATES_DIR})(vars);
case 'hbs':
case 'handlebars':
return handlebars.compile(template)(vars);
case 'pug':
return pug.compile(template, {basedir: TEMPLATES_DIR, filename: templatePath})(vars);
default:
return template;
}
}
};
......@@ -2,10 +2,22 @@
# yarn lockfile v1
"@gviagroup/jsvv@~0.6.0":
version "0.6.1"
resolved "https://npm.gvia.group/@gviagroup%2fjsvv/-/jsvv-0.6.1.tgz#6e18bbc5c8d47f69f5ebbdea6681d240836fc72a"
integrity sha512-bX/jnZga0GVGiDJHI7BYMDWnQtPNi500CUzAKAt7+a6XTQIRhs/90srsTyYzXfDL9cAykvJJOX+rixnDmUokkw==
"@gviagroup/jsvv@~0.11.0":
version "0.11.0"
resolved "https://npm.gvia.group/@gviagroup%2fjsvv/-/jsvv-0.11.0.tgz#e38111a6f6686c1ce7ca79d676d37705048b117f"
integrity sha512-Vwd5pCxunHWGdzQgpPjOURoyw2PCzjT89x85WS4RfbAVcGy4mG/bF6neug5IGr/VnKy55potNN346nBvFSAPcg==
"@types/babel-types@*", "@types/babel-types@^7.0.0":
version "7.0.4"
resolved "https://npm.gvia.group/@types%2fbabel-types/-/babel-types-7.0.4.tgz#bfd5b0d0d1ba13e351dff65b6e52783b816826c8"
integrity sha512-WiZhq3SVJHFRgRYLXvpf65XnV6ipVHhnNaNvE8yCimejrGglkg38kEj0JcizqwSHxmPSjcTlig/6JouxLGEhGw==
"@types/babylon@^6.16.2":
version "6.16.4"
resolved "https://npm.gvia.group/@types%2fbabylon/-/babylon-6.16.4.tgz#d3df72518b34a6a015d0dc58745cd238b5bb8ad2"
integrity sha512-8dZMcGPno3g7pJ/d0AyJERo+lXh9i1JhDuCUs+4lNIN9eUe5Yh6UCLrpgSEi05Ve2JMLauL2aozdvKwNL0px1Q==
dependencies:
"@types/babel-types" "*"
abbrev@1:
version "1.1.1"
......@@ -20,6 +32,32 @@ accepts@~1.3.5:
mime-types "~2.1.18"
negotiator "0.6.1"
acorn-globals@^3.0.0:
version "3.1.0"
resolved "https://npm.gvia.group/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
integrity sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=
dependencies:
acorn "^4.0.4"
acorn@^3.1.0:
version "3.3.0"
resolved "https://npm.gvia.group/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
acorn@^4.0.4, acorn@~4.0.2:
version "4.0.13"
resolved "https://npm.gvia.group/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=
align-text@^0.1.1, align-text@^0.1.3:
version "0.1.4"
resolved "https://npm.gvia.group/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
dependencies:
kind-of "^3.0.2"
longest "^1.0.1"
repeat-string "^1.5.2"
ansi-align@^2.0.0:
version "2.0.0"
resolved "https://npm.gvia.group/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
......@@ -90,6 +128,11 @@ array-unique@^0.3.2:
resolved "https://npm.gvia.group/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
asap@~2.0.3:
version "2.0.6"
resolved "https://npm.gvia.group/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
assign-symbols@^1.0.0:
version "1.0.0"
resolved "https://npm.gvia.group/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
......@@ -112,6 +155,29 @@ atob@^2.1.1:
resolved "https://npm.gvia.group/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
babel-runtime@^6.26.0:
version "6.26.0"
resolved "https://npm.gvia.group/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.11.0"
babel-types@^6.26.0:
version "6.26.0"
resolved "https://npm.gvia.group/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
dependencies:
babel-runtime "^6.26.0"
esutils "^2.0.2"
lodash "^4.17.4"
to-fast-properties "^1.0.3"
babylon@^6.18.0:
version "6.18.0"
resolved "https://npm.gvia.group/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://npm.gvia.group/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
......@@ -208,6 +274,11 @@ cache-base@^1.0.1:
union-value "^1.0.0"
unset-value "^1.0.0"
camelcase@^1.0.2:
version "1.2.1"
resolved "https://npm.gvia.group/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
camelcase@^4.0.0:
version "4.1.0"
resolved "https://npm.gvia.group/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
......@@ -218,6 +289,14 @@ capture-stack-trace@^1.0.0:
resolved "https://npm.gvia.group/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
center-align@^0.1.1:
version "0.1.3"
resolved "https://npm.gvia.group/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
dependencies:
align-text "^0.1.3"
lazy-cache "^1.0.3"
chalk@^2.0.1:
version "2.4.1"
resolved "https://npm.gvia.group/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
......@@ -227,6 +306,13 @@ chalk@^2.0.1:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
character-parser@^2.1.1:
version "2.2.0"
resolved "https://npm.gvia.group/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0"
integrity sha1-x84o821LzZdE5f/CxfzeHHMmH8A=
dependencies:
is-regex "^1.0.3"
chokidar@^2.0.4:
version "2.0.4"
resolved "https://npm.gvia.group/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
......@@ -267,11 +353,27 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
clean-css@^4.1.11:
version "4.2.1"
resolved "https://npm.gvia.group/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==
dependencies:
source-map "~0.6.0"
cli-boxes@^1.0.0:
version "1.0.0"
resolved "https://npm.gvia.group/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
cliui@^2.1.0:
version "2.1.0"
resolved "https://npm.gvia.group/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
dependencies:
center-align "^0.1.1"
right-align "^0.1.1"
wordwrap "0.0.2"
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://npm.gvia.group/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
......@@ -329,6 +431,16 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0:
resolved "https://npm.gvia.group/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
constantinople@^3.0.1:
version "3.1.2"
resolved "https://npm.gvia.group/constantinople/-/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647"
integrity sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==
dependencies:
"@types/babel-types" "^7.0.0"
"@types/babylon" "^6.16.2"
babel-types "^6.26.0"
babylon "^6.18.0"
content-disposition@0.5.2:
version "0.5.2"
resolved "https://npm.gvia.group/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
......@@ -354,6 +466,11 @@ copy-descriptor@^0.1.0:
resolved "https://npm.gvia.group/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
core-js@^2.4.0:
version "2.6.0"
resolved "https://npm.gvia.group/core-js/-/core-js-2.6.0.tgz#1e30793e9ee5782b307e37ffa22da0eacddd84d4"
integrity sha512-kLRC6ncVpuEW/1kwrOXYX6KQASCVtrh1gQr/UiaVgFlf9WE5Vp+lNe5+h3LuMr5PAucWnnEXwH0nQHRH/gpGtw==
core-util-is@~1.0.0:
version "1.0.2"
resolved "https://npm.gvia.group/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
......@@ -394,6 +511,11 @@ debug@^3.1.0:
dependencies:
ms "^2.1.1"
decamelize@^1.0.0:
version "1.2.0"
resolved "https://npm.gvia.group/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
decode-uri-component@^0.2.0:
version "0.2.0"
resolved "https://npm.gvia.group/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
......@@ -431,7 +553,7 @@ delegates@^1.0.0:
resolved "https://npm.gvia.group/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
depd@~1.1.2:
depd@~1.1.0, depd@~1.1.2:
version "1.1.2"
resolved "https://npm.gvia.group/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
......@@ -446,6 +568,11 @@ detect-libc@^1.0.2:
resolved "https://npm.gvia.group/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
doctypes@^1.1.0:
version "1.1.0"
resolved "https://npm.gvia.group/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9"
integrity sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=
dot-prop@^4.1.0:
version "4.2.0"
resolved "https://npm.gvia.group/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
......@@ -463,6 +590,11 @@ ee-first@1.1.1:
resolved "https://npm.gvia.group/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
ejs@^2.6.1:
version "2.6.1"
resolved "https://npm.gvia.group/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0"
integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==
encodeurl@~1.0.2:
version "1.0.2"
resolved "https://npm.gvia.group/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
......@@ -478,6 +610,11 @@ escape-string-regexp@^1.0.5:
resolved "https://npm.gvia.group/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
esutils@^2.0.2:
version "2.0.2"
resolved "https://npm.gvia.group/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
etag@~1.8.1:
version "1.8.1"
resolved "https://npm.gvia.group/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
......@@ -639,6 +776,11 @@ fsevents@^1.2.2:
nan "^2.9.2"
node-pre-gyp "^0.10.0"
function-bind@^1.1.1:
version "1.1.1"
resolved "https://npm.gvia.group/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
gauge@~2.7.3:
version "2.7.4"
resolved "https://npm.gvia.group/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
......@@ -671,7 +813,7 @@ glob-parent@^3.1.0:
is-glob "^3.1.0"
path-dirname "^1.0.0"
glob@^7.0.5:
glob@^7.0.5, glob@^7.1.3:
version "7.1.3"
resolved "https://npm.gvia.group/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
......@@ -764,6 +906,13 @@ has-values@^1.0.0:
is-number "^3.0.0"
kind-of "^4.0.0"
has@^1.0.1:
version "1.0.3"
resolved "https://npm.gvia.group/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
dependencies:
function-bind "^1.1.1"
http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3:
version "1.6.3"
resolved "https://npm.gvia.group/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
......@@ -898,6 +1047,14 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2:
is-data-descriptor "^1.0.0"
kind-of "^6.0.2"
is-expression@^3.0.0:
version "3.0.0"
resolved "https://npm.gvia.group/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f"
integrity sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=
dependencies:
acorn "~4.0.2"
object-assign "^4.0.1"
is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://npm.gvia.group/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
......@@ -980,11 +1137,23 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
dependencies:
isobject "^3.0.1"
is-promise@^2.0.0:
version "2.1.0"
resolved "https://npm.gvia.group/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
is-redirect@^1.0.0:
version "1.0.0"
resolved "https://npm.gvia.group/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
is-regex@^1.0.3:
version "1.0.4"
resolved "https://npm.gvia.group/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
dependencies:
has "^1.0.1"
is-retry-allowed@^1.0.0:
version "1.1.0"
resolved "https://npm.gvia.group/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
......@@ -1022,6 +1191,19 @@ isobject@^3.0.0, isobject@^3.0.1:
resolved "https://npm.gvia.group/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
js-stringify@^1.0.1:
version "1.0.2"
resolved "https://npm.gvia.group/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db"
integrity sha1-Fzb939lyTyijaCrcYjCufk6Weds=
jstransformer@1.0.0:
version "1.0.0"
resolved "https://npm.gvia.group/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3"
integrity sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=
dependencies:
is-promise "^2.0.0"
promise "^7.0.1"
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
resolved "https://npm.gvia.group/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
......@@ -1053,16 +1235,26 @@ latest-version@^3.0.0:
dependencies:
package-json "^4.0.0"
lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://npm.gvia.group/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://npm.gvia.group/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
lodash@^4.17.10:
lodash@^4.17.10, lodash@^4.17.4:
version "4.17.11"
resolved "https://npm.gvia.group/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
longest@^1.0.1:
version "1.0.1"
resolved "https://npm.gvia.group/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
lowercase-keys@^1.0.0:
version "1.0.1"
resolved "https://npm.gvia.group/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
......@@ -1338,7 +1530,7 @@ number-is-nan@^1.0.0:
resolved "https://npm.gvia.group/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
object-assign@^4.1.0:
object-assign@^4.0.1, object-assign@^4.1.0:
version "4.1.1"
resolved "https://npm.gvia.group/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
......@@ -1373,6 +1565,11 @@ on-finished@~2.3.0:
dependencies:
ee-first "1.1.1"
on-headers@~1.0.1:
version "1.0.1"
resolved "https://npm.gvia.group/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
integrity sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=
once@^1.3.0:
version "1.4.0"
resolved "https://npm.gvia.group/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
......@@ -1451,6 +1648,11 @@ path-key@^2.0.0:
resolved "https://npm.gvia.group/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
path-parse@^1.0.5:
version "1.0.6"
resolved "https://npm.gvia.group/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://npm.gvia.group/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
......@@ -1476,6 +1678,13 @@ process-nextick-args@~2.0.0:
resolved "https://npm.gvia.group/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
promise@^7.0.1:
version "7.3.1"
resolved "https://npm.gvia.group/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
dependencies:
asap "~2.0.3"
proxy-addr@~2.0.4:
version "2.0.4"
resolved "https://npm.gvia.group/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93"
......@@ -1494,6 +1703,111 @@ pstree.remy@^1.1.2:
resolved "https://npm.gvia.group/pstree.remy/-/pstree.remy-1.1.2.tgz#4448bbeb4b2af1fed242afc8dc7416a6f504951a"
integrity sha512-vL6NLxNHzkNTjGJUpMm5PLC+94/0tTlC1vkP9bdU0pOHih+EujMjgMTwfZopZvHWRFbqJ5Y73OMoau50PewDDA==
pug-attrs@^2.0.3:
version "2.0.3"
resolved "https://npm.gvia.group/pug-attrs/-/pug-attrs-2.0.3.tgz#a3095f970e64151f7bdad957eef55fb5d7905d15"
integrity sha1-owlflw5kFR972tlX7vVftdeQXRU=
dependencies:
constantinople "^3.0.1"
js-stringify "^1.0.1"
pug-runtime "^2.0.4"
pug-code-gen@^2.0.1:
version "2.0.1"
resolved "https://npm.gvia.group/pug-code-gen/-/pug-code-gen-2.0.1.tgz#0951ec83225d74d8cfc476a7f99a259b5f7d050c"
integrity sha1-CVHsgyJddNjPxHan+Zolm199BQw=
dependencies:
constantinople "^3.0.1"
doctypes "^1.1.0"
js-stringify "^1.0.1"
pug-attrs "^2.0.3"
pug-error "^1.3.2"
pug-runtime "^2.0.4"
void-elements "^2.0.1"
with "^5.0.0"
pug-error@^1.3.2:
version "1.3.2"
resolved "https://npm.gvia.group/pug-error/-/pug-error-1.3.2.tgz#53ae7d9d29bb03cf564493a026109f54c47f5f26"
integrity sha1-U659nSm7A89WRJOgJhCfVMR/XyY=
pug-filters@^3.1.0:
version "3.1.0"
resolved "https://npm.gvia.group/pug-filters/-/pug-filters-3.1.0.tgz#27165555bc04c236e4aa2b0366246dfa021b626e"
integrity sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=
dependencies:
clean-css "^4.1.11"
constantinople "^3.0.1"
jstransformer "1.0.0"
pug-error "^1.3.2"
pug-walk "^1.1.7"
resolve "^1.1.6"
uglify-js "^2.6.1"
pug-lexer@^4.0.0:
version "4.0.0"
resolved "https://npm.gvia.group/pug-lexer/-/pug-lexer-4.0.0.tgz#210c18457ef2e1760242740c5e647bd794cec278"
integrity sha1-IQwYRX7y4XYCQnQMXmR715TOwng=
dependencies:
character-parser "^2.1.1"
is-expression "^3.0.0"
pug-error "^1.3.2"
pug-linker@^3.0.5:
version "3.0.5"
resolved "https://npm.gvia.group/pug-linker/-/pug-linker-3.0.5.tgz#9e9a7ae4005682d027deeb96b000f88eeb83a02f"
integrity sha1-npp65ABWgtAn3uuWsAD4juuDoC8=
dependencies:
pug-error "^1.3.2"
pug-walk "^1.1.7"
pug-load@^2.0.11:
version "2.0.11"
resolved "https://npm.gvia.group/pug-load/-/pug-load-2.0.11.tgz#e648e57ed113fe2c1f45d57858ea2bad6bc01527"
integrity sha1-5kjlftET/iwfRdV4WOorrWvAFSc=
dependencies:
object-assign "^4.1.0"
pug-walk "^1.1.7"
pug-parser@^5.0.0:
version "5.0.0"
resolved "https://npm.gvia.group/pug-parser/-/pug-parser-5.0.0.tgz#e394ad9b3fca93123940aff885c06e44ab7e68e4"
integrity sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=
dependencies:
pug-error "^1.3.2"
token-stream "0.0.1"
pug-runtime@^2.0.4:
version "2.0.4"
resolved "https://npm.gvia.group/pug-runtime/-/pug-runtime-2.0.4.tgz#e178e1bda68ab2e8c0acfc9bced2c54fd88ceb58"
integrity sha1-4XjhvaaKsujArPybztLFT9iM61g=
pug-strip-comments@^1.0.3:
version "1.0.3"
resolved "https://npm.gvia.group/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz#f1559592206edc6f85310dacf4afb48a025af59f"
integrity sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=
dependencies:
pug-error "^1.3.2"
pug-walk@^1.1.7:
version "1.1.7"
resolved "https://npm.gvia.group/pug-walk/-/pug-walk-1.1.7.tgz#c00d5c5128bac5806bec15d2b7e7cdabe42531f3"
integrity sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=
pug@^2.0.3:
version "2.0.3"
resolved "https://npm.gvia.group/pug/-/pug-2.0.3.tgz#71cba82537c95a5eab7ed04696e4221f53aa878e"
integrity sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=
dependencies:
pug-code-gen "^2.0.1"
pug-filters "^3.1.0"
pug-lexer "^4.0.0"
pug-linker "^3.0.5"
pug-load "^2.0.11"
pug-parser "^5.0.0"
pug-runtime "^2.0.4"
pug-strip-comments "^1.0.3"
qs@6.5.2:
version "6.5.2"
resolved "https://npm.gvia.group/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
......@@ -1546,6 +1860,11 @@ readdirp@^2.0.0:
micromatch "^3.1.10"
readable-stream "^2.0.2"
regenerator-runtime@^0.11.0:
version "0.11.1"
resolved "https://npm.gvia.group/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
regex-not@^1.0.0, regex-not@^1.0.2:
version "1.0.2"
resolved "https://npm.gvia.group/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
......@@ -1579,7 +1898,7 @@ repeat-element@^1.1.2:
resolved "https://npm.gvia.group/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
repeat-string@^1.6.1:
repeat-string@^1.5.2, repeat-string@^1.6.1:
version "1.6.1"
resolved "https://npm.gvia.group/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
......@@ -1589,11 +1908,33 @@ resolve-url@^0.2.1:
resolved "https://npm.gvia.group/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
resolve@^1.1.6:
version "1.8.1"
resolved "https://npm.gvia.group/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==
dependencies:
path-parse "^1.0.5"
response-time@^2.3.2:
version "2.3.2"
resolved "https://npm.gvia.group/response-time/-/response-time-2.3.2.tgz#ffa71bab952d62f7c1d49b7434355fbc68dffc5a"
integrity sha1-/6cbq5UtYvfB1Jt0NDVfvGjf/Fo=
dependencies:
depd "~1.1.0"
on-headers "~1.0.1"
ret@~0.1.10:
version "0.1.15"
resolved "https://npm.gvia.group/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
right-align@^0.1.1:
version "0.1.3"
resolved "https://npm.gvia.group/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
dependencies:
align-text "^0.1.1"
rimraf@^2.6.1:
version "2.6.2"
resolved "https://npm.gvia.group/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
......@@ -1757,12 +2098,12 @@ source-map-url@^0.4.0:
resolved "https://npm.gvia.group/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
source-map@^0.5.6:
source-map@^0.5.6, source-map@~0.5.1:
version "0.5.7"
resolved "https://npm.gvia.group/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
source-map@^0.6.1, source-map@~0.6.1:
source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
version "0.6.1"
resolved "https://npm.gvia.group/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
......@@ -1872,6 +2213,11 @@ timed-out@^4.0.0:
resolved "https://npm.gvia.group/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
to-fast-properties@^1.0.3:
version "1.0.3"
resolved "https://npm.gvia.group/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
to-object-path@^0.3.0:
version "0.3.0"
resolved "https://npm.gvia.group/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
......@@ -1897,6 +2243,11 @@ to-regex@^3.0.1, to-regex@^3.0.2:
regex-not "^1.0.2"
safe-regex "^1.1.0"
token-stream@0.0.1:
version "0.0.1"
resolved "https://npm.gvia.group/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a"
integrity sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=
touch@^3.1.0:
version "3.1.0"
resolved "https://npm.gvia.group/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
......@@ -1912,6 +2263,16 @@ type-is@~1.6.16:
media-typer "0.3.0"
mime-types "~2.1.18"
uglify-js@^2.6.1:
version "2.8.29"
resolved "https://npm.gvia.group/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0=
dependencies:
source-map "~0.5.1"
yargs "~3.10.0"
optionalDependencies:
uglify-to-browserify "~1.0.0"
uglify-js@^3.1.4:
version "3.4.9"
resolved "https://npm.gvia.group/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
......@@ -1920,6 +2281,11 @@ uglify-js@^3.1.4:
commander "~2.17.1"
source-map "~0.6.1"
uglify-to-browserify@~1.0.0:
version "1.0.2"
resolved "https://npm.gvia.group/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
undefsafe@^2.0.2:
version "2.0.2"
resolved "https://npm.gvia.group/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76"
......@@ -2015,6 +2381,11 @@ vary@~1.1.2:
resolved "https://npm.gvia.group/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
void-elements@^2.0.1:
version "2.0.1"
resolved "https://npm.gvia.group/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
which@^1.2.9:
version "1.3.1"
resolved "https://npm.gvia.group/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
......@@ -2036,6 +2407,24 @@ widest-line@^2.0.0:
dependencies:
string-width "^2.1.1"
window-size@0.1.0:
version "0.1.0"
resolved "https://npm.gvia.group/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
with@^5.0.0:
version "5.1.1"
resolved "https://npm.gvia.group/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe"
integrity sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=
dependencies:
acorn "^3.1.0"
acorn-globals "^3.0.0"
wordwrap@0.0.2:
version "0.0.2"
resolved "https://npm.gvia.group/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
wordwrap@~0.0.2:
version "0.0.3"
resolved "https://npm.gvia.group/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
......@@ -2064,3 +2453,13 @@ yallist@^3.0.0, yallist@^3.0.2:
version "3.0.3"
resolved "https://npm.gvia.group/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
yargs@~3.10.0:
version "3.10.0"
resolved "https://npm.gvia.group/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
dependencies:
camelcase "^1.0.2"
cliui "^2.1.0"
decamelize "^1.0.0"
window-size "0.1.0"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment