From fc3c0ba98a5c594acaccfbc693d1edf335df481d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 21:33:19 +0000 Subject: [PATCH 01/19] @kkerti has signed the CLA in vendure-ecommerce/vendure#3187 --- license/signatures/version1/cla.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/license/signatures/version1/cla.json b/license/signatures/version1/cla.json index 0d5409580c..8a7650cabb 100644 --- a/license/signatures/version1/cla.json +++ b/license/signatures/version1/cla.json @@ -279,6 +279,14 @@ "created_at": "2024-10-31T08:42:52Z", "repoId": 136938012, "pullRequestNo": 3174 + }, + { + "name": "kkerti", + "id": 47832952, + "comment_id": 2458191015, + "created_at": "2024-11-05T21:33:05Z", + "repoId": 136938012, + "pullRequestNo": 3187 } ] -} +} \ No newline at end of file From a3dc427c4d76714660bdaba55b273fddf633b435 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 10:15:48 +0000 Subject: [PATCH 02/19] @shingoaoyama1 has signed the CLA in vendure-ecommerce/vendure#3192 --- license/signatures/version1/cla.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/license/signatures/version1/cla.json b/license/signatures/version1/cla.json index 8a7650cabb..f8f21b3f32 100644 --- a/license/signatures/version1/cla.json +++ b/license/signatures/version1/cla.json @@ -287,6 +287,14 @@ "created_at": "2024-11-05T21:33:05Z", "repoId": 136938012, "pullRequestNo": 3187 + }, + { + "name": "shingoaoyama1", + "id": 17615101, + "comment_id": 2459213307, + "created_at": "2024-11-06T10:15:37Z", + "repoId": 136938012, + "pullRequestNo": 3192 } ] } \ No newline at end of file From 961297dcdbd19ca37e0b69f1a8af2d49404a8baf Mon Sep 17 00:00:00 2001 From: Martijn Date: Thu, 7 Nov 2024 14:37:18 +0100 Subject: [PATCH 03/19] feat(payments-plugin): prevent false positive logging (#3195) --- packages/payments-plugin/src/mollie/mollie.service.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/payments-plugin/src/mollie/mollie.service.ts b/packages/payments-plugin/src/mollie/mollie.service.ts index 995fe7b495..0dbcbd3908 100644 --- a/packages/payments-plugin/src/mollie/mollie.service.ts +++ b/packages/payments-plugin/src/mollie/mollie.service.ts @@ -264,7 +264,12 @@ export class MollieService { `Unable to find order ${mollieOrder.orderNumber}, unable to process Mollie order ${mollieOrder.id}`, ); } + if (mollieOrder.status === OrderStatus.expired) { + // Expired is fine, a customer can retry the payment later + return; + } if (order.orderPlacedAt) { + // Verify if the Vendure order isn't already paid for, and log if so const paymentWithSameTransactionId = order.payments.find( p => p.transactionId === mollieOrder.id && p.state === 'Settled', ); @@ -293,10 +298,6 @@ export class MollieService { return; } const amount = amountToCents(mollieOrder.amount); - if (mollieOrder.status === OrderStatus.expired) { - // Expired is fine, a customer can retry the payment later - return; - } if (mollieOrder.status === OrderStatus.paid) { // Paid is only used by 1-step payments without Authorized state. This will settle immediately await this.addPayment(ctx, order, amount, mollieOrder, paymentMethod.code, 'Settled'); From 478989e70c4c79fda174419387840f7fbc2e3607 Mon Sep 17 00:00:00 2001 From: "Mitch J." Date: Fri, 8 Nov 2024 03:49:44 -0500 Subject: [PATCH 04/19] fix(admin-ui): Fix variant detail quick-jump component (#3189) --- .../product-variant-quick-jump.component.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/admin-ui/src/lib/catalog/src/components/product-variant-quick-jump/product-variant-quick-jump.component.ts b/packages/admin-ui/src/lib/catalog/src/components/product-variant-quick-jump/product-variant-quick-jump.component.ts index a72ea26816..6f2421153c 100644 --- a/packages/admin-ui/src/lib/catalog/src/components/product-variant-quick-jump/product-variant-quick-jump.component.ts +++ b/packages/admin-ui/src/lib/catalog/src/components/product-variant-quick-jump/product-variant-quick-jump.component.ts @@ -31,14 +31,17 @@ export class ProductVariantQuickJumpComponent implements OnInit { @Input() productId: string; selectedVariantId: string | undefined; variants$: Observable['variants']>; - constructor(private dataService: DataService, private router: Router) {} + constructor( + private dataService: DataService, + private router: Router, + ) {} ngOnInit() { this.variants$ = this.dataService .query(GetProductVariantsQuickJumpDocument, { id: this.productId, }) - .mapSingle(data => data.product?.variants ?? []); + .mapStream(data => data.product?.variants ?? []); } searchFn = ( From a8938f409903569758c6ba776f2a6ca223f65001 Mon Sep 17 00:00:00 2001 From: "Mitch J." Date: Fri, 8 Nov 2024 04:09:34 -0500 Subject: [PATCH 05/19] fix(testing): Make test client's `fileUploadMutation` work for more input variable shapes (#3188) --- packages/testing/package.json | 3 +- packages/testing/src/simple-graphql-client.ts | 67 ++++++++--- .../src/utils/create-upload-post-data.spec.ts | 70 ++++++++++-- .../src/utils/create-upload-post-data.ts | 105 +++++++++++++----- packages/testing/vitest.config.mts | 18 +++ 5 files changed, 208 insertions(+), 55 deletions(-) create mode 100644 packages/testing/vitest.config.mts diff --git a/packages/testing/package.json b/packages/testing/package.json index 37c845ef52..11999c1068 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -30,7 +30,8 @@ "build": "tsc -p ./tsconfig.build.json", "watch": "tsc -p ./tsconfig.build.json -w", "lint": "eslint --fix .", - "ci": "npm run build" + "ci": "npm run build", + "test": "vitest --config vitest.config.mts --run" }, "bugs": { "url": "https://github.com/vendure-ecommerce/vendure/issues" diff --git a/packages/testing/src/simple-graphql-client.ts b/packages/testing/src/simple-graphql-client.ts index 044454c937..cb8010b85e 100644 --- a/packages/testing/src/simple-graphql-client.ts +++ b/packages/testing/src/simple-graphql-client.ts @@ -44,7 +44,10 @@ export class SimpleGraphQLClient { 'Apollo-Require-Preflight': 'true', }; - constructor(private vendureConfig: Required, private apiUrl: string = '') {} + constructor( + private vendureConfig: Required, + private apiUrl: string = '', + ) {} /** * @description @@ -136,15 +139,13 @@ export class SimpleGraphQLClient { async asUserWithCredentials(username: string, password: string) { // first log out as the current user if (this.authToken) { - await this.query( - gql` - mutation { - logout { - success - } + await this.query(gql` + mutation { + logout { + success } - `, - ); + } + `); } const result = await this.query(LOGIN, { username, password }); if (result.login.channels?.length === 1) { @@ -170,15 +171,13 @@ export class SimpleGraphQLClient { * Logs out so that the client is then treated as an anonymous user. */ async asAnonymousUser() { - await this.query( - gql` - mutation { - logout { - success - } + await this.query(gql` + mutation { + logout { + success } - `, - ); + } + `); } private async makeGraphQlRequest( @@ -214,7 +213,36 @@ export class SimpleGraphQLClient { * Perform a file upload mutation. * * Upload spec: https://github.com/jaydenseric/graphql-multipart-request-spec + * * Discussion of issue: https://github.com/jaydenseric/apollo-upload-client/issues/32 + * + * @param mutation - GraphQL document for a mutation that has input files + * with the Upload type. + * @param filePaths - Array of paths to files, in the same order that the + * corresponding Upload fields appear in the variables for the mutation. + * @param mapVariables - Function that must return the variables for the + * mutation, with `null` as the value for each `Upload` field. + * + * @example + * // Testing a custom mutation: + * const result = await client.fileUploadMutation({ + * mutation: gql` + * mutation AddSellerImages($input: AddSellerImagesInput!) { + * addSellerImages(input: $input) { + * id + * name + * } + * } + * `, + * filePaths: ['./images/profile-picture.jpg', './images/logo.png'], + * mapVariables: () => ({ + * name: "George's Pans", + * profilePicture: null, // corresponds to filePaths[0] + * branding: { + * logo: null // corresponds to filePaths[1] + * } + * }) + * }); */ async fileUploadMutation(options: { mutation: DocumentNode; @@ -256,7 +284,10 @@ export class SimpleGraphQLClient { } export class ClientError extends Error { - constructor(public response: any, public request: any) { + constructor( + public response: any, + public request: any, + ) { super(ClientError.extractMessage(response)); } private static extractMessage(response: any): string { diff --git a/packages/testing/src/utils/create-upload-post-data.spec.ts b/packages/testing/src/utils/create-upload-post-data.spec.ts index d139b2ada8..3df46ed9a0 100644 --- a/packages/testing/src/utils/create-upload-post-data.spec.ts +++ b/packages/testing/src/utils/create-upload-post-data.spec.ts @@ -1,4 +1,5 @@ import gql from 'graphql-tag'; +import { describe, it, assert } from 'vitest'; import { createUploadPostData } from './create-upload-post-data'; @@ -8,8 +9,16 @@ describe('createUploadPostData()', () => { gql` mutation CreateAssets($input: [CreateAssetInput!]!) { createAssets(input: $input) { - id - name + ... on Asset { + id + name + } + ... on MimeTypeError { + errorCode + message + fileName + mimeType + } } } `, @@ -19,15 +28,18 @@ describe('createUploadPostData()', () => { }), ); - expect(result.operations.operationName).toBe('CreateAssets'); - expect(result.operations.variables).toEqual({ + assert.equal(result.operations.operationName, 'CreateAssets'); + assert.deepEqual(result.operations.variables, { input: [{ file: null }, { file: null }], }); - expect(result.map).toEqual({ + assert.deepEqual(result.map, { 0: 'variables.input.0.file', 1: 'variables.input.1.file', }); - expect(result.filePaths).toEqual([{ name: '0', file: 'a.jpg' }, { name: '1', file: 'b.jpg' }]); + assert.deepEqual(result.filePaths, [ + { name: '0', file: 'a.jpg' }, + { name: '1', file: 'b.jpg' }, + ]); }); it('creates correct output for importProducts mutation', () => { @@ -36,7 +48,7 @@ describe('createUploadPostData()', () => { mutation ImportProducts($input: Upload!) { importProducts(csvFile: $input) { errors - importedCount + imported } } `, @@ -44,11 +56,47 @@ describe('createUploadPostData()', () => { () => ({ csvFile: null }), ); - expect(result.operations.operationName).toBe('ImportProducts'); - expect(result.operations.variables).toEqual({ csvFile: null }); - expect(result.map).toEqual({ + assert.equal(result.operations.operationName, 'ImportProducts'); + assert.deepEqual(result.operations.variables, { csvFile: null }); + assert.deepEqual(result.map, { 0: 'variables.csvFile', }); - expect(result.filePaths).toEqual([{ name: '0', file: 'data.csv' }]); + assert.deepEqual(result.filePaths, [{ name: '0', file: 'data.csv' }]); + }); + + it('creates correct output for a mutation with nested Upload and non-Upload fields', () => { + // this is not meant to be a real mutation; it's just an example of one + // that could exist + const result = createUploadPostData( + gql` + mutation ComplexUpload($input: ComplexTypeIncludingUpload!) { + complexUpload(input: $input) { + results + errors + } + } + `, + // the two file paths that are specified must appear in the same + // order as the `null` variables that stand in for the Upload fields + ['logo.png', 'profilePicture.jpg'], + () => ({ name: 'George', sellerLogo: null, someOtherThing: { profilePicture: null } }), + ); + + assert.equal(result.operations.operationName, 'ComplexUpload'); + assert.deepEqual(result.operations.variables, { + name: 'George', + sellerLogo: null, + someOtherThing: { profilePicture: null }, + }); + // `result.map` should map `result.filePaths` onto the Upload fields + // implied by `variables` + assert.deepEqual(result.map, { + 0: 'variables.sellerLogo', + 1: 'variables.someOtherThing.profilePicture', + }); + assert.deepEqual(result.filePaths, [ + { name: '0', file: 'logo.png' }, + { name: '1', file: 'profilePicture.jpg' }, + ]); }); }); diff --git a/packages/testing/src/utils/create-upload-post-data.ts b/packages/testing/src/utils/create-upload-post-data.ts index f52e760ea9..f1c66cf6fb 100644 --- a/packages/testing/src/utils/create-upload-post-data.ts +++ b/packages/testing/src/utils/create-upload-post-data.ts @@ -1,27 +1,72 @@ import { DocumentNode, Kind, OperationDefinitionNode, print } from 'graphql'; -export interface FilePlaceholder { - file: null; -} export interface UploadPostData { + /** + * Data from a GraphQL document that takes the Upload type as input + */ operations: { operationName: string; variables: V; query: string; }; + /** + * A map from index values to variable paths. Maps files in the `filePaths` + * array to fields with the Upload type in the GraphQL mutation input. + * + * If this was the GraphQL mutation input type: + * ```graphql + * input ImageReceivingInput { + * bannerImage: Upload! + * logo: Upload! + * } + * ``` + * + * And this was the GraphQL mutation: + * ```graphql + * addSellerImages(input: ImageReceivingInput!): Seller + * ``` + * + * Then this would be the value for `map`: + * ```js + * { + * 0: 'variables.input.bannerImage', + * 1: 'variables.input.logo' + * } + * ``` + */ map: { [index: number]: string; }; + + /** + * Array of file paths. Mapped to a GraphQL mutation input variable by + * `map`. + */ filePaths: Array<{ + /** + * Index of the file path as a string. + */ name: string; + /** + * The actual file path + */ file: string; }>; } /** - * Creates a data structure which can be used to mae a curl request to upload files to a mutation using - * the Upload type. + * Creates a data structure which can be used to make a POST request to upload + * files to a mutation using the Upload type. + * + * @param mutation - The GraphQL document for a mutation that takes an Upload + * type as an input + * @param filePaths - Either a single path or an array of paths to the files + * that should be uploaded + * @param mapVariables - A function that will receive `filePaths` and return an + * object containing the input variables for the mutation, where every field + * with the Upload type has the value `null`. + * @returns an UploadPostData object. */ export function createUploadPostData

