massive code cleanup + replaced emojione with twemoji
This commit is contained in:
parent
6e39b056c3
commit
e7b9836df6
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,5 +1,4 @@
|
||||
/node_modules/
|
||||
/dist/
|
||||
/lib/
|
||||
/app/
|
||||
/client.config.toml
|
||||
/webirc.data.json
|
||||
|
@ -7,7 +7,7 @@ This application requires [node.js](https://nodejs.org/) to be installed.
|
||||
1. Install the dependencies `npm install`
|
||||
2. Copy the configuration `cp client.config.example.toml client.config.toml`
|
||||
3. Build the project using `npm run build`
|
||||
4. Run the server `./teemant.js`
|
||||
4. Run the server `npm start`
|
||||
|
||||
The client will be accessible at http://localhost:9000/
|
||||
|
||||
|
8
index.js
Executable file
8
index.js
Executable file
@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env node
|
||||
const path = require('path')
|
||||
|
||||
try {
|
||||
require(path.join(__dirname, 'app'))
|
||||
} catch (e) {
|
||||
console.error('Please build the application before running.')
|
||||
}
|
611
package-lock.json
generated
611
package-lock.json
generated
@ -1055,6 +1055,12 @@
|
||||
"integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
|
||||
"dev": true
|
||||
},
|
||||
"amdefine": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
|
||||
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-align": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
|
||||
@ -1149,6 +1155,21 @@
|
||||
"es-abstract": "^1.7.0"
|
||||
}
|
||||
},
|
||||
"array-union": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
|
||||
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"array-uniq": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"array-uniq": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
|
||||
"integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
|
||||
"dev": true
|
||||
},
|
||||
"array-unique": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
|
||||
@ -1910,12 +1931,29 @@
|
||||
"integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
|
||||
"dev": true
|
||||
},
|
||||
"cliui": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
|
||||
"integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"string-width": "^2.1.1",
|
||||
"strip-ansi": "^4.0.0",
|
||||
"wrap-ansi": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"clone": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
||||
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
|
||||
"dev": true
|
||||
},
|
||||
"code-point-at": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
||||
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
|
||||
"dev": true
|
||||
},
|
||||
"collection-visit": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
|
||||
@ -1986,6 +2024,76 @@
|
||||
"typedarray": "^0.0.6"
|
||||
}
|
||||
},
|
||||
"concurrently": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-4.1.0.tgz",
|
||||
"integrity": "sha512-pwzXCE7qtOB346LyO9eFWpkFJVO3JQZ/qU/feGeaAHiX1M3Rw3zgXKc5cZ8vSH5DGygkjzLFDzA/pwoQDkRNGg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "^2.4.1",
|
||||
"date-fns": "^1.23.0",
|
||||
"lodash": "^4.17.10",
|
||||
"read-pkg": "^4.0.1",
|
||||
"rxjs": "^6.3.3",
|
||||
"spawn-command": "^0.0.2-1",
|
||||
"supports-color": "^4.5.0",
|
||||
"tree-kill": "^1.1.0",
|
||||
"yargs": "^12.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"has-flag": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
|
||||
"integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
|
||||
"dev": true
|
||||
},
|
||||
"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.3.3",
|
||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
|
||||
"integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tslib": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
|
||||
"integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-flag": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"configstore": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
|
||||
@ -2070,6 +2178,127 @@
|
||||
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
|
||||
"dev": true
|
||||
},
|
||||
"copy-webpack-plugin": {
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
|
||||
"integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cacache": "^10.0.4",
|
||||
"find-cache-dir": "^1.0.0",
|
||||
"globby": "^7.1.1",
|
||||
"is-glob": "^4.0.0",
|
||||
"loader-utils": "^1.1.0",
|
||||
"minimatch": "^3.0.4",
|
||||
"p-limit": "^1.0.0",
|
||||
"serialize-javascript": "^1.4.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"cacache": {
|
||||
"version": "10.0.4",
|
||||
"resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
|
||||
"integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bluebird": "^3.5.1",
|
||||
"chownr": "^1.0.1",
|
||||
"glob": "^7.1.2",
|
||||
"graceful-fs": "^4.1.11",
|
||||
"lru-cache": "^4.1.1",
|
||||
"mississippi": "^2.0.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"move-concurrently": "^1.0.1",
|
||||
"promise-inflight": "^1.0.1",
|
||||
"rimraf": "^2.6.2",
|
||||
"ssri": "^5.2.4",
|
||||
"unique-filename": "^1.1.0",
|
||||
"y18n": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"find-cache-dir": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
|
||||
"integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"commondir": "^1.0.1",
|
||||
"make-dir": "^1.0.0",
|
||||
"pkg-dir": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"find-up": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
|
||||
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"locate-path": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"lru-cache": {
|
||||
"version": "4.1.5",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
|
||||
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"pseudomap": "^1.0.2",
|
||||
"yallist": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"mississippi": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
|
||||
"integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"concat-stream": "^1.5.0",
|
||||
"duplexify": "^3.4.2",
|
||||
"end-of-stream": "^1.1.0",
|
||||
"flush-write-stream": "^1.0.0",
|
||||
"from2": "^2.1.0",
|
||||
"parallel-transform": "^1.1.0",
|
||||
"pump": "^2.0.1",
|
||||
"pumpify": "^1.3.3",
|
||||
"stream-each": "^1.1.0",
|
||||
"through2": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"pkg-dir": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
|
||||
"integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"find-up": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"pump": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
|
||||
"integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"end-of-stream": "^1.1.0",
|
||||
"once": "^1.3.1"
|
||||
}
|
||||
},
|
||||
"ssri": {
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
|
||||
"integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"safe-buffer": "^5.1.1"
|
||||
}
|
||||
},
|
||||
"yallist": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
|
||||
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
@ -2215,6 +2444,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"css-parse": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
|
||||
"integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=",
|
||||
"dev": true
|
||||
},
|
||||
"css-select": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
|
||||
@ -2308,6 +2543,12 @@
|
||||
"es5-ext": "^0.10.9"
|
||||
}
|
||||
},
|
||||
"date-fns": {
|
||||
"version": "1.30.1",
|
||||
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
|
||||
"integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==",
|
||||
"dev": true
|
||||
},
|
||||
"date-now": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
|
||||
@ -2491,6 +2732,32 @@
|
||||
"randombytes": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"dir-glob": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.0.tgz",
|
||||
"integrity": "sha512-YqrO+bduKFqPgspvpjDAaKk0qhmvY+SY7NjIRljCDAy6CX7Ft65irIduHbrYXhy+BxJnYKjWuREw6X42w9/+DQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"path-type": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"path-type": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
|
||||
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"pify": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"pify": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
|
||||
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"doctrine": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
|
||||
@ -4098,6 +4365,12 @@
|
||||
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
|
||||
"dev": true
|
||||
},
|
||||
"get-caller-file": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
|
||||
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
|
||||
"dev": true
|
||||
},
|
||||
"get-stdin": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
|
||||
@ -4166,6 +4439,40 @@
|
||||
"integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==",
|
||||
"dev": true
|
||||
},
|
||||
"globby": {
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
|
||||
"integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"array-union": "^1.0.1",
|
||||
"dir-glob": "^2.0.0",
|
||||
"glob": "^7.1.2",
|
||||
"ignore": "^3.3.5",
|
||||
"pify": "^3.0.0",
|
||||
"slash": "^1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ignore": {
|
||||
"version": "3.3.10",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
|
||||
"integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
|
||||
"dev": true
|
||||
},
|
||||
"pify": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
|
||||
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
|
||||
"dev": true
|
||||
},
|
||||
"slash": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
|
||||
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"got": {
|
||||
"version": "6.7.1",
|
||||
"resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
|
||||
@ -4609,6 +4916,12 @@
|
||||
"loose-envify": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"invert-kv": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
|
||||
"integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
|
||||
"dev": true
|
||||
},
|
||||
"ipaddr.js": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
|
||||
@ -4993,6 +5306,15 @@
|
||||
"package-json": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"lcid": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
|
||||
"integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"invert-kv": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"levn": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
||||
@ -5161,6 +5483,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"map-age-cleaner": {
|
||||
"version": "0.1.3",
|
||||
"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
|
||||
"integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"p-defer": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"map-cache": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
|
||||
@ -5204,6 +5535,17 @@
|
||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
|
||||
},
|
||||
"mem": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz",
|
||||
"integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"map-age-cleaner": "^0.1.1",
|
||||
"mimic-fn": "^1.0.0",
|
||||
"p-is-promise": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"memory-fs": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
|
||||
@ -5659,6 +6001,12 @@
|
||||
"boolbase": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"number-is-nan": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
|
||||
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
|
||||
"dev": true
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
|
||||
@ -5828,6 +6176,43 @@
|
||||
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
|
||||
"dev": true
|
||||
},
|
||||
"os-locale": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
|
||||
"integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"execa": "^1.0.0",
|
||||
"lcid": "^2.0.0",
|
||||
"mem": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"execa": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
|
||||
"integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cross-spawn": "^6.0.0",
|
||||
"get-stream": "^4.0.0",
|
||||
"is-stream": "^1.1.0",
|
||||
"npm-run-path": "^2.0.0",
|
||||
"p-finally": "^1.0.0",
|
||||
"signal-exit": "^3.0.0",
|
||||
"strip-eof": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"get-stream": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
|
||||
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"pump": "^3.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"os-tmpdir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
||||
@ -5845,12 +6230,24 @@
|
||||
"mkdirp": "^0.5.1"
|
||||
}
|
||||
},
|
||||
"p-defer": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
|
||||
"integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
|
||||
"dev": true
|
||||
},
|
||||
"p-finally": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
|
||||
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
|
||||
"dev": true
|
||||
},
|
||||
"p-is-promise": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
|
||||
"integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
|
||||
"dev": true
|
||||
},
|
||||
"p-limit": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
|
||||
@ -6667,6 +7064,18 @@
|
||||
"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",
|
||||
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
|
||||
"dev": true
|
||||
},
|
||||
"require-main-filename": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
|
||||
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
|
||||
"dev": true
|
||||
},
|
||||
"require-uncached": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
|
||||
@ -6802,6 +7211,12 @@
|
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"sax": {
|
||||
"version": "0.5.8",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
|
||||
"integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=",
|
||||
"dev": true
|
||||
},
|
||||
"schema-utils": {
|
||||
"version": "0.4.7",
|
||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
|
||||
@ -6812,6 +7227,11 @@
|
||||
"ajv-keywords": "^3.1.0"
|
||||
}
|
||||
},
|
||||
"seedrandom": {
|
||||
"version": "2.4.4",
|
||||
"resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz",
|
||||
"integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.6.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
|
||||
@ -6864,6 +7284,12 @@
|
||||
"send": "0.16.2"
|
||||
}
|
||||
},
|
||||
"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
|
||||
},
|
||||
"set-value": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
|
||||
@ -7184,6 +7610,12 @@
|
||||
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
|
||||
"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.0",
|
||||
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
|
||||
@ -7402,6 +7834,45 @@
|
||||
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
|
||||
"dev": true
|
||||
},
|
||||
"stylus": {
|
||||
"version": "0.54.5",
|
||||
"resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz",
|
||||
"integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"css-parse": "1.7.x",
|
||||
"debug": "*",
|
||||
"glob": "7.0.x",
|
||||
"mkdirp": "0.5.x",
|
||||
"sax": "0.5.x",
|
||||
"source-map": "0.1.x"
|
||||
},
|
||||
"dependencies": {
|
||||
"glob": {
|
||||
"version": "7.0.6",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
|
||||
"integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.0.2",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.1.43",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
|
||||
"integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"amdefine": ">=0.0.4"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"stylus-loader": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz",
|
||||
@ -7639,6 +8110,12 @@
|
||||
"integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
|
||||
"dev": true
|
||||
},
|
||||
"tree-kill": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz",
|
||||
"integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==",
|
||||
"dev": true
|
||||
},
|
||||
"trim-newlines": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
|
||||
@ -8171,6 +8648,12 @@
|
||||
"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
|
||||
},
|
||||
"widest-line": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
|
||||
@ -8195,6 +8678,47 @@
|
||||
"errno": "~0.1.7"
|
||||
}
|
||||
},
|
||||
"wrap-ansi": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
|
||||
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"string-width": "^1.0.1",
|
||||
"strip-ansi": "^3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
|
||||
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"number-is-nan": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"string-width": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
||||
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"code-point-at": "^1.0.0",
|
||||
"is-fullwidth-code-point": "^1.0.0",
|
||||
"strip-ansi": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
|
||||
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-regex": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
@ -8264,6 +8788,93 @@
|
||||
"integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
|
||||
"dev": true
|
||||
},
|
||||
"yargs": {
|
||||
"version": "12.0.5",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
|
||||
"integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cliui": "^4.0.0",
|
||||
"decamelize": "^1.2.0",
|
||||
"find-up": "^3.0.0",
|
||||
"get-caller-file": "^1.0.1",
|
||||
"os-locale": "^3.0.0",
|
||||
"require-directory": "^2.1.1",
|
||||
"require-main-filename": "^1.0.1",
|
||||
"set-blocking": "^2.0.0",
|
||||
"string-width": "^2.0.0",
|
||||
"which-module": "^2.0.0",
|
||||
"y18n": "^3.2.1 || ^4.0.0",
|
||||
"yargs-parser": "^11.1.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"decamelize": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
||||
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
|
||||
"dev": true
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"p-limit": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
|
||||
"integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
|
||||
"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.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
|
||||
"integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
|
||||
"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
|
||||
},
|
||||
"yargs-parser": {
|
||||
"version": "11.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
|
||||
"integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"camelcase": "^5.0.0",
|
||||
"decamelize": "^1.2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"yargs-parser": {
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
|
||||
|
18
package.json
18
package.json
@ -2,9 +2,19 @@
|
||||
"name": "teemantirc",
|
||||
"version": "2.0.0",
|
||||
"description": "Web-based IRC client",
|
||||
"main": "teemant.js",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"css": "mkdir -p app/public/style && stylus -o app/public/style src/style/*.styl",
|
||||
"css:watch": "mkdir -p app/public/style && stylus -w -o app/public/style src/style/*.styl",
|
||||
"js": "webpack -p --config webpack.config.js",
|
||||
"js:watch": "webpack -w --mode=development --config webpack.config.js",
|
||||
"app": "babel src/server -d app",
|
||||
"app:watch": "babel src/server -d app -w",
|
||||
"build": "npm run app && npm run js && npm run css",
|
||||
"watch": "concurrently --kill-others \"npm run app:watch\" \"npm run css:watch\" \"npm run js:watch\"",
|
||||
"clean": "rm -rf app",
|
||||
"start": "node index.js"
|
||||
},
|
||||
"keywords": [
|
||||
"irc"
|
||||
@ -13,6 +23,7 @@
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"express": "^4.16.4",
|
||||
"seedrandom": "^2.4.4",
|
||||
"socket.io": "^2.2.0",
|
||||
"toml": "^2.3.5"
|
||||
},
|
||||
@ -25,11 +36,14 @@
|
||||
"@babel/core": "^7.2.2",
|
||||
"@babel/preset-env": "^7.2.3",
|
||||
"babel-loader": "^8.0.5",
|
||||
"concurrently": "^4.1.0",
|
||||
"copy-webpack-plugin": "^4.6.0",
|
||||
"css-loader": "^2.1.0",
|
||||
"file-loader": "^3.0.1",
|
||||
"html-webpack-plugin": "^3.2.0",
|
||||
"mini-css-extract-plugin": "^0.5.0",
|
||||
"standard": "^12.0.1",
|
||||
"stylus": "^0.54.5",
|
||||
"stylus-loader": "^3.0.2",
|
||||
"webpack": "^4.28.1",
|
||||
"webpack-command": "^0.4.2"
|
||||
|
@ -6,11 +6,10 @@
|
||||
|
||||
<title>TeemantIRC</title>
|
||||
|
||||
<script src=//cdnjs.cloudflare.com/ajax/libs/seedrandom/2.3.10/seedrandom.min.js></script>
|
||||
<script src=//cdnjs.cloudflare.com/ajax/libs/emojione/2.2.7/lib/js/emojione.min.js></script>
|
||||
<script src="//twemoji.maxcdn.com/2/twemoji.min.js?11.2"></script>
|
||||
|
||||
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
|
||||
<script type="text/javascript" src="script/main.js"></script>
|
||||
<script type="text/javascript" src="main.js"></script>
|
||||
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet" type="text/css">
|
||||
<link rel="stylesheet" type="text/css" href="style/layout.css">
|
||||
|
@ -1,83 +1,90 @@
|
||||
/* eslint-disable no-useless-escape, no-control-regex */
|
||||
|
||||
// Shamelessly copied from https://github.com/megawac/irc-style-parser/
|
||||
// Lol, I just gave credit, didn't I..
|
||||
// Dammit, well, there's that.
|
||||
|
||||
const styleCheck_Re = /[\x00-\x1F]/;
|
||||
const back_re = /^(\d{1,2})(,(\d{1,2}))?/;
|
||||
const colourKey = '\x03';
|
||||
const colour_re = /\x03/g;
|
||||
const styleBreak = '\x0F'; // breaks all open styles ^O (\x0F)
|
||||
import { el } from './utility'
|
||||
|
||||
const styleCheckRe = /[\x00-\x1F]/
|
||||
const backRe = /^(\d{1,2})(,(\d{1,2}))?/
|
||||
const colourKey = '\x03'
|
||||
const colourRe = /\x03/g
|
||||
const styleBreak = '\x0F' // breaks all open styles ^O (\x0F)
|
||||
|
||||
let styles = [
|
||||
['normal', '\x00', ''], ['underline', '\x1F'],
|
||||
['bold', '\x02'], ['italic', '\x1D']
|
||||
].map(function(style) {
|
||||
var escaped = encodeURI(style[1]).replace('%', '\\x');
|
||||
return {
|
||||
name: style[0],
|
||||
style: style[2] != null ? style[2] : 'irc-' + style[0],
|
||||
key: style[1],
|
||||
keyregex: new RegExp(escaped + '(.*?)(' + escaped + '|$)')
|
||||
};
|
||||
});
|
||||
['normal', '\x00', ''], ['underline', '\x1F'],
|
||||
['bold', '\x02'], ['italic', '\x1D']
|
||||
].map(function (style) {
|
||||
var escaped = encodeURI(style[1]).replace('%', '\\x')
|
||||
return {
|
||||
name: style[0],
|
||||
style: style[2] != null ? style[2] : 'irc-' + style[0],
|
||||
key: style[1],
|
||||
keyregex: new RegExp(escaped + '(.*?)(' + escaped + '|$)')
|
||||
}
|
||||
})
|
||||
|
||||
//http://www.mirc.com/colors.html
|
||||
// http://www.mirc.com/colors.html
|
||||
let colors = [
|
||||
'white', 'black', 'navy', 'green', 'red', 'brown',
|
||||
'purple', 'olive', 'yellow', 'lightgreen', 'teal',
|
||||
'cyan', 'blue', 'pink', 'gray', 'lightgrey'
|
||||
].reduce(function(memo, name, index) {
|
||||
memo[index] = {
|
||||
name: name,
|
||||
fore: 'irc-fg' + index,
|
||||
back: 'irc-bg' + index,
|
||||
key: index
|
||||
};
|
||||
return memo;
|
||||
}, {});
|
||||
'white', 'black', 'navy', 'green', 'red', 'brown',
|
||||
'purple', 'olive', 'yellow', 'lightgreen', 'teal',
|
||||
'cyan', 'blue', 'pink', 'gray', 'lightgrey'
|
||||
].reduce(function (memo, name, index) {
|
||||
memo[index] = {
|
||||
name: name,
|
||||
fore: 'irc-fg' + index,
|
||||
back: 'irc-bg' + index,
|
||||
key: index
|
||||
}
|
||||
return memo
|
||||
}, {})
|
||||
|
||||
function stylize(line) {
|
||||
// Recheck
|
||||
if (!styleCheck_Re.test(line)) return line;
|
||||
function stylize (line) {
|
||||
// Recheck
|
||||
if (!styleCheckRe.test(line)) return line
|
||||
|
||||
// split up by the irc style break character ^O
|
||||
if (line.indexOf(styleBreak) >= 0) {
|
||||
return line.split(styleBreak).map(stylize).join('');
|
||||
}
|
||||
// split up by the irc style break character ^O
|
||||
if (line.indexOf(styleBreak) >= 0) {
|
||||
return line.split(styleBreak).map(stylize).join('')
|
||||
}
|
||||
|
||||
var result = line;
|
||||
var parseArr = result.split(colourKey);
|
||||
var text, match, colour, background = '';
|
||||
for (var i = 0; i < parseArr.length; i++) {
|
||||
text = parseArr[i];
|
||||
match = text.match(back_re);
|
||||
colour = match && colors[+match[1]];
|
||||
if (!match || !colour) {
|
||||
// ^C (no colour) ending. Escape current colour and carry on
|
||||
background = '';
|
||||
continue;
|
||||
}
|
||||
// set the background colour
|
||||
// we don't overide the background local var to support nesting
|
||||
if (colors[+match[3]]) {
|
||||
background = ' ' + colors[+match[3]].back;
|
||||
}
|
||||
// update the parsed text result
|
||||
result = result.replace(colourKey + text,
|
||||
'<span class="{0}">{1}</span>'.format(colour.fore + background, text.slice(match[0].length)));
|
||||
}
|
||||
let result = line
|
||||
let parseArr = result.split(colourKey)
|
||||
|
||||
// Matching styles (italics/bold/underline)
|
||||
// if only colors were this easy...
|
||||
styles.forEach(function(style) {
|
||||
if (result.indexOf(style.key) < 0) return;
|
||||
result = result.replace(style.keyregex, function(match, text) {
|
||||
return '<span class="{0}">{1}</span>'.format(style.style, text);
|
||||
});
|
||||
});
|
||||
let text
|
||||
let match
|
||||
let colour
|
||||
let background = ''
|
||||
for (let i = 0; i < parseArr.length; i++) {
|
||||
text = parseArr[i]
|
||||
match = text.match(backRe)
|
||||
colour = match && colors[+match[1]]
|
||||
if (!match || !colour) {
|
||||
// ^C (no colour) ending. Escape current colour and carry on
|
||||
background = ''
|
||||
continue
|
||||
}
|
||||
// set the background colour
|
||||
// we don't overide the background local var to support nesting
|
||||
if (colors[+match[3]]) {
|
||||
background = ' ' + colors[+match[3]].back
|
||||
}
|
||||
// update the parsed text result
|
||||
result = result.replace(colourKey + text, el('span', text.slice(match[0].length), [colour.fore + background]))
|
||||
}
|
||||
|
||||
//replace the reminent colour terminations and be done with it
|
||||
return result.replace(colour_re, '');
|
||||
// Matching styles (italics/bold/underline)
|
||||
// if only colors were this easy...
|
||||
styles.forEach(function (style) {
|
||||
if (result.indexOf(style.key) < 0) return
|
||||
result = result.replace(style.keyregex, function (match, text) {
|
||||
return el('span', text, [style.style])
|
||||
})
|
||||
})
|
||||
|
||||
// replace the reminent colour terminations and be done with it
|
||||
return result.replace(colourRe, '')
|
||||
}
|
||||
|
||||
module.exports = stylize;
|
||||
export default stylize
|
||||
|
3911
src/js/main.js
3911
src/js/main.js
File diff suppressed because it is too large
Load Diff
@ -1,46 +1,46 @@
|
||||
function swapSheet(name) {
|
||||
document.querySelector('#theme_stylesheet').setAttribute('href', 'style/'+name+'.css');
|
||||
function swapSheet (name) {
|
||||
document.querySelector('#theme_stylesheet').setAttribute('href', 'style/' + name + '.css')
|
||||
}
|
||||
|
||||
const themes = module.exports = {
|
||||
available: {
|
||||
default: {
|
||||
name: 'Default',
|
||||
type: 'bright',
|
||||
nick_pallete: {
|
||||
H: [1, 360],
|
||||
S: [30, 100],
|
||||
L: [30, 70]
|
||||
},
|
||||
stylesheet: 'theme_default',
|
||||
default: true,
|
||||
colorSamples: {
|
||||
toolbar: '#00c7e0',
|
||||
background: '#f5f5f5'
|
||||
}
|
||||
},
|
||||
window.themes = module.exports = {
|
||||
available: {
|
||||
default: {
|
||||
name: 'Default',
|
||||
type: 'bright',
|
||||
nick_pallete: {
|
||||
H: [1, 360],
|
||||
S: [30, 100],
|
||||
L: [30, 70]
|
||||
},
|
||||
stylesheet: 'theme_default',
|
||||
default: true,
|
||||
colorSamples: {
|
||||
toolbar: '#00c7e0',
|
||||
background: '#f5f5f5'
|
||||
}
|
||||
},
|
||||
|
||||
night: {
|
||||
name: 'Night',
|
||||
type: 'dark',
|
||||
nick_pallete: {
|
||||
H: [1, 360],
|
||||
S: [30, 100],
|
||||
L: [50, 100]
|
||||
},
|
||||
stylesheet: 'theme_night',
|
||||
default: false,
|
||||
colorSamples: {
|
||||
toolbar: '#008e8e',
|
||||
background: '#1d1d1d'
|
||||
}
|
||||
}
|
||||
},
|
||||
night: {
|
||||
name: 'Night',
|
||||
type: 'dark',
|
||||
nick_pallete: {
|
||||
H: [1, 360],
|
||||
S: [30, 100],
|
||||
L: [50, 100]
|
||||
},
|
||||
stylesheet: 'theme_night',
|
||||
default: false,
|
||||
colorSamples: {
|
||||
toolbar: '#008e8e',
|
||||
background: '#1d1d1d'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
change_theme: function(name) {
|
||||
if(name in themes.available) {
|
||||
swapSheet(themes.available[name].stylesheet);
|
||||
window.irc.config.theme = name;
|
||||
}
|
||||
}
|
||||
};
|
||||
change_theme: function (name) {
|
||||
if (name in window.themes.available) {
|
||||
swapSheet(window.themes.available[name].stylesheet)
|
||||
window.irc.config.theme = name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
185
src/js/utility.js
Normal file
185
src/js/utility.js
Normal file
@ -0,0 +1,185 @@
|
||||
import util from 'util'
|
||||
|
||||
// Create element
|
||||
export function el (element, content, classes, id) {
|
||||
let _el = document.createElement(element)
|
||||
_el.innerHTML = content
|
||||
_el.classList = classes || []
|
||||
if (id) _el.id = id
|
||||
return _el.outerHTML
|
||||
}
|
||||
|
||||
export function span (content, classes, id) {
|
||||
return el('span', content, classes, id)
|
||||
}
|
||||
|
||||
// String format
|
||||
export function sf () {
|
||||
return util.format.apply(null, arguments)
|
||||
}
|
||||
|
||||
export function formatDate (date, format, utc) {
|
||||
var MMMM = ['\x00', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
|
||||
var MMM = ['\x01', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
|
||||
var dddd = ['\x02', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
|
||||
var ddd = ['\x03', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
|
||||
function ii (i, len) { var s = i + ''; len = len || 2; while (s.length < len) s = '0' + s; return s }
|
||||
|
||||
var y = utc ? date.getUTCFullYear() : date.getFullYear()
|
||||
format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y)
|
||||
format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2))
|
||||
format = format.replace(/(^|[^\\])y/g, '$1' + y)
|
||||
|
||||
var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1
|
||||
format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0])
|
||||
format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0])
|
||||
format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M))
|
||||
format = format.replace(/(^|[^\\])M/g, '$1' + M)
|
||||
|
||||
var d = utc ? date.getUTCDate() : date.getDate()
|
||||
format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0])
|
||||
format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0])
|
||||
format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d))
|
||||
format = format.replace(/(^|[^\\])d/g, '$1' + d)
|
||||
|
||||
var H = utc ? date.getUTCHours() : date.getHours()
|
||||
format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H))
|
||||
format = format.replace(/(^|[^\\])H/g, '$1' + H)
|
||||
|
||||
var h = H > 12 ? H - 12 : H === 0 ? 12 : H
|
||||
format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h))
|
||||
format = format.replace(/(^|[^\\])h/g, '$1' + h)
|
||||
|
||||
var m = utc ? date.getUTCMinutes() : date.getMinutes()
|
||||
format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m))
|
||||
format = format.replace(/(^|[^\\])m/g, '$1' + m)
|
||||
|
||||
var s = utc ? date.getUTCSeconds() : date.getSeconds()
|
||||
format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s))
|
||||
format = format.replace(/(^|[^\\])s/g, '$1' + s)
|
||||
|
||||
var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds()
|
||||
format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3))
|
||||
f = Math.round(f / 10)
|
||||
format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f))
|
||||
f = Math.round(f / 10)
|
||||
format = format.replace(/(^|[^\\])f/g, '$1' + f)
|
||||
|
||||
var T = H < 12 ? 'AM' : 'PM'
|
||||
format = format.replace(/(^|[^\\])TT+/g, '$1' + T)
|
||||
format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0))
|
||||
|
||||
var t = T.toLowerCase()
|
||||
format = format.replace(/(^|[^\\])tt+/g, '$1' + t)
|
||||
format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0))
|
||||
|
||||
var tz = -date.getTimezoneOffset()
|
||||
var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'
|
||||
if (!utc) {
|
||||
tz = Math.abs(tz)
|
||||
var tzHrs = Math.floor(tz / 60)
|
||||
var tzMin = tz % 60
|
||||
K += ii(tzHrs) + ':' + ii(tzMin)
|
||||
}
|
||||
format = format.replace(/(^|[^\\])K/g, '$1' + K)
|
||||
|
||||
var day = (utc ? date.getUTCDay() : date.getDay()) + 1
|
||||
format = format.replace(new RegExp(dddd[0], 'g'), dddd[day])
|
||||
format = format.replace(new RegExp(ddd[0], 'g'), ddd[day])
|
||||
|
||||
format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M])
|
||||
format = format.replace(new RegExp(MMM[0], 'g'), MMM[M])
|
||||
|
||||
format = format.replace(/\\(.)/g, '$1')
|
||||
|
||||
return format
|
||||
}
|
||||
|
||||
export function rand (randgen, min, max) {
|
||||
return parseInt(randgen() * (max - min + 1), 10) + min
|
||||
}
|
||||
|
||||
export function removeStr (arr, str) {
|
||||
let index = arr.indexOf(str)
|
||||
|
||||
if (index > -1) {
|
||||
arr.splice(index, 1)
|
||||
return arr
|
||||
}
|
||||
|
||||
return arr
|
||||
}
|
||||
|
||||
export function grep (items, callback) {
|
||||
let filtered = []
|
||||
for (let i in items) {
|
||||
let item = items[i]
|
||||
let cond = callback(item)
|
||||
if (cond) {
|
||||
filtered.push(item)
|
||||
}
|
||||
}
|
||||
|
||||
return filtered
|
||||
}
|
||||
|
||||
export function match (word, array) {
|
||||
return grep(
|
||||
array,
|
||||
function (w) {
|
||||
return w.toLowerCase().indexOf(word.toLowerCase()) === 0
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
export function serialize (obj) {
|
||||
let str = []
|
||||
|
||||
for (let p in obj) {
|
||||
if (obj.hasOwnProperty(p)) {
|
||||
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]))
|
||||
}
|
||||
}
|
||||
|
||||
return str.join('&')
|
||||
}
|
||||
|
||||
export function removeClass (element, cl) {
|
||||
let classList = element.className.split(' ')
|
||||
|
||||
if (classList.indexOf(cl) !== -1) {
|
||||
classList.splice(classList.indexOf(cl), 1)
|
||||
}
|
||||
|
||||
element.className = classList.join(' ')
|
||||
}
|
||||
|
||||
export function addClass (element, cl) {
|
||||
let classList = element.className.split(' ')
|
||||
|
||||
if (classList.indexOf(cl) !== -1) {
|
||||
return
|
||||
}
|
||||
|
||||
classList.push(cl)
|
||||
element.className = classList.join(' ')
|
||||
}
|
||||
|
||||
export function toggleClass (element, cl) {
|
||||
let classList = element.className.split(' ')
|
||||
if (classList.indexOf(cl) !== -1) {
|
||||
removeClass(element, cl)
|
||||
} else {
|
||||
addClass(element, cl)
|
||||
}
|
||||
}
|
||||
|
||||
export function objectGetKey (obj, value) {
|
||||
let key = null
|
||||
for (let f in obj) {
|
||||
if (obj[f] === value) {
|
||||
key = f
|
||||
}
|
||||
}
|
||||
return key
|
||||
}
|
28
teemant.js → src/server/index.js
Executable file → Normal file
28
teemant.js → src/server/index.js
Executable file → Normal file
@ -1,20 +1,19 @@
|
||||
#!/usr/bin/env node
|
||||
'use strict'
|
||||
import express from 'express'
|
||||
import path from 'path'
|
||||
import sockio from 'socket.io'
|
||||
import dns from 'dns'
|
||||
|
||||
import pkginfo from './package.json'
|
||||
import irclib from './server/irc'
|
||||
import webirc from './server/webirc'
|
||||
import pkginfo from '../package.json'
|
||||
import irclib from './irc'
|
||||
import webirc from './webirc'
|
||||
|
||||
import config from './server/config'
|
||||
import logger from './server/logger'
|
||||
import config from './config'
|
||||
import logger from './logger'
|
||||
|
||||
const app = express()
|
||||
const router = express.Router()
|
||||
const pubdir = path.join(__dirname, 'build')
|
||||
const pubdir = path.join(__dirname, 'public')
|
||||
const port = config.server.port || 8080
|
||||
const cacheAge = 365 * 24 * 60 * 60 * 1000
|
||||
|
||||
@ -36,16 +35,16 @@ let customCTCPs = {
|
||||
process.stdin.resume()
|
||||
|
||||
router.get('/', function (req, res) {
|
||||
res.sendFile(path.join(pubdir, '/document/index.html'))
|
||||
res.sendFile(path.join(pubdir, '/index.html'))
|
||||
})
|
||||
|
||||
router.get('/:server?*', function (req, res) {
|
||||
res.sendFile(path.join(pubdir, '/document/index.html'))
|
||||
res.sendFile(path.join(pubdir, '/index.html'))
|
||||
})
|
||||
|
||||
app.use('/', express.static(pubdir, { maxAge: cacheAge }))
|
||||
app.use('/', express.static(path.join(pubdir, 'icons'), { maxAge: cacheAge }))
|
||||
app.use('/', express.static(path.join(__dirname, 'static'), { maxAge: cacheAge }))
|
||||
app.use('/', express.static(path.join(pubdir, 'static'), { maxAge: cacheAge }))
|
||||
|
||||
app.use('/:server', express.static(pubdir, { maxAge: cacheAge }))
|
||||
app.use('/:server', express.static(path.join(pubdir, 'icons'), { maxAge: cacheAge }))
|
||||
@ -116,7 +115,7 @@ io.sockets.on('connection', function (socket) {
|
||||
|
||||
delete connections[socket.id]
|
||||
|
||||
logger.debugLog('clientID: {0} disconnect'.format(socket.id))
|
||||
logger.debugLog(`clientID: ${socket.id} disconnect`)
|
||||
})
|
||||
|
||||
socket.on('error', (e) => {
|
||||
@ -130,7 +129,12 @@ io.sockets.on('connection', function (socket) {
|
||||
|
||||
logger.debugLog(`[${socket.id}] ->`, data)
|
||||
|
||||
serv.handler.handleUserLine(data)
|
||||
try {
|
||||
serv.handler.handleUserLine(data)
|
||||
} catch (e) {
|
||||
console.error('An error occured while handling message from client', data)
|
||||
console.error(e.stack)
|
||||
}
|
||||
})
|
||||
|
||||
socket.on('irc_create', function (connectiondata) {
|
@ -471,7 +471,7 @@ class IRCConnectionHandler {
|
||||
// start whois queue
|
||||
list = {
|
||||
nickname: line.arguments[1],
|
||||
hostmask: '%s!%s@%s'.format(line.arguments[1], line.arguments[2], line.arguments[3]),
|
||||
hostmask: util.format('%s!%s@%s', line.arguments[1], line.arguments[2], line.arguments[3]),
|
||||
realname: line.trailing || ''
|
||||
}
|
||||
this.whoisManage(line.arguments[1], list)
|
||||
@ -652,7 +652,7 @@ class IRCConnection extends EventEmitter {
|
||||
buffer = data.pop()
|
||||
data.forEach((line) => {
|
||||
if (line.indexOf('PING') === 0) {
|
||||
this.socket.write('PONG %s\r\n', line.substring(4))
|
||||
this.write('PONG %s\r\n', line.substring(4))
|
||||
return
|
||||
}
|
||||
|
||||
@ -660,7 +660,13 @@ class IRCConnection extends EventEmitter {
|
||||
|
||||
let parsed = parse(line)
|
||||
this.emit('line', parsed)
|
||||
this.handler.handleServerLine(parsed)
|
||||
|
||||
try {
|
||||
this.handler.handleServerLine(parsed)
|
||||
} catch (e) {
|
||||
console.error('An error occured while handling parsed server line', parsed)
|
||||
console.error(e.stack)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@ -676,7 +682,7 @@ class IRCConnection extends EventEmitter {
|
||||
|
||||
authenticate () {
|
||||
if (this.config.password) {
|
||||
this.socket.write('PASS %s\r\n', this.config.password)
|
||||
this.write('PASS %s\r\n', this.config.password)
|
||||
}
|
||||
|
||||
if (this.extras.authenticationSteps) {
|
||||
@ -686,8 +692,8 @@ class IRCConnection extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
this.socket.write('USER %s 8 * :%s\r\n', this.config.username, this.config.realname)
|
||||
this.socket.write('NICK %s\r\n', this.config.nickname)
|
||||
this.write('USER %s 8 * :%s\r\n', this.config.username, this.config.realname)
|
||||
this.write('NICK %s\r\n', this.config.nickname)
|
||||
}
|
||||
|
||||
disconnect (message) {
|
||||
@ -697,7 +703,7 @@ class IRCConnection extends EventEmitter {
|
||||
}
|
||||
|
||||
this.queue['close'] = true
|
||||
this.socket.write('QUIT :%s\r\n', (message != null ? message : this.globalConfig.default_quit_msg))
|
||||
this.write('QUIT :%s\r\n', (message != null ? message : this.globalConfig.default_quit_msg))
|
||||
}
|
||||
|
||||
write () {
|
@ -2,8 +2,8 @@ import dns from 'dns'
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
import config from './server/config'
|
||||
import logger from './server/logger'
|
||||
import config from './config'
|
||||
import logger from './logger'
|
||||
|
||||
const webircDataPath = path.join(__dirname, '..', 'webirc.data.json')
|
||||
|
@ -181,7 +181,7 @@ body
|
||||
margin-left: 4px;
|
||||
border-radius: 5px;
|
||||
vertical-align: bottom;
|
||||
.emojione
|
||||
.emoji
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
vertical-align: sub;
|
||||
|
@ -2,13 +2,14 @@
|
||||
|
||||
const webpack = require('webpack')
|
||||
const path = require('path')
|
||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||
|
||||
module.exports = {
|
||||
entry: {
|
||||
main: './src/js/main'
|
||||
},
|
||||
output: {
|
||||
path: path.join(__dirname, 'dist', 'js'),
|
||||
path: path.join(__dirname, 'app', 'public'),
|
||||
filename: '[name].js'
|
||||
},
|
||||
module: {
|
||||
@ -22,10 +23,6 @@ module.exports = {
|
||||
presets: [ '@babel/preset-env' ]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /src\/style\/.+\.styl$/,
|
||||
loader: 'file-loader?name=./dist/style/[name].css!css-loader!stylus-loader'
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -33,7 +30,15 @@ module.exports = {
|
||||
new webpack.ProvidePlugin({
|
||||
// Detect and inject
|
||||
_: 'underscore'
|
||||
})
|
||||
}),
|
||||
new CopyWebpackPlugin([{
|
||||
from: 'src/document/index.html',
|
||||
to: '.'
|
||||
},
|
||||
{
|
||||
from: 'static',
|
||||
to: 'static'
|
||||
}])
|
||||
],
|
||||
devtool: 'inline-source-map'
|
||||
}
|
||||
|
Reference in New Issue
Block a user