1
0
mirror of https://github.com/bpatrik/pigallery2.git synced 2025-01-18 04:58:59 +02:00

Fix default loading flakyness before first json load.

This commit is contained in:
Patrik J. Braun 2024-04-12 23:16:59 +02:00
parent 58d8a5043b
commit 3380fef63a
4 changed files with 48 additions and 8 deletions

14
package-lock.json generated
View File

@ -27,7 +27,7 @@
"reflect-metadata": "0.1.13", "reflect-metadata": "0.1.13",
"sharp": "0.31.3", "sharp": "0.31.3",
"ts-node-iptc": "1.0.11", "ts-node-iptc": "1.0.11",
"typeconfig": "2.2.11", "typeconfig": "2.2.13",
"typeorm": "0.3.12", "typeorm": "0.3.12",
"xml2js": "0.6.2" "xml2js": "0.6.2"
}, },
@ -20361,9 +20361,9 @@
} }
}, },
"node_modules/typeconfig": { "node_modules/typeconfig": {
"version": "2.2.11", "version": "2.2.13",
"resolved": "https://registry.npmjs.org/typeconfig/-/typeconfig-2.2.11.tgz", "resolved": "https://registry.npmjs.org/typeconfig/-/typeconfig-2.2.13.tgz",
"integrity": "sha512-Knj+1kbIJ4zOZlUm2TPSWZUoiOW4txrmPyf6oyuBhaDQDlGxpSL5jobF3vVV9mZElK1V3ZQVeTgvGaiDyeT8mQ==", "integrity": "sha512-eT9FqQVJTacuJELZ2XKN9s1phUnaceQd1NhzgTHZuULDWSOpcMTw8jRvg2Uyp14IRe9W9N8DOItz38QQJcwctQ==",
"dependencies": { "dependencies": {
"minimist": "1.2.8" "minimist": "1.2.8"
} }
@ -35280,9 +35280,9 @@
} }
}, },
"typeconfig": { "typeconfig": {
"version": "2.2.11", "version": "2.2.13",
"resolved": "https://registry.npmjs.org/typeconfig/-/typeconfig-2.2.11.tgz", "resolved": "https://registry.npmjs.org/typeconfig/-/typeconfig-2.2.13.tgz",
"integrity": "sha512-Knj+1kbIJ4zOZlUm2TPSWZUoiOW4txrmPyf6oyuBhaDQDlGxpSL5jobF3vVV9mZElK1V3ZQVeTgvGaiDyeT8mQ==", "integrity": "sha512-eT9FqQVJTacuJELZ2XKN9s1phUnaceQd1NhzgTHZuULDWSOpcMTw8jRvg2Uyp14IRe9W9N8DOItz38QQJcwctQ==",
"requires": { "requires": {
"minimist": "1.2.8" "minimist": "1.2.8"
} }

View File

@ -54,7 +54,7 @@
"reflect-metadata": "0.1.13", "reflect-metadata": "0.1.13",
"sharp": "0.31.3", "sharp": "0.31.3",
"ts-node-iptc": "1.0.11", "ts-node-iptc": "1.0.11",
"typeconfig": "2.2.11", "typeconfig": "2.2.13",
"typeorm": "0.3.12", "typeorm": "0.3.12",
"xml2js": "0.6.2" "xml2js": "0.6.2"
}, },

View File

@ -3,6 +3,9 @@ import {PrivateConfigClass} from '../../../common/config/private/PrivateConfigCl
import {ConfigClassBuilder} from 'typeconfig/node'; import {ConfigClassBuilder} from 'typeconfig/node';
import {ExtensionConfigTemplateLoader} from './ExtensionConfigTemplateLoader'; import {ExtensionConfigTemplateLoader} from './ExtensionConfigTemplateLoader';
import {NotificationManager} from '../NotifocationManager'; import {NotificationManager} from '../NotifocationManager';
import {ServerConfig} from '../../../common/config/private/PrivateConfig';
import {ConfigClassOptions} from 'typeconfig/src/decorators/class/IConfigClass';
import * as fs from 'fs';
const LOG_TAG = '[ExtensionConfigWrapper]'; const LOG_TAG = '[ExtensionConfigWrapper]';
@ -16,6 +19,12 @@ export class ExtensionConfigWrapper {
const pc = ConfigClassBuilder.attachPrivateInterface(new PrivateConfigClass()); const pc = ConfigClassBuilder.attachPrivateInterface(new PrivateConfigClass());
ExtensionConfigTemplateLoader.Instance.loadExtensionTemplates(pc); ExtensionConfigTemplateLoader.Instance.loadExtensionTemplates(pc);
try { try {
// make sure the config file exists by the time we load it.
// TODO: remove this once typeconfig is fixed and can properly load defaults in arrays
if (!fs.existsSync((pc.__options as ConfigClassOptions<ServerConfig>).configPath)) {
await pc.save();
}
await pc.load(); // loading the basic configs, but we do not know the extension config hierarchy yet await pc.load(); // loading the basic configs, but we do not know the extension config hierarchy yet
} catch (e) { } catch (e) {
@ -34,6 +43,11 @@ export class ExtensionConfigWrapper {
const pc = ConfigClassBuilder.attachPrivateInterface(new PrivateConfigClass()); const pc = ConfigClassBuilder.attachPrivateInterface(new PrivateConfigClass());
ExtensionConfigTemplateLoader.Instance.loadExtensionTemplates(pc); ExtensionConfigTemplateLoader.Instance.loadExtensionTemplates(pc);
try { try {
// make sure the config file exists by the time we load it.
// TODO: remove this once typeconfig is fixed and can properly load defaults in arrays
if (!fs.existsSync((pc.__options as ConfigClassOptions<ServerConfig>).configPath)) {
pc.saveSync();
}
pc.loadSync(); // loading the basic configs, but we do not know the extension config hierarchy yet pc.loadSync(); // loading the basic configs, but we do not know the extension config hierarchy yet
} catch (e) { } catch (e) {

View File

@ -0,0 +1,26 @@
import {expect} from 'chai';
import {ExtensionConfigWrapper} from '../../../../../src/backend/model/extension/ExtensionConfigWrapper';
import {TAGS} from '../../../../../src/common/config/public/ClientConfig';
// to help WebStorm to handle the test cases
declare let describe: any;
declare const after: any;
declare const before: any;
declare const it: any;
describe('ExtensionConfigWrapper', () => {
it('should load original config multiple times with the same result', async () => {
const get = async () => JSON.parse(JSON.stringify((await ExtensionConfigWrapper.original()).toJSON({
attachState: true,
attachVolatile: true,
skipTags: {secret: true} as TAGS
})));
const a = await get();
const b = await get();
expect(b).to.deep.equal(a);
const c = await get();
expect(c).to.deep.equal(a);
});
});