- Vue website with home, posts and qa - API providing postsmaster v1.0.0
commit
19cd93fd09
39 changed files with 14118 additions and 998 deletions
@ -0,0 +1,4 @@ |
||||
**/node_modules |
||||
**/dist |
||||
.git |
||||
.gitignore |
@ -0,0 +1,32 @@ |
||||
name: Node.js CI |
||||
|
||||
on: |
||||
push: |
||||
branches: [ master, beta ] |
||||
pull_request: |
||||
branches: [ master ] |
||||
|
||||
jobs: |
||||
build: |
||||
env: |
||||
CLIENT_DIR: ./client |
||||
|
||||
runs-on: ubuntu-latest |
||||
strategy: |
||||
matrix: |
||||
node-version: [10.x, 12.x, 13.x] |
||||
|
||||
steps: |
||||
- uses: actions/checkout@v2 |
||||
- name: Use Node.js ${{ matrix.node-version }} |
||||
uses: actions/setup-node@v1 |
||||
with: |
||||
node-version: ${{ matrix.node-version }} |
||||
- run: npm ci |
||||
working-directory: ${{env.CLIENT_DIR}} |
||||
- run: npm run build --if-present |
||||
working-directory: ${{env.CLIENT_DIR}} |
||||
- run: npm test |
||||
working-directory: ${{env.CLIENT_DIR}} |
||||
env: |
||||
CI: true |
@ -0,0 +1,2 @@ |
||||
**/node_modules |
||||
**/dist |
@ -0,0 +1,11 @@ |
||||
FROM node:latest as build-stage |
||||
WORKDIR /app |
||||
COPY package*.json ./ |
||||
RUN npm install |
||||
COPY ./ . |
||||
RUN npm run build |
||||
|
||||
FROM nginx as production-stage |
||||
RUN mkdir /app |
||||
COPY --from=build-stage /app/dist /app |
||||
COPY nginx.conf /etc/nginx/nginx.conf |
@ -0,0 +1,3 @@ |
||||
module.exports = { |
||||
presets: ['@vue/cli-plugin-babel/preset'], |
||||
} |
@ -0,0 +1,30 @@ |
||||
user nginx; |
||||
worker_processes 1; |
||||
error_log /var/log/nginx/error.log warn; |
||||
pid /var/run/nginx.pid; |
||||
events { |
||||
worker_connections 1024; |
||||
} |
||||
http { |
||||
include /etc/nginx/mime.types; |
||||
default_type application/octet-stream; |
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' |
||||
'$status $body_bytes_sent "$http_referer" ' |
||||
'"$http_user_agent" "$http_x_forwarded_for"'; |
||||
access_log /var/log/nginx/access.log main; |
||||
sendfile on; |
||||
keepalive_timeout 65; |
||||
server { |
||||
listen 80; |
||||
server_name localhost; |
||||
location / { |
||||
root /app; |
||||
index index.html; |
||||
try_files $uri $uri/ /index.html; |
||||
} |
||||
error_page 500 502 503 504 /50x.html; |
||||
location = /50x.html { |
||||
root /usr/share/nginx/html; |
||||
} |
||||
} |
||||
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,56 @@ |
||||
{ |
||||
"name": "personal-website", |
||||
"version": "1.0.0", |
||||
"private": true, |
||||
"description": "A nice introduction to my chaos", |
||||
"main": "src/main.js", |
||||
"scripts": { |
||||
"build": "vue-cli-service build", |
||||
"lint": "vue-cli-service lint", |
||||
"serve": "vue-cli-service serve", |
||||
"test": "node test_runner" |
||||
}, |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "git+https://github.com/Raymonzut/Personal-Website.git" |
||||
}, |
||||
"author": "Raymonzut", |
||||
"license": "ISC", |
||||
"bugs": { |
||||
"url": "https://github.com/Raymonzut/Personal-Website/issues" |
||||
}, |
||||
"homepage": "https://github.com/Raymonzut/Personal-Website#readme", |
||||
"dependencies": { |
||||
"core-js": "^3.6.5", |
||||
"vue": "^2.6.11", |
||||
"vue-resource": "^1.5.1", |
||||
"vue-router": "^3.1.6" |
||||
}, |
||||
"devDependencies": { |
||||
"babel-eslint": "^10.0.3", |
||||
"eslint": "^6.7.2", |
||||
"eslint-plugin-vue": "^6.1.2", |
||||
"@vue/cli-plugin-babel": "~4.2.0", |
||||
"@vue/cli-plugin-eslint": "~4.2.0", |
||||
"@vue/cli-service": "~4.2.0", |
||||
"vue-template-compiler": "^2.6.11" |
||||
}, |
||||
"eslintConfig": { |
||||
"root": true, |
||||
"env": { |
||||
"node": true |
||||
}, |
||||
"extends": [ |
||||
"plugin:vue/essential", |
||||
"eslint:recommended" |
||||
], |
||||
"parserOptions": { |
||||
"parser": "babel-eslint" |
||||
}, |
||||
"rules": {} |
||||
}, |
||||
"browserslist": [ |
||||
"> 1%", |
||||
"last 2 versions" |
||||
] |
||||
} |
@ -0,0 +1,18 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
|
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE-edge"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
<title>Personal Website</title> |
||||
</head> |
||||
|
||||
<body> |
||||
<noscript> |
||||
<strong>This site doesn't work properly without JavaScript enabled. Please enable to continue.</strong> |
||||
</noscript> |
||||
<div id="app"></div> |
||||
</body> |
||||
|
||||
</html> |
@ -0,0 +1,28 @@ |
||||
<template> |
||||
<div id="app"> |
||||
<div id="nav"> |
||||
<router-link to="/">Home</router-link> | |
||||
<router-link to="/posts">Posts</router-link> | |
||||
<router-link to="/qa">QA</router-link> |
||||
</div> |
||||
<router-view /> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
|
||||
export default { |
||||
name: 'App', |
||||
} |
||||
</script> |
||||
|
||||
<style> |
||||
#app { |
||||
font-family: Avenir, Helvetica, Arial, sans-serif; |
||||
-webkit-font-smoothing: antialiased; |
||||
-moz-osx-font-smoothing: grayscale; |
||||
text-align: center; |
||||
color: #2c3e50; |
||||
margin-top: 60px; |
||||
} |
||||
</style> |
After Width: | Height: | Size: 6.7 KiB |
@ -0,0 +1,34 @@ |
||||
<template> |
||||
<div> |
||||
<h2>Who am I?</h2> |
||||
<p> |
||||
Hi there, good to see you on my website. |
||||
My name is Raymon Zutekouw({{ age }}). |
||||
Building software and exploring the wide variety of tools (or making them) is my passion. |
||||
To see it in action, checkout the stuff I make on |
||||
<a href='https://github.com/Raymonzut'>GitHub</a>. |
||||
The projects that may be useful to others are open source; for inspiring others and improving each others work. |
||||
That is why I am a huge fan of |
||||
<a href='https://www.gnu.org/philosophy/free-sw.en.html'>free software</a>. |
||||
</p> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import me from '../me.js' |
||||
|
||||
export default { |
||||
name: 'AboutMe', |
||||
computed: { |
||||
age: me.age |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style scoped> |
||||
p { |
||||
--margin-side: 12vw; |
||||
margin-left: var(--margin-side); |
||||
margin-right: var(--margin-side); |
||||
} |
||||
</style> |
@ -0,0 +1,18 @@ |
||||
<template> |
||||
<div> |
||||
{{ a }} |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
export default { |
||||
name: 'Answer', |
||||
props: { |
||||
a: { |
||||
type: String, |
||||
required: true, |
||||
} |
||||
} |
||||
} |
||||
</script> |
||||
|
@ -0,0 +1,38 @@ |
||||
<template> |
||||
<div id='qa'> |
||||
<Question :q='q'></Question> |
||||
<Answer :a='a'></Answer> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import Question from './Question.vue' |
||||
import Answer from './Answer.vue' |
||||
|
||||
export default { |
||||
name: 'QA', |
||||
components: { |
||||
Question, |
||||
Answer, |
||||
}, |
||||
props: { |
||||
q: { |
||||
type: String, |
||||
required: true, |
||||
}, |
||||
a: { |
||||
type: String, |
||||
required: true, |
||||
} |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style scoped> |
||||
#qa { |
||||
--block-spacing: 7.5em; |
||||
|
||||
margin-top: var(--block-spacing); |
||||
margin-bottom: var(--block-spacing); |
||||
} |
||||
</style> |
@ -0,0 +1,27 @@ |
||||
<template> |
||||
<div id='question_box'> |
||||
{{ q }} |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
export default { |
||||
name: 'Question', |
||||
props: { |
||||
q: { |
||||
type: String, |
||||
required: true, |
||||
} |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style scoped> |
||||
#question_box { |
||||
--text-spacing: 0.75em; |
||||
|
||||
font-style: italic; |
||||
margin-top: var(--text-spacing); |
||||
margin-bottom: var(--text-spacing); |
||||
} |
||||
</style> |
@ -0,0 +1,14 @@ |
||||
import Vue from 'vue' |
||||
import VueResource from 'vue-resource' |
||||
|
||||
import App from './App.vue' |
||||
import router from './router' |
||||
|
||||
Vue.config.productionTip = false |
||||
|
||||
Vue.use(VueResource) |
||||
|
||||
new Vue({ |
||||
render: h => h(App), |
||||
router, |
||||
}).$mount('#app') |
@ -0,0 +1,21 @@ |
||||
module.exports = { |
||||
age: age, |
||||
} |
||||
|
||||
function age() { |
||||
let birthdate = new Date(2002, 8, 29) |
||||
let now = new Date() |
||||
|
||||
let age = now.getFullYear() - birthdate.getFullYear() |
||||
|
||||
if (now.getMonth() < birthdate.getMonth()) { |
||||
age-- |
||||
} |
||||
if ( |
||||
birthdate.getMonth() === now.getMonth() && |
||||
now.getDate() < birthdate.getDate() |
||||
) { |
||||
age-- |
||||
} |
||||
return age |
||||
} |
@ -0,0 +1,23 @@ |
||||
module.exports = { |
||||
getPosts: function(id) { |
||||
const BASE_URL = '/api/posts' |
||||
const URL = BASE_URL + (id ? `/${id}` : '?sort=-1') |
||||
|
||||
this.$http |
||||
.get(URL) |
||||
.then(res => { |
||||
if (id) { |
||||
if (res.body.length === 0) { |
||||
throw Error("Response body empty") |
||||
} |
||||
this.post = res.body |
||||
} |
||||
else { |
||||
this.posts = res.body |
||||
} |
||||
}) |
||||
.catch(err => { |
||||
console.log(`Error: ${err}`) |
||||
}) |
||||
}, |
||||
} |
@ -0,0 +1,46 @@ |
||||
import Vue from 'vue' |
||||
import VueRouter from 'vue-router' |
||||
import Home from '../views/Home.vue' |
||||
import Posts from '../views/Posts.vue' |
||||
import Post from '../views/Post.vue' |
||||
import QAPage from '../views/QAPage' |
||||
|
||||
Vue.use(VueRouter) |
||||
|
||||
const routes = [ |
||||
{ |
||||
path: "/", |
||||
name: "Home", |
||||
component: Home, |
||||
}, |
||||
{ |
||||
path: "/posts", |
||||
name: "Posts", |
||||
component: Posts, |
||||
}, |
||||
{ |
||||
path: "/posts/:id", |
||||
name: "Post", |
||||
component: Post, |
||||
props: true, |
||||
}, |
||||
{ |
||||
path: "/qa", |
||||
name: "QA", |
||||
component: QAPage |
||||
}, |
||||
] |
||||
|
||||
const exclude_routes = [ |
||||
{ |
||||
path: "/api" |
||||
} |
||||
] |
||||
|
||||
const router = new VueRouter({ |
||||
mode: "history", |
||||
base: process.env.BASE_URL, |
||||
routes: routes.concat(exclude_routes), |
||||
}) |
||||
|
||||
export default router |
@ -0,0 +1,19 @@ |
||||
<template> |
||||
<div id="home"> |
||||
<h1>Home</h1> |
||||
<AboutMe></AboutMe> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import AboutMe from '@/components/AboutMe' |
||||
|
||||
export default { |
||||
name: "Home", |
||||
components: { |
||||
AboutMe |
||||
}, |
||||
} |
||||
</script> |
||||
|
||||
<style scoped></style> |
@ -0,0 +1,45 @@ |
||||
<template> |
||||
<div id="Post"> |
||||
<div v-if="Object.keys(post).length"> |
||||
<h1>{{ post.title }}</h1> |
||||
<h5>Written on {{ post.date.substring(0,10)}}</h5> |
||||
|
||||
<p v-for="(p, i) in post.content.split('\n')" :key="i">{{ p }}</p> |
||||
</div> |
||||
<h2 v-else>Waiting for post</h2> |
||||
<br> |
||||
Read other <a href="/posts">posts</a> |
||||
<br> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import { getPosts } from '../remote' |
||||
|
||||
export default { |
||||
name: "Post", |
||||
data() { |
||||
return { |
||||
post: {}, |
||||
} |
||||
}, |
||||
methods: { |
||||
getPosts |
||||
}, |
||||
mounted() { |
||||
getPosts.call(this, this._props.id) |
||||
}, |
||||
props: { |
||||
id: { |
||||
type: String, |
||||
name: "id", |
||||
validator: val => { |
||||
const reg = /([0-9]|[a-f]){24}/ |
||||
return reg.test(val) |
||||
}, |
||||
} |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style scoped></style> |
@ -0,0 +1,68 @@ |
||||
<template> |
||||
<div id="posts" v-if="months.length >= 0"> |
||||
<h3 class="month" v-for="(month, i) in months" :key="i"> |
||||
{{ month }} |
||||
<div> |
||||
<ul> |
||||
<li v-for="(postItem, j) in getPostItems(month)" :key="j"> |
||||
{{ getPostItemDate(postItem) }} – |
||||
<a :href="/posts/ + postItem._id">{{ postItem.title }}</a> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
<br> |
||||
</h3> |
||||
</div> |
||||
<h2 v-else>There are no posts yet, but don't worry they will be added soon</h2> |
||||
</template> |
||||
|
||||
<script> |
||||
import { getPosts } from '../remote' |
||||
|
||||
export default { |
||||
name: "Posts", |
||||
computed: { |
||||
months: function () { |
||||
const dates = this.posts.map(post => new Date(post.date)) |
||||
|
||||
// Contains the month followed by the year |
||||
const months = dates.map(date => `${date.toLocaleString('default', { month: 'long' })} ${date.getFullYear()}`) |
||||
const uniques = Array.from(new Set(months)) |
||||
|
||||
return uniques |
||||
} |
||||
}, |
||||
data() { |
||||
return { |
||||
posts: [] |
||||
} |
||||
}, |
||||
methods: { |
||||
getPosts, |
||||
getPostItems: function (month) { |
||||
const month_index = new Date(`1 ${month}`).getMonth() |
||||
return this.posts.filter((post) => (new Date(post.date)).getMonth() === month_index) |
||||
}, |
||||
getPostItemDate: function (postItem) { |
||||
const date = new Date(postItem.date) |
||||
return `${date.getFullYear()} ${date.toLocaleString('default', { month: 'short' })} ${date.getDate()}` |
||||
} |
||||
}, |
||||
mounted() { |
||||
getPosts.call(this) |
||||
}, |
||||
} |
||||
</script> |
||||
|
||||
<style scoped> |
||||
ul { |
||||
text-align: left; |
||||
} |
||||
|
||||
@media (min-width: 420px) { |
||||
.month { |
||||
text-indent: 1em; |
||||
text-align: left; |
||||
} |
||||
} |
||||
</style> |
@ -0,0 +1,25 @@ |
||||
<template> |
||||
<div id="QAPage"> |
||||
<QA |
||||
q="What is this site about? " |
||||
a="This site is about me and the stuff I make " |
||||
></QA> |
||||
|
||||
<QA |
||||
q="Why is it still so empty?" |
||||
a="Because I am framework hopping " |
||||
></QA> |
||||
</div> |
||||
|
||||
</template> |
||||
|
||||
<script> |
||||
import QA from '@/components/QA' |
||||
|
||||
export default { |
||||
name: "QAPAge", |
||||
components: { QA } |
||||
} |
||||
</script> |
||||
|
||||
<style scoped></style> |
@ -0,0 +1,4 @@ |
||||
const assert = require('assert').strict |
||||
const me = require('../src/me') |
||||
|
||||
assert(me.age() > 0, 'age should return a positive number') |
@ -0,0 +1,22 @@ |
||||
const { spawn } = require('child_process') |
||||
const fs = require('fs') |
||||
|
||||
const dirs = ['./test', './tests'] |
||||
|
||||
if (!dirs.some(fs.existsSync)) { |
||||
throw Error("Could not find any test directories, looked for: " + dirs) |
||||
} |
||||
|
||||
const test_dirs = dirs.filter(fs.existsSync) |
||||
|
||||
test_dirs.forEach(test_dir => { |
||||
const files = fs.readdirSync(test_dir) |
||||
|
||||
if (files.length === 0) { |
||||
throw Error("Could not find test files in " + test_dir) |
||||
} |
||||
|
||||
const childs = files.map(file =>
|
||||
spawn('node', [`${test_dir}/${file}`], { stdio: 'inherit' })
|
||||
) |
||||
}) |
@ -0,0 +1,3 @@ |
||||
version: '3' |
||||
|
||||
services: |
@ -1,964 +0,0 @@ |
||||
{ |
||||
"name": "personal-website", |
||||
"version": "0.0.1", |
||||
"lockfileVersion": 1, |
||||
"requires": true, |
||||
"dependencies": { |
||||
"ansi-colors": { |
||||
"version": "3.2.3", |
||||
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", |
||||
"integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", |
||||
"dev": true |
||||
}, |
||||
"ansi-regex": { |
||||
"version": "3.0.0", |
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", |
||||
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", |
||||
"dev": true |
||||
}, |
||||
"ansi-styles": { |
||||
"version": "3.2.1", |
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", |
||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", |
||||
"dev": true, |
||||
"requires": { |
||||
"color-convert": "^1.9.0" |
||||
} |
||||
}, |
||||
"anymatch": { |
||||
"version": "3.1.1", |
||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", |
||||
"integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", |
||||
"dev": true, |
||||
"requires": { |
||||
"normalize-path": "^3.0.0", |
||||
"picomatch": "^2.0.4" |
||||
} |
||||
}, |
||||
"argparse": { |
||||
"version": "1.0.10", |
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", |
||||
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", |
||||
"dev": true, |
||||
"requires": { |
||||
"sprintf-js": "~1.0.2" |
||||
} |
||||
}, |
||||
"assertion-error": { |
||||
"version": "1.1.0", |
||||
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", |
||||
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", |
||||
"dev": true |
||||
}, |
||||
"balanced-match": { |
||||
"version": "1.0.0", |
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", |
||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", |
||||
"dev": true |
||||
}, |
||||
"binary-extensions": { |
||||
"version": "2.0.0", |
||||
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", |
||||
"integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", |
||||
"dev": true |
||||
}, |
||||
"brace-expansion": { |
||||
"version": "1.1.11", |
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", |
||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", |
||||
"dev": true, |
||||
"requires": { |
||||
"balanced-match": "^1.0.0", |
||||
"concat-map": "0.0.1" |
||||
} |
||||
}, |
||||
"braces": { |
||||
"version": "3.0.2", |
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", |
||||
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", |
||||
"dev": true, |
||||
"requires": { |
||||
"fill-range": "^7.0.1" |
||||
} |
||||
}, |
||||
"browser-stdout": { |
||||
"version": "1.3.1", |
||||
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", |
||||
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", |
||||
"dev": true |
||||
}, |
||||
"camelcase": { |
||||
"version": "5.3.1", |
||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", |
||||
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", |
||||
"dev": true |
||||
}, |
||||
"chai": { |
||||
"version": "4.2.0", |
||||
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", |
||||
"integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", |
||||
"dev": true, |
||||
"requires": { |
||||
"assertion-error": "^1.1.0", |
||||
"check-error": "^1.0.2", |
||||
"deep-eql": "^3.0.1", |
||||
"get-func-name": "^2.0.0", |
||||
"pathval": "^1.1.0", |
||||
"type-detect": "^4.0.5" |
||||
} |
||||
}, |
||||
"chalk": { |
||||
"version": "2.4.2", |
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", |
||||
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"ansi-styles": "^3.2.1", |
||||
"escape-string-regexp": "^1.0.5", |
||||
"supports-color": "^5.3.0" |
||||
}, |
||||
"dependencies": { |
||||
"supports-color": { |
||||
"version": "5.5.0", |
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", |
||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", |
||||
"dev": true, |
||||
"requires": { |
||||
"has-flag": "^3.0.0" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"check-error": { |
||||
"version": "1.0.2", |
||||
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", |
||||
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", |
||||
"dev": true |
||||
}, |
||||
"chokidar": { |
||||
"version": "3.3.0", |
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", |
||||
"integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", |
||||
"dev": true, |
||||
"requires": { |
||||
"anymatch": "~3.1.1", |
||||
"braces": "~3.0.2", |
||||
"fsevents": "~2.1.1", |
||||
"glob-parent": "~5.1.0", |
||||
"is-binary-path": "~2.1.0", |
||||
"is-glob": "~4.0.1", |
||||
"normalize-path": "~3.0.0", |
||||
"readdirp": "~3.2.0" |
||||
} |
||||
}, |
||||
"cliui": { |
||||
"version": "5.0.0", |
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", |
||||
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", |
||||
"dev": true, |
||||
"requires": { |
||||
"string-width": "^3.1.0", |
||||
"strip-ansi": "^5.2.0", |
||||
"wrap-ansi": "^5.1.0" |
||||
}, |
||||
"dependencies": { |
||||
"ansi-regex": { |
||||
"version": "4.1.0", |
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", |
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", |
||||
"dev": true |
||||
}, |
||||
"string-width": { |
||||
"version": "3.1.0", |
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", |
||||
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", |
||||
"dev": true, |
||||
"requires": { |
||||
"emoji-regex": "^7.0.1", |
||||
"is-fullwidth-code-point": "^2.0.0", |
||||
"strip-ansi": "^5.1.0" |
||||
} |
||||
}, |
||||
"strip-ansi": { |
||||
"version": "5.2.0", |
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", |
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", |
||||
"dev": true, |
||||
"requires": { |
||||
"ansi-regex": "^4.1.0" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"color-convert": { |
||||
"version": "1.9.3", |
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", |
||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", |
||||
"dev": true, |
||||
"requires": { |
||||
"color-name": "1.1.3" |
||||
} |
||||
}, |
||||
"color-name": { |
||||
"version": "1.1.3", |
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", |
||||
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", |
||||
"dev": true |
||||
}, |
||||
"concat-map": { |
||||
"version": "0.0.1", |
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", |
||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", |
||||
"dev": true |
||||
}, |
||||
"debug": { |
||||
"version": "3.2.6", |
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", |
||||
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"ms": "^2.1.1" |
||||
} |
||||
}, |
||||
"decamelize": { |
||||
"version": "1.2.0", |
||||
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", |
||||
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", |
||||
"dev": true |
||||
}, |
||||
"deep-eql": { |
||||
"version": "3.0.1", |
||||
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", |
||||
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", |
||||
"dev": true, |
||||
"requires": { |
||||
"type-detect": "^4.0.0" |
||||
} |
||||
}, |
||||
"define-properties": { |
||||
"version": "1.1.3", |
||||
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", |
||||
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"object-keys": "^1.0.12" |
||||
} |
||||
}, |
||||
"diff": { |
||||
"version": "3.5.0", |
||||
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", |
||||
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", |
||||
"dev": true |
||||
}, |
||||
"emoji-regex": { |
||||
"version": "7.0.3", |
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", |
||||
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", |
||||
"dev": true |
||||
}, |
||||
"es-abstract": { |
||||
"version": "1.17.5", |
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", |
||||
"integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", |
||||
"dev": true, |
||||
"requires": { |
||||
"es-to-primitive": "^1.2.1", |
||||
"function-bind": "^1.1.1", |
||||
"has": "^1.0.3", |
||||
"has-symbols": "^1.0.1", |
||||
"is-callable": "^1.1.5", |
||||
"is-regex": "^1.0.5", |
||||
"object-inspect": "^1.7.0", |
||||
"object-keys": "^1.1.1", |
||||
"object.assign": "^4.1.0", |
||||
"string.prototype.trimleft": "^2.1.1", |
||||
"string.prototype.trimright": "^2.1.1" |
||||
} |
||||
}, |
||||
"es-to-primitive": { |
||||
"version": "1.2.1", |
||||
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", |
||||
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", |
||||
"dev": true, |
||||
"requires": { |
||||
"is-callable": "^1.1.4", |
||||
"is-date-object": "^1.0.1", |
||||
"is-symbol": "^1.0.2" |
||||
} |
||||
}, |
||||
"escape-string-regexp": { |
||||
"version": "1.0.5", |
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", |
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", |
||||
"dev": true |
||||
}, |
||||
"esprima": { |
||||
"version": "4.0.1", |
||||
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", |
||||
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", |
||||
"dev": true |
||||
}, |
||||
"fill-range": { |
||||
"version": "7.0.1", |
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", |
||||
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"to-regex-range": "^5.0.1" |
||||
} |
||||
}, |
||||
"find-up": { |
||||
"version": "3.0.0", |
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", |
||||
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", |
||||
"dev": true, |
||||
"requires": { |
||||
"locate-path": "^3.0.0" |
||||
} |
||||
}, |
||||
"flat": { |
||||
"version": "4.1.0", |
||||
"resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", |
||||
"integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", |
||||
"dev": true, |
||||
"requires": { |
||||
"is-buffer": "~2.0.3" |
||||
} |
||||
}, |
||||
"fs.realpath": { |
||||
"version": "1.0.0", |
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", |
||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", |
||||
"dev": true |
||||
}, |
||||
"fsevents": { |
||||
"version": "2.1.2", |
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", |
||||
"integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", |
||||
"dev": true, |
||||
"optional": true |
||||
}, |
||||
"function-bind": { |
||||
"version": "1.1.1", |
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", |
||||
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", |
||||
"dev": true |
||||
}, |
||||
"get-caller-file": { |
||||
"version": "2.0.5", |
||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", |
||||
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", |
||||
"dev": true |
||||
}, |
||||
"get-func-name": { |
||||
"version": "2.0.0", |
||||
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", |
||||
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", |
||||
"dev": true |
||||
}, |
||||
"glob": { |
||||
"version": "7.1.3", |
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", |
||||
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"fs.realpath": "^1.0.0", |
||||
"inflight": "^1.0.4", |
||||
"inherits": "2", |
||||
"minimatch": "^3.0.4", |
||||
"once": "^1.3.0", |
||||
"path-is-absolute": "^1.0.0" |
||||
} |
||||
}, |
||||
"glob-parent": { |
||||
"version": "5.1.1", |
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", |
||||
"integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"is-glob": "^4.0.1" |
||||
} |
||||
}, |
||||
"growl": { |
||||
"version": "1.10.5", |
||||
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", |
||||
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", |
||||
"dev": true |
||||
}, |
||||
"has": { |
||||
"version": "1.0.3", |
||||
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", |
||||
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", |
||||
"dev": true, |
||||
"requires": { |
||||
"function-bind": "^1.1.1" |
||||
} |
||||
}, |
||||
"has-flag": { |
||||
"version": "3.0.0", |
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", |
||||
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", |
||||
"dev": true |
||||
}, |
||||
"has-symbols": { |
||||
"version": "1.0.1", |
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", |
||||
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", |
||||
"dev": true |
||||
}, |
||||
"he": { |
||||
"version": "1.2.0", |
||||
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", |
||||
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", |
||||
"dev": true |
||||
}, |
||||
"inflight": { |
||||
"version": "1.0.6", |
||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", |
||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", |
||||
"dev": true, |
||||
"requires": { |
||||
"once": "^1.3.0", |
||||
"wrappy": "1" |
||||
} |
||||
}, |
||||
"inherits": { |
||||
"version": "2.0.4", |
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", |
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", |
||||
"dev": true |
||||
}, |
||||
"is-binary-path": { |
||||
"version": "2.1.0", |
||||
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", |
||||
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", |
||||
"dev": true, |
||||
"requires": { |
||||
"binary-extensions": "^2.0.0" |
||||
} |
||||
}, |
||||
"is-buffer": { |
||||
"version": "2.0.4", |
||||
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", |
||||
"integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", |
||||
"dev": true |
||||
}, |
||||
"is-callable": { |
||||
"version": "1.1.5", |
||||
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", |
||||
"integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", |
||||
"dev": true |
||||
}, |
||||
"is-date-object": { |
||||
"version": "1.0.2", |
||||
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", |
||||
"integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", |
||||
"dev": true |
||||
}, |
||||
"is-extglob": { |
||||
"version": "2.1.1", |
||||
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", |
||||
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", |
||||
"dev": true |
||||
}, |
||||
"is-fullwidth-code-point": { |
||||
"version": "2.0.0", |
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", |
||||
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", |
||||
"dev": true |
||||
}, |
||||
"is-glob": { |
||||
"version": "4.0.1", |
||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", |
||||
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", |
||||
"dev": true, |
||||
"requires": { |
||||
"is-extglob": "^2.1.1" |
||||
} |
||||
}, |
||||
"is-number": { |
||||
"version": "7.0.0", |
||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", |
||||
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", |
||||
"dev": true |
||||
}, |
||||
"is-regex": { |
||||
"version": "1.0.5", |
||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", |
||||
"integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"has": "^1.0.3" |
||||
} |
||||
}, |
||||
"is-symbol": { |
||||
"version": "1.0.3", |
||||
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", |
||||
"integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"has-symbols": "^1.0.1" |
||||
} |
||||
}, |
||||
"isexe": { |
||||
"version": "2.0.0", |
||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", |
||||
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", |
||||
"dev": true |
||||
}, |
||||
"js-yaml": { |
||||
"version": "3.13.1", |
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", |
||||
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", |
||||
"dev": true, |
||||
"requires": { |
||||
"argparse": "^1.0.7", |
||||
"esprima": "^4.0.0" |
||||
} |
||||
}, |
||||
"locate-path": { |
||||
"version": "3.0.0", |
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", |
||||
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", |
||||
"dev": true, |
||||
"requires": { |
||||
"p-locate": "^3.0.0", |
||||
"path-exists": "^3.0.0" |
||||
} |
||||
}, |
||||
"lodash": { |
||||
"version": "4.17.15", |
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", |
||||
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", |
||||
"dev": true |
||||
}, |
||||
"log-symbols": { |
||||
"version": "3.0.0", |
||||
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", |
||||
"integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"chalk": "^2.4.2" |
||||
} |
||||
}, |
||||
"minimatch": { |
||||
"version": "3.0.4", |
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", |
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", |
||||
"dev": true, |
||||
"requires": { |
||||
"brace-expansion": "^1.1.7" |
||||
} |
||||
}, |
||||
"minimist": { |
||||
"version": "1.2.5", |
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", |
||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", |
||||
"dev": true |
||||
}, |
||||
"mkdirp": { |
||||
"version": "0.5.3", |
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", |
||||
"integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", |
||||
"dev": true, |
||||
"requires": { |
||||
"minimist": "^1.2.5" |
||||
} |
||||
}, |
||||
"mocha": { |
||||
"version": "7.1.1", |
||||
"resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.1.tgz", |
||||
"integrity": "sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA==", |
||||
"dev": true, |
||||
"requires": { |
||||
"ansi-colors": "3.2.3", |
||||
"browser-stdout": "1.3.1", |
||||
"chokidar": "3.3.0", |
||||
"debug": "3.2.6", |
||||
"diff": "3.5.0", |
||||
"escape-string-regexp": "1.0.5", |
||||
"find-up": "3.0.0", |
||||
"glob": "7.1.3", |
||||
"growl": "1.10.5", |
||||
"he": "1.2.0", |
||||
"js-yaml": "3.13.1", |
||||
"log-symbols": "3.0.0", |
||||
"minimatch": "3.0.4", |
||||
"mkdirp": "0.5.3", |
||||
"ms": "2.1.1", |
||||
"node-environment-flags": "1.0.6", |
||||
"object.assign": "4.1.0", |
||||
"strip-json-comments": "2.0.1", |
||||
"supports-color": "6.0.0", |
||||
"which": "1.3.1", |
||||
"wide-align": "1.1.3", |
||||
"yargs": "13.3.2", |
||||
"yargs-parser": "13.1.2", |
||||
"yargs-unparser": "1.6.0" |
||||
} |
||||
}, |
||||
"ms": { |
||||
"version": "2.1.1", |
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", |
||||
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", |
||||
"dev": true |
||||
}, |
||||
"node-environment-flags": { |
||||
"version": "1.0.6", |
||||
"resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", |
||||
"integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", |
||||
"dev": true, |
||||
"requires": { |
||||
"object.getownpropertydescriptors": "^2.0.3", |
||||
"semver": "^5.7.0" |
||||
} |
||||
}, |
||||
"normalize-path": { |
||||
"version": "3.0.0", |
||||
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", |
||||
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", |
||||
"dev": true |
||||
}, |
||||
"object-inspect": { |
||||
"version": "1.7.0", |
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", |
||||
"integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", |
||||
"dev": true |
||||
}, |
||||
"object-keys": { |
||||
"version": "1.1.1", |
||||
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", |
||||
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", |
||||
"dev": true |
||||
}, |
||||
"object.assign": { |
||||
"version": "4.1.0", |
||||
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", |
||||
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", |
||||
"dev": true, |
||||
"requires": { |
||||
"define-properties": "^1.1.2", |
||||
"function-bind": "^1.1.1", |
||||
"has-symbols": "^1.0.0", |
||||
"object-keys": "^1.0.11" |
||||
} |
||||
}, |
||||
"object.getownpropertydescriptors": { |
||||
"version": "2.1.0", |
||||
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", |
||||
"integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", |
||||
"dev": true, |
||||
"requires": { |
||||
"define-properties": "^1.1.3", |
||||
"es-abstract": "^1.17.0-next.1" |
||||
} |
||||
}, |
||||
"once": { |
||||
"version": "1.4.0", |
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", |
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", |
||||
"dev": true, |
||||
"requires": { |
||||
"wrappy": "1" |
||||
} |
||||
}, |
||||
"p-limit": { |
||||
"version": "2.2.2", |
||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", |
||||
"integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"p-try": "^2.0.0" |
||||
} |
||||
}, |
||||
"p-locate": { |
||||
"version": "3.0.0", |
||||
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", |
||||
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"p-limit": "^2.0.0" |
||||
} |
||||
}, |
||||
"p-try": { |
||||
"version": "2.2.0", |
||||
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", |
||||
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", |
||||
"dev": true |
||||
}, |
||||
"path-exists": { |
||||
"version": "3.0.0", |
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", |
||||
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", |
||||
"dev": true |
||||
}, |
||||
"path-is-absolute": { |
||||
"version": "1.0.1", |
||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", |
||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", |
||||
"dev": true |
||||
}, |
||||
"pathval": { |
||||
"version": "1.1.0", |
||||
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", |
||||
"integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", |
||||
"dev": true |
||||
}, |
||||
"picomatch": { |
||||
"version": "2.2.2", |
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", |
||||
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", |
||||
"dev": true |
||||
}, |
||||
"readdirp": { |
||||
"version": "3.2.0", |
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", |
||||
"integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"picomatch": "^2.0.4" |
||||
} |
||||
}, |
||||
"require-directory": { |
||||
"version": "2.1.1", |
||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", |
||||
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", |
||||
"dev": true |
||||
}, |
||||
"require-main-filename": { |
||||
"version": "2.0.0", |
||||
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", |
||||
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", |
||||
"dev": true |
||||
}, |
||||
"semver": { |
||||
"version": "5.7.1", |
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", |
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", |
||||
"dev": true |
||||
}, |
||||
"set-blocking": { |
||||
"version": "2.0.0", |
||||
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", |
||||
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", |
||||
"dev": true |
||||
}, |
||||
"sprintf-js": { |
||||
"version": "1.0.3", |
||||
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", |
||||
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", |
||||
"dev": true |
||||
}, |
||||
"string-width": { |
||||
"version": "2.1.1", |
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", |
||||
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", |
||||
"dev": true, |
||||
"requires": { |
||||
"is-fullwidth-code-point": "^2.0.0", |
||||
"strip-ansi": "^4.0.0" |
||||
} |
||||
}, |
||||
"string.prototype.trimleft": { |
||||
"version": "2.1.1", |
||||
"resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", |
||||
"integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", |
||||
"dev": true, |
||||
"requires": { |
||||
"define-properties": "^1.1.3", |
||||
"function-bind": "^1.1.1" |
||||
} |
||||
}, |
||||
"string.prototype.trimright": { |
||||
"version": "2.1.1", |
||||
"resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", |
||||
"integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", |
||||
"dev": true, |
||||
"requires": { |
||||
"define-properties": "^1.1.3", |
||||
"function-bind": "^1.1.1" |
||||
} |
||||
}, |
||||
"strip-ansi": { |
||||
"version": "4.0.0", |
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", |
||||
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", |
||||
"dev": true, |
||||
"requires": { |
||||
"ansi-regex": "^3.0.0" |
||||
} |
||||
}, |
||||
"strip-json-comments": { |
||||
"version": "2.0.1", |
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", |
||||
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", |
||||
"dev": true |
||||
}, |
||||
"supports-color": { |
||||
"version": "6.0.0", |
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", |
||||
"integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", |
||||
"dev": true, |
||||
"requires": { |
||||
"has-flag": "^3.0.0" |
||||
} |
||||
}, |
||||
"to-regex-range": { |
||||
"version": "5.0.1", |
||||
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", |
||||
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"is-number": "^7.0.0" |
||||
} |
||||
}, |
||||
"type-detect": { |
||||
"version": "4.0.8", |
||||
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", |
||||
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", |
||||
"dev": true |
||||
}, |
||||
"which": { |
||||
"version": "1.3.1", |
||||
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", |
||||
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", |
||||
"dev": true, |
||||
"requires": { |
||||
"isexe": "^2.0.0" |
||||
} |
||||
}, |
||||
"which-module": { |
||||
"version": "2.0.0", |
||||
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", |
||||
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", |
||||
"dev": true |
||||
}, |
||||
"wide-align": { |
||||
"version": "1.1.3", |
||||
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", |
||||
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", |
||||
"dev": true, |
||||
"requires": { |
||||
"string-width": "^1.0.2 || 2" |
||||
} |
||||
}, |
||||
"wrap-ansi": { |
||||
"version": "5.1.0", |
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", |
||||
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", |
||||
"dev": true, |
||||
"requires": { |
||||
"ansi-styles": "^3.2.0", |
||||
"string-width": "^3.0.0", |
||||
"strip-ansi": "^5.0.0" |
||||
}, |
||||
"dependencies": { |
||||
"ansi-regex": { |
||||
"version": "4.1.0", |
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", |
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", |
||||
"dev": true |
||||
}, |
||||
"string-width": { |
||||
"version": "3.1.0", |
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", |
||||
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", |
||||
"dev": true, |
||||
"requires": { |
||||
"emoji-regex": "^7.0.1", |
||||
"is-fullwidth-code-point": "^2.0.0", |
||||
"strip-ansi": "^5.1.0" |
||||
} |
||||
}, |
||||
"strip-ansi": { |
||||
"version": "5.2.0", |
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", |
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", |
||||
"dev": true, |
||||
"requires": { |
||||
"ansi-regex": "^4.1.0" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"wrappy": { |
||||
"version": "1.0.2", |
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", |
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", |
||||
"dev": true |
||||
}, |
||||
"y18n": { |
||||
"version": "4.0.0", |
||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", |
||||
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", |
||||
"dev": true |
||||
}, |
||||
"yargs": { |
||||
"version": "13.3.2", |
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", |
||||
"integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", |
||||
"dev": true, |
||||
"requires": { |
||||
"cliui": "^5.0.0", |
||||
"find-up": "^3.0.0", |
||||
"get-caller-file": "^2.0.1", |
||||
"require-directory": "^2.1.1", |
||||
"require-main-filename": "^2.0.0", |
||||
"set-blocking": "^2.0.0", |
||||
"string-width": "^3.0.0", |
||||
"which-module": "^2.0.0", |
||||
"y18n": "^4.0.0", |
||||
"yargs-parser": "^13.1.2" |
||||
}, |
||||
"dependencies": { |
||||
"ansi-regex": { |
||||
"version": "4.1.0", |
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", |
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", |
||||
"dev": true |
||||
}, |
||||
"string-width": { |
||||
"version": "3.1.0", |
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", |
||||
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", |
||||
"dev": true, |
||||
"requires": { |
||||
"emoji-regex": "^7.0.1", |
||||
"is-fullwidth-code-point": "^2.0.0", |
||||
"strip-ansi": "^5.1.0" |
||||
} |
||||
}, |
||||
"strip-ansi": { |
||||
"version": "5.2.0", |
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", |
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", |
||||
"dev": true, |
||||
"requires": { |
||||
"ansi-regex": "^4.1.0" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"yargs-parser": { |
||||
"version": "13.1.2", |
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", |
||||
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", |
||||
"dev": true, |
||||
"requires": { |
||||
"camelcase": "^5.0.0", |
||||
"decamelize": "^1.2.0" |
||||
} |
||||
}, |
||||
"yargs-unparser": { |
||||
"version": "1.6.0", |
||||
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", |
||||
"integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", |
||||
"dev": true, |
||||
"requires": { |
||||
"flat": "^4.1.0", |
||||
"lodash": "^4.17.15", |
||||
"yargs": "^13.3.0" |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,23 +0,0 @@ |
||||
{ |
||||
"name": "personal-website", |
||||
"version": "0.0.0", |
||||
"description": "", |
||||
"main": "app.js", |
||||
"scripts": { |
||||
"test": "mocha" |
||||
}, |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "git+https://github.com/Raymonzut/Personal-Website.git" |
||||
}, |
||||
"author": "Raymonzut", |
||||
"license": "ISC", |
||||
"bugs": { |
||||
"url": "https://github.com/Raymonzut/Personal-Website/issues" |
||||
}, |
||||
"homepage": "https://github.com/Raymonzut/Personal-Website#readme", |
||||
"devDependencies": { |
||||
"chai": "^4.2.0", |
||||
"mocha": "^7.1.1" |
||||
} |
||||
} |
@ -0,0 +1,2 @@ |
||||
**/node_modules |
||||
**/dist |
@ -0,0 +1,13 @@ |
||||
FROM node:latest |
||||
|
||||
WORKDIR /usr/src/server |
||||
|
||||
COPY package*.json ./ |
||||
|
||||
RUN npm ci --only=production |
||||
|
||||
COPY . . |
||||
|
||||
CMD [ "node", "index.js" ] |
||||
|
||||
EXPOSE 5000 |
@ -0,0 +1,14 @@ |
||||
const express = require('express') |
||||
const cors = require('cors') |
||||
|
||||
const app = express() |
||||
|
||||
app.use(cors()) |
||||
|
||||
const posts = require('./routes/api/posts') |
||||
|
||||
app.use('/posts', posts) |
||||
|
||||
const port = process.env.PORT || 5000 |
||||
|
||||
app.listen(port, () => console.log(`Server started on port ${port}`)) |
@ -0,0 +1,388 @@ |
||||
{ |
||||
"name": "server", |
||||
"version": "1.0.0", |
||||
"lockfileVersion": 1, |
||||
"requires": true, |
||||
"dependencies": { |
||||
"accepts": { |
||||
"version": "1.3.7", |
||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", |
||||
"integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", |
||||
"requires": { |
||||
"mime-types": "~2.1.24", |
||||
"negotiator": "0.6.2" |
||||
} |
||||
}, |
||||
"array-flatten": { |
||||
"version": "1.1.1", |
||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", |
||||
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" |
||||
}, |
||||
"body-parser": { |
||||
"version": "1.19.0", |
||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", |
||||
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", |
||||
"requires": { |
||||
"bytes": "3.1.0", |
||||
"content-type": "~1.0.4", |
||||
"debug": "2.6.9", |
||||
"depd": "~1.1.2", |
||||
"http-errors": "1.7.2", |
||||
"iconv-lite": "0.4.24", |
||||
"on-finished": "~2.3.0", |
||||
"qs": "6.7.0", |
||||
"raw-body": "2.4.0", |
||||
"type-is": "~1.6.17" |
||||
} |
||||
}, |
||||
"bytes": { |
||||
"version": "3.1.0", |
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", |
||||
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" |
||||
}, |
||||
"content-disposition": { |
||||
"version": "0.5.3", |
||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", |
||||
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", |
||||
"requires": { |
||||
"safe-buffer": "5.1.2" |
||||
} |
||||
}, |
||||
"content-type": { |
||||
"version": "1.0.4", |
||||
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", |
||||
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" |
||||
}, |
||||
"cookie": { |
||||
"version": "0.4.0", |
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", |
||||
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" |
||||
}, |
||||
"cookie-signature": { |
||||
"version": "1.0.6", |
||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", |
||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" |
||||
}, |
||||
"cors": { |
||||
"version": "2.8.5", |
||||
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", |
||||
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", |
||||
"requires": { |
||||
"object-assign": "^4", |
||||
"vary": "^1" |
||||
} |
||||
}, |
||||
"debug": { |
||||
"version": "2.6.9", |
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", |
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", |
||||
"requires": { |
||||
"ms": "2.0.0" |
||||
} |
||||
}, |
||||
"depd": { |
||||
"version": "1.1.2", |
||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", |
||||
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" |
||||
}, |
||||
"destroy": { |
||||
"version": "1.0.4", |
||||
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", |
||||
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" |
||||
}, |
||||
"ee-first": { |
||||
"version": "1.1.1", |
||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", |
||||
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" |
||||
}, |
||||
"encodeurl": { |
||||
"version": "1.0.2", |
||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", |
||||
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" |
||||
}, |
||||
"escape-html": { |
||||
"version": "1.0.3", |
||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", |
||||
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" |
||||
}, |
||||
"etag": { |
||||
"version": "1.8.1", |
||||
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", |
||||
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" |
||||
}, |
||||
"express": { |
||||
"version": "4.17.1", |
||||
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", |
||||
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", |
||||
"requires": { |
||||
"accepts": "~1.3.7", |
||||
"array-flatten": "1.1.1", |
||||
"body-parser": "1.19.0", |
||||
"content-disposition": "0.5.3", |
||||
"content-type": "~1.0.4", |
||||
"cookie": "0.4.0", |
||||
"cookie-signature": "1.0.6", |
||||
"debug": "2.6.9", |
||||
"depd": "~1.1.2", |
||||
"encodeurl": "~1.0.2", |
||||
"escape-html": "~1.0.3", |
||||
"etag": "~1.8.1", |
||||
"finalhandler": "~1.1.2", |
||||
"fresh": "0.5.2", |
||||
"merge-descriptors": "1.0.1", |
||||
"methods": "~1.1.2", |
||||
"on-finished": "~2.3.0", |
||||
"parseurl": "~1.3.3", |
||||
"path-to-regexp": "0.1.7", |
||||
"proxy-addr": "~2.0.5", |
||||
"qs": "6.7.0", |
||||
"range-parser": "~1.2.1", |
||||
"safe-buffer": "5.1.2", |
||||
"send": "0.17.1", |
||||
"serve-static": "1.14.1", |
||||
"setprototypeof": "1.1.1", |
||||
"statuses": "~1.5.0", |
||||
"type-is": "~1.6.18", |
||||
"utils-merge": "1.0.1", |
||||
"vary": "~1.1.2" |
||||
} |
||||
}, |
||||
"finalhandler": { |
||||
"version": "1.1.2", |
||||
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", |
||||
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", |
||||
"requires": { |
||||
"debug": "2.6.9", |
||||
"encodeurl": "~1.0.2", |
||||
"escape-html": "~1.0.3", |
||||
"on-finished": "~2.3.0", |
||||
"parseurl": "~1.3.3", |
||||
"statuses": "~1.5.0", |
||||
"unpipe": "~1.0.0" |
||||
} |
||||
}, |
||||
"forwarded": { |
||||
"version": "0.1.2", |
||||
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", |
||||
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" |
||||
}, |
||||
"fresh": { |
||||
"version": "0.5.2", |
||||
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", |
||||
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" |
||||
}, |
||||
"http-errors": { |
||||
"version": "1.7.2", |
||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", |
||||
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", |
||||
"requires": { |
||||
"depd": "~1.1.2", |
||||
"inherits": "2.0.3", |
||||
"setprototypeof": "1.1.1", |
||||
"statuses": ">= 1.5.0 < 2", |
||||
"toidentifier": "1.0.0" |
||||
} |
||||
}, |
||||
"iconv-lite": { |
||||
"version": "0.4.24", |
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", |
||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", |
||||
"requires": { |
||||
"safer-buffer": ">= 2.1.2 < 3" |
||||
} |
||||
}, |
||||
"inherits": { |
||||
"version": "2.0.3", |
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", |
||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" |
||||
}, |
||||
"ipaddr.js": { |
||||
"version": "1.9.1", |
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", |
||||
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" |
||||
}, |
||||
"media-typer": { |
||||
"version": "0.3.0", |
||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", |
||||
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" |
||||
}, |
||||
"merge-descriptors": { |
||||
"version": "1.0.1", |
||||
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", |
||||
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" |
||||
}, |
||||
"methods": { |
||||
"version": "1.1.2", |
||||
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", |
||||
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" |
||||
}, |
||||
"mime": { |
||||
"version": "1.6.0", |
||||
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", |
||||
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" |
||||
}, |
||||
"mime-db": { |
||||
"version": "1.43.0", |
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", |
||||
"integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" |
||||
}, |
||||
"mime-types": { |
||||
"version": "2.1.26", |
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", |
||||
"integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", |
||||
"requires": { |
||||
"mime-db": "1.43.0" |
||||
} |
||||
}, |
||||
"ms": { |
||||
"version": "2.0.0", |
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", |
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" |
||||
}, |
||||
"negotiator": { |
||||
"version": "0.6.2", |
||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", |
||||
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" |
||||
}, |
||||
"object-assign": { |
||||
"version": "4.1.1", |
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", |
||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" |
||||
}, |
||||
"on-finished": { |
||||
"version": "2.3.0", |
||||
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", |
||||
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", |
||||
"requires": { |
||||
"ee-first": "1.1.1" |
||||
} |
||||
}, |
||||
"parseurl": { |
||||
"version": "1.3.3", |
||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", |
||||
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" |
||||
}, |
||||
"path-to-regexp": { |
||||
"version": "0.1.7", |
||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", |
||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" |
||||
}, |
||||
"proxy-addr": { |
||||
"version": "2.0.6", |
||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", |
||||
"integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", |
||||
"requires": { |
||||
"forwarded": "~0.1.2", |
||||
"ipaddr.js": "1.9.1" |
||||
} |
||||
}, |
||||
"qs": { |
||||
"version": "6.7.0", |
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", |
||||
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" |
||||
}, |
||||
"range-parser": { |
||||
"version": "1.2.1", |
||||
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", |
||||
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" |
||||
}, |
||||
"raw-body": { |
||||
"version": "2.4.0", |
||||
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", |
||||
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", |
||||
"requires": { |
||||
"bytes": "3.1.0", |
||||
"http-errors": "1.7.2", |
||||
"iconv-lite": "0.4.24", |
||||
"unpipe": "1.0.0" |
||||
} |
||||
}, |
||||
"safe-buffer": { |
||||
"version": "5.1.2", |
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", |
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" |
||||
}, |
||||
"safer-buffer": { |
||||
"version": "2.1.2", |
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", |
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" |
||||
}, |
||||
"send": { |
||||
"version": "0.17.1", |
||||
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", |
||||
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", |
||||
"requires": { |
||||
"debug": "2.6.9", |
||||
"depd": "~1.1.2", |
||||
"destroy": "~1.0.4", |
||||
"encodeurl": "~1.0.2", |
||||
"escape-html": "~1.0.3", |
||||
"etag": "~1.8.1", |
||||
"fresh": "0.5.2", |
||||
"http-errors": "~1.7.2", |
||||
"mime": "1.6.0", |
||||
"ms": "2.1.1", |
||||
"on-finished": "~2.3.0", |
||||
"range-parser": "~1.2.1", |
||||
"statuses": "~1.5.0" |
||||
}, |
||||
"dependencies": { |
||||
"ms": { |
||||
"version": "2.1.1", |
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", |
||||
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" |
||||
} |
||||
} |
||||
}, |
||||
"serve-static": { |
||||
"version": "1.14.1", |
||||
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", |
||||
"integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", |
||||
"requires": { |
||||
"encodeurl": "~1.0.2", |
||||
"escape-html": "~1.0.3", |
||||
"parseurl": "~1.3.3", |
||||
"send": "0.17.1" |
||||
} |
||||
}, |
||||
"setprototypeof": { |
||||
"version": "1.1.1", |
||||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", |
||||
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" |
||||
}, |
||||
"statuses": { |
||||
"version": "1.5.0", |
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", |
||||
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" |
||||
}, |
||||
"toidentifier": { |
||||
"version": "1.0.0", |
||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", |
||||
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" |
||||
}, |
||||
"type-is": { |
||||
"version": "1.6.18", |
||||
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", |
||||
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", |
||||
"requires": { |
||||
"media-typer": "0.3.0", |
||||
"mime-types": "~2.1.24" |
||||
} |
||||
}, |
||||
"unpipe": { |
||||
"version": "1.0.0", |
||||
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", |
||||
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" |
||||
}, |
||||
"utils-merge": { |
||||
"version": "1.0.1", |
||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", |
||||
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" |
||||
}, |
||||
"vary": { |
||||
"version": "1.1.2", |
||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", |
||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,17 @@ |
||||
{ |
||||
"name": "server", |
||||
"version": "1.0.0", |
||||
"description": "The API for the website", |
||||
"main": "index.js", |
||||
"scripts": { |
||||
"start": "node ./index.js", |
||||
"dev": "nodemon server/index.js" |
||||
}, |
||||
"keywords": [], |
||||
"author": "", |
||||
"license": "ISC", |
||||
"dependencies": { |
||||
"cors": "^2.8.5", |
||||
"express": "^4.17.1" |
||||
} |
||||
} |
@ -0,0 +1 @@ |
||||
*.json |
@ -0,0 +1,6 @@ |
||||
All the posts will be in here seperate in JSON format |
||||
|
||||
post |
||||
- title |
||||
- date |
||||
- content |
@ -0,0 +1,61 @@ |
||||
const express = require('express') |
||||
const fs = require('fs') |
||||
|
||||
const router = express.Router() |
||||
|
||||
const posts_dir = 'posts/' |
||||
|
||||
if (!fs.existsSync(posts_dir)) throw Error(`Missing ${posts_dir}`) |
||||
|
||||
let posts = readPosts(); |
||||
|
||||
setInterval(() => posts = readPosts(), 1000 * 60 * 60) |
||||
|
||||
function readPostsDelayed() { |
||||
return new Promise(setTimeout, 1000).then(posts = readPosts()) |
||||
} |
||||
|
||||
function readPosts() { |
||||
console.warn("reading all posts") |
||||
const files = fs.readdirSync(posts_dir) |
||||
|
||||
if (files.length === 0) throw Error(`Could not find posts in ${posts_dir}`) |
||||
|
||||
return files.filter(file_name => file_name.endsWith('.json')) |
||||
.map(file_name => `${posts_dir}${file_name}`) |
||||
.map(readJSONAsObject) |
||||
} |
||||
|
||||
function readJSONAsObject(filename) { |
||||
return JSON.parse(fs.readFileSync(filename, 'utf8')) |
||||
} |
||||
|
||||
function notFoundResponse(res) { |
||||
res.status(404).send('Sorry, can not find that') |
||||
} |
||||
|
||||
router.get('/', async (req, res) => { |
||||
if (req.query.sort === '-1' || req.query.sort === '1') { |
||||
const posts_sorted = posts.sort((a, b) => { |
||||
return new Date(a.date).getTime() - new Date(b.date).getTime() |
||||
}) |
||||
|
||||
if (req.query.sort === '1') res.send(posts_sorted)
|
||||
else res.send(posts_sorted.reverse()) |
||||
} |
||||
}) |
||||
|
||||
router.get('/:id', async (req, res) => { |
||||
const re = /[0-9A-Fa-f]{24}/g |
||||
|
||||
if (!re.test(req.params.id)) { |
||||
notFoundResponse(res) |
||||
return |
||||
} |
||||
const results = posts.filter(post => post._id === req.params.id) |
||||
|
||||
if (!results.length) notFoundResponse(res)
|
||||
else res.send(results[0]) |
||||
}) |
||||
|
||||
module.exports = router |
@ -1,8 +0,0 @@ |
||||
const assert = require('chai').assert; |
||||
const app = require('../app'); |
||||
|
||||
describe('App', () => { |
||||
it('should greet with Hello World!', () => { |
||||
assert.equal(app(), 'Hello World!'); |
||||
}); |
||||
}); |
Loading…
Reference in new issue