| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492 |
- /* eslint-disable no-console */
- import { AdminUiPlugin } from '@vendure/admin-ui-plugin';
- import { AssetServerPlugin } from '@vendure/asset-server-plugin';
- import { ADMIN_API_PATH, API_PORT, SHOP_API_PATH } from '@vendure/common/lib/shared-constants';
- import {
- Asset,
- DefaultJobQueuePlugin,
- DefaultLogger,
- DefaultSearchPlugin,
- dummyPaymentHandler,
- LanguageCode,
- LogLevel,
- VendureConfig,
- } from '@vendure/core';
- import { ElasticsearchPlugin } from '@vendure/elasticsearch-plugin';
- import { defaultEmailHandlers, EmailPlugin } from '@vendure/email-plugin';
- import { BullMQJobQueuePlugin } from '@vendure/job-queue-plugin/package/bullmq';
- import 'dotenv/config';
- import { compileUiExtensions } from '@vendure/ui-devkit/compiler';
- import path from 'path';
- import { DataSourceOptions } from 'typeorm';
- import { MultivendorPlugin } from './test-plugins/multivendor-plugin/multivendor.plugin';
- /**
- * Config settings used during development
- */
- export const devConfig: VendureConfig = {
- apiOptions: {
- port: API_PORT,
- adminApiPath: ADMIN_API_PATH,
- adminApiPlayground: {
- settings: {
- 'request.credentials': 'include',
- } as any,
- },
- adminApiDebug: true,
- shopApiPath: SHOP_API_PATH,
- shopApiPlayground: {
- settings: {
- 'request.credentials': 'include',
- } as any,
- },
- shopApiDebug: true,
- },
- authOptions: {
- disableAuth: false,
- tokenMethod: ['bearer', 'cookie'] as const,
- requireVerification: true,
- customPermissions: [],
- cookieOptions: {
- secret: 'abc',
- },
- },
- dbConnectionOptions: {
- synchronize: false,
- logging: false,
- migrations: [path.join(__dirname, 'migrations/*.ts')],
- ...getDbConfig(),
- },
- paymentOptions: {
- paymentMethodHandlers: [dummyPaymentHandler],
- },
- customFields: {
- // ProductVariant: [
- // {
- // name: 'weight',
- // type: 'int',
- // defaultValue: 0,
- // nullable: false,
- // min: 0,
- // step: 1,
- // public: true,
- // label: [{ languageCode: LanguageCode.en, value: 'Weight' }],
- // ui: { component: 'number-form-input', suffix: 'g' },
- // },
- // {
- // name: 'gtin',
- // type: 'string',
- // nullable: true,
- // public: true,
- // label: [{ languageCode: LanguageCode.en, value: 'GTIN (barcode)' }],
- // },
- // ],
- },
- /* customFields: {
- ProductVariant: [
- {
- name: 'weight',
- type: 'int',
- defaultValue: 0,
- nullable: false,
- min: 0,
- step: 1,
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'Weight' }],
- ui: { component: 'number-form-input', suffix: 'g' },
- },
- {
- name: 'rrp',
- type: 'int',
- nullable: true,
- min: 0,
- step: 1,
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'RRP' }],
- ui: { component: 'currency-form-input' },
- },
- {
- name: 'gtin',
- type: 'string',
- nullable: true,
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'GTIN (barcode)' }],
- },
- {
- name: 'additionalInformation',
- type: 'text',
- nullable: true,
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'Additional Information' }],
- ui: { component: 'json-editor-form-input' },
- },
- ],
- Product: [
- {
- name: 'searchKeywords',
- label: [{ languageCode: LanguageCode.en, value: 'Search keywords' }],
- type: 'string',
- defaultValue: '',
- public: false,
- },
- {
- name: 'pageType',
- label: [{ languageCode: LanguageCode.en, value: 'Page type' }],
- type: 'string',
- defaultValue: 'default',
- public: true,
- options: [
- { value: 'default', label: [{ languageCode: LanguageCode.en, value: 'Default' }] },
- {
- value: 'colour-chart',
- label: [{ languageCode: LanguageCode.en, value: 'Colour chart' }],
- },
- {
- value: 'select-menu',
- label: [{ languageCode: LanguageCode.en, value: 'Select menu' }],
- },
- { value: 'gift-card', label: [{ languageCode: LanguageCode.en, value: 'Gift card' }] },
- ],
- ui: { tab: 'Display' },
- },
- {
- name: 'keyFeatures',
- label: [{ languageCode: LanguageCode.en, value: 'Key features' }],
- type: 'text',
- public: true,
- nullable: true,
- ui: { component: 'rich-text-form-input' },
- },
- {
- name: 'videoUrls',
- label: [{ languageCode: LanguageCode.en, value: 'Video urls' }],
- type: 'string',
- list: true,
- public: true,
- nullable: false,
- defaultValue: [],
- },
- {
- name: 'variantOrdering',
- label: [{ languageCode: LanguageCode.en, value: 'Variant ordering' }],
- type: 'string',
- defaultValue: 'default',
- public: true,
- options: [
- { value: 'default', label: [{ languageCode: LanguageCode.en, value: 'Default' }] },
- {
- value: 'alphabetical',
- label: [{ languageCode: LanguageCode.en, value: 'Alphabetical' }],
- },
- {
- value: 'brush-size',
- label: [{ languageCode: LanguageCode.en, value: 'Brush size (000, 00, 0, 1, ...)' }],
- },
- {
- value: 'dimension',
- label: [
- { languageCode: LanguageCode.en, value: 'Dimension (5" x 5", 10" x 12",...)' },
- ],
- },
- ],
- ui: { tab: 'Display' },
- },
- {
- name: 'seoTitle',
- type: 'localeString',
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'SEO Title' }],
- nullable: true,
- ui: { tab: 'SEO' },
- },
- {
- name: 'seoDescription',
- type: 'localeString',
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'SEO Description' }],
- nullable: true,
- ui: { tab: 'SEO', component: 'textarea-form-input' },
- },
- {
- name: 'seoImage',
- type: 'relation',
- entity: Asset,
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'SEO Image' }],
- nullable: true,
- ui: { tab: 'SEO' },
- },
- {
- name: 'boost',
- type: 'int',
- public: true,
- defaultValue: 0,
- min: 0,
- max: 5,
- label: [{ languageCode: LanguageCode.en, value: 'Boost in list pages' }],
- nullable: true,
- },
- {
- name: 'minimumOrderQuantity',
- type: 'int',
- public: true,
- min: 0,
- label: [{ languageCode: LanguageCode.en, value: 'Minimum order quantity' }],
- description: [
- {
- languageCode: LanguageCode.en,
- value: 'If set, the customer must order at least this number of any variants of this product',
- },
- ],
- nullable: true,
- },
- ],
- Collection: [
- {
- name: 'excludeFromNavMenu',
- label: [{ languageCode: LanguageCode.en, value: 'Exclude from nav menu' }],
- type: 'boolean',
- defaultValue: false,
- public: true,
- },
- {
- name: 'excludeFromSubCollections',
- label: [{ languageCode: LanguageCode.en, value: 'Exclude from sub collections' }],
- type: 'boolean',
- defaultValue: false,
- public: true,
- },
- {
- name: 'noIndex',
- label: [{ languageCode: LanguageCode.en, value: 'Do not allow crawlers to index' }],
- type: 'boolean',
- defaultValue: false,
- public: true,
- ui: { tab: 'SEO' },
- },
- {
- name: 'searchKeywords',
- label: [{ languageCode: LanguageCode.en, value: 'Search keywords' }],
- type: 'string',
- defaultValue: '',
- public: false,
- },
- {
- name: 'layout',
- type: 'string',
- public: true,
- nullable: false,
- defaultValue: 'fullWidth',
- label: [{ languageCode: LanguageCode.en, value: 'Layout mode' }],
- options: [
- { value: 'default', label: [{ languageCode: LanguageCode.en, value: 'Default' }] },
- { value: 'fullWidth', label: [{ languageCode: LanguageCode.en, value: 'Full width' }] },
- ],
- },
- {
- name: 'seoTitle',
- type: 'localeString',
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'SEO Meta Title' }],
- nullable: true,
- ui: { tab: 'SEO' },
- },
- {
- name: 'seoDescription',
- type: 'localeString',
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'SEO Meta Description' }],
- nullable: true,
- ui: { tab: 'SEO', component: 'textarea-form-input' },
- },
- {
- name: 'seoImage',
- type: 'relation',
- entity: Asset,
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'SEO Meta Image' }],
- nullable: true,
- ui: { tab: 'SEO' },
- },
- {
- name: 'extendedDescription',
- type: 'text',
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'Extended description' }],
- nullable: true,
- ui: { tab: 'SEO', component: 'rich-text-form-input' },
- },
- {
- name: 'isOfferCollection',
- type: 'boolean',
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'Is offer collecion' }],
- nullable: true,
- defaultValue: false,
- ui: { tab: 'Offers' },
- },
- {
- name: 'offerName',
- type: 'string',
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'Offer name' }],
- nullable: true,
- ui: { tab: 'Offers' },
- },
- {
- name: 'offerDescription',
- type: 'string',
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'Offer description' }],
- nullable: true,
- ui: { tab: 'Offers', component: 'rich-text-form-input' },
- },
- {
- name: 'displayRrpDiscount',
- type: 'boolean',
- public: true,
- label: [{ languageCode: LanguageCode.en, value: 'Display RRP discount' }],
- description: [
- {
- languageCode: LanguageCode.en,
- value: 'When enabled, the RRP discount of included products will be displayed in the storefront',
- },
- ],
- nullable: true,
- ui: { tab: 'Offers' },
- },
- ],
- }, */
- logger: new DefaultLogger({ level: LogLevel.Verbose }),
- importExportOptions: {
- importAssetsDir: path.join(__dirname, 'import-assets'),
- },
- plugins: [
- // MultivendorPlugin,
- AssetServerPlugin.init({
- route: 'assets',
- assetUploadDir: path.join(__dirname, 'assets'),
- }),
- DefaultSearchPlugin.init({ bufferUpdates: false, indexStockStatus: false }),
- BullMQJobQueuePlugin.init({}),
- // DefaultJobQueuePlugin.init({}),
- // JobQueueTestPlugin.init({ queueCount: 10 }),
- // ElasticsearchPlugin.init({
- // host: 'http://localhost',
- // port: 9200,
- // bufferUpdates: true,
- // }),
- EmailPlugin.init({
- devMode: true,
- route: 'mailbox',
- handlers: defaultEmailHandlers,
- templatePath: path.join(__dirname, '../email-plugin/templates'),
- outputPath: path.join(__dirname, 'test-emails'),
- globalTemplateVars: {
- verifyEmailAddressUrl: 'http://localhost:4201/verify',
- passwordResetUrl: 'http://localhost:4201/reset-password',
- changeEmailAddressUrl: 'http://localhost:4201/change-email-address',
- },
- }),
- AdminUiPlugin.init({
- route: 'admin',
- port: 5001,
- // Un-comment to compile a custom admin ui
- app: compileUiExtensions({
- outputPath: path.join(__dirname, './custom-admin-ui'),
- extensions: [
- {
- id: 'test-ui-extension',
- extensionPath: path.join(__dirname, 'test-plugins/with-ui-extension/ui'),
- ngModules: [
- {
- type: 'lazy',
- route: 'greetz',
- ngModuleFileName: 'greeter.module.ts',
- ngModuleName: 'GreeterModule',
- },
- {
- type: 'shared',
- ngModuleFileName: 'greeter-shared.module.ts',
- ngModuleName: 'GreeterSharedModule',
- },
- ],
- },
- {
- globalStyles: path.join(
- __dirname,
- 'test-plugins/with-ui-extension/ui/custom-theme.scss',
- ),
- },
- {
- id: 'external-ui-extension',
- extensionPath: path.join(__dirname, 'test-plugins/with-external-ui-extension'),
- ngModules: [
- {
- type: 'lazy',
- route: 'greet',
- ngModuleFileName: 'external-ui-extension.ts',
- ngModuleName: 'ExternalUiExtensionModule',
- },
- ],
- staticAssets: [
- {
- path: path.join(__dirname, 'test-plugins/with-external-ui-extension/app'),
- rename: 'external-app',
- },
- ],
- },
- ],
- devMode: true,
- }),
- }),
- ],
- };
- function getDbConfig(): DataSourceOptions {
- const dbType = process.env.DB || 'mysql';
- switch (dbType) {
- case 'postgres':
- console.log('Using postgres connection');
- return {
- synchronize: false,
- type: 'postgres',
- host: process.env.DB_HOST || 'localhost',
- port: Number(process.env.DB_PORT) || 5432,
- username: process.env.DB_USERNAME || 'postgres',
- password: process.env.DB_PASSWORD || 'postgres',
- database: process.env.DB_NAME || 'vendure',
- schema: process.env.DB_SCHEMA || 'public',
- };
- case 'sqlite':
- console.log('Using sqlite connection');
- return {
- synchronize: false,
- type: 'better-sqlite3',
- database: path.join(__dirname, 'vendure.sqlite'),
- };
- case 'sqljs':
- console.log('Using sql.js connection');
- return {
- type: 'sqljs',
- autoSave: true,
- database: new Uint8Array([]),
- location: path.join(__dirname, 'vendure.sqlite'),
- };
- case 'mysql':
- default:
- console.log('Using mysql connection');
- return {
- synchronize: false,
- type: 'mariadb',
- host: '127.0.0.1',
- port: 3306,
- username: 'root',
- password: '',
- database: 'vendure2-dev',
- };
- }
- }
|