( mutation: DocumentNode, @@ -40,9 +85,7 @@ export function createUploadPostData

( variables, query: print(mutation), }, - map: filePathsArray.reduce((output, filePath, i) => { - return { ...output, [i.toString()]: objectPath(variables, i).join('.') }; - }, {} as Record), + map: objectPath(variables).reduce((acc, path, i) => ({ ...acc, [i.toString()]: path }), {}), filePaths: filePathsArray.map((filePath, i) => ({ name: i.toString(), file: filePath, @@ -51,23 +94,35 @@ export function createUploadPostData

( return postData; } -function objectPath(variables: any, i: number): Array { - const path: Array = ['variables']; - let current = variables; - while (current !== null) { - const props = Object.getOwnPropertyNames(current); - if (props) { - const firstProp = props[0]; - const val = current[firstProp]; - if (Array.isArray(val)) { - path.push(firstProp); - path.push(i); - current = val[0]; - } else { - path.push(firstProp); - current = val; +/** + * This function visits each property in the `variables` object, including + * nested ones, and returns the path of each null value, in order. + * + * @example + * // variables: + * { + * input: { + * name: "George's Pots and Pans", + * logo: null, + * user: { + * profilePicture: null + * } + * } + * } + * // return value: + * ['variables.input.logo', 'variables.input.user.profilePicture'] + */ +function objectPath(variables: any): string[] { + const pathsToNulls: string[] = []; + const checkValue = (pathSoFar: string, value: any) => { + if (value === null) { + pathsToNulls.push(pathSoFar); + } else if (typeof value === 'object') { + for (const key of Object.getOwnPropertyNames(value)) { + checkValue(`${pathSoFar}.${key}`, value[key]); } } - } - return path; + }; + checkValue('variables', variables); + return pathsToNulls; } diff --git a/packages/testing/vitest.config.mts b/packages/testing/vitest.config.mts new file mode 100644 index 0000000000..f97b180653 --- /dev/null +++ b/packages/testing/vitest.config.mts @@ -0,0 +1,18 @@ +import swc from 'unplugin-swc'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + plugins: [ + // SWC required to support decorators used in test plugins + // See https://github.com/vitest-dev/vitest/issues/708#issuecomment-1118628479 + // Vite plugin + swc.vite({ + jsc: { + transform: { + // See https://github.com/vendure-ecommerce/vendure/issues/2099 + useDefineForClassFields: false, + }, + }, + }), + ], +}); From 61d808b6a678192e053c1ef9962ce719914eca0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20Kerti?= <47832952+kkerti@users.noreply.github.com> Date: Fri, 8 Nov 2024 10:45:50 +0100 Subject: [PATCH 06/19] fix(admin-ui): Make registerPageTab work on 'order-list' location (#3187) --- packages/admin-ui/src/lib/order/src/order.routes.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/admin-ui/src/lib/order/src/order.routes.ts b/packages/admin-ui/src/lib/order/src/order.routes.ts index 9295260d63..770a02218d 100644 --- a/packages/admin-ui/src/lib/order/src/order.routes.ts +++ b/packages/admin-ui/src/lib/order/src/order.routes.ts @@ -7,7 +7,6 @@ export const createRoutes = (pageService: PageService): Route[] => [ { path: '', component: PageComponent, - pathMatch: 'full', data: { locationId: 'order-list', breadcrumb: _('breadcrumb.orders'), From 76d66c6d1c5b19fb242d3b03a712533eb029faea Mon Sep 17 00:00:00 2001 From: jyling Date: Fri, 8 Nov 2024 18:31:55 +0800 Subject: [PATCH 07/19] fix(admin-ui): Fix incorrect type when dealing with numeric value in list (#3094) Fixes #3093 --- .../dynamic-form-input/dynamic-form-input.component.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/admin-ui/src/lib/core/src/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.ts b/packages/admin-ui/src/lib/core/src/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.ts index b60b6dc724..891c19b8fc 100644 --- a/packages/admin-ui/src/lib/core/src/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.ts +++ b/packages/admin-ui/src/lib/core/src/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.ts @@ -187,6 +187,12 @@ export class DynamicFormInputComponent if (this.listItems) { for (const item of this.listItems) { if (item.componentRef) { + const { value } = item.control; + const { type } = item.componentRef.instance.config || {}; + // fix a bug where the list item of string turns into number which lead to unexpected behavior + if (typeof value === 'number' && type === 'string') { + item.control.setValue(item.control.value.toString(), { emitEvent: false }); + } this.updateBindings(changes, item.componentRef); } } From 5e9e1d62a7e2db13f191739459f69d5f89658cbe Mon Sep 17 00:00:00 2001 From: Lacey Pevey <7490308+pevey@users.noreply.github.com> Date: Fri, 8 Nov 2024 21:24:13 -0600 Subject: [PATCH 08/19] Fix minor typo in docs: "now" to "not" --- docs/docs/reference/typescript-api/job-queue/job.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/reference/typescript-api/job-queue/job.md b/docs/docs/reference/typescript-api/job-queue/job.md index 39401089ae..fca120437a 100644 --- a/docs/docs/reference/typescript-api/job-queue/job.md +++ b/docs/docs/reference/typescript-api/job-queue/job.md @@ -14,7 +14,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; A Job represents a piece of work to be run in the background, i.e. outside the request-response cycle. -It is intended to be used for long-running work triggered by API requests. Jobs should now generally +It is intended to be used for long-running work triggered by API requests. Jobs should not generally be directly instantiated. Rather, the JobQueue `add()` method should be used to create and add a new Job to a queue. From 08fdc453fd80e472739664ec5515e41e2237612c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 9 Nov 2024 10:08:10 +0000 Subject: [PATCH 09/19] @agoransson has signed the CLA in vendure-ecommerce/vendure#3205 --- license/signatures/version1/cla.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/license/signatures/version1/cla.json b/license/signatures/version1/cla.json index f8f21b3f32..3ba5c3adb7 100644 --- a/license/signatures/version1/cla.json +++ b/license/signatures/version1/cla.json @@ -295,6 +295,14 @@ "created_at": "2024-11-06T10:15:37Z", "repoId": 136938012, "pullRequestNo": 3192 + }, + { + "name": "agoransson", + "id": 487002, + "comment_id": 2466157456, + "created_at": "2024-11-09T10:08:00Z", + "repoId": 136938012, + "pullRequestNo": 3205 } ] } \ No newline at end of file From 19d9f2afc2cbfc14263c1d39a6590b2a053f1969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20G=C3=B6ransson?= Date: Sat, 9 Nov 2024 13:02:18 +0100 Subject: [PATCH 10/19] docs: Corrected a small typo of ProductVariantSelectorComponent. (#3205) --- .../components/product-variant-selector-component.md | 2 +- .../product-variant-selector.component.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/reference/admin-ui-api/components/product-variant-selector-component.md b/docs/docs/reference/admin-ui-api/components/product-variant-selector-component.md index 735f7678a6..96a1746ddd 100644 --- a/docs/docs/reference/admin-ui-api/components/product-variant-selector-component.md +++ b/docs/docs/reference/admin-ui-api/components/product-variant-selector-component.md @@ -19,7 +19,7 @@ A component for selecting product variants via an autocomplete-style select inpu ```HTML + (productSelected)="selectResult($event)"> ``` ```ts title="Signature" diff --git a/packages/admin-ui/src/lib/core/src/shared/components/product-variant-selector/product-variant-selector.component.ts b/packages/admin-ui/src/lib/core/src/shared/components/product-variant-selector/product-variant-selector.component.ts index bf16b701b4..56b2f1c30c 100644 --- a/packages/admin-ui/src/lib/core/src/shared/components/product-variant-selector/product-variant-selector.component.ts +++ b/packages/admin-ui/src/lib/core/src/shared/components/product-variant-selector/product-variant-selector.component.ts @@ -13,7 +13,7 @@ import { DataService } from '../../../data/providers/data.service'; * @example * ```HTML * + * (productSelected)="selectResult($event)"> * ``` * * @docsCategory components From f61e07026cc4104f4e0adff0636bcaa8347703ad Mon Sep 17 00:00:00 2001 From: Michael Bromley Date: Mon, 11 Nov 2024 10:23:10 +0100 Subject: [PATCH 11/19] Revert "Fix minor typo in docs: "now" to "not"" This reverts commit 5e9e1d62a7e2db13f191739459f69d5f89658cbe. --- docs/docs/reference/typescript-api/job-queue/job.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/reference/typescript-api/job-queue/job.md b/docs/docs/reference/typescript-api/job-queue/job.md index fca120437a..39401089ae 100644 --- a/docs/docs/reference/typescript-api/job-queue/job.md +++ b/docs/docs/reference/typescript-api/job-queue/job.md @@ -14,7 +14,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; A Job represents a piece of work to be run in the background, i.e. outside the request-response cycle. -It is intended to be used for long-running work triggered by API requests. Jobs should not generally +It is intended to be used for long-running work triggered by API requests. Jobs should now generally be directly instantiated. Rather, the JobQueue `add()` method should be used to create and add a new Job to a queue. From 7324bb3a18c07d006c022c4cff1ca90557d39549 Mon Sep 17 00:00:00 2001 From: Philipp Sonntag <31292378+sonntag-philipp@users.noreply.github.com> Date: Thu, 14 Nov 2024 09:47:50 +0100 Subject: [PATCH 12/19] fix(core): Added deprecation notices to the old refund input fields (#3119) + Added documentation to the new refund amount value --- .../api/schema/admin-api/order.api.graphql | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/packages/core/src/api/schema/admin-api/order.api.graphql b/packages/core/src/api/schema/admin-api/order.api.graphql index 1dea28d374..1f92d9a315 100644 --- a/packages/core/src/api/schema/admin-api/order.api.graphql +++ b/packages/core/src/api/schema/admin-api/order.api.graphql @@ -111,14 +111,12 @@ input CancelOrderInput { } input RefundOrderInput { - lines: [OrderLineInput!]! - shipping: Money! - adjustment: Money! + lines: [OrderLineInput!] @deprecated(reason: "Use the `amount` field instead") + shipping: Money @deprecated(reason: "Use the `amount` field instead") + adjustment: Money @deprecated(reason: "Use the `amount` field instead") """ - If an amount is specified, this value will be used to create a Refund rather than calculating the - amount automatically. This was added in v2.2 and will be the preferred way to specify the refund - amount in the future. The `lines`, `shipping` and `adjustment` fields will likely be removed in a future - version. + The amount to be refunded to this particular payment. This was introduced in v2.2.0 as the preferred way to specify the refund amount. + Can be as much as the total amount of the payment minus the sum of all previous refunds. """ amount: Money paymentId: ID! @@ -410,13 +408,13 @@ type ManualPaymentStateError implements ErrorResult { union TransitionOrderToStateResult = Order | OrderStateTransitionError union SettlePaymentResult = - Payment + | Payment | SettlePaymentError | PaymentStateTransitionError | OrderStateTransitionError union CancelPaymentResult = Payment | CancelPaymentError | PaymentStateTransitionError union AddFulfillmentToOrderResult = - Fulfillment + | Fulfillment | EmptyOrderLineSelectionError | ItemsAlreadyFulfilledError | InsufficientStockOnHandError @@ -424,14 +422,14 @@ union AddFulfillmentToOrderResult = | FulfillmentStateTransitionError | CreateFulfillmentError union CancelOrderResult = - Order + | Order | EmptyOrderLineSelectionError | QuantityTooGreatError | MultipleOrderError | CancelActiveOrderError | OrderStateTransitionError union RefundOrderResult = - Refund + | Refund | QuantityTooGreatError | NothingToRefundError | OrderStateTransitionError @@ -445,7 +443,7 @@ union SettleRefundResult = Refund | RefundStateTransitionError union TransitionFulfillmentToStateResult = Fulfillment | FulfillmentStateTransitionError union TransitionPaymentToStateResult = Payment | PaymentStateTransitionError union ModifyOrderResult = - Order + | Order | NoChangesSpecifiedError | OrderModificationStateError | PaymentMethodMissingError From 71f85d27fad8e1efa2c7037b3d1dca4ec611bf58 Mon Sep 17 00:00:00 2001 From: Daniel Biegler Date: Thu, 14 Nov 2024 15:24:53 +0100 Subject: [PATCH 13/19] fix(core): Fix returning stale data in Role Update Event (#3154) --- packages/core/src/service/services/role.service.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/core/src/service/services/role.service.ts b/packages/core/src/service/services/role.service.ts index f551de8bdb..1a1d9f66d6 100644 --- a/packages/core/src/service/services/role.service.ts +++ b/packages/core/src/service/services/role.service.ts @@ -267,7 +267,7 @@ export class RoleService { input.permissions, ); } - const updatedRole = patchEntity(role, { + patchEntity(role, { code: input.code, description: input.description, permissions: input.permissions @@ -275,11 +275,12 @@ export class RoleService { : undefined, }); if (targetChannels) { - updatedRole.channels = targetChannels; + role.channels = targetChannels; } - await this.connection.getRepository(ctx, Role).save(updatedRole, { reload: false }); - await this.eventBus.publish(new RoleEvent(ctx, role, 'updated', input)); - return await assertFound(this.findOne(ctx, role.id)); + await this.connection.getRepository(ctx, Role).save(role, { reload: false }); + const updatedRole = await assertFound(this.findOne(ctx, role.id)); + await this.eventBus.publish(new RoleEvent(ctx, updatedRole, 'updated', input)); + return updatedRole; } async delete(ctx: RequestContext, id: ID): Promise { From f0607aad91a4989c760276d342893e62195cd42c Mon Sep 17 00:00:00 2001 From: gkielwasser Date: Fri, 15 Nov 2024 10:02:35 +0100 Subject: [PATCH 14/19] fix(core): Fix merging order with conflicting products using UseGuestStrategy (#3155) --- packages/core/e2e/order-merge.e2e-spec.ts | 19 +++++++++++++++++++ .../src/service/services/order.service.ts | 18 +++++++++--------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/packages/core/e2e/order-merge.e2e-spec.ts b/packages/core/e2e/order-merge.e2e-spec.ts index 259813c310..d6fba19681 100644 --- a/packages/core/e2e/order-merge.e2e-spec.ts +++ b/packages/core/e2e/order-merge.e2e-spec.ts @@ -193,6 +193,25 @@ describe('Order merging', () => { ).toEqual([{ productVariantId: 'T_5', quantity: 3 }]); }); + it('UseGuestStrategy with conflicting lines', async () => { + const result = await testMerge({ + strategy: new UseGuestStrategy(), + customerEmailAddress: customers[8].emailAddress, + existingOrderLines: [ + { productVariantId: 'T_7', quantity: 1 }, + { productVariantId: 'T_8', quantity: 1 }, + ], + guestOrderLines: [{ productVariantId: 'T_8', quantity: 3 }], + }); + + expect( + (result?.lines || []).sort(sortById).map(line => ({ + productVariantId: line.productVariant.id, + quantity: line.quantity, + })), + ).toEqual([{ productVariantId: 'T_8', quantity: 3 }]); + }); + it('UseGuestIfExistingEmptyStrategy with empty existing', async () => { const result = await testMerge({ strategy: new UseGuestIfExistingEmptyStrategy(), diff --git a/packages/core/src/service/services/order.service.ts b/packages/core/src/service/services/order.service.ts index 180411c361..0add8935cf 100644 --- a/packages/core/src/service/services/order.service.ts +++ b/packages/core/src/service/services/order.service.ts @@ -1619,6 +1619,15 @@ export class OrderService { if (orderToDelete) { await this.deleteOrder(ctx, orderToDelete); } + if (order && linesToDelete) { + const orderId = order.id; + for (const line of linesToDelete) { + const result = await this.removeItemFromOrder(ctx, orderId, line.orderLineId); + if (!isGraphQlErrorResult(result)) { + order = result; + } + } + } if (order && linesToInsert) { const orderId = order.id; for (const line of linesToInsert) { @@ -1649,15 +1658,6 @@ export class OrderService { } } } - if (order && linesToDelete) { - const orderId = order.id; - for (const line of linesToDelete) { - const result = await this.removeItemFromOrder(ctx, orderId, line.orderLineId); - if (!isGraphQlErrorResult(result)) { - order = result; - } - } - } const customer = await this.customerService.findOneByUserId(ctx, user.id); if (order && customer) { order.customer = customer; From 2ed3211d5df28d9145400f8ebb755497f4ee3997 Mon Sep 17 00:00:00 2001 From: Daniel Biegler Date: Fri, 15 Nov 2024 10:44:41 +0100 Subject: [PATCH 15/19] fix(core): Disallow deletion of default channel (#3181) --- packages/core/e2e/channel.e2e-spec.ts | 20 +++++++++++++++++++ packages/core/src/i18n/messages/de.json | 1 + packages/core/src/i18n/messages/en.json | 1 + .../src/service/services/channel.service.ts | 6 ++++++ 4 files changed, 28 insertions(+) diff --git a/packages/core/e2e/channel.e2e-spec.ts b/packages/core/e2e/channel.e2e-spec.ts index 085c1ec2ef..6c4c1d2d04 100644 --- a/packages/core/e2e/channel.e2e-spec.ts +++ b/packages/core/e2e/channel.e2e-spec.ts @@ -370,6 +370,26 @@ describe('Channels', () => { expect(product!.channels.map(c => c.id)).toEqual(['T_1']); }); + it('Fail to delete the default channel', async () => { + await adminClient.asSuperAdmin(); + + const defaultChannelId = ( + await adminClient.query(GET_CHANNELS) + ).channels.items.find(channel => channel.code === DEFAULT_CHANNEL_CODE)?.id; + + expect(defaultChannelId).not.toBeUndefined(); + + const mutation = await adminClient.query< + Codegen.DeleteChannelMutation, + Codegen.DeleteChannelMutationVariables + >(DELETE_CHANNEL, { id: defaultChannelId! }); + + expect(mutation.deleteChannel).toEqual({ + result: DeletionResult.NOT_DELETED, + message: 'The default Channel cannot be deleted', + }); + }); + describe('currencyCode support', () => { beforeAll(async () => { await adminClient.asSuperAdmin(); diff --git a/packages/core/src/i18n/messages/de.json b/packages/core/src/i18n/messages/de.json index 0e8f7a693d..c618cca2c5 100644 --- a/packages/core/src/i18n/messages/de.json +++ b/packages/core/src/i18n/messages/de.json @@ -1,6 +1,7 @@ { "error": { "cannot-delete-role": "Die Rolle \"{ roleCode }\" kann nicht gelöscht werden", + "cannot-delete-default-channel": "Der Standardkanal kann nicht gelöscht werden", "cannot-locate-customer-for-user": "Es konnte kein Kunde für den Nutzer gefunden werden", "cannot-modify-role": "Die Rolle \"{ roleCode }\" kann nicht geändert werden", "cannot-create-sales-for-active-order": "Es kann kein Sale für eine aktive Bestellung erstellt werden", diff --git a/packages/core/src/i18n/messages/en.json b/packages/core/src/i18n/messages/en.json index b63615971f..c3b66e4ad7 100644 --- a/packages/core/src/i18n/messages/en.json +++ b/packages/core/src/i18n/messages/en.json @@ -4,6 +4,7 @@ "available-currency-codes-must-include-default": "availableCurrencyCodes must include the defaultCurrencyCode ({ defaultCurrencyCode })", "cannot-delete-role": "The role \"{ roleCode }\" cannot be deleted", "cannot-delete-sole-superadmin": "The sole SuperAdmin cannot be deleted", + "cannot-delete-default-channel": "The default Channel cannot be deleted", "cannot-locate-customer-for-user": "Cannot locate a Customer for the user", "cannot-modify-role": "The role \"{ roleCode }\" cannot be modified", "cannot-move-collection-into-self": "Cannot move a Collection into itself", diff --git a/packages/core/src/service/services/channel.service.ts b/packages/core/src/service/services/channel.service.ts index 57e49e7ee8..0427310604 100644 --- a/packages/core/src/service/services/channel.service.ts +++ b/packages/core/src/service/services/channel.service.ts @@ -457,6 +457,12 @@ export class ChannelService { async delete(ctx: RequestContext, id: ID): Promise { const channel = await this.connection.getEntityOrThrow(ctx, Channel, id); + if (channel.code === DEFAULT_CHANNEL_CODE) + return { + result: DeletionResult.NOT_DELETED, + message: ctx.translate('error.cannot-delete-default-channel'), + }; + const deletedChannel = new Channel(channel); await this.connection.getRepository(ctx, Session).delete({ activeChannelId: id }); await this.connection.getRepository(ctx, Channel).delete(id); From a12dedcc2966f29bb91f7550b40769279ecea4f4 Mon Sep 17 00:00:00 2001 From: Martijn Date: Fri, 15 Nov 2024 11:06:05 +0100 Subject: [PATCH 16/19] feat(payments-plugin): Check for eligibility of Mollie method (#3200) --- .../e2e/mollie-payment.e2e-spec.ts | 46 ++++++++++++++++++- .../payments-plugin/e2e/payment-helpers.ts | 20 ++++++++ .../src/mollie/mollie.service.ts | 41 +++++++++++------ 3 files changed, 93 insertions(+), 14 deletions(-) diff --git a/packages/payments-plugin/e2e/mollie-payment.e2e-spec.ts b/packages/payments-plugin/e2e/mollie-payment.e2e-spec.ts index d7ccb46c24..7896828016 100644 --- a/packages/payments-plugin/e2e/mollie-payment.e2e-spec.ts +++ b/packages/payments-plugin/e2e/mollie-payment.e2e-spec.ts @@ -42,12 +42,15 @@ import { import { AddItemToOrderMutation, AddItemToOrderMutationVariables, + AdjustOrderLineMutation, + AdjustOrderLineMutationVariables, GetOrderByCodeQuery, GetOrderByCodeQueryVariables, TestOrderFragmentFragment, } from './graphql/generated-shop-types'; import { ADD_ITEM_TO_ORDER, + ADJUST_ORDER_LINE, APPLY_COUPON_CODE, GET_ACTIVE_ORDER, GET_ORDER_BY_CODE, @@ -60,6 +63,7 @@ import { GET_MOLLIE_PAYMENT_METHODS, refundOrderLine, setShipping, + testPaymentEligibilityChecker, } from './payment-helpers'; const mockData = { @@ -181,6 +185,9 @@ describe('Mollie payments', () => { beforeAll(async () => { const devConfig = mergeConfig(testConfig(), { plugins: [MolliePlugin.init({ vendureHost: mockData.host })], + paymentOptions: { + paymentMethodEligibilityCheckers: [testPaymentEligibilityChecker], + }, }); const env = createTestEnvironment(devConfig); serverPort = devConfig.apiOptions.port; @@ -224,6 +231,10 @@ describe('Mollie payments', () => { input: { code: mockData.methodCode, enabled: true, + checker: { + code: testPaymentEligibilityChecker.code, + arguments: [], + }, handler: { code: molliePaymentHandler.code, arguments: [ @@ -390,7 +401,41 @@ describe('Mollie payments', () => { }); }); + it('Should not allow creating intent if payment method is not eligible', async () => { + // Set quantity to 9, which is not allowe by our test eligibility checker + await shopClient.query( + ADJUST_ORDER_LINE, + { + orderLineId: order.lines[0].id, + quantity: 9, + }, + ); + let mollieRequest: any | undefined; + nock('https://api.mollie.com/') + .post('/v2/orders', body => { + mollieRequest = body; + return true; + }) + .reply(200, mockData.mollieOrderResponse); + const { createMolliePaymentIntent } = await shopClient.query(CREATE_MOLLIE_PAYMENT_INTENT, { + input: { + paymentMethodCode: mockData.methodCode, + redirectUrl: 'given-storefront-redirect-url', + }, + }); + expect(createMolliePaymentIntent.errorCode).toBe('INELIGIBLE_PAYMENT_METHOD_ERROR'); + expect(createMolliePaymentIntent.message).toContain('is not eligible for order'); + }); + it('Should get payment url with deducted amount if a payment is already made', async () => { + // Change quantity back to 10 + await shopClient.query( + ADJUST_ORDER_LINE, + { + orderLineId: order.lines[0].id, + quantity: 10, + }, + ); let mollieRequest: any | undefined; nock('https://api.mollie.com/') .post('/v2/orders', body => { @@ -702,7 +747,6 @@ describe('Mollie payments', () => { >(CREATE_PAYMENT_METHOD, { input: { code: mockData.methodCodeBroken, - enabled: true, handler: { code: molliePaymentHandler.code, diff --git a/packages/payments-plugin/e2e/payment-helpers.ts b/packages/payments-plugin/e2e/payment-helpers.ts index 24a5ac971a..55687b71b2 100644 --- a/packages/payments-plugin/e2e/payment-helpers.ts +++ b/packages/payments-plugin/e2e/payment-helpers.ts @@ -2,7 +2,9 @@ import { ID } from '@vendure/common/lib/shared-types'; import { ChannelService, ErrorResult, + LanguageCode, OrderService, + PaymentMethodEligibilityChecker, PaymentService, RequestContext, assertFound, @@ -189,6 +191,24 @@ export async function createFreeShippingCoupon( } } +/** + * Test payment eligibility checker that doesn't allow orders with quantity 9 on an order line, + * just so that we can easily mock non-eligibility + */ +export const testPaymentEligibilityChecker = new PaymentMethodEligibilityChecker({ + code: 'test-payment-eligibility-checker', + description: [{ languageCode: LanguageCode.en, value: 'Do not allow 9 items' }], + args: {}, + check: (ctx, order, args) => { + const hasLineWithQuantity9 = order.lines.find(line => line.quantity === 9); + if (hasLineWithQuantity9) { + return false; + } else { + return true; + } + }, +}); + export const CREATE_MOLLIE_PAYMENT_INTENT = gql` mutation createMolliePaymentIntent($input: MolliePaymentIntentInput!) { createMolliePaymentIntent(input: $input) { diff --git a/packages/payments-plugin/src/mollie/mollie.service.ts b/packages/payments-plugin/src/mollie/mollie.service.ts index 0dbcbd3908..0e2dbea9ab 100644 --- a/packages/payments-plugin/src/mollie/mollie.service.ts +++ b/packages/payments-plugin/src/mollie/mollie.service.ts @@ -13,6 +13,7 @@ import { EntityHydrator, ErrorResult, ID, + idsAreEqual, Injector, LanguageCode, Logger, @@ -94,16 +95,33 @@ export class MollieService { if (order instanceof PaymentIntentError) { return order; } - await this.entityHydrator.hydrate(ctx, order, { - relations: [ - 'customer', - 'surcharges', - 'lines.productVariant', - 'lines.productVariant.translations', - 'shippingLines.shippingMethod', - 'payments', - ], - }); + if (!paymentMethod) { + return new PaymentIntentError(`No paymentMethod found with code ${String(paymentMethodCode)}`); + } + const [eligiblePaymentMethods] = await Promise.all([ + this.orderService.getEligiblePaymentMethods(ctx, order.id), + await this.entityHydrator.hydrate(ctx, order, { + relations: [ + 'customer', + 'surcharges', + 'lines.productVariant', + 'lines.productVariant.translations', + 'shippingLines.shippingMethod', + 'payments', + ], + }), + ]); + if ( + !eligiblePaymentMethods.find( + eligibleMethod => + idsAreEqual(eligibleMethod.id, paymentMethod?.id) && eligibleMethod.isEligible, + ) + ) { + // Given payment method code is not eligible for this order + return new InvalidInputError( + `Payment method ${paymentMethod?.code} is not eligible for order ${order.code}`, + ); + } if (order.state !== 'ArrangingPayment' && order.state !== 'ArrangingAdditionalPayment') { // Pre-check if order is transitionable to ArrangingPayment, because that will happen after Mollie payment try { @@ -125,9 +143,6 @@ export class MollieService { 'Cannot create payment intent for order with customer that has no lastName set', ); } - if (!paymentMethod) { - return new PaymentIntentError(`No paymentMethod found with code ${String(paymentMethodCode)}`); - } let redirectUrl = input.redirectUrl; if (!redirectUrl) { // Use fallback redirect if no redirectUrl is given From b156a344741fe34dd81f1b1930b020decbd0f4ca Mon Sep 17 00:00:00 2001 From: Michael Bromley Date: Fri, 15 Nov 2024 14:02:31 +0100 Subject: [PATCH 17/19] chore: Clean up ui extension example --- .../ui-extensions-library/ui/providers.ts | 32 +------------------ 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/packages/dev-server/example-plugins/ui-extensions-library/ui/providers.ts b/packages/dev-server/example-plugins/ui-extensions-library/ui/providers.ts index 3f8d891aff..3badfd25b5 100644 --- a/packages/dev-server/example-plugins/ui-extensions-library/ui/providers.ts +++ b/packages/dev-server/example-plugins/ui-extensions-library/ui/providers.ts @@ -1,5 +1,4 @@ -import { PageLocationId, addNavMenuSection, registerPageTab } from '@vendure/admin-ui/core'; -import { AngularUiComponent } from './angular-components/angular-ui/angular-ui.component'; +import { addNavMenuSection } from '@vendure/admin-ui/core'; export default [ addNavMenuSection({ @@ -18,33 +17,4 @@ export default [ }, ], }), - //Testing page tabs on custom angular components - registerPageTab({ - location: 'angular-ui' as PageLocationId, - tab: 'Example Tab 1', - route: '/extensions/ui-library/angular-ui', - tabIcon: 'star', - component: AngularUiComponent, - }), - registerPageTab({ - location: 'angular-ui' as PageLocationId, - tab: 'Example Tab 2', - route: '/extensions/ui-library/angular-ui2', - tabIcon: 'star', - component: AngularUiComponent, - }), - registerPageTab({ - location: 'react-ui' as PageLocationId, - tab: 'Example Tab 1', - route: '/extensions/ui-library/angular-ui', - tabIcon: 'star', - component: AngularUiComponent, - }), - registerPageTab({ - location: 'react-ui' as PageLocationId, - tab: 'Example Tab 2', - route: '/extensions/ui-library/angular-ui2', - tabIcon: 'star', - component: AngularUiComponent, - }), ]; From db1d4bfdb32ac94ddb719d19659dd5258c247667 Mon Sep 17 00:00:00 2001 From: Michael Bromley Date: Fri, 15 Nov 2024 14:07:05 +0100 Subject: [PATCH 18/19] chore: Publish v3.0.6 --- CHANGELOG.md | 24 ++++ lerna.json | 2 +- package-lock.json | 113 +++++++++--------- packages/admin-ui-plugin/package.json | 8 +- packages/admin-ui/package.json | 4 +- .../src/lib/core/src/common/version.ts | 2 +- packages/asset-server-plugin/package.json | 6 +- packages/cli/package.json | 6 +- packages/common/package.json | 2 +- packages/core/package.json | 4 +- packages/create/package.json | 6 +- packages/dev-server/package.json | 18 +-- packages/elasticsearch-plugin/package.json | 6 +- packages/email-plugin/package.json | 6 +- packages/harden-plugin/package.json | 6 +- packages/job-queue-plugin/package.json | 6 +- packages/payments-plugin/package.json | 8 +- packages/sentry-plugin/package.json | 6 +- packages/stellate-plugin/package.json | 6 +- packages/testing/package.json | 6 +- packages/ui-devkit/package.json | 8 +- 21 files changed, 138 insertions(+), 115 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2528e8b67..00a5bcd67b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,27 @@ +## 3.0.6 (2024-11-15) + + +#### Features + +* **payments-plugin** Check for eligibility of Mollie method (#3200) ([a12dedc](https://github.com/vendure-ecommerce/vendure/commit/a12dedc)), closes [#3200](https://github.com/vendure-ecommerce/vendure/issues/3200) +* **payments-plugin** prevent false positive logging (#3195) ([961297d](https://github.com/vendure-ecommerce/vendure/commit/961297d)), closes [#3195](https://github.com/vendure-ecommerce/vendure/issues/3195) + +#### Fixes + +* **admin-ui** Fix collection product filter dark theme (#3172) ([9f4eb9e](https://github.com/vendure-ecommerce/vendure/commit/9f4eb9e)), closes [#3172](https://github.com/vendure-ecommerce/vendure/issues/3172) +* **admin-ui** Fix incorrect type when dealing with numeric value in list (#3094) ([76d66c6](https://github.com/vendure-ecommerce/vendure/commit/76d66c6)), closes [#3094](https://github.com/vendure-ecommerce/vendure/issues/3094) [#3093](https://github.com/vendure-ecommerce/vendure/issues/3093) +* **admin-ui** Fix variant detail quick-jump component (#3189) ([478989e](https://github.com/vendure-ecommerce/vendure/commit/478989e)), closes [#3189](https://github.com/vendure-ecommerce/vendure/issues/3189) +* **admin-ui** Make registerPageTab work on 'order-list' location (#3187) ([61d808b](https://github.com/vendure-ecommerce/vendure/commit/61d808b)), closes [#3187](https://github.com/vendure-ecommerce/vendure/issues/3187) +* **admin-ui** Refund order dialog is showing the wrong field for prorated unit price (#3151) ([3777555](https://github.com/vendure-ecommerce/vendure/commit/3777555)), closes [#3151](https://github.com/vendure-ecommerce/vendure/issues/3151) +* **admin-ui** Swedish translation adjustments (#3174) ([a21f129](https://github.com/vendure-ecommerce/vendure/commit/a21f129)), closes [#3174](https://github.com/vendure-ecommerce/vendure/issues/3174) +* **common** Allow null on idsAreEqual function (#3171) ([7bba907](https://github.com/vendure-ecommerce/vendure/commit/7bba907)), closes [#3171](https://github.com/vendure-ecommerce/vendure/issues/3171) +* **core** Added deprecation notices to the old refund input fields (#3119) ([7324bb3](https://github.com/vendure-ecommerce/vendure/commit/7324bb3)), closes [#3119](https://github.com/vendure-ecommerce/vendure/issues/3119) +* **core** Disallow deletion of default channel (#3181) ([2ed3211](https://github.com/vendure-ecommerce/vendure/commit/2ed3211)), closes [#3181](https://github.com/vendure-ecommerce/vendure/issues/3181) +* **core** Fix error on internal Administrator customFields (#3159) ([e03b7f0](https://github.com/vendure-ecommerce/vendure/commit/e03b7f0)), closes [#3159](https://github.com/vendure-ecommerce/vendure/issues/3159) +* **core** Fix merging order with conflicting products using UseGuestStrategy (#3155) ([f0607aa](https://github.com/vendure-ecommerce/vendure/commit/f0607aa)), closes [#3155](https://github.com/vendure-ecommerce/vendure/issues/3155) +* **core** Fix returning stale data in Role Update Event (#3154) ([71f85d2](https://github.com/vendure-ecommerce/vendure/commit/71f85d2)), closes [#3154](https://github.com/vendure-ecommerce/vendure/issues/3154) +* **testing** Make test client's `fileUploadMutation` work for more input variable shapes (#3188) ([a8938f4](https://github.com/vendure-ecommerce/vendure/commit/a8938f4)), closes [#3188](https://github.com/vendure-ecommerce/vendure/issues/3188) + ## 3.0.5 (2024-10-15) diff --git a/lerna.json b/lerna.json index d0b6ccb7db..def8c8816e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], - "version": "3.0.5", + "version": "3.0.6", "npmClient": "npm", "command": { "version": { diff --git a/package-lock.json b/package-lock.json index 1c9c6e7d0c..85813033b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4338,7 +4338,6 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", - "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -36483,7 +36482,7 @@ }, "packages/admin-ui": { "name": "@vendure/admin-ui", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "@angular/animations": "^17.2.4", @@ -36506,7 +36505,7 @@ "@ng-select/ng-select": "^12.0.7", "@ngx-translate/core": "^15.0.0", "@ngx-translate/http-loader": "^8.0.0", - "@vendure/common": "^3.0.5", + "@vendure/common": "^3.0.6", "@webcomponents/custom-elements": "^1.6.0", "apollo-angular": "^6.0.0", "apollo-upload-client": "^18.0.1", @@ -36577,7 +36576,7 @@ }, "packages/admin-ui-plugin": { "name": "@vendure/admin-ui-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "date-fns": "^2.30.0", @@ -36587,9 +36586,9 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/fs-extra": "^11.0.4", - "@vendure/admin-ui": "^3.0.5", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", + "@vendure/admin-ui": "^3.0.6", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", "express": "^4.18.3", "rimraf": "^5.0.5", "typescript": "5.4.2" @@ -36631,7 +36630,7 @@ }, "packages/asset-server-plugin": { "name": "@vendure/asset-server-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "file-type": "^19.0.0", @@ -36644,8 +36643,8 @@ "@types/express": "^4.17.21", "@types/fs-extra": "^11.0.4", "@types/node-fetch": "^2.6.11", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", "express": "^4.18.3", "node-fetch": "^2.7.0", "rimraf": "^5.0.5", @@ -36657,11 +36656,11 @@ }, "packages/cli": { "name": "@vendure/cli", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "@clack/prompts": "^0.7.0", - "@vendure/common": "^3.0.5", + "@vendure/common": "^3.0.6", "change-case": "^4.1.2", "commander": "^11.0.0", "dotenv": "^16.4.5", @@ -36675,7 +36674,7 @@ "vendure": "dist/cli.js" }, "devDependencies": { - "@vendure/core": "^3.0.5", + "@vendure/core": "^3.0.6", "typescript": "5.3.3" }, "funding": { @@ -36707,7 +36706,7 @@ }, "packages/common": { "name": "@vendure/common", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "devDependencies": { "rimraf": "^5.0.5", @@ -36719,7 +36718,7 @@ }, "packages/core": { "name": "@vendure/core", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "@apollo/server": "^4.10.4", @@ -36733,7 +36732,7 @@ "@nestjs/testing": "~10.3.10", "@nestjs/typeorm": "~10.0.2", "@types/fs-extra": "^9.0.1", - "@vendure/common": "^3.0.5", + "@vendure/common": "^3.0.6", "bcrypt": "^5.1.1", "body-parser": "^1.20.2", "cookie-session": "^2.1.0", @@ -36828,11 +36827,11 @@ }, "packages/create": { "name": "@vendure/create", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "@clack/prompts": "^0.7.0", - "@vendure/common": "^3.0.5", + "@vendure/common": "^3.0.6", "commander": "^11.0.0", "cross-spawn": "^7.0.3", "fs-extra": "^11.2.0", @@ -36850,7 +36849,7 @@ "@types/fs-extra": "^11.0.4", "@types/handlebars": "^4.1.0", "@types/semver": "^7.5.8", - "@vendure/core": "^3.0.5", + "@vendure/core": "^3.0.6", "rimraf": "^5.0.5", "ts-node": "^10.9.2", "typescript": "5.3.3" @@ -36860,21 +36859,21 @@ } }, "packages/dev-server": { - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "@nestjs/axios": "^3.0.2", - "@vendure/admin-ui-plugin": "^3.0.5", - "@vendure/asset-server-plugin": "^3.0.5", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", - "@vendure/elasticsearch-plugin": "^3.0.5", - "@vendure/email-plugin": "^3.0.5", + "@vendure/admin-ui-plugin": "^3.0.6", + "@vendure/asset-server-plugin": "^3.0.6", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", + "@vendure/elasticsearch-plugin": "^3.0.6", + "@vendure/email-plugin": "^3.0.6", "typescript": "5.3.3" }, "devDependencies": { - "@vendure/testing": "^3.0.5", - "@vendure/ui-devkit": "^3.0.5", + "@vendure/testing": "^3.0.6", + "@vendure/ui-devkit": "^3.0.6", "commander": "^12.0.0", "concurrently": "^8.2.2", "csv-stringify": "^6.4.6", @@ -36917,7 +36916,7 @@ }, "packages/elasticsearch-plugin": { "name": "@vendure/elasticsearch-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "@elastic/elasticsearch": "~7.9.1", @@ -36925,8 +36924,8 @@ "fast-deep-equal": "^3.1.3" }, "devDependencies": { - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", "rimraf": "^5.0.5", "typescript": "5.3.3" }, @@ -36936,7 +36935,7 @@ }, "packages/email-plugin": { "name": "@vendure/email-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "@types/nodemailer": "^6.4.9", @@ -36952,8 +36951,8 @@ "@types/express": "^4.17.21", "@types/fs-extra": "^11.0.4", "@types/mjml": "^4.7.4", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", "rimraf": "^5.0.5", "typescript": "5.3.3" }, @@ -36972,14 +36971,14 @@ }, "packages/harden-plugin": { "name": "@vendure/harden-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "graphql-query-complexity": "^0.12.0" }, "devDependencies": { - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5" + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6" }, "funding": { "url": "https://github.com/sponsors/michaelbromley" @@ -36987,12 +36986,12 @@ }, "packages/job-queue-plugin": { "name": "@vendure/job-queue-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "devDependencies": { "@google-cloud/pubsub": "^2.8.0", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", "bullmq": "^5.4.2", "ioredis": "^5.3.2", "rimraf": "^5.0.5", @@ -37004,7 +37003,7 @@ }, "packages/payments-plugin": { "name": "@vendure/payments-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "currency.js": "2.0.4" @@ -37013,9 +37012,9 @@ "@mollie/api-client": "^3.7.0", "@types/braintree": "^3.3.11", "@types/localtunnel": "2.0.4", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", - "@vendure/testing": "^3.0.5", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", + "@vendure/testing": "^3.0.6", "braintree": "^3.22.0", "localtunnel": "2.0.2", "nock": "^13.1.4", @@ -37059,12 +37058,12 @@ }, "packages/sentry-plugin": { "name": "@vendure/sentry-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "devDependencies": { "@sentry/node": "^7.106.1", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5" + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6" }, "funding": { "url": "https://github.com/sponsors/michaelbromley" @@ -37075,14 +37074,14 @@ }, "packages/stellate-plugin": { "name": "@vendure/stellate-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "node-fetch": "^2.7.0" }, "devDependencies": { - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5" + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6" }, "funding": { "url": "https://github.com/sponsors/michaelbromley" @@ -37090,11 +37089,11 @@ }, "packages/testing": { "name": "@vendure/testing", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", - "@vendure/common": "^3.0.5", + "@vendure/common": "^3.0.6", "faker": "^4.1.0", "form-data": "^4.0.0", "graphql": "~16.9.0", @@ -37107,7 +37106,7 @@ "@types/mysql": "^2.15.26", "@types/node-fetch": "^2.6.4", "@types/pg": "^8.11.2", - "@vendure/core": "^3.0.5", + "@vendure/core": "^3.0.6", "mysql": "^2.18.1", "pg": "^8.11.3", "rimraf": "^5.0.5", @@ -37125,15 +37124,15 @@ }, "packages/ui-devkit": { "name": "@vendure/ui-devkit", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "dependencies": { "@angular-devkit/build-angular": "^17.2.3", "@angular/cli": "^17.2.3", "@angular/compiler": "^17.2.4", "@angular/compiler-cli": "^17.2.4", - "@vendure/admin-ui": "^3.0.5", - "@vendure/common": "^3.0.5", + "@vendure/admin-ui": "^3.0.6", + "@vendure/common": "^3.0.6", "chalk": "^4.1.0", "chokidar": "^3.6.0", "fs-extra": "^11.2.0", @@ -37144,7 +37143,7 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@types/fs-extra": "^11.0.4", - "@vendure/core": "^3.0.5", + "@vendure/core": "^3.0.6", "react": "^18.2.0", "react-dom": "^18.2.0", "rimraf": "^5.0.5", diff --git a/packages/admin-ui-plugin/package.json b/packages/admin-ui-plugin/package.json index 38499b7544..e5452dc292 100644 --- a/packages/admin-ui-plugin/package.json +++ b/packages/admin-ui-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/admin-ui-plugin", - "version": "3.0.5", + "version": "3.0.6", "main": "lib/index.js", "types": "lib/index.d.ts", "files": [ @@ -21,9 +21,9 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/fs-extra": "^11.0.4", - "@vendure/admin-ui": "^3.0.5", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", + "@vendure/admin-ui": "^3.0.6", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", "express": "^4.18.3", "rimraf": "^5.0.5", "typescript": "5.4.2" diff --git a/packages/admin-ui/package.json b/packages/admin-ui/package.json index bd9a85e23c..61ec006988 100644 --- a/packages/admin-ui/package.json +++ b/packages/admin-ui/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/admin-ui", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "scripts": { "ng": "ng", @@ -49,7 +49,7 @@ "@ng-select/ng-select": "^12.0.7", "@ngx-translate/core": "^15.0.0", "@ngx-translate/http-loader": "^8.0.0", - "@vendure/common": "^3.0.5", + "@vendure/common": "^3.0.6", "@webcomponents/custom-elements": "^1.6.0", "apollo-angular": "^6.0.0", "apollo-upload-client": "^18.0.1", diff --git a/packages/admin-ui/src/lib/core/src/common/version.ts b/packages/admin-ui/src/lib/core/src/common/version.ts index 379e97dea2..17a05b6f01 100644 --- a/packages/admin-ui/src/lib/core/src/common/version.ts +++ b/packages/admin-ui/src/lib/core/src/common/version.ts @@ -1,2 +1,2 @@ // Auto-generated by the set-version.js script. -export const ADMIN_UI_VERSION = '3.0.5'; +export const ADMIN_UI_VERSION = '3.0.6'; diff --git a/packages/asset-server-plugin/package.json b/packages/asset-server-plugin/package.json index a8bef145d3..67fb88e8eb 100644 --- a/packages/asset-server-plugin/package.json +++ b/packages/asset-server-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/asset-server-plugin", - "version": "3.0.5", + "version": "3.0.6", "main": "lib/index.js", "types": "lib/index.d.ts", "files": [ @@ -26,8 +26,8 @@ "@types/express": "^4.17.21", "@types/fs-extra": "^11.0.4", "@types/node-fetch": "^2.6.11", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", "express": "^4.18.3", "node-fetch": "^2.7.0", "rimraf": "^5.0.5", diff --git a/packages/cli/package.json b/packages/cli/package.json index abf05fefbb..01657f5bee 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/cli", - "version": "3.0.5", + "version": "3.0.6", "description": "A modern, headless ecommerce framework", "repository": { "type": "git", @@ -35,7 +35,7 @@ ], "dependencies": { "@clack/prompts": "^0.7.0", - "@vendure/common": "^3.0.5", + "@vendure/common": "^3.0.6", "change-case": "^4.1.2", "commander": "^11.0.0", "dotenv": "^16.4.5", @@ -46,7 +46,7 @@ "tsconfig-paths": "^4.2.0" }, "devDependencies": { - "@vendure/core": "^3.0.5", + "@vendure/core": "^3.0.6", "typescript": "5.3.3" } } diff --git a/packages/common/package.json b/packages/common/package.json index ce3eea9647..67793d0b5a 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/common", - "version": "3.0.5", + "version": "3.0.6", "main": "index.js", "license": "GPL-3.0-or-later", "scripts": { diff --git a/packages/core/package.json b/packages/core/package.json index 06a70668b5..dc35fac788 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/core", - "version": "3.0.5", + "version": "3.0.6", "description": "A modern, headless ecommerce framework", "repository": { "type": "git", @@ -51,7 +51,7 @@ "@nestjs/testing": "~10.3.10", "@nestjs/typeorm": "~10.0.2", "@types/fs-extra": "^9.0.1", - "@vendure/common": "^3.0.5", + "@vendure/common": "^3.0.6", "bcrypt": "^5.1.1", "body-parser": "^1.20.2", "cookie-session": "^2.1.0", diff --git a/packages/create/package.json b/packages/create/package.json index b355badbbf..6354f2c837 100644 --- a/packages/create/package.json +++ b/packages/create/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/create", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "bin": { "create": "./index.js" @@ -27,14 +27,14 @@ "@types/fs-extra": "^11.0.4", "@types/handlebars": "^4.1.0", "@types/semver": "^7.5.8", - "@vendure/core": "^3.0.5", + "@vendure/core": "^3.0.6", "rimraf": "^5.0.5", "ts-node": "^10.9.2", "typescript": "5.3.3" }, "dependencies": { "@clack/prompts": "^0.7.0", - "@vendure/common": "^3.0.5", + "@vendure/common": "^3.0.6", "commander": "^11.0.0", "cross-spawn": "^7.0.3", "fs-extra": "^11.2.0", diff --git a/packages/dev-server/package.json b/packages/dev-server/package.json index e638f8ceaf..4f64079d87 100644 --- a/packages/dev-server/package.json +++ b/packages/dev-server/package.json @@ -1,6 +1,6 @@ { "name": "dev-server", - "version": "3.0.5", + "version": "3.0.6", "main": "index.js", "license": "GPL-3.0-or-later", "private": true, @@ -15,17 +15,17 @@ }, "dependencies": { "@nestjs/axios": "^3.0.2", - "@vendure/admin-ui-plugin": "^3.0.5", - "@vendure/asset-server-plugin": "^3.0.5", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", - "@vendure/elasticsearch-plugin": "^3.0.5", - "@vendure/email-plugin": "^3.0.5", + "@vendure/admin-ui-plugin": "^3.0.6", + "@vendure/asset-server-plugin": "^3.0.6", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", + "@vendure/elasticsearch-plugin": "^3.0.6", + "@vendure/email-plugin": "^3.0.6", "typescript": "5.3.3" }, "devDependencies": { - "@vendure/testing": "^3.0.5", - "@vendure/ui-devkit": "^3.0.5", + "@vendure/testing": "^3.0.6", + "@vendure/ui-devkit": "^3.0.6", "commander": "^12.0.0", "concurrently": "^8.2.2", "csv-stringify": "^6.4.6", diff --git a/packages/elasticsearch-plugin/package.json b/packages/elasticsearch-plugin/package.json index 51077b4f9c..00e12a113f 100644 --- a/packages/elasticsearch-plugin/package.json +++ b/packages/elasticsearch-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/elasticsearch-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -26,8 +26,8 @@ "fast-deep-equal": "^3.1.3" }, "devDependencies": { - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", "rimraf": "^5.0.5", "typescript": "5.3.3" } diff --git a/packages/email-plugin/package.json b/packages/email-plugin/package.json index 6850abe39a..5590afdc74 100644 --- a/packages/email-plugin/package.json +++ b/packages/email-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/email-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -34,8 +34,8 @@ "@types/express": "^4.17.21", "@types/fs-extra": "^11.0.4", "@types/mjml": "^4.7.4", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", "rimraf": "^5.0.5", "typescript": "5.3.3" } diff --git a/packages/harden-plugin/package.json b/packages/harden-plugin/package.json index 8a08a21903..6068b90c21 100644 --- a/packages/harden-plugin/package.json +++ b/packages/harden-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/harden-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -21,7 +21,7 @@ "graphql-query-complexity": "^0.12.0" }, "devDependencies": { - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5" + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6" } } diff --git a/packages/job-queue-plugin/package.json b/packages/job-queue-plugin/package.json index c41772e82e..444e964a1e 100644 --- a/packages/job-queue-plugin/package.json +++ b/packages/job-queue-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/job-queue-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "main": "package/index.js", "types": "package/index.d.ts", @@ -23,8 +23,8 @@ }, "devDependencies": { "@google-cloud/pubsub": "^2.8.0", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", "bullmq": "^5.4.2", "ioredis": "^5.3.2", "rimraf": "^5.0.5", diff --git a/packages/payments-plugin/package.json b/packages/payments-plugin/package.json index b0f9fefb31..682f1a5d48 100644 --- a/packages/payments-plugin/package.json +++ b/packages/payments-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/payments-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "main": "package/index.js", "types": "package/index.d.ts", @@ -46,9 +46,9 @@ "@mollie/api-client": "^3.7.0", "@types/braintree": "^3.3.11", "@types/localtunnel": "2.0.4", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5", - "@vendure/testing": "^3.0.5", + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6", + "@vendure/testing": "^3.0.6", "braintree": "^3.22.0", "localtunnel": "2.0.2", "nock": "^13.1.4", diff --git a/packages/sentry-plugin/package.json b/packages/sentry-plugin/package.json index d579dd504d..1e4a759c47 100644 --- a/packages/sentry-plugin/package.json +++ b/packages/sentry-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/sentry-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -22,7 +22,7 @@ }, "devDependencies": { "@sentry/node": "^7.106.1", - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5" + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6" } } diff --git a/packages/stellate-plugin/package.json b/packages/stellate-plugin/package.json index eb8ea3f5ee..1c779241d7 100644 --- a/packages/stellate-plugin/package.json +++ b/packages/stellate-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/stellate-plugin", - "version": "3.0.5", + "version": "3.0.6", "license": "GPL-3.0-or-later", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -21,7 +21,7 @@ "node-fetch": "^2.7.0" }, "devDependencies": { - "@vendure/common": "^3.0.5", - "@vendure/core": "^3.0.5" + "@vendure/common": "^3.0.6", + "@vendure/core": "^3.0.6" } } diff --git a/packages/testing/package.json b/packages/testing/package.json index 11999c1068..4cc9a55e1f 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/testing", - "version": "3.0.5", + "version": "3.0.6", "description": "End-to-end testing tools for Vendure projects", "keywords": [ "vendure", @@ -38,7 +38,7 @@ }, "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", - "@vendure/common": "^3.0.5", + "@vendure/common": "^3.0.6", "faker": "^4.1.0", "form-data": "^4.0.0", "graphql": "~16.9.0", @@ -51,7 +51,7 @@ "@types/mysql": "^2.15.26", "@types/node-fetch": "^2.6.4", "@types/pg": "^8.11.2", - "@vendure/core": "^3.0.5", + "@vendure/core": "^3.0.6", "mysql": "^2.18.1", "pg": "^8.11.3", "rimraf": "^5.0.5", diff --git a/packages/ui-devkit/package.json b/packages/ui-devkit/package.json index 94842012c7..142160009c 100644 --- a/packages/ui-devkit/package.json +++ b/packages/ui-devkit/package.json @@ -1,6 +1,6 @@ { "name": "@vendure/ui-devkit", - "version": "3.0.5", + "version": "3.0.6", "description": "A library for authoring Vendure Admin UI extensions", "keywords": [ "vendure", @@ -40,8 +40,8 @@ "@angular/cli": "^17.2.3", "@angular/compiler": "^17.2.4", "@angular/compiler-cli": "^17.2.4", - "@vendure/admin-ui": "^3.0.5", - "@vendure/common": "^3.0.5", + "@vendure/admin-ui": "^3.0.6", + "@vendure/common": "^3.0.6", "chalk": "^4.1.0", "chokidar": "^3.6.0", "fs-extra": "^11.2.0", @@ -52,7 +52,7 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@types/fs-extra": "^11.0.4", - "@vendure/core": "^3.0.5", + "@vendure/core": "^3.0.6", "react": "^18.2.0", "react-dom": "^18.2.0", "rimraf": "^5.0.5", From e4fd03c4e003645c11ad906acd06aca5ff01898f Mon Sep 17 00:00:00 2001 From: Michael Bromley Date: Fri, 15 Nov 2024 14:09:31 +0100 Subject: [PATCH 19/19] chore: Clean up changelog --- CHANGELOG.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00a5bcd67b..3920ba7e3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,6 @@ ## 3.0.6 (2024-11-15) -#### Features - -* **payments-plugin** Check for eligibility of Mollie method (#3200) ([a12dedc](https://github.com/vendure-ecommerce/vendure/commit/a12dedc)), closes [#3200](https://github.com/vendure-ecommerce/vendure/issues/3200) -* **payments-plugin** prevent false positive logging (#3195) ([961297d](https://github.com/vendure-ecommerce/vendure/commit/961297d)), closes [#3195](https://github.com/vendure-ecommerce/vendure/issues/3195) - #### Fixes * **admin-ui** Fix collection product filter dark theme (#3172) ([9f4eb9e](https://github.com/vendure-ecommerce/vendure/commit/9f4eb9e)), closes [#3172](https://github.com/vendure-ecommerce/vendure/issues/3172) @@ -20,6 +15,8 @@ * **core** Fix error on internal Administrator customFields (#3159) ([e03b7f0](https://github.com/vendure-ecommerce/vendure/commit/e03b7f0)), closes [#3159](https://github.com/vendure-ecommerce/vendure/issues/3159) * **core** Fix merging order with conflicting products using UseGuestStrategy (#3155) ([f0607aa](https://github.com/vendure-ecommerce/vendure/commit/f0607aa)), closes [#3155](https://github.com/vendure-ecommerce/vendure/issues/3155) * **core** Fix returning stale data in Role Update Event (#3154) ([71f85d2](https://github.com/vendure-ecommerce/vendure/commit/71f85d2)), closes [#3154](https://github.com/vendure-ecommerce/vendure/issues/3154) +* **payments-plugin** Check for eligibility of Mollie method (#3200) ([a12dedc](https://github.com/vendure-ecommerce/vendure/commit/a12dedc)), closes [#3200](https://github.com/vendure-ecommerce/vendure/issues/3200) +* **payments-plugin** prevent false positive logging (#3195) ([961297d](https://github.com/vendure-ecommerce/vendure/commit/961297d)), closes [#3195](https://github.com/vendure-ecommerce/vendure/issues/3195) * **testing** Make test client's `fileUploadMutation` work for more input variable shapes (#3188) ([a8938f4](https://github.com/vendure-ecommerce/vendure/commit/a8938f4)), closes [#3188](https://github.com/vendure-ecommerce/vendure/issues/3188) ## 3.0.5 (2024-10-15)