Browse Source

New Node build system for better build configs

master
Mobius K 12 months ago
parent
commit
d899e4a055
  1. 5
      .eslintrc.js
  2. 114
      Makefile
  3. 1
      README.md
  4. 2
      ansible
  5. 2
      bluetooth-class
  6. 281
      cli.js
  7. 2
      mobicraft
  8. 2
      ms-cloud
  9. 589
      package-lock.json
  10. 7
      package.json
  11. 2
      pixelle
  12. 2
      pomodoro
  13. 2
      portfolio
  14. 5
      rollup.config.js
  15. 2
      shared/config/build.dev.js
  16. 12
      shared/config/build.js
  17. 10
      shared/config/build.primary.js
  18. 10
      shared/config/build.secondary.js

5
.eslintrc.js

@ -19,7 +19,10 @@ module.exports = {
"rules": {
"indent": [
"error",
"tab"
"tab",
{
"SwitchCase": 1
}
],
"linebreak-style": [
"error",

114
Makefile

@ -1,114 +0,0 @@
# Command line variable building with check for a project flag specified
build = $(if $(project),/srv/$(project), $(error Provide project name))
# When this Makefile run was called
date = $(shell date +%s)
# Directory for public assets to be placed in for a given build
public = $(build)/public
# How to wait for file-system events
inotifywait = inotifywait -qr -e modify -e attrib -e move -e create -e delete
# Transparently calls other make targets without cluttering up the console
subTask = @make --no-print-directory
# Clean build directory to prepare for new files
clean:
rm -rf $(public)/*
# Developing client and server -----------------------------------------------
# Start a development session with auto-updates
develop: clean
$(subTask) flags="--watch" project=$(project) -j assets css html js browserSync server
# Copy shared and project-level assets to build folder
assets:
rsync -a shared/assets/* shared/assets/.well-known $(project)/assets/* $(public)
$(if $(findstring --watch, $(flags)), @while $(inotifywait) shared/assets $(project)/assets; do \
make -s flags='' assets; \
done)
# Compile style sheets
css:
npx sass $(flags) $(cssFlags) -I node_modules $(project)/styles/index.scss $(public)/$(project).css
# Pre-process HTML files
# Note that the build.js script is over-ridden by QA and production release builds in $(htmlFlags)
html:
npx pug --basedir ./ --silent $(flags) --obj shared/config/build.js $(htmlFlags) $(project)/html/routes --out $(public)
# Compile TypeScript
js:
npx rollup --config $(flags) $(jsFlags) --environment project:$(project)
# Syncing web browser file server
browserSync:
npx browser-sync start --no-open --no-online --proxy $(project).local --watch --files $(public)/**/*
# Start a server development session with auto-updates
server:
@if [ -f $(project)/server/main/main.go ]; then \
while true; do \
go run ./$(project)/server/main & PID=$$!; \
$(inotifywait) $(project)/server shared/server; \
pkill -P $$PID; \
done \
fi
# Run server with debug enabled, waiting for debug client to attach
server-debug:
dlv --listen localhost:2345 --headless --api-version=2 debug ./$(project)/server/main
# Releases --------------------------------------------------------------------
# Make sure an environment was supplied on the command line
check-environment:
$(if $(environment),, $(error Provide environment 'primary' or 'secondary'))
# Create a build for release
build: check-environment clean
# Assets, SCSS to CSS, Pug to HTML, and TS to JS
$(subTask) \
cssFlags="--no-source-map" \
jsFlags="--environment build:$(environment)" \
htmlFlags="--obj shared/config/build.$(environment).js --no-debug" \
project=$(project) assets css html js
# Minimize CSS output (except for UIKit SVG icon strokes)
npx purifycss $(public)/$(project).css $(public)/**/*.html $(public)/**/*.js --info --min --out $(public)/$(project).css \
--whitelist "*lightbox*" --whitelist "*stroke*"
# Set semi-unique time-based key where desired
find $(public) -type f -exec grep -Iq . {} \; -exec sed -i "s/replaceAtBuildWithDate/$(date)/g" {} \;
# Set more-unique content-based key where desired
cd $(public) && for file in `find . -type f -printf "%P "`; do \
hash="`md5sum $${file} | head -c 16)`" ; \
grep -rlI $$file . | xargs -r sed -i -r "s|$$file\?key=replaceAtBuildWithHash|$$file\?key=$$hash|g" ; \
done
# Build a server executable if one exists
if [ -f $(project)/server/main/main.go ]; then \
go build -o $(build)/server $(project)/server/main/main.go; \
fi
# Dry-run of transferring build to remote servers
transfer-check:
$(subTask) flags="n" transfer
# Transfer builds to remote servers
transfer: check-environment
rsync -avzO$(flags) --delete --exclude 'analytics.html' --chmod=D775,F664 --chown=:$(project) $(public)/ $(environment):$(build)/public/
# Provisioning ----------------------------------------------------------------
# Dry run provisioning
provision-check:
$(subTask) flags="-C" provision
# Run Ansible infrastructure provision
provision:
cd ansible && ansible-playbook $(flags) -K -i hosts.ini site.yml

1
README.md

@ -10,7 +10,6 @@ Necessary development tools:
- [Pug for HTML template engine](https://pugjs.org)
- [Sass for CSS extensions](https://sass-lang.com)
- [Go for server APIs](https://golang.org)
- [Make for common task runs](https://www.gnu.org/software/make)
Good links to keep at your disposal:
- [UIkit framework](https://getuikit.com)

2
ansible

@ -1 +1 @@
Subproject commit 9d3039572708a91a5a24eeacea8b75ca12aff130
Subproject commit f50c8c4bc910185adce4e592523fc04c8c4ed76a

2
bluetooth-class

@ -1 +1 @@
Subproject commit dbfaa8bae7039719987f64ff7370f4c0f5dfd28a
Subproject commit 2b8bf76741ddf1b9c2ef1e21dc8a3bdadf76b6d8

281
cli.js

@ -0,0 +1,281 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const bSync = require("browser-sync").create();
const chokidar = require("chokidar");
const concurrently = require("concurrently");
const fs = require("fs");
const pug = require("pug");
const purifycss = require("purify-css");
const sass = require("sass");
const { execSync } = require("child_process");
const { exit } = require("process");
// Projects that this script supports
const projects = [
"bluetooth-class",
"mobicraft",
"ms-cloud",
"pixelle",
"pomodoro",
"portfolio",
];
// Target environments that this script supports
const environments = [
"dev",
"secondary",
"primary",
];
// Check for valid project env values before running any task
const project = process.env.project;
if ( ! projects.includes(project)) {
scriptFailure(`Valid "project" flag not found: ${projects}`);
}
const environment = process.env.env;
if ( ! environments.includes(environment)) {
scriptFailure(`Valid "env" flag not found: ${environments}`);
}
// Useful script values
const buildDirectory = `/srv/${project}`;
const publicDirectory = `${buildDirectory}/public`;
const timestamp = Date.now();
const watchOptions = {ignoreInitial: true};
const rsyncFlags = `-aizO --exclude 'analytics.html' --chmod=D775,F664 --chown=:${project}`;
// Dynamic build values based on target environment
let options = {
basedir: "./",
...require(`./shared/config/build.${environment}.js`)
};
try {
options = {
...options,
...require(`./${project}/config/build.all.js`),
...require(`./${project}/config/build.${environment}.js`)
};
} catch (e) {
// We don't really care if the project doesn't have custom build configs
}
// Check all of our invocation arguments for recognized tasks to run
// Ignore the first two arguments, as that is the Node + script paths
const args = process.argv.slice(2);
args.forEach(arg => {
switch(arg) {
case "clean": clean(); break;
case "develop": develop(); break;
case "assets": assets(); break;
case "assetsWatch": assets(true); break;
case "css": css(); break;
case "cssWatch": css(true); break;
case "html": html(); break;
case "htmlWatch": html(true); break;
case "js": js(); break;
case "jsWatch": js("--watch"); break;
case "browserSync": browserSync(); break;
case "serverBuild": serverBuild(); break;
case "serverRun": serverRun(); break;
case "serverDebug": serverDebug(); break;
case "build": build(); break;
case "transferCheck": transfer("-n"); break;
case "transfer": transfer(); break;
default:
return scriptFailure(`Unknown argument: ${arg}`);
}
});
// Clean public build directory to prepare for a new build
function clean() {
console.log(`Cleaning out ${publicDirectory}`);
execSync(`rm -rf ${publicDirectory}/*`);
}
// Start a development session with auto-updates
function develop() {
concurrently([
{ command: "npm:start assetsWatch", name: "Assets" },
{ command: "npm:start cssWatch", name: "CSS " },
{ command: "npm:start htmlWatch", name: "HTML " },
{ command: "npm:start jsWatch", name: "JS " },
{ command: "npm:start browserSync", name: "Sync " },
{ command: "npm:start serverRun", name: "Server" },
]);
}
// Copy shared and project assets to public build directory
function assets(watchForChanges = false) {
console.log(`Syncing assets ${watchForChanges ? "(watching)" : ""}`);
const assetDirectories = `shared/assets/ shared/assets/.well-known ${project}/assets/`;
const rsyncOutput = execSync(`rsync ${rsyncFlags} ${assetDirectories} ${publicDirectory}`).toString();
console.log("\t" + rsyncOutput.replace(/\n/g, "\n\t"));
if (watchForChanges) {
chokidar.watch(["shared/assets", `${project}/assets`], watchOptions)
.on("all", (event, path) => assets(`${event} ${path}`));
}
}
// Compile style sheets
function css(watchForChanges = false) {
console.log(`Compiling styles ${watchForChanges ? "(watching)" : ""}`);
fs.writeFileSync(`${publicDirectory}/${project}.css`, sass.renderSync({
file: `${project}/styles/index.scss`,
includePaths: ["node_modules"],
}).css);
if (watchForChanges) {
chokidar.watch(`${project}/styles`, watchOptions)
.on("all", (event, path) => css(`${event} ${path}`));
}
}
// Compile markup
function html(watchForChanges = false) {
console.log(`Compiling HTML ${watchForChanges ? "(watching)" : ""}`);
const dir = `${project}/html/routes/`;
execSync(`find ${dir} -type f`)
.toString()
.split("\n")
.filter(route => route.length > 0)
.forEach(route => {
const html = pug.renderFile(route, options);
route = route.replace(dir, "").replace(".pug", ".html");
const outputDir = route.split("/").slice(0, -1).join("/");
execSync(`mkdir -p ${publicDirectory}/${outputDir}`);
fs.writeFileSync(`${publicDirectory}/${route}`, html);
});
if (watchForChanges) {
chokidar.watch([`${project}/config/build.all.js`, `${project}/html`], watchOptions)
.on("all", (event, path) => html(`${event} ${path}`));
}
}
// Compile scripts
function js(flags = "") {
console.log(`Compiling scripts ${flags ? "(" + flags + ")" : ""}`);
execSync(`npx rollup --config ${flags}`);
}
// Syncing server proxy to auto-reload on changes
function browserSync() {
console.log("Running BrowserSync server proxy");
bSync.init({
files: `${publicDirectory}/**/*`,
online: false,
open: false,
proxy: `${project}.local`,
watch: true,
});
}
// Build a server executable if one exists
function serverBuild() {
console.log("Server executables currently not supported");
/*
if [ -f $(project)/server/main/main.go ]; then \
go build -o $(build)/server $(project)/server/main/main.go; \
fi
*/
}
// Start a server executable (not to be confused with Nginx web server)
function serverRun() {
console.log("Server executables currently not supported");
/*
@if [ -f $(project)/server/main/main.go ]; then \
while true; do \
go run ./$(project)/server/main & PID=$$!; \
$(inotifywait) $(project)/server shared/server; \
pkill -P $$PID; \
done \
fi
*/
}
// Wait for debug client attachment and then run server
function serverDebug() {
execSync(`dlv --listen localhost:2345 --headless --api-version=2 debug ./${project}/server/main`);
}
// Minimize CSS output (except for UIKit SVG icon strokes)
function minimizeCss() {
console.log("Minimizing CSS");
const cssOutput = `${publicDirectory}/${project}.css`;
purifycss(
[`${publicDirectory}/**/*.html`, `${publicDirectory}/**/*.js`],
[cssOutput],
{
info: true,
minify: true,
output: cssOutput,
whitelist: ["*lightbox*", "*stroke*"],
}
);
}
// Set semi-unique time-based key based on pattern matching
function applyTimestamps() {
console.log("Applying timestamps");
execSync(`\
find ${publicDirectory} -type f -exec grep -Iq . {} \\; \
-exec sed -i "s/replaceAtBuildWithDate/${timestamp}/g" {} \\; \
`);
}
// Set unique content-based key based on pattern matching
function applyHashing() {
console.log("Applying file hashes");
execSync(`\
cd ${publicDirectory} && for file in \`find . -type f -printf "%P "\`; do \
hash="\`md5sum $file | head -c 16)\`" ; \
grep -rlI $file . | xargs -r sed -i -r "s|$file\\?key=replaceAtBuildWithHash|$file?key=$hash|g" ; \
done\
`).toString();
}
// Create a build for release
function build() {
clean();
concurrently([
{ command: "npm:start assets", name: "Assets" },
{ command: "npm:start css", name: "CSS " },
{ command: "npm:start html", name: "HTML " },
{ command: "npm:start js", name: "JS " },
{ command: "npm:start serverBuild", name: "Server" },
], {
killOthers: ["failure"],
}).then(
() => {
minimizeCss();
applyTimestamps();
applyHashing();
},
(failure) => scriptFailure(failure),
);
}
// Transfer builds to remote servers
function transfer(extraFlags = "") {
console.log(`Transferring build: ${project} ${environment}`);
const rsyncOutput = execSync(`rsync ${rsyncFlags} ${extraFlags} -v --delete --exclude 'analytics.html' ${publicDirectory}/ ${environment}:${publicDirectory}`).toString();
console.log("\t" + rsyncOutput.replace(/\n/g, "\n\t"));
}
// Indicates that a task has failed
function scriptFailure(message) {
console.error(message);
exit(1);
}

2
mobicraft

@ -1 +1 @@
Subproject commit 74c93d81d2f8a288aea7ece055449e0f3af0db73
Subproject commit b72c3b24f3c8737866e48834c9c3ae4fbe295c01

2
ms-cloud

@ -1 +1 @@
Subproject commit bd320cb675acd16447c39f99e57020a70749bb81
Subproject commit 7d62777151ca030e24cf4ec6ff0dfa85d2de8ba8

589
package-lock.json

@ -61,6 +61,23 @@
}
}
},
"@babel/parser": {
"version": "7.11.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz",
"integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==",
"dev": true
},
"@babel/types": {
"version": "7.11.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz",
"integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.4",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
},
"@eslint/eslintrc": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz",
@ -265,21 +282,6 @@
}
}
},
"@types/babel-types": {
"version": "7.0.8",
"resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.8.tgz",
"integrity": "sha512-jvu8g4LR7+p6ao30RhTREnEhHxmP4/R9D9/rOR/Kq14FztORty9SKgtOZUNZNMB9CXLxZ54EWu4dArUE8WdTsw==",
"dev": true
},
"@types/babylon": {
"version": "6.16.5",
"resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz",
"integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==",
"dev": true,
"requires": {
"@types/babel-types": "*"
}
},
"@types/color-name": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
@ -505,23 +507,6 @@
"integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==",
"dev": true
},
"acorn-globals": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
"integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
"dev": true,
"requires": {
"acorn": "^4.0.4"
},
"dependencies": {
"acorn": {
"version": "4.0.13",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
"integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
"dev": true
}
}
},
"acorn-jsx": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
@ -546,17 +531,6 @@
"uri-js": "^4.2.2"
}
},
"align-text": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
"dev": true,
"requires": {
"kind-of": "^3.0.2",
"longest": "^1.0.1",
"repeat-string": "^1.5.2"
}
},
"ansi-colors": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
@ -612,6 +586,12 @@
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
"dev": true
},
"assert-never": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
"integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==",
"dev": true
},
"astral-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
@ -678,34 +658,15 @@
}
}
},
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"babel-walk": {
"version": "3.0.0-canary-5",
"resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
"integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
"dev": true,
"requires": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
}
},
"babel-types": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
"integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
"babel-runtime": "^6.26.0",
"esutils": "^2.0.2",
"lodash": "^4.17.4",
"to-fast-properties": "^1.0.3"
"@babel/types": "^7.9.6"
}
},
"babylon": {
"version": "6.18.0",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
},
"backo2": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
@ -888,16 +849,6 @@
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
"center-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
"integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
"dev": true,
"requires": {
"align-text": "^0.1.3",
"lazy-cache": "^1.0.3"
}
},
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
@ -1030,6 +981,125 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"concurrently": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz",
"integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
"date-fns": "^2.0.1",
"lodash": "^4.17.15",
"read-pkg": "^4.0.1",
"rxjs": "^6.5.2",
"spawn-command": "^0.0.2-1",
"supports-color": "^6.1.0",
"tree-kill": "^1.2.2",
"yargs": "^13.3.0"
},
"dependencies": {
"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"
}
},
"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"
}
}
}
},
"parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"dev": true,
"requires": {
"error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
}
},
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"dev": true
},
"read-pkg": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
"integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
"dev": true,
"requires": {
"normalize-package-data": "^2.3.2",
"parse-json": "^4.0.0",
"pify": "^3.0.0"
}
},
"rxjs": {
"version": "6.6.3",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
"integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
},
"supports-color": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
"tslib": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
"integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
"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"
}
}
}
},
"connect": {
"version": "3.6.6",
"resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
@ -1066,15 +1136,13 @@
"dev": true
},
"constantinople": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz",
"integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==",
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
"integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
"dev": true,
"requires": {
"@types/babel-types": "^7.0.0",
"@types/babylon": "^6.16.2",
"babel-types": "^6.26.0",
"babylon": "^6.18.0"
"@babel/parser": "^7.6.0",
"@babel/types": "^7.6.1"
}
},
"convert-source-map": {
@ -1089,12 +1157,6 @@
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
"dev": true
},
"core-js": {
"version": "2.6.11",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
"integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
"dev": true
},
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@ -1118,6 +1180,12 @@
"urix": "^0.1.0"
}
},
"date-fns": {
"version": "2.16.1",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.16.1.tgz",
"integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ==",
"dev": true
},
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@ -2024,21 +2092,13 @@
"dev": true
},
"is-expression": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz",
"integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
"integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
"dev": true,
"requires": {
"acorn": "~4.0.2",
"object-assign": "^4.0.1"
},
"dependencies": {
"acorn": {
"version": "4.0.13",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
"integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
"dev": true
}
"acorn": "^7.1.1",
"object-assign": "^4.1.1"
}
},
"is-extglob": {
@ -2181,6 +2241,12 @@
"esprima": "^4.0.0"
}
},
"json-parse-better-errors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@ -2212,29 +2278,6 @@
"promise": "^7.0.1"
}
},
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
},
"dependencies": {
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
}
}
},
"lazy-cache": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
"integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
"dev": true
},
"lcid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
@ -2326,12 +2369,6 @@
"integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=",
"dev": true
},
"longest": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
"integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
"dev": true
},
"lru-cache": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
@ -2737,141 +2774,127 @@
"dev": true
},
"pug": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz",
"integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug/-/pug-3.0.0.tgz",
"integrity": "sha512-inmsJyFBSHZaiGLaguoFgJGViX0If6AcfcElimvwj9perqjDpUpw79UIEDZbWFmoGVidh08aoE+e8tVkjVJPCw==",
"dev": true,
"requires": {
"pug-code-gen": "^2.0.2",
"pug-filters": "^3.1.1",
"pug-lexer": "^4.1.0",
"pug-linker": "^3.0.6",
"pug-load": "^2.0.12",
"pug-parser": "^5.0.1",
"pug-runtime": "^2.0.5",
"pug-strip-comments": "^1.0.4"
"pug-code-gen": "^3.0.0",
"pug-filters": "^4.0.0",
"pug-lexer": "^5.0.0",
"pug-linker": "^4.0.0",
"pug-load": "^3.0.0",
"pug-parser": "^6.0.0",
"pug-runtime": "^3.0.0",
"pug-strip-comments": "^2.0.0"
}
},
"pug-attrs": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz",
"integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==",
"dev": true,
"requires": {
"constantinople": "^3.0.1",
"js-stringify": "^1.0.1",
"pug-runtime": "^2.0.5"
}
},
"pug-cli": {
"version": "1.0.0-alpha6",
"resolved": "https://registry.npmjs.org/pug-cli/-/pug-cli-1.0.0-alpha6.tgz",
"integrity": "sha1-HKU56krA67ac5KroSu7V1k/+ZQE=",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
"integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
"dev": true,
"requires": {
"chalk": "^1.0.0",
"commander": "^2.8.1",
"mkdirp": "^0.5.1",
"pug": "^2.0.0-alpha7"
"constantinople": "^4.0.1",
"js-stringify": "^1.0.2",
"pug-runtime": "^3.0.0"
}
},
"pug-code-gen": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz",
"integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==",
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.1.tgz",
"integrity": "sha512-xJIGvmXTQlkJllq6hqxxjRWcay2F9CU69TuAuiVZgHK0afOhG5txrQOcZyaPHBvSWCU/QQOqEp5XCH94rRZpBQ==",
"dev": true,
"requires": {
"constantinople": "^3.1.2",
"constantinople": "^4.0.1",
"doctypes": "^1.1.0",
"js-stringify": "^1.0.1",
"pug-attrs": "^2.0.4",
"pug-error": "^1.3.3",
"pug-runtime": "^2.0.5",
"void-elements": "^2.0.1",
"with": "^5.0.0"
"js-stringify": "^1.0.2",
"pug-attrs": "^3.0.0",
"pug-error": "^2.0.0",
"pug-runtime": "^3.0.0",
"void-elements": "^3.1.0",
"with": "^7.0.0"
}
},
"pug-error": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz",
"integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
"integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==",
"dev": true
},
"pug-filters": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz",
"integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
"integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
"dev": true,
"requires": {
"clean-css": "^4.1.11",
"constantinople": "^3.0.1",
"constantinople": "^4.0.1",
"jstransformer": "1.0.0",
"pug-error": "^1.3.3",
"pug-walk": "^1.1.8",
"resolve": "^1.1.6",
"uglify-js": "^2.6.1"
"pug-error": "^2.0.0",
"pug-walk": "^2.0.0",
"resolve": "^1.15.1"
}
},
"pug-lexer": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz",
"integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==",
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.0.tgz",
"integrity": "sha512-52xMk8nNpuyQ/M2wjZBN5gXQLIylaGkAoTk5Y1pBhVqaopaoj8Z0iVzpbFZAqitL4RHNVDZRnJDsqEYe99Ti0A==",
"dev": true,
"requires": {
"character-parser": "^2.1.1",
"is-expression": "^3.0.0",
"pug-error": "^1.3.3"
"character-parser": "^2.2.0",
"is-expression": "^4.0.0",
"pug-error": "^2.0.0"
}
},
"pug-linker": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz",
"integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
"integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
"dev": true,
"requires": {
"pug-error": "^1.3.3",
"pug-walk": "^1.1.8"
"pug-error": "^2.0.0",
"pug-walk": "^2.0.0"
}
},
"pug-load": {
"version": "2.0.12",
"resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz",
"integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
"integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
"dev": true,
"requires": {
"object-assign": "^4.1.0",
"pug-walk": "^1.1.8"
"object-assign": "^4.1.1",
"pug-walk": "^2.0.0"
}
},
"pug-parser": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz",
"integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==",
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
"integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
"dev": true,
"requires": {
"pug-error": "^1.3.3",
"token-stream": "0.0.1"
"pug-error": "^2.0.0",
"token-stream": "1.0.0"
}
},
"pug-runtime": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz",
"integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.0.tgz",
"integrity": "sha512-GoEPcmQNnaTsePEdVA05bDpY+Op5VLHKayg08AQiqJBWU/yIaywEYv7TetC5dEQS3fzBBoyb2InDcZEg3mPTIA==",
"dev": true
},
"pug-strip-comments": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz",
"integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
"integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
"dev": true,
"requires": {
"pug-error": "^1.3.3"
"pug-error": "^2.0.0"
}
},
"pug-walk": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz",
"integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
"integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==",
"dev": true
},
"punycode": {
@ -3152,24 +3175,12 @@
"picomatch": "^2.2.1"
}
},
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
},
"regexpp": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
"integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
"dev": true
},
"repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
"dev": true
},
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@ -3252,15 +3263,6 @@
"css": "^2.0.0"
}
},
"right-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
"integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
"dev": true,
"requires": {
"align-text": "^0.1.1"
}
},
"rimraf": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
@ -3788,6 +3790,12 @@
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"dev": true
},
"spawn-command": {
"version": "0.0.2-1",
"resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
"integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=",
"dev": true
},
"spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
@ -3955,9 +3963,9 @@
"dev": true
},
"to-fast-properties": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
"integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
"dev": true
},
"to-regex-range": {
@ -3976,9 +3984,15 @@
"dev": true
},
"token-stream": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz",
"integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=",
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
"integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=",
"dev": true
},
"tree-kill": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
"integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
"dev": true
},
"tslib": {
@ -4031,61 +4045,6 @@
"integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==",
"dev": true
},
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
"dev": true,
"requires": {
"source-map": "~0.5.1",
"uglify-to-browserify": "~1.0.0",
"yargs": "~3.10.0"
},
"dependencies": {
"camelcase": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
"integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
"dev": true
},
"cliui": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
"integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
"dev": true,
"requires": {
"center-align": "^0.1.1",
"right-align": "^0.1.1",
"wordwrap": "0.0.2"
}
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
"yargs": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
"integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
"dev": true,
"requires": {
"camelcase": "^1.0.2",
"cliui": "^2.1.0",
"decamelize": "^1.0.0",
"window-size": "0.1.0"
}
}
}
},
"uglify-to-browserify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
"dev": true,
"optional": true
},
"uikit": {
"version": "3.5.7",
"resolved": "https://registry.npmjs.org/uikit/-/uikit-3.5.7.tgz",
@ -4147,9 +4106,9 @@
}
},
"void-elements": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
"integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
"integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=",
"dev": true
},
"which": {
@ -4167,28 +4126,16 @@
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
"window-size": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
"dev": true
},
"with": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz",
"integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=",
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
"integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
"dev": true,
"requires": {
"acorn": "^3.1.0",
"acorn-globals": "^3.0.0"
},
"dependencies": {
"acorn": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
"integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
"dev": true
}
"@babel/parser": "^7.9.6",
"@babel/types": "^7.9.6",
"assert-never": "^1.2.1",
"babel-walk": "3.0.0-canary-5"
}
},
"word-wrap": {
@ -4197,12 +4144,6 @@
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
"wordwrap": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
"integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
"dev": true
},
"wrap-ansi": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",

