From 8016367134e6a1945ad99e20976624fe37819dbf Mon Sep 17 00:00:00 2001 From: Frazer Smith Date: Tue, 20 Jun 2023 20:46:01 +0100 Subject: [PATCH 1/6] chore: enable fluent-json-schema type definitions --- src/config/index.js | 2 +- src/plugins/shared-schemas/index.js | 2 +- src/routes/admin/access/bearer-token/schema.js | 2 +- src/routes/admin/healthcheck/schema.js | 2 +- src/routes/docs/openapi/schema.js | 2 +- src/routes/docs/schema.js | 2 +- src/routes/documents/receipt/schema.js | 2 +- src/routes/documents/register/schema.js | 2 +- src/routes/preferences/options/schema.js | 2 +- src/routes/preferences/user/schema.js | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/config/index.js b/src/config/index.js index fe9ea2b7..7b6c3b23 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -1,7 +1,7 @@ require("dotenv").config(); const envSchema = require("env-schema"); -const S = require("fluent-json-schema"); +const S = require("fluent-json-schema").default; const fs = require("fs/promises"); const path = require("upath"); const pino = require("pino"); diff --git a/src/plugins/shared-schemas/index.js b/src/plugins/shared-schemas/index.js index f658b990..70adeede 100644 --- a/src/plugins/shared-schemas/index.js +++ b/src/plugins/shared-schemas/index.js @@ -1,5 +1,5 @@ const fp = require("fastify-plugin"); -const S = require("fluent-json-schema"); +const S = require("fluent-json-schema").default; /** * @author Frazer Smith diff --git a/src/routes/admin/access/bearer-token/schema.js b/src/routes/admin/access/bearer-token/schema.js index c94ff8cb..2edbdfc1 100644 --- a/src/routes/admin/access/bearer-token/schema.js +++ b/src/routes/admin/access/bearer-token/schema.js @@ -1,4 +1,4 @@ -const S = require("fluent-json-schema"); +const S = require("fluent-json-schema").default; const security = [{ basicAuth: [] }]; const tags = ["System administration"]; diff --git a/src/routes/admin/healthcheck/schema.js b/src/routes/admin/healthcheck/schema.js index f94d12cb..90f3fda4 100644 --- a/src/routes/admin/healthcheck/schema.js +++ b/src/routes/admin/healthcheck/schema.js @@ -1,4 +1,4 @@ -const S = require("fluent-json-schema"); +const S = require("fluent-json-schema").default; const tags = ["System administration"]; diff --git a/src/routes/docs/openapi/schema.js b/src/routes/docs/openapi/schema.js index 28464bd3..325b16a6 100644 --- a/src/routes/docs/openapi/schema.js +++ b/src/routes/docs/openapi/schema.js @@ -1,4 +1,4 @@ -const S = require("fluent-json-schema"); +const S = require("fluent-json-schema").default; /** * Fastify uses AJV for JSON Schema Validation, diff --git a/src/routes/docs/schema.js b/src/routes/docs/schema.js index e034e642..8384c8b3 100644 --- a/src/routes/docs/schema.js +++ b/src/routes/docs/schema.js @@ -1,4 +1,4 @@ -const S = require("fluent-json-schema"); +const S = require("fluent-json-schema").default; /** * Fastify uses AJV for JSON Schema Validation, diff --git a/src/routes/documents/receipt/schema.js b/src/routes/documents/receipt/schema.js index f49f0610..9c36b0f7 100644 --- a/src/routes/documents/receipt/schema.js +++ b/src/routes/documents/receipt/schema.js @@ -1,4 +1,4 @@ -const S = require("fluent-json-schema"); +const S = require("fluent-json-schema").default; const tags = ["Documents"]; diff --git a/src/routes/documents/register/schema.js b/src/routes/documents/register/schema.js index 6b53aee7..4653925b 100644 --- a/src/routes/documents/register/schema.js +++ b/src/routes/documents/register/schema.js @@ -1,4 +1,4 @@ -const S = require("fluent-json-schema"); +const S = require("fluent-json-schema").default; const tags = ["Documents"]; diff --git a/src/routes/preferences/options/schema.js b/src/routes/preferences/options/schema.js index e62bdf8b..2dd3fa5c 100644 --- a/src/routes/preferences/options/schema.js +++ b/src/routes/preferences/options/schema.js @@ -1,4 +1,4 @@ -const S = require("fluent-json-schema"); +const S = require("fluent-json-schema").default; const tags = ["Contact preferences"]; diff --git a/src/routes/preferences/user/schema.js b/src/routes/preferences/user/schema.js index 5725579d..526200da 100644 --- a/src/routes/preferences/user/schema.js +++ b/src/routes/preferences/user/schema.js @@ -1,4 +1,4 @@ -const S = require("fluent-json-schema"); +const S = require("fluent-json-schema").default; const tags = ["Contact preferences"]; From ec3c652378445660d6552ea06877a1b7f8082f03 Mon Sep 17 00:00:00 2001 From: Frazer Smith Date: Thu, 22 Jun 2023 06:37:28 +0100 Subject: [PATCH 2/6] chore: import fastify type for server jsdoc params --- src/plugins/clean-object/index.js | 2 +- src/plugins/convert-date-param-operator/index.js | 2 +- src/plugins/db/index.js | 2 +- src/plugins/hashed-bearer-auth/index.js | 2 +- src/plugins/shared-schemas/index.js | 2 +- src/routes/admin/access/bearer-token/index.js | 2 +- src/routes/admin/healthcheck/index.js | 2 +- src/routes/docs/index.js | 2 +- src/routes/docs/openapi/index.js | 2 +- src/routes/documents/receipt/index.js | 2 +- src/routes/documents/register/index.js | 2 +- src/routes/preferences/options/index.js | 2 +- src/routes/preferences/user/index.js | 2 +- src/server.js | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/plugins/clean-object/index.js b/src/plugins/clean-object/index.js index 5baa54ba..5f1e213f 100644 --- a/src/plugins/clean-object/index.js +++ b/src/plugins/clean-object/index.js @@ -25,7 +25,7 @@ function cleanObject(object = {}) { * @author Frazer Smith * @description Plugin that decorates Fastify instance with `cleanObject` function, * which removes key value pairs from an object where the value is null or undefined. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. */ async function plugin(server) { server.decorate("cleanObject", cleanObject); diff --git a/src/plugins/convert-date-param-operator/index.js b/src/plugins/convert-date-param-operator/index.js index 1e65b38b..510e5b3e 100644 --- a/src/plugins/convert-date-param-operator/index.js +++ b/src/plugins/convert-date-param-operator/index.js @@ -36,7 +36,7 @@ function convDateParamOperator(operator) { * @author Frazer Smith * @description Plugin that decorates Fastify instance with `convertDateParamOperator` function, * which convert date param operators to corresponding values. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. */ async function plugin(server) { server.decorate("convertDateParamOperator", convDateParamOperator); diff --git a/src/plugins/db/index.js b/src/plugins/db/index.js index 2faf25e2..c3ef9f56 100644 --- a/src/plugins/db/index.js +++ b/src/plugins/db/index.js @@ -6,7 +6,7 @@ const mssql = require("mssql"); /** * @author Frazer Smith * @description Decorator plugin that adds Microsoft SQL Server or PostgreSQL client. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. * @param {object} options - Plugin config values. * @param {('mssql'|'postgresql')} options.client - Database client. * @param {string} options.connection - Database connection string. diff --git a/src/plugins/hashed-bearer-auth/index.js b/src/plugins/hashed-bearer-auth/index.js index 1912b270..274bd8ca 100644 --- a/src/plugins/hashed-bearer-auth/index.js +++ b/src/plugins/hashed-bearer-auth/index.js @@ -7,7 +7,7 @@ const secJSON = require("secure-json-parse"); * @author Frazer Smith * @description Decorator plugin that adds bearer token authentication, * querying a database for bcrypt-hashed bearer token keys. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. */ async function plugin(server) { await server.register(bearer, { diff --git a/src/plugins/shared-schemas/index.js b/src/plugins/shared-schemas/index.js index 70adeede..e6cf538d 100644 --- a/src/plugins/shared-schemas/index.js +++ b/src/plugins/shared-schemas/index.js @@ -4,7 +4,7 @@ const S = require("fluent-json-schema").default; /** * @author Frazer Smith * @description Plugin that adds a collection of shared schemas for re-use throughout the server. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. */ async function plugin(server) { /** diff --git a/src/routes/admin/access/bearer-token/index.js b/src/routes/admin/access/bearer-token/index.js index 099b1ae8..8172254a 100644 --- a/src/routes/admin/access/bearer-token/index.js +++ b/src/routes/admin/access/bearer-token/index.js @@ -70,7 +70,7 @@ function buildBearerTokenRecord(result, req) { /** * @author Frazer Smith * @description Sets routing options for server. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. * @param {object} options - Route config values. * @param {object} options.cors - CORS settings. * @param {object} options.database - Database config values. diff --git a/src/routes/admin/healthcheck/index.js b/src/routes/admin/healthcheck/index.js index 4ec2f755..8cbb47d2 100644 --- a/src/routes/admin/healthcheck/index.js +++ b/src/routes/admin/healthcheck/index.js @@ -10,7 +10,7 @@ const accepts = ["text/plain"]; * @description Sets routing options for server for healthcheck endpoint. * Monitoring software polls this to confirm the API is running, * so needs no authentication. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. * @param {object} options - Route config values. * @param {object} options.cors - CORS settings. */ diff --git a/src/routes/docs/index.js b/src/routes/docs/index.js index 5bdf96ba..f8df82a0 100644 --- a/src/routes/docs/index.js +++ b/src/routes/docs/index.js @@ -10,7 +10,7 @@ const accepts = ["text/html"]; /** * @author Frazer Smith * @description Sets routing options for server. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. */ async function route(server) { // Register plugins diff --git a/src/routes/docs/openapi/index.js b/src/routes/docs/openapi/index.js index 3843f244..fc3e9643 100644 --- a/src/routes/docs/openapi/index.js +++ b/src/routes/docs/openapi/index.js @@ -8,7 +8,7 @@ const accepts = docsOpenapiGetSchema.produces; /** * @author Frazer Smith * @description Sets routing options for server. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. * @param {object} options - Route config values. * @param {object} options.cors - CORS settings. */ diff --git a/src/routes/documents/receipt/index.js b/src/routes/documents/receipt/index.js index 498fdb84..dae9f1d6 100644 --- a/src/routes/documents/receipt/index.js +++ b/src/routes/documents/receipt/index.js @@ -7,7 +7,7 @@ const { receiptDelete, receiptInsert } = require("./query"); /** * @author Frazer Smith * @description Sets routing options for server. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. * @param {object} options - Route config values. * @param {boolean=} options.bearerTokenAuthEnabled - Apply `bearerToken` security scheme to route if defined. * @param {object} options.cors - CORS settings. diff --git a/src/routes/documents/register/index.js b/src/routes/documents/register/index.js index 7402d9ae..54e08e13 100644 --- a/src/routes/documents/register/index.js +++ b/src/routes/documents/register/index.js @@ -10,7 +10,7 @@ const { registerSelect } = require("./query"); /** * @author Frazer Smith * @description Sets routing options for server. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. * @param {object} options - Route config values. * @param {boolean=} options.bearerTokenAuthEnabled - Apply `bearerToken` security scheme to route if defined. * @param {object} options.cors - CORS settings. diff --git a/src/routes/preferences/options/index.js b/src/routes/preferences/options/index.js index a3556766..55be9f71 100644 --- a/src/routes/preferences/options/index.js +++ b/src/routes/preferences/options/index.js @@ -7,7 +7,7 @@ const { optionsSelect } = require("./query"); /** * @author Frazer Smith * @description Sets routing options for server. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. * @param {object} options - Route config values. * @param {boolean=} options.bearerTokenAuthEnabled - Apply `bearerToken` security scheme to route if defined. * @param {object} options.cors - CORS settings. diff --git a/src/routes/preferences/user/index.js b/src/routes/preferences/user/index.js index 83117acb..64ec7296 100644 --- a/src/routes/preferences/user/index.js +++ b/src/routes/preferences/user/index.js @@ -7,7 +7,7 @@ const { userInsert, userSelect } = require("./query"); /** * @author Frazer Smith * @description Sets routing options for server. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. * @param {object} options - Route config values. * @param {boolean=} options.bearerTokenAuthEnabled - Apply `bearerToken` security scheme to route if defined. * @param {object} options.cors - CORS settings. diff --git a/src/server.js b/src/server.js index dcbf3246..1c6c75c7 100644 --- a/src/server.js +++ b/src/server.js @@ -24,7 +24,7 @@ const sharedSchemas = require("./plugins/shared-schemas"); /** * @author Frazer Smith * @description Builds Fastify instance. - * @param {object} server - Fastify instance. + * @param {import("fastify").FastifyInstance} server - Fastify instance. * @param {object} config - Fastify configuration values. */ async function plugin(server, config) { From aeb862caf6c9d6dcb9a494419fd2f9b23262b203 Mon Sep 17 00:00:00 2001 From: Frazer Smith Date: Thu, 22 Jun 2023 06:53:06 +0100 Subject: [PATCH 3/6] chore(routes/documents/register): add missing jsdoc param --- src/routes/documents/register/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/routes/documents/register/index.js b/src/routes/documents/register/index.js index 54e08e13..2e637b7b 100644 --- a/src/routes/documents/register/index.js +++ b/src/routes/documents/register/index.js @@ -15,6 +15,7 @@ const { registerSelect } = require("./query"); * @param {boolean=} options.bearerTokenAuthEnabled - Apply `bearerToken` security scheme to route if defined. * @param {object} options.cors - CORS settings. * @param {object} options.database - Database config values. + * @param {('mssql' | 'postgresql')} options.database.client - Database client. * @param {object} options.database.tables - Database tables. * @param {string} options.database.tables.documentRegister - Name and schema of document register table. */ From 6d1b896f7ffdd5669598a5d14330a750bc8cb3b8 Mon Sep 17 00:00:00 2001 From: Frazer Smith Date: Thu, 22 Jun 2023 07:40:28 +0100 Subject: [PATCH 4/6] fix(routes/preferences): `required` param should be array --- src/routes/preferences/user/schema.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/preferences/user/schema.js b/src/routes/preferences/user/schema.js index 526200da..8790939e 100644 --- a/src/routes/preferences/user/schema.js +++ b/src/routes/preferences/user/schema.js @@ -148,7 +148,7 @@ const userPutSchema = { .maxItems(4) .uniqueItems(true) ) - .required("preferences"), + .required(["preferences"]), response: { 204: S.string().raw({ nullable: true }).description("No Content"), 400: S.ref("responses#/properties/badRequest").description( From a1a7b00c4e110e5db01a170b9d35daa9841ce456 Mon Sep 17 00:00:00 2001 From: Frazer Smith Date: Thu, 22 Jun 2023 08:33:56 +0100 Subject: [PATCH 5/6] docs(readme): update maintenance note --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 14bd327c..8f8d33fa 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ > **Note** -> This repository is unmaintained as of 2023-05-03 as -> I am no longer employed by Somerset NHS Foundation Trust. +> As of 2023-05-03 as I am no longer employed by Somerset NHS Foundation Trust. +> However, this repository will continue to be maintained as it acts as +> a 'canary in the coalmine' for changes to Node and other dependencies. From 42ad0cc724d116e060dedece965b309f89aede42 Mon Sep 17 00:00:00 2001 From: Frazer Smith Date: Thu, 22 Jun 2023 19:04:17 +0100 Subject: [PATCH 6/6] chore(.eslintrc): enable additional jsdoc plugin rules --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index 1cc7c0e1..6f16246c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -38,6 +38,7 @@ module.exports = { root: true, rules: { "import/no-extraneous-dependencies": "error", + "jsdoc/require-hyphen-before-param-description": "error", "no-multiple-empty-lines": ["error", { max: 1 }], "prefer-destructuring": ["error", { object: true, array: false }], "promise/prefer-await-to-callbacks": "warn",