Skip to content

Commit

Permalink
Move extension config from array to map #847 #784
Browse files Browse the repository at this point in the history
  • Loading branch information
bpatrik committed Apr 26, 2024
1 parent c82abf0 commit 012fc1f
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 26 deletions.
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
"reflect-metadata": "0.1.13",
"sharp": "0.31.3",
"ts-node-iptc": "1.0.11",
"typeconfig": "2.2.15",
"typeconfig": "2.3.1",
"typeorm": "0.3.12",
"xml2js": "0.6.2"
},
Expand Down
4 changes: 2 additions & 2 deletions src/backend/model/extension/ExtensionConfig.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {IExtensionConfig} from './IExtension';
import {Config} from '../../../common/config/private/Config';
import {ServerExtensionsEntryConfig} from '../../../common/config/private/subconfigs/ServerExtensionsConfig';

export class ExtensionConfig<C> implements IExtensionConfig<C> {

Expand All @@ -8,8 +9,7 @@ export class ExtensionConfig<C> implements IExtensionConfig<C> {


public getConfig(): C {
const c = (Config.Extensions.extensions || [])
.find(e => e.path === this.extensionFolder);
const c = Config.Extensions.extensions[this.extensionFolder] as ServerExtensionsEntryConfig;

return c?.configs as C;
}
Expand Down
16 changes: 9 additions & 7 deletions src/backend/model/extension/ExtensionConfigTemplateLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,26 +92,28 @@ export class ExtensionConfigTemplateLoader {
}

const ePaths = this.extensionTemplates.map(et => et.folder);

// delete not existing extensions
config.Extensions.extensions = config.Extensions.extensions
.filter(ec => ePaths.indexOf(ec.path) !== -1);
for (const prop of config.Extensions.extensions.keys()) {
if (ePaths.indexOf(prop) > -1) {
continue;
}
config.Extensions.extensions.removeProperty(prop);
}


for (let i = 0; i < this.extensionTemplates.length; ++i) {
const ext = this.extensionTemplates[i];

let c = (config.Extensions.extensions || [])
.find(e => e.path === ext.folder);
let c = config.Extensions.extensions[ext.folder];

// set the new structure with the new def values
if (!c) {
c = new ServerExtensionsEntryConfig(ext.folder);
if (ext.template) {
c.configs = new ext.template();
}
// TODO: this does not hold if the order of the extensions mixes up.
// TODO: experiment with a map instead of an array
config.Extensions.extensions.push(c);
config.Extensions.extensions.addProperty(ext.folder, {type: ServerExtensionsEntryConfig}, c);
}

}
Expand Down
10 changes: 6 additions & 4 deletions src/backend/model/extension/ExtensionManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {SQLConnection} from '../database/SQLConnection';
import {ExtensionObject} from './ExtensionObject';
import {ExtensionDecoratorObject} from './ExtensionDecorator';
import * as util from 'util';
import {ServerExtensionsEntryConfig} from '../../../common/config/private/subconfigs/ServerExtensionsConfig';
// eslint-disable-next-line @typescript-eslint/no-var-requires
const exec = util.promisify(require('child_process').exec);

Expand Down Expand Up @@ -80,7 +81,7 @@ export class ExtensionManager implements IObjectManager {
extList.sort();


Logger.debug(LOG_TAG, 'Extensions found: ', JSON.stringify(Config.Extensions.extensions.map(ec => ec.path)));
Logger.debug(LOG_TAG, 'Extensions found: ', JSON.stringify(Config.Extensions.extensions.keys()));
}

private createUniqueExtensionObject(name: string, folder: string): IExtensionObject<unknown> {
Expand All @@ -99,11 +100,12 @@ export class ExtensionManager implements IObjectManager {

private async initExtensions() {

for (let i = 0; i < Config.Extensions.extensions.length; ++i) {
const extFolder = Config.Extensions.extensions[i].path;
for (const prop of Config.Extensions.extensions.keys()) {
const extConf: ServerExtensionsEntryConfig = Config.Extensions.extensions[prop] as ServerExtensionsEntryConfig;
const extFolder = extConf.path;
let extName = extFolder;

if (Config.Extensions.extensions[i].enabled === false) {
if (extConf.enabled === false) {
Logger.silly(LOG_TAG, `Skipping ${extFolder} initiation. Extension is disabled.`);
}
const extPath = path.join(ProjectPath.ExtensionFolder, extFolder);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* eslint-disable @typescript-eslint/no-inferrable-types */
import {ConfigProperty, SubConfigClass} from 'typeconfig/common';
import {ConfigMap, ConfigProperty, IConfigMap, SubConfigClass} from 'typeconfig/common';
import {ClientExtensionsConfig, ConfigPriority, TAGS} from '../../public/ClientConfig';
import {GenericConfigType} from 'typeconfig/src/GenericConfigType';

Expand Down Expand Up @@ -59,16 +59,14 @@ export class ServerExtensionsConfig extends ClientExtensionsConfig {
})
folder: string = 'extensions';

// TODO: this does not hold if the order of the extensions mixes up.
// TODO: experiment with a map instead of an array
@ConfigProperty({
arrayType: ServerExtensionsEntryConfig,
type: ConfigMap,
tags: {
name: $localize`Installed extensions`,
priority: ConfigPriority.advanced
}
})
extensions: ServerExtensionsEntryConfig[] = [];
extensions: IConfigMap<ServerExtensionsEntryConfig> = new ConfigMap();


@ConfigProperty({
Expand Down

0 comments on commit 012fc1f

Please sign in to comment.