better code: make variable plugins readonly for other sources
Massimo Melina committed
Jan 12, 2022 at 13:04 UTC
1d72e4ba9b10bdfcb59b19f103e2dea0cc9176bd
3 files changed
+10
-7
src/frontEndApis.ts
+3
-4
@@ -1,9 +1,8 @@
1
import { ApiHandlers } from './apis'
2
-import { plugins } from './plugins'
2
+import { mapPlugins } from './plugins'
3
import { PLUGINS_PUB_URI } from './const'
4
import * as api_file_list from './api.file_list'
5
import * as api_auth from './api.auth'
6
-import _ from 'lodash'
6
import { setConfig } from './config'
7
8
export const frontEndApis: ApiHandlers = {
@@ -13,9 +12,9 @@ export const frontEndApis: ApiHandlers = {
12
...api_auth,
13
14
async extras_to_load() {
16
- const css = _.map(plugins, (plug,k) =>
15
+ const css = mapPlugins((plug,k) =>
16
plug.frontend_css?.map(f => PLUGINS_PUB_URI + k + '/' + f)).flat().filter(Boolean)
18
- const js = _.map(plugins, (plug,k) =>
17
+ const js = mapPlugins((plug,k) =>
18
plug.frontend_js?.map(f => PLUGINS_PUB_URI + k + '/' + f)).flat().filter(Boolean)
19
return { css, js }
20
},
src/misc.ts
+2
-2
@@ -24,10 +24,10 @@ export function prefix(pre:string, v:string|number, post:string='') {
24
}
25
26
export function setHidden(dest: object, src:object) {
27
- Object.defineProperties(dest, objSameKeys(src, value => ({ enumerable:false, value })))
27
+ Object.defineProperties(dest, objSameKeys(src as any, value => ({ enumerable:false, value })))
28
}
29
30
-export function objSameKeys(src: object, newValue:(value:any,key:string)=>any) {
30
+export function objSameKeys<T,R>(src: Record<string,T>, newValue:(value:T,key:string)=>R) {
31
return Object.fromEntries(Object.entries(src).map(([k,v]) => [k, newValue(v,k)]))
32
}
33
src/plugins.ts
+5
-1
@@ -10,7 +10,11 @@ import { getOrSet, onProcessExit, wantArray } from './misc'
10
11
const PATH = 'plugins'
12
13
-export const plugins: Record<string, Plugin> = {}
13
+const plugins: Record<string, Plugin> = {}
14
+
15
+export function mapPlugins<T>(cb:(plugin:Readonly<Plugin>, pluginKey:string)=> T) {
16
+ return _.map(plugins, cb)
17
+}
18
19
export function pluginsMiddleware(): Koa.Middleware {
20
return async (ctx, next) => {