diff --git a/.eslintignore b/.eslintignore index 02330bf..9bc0b58 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,2 @@ **/*.min.js config -config.js diff --git a/.prettierrc.json b/.prettierrc.json index 2aec50b..a1d50f9 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,7 +1,7 @@ { "tabWidth": 2, "semi": false, - "trailingComma": "all", + "trailingComma": "none", "printWidth": 80, "arrowParens": "avoid", "singleQuote": true diff --git a/Dockerfile b/Dockerfile index 825c36b..766c258 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM node:16-slim as base -ARG user +ARG user node RUN mkdir /app && chown -R $user:$user /app USER $user WORKDIR /app diff --git a/README.md b/README.md index ba0e6bf..d48df96 100644 --- a/README.md +++ b/README.md @@ -31,23 +31,24 @@ STDOUT. Check the README there for more details and usages. 1. Download the package, and expand it 3. `yarn install` -## Development +## Running the project -1. Explore the settings inside of config.js, but the defaults should be good -2. `yarn install` -3. `yarn dev` (you may specify an optional `` as well) +> Explore the settings inside of config.js, but the defaults should be good -## Production +### Development -1. Explore the settings inside of config.js, but the defaults should be good -2. `yarn install` -3. `yarn build` to build the package -4. `yarn start` to start the server +1. `yarn install` +2. `yarn dev` (you may specify an optional `` as well) -## Production with Docker +### Production -1. Explore the settings inside of config.js, but the defaults should be good -2. `docker compose up` +1. `yarn install` +2. `yarn build` to build the package +3. `yarn start` to start the server + +### Production with Docker + +1. `docker compose up` ## Settings diff --git a/src/lib/document-handler/builder.ts b/src/lib/document-handler/builder.ts index 3f08b9f..2dd0571 100644 --- a/src/lib/document-handler/builder.ts +++ b/src/lib/document-handler/builder.ts @@ -18,4 +18,4 @@ const build = async (config: Config) => { return documentHandler } -export default build \ No newline at end of file +export default build diff --git a/src/server.ts b/src/server.ts index 7a6e88b..cc365bd 100644 --- a/src/server.ts +++ b/src/server.ts @@ -20,118 +20,123 @@ if (config.logging) { addLogging(config) } -buildDocumenthandler(config).then((documentHandler: DocumentHandler) => { - // Compress the static javascript assets - if (config.recompressStaticAssets) { - const list = fs.readdirSync(getStaticDirectory(__dirname)) - for (let j = 0; j < list.length; j += 1) { - const item = list[j] - if ( - item.indexOf('.js') === item.length - 3 && - item.indexOf('.min.js') === -1 - ) { - const dest = `${item.substring(0, item.length - 3)}.min${item.substring( - item.length - 3, - )}` - const origCode = fs.readFileSync( - getStaticItemDirectory(__dirname, item), - 'utf8', - ) +buildDocumenthandler(config) + .then((documentHandler: DocumentHandler) => { + // Compress the static javascript assets + if (config.recompressStaticAssets) { + const list = fs.readdirSync(getStaticDirectory(__dirname)) + for (let j = 0; j < list.length; j += 1) { + const item = list[j] + if ( + item.indexOf('.js') === item.length - 3 && + item.indexOf('.min.js') === -1 + ) { + const dest = `${item.substring( + 0, + item.length - 3, + )}.min${item.substring(item.length - 3)}` + const origCode = fs.readFileSync( + getStaticItemDirectory(__dirname, item), + 'utf8', + ) - fs.writeFileSync( - getStaticItemDirectory(__dirname, dest), - uglify.minify(origCode).code, - 'utf8', - ) - winston.info(`compressed ${item} into ${dest}`) + fs.writeFileSync( + getStaticItemDirectory(__dirname, dest), + uglify.minify(origCode).code, + 'utf8', + ) + winston.info(`compressed ${item} into ${dest}`) + } } } - } - // Send the static documents into the preferred store, skipping expirations - let documentPath - let data + // Send the static documents into the preferred store, skipping expirations + let documentPath + let data - Object.keys(config.documents).forEach(name => { - documentPath = config.documents[name] - data = fs.readFileSync(documentPath, 'utf8') - winston.info('loading static document', { name, path: documentPath }) + Object.keys(config.documents).forEach(name => { + documentPath = config.documents[name] + data = fs.readFileSync(documentPath, 'utf8') + winston.info('loading static document', { name, path: documentPath }) - if (data) { - documentHandler.store?.set( - name, - data, - cb => { - winston.debug('loaded static document', { success: cb }) - }, - true, - ) - } else { - winston.warn('failed to load static document', { - name, - path: documentPath, - }) + if (data) { + documentHandler.store?.set( + name, + data, + cb => { + winston.debug('loaded static document', { success: cb }) + }, + true, + ) + } else { + winston.warn('failed to load static document', { + name, + path: documentPath, + }) + } + }) + + const app: Express = express() + + // Rate limit all requests + if (config.rateLimits) { + config.rateLimits.end = true + app.use(connectRateLimit(config.rateLimits)) } + + // get raw documents - support getting with extension + app.get('/raw/:id', async (request, response) => + documentHandler.handleRawGet(request, response), + ) + + app.head('/raw/:id', (request, response) => + documentHandler.handleRawGet(request, response), + ) + + // // add documents + app.post('/documents', (request, response) => + documentHandler.handlePost(request, response), + ) + + // get documents + app.get('/documents/:id', (request, response) => + documentHandler.handleGet(request, response), + ) + + app.head('/documents/:id', (request, response) => + documentHandler.handleGet(request, response), + ) + + // Otherwise, try to match static files + app.use( + connectSt({ + path: getStaticDirectory(__dirname), + content: { maxAge: config.staticMaxAge }, + passthrough: true, + index: false, + }), + ) + + // Then we can loop back - and everything else should be a token, + // so route it back to / + app.get('/:id', (request: Request, response, next) => { + request.sturl = '/' + next() + }) + + // And match index + app.use( + connectSt({ + path: getStaticDirectory(__dirname), + content: { maxAge: config.staticMaxAge }, + index: 'index.html', + }), + ) + + app.listen(config.port, config.host, () => { + winston.info(`listening on ${config.host}:${config.port}`) + }) }) - - const app: Express = express() - - // Rate limit all requests - if (config.rateLimits) { - config.rateLimits.end = true - app.use(connectRateLimit(config.rateLimits)) - } - - // get raw documents - support getting with extension - app.get('/raw/:id', async (request, response) => - documentHandler.handleRawGet(request, response), - ) - - app.head('/raw/:id', (request, response) => - documentHandler.handleRawGet(request, response), - ) - - // // add documents - app.post('/documents', (request, response) => - documentHandler.handlePost(request, response), - ) - - // get documents - app.get('/documents/:id', (request, response) => - documentHandler.handleGet(request, response), - ) - - app.head('/documents/:id', (request, response) => - documentHandler.handleGet(request, response), - ) - - // Otherwise, try to match static files - app.use( - connectSt({ - path: getStaticDirectory(__dirname), - content: { maxAge: config.staticMaxAge }, - passthrough: true, - index: false, - }), - ) - - // Then we can loop back - and everything else should be a token, - // so route it back to / - app.get('/:id', (request: Request, response, next) => { - request.sturl = '/' - next() + .catch(e => { + winston.error(`server couldn't start, an error occured on ${e.message}`) }) - - // And match index - app.use( - connectSt({ - path: getStaticDirectory(__dirname), - content: { maxAge: config.staticMaxAge }, - index: 'index.html', - }), - ) - - app.listen(config.port, config.host, () => { - winston.info(`listening on ${config.host}:${config.port}`) - }) -})