Skip to content
This repository was archived by the owner on Mar 20, 2024. It is now read-only.

Commit 3dc7802

Browse files
feat(tsc): add tsconfig to allow tsc to run
1 parent 9df8ecc commit 3dc7802

28 files changed

+4634
-3067
lines changed

.eslintignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
types
2+
tests

.eslintrc.js

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
module.exports = {
22
parser: '@typescript-eslint/parser',
3-
extends: ['eslint:recommended', 'google', 'prettier'],
3+
extends: [
4+
'plugin:@typescript-eslint/recommended',
5+
'plugin:@typescript-eslint/recommended-requiring-type-checking',
6+
'plugin:jsdoc/recommended',
7+
'google',
8+
'prettier',
9+
],
410
env: {
511
node: true,
612
jest: true,
713
},
814
parserOptions: {
15+
project: './tsconfig.json',
916
ecmaFeatures: {
1017
experimentalObjectRestSpread: true,
1118
impliedStrict: true,
@@ -19,5 +26,41 @@ module.exports = {
1926
indent: ['error', 2, { SwitchCase: 1 }],
2027
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
2128
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
29+
// jsdoc
30+
'require-jsdoc': 'off',
31+
'valid-jsdoc': 'off',
32+
'jsdoc/require-param-description': 'off',
33+
'jsdoc/require-returns': 'off',
34+
'jsdoc/require-returns-description': 'off',
35+
'jsdoc/no-undefined-types': [
36+
'warn',
37+
{
38+
definedTypes: ['never'],
39+
},
40+
],
41+
42+
// JS requirements
43+
'@typescript-eslint/no-var-requires': 'off',
44+
'@typescript-eslint/no-unsafe-call': 'off',
45+
'@typescript-eslint/no-unsafe-assignment': 'off',
46+
'@typescript-eslint/no-unsafe-member-access': 'off',
47+
'@typescript-eslint/ban-ts-comment': 'off',
48+
49+
// TODO
50+
'@typescript-eslint/no-unsafe-return': 'off',
51+
'@typescript-eslint/no-unsafe-argument': 'off',
52+
'@typescript-eslint/restrict-template-expressions': 'off',
53+
},
54+
settings: {
55+
'import/resolver': {
56+
typescript: {},
57+
},
58+
jsdoc: {
59+
// mode: 'typescript',
60+
tagNamePreference: {
61+
param: 'param',
62+
returns: 'return',
63+
},
64+
},
2265
},
2366
};

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"typescript.tsdk": "node_modules/typescript/lib"
3+
}

lib/cache/index.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
// @ts-check
1+
/**
2+
* @typedef {import('strapi-middleware-cache').CacheStore} CacheStore
3+
* @typedef {import('strapi-middleware-cache').MiddlewareCacheConfig} MiddlewareCacheConfig
4+
* @typedef {import('strapi-middleware-cache').Logger} Logger
5+
*/
26

37
const mapValues = require('lodash/mapValues');
48

@@ -14,15 +18,29 @@ function createStore(options, logger) {
1418

1519
return mapValues(
1620
{
21+
/**
22+
* @param {string} key
23+
*/
1724
async get(key) {
1825
return deserialize(await store.get(key));
1926
},
27+
/**
28+
* @param {string} key
29+
* @param {any} val
30+
* @param {number=} maxAge
31+
*/
2032
async set(key, val, maxAge = options.maxAge) {
2133
return await store.set(key, serialize(val), maxAge);
2234
},
35+
/**
36+
* @param {string} key
37+
*/
2338
async peek(key) {
2439
return deserialize(await store.peek(key));
2540
},
41+
/**
42+
* @param {string} key
43+
*/
2644
async del(key) {
2745
await store.del(key);
2846
},
@@ -34,13 +52,17 @@ function createStore(options, logger) {
3452
},
3553
},
3654
(fn) =>
55+
/**
56+
* @param {any[]} args
57+
*/
3758
async (...args) => {
3859
try {
3960
if (!store.ready) {
4061
logger.warn('the store is not ready');
4162
return null;
4263
}
4364
return await Promise.race([
65+
// @ts-ignore
4466
fn(...args),
4567
rejectAfterTimeout(options.cacheTimeout),
4668
]);

lib/cache/stores/mem.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1-
// @ts-check
1+
/**
2+
* @typedef {import('strapi-middleware-cache').Logger} Logger
3+
* @typedef {import('strapi-middleware-cache').MiddlewareCacheConfig} MiddlewareCacheConfig
4+
* @typedef {import('strapi-middleware-cache').InternalCacheStore} InternalCacheStore
5+
*/
26

37
const LRU = require('lru-cache');
48

59
/**
610
* @param {MiddlewareCacheConfig} options
7-
* @param {Logger} logger
811
* @return {InternalCacheStore}
912
*/
10-
function createMemStore(options, logger) {
13+
function createMemStore(options) {
1114
const cache = new LRU({ max: options.max, maxAge: options.maxAge });
1215

1316
return {

lib/cache/stores/redis.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
// @ts-check
1+
/**
2+
* @typedef {import('strapi-middleware-cache').Logger} Logger
3+
* @typedef {import('strapi-middleware-cache').MiddlewareCacheConfig} MiddlewareCacheConfig
4+
* @typedef {import('strapi-middleware-cache').InternalCacheStore} InternalCacheStore
5+
*/
26

37
const Redis = require('ioredis');
48
const lru = require('redis-lru');
@@ -9,7 +13,13 @@ const lru = require('redis-lru');
913
* @return {InternalCacheStore}
1014
*/
1115
function createRedisStore(options, logger) {
16+
/**
17+
* @param {string} key
18+
*/
1219
const prefix = (key) => `strapi-middleware-cache:${key}`;
20+
/**
21+
* @param {string} key
22+
*/
1323
const unprefix = (key) => key.replace(/^strapi-middleware-cache:/, '');
1424

1525
const client = new Redis(options.redisConfig);
@@ -28,7 +38,7 @@ function createRedisStore(options, logger) {
2838
logger.error(`redis connection failed`, error);
2939
});
3040

31-
client.on('reconnecting', (e) => {
41+
client.on('reconnecting', () => {
3242
reconnected = true;
3343
});
3444

lib/index.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
// @ts-check
1+
/**
2+
* @typedef {import('strapi-middleware-cache').MiddlewareCache} MiddlewareCache
3+
* @typedef {import('strapi-middleware-cache').UserMiddlewareCacheConfig} UserMiddlewareCacheConfig
4+
*/
25

36
const createStore = require('./cache');
47

@@ -52,7 +55,11 @@ const Cache = (strapi) => {
5255

5356
// --- Populate Koa Context with cache entry point
5457
if (options.withKoaContext) {
55-
strapi.app.use((ctx, next) => {
58+
/**
59+
* @param {any} ctx
60+
* @param {() => void} next
61+
*/
62+
const injectInKoaContext = (ctx, next) => {
5663
if (ctx.middleware) {
5764
ctx.middleware.cache = {
5865
store,
@@ -67,7 +74,9 @@ const Cache = (strapi) => {
6774
}
6875

6976
return next();
70-
});
77+
};
78+
79+
strapi.app.use(injectInKoaContext);
7180
}
7281

7382
// --- Populate Strapi Middleware with cache entry point

lib/utils/createClearCache.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
/**
2+
* @typedef {import('strapi-middleware-cache').CacheStore} CacheStore
3+
* @typedef {import('strapi-middleware-cache').MiddlewareCacheConfig} MiddlewareCacheConfig
4+
* @typedef {import('strapi-middleware-cache').GetCacheConfigByUidFn} GetCacheConfigByUidFn
5+
* @typedef {import('strapi-middleware-cache').ClearCacheFn} ClearCacheFn
6+
* @typedef {import('strapi-middleware-cache').ModelCacheConfig} ModelCacheConfig
7+
* @typedef {import('strapi-middleware-cache').ModelCacheParams} ModelCacheParams
8+
*/
9+
110
const getCacheConfRegExp = require('./getCacheConfRegExp');
211
const getRelatedModelsUid = require('./getRelatedModelsUid');
312

@@ -32,7 +41,14 @@ function createClearCache(store, options, getCacheConfigByUid) {
3241
}
3342
}
3443

44+
/**
45+
* @param {string} key
46+
*/
3547
const shouldDel = (key) => regExps.find((r) => r.test(key));
48+
49+
/**
50+
* @param {string} key
51+
*/
3652
const del = (key) => store.del(key);
3753

3854
await Promise.all(keys.filter(shouldDel).map(del));

lib/utils/createGetCacheConfig.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
/**
2+
* @typedef {import('strapi-middleware-cache').MiddlewareCacheConfig} MiddlewareCacheConfig
3+
* @typedef {import('strapi-middleware-cache').GetCacheConfigFn} GetCacheConfigFn
4+
* @typedef {import('strapi-middleware-cache').ModelCacheConfig} ModelCacheConfig
5+
* @typedef {import('strapi-middleware-cache').ModelCacheParams} ModelCacheParams
6+
*/
7+
18
/**
29
* @param {MiddlewareCacheConfig} options
310
* @return {GetCacheConfigFn}
@@ -6,9 +13,9 @@ function createGetCacheConfig(options) {
613
/**
714
* Get related ModelCacheConfig
815
*
9-
* @param {ModelCacheConfig} model
10-
* @param {ModelCacheParams} plugin
11-
* @return {ModelCacheConfig}
16+
* @param {string} model
17+
* @param {string=} plugin
18+
* @return {ModelCacheConfig | undefined}
1219
*/
1320
return function getCacheConfig(model, plugin) {
1421
return options.models.find((cacheConf) => {

lib/utils/createGetCacheConfigByUid.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
/**
2+
* @typedef {import('strapi-middleware-cache').GetCacheConfigFn} GetCacheConfigFn
3+
* @typedef {import('strapi-middleware-cache').GetCacheConfigByUidFn} GetCacheConfigByUidFn
4+
* @typedef {import('strapi-middleware-cache').ModelCacheConfig} ModelCacheConfig
5+
*/
6+
17
const resolveModelUidRegex = /^(application|plugins)::([^.]+).([a-z-]+)$/;
28

39
/**
@@ -13,7 +19,7 @@ function createGetCacheConfigByUid(getCacheConfig) {
1319
* - plugins::users-permissions.user
1420
*
1521
* @param {string} uid
16-
* @return {ModelCacheConfig}
22+
* @return {ModelCacheConfig | undefined}
1723
*/
1824
return function getCacheConfigByUid(uid) {
1925
const [, type, plugin, model] = resolveModelUidRegex.exec(uid) || [];

lib/utils/createLogger.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,34 @@
1+
/**
2+
* @typedef {import('strapi-middleware-cache').MiddlewareCacheConfig} MiddlewareCacheConfig
3+
* @typedef {import('strapi-middleware-cache').Logger} Logger
4+
*/
5+
16
/**
27
* @param {MiddlewareCacheConfig} options
3-
* @return {Logger}
48
*/
59
function createLogger(options) {
610
return {
11+
/**
12+
* @param {string} msg
13+
*/
714
info: (msg) => options.logs && strapi.log.info(`[cache] ${msg}`),
15+
/**
16+
* @param {string} msg
17+
*/
818
debug: (msg) => options.logs && strapi.log.debug(`[cache] ${msg}`),
19+
/**
20+
* @param {string} msg
21+
* @param {any[]} rest
22+
*/
923
warn: (msg, ...rest) =>
24+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
1025
options.logs && strapi.log.warn(`[cache] ${msg}`, ...rest),
26+
/**
27+
* @param {string} msg
28+
* @param {any[]} rest
29+
*/
1130
error: (msg, ...rest) =>
31+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
1232
options.logs && strapi.log.error(`[cache] ${msg}`, ...rest),
1333
};
1434
}

lib/utils/createPurge.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
/**
2+
* @typedef {import('strapi-middleware-cache').ClearCacheFn} ClearCacheFn
3+
* @typedef {import('strapi-middleware-cache').PurgeFn} PurgeFn
4+
* @typedef {import('strapi-middleware-cache').ModelCacheConfig} ModelCacheConfig
5+
* @typedef {import('koa').Middleware} Middleware
6+
*/
7+
18
/**
29
* @param {ClearCacheFn} clearCache
310
* @return {PurgeFn}
@@ -7,7 +14,7 @@ function createPurge(clearCache) {
714
* Creates a Koa middleware that busts the cache of a given model
815
*
916
* @param {ModelCacheConfig} cacheConf
10-
* @return {KoaRouteMiddleware}
17+
* @return {Middleware}
1118
*/
1219
return function purge(cacheConf) {
1320
return async function purgeMiddleware(ctx, next) {

lib/utils/createPurgeAdmin.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
1+
/**
2+
* @typedef {import('strapi-middleware-cache').ClearCacheFn} ClearCacheFn
3+
* @typedef {import('strapi-middleware-cache').GetCacheConfigByUidFn} GetCacheConfigByUidFn
4+
* @typedef {import('strapi-middleware-cache').PurgeAdminFn} PurgeAdminFn
5+
* @typedef {import('koa').Context} Context
6+
*/
7+
18
/**
29
* @param {ClearCacheFn} clearCache
310
* @param {GetCacheConfigByUidFn} getCacheConfigByUid
411
* @return {PurgeAdminFn}
512
*/
613
function createPurgeAdmin(clearCache, getCacheConfigByUid) {
14+
/**
15+
* @param {Context} ctx
16+
* @param {() => void | Promise<void>} next
17+
*/
718
return async function purgeAdmin(ctx, next) {
819
// uid:
920
// - application::sport.sport

lib/utils/createRecv.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
/**
2+
* @typedef {import('strapi-middleware-cache').CacheStore} CacheStore
3+
* @typedef {import('strapi-middleware-cache').MiddlewareCacheConfig} MiddlewareCacheConfig
4+
* @typedef {import('strapi-middleware-cache').Logger} Logger
5+
* @typedef {import('strapi-middleware-cache').RecvFn} RecvFn
6+
* @typedef {import('strapi-middleware-cache').ModelCacheConfig} ModelCacheConfig
7+
* @typedef {import('koa').Middleware} Middleware
8+
*/
9+
110
const chalk = require('chalk');
211
const crypto = require('crypto');
312
const generateCacheKey = require('./generateCacheKey');
@@ -13,7 +22,7 @@ function createRecv(store, options, logger) {
1322
* Creates a Koa middleware that receive cachable requests of a given model
1423
*
1524
* @param {ModelCacheConfig} cacheConf
16-
* @return {KoaRouteMiddleware}
25+
* @return {Middleware}
1726
*/
1827
return function recv(cacheConf) {
1928
return async function recvMiddleware(ctx, next) {

lib/utils/createRouter.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
const Router = require('koa-router');
22
const chalk = require('chalk');
33

4+
/**
5+
* @typedef {import('strapi-middleware-cache').MiddlewareCacheConfig} MiddlewareCacheConfig
6+
* @typedef {import('strapi-middleware-cache').Logger} Logger
7+
* @typedef {import('strapi-middleware-cache').CacheMiddlewares} CacheMiddlewares
8+
*/
9+
410
const routeExists = require('./routeExists');
511

612
const routeParamNameRegex = /:([^/]+)/g;

0 commit comments

Comments
 (0)