Skip to content

Commit

Permalink
Merge branch 'master' into minor
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelbromley committed Oct 31, 2024
2 parents 55f7b71 + 7bba907 commit 08642b7
Show file tree
Hide file tree
Showing 11 changed files with 122 additions and 41 deletions.
56 changes: 41 additions & 15 deletions docs/docs/guides/getting-started/installation/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,46 @@ import TabItem from '@theme/TabItem';

## Requirements

* [Node.js](https://nodejs.org/en/) **v18** or above, with support for **even-numbered Node.js versions**.
* The [supported TypeScript version](https://github.com/vendure-ecommerce/vendure/blob/master/packages/create/src/constants.ts#L7) is set upon installation. Upgrading to a newer version of TypeScript might result in compilation errors.
* If you want to use MySQL, MariaDB, or Postgres as your data store, then you'll need an instance available locally. However, **if you are just testing out Vendure, we recommend using SQLite**, which has no external requirements.
* If you use **Yarn**, from Vendure v2.2.0+, you'll need to use **Yarn 2** (Berry) or above.
* [Node.js](https://nodejs.org/en/) **v18** or above, with support for **even-numbered Node.js versions**. (Odd-numbered versions should still work but are not officially supported.)

### Optional
* [Docker Desktop](https://www.docker.com/products/docker-desktop/): If you want to use the quick start with Postgres, you must have Docker Desktop installed. If you do not have Docker Desktop installed
then SQLite will be used for your database.
* If you want to use an existing MySQL, MariaDB, or Postgres server as your data store, then you'll need an instance available locally. However, **if you are just testing out Vendure, we recommend the quick start flow, which handles the database for you**.

## @vendure/create

The recommended way to get started with Vendure is by using the [@vendure/create](https://github.com/vendure-ecommerce/vendure/tree/master/packages/create) tool. This is a command-line tool which will scaffold and configure your new Vendure project and install all dependencies.

### 1. Run the command
### Quick Start

```
First run the following command in your terminal, replacing `my-shop` with the name of your project:

```bash
npx @vendure/create my-shop
```

### 2. Select a database
Next choose the "Quick Start" option. This is the fastest way to get a Vendure server up and running, and will handle
all the configuration for you. If you have Docker Desktop installed, it will create and configure a Postgres database for you. If not, it will use SQLite.

```text
┌ Let's create a Vendure App ✨
◆ How should we proceed?
// highlight-next-line
│ ● Quick Start (Get up an running in a single step)
│ ○ Manual Configuration
```

And that's it! After a minute or two you'll have a fully-functional Vendure server running locally.

### Manual Configuration

If you'd rather have more control over the configuration, you can choose the "Manual Configuration" option.
This will prompt you to select a database, and whether to populate the database with sample data.

#### 1. Select a database

Vendure supports a number of different databases. The `@vendure/create` tool will prompt you to select one.

Expand All @@ -40,7 +64,7 @@ If you select MySQL, MariaDB or Postgres, you need to make sure you:
3. know the username and password for a user with access to that database
:::

### 3. Populate with data
#### 2. Populate with data

The final prompt will ask whether to populate your new Vendure server with some sample product data.

Expand All @@ -50,7 +74,7 @@ building your own storefront.

![Vendure Create step 2](./create-2.webp)

### 4. Complete setup
#### 3. Complete setup

Next, a project scaffold will be created and dependencies installed. This may take a few minutes.

Expand All @@ -59,7 +83,7 @@ Once complete, you'll see a message like this:
![Vendure Create step 3](./create-3.webp)


### 5. Start the server
### Start the server

Follow the instructions to move into the new directory created for your project, and start the server:

Expand Down Expand Up @@ -95,11 +119,13 @@ Use `npx vendure add` to start adding plugins & custom functionality to your Ven

### Troubleshooting

If you encounter any issues during installation, you can get a more detailed output by setting the log level to `verbose`:

```sh
npx @vendure/create my-shop --log-level verbose
```
- If you encounter any issues during installation, you can get a more detailed output by setting the log level to `verbose`:
```sh
npx @vendure/create my-shop --log-level verbose
```
- The [supported TypeScript version](https://github.com/vendure-ecommerce/vendure/blob/master/packages/create/src/constants.ts#L7) is set upon installation. Upgrading to a newer version of TypeScript might result in compilation errors because
TypeScript sometimes introduces stricter checks in newer versions.
- If you want to use **Yarn**, from Vendure v2.2.0+, you'll need to use **Yarn 2** (Berry) or above.

## Set up a storefront

Expand Down
4 changes: 0 additions & 4 deletions docs/docs/guides/storefront/active-order/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -190,10 +190,6 @@ To remove a coupon code from the active order, we use the [`removeCouponCode` mu
mutation RemoveCouponCode($couponCode: String!) {
removeCouponCode(couponCode: $couponCode) {
...ActiveOrder
... on ErrorResult {
errorCode
message
}
}
}
```
Expand Down
26 changes: 25 additions & 1 deletion license/signatures/version1/cla.json
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,30 @@
"created_at": "2024-10-20T22:01:36Z",
"repoId": 136938012,
"pullRequestNo": 3151
},
{
"name": "twlite",
"id": 46562212,
"comment_id": 2441869361,
"created_at": "2024-10-28T15:12:26Z",
"repoId": 136938012,
"pullRequestNo": 3171
},
{
"name": "alexisvigoureux",
"id": 6134849,
"comment_id": 2444508370,
"created_at": "2024-10-29T14:55:39Z",
"repoId": 136938012,
"pullRequestNo": 3172
},
{
"name": "HausTechTeam",
"id": 157805863,
"comment_id": 2449329824,
"created_at": "2024-10-31T08:42:52Z",
"repoId": 136938012,
"pullRequestNo": 3174
}
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
</vdr-dt2-column>
<vdr-dt2-column id="prorated-unit-price" [heading]="'order.prorated-unit-price' | translate">
<ng-template let-line="item">
{{ line.unitPriceWithTax | localeCurrency : order.currencyCode }}
{{ line.proratedUnitPriceWithTax | localeCurrency : order.currencyCode }}
<ng-container *ngIf="line.discounts as discounts">
<vdr-dropdown *ngIf="discounts.length">
<div class="promotions-label" vdrDropdownTrigger>
Expand Down
24 changes: 12 additions & 12 deletions packages/admin-ui/src/lib/static/i18n-messages/sv.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"administrators": "Administratörer",
"assets": "Filer",
"channels": "Kanaler",
"collections": "Kategorier",
"collections": "Samlingar",
"countries": "Länder",
"customer-groups": "Kundgrupper",
"customers": "Kunder",
Expand Down Expand Up @@ -76,9 +76,9 @@
"calculated-price-tooltip": "Det finns en anpassad prisberäkning konfigurerad som ändrar priset ovan:",
"cannot-create-variants-without-options": "Produktvarianter kan inte läggas till förrän en alternativgrupp med minst två produktalternativ har definierats",
"channel-price-preview": "Förhandsgranskning av kanalpris",
"collection": "Kategorier",
"collection-contents": "Innehåll i kategorin",
"collections": "Kategorier",
"collection": "Samling",
"collection-contents": "Innehåll i samlingen",
"collections": "Samlingar",
"confirm-bulk-delete-products": "Vill du radera {count} produkter?",
"confirm-cancel": "Avbryt?",
"confirm-delete-assets": "Radera {count} {count, plural, one {fil} other {filer}}?",
Expand All @@ -91,7 +91,7 @@
"confirm-deletion-of-unused-variants-body": "Följande produktvarianter har blivit överflödiga på grund av tillägg av nya alternativ. De kommer att raderas vid skapandet av nya produktvarianter.",
"confirm-deletion-of-unused-variants-title": "Radera överflödiga produktvarianter?",
"create-draft-order": "Lägg till utkast till order",
"create-new-collection": "Lägg till ny kategori",
"create-new-collection": "Lägg till ny samling",
"create-new-facet": "Lägg till ny etikett",
"create-new-product": "Lägg till ny produkt",
"create-new-stock-location": "Lägg till lagerplats",
Expand All @@ -117,8 +117,8 @@
"live-preview-contents": "Förhandsgranska innehåll",
"manage-variants": "Hantera varianter",
"move-collection-to": "Flytta till { name }",
"move-collections": "Flytta kategorier",
"move-collections-success": "Flyttade {count, plural, one {1 kategori} other {{count} kategorier}}",
"move-collections": "Flytta samlingar",
"move-collections-success": "Flyttade {count, plural, one {1 samling} other {{count} samlingar}}",
"move-down": "Flytta nedåt",
"move-to": "Flytta till",
"move-up": "Flytta uppåt",
Expand Down Expand Up @@ -163,7 +163,7 @@
"remove-option": "Ta bort alternativ",
"remove-product-from-channel": "Ta bort produkt från kanal",
"remove-product-variant-from-channel": "Ta bort produktvariant från kanal",
"reorder-collection": "Ordna om kategorier",
"reorder-collection": "Ordna om samlingar",
"root-collection": "Rotkatalog",
"run-pending-search-index-updates": "Sökindex: kör {count, plural, one {1 avvaktande uppdatering} other {{count} avvaktande uppdateringar}}",
"running-search-index-updates": "Kör {count, plural, one {1 uppdatering} other {{count} uppdateringar}} till sökindex",
Expand Down Expand Up @@ -282,10 +282,10 @@
"notify-assign-to-channel-success-with-count": "Lyckades tilldela {count, plural, one {1 objekt} other {{count} objekt}} till { channelCode }",
"notify-bulk-update-success": "Uppdaterade { count } { entity }",
"notify-create-error": "Ett fel uppstod, kunde inte lägga till { entity }",
"notify-create-success": "La till nytt { entity }",
"notify-create-success": "Ny { entity } tillagd",
"notify-delete-error": "Ett fel uppstod, kunde inte radera { entity }",
"notify-delete-error-with-count": "Kunde inte radera {count, plural, one {1 objekt} other {{count} objekt}}",
"notify-delete-success": "Raderade { entity }",
"notify-delete-success": "{ entity } borttagen",
"notify-delete-success-with-count": "Lyckades radera {count, plural, one {1 objekt} other {{count} objekt}}",
"notify-duplicate-error": "Kunde inte duplicera { name } på grund av ett fel: { error }",
"notify-duplicate-error-excess": "Ytterligare { count } {count, plural, one {objekt} other {objekt}} kunde inte dupliceras på grund av fel",
Expand Down Expand Up @@ -513,10 +513,10 @@
},
"nav": {
"administrators": "Administratörer",
"assets": "ar",
"assets": "Filer",
"catalog": "Katalog",
"channels": "Kanaler",
"collections": "Kategorier",
"collections": "Samlingar",
"countries": "Länder",
"customer-groups": "Kundgrupper",
"customers": "Kunder",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,15 @@ scalar JSON
scalar DateTime"
`;

exports[`addGraphQLCustomFields() > uses JSON scalar in UpdateActiveAdministratorInput if only internal custom fields defined on Administrator 1`] = `
"scalar JSON
input UpdateActiveAdministratorInput {
placeholder: String
customFields: JSON
}"
`;

exports[`addOrderLineCustomFieldsInput() > Modifies the schema when the addItemToOrder & adjustOrderLine mutation is present 1`] = `
"type Mutation {
addItemToOrder(id: ID!, quantity: Int!, customFields: OrderLineCustomFieldsInput = null): Boolean
Expand Down
24 changes: 24 additions & 0 deletions packages/core/src/api/config/graphql-custom-fields.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { describe, expect, it } from 'vitest';
import { CustomFieldConfig, CustomFields } from '../../config/custom-field/custom-field-types';

import {
addActiveAdministratorCustomFields,
addGraphQLCustomFields,
addOrderLineCustomFieldsInput,
addRegisterCustomerCustomFieldsInput,
Expand All @@ -23,6 +24,29 @@ describe('addGraphQLCustomFields()', () => {
expect(printSchema(result)).toMatchSnapshot();
});

// regression test for
// https://github.com/vendure-ecommerce/vendure/issues/3158
it('uses JSON scalar in UpdateActiveAdministratorInput if only internal custom fields defined on Administrator', () => {
// custom field that is internal but not readonly - should not cause
// `addActiveAdministratorCustomFields` to assume that
// `UpdateAdministratorCustomFieldsInput` exists
const customFieldConfig: Required<Pick<CustomFields, 'Administrator'>> = {
Administrator: [{ name: 'testField', type: 'string', internal: true }],
};
// `addActiveAdministratorCustomFields` should add customFields to
// UpdateActiveAdministratorInput as a JSON scalar. need to provide
// those types for that to work
const input = `
scalar JSON
input UpdateActiveAdministratorInput {
placeholder: String
}
`;
const schema = addActiveAdministratorCustomFields(input, customFieldConfig.Administrator);
expect(printSchema(schema)).toMatchSnapshot();
});

it('extends a type', () => {
const input = `
type Product {
Expand Down
6 changes: 4 additions & 2 deletions packages/core/src/api/config/graphql-custom-fields.ts
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ export function addServerConfigCustomFields(
const customFieldTypeDefs = `
"""
This type is deprecated in v2.2 in favor of the EntityCustomFields type,
which allows custom fields to be defined on user-supplies entities.
which allows custom fields to be defined on user-supplied entities.
"""
type CustomFields {
${Object.keys(customFieldConfig).reduce(
Expand Down Expand Up @@ -288,7 +288,9 @@ export function addActiveAdministratorCustomFields(
administratorCustomFields: CustomFieldConfig[],
) {
const schema = typeof typeDefsOrSchema === 'string' ? buildSchema(typeDefsOrSchema) : typeDefsOrSchema;
const writableCustomFields = administratorCustomFields?.filter(field => field.readonly !== true);
const writableCustomFields = administratorCustomFields?.filter(
field => field.readonly !== true && field.internal !== true,
);
const extension = `
extend input UpdateActiveAdministratorInput {
customFields: ${
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/common/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ export function assertFound<T>(promise: Promise<T | undefined | null>): Promise<
* Compare ID values for equality, taking into account the fact that they may not be of matching types
* (string or number).
*/
export function idsAreEqual(id1?: ID, id2?: ID): boolean {
if (id1 === undefined || id2 === undefined) {
export function idsAreEqual(id1?: ID | null, id2?: ID | null): boolean {
if (id1 == null || id2 == null) {
return false;
}
return id1.toString() === id2.toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

This is an example plugin which demonstrates how to build a multi-vendor marketplace with Vendure. It uses new APIs and features introduced in Vendure v2.0.

The parts of the plugin are documented with explanations, and the overall guide can be found in the [Multi-vendor marketplace](https://docs.vendure.io/developer-guide/multi-vendor-marketplaces/) section of the Vendure docs.
The parts of the plugin are documented with explanations, and the overall guide can be found in the [Multi-vendor marketplace](https://docs.vendure.io/guides/how-to/multi-vendor-marketplaces/) section of the Vendure docs.

## Setup

Expand Down
6 changes: 3 additions & 3 deletions packages/dev-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
"private": true,
"scripts": {
"populate": "node -r ts-node/register -r dotenv/config populate-dev-server.ts",
"run:server": "node -r ts-node/register -r dotenv/config index.ts",
"run:worker": "node -r ts-node/register -r dotenv/config index-worker.ts",
"start": "concurrently npm:run*",
"dev:server": "node -r ts-node/register -r dotenv/config index.ts",
"dev:worker": "node -r ts-node/register -r dotenv/config index-worker.ts",
"dev": "concurrently npm:dev:*",
"load-test:1k": "node -r ts-node/register load-testing/run-load-test.ts 1000",
"load-test:10k": "node -r ts-node/register load-testing/run-load-test.ts 10000",
"load-test:100k": "node -r ts-node/register load-testing/run-load-test.ts 100000"
Expand Down

0 comments on commit 08642b7

Please sign in to comment.