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) => {