瀏覽代碼

fix(core): Support new object ref returned from plugin configuration fn

Fixes #2906
Michael Bromley 1 年之前
父節點
當前提交
45df738eb2

+ 23 - 0
packages/core/e2e/fixtures/test-plugins/with-new-config-object-reference.ts

@@ -0,0 +1,23 @@
+import { Query, Resolver } from '@nestjs/graphql';
+import { VendurePlugin } from '@vendure/core';
+
+/**
+ * https://github.com/vendure-ecommerce/vendure/issues/2906
+ */
+@VendurePlugin({
+    configuration: config => {
+        return {
+            ...config,
+            customFields: {
+                ...config.customFields,
+                Customer: [
+                    {
+                        name: 'testField',
+                        type: 'string',
+                    },
+                ],
+            },
+        };
+    },
+})
+export class WithNewConfigObjectReferencePlugin {}

+ 13 - 0
packages/core/e2e/plugin.e2e-spec.ts

@@ -14,6 +14,7 @@ import { TestAPIExtensionPlugin } from './fixtures/test-plugins/with-api-extensi
 import { TestPluginWithConfig } from './fixtures/test-plugins/with-config';
 import { PluginWithGlobalProviders } from './fixtures/test-plugins/with-global-providers';
 import { TestLazyExtensionPlugin } from './fixtures/test-plugins/with-lazy-api-extensions';
+import { WithNewConfigObjectReferencePlugin } from './fixtures/test-plugins/with-new-config-object-reference';
 import { TestPluginWithProvider } from './fixtures/test-plugins/with-provider';
 import { TestRestPlugin } from './fixtures/test-plugins/with-rest-controller';
 
@@ -30,6 +31,7 @@ describe('Plugins', () => {
             TestLazyExtensionPlugin,
             TestRestPlugin,
             PluginWithGlobalProviders,
+            WithNewConfigObjectReferencePlugin,
         ],
     });
 
@@ -52,6 +54,17 @@ describe('Plugins', () => {
         expect(configService.defaultLanguageCode).toBe(LanguageCode.zh);
     });
 
+    // https://github.com/vendure-ecommerce/vendure/issues/2906
+    it('handles plugins that return new config object references', async () => {
+        const configService = server.app.get(ConfigService);
+        expect(configService.customFields.Customer).toEqual([
+            {
+                name: 'testField',
+                type: 'string',
+            },
+        ]);
+    });
+
     it('extends the admin API', async () => {
         const result = await adminClient.query(gql`
             query {

+ 2 - 1
packages/core/src/bootstrap.ts

@@ -267,7 +267,8 @@ async function runPluginConfigurations(config: RuntimeVendureConfig): Promise<Ru
     for (const plugin of config.plugins) {
         const configFn = getConfigurationFunction(plugin);
         if (typeof configFn === 'function') {
-            config = await configFn(config);
+            const result = await configFn(config);
+            Object.assign(config, result);
         }
     }
     return config;