7
package.json

@ -1,4 +1,7 @@
{
"scripts": {
"start": "node cli.js"
},
"dependencies": {
"@sentry/browser": "^5.24.2",
"uikit": "^3.5.7"
@ -13,8 +16,10 @@
"@typescript-eslint/eslint-plugin": "^4.1.1",
"@typescript-eslint/parser": "^4.1.1",
"browser-sync": "^2.26.12",
"chokidar": "^3.4.2",
"concurrently": "^5.3.0",
"eslint": "^7.9.0",
"pug-cli": "^1.0.0-alpha6",
"pug": "^3.0.0",
"purify-css": "^1.2.5",
"rollup": "^2.27.1",
"rollup-plugin-svg": "^2.0.0",

2
pixelle

@ -1 +1 @@
Subproject commit 206aa1a60fb36ef85133b09a381cc628b91e2b4f
Subproject commit 6244ba43fb51c698f1907f41f62002897ebf435e

2
pomodoro

@ -1 +1 @@
Subproject commit 4887f0fa3d371c3cda9b3286dea51fb9f74736ce
Subproject commit 5af8deacbb70a187c32468855d84ddeaf8486f1a

2
portfolio

@ -1 +1 @@
Subproject commit d600d8a26e39b7a4b9a6772bb1bf5abf6430e5ac
Subproject commit 6818b9275eb6a69f6ae33402c603d523853b9408

5
rollup.config.js

@ -9,9 +9,10 @@ import { terser } from "rollup-plugin-terser";
const scripts = [];
const project = process.env.project;
const env = process.env.env;
// Determining if this is a release build or not
const release = process.env.build != null;
const release = env != "dev";
// If the given input file exists, use Rollup plugins to process it as output file
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
@ -40,7 +41,7 @@ function parse(inputFile, outputFile) {
}),
// Production environments use different build files
release && replace({"/config/build": `/config/build.${process.env.build}`}),
release && replace({"/config/build.dev": `/config/build.${env}`}),
// Importing SVG files as base64
svg(),

2
shared/config/build.dev.js

@ -0,0 +1,2 @@
// Are we building a release?
exports.release = false;

12
shared/config/build.js

@ -1,12 +0,0 @@
// Are we building a release?
exports.release = false;
// Link prefixing for CDN
exports.mscloudCDN = function (link) {
return link;
};
exports.pixelleCDN = function (link) {
return link;
};

10
shared/config/build.primary.js

@ -1,12 +1,2 @@
// Are we building a release?
exports.release = true;
// Link prefixing for CDNs
exports.mscloudCDN = function (link) {
return `https://cdn.mscloud.art${link}`;
};
exports.pixelleCDN = function (link) {
return `https://pixelle.b-cdn.net${link}`;
};

10
shared/config/build.secondary.js

@ -1,12 +1,2 @@
// Are we building a release?
exports.release = true;
// Link prefixing for CDNs
exports.mscloudCDN = function (link) {
return link;
};
exports.pixelleCDN = function (link) {
return link;
};
Loading…
Cancel
Save