@vendure/core 3.2.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/LICENSE.md +42 -42
  2. package/README.md +11 -11
  3. package/dist/api/config/generate-error-code-enum.js +3 -3
  4. package/dist/api/config/generate-permissions.js +29 -29
  5. package/dist/api/config/graphql-custom-fields.js +158 -158
  6. package/dist/api/schema/admin-api/administrator.api.graphql +47 -47
  7. package/dist/api/schema/admin-api/administrator.type.graphql +14 -14
  8. package/dist/api/schema/admin-api/asset.api.graphql +68 -68
  9. package/dist/api/schema/admin-api/auth.api.graphql +22 -22
  10. package/dist/api/schema/admin-api/channel.api.graphql +69 -69
  11. package/dist/api/schema/admin-api/collection-admin.type.graphql +4 -4
  12. package/dist/api/schema/admin-api/collection.api.graphql +94 -94
  13. package/dist/api/schema/admin-api/country.api.graphql +41 -41
  14. package/dist/api/schema/admin-api/customer-admin.type.graphql +4 -4
  15. package/dist/api/schema/admin-api/customer-group.api.graphql +37 -37
  16. package/dist/api/schema/admin-api/customer.api.graphql +63 -63
  17. package/dist/api/schema/admin-api/duplicate-entity.api.graphql +40 -40
  18. package/dist/api/schema/admin-api/facet-admin.type.graphql +3 -3
  19. package/dist/api/schema/admin-api/facet.api.graphql +100 -100
  20. package/dist/api/schema/admin-api/global-settings.api.graphql +26 -26
  21. package/dist/api/schema/admin-api/global-settings.type.graphql +28 -28
  22. package/dist/api/schema/admin-api/history-entry-admin.type.graphql +4 -4
  23. package/dist/api/schema/admin-api/import.api.graphql +3 -3
  24. package/dist/api/schema/admin-api/import.type.graphql +5 -5
  25. package/dist/api/schema/admin-api/job.api.graphql +63 -63
  26. package/dist/api/schema/admin-api/order-admin.type.graphql +37 -37
  27. package/dist/api/schema/admin-api/order.api.graphql +463 -463
  28. package/dist/api/schema/admin-api/payment-method.api.graphql +65 -65
  29. package/dist/api/schema/admin-api/payment.api.graphql +2 -2
  30. package/dist/api/schema/admin-api/product-admin.type.graphql +21 -21
  31. package/dist/api/schema/admin-api/product-option-group.api.graphql +58 -58
  32. package/dist/api/schema/admin-api/product-search-admin.type.graphql +5 -5
  33. package/dist/api/schema/admin-api/product-search.api.graphql +10 -10
  34. package/dist/api/schema/admin-api/product.api.graphql +225 -225
  35. package/dist/api/schema/admin-api/promotion.api.graphql +70 -70
  36. package/dist/api/schema/admin-api/province.api.graphql +37 -37
  37. package/dist/api/schema/admin-api/role.api.graphql +33 -33
  38. package/dist/api/schema/admin-api/seller.api.graphql +31 -31
  39. package/dist/api/schema/admin-api/shipping-method.api.graphql +91 -91
  40. package/dist/api/schema/admin-api/stock-level.type.graphql +9 -9
  41. package/dist/api/schema/admin-api/stock-location.api.graphql +51 -51
  42. package/dist/api/schema/admin-api/stock-location.type.graphql +7 -7
  43. package/dist/api/schema/admin-api/stock-movement.type.graphql +80 -80
  44. package/dist/api/schema/admin-api/tag.api.graphql +25 -25
  45. package/dist/api/schema/admin-api/tax-category.api.graphql +36 -36
  46. package/dist/api/schema/admin-api/tax-rate.api.graphql +37 -37
  47. package/dist/api/schema/admin-api/zone.api.graphql +42 -42
  48. package/dist/api/schema/common/address.type.graphql +16 -16
  49. package/dist/api/schema/common/asset.type.graphql +31 -31
  50. package/dist/api/schema/common/auth.type.graphql +12 -12
  51. package/dist/api/schema/common/channel.type.graphql +24 -24
  52. package/dist/api/schema/common/collection.type.graphql +40 -40
  53. package/dist/api/schema/common/common-enums.graphql +35 -35
  54. package/dist/api/schema/common/common-error-results.graphql +107 -107
  55. package/dist/api/schema/common/common-types.graphql +285 -285
  56. package/dist/api/schema/common/currency-code.graphql +322 -322
  57. package/dist/api/schema/common/custom-field-types.graphql +265 -265
  58. package/dist/api/schema/common/customer-group.type.graphql +10 -10
  59. package/dist/api/schema/common/customer.type.graphql +18 -18
  60. package/dist/api/schema/common/facet-value.type.graphql +19 -19
  61. package/dist/api/schema/common/facet.type.graphql +35 -35
  62. package/dist/api/schema/common/history-entry.type.graphql +43 -43
  63. package/dist/api/schema/common/language-code.graphql +325 -325
  64. package/dist/api/schema/common/order.type.graphql +257 -257
  65. package/dist/api/schema/common/payment-method.type.graphql +21 -21
  66. package/dist/api/schema/common/product-option-group.type.graphql +38 -38
  67. package/dist/api/schema/common/product-search.type.graphql +69 -69
  68. package/dist/api/schema/common/product.type.graphql +70 -70
  69. package/dist/api/schema/common/promotion.type.graphql +31 -31
  70. package/dist/api/schema/common/region.type.graphql +65 -65
  71. package/dist/api/schema/common/role.type.graphql +14 -14
  72. package/dist/api/schema/common/seller.type.graphql +6 -6
  73. package/dist/api/schema/common/shipping-method.type.graphql +27 -27
  74. package/dist/api/schema/common/tag.type.graphql +11 -11
  75. package/dist/api/schema/common/tax-category.type.graphql +7 -7
  76. package/dist/api/schema/common/tax-rate.type.graphql +16 -16
  77. package/dist/api/schema/common/user.type.graphql +17 -17
  78. package/dist/api/schema/common/zone.type.graphql +8 -8
  79. package/dist/api/schema/shop-api/shop-error-results.graphql +114 -114
  80. package/dist/api/schema/shop-api/shop.api.graphql +287 -287
  81. package/dist/config/auth/native-authentication-strategy.js +5 -5
  82. package/dist/i18n/messages/de.json +117 -117
  83. package/dist/i18n/messages/en.json +140 -140
  84. package/dist/i18n/messages/es.json +38 -38
  85. package/dist/i18n/messages/fr.json +138 -138
  86. package/dist/i18n/messages/pt_BR.json +99 -99
  87. package/dist/i18n/messages/pt_PT.json +118 -118
  88. package/dist/i18n/messages/ru.json +118 -118
  89. package/dist/i18n/messages/uk.json +118 -118
  90. package/dist/migrate.js +15 -15
  91. package/dist/plugin/default-search-plugin/api/api-extensions.js +8 -8
  92. package/dist/plugin/default-search-plugin/search-strategy/mysql-search-strategy.js +3 -3
  93. package/dist/plugin/default-search-plugin/search-strategy/postgres-search-strategy.js +5 -5
  94. package/dist/plugin/default-search-plugin/search-strategy/sqlite-search-strategy.js +4 -4
  95. package/package.json +4 -4
  96. package/cli/cli-utils.d.ts +0 -1
  97. package/cli/cli-utils.js +0 -8
  98. package/cli/cli-utils.js.map +0 -1
  99. package/cli/vendure-cli.d.ts +0 -2
  100. package/cli/vendure-cli.js +0 -119
  101. package/cli/vendure-cli.js.map +0 -1
package/dist/migrate.js CHANGED
@@ -189,21 +189,21 @@ async function disableForeignKeysForSqLite(connection, work) {
189
189
  * Gets contents of the migration file.
190
190
  */
191
191
  function getTemplate(name, timestamp, upSqls, downSqls) {
192
- return `import {MigrationInterface, QueryRunner} from "typeorm";
193
-
194
- export class ${(0, StringUtils_1.camelCase)(name, true)}${timestamp} implements MigrationInterface {
195
-
196
- public async up(queryRunner: QueryRunner): Promise<any> {
197
- ${upSqls.join(`
198
- `)}
199
- }
200
-
201
- public async down(queryRunner: QueryRunner): Promise<any> {
202
- ${downSqls.join(`
203
- `)}
204
- }
205
-
206
- }
192
+ return `import {MigrationInterface, QueryRunner} from "typeorm";
193
+
194
+ export class ${(0, StringUtils_1.camelCase)(name, true)}${timestamp} implements MigrationInterface {
195
+
196
+ public async up(queryRunner: QueryRunner): Promise<any> {
197
+ ${upSqls.join(`
198
+ `)}
199
+ }
200
+
201
+ public async down(queryRunner: QueryRunner): Promise<any> {
202
+ ${downSqls.join(`
203
+ `)}
204
+ }
205
+
206
+ }
207
207
  `;
208
208
  }
209
209
  function log(message) {
@@ -5,13 +5,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.stockStatusExtension = void 0;
7
7
  const graphql_tag_1 = __importDefault(require("graphql-tag"));
8
- exports.stockStatusExtension = (0, graphql_tag_1.default) `
9
- extend type SearchResult {
10
- inStock: Boolean!
11
- }
12
-
13
- extend input SearchInput {
14
- inStock: Boolean
15
- }
8
+ exports.stockStatusExtension = (0, graphql_tag_1.default) `
9
+ extend type SearchResult {
10
+ inStock: Boolean!
11
+ }
12
+
13
+ extend input SearchInput {
14
+ inStock: Boolean
15
+ }
16
16
  `;
17
17
  //# sourceMappingURL=api-extensions.js.map
@@ -122,9 +122,9 @@ class MysqlSearchStrategy {
122
122
  .select('si_inner.productId', 'inner_productId')
123
123
  .addSelect('si_inner.productVariantId', 'inner_productVariantId')
124
124
  .addSelect('IF (si_inner.sku LIKE :like_term, 10, 0)', 'sku_score')
125
- .addSelect(`(SELECT sku_score) +
126
- MATCH (si_inner.productName) AGAINST (:term IN BOOLEAN MODE) * 2 +
127
- MATCH (si_inner.productVariantName) AGAINST (:term IN BOOLEAN MODE) * 1.5 +
125
+ .addSelect(`(SELECT sku_score) +
126
+ MATCH (si_inner.productName) AGAINST (:term IN BOOLEAN MODE) * 2 +
127
+ MATCH (si_inner.productVariantName) AGAINST (:term IN BOOLEAN MODE) * 1.5 +
128
128
  MATCH (si_inner.description) AGAINST (:term IN BOOLEAN MODE) * 1`, 'score')
129
129
  .where(new typeorm_1.Brackets(qb1 => {
130
130
  qb1.where('si_inner.sku LIKE :like_term')
@@ -120,11 +120,11 @@ class PostgresSearchStrategy {
120
120
  qb.where('1 = 1');
121
121
  if (term && term.length > this.minTermLength) {
122
122
  const minIfGrouped = (colName) => input.groupByProduct || forceGroup ? `MIN(${colName})` : colName;
123
- qb.addSelect(`
124
- (ts_rank_cd(to_tsvector(${minIfGrouped('si.sku')}), to_tsquery(:term)) * 10 +
125
- ts_rank_cd(to_tsvector(${minIfGrouped('si.productName')}), to_tsquery(:term)) * 2 +
126
- ts_rank_cd(to_tsvector(${minIfGrouped('si.productVariantName')}), to_tsquery(:term)) * 1.5 +
127
- ts_rank_cd(to_tsvector(${minIfGrouped('si.description')}), to_tsquery(:term)) * 1)
123
+ qb.addSelect(`
124
+ (ts_rank_cd(to_tsvector(${minIfGrouped('si.sku')}), to_tsquery(:term)) * 10 +
125
+ ts_rank_cd(to_tsvector(${minIfGrouped('si.productName')}), to_tsquery(:term)) * 2 +
126
+ ts_rank_cd(to_tsvector(${minIfGrouped('si.productVariantName')}), to_tsquery(:term)) * 1.5 +
127
+ ts_rank_cd(to_tsvector(${minIfGrouped('si.description')}), to_tsquery(:term)) * 1)
128
128
  `, 'score')
129
129
  .andWhere(new typeorm_1.Brackets(qb1 => {
130
130
  qb1.where('to_tsvector(si.sku) @@ to_tsquery(:term)')
@@ -110,10 +110,10 @@ class SqliteSearchStrategy {
110
110
  if (term && term.length > this.minTermLength) {
111
111
  // Note: SQLite does not natively have fulltext search capabilities,
112
112
  // so we just use a weighted LIKE match
113
- qb.addSelect(`
114
- CASE WHEN si.sku LIKE :like_term THEN 10 ELSE 0 END +
115
- CASE WHEN si.productName LIKE :like_term THEN 3 ELSE 0 END +
116
- CASE WHEN si.productVariantName LIKE :like_term THEN 2 ELSE 0 END +
113
+ qb.addSelect(`
114
+ CASE WHEN si.sku LIKE :like_term THEN 10 ELSE 0 END +
115
+ CASE WHEN si.productName LIKE :like_term THEN 3 ELSE 0 END +
116
+ CASE WHEN si.productVariantName LIKE :like_term THEN 2 ELSE 0 END +
117
117
  CASE WHEN si.description LIKE :like_term THEN 1 ELSE 0 END`, 'score')
118
118
  .andWhere(new typeorm_1.Brackets(qb1 => {
119
119
  qb1.where('si.sku LIKE :like_term')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vendure/core",
3
- "version": "3.2.0",
3
+ "version": "3.2.1",
4
4
  "description": "A modern, headless ecommerce framework",
5
5
  "repository": {
6
6
  "type": "git",
@@ -13,7 +13,7 @@
13
13
  "graphql",
14
14
  "typescript"
15
15
  ],
16
- "homepage": "https://www.vendure.io/",
16
+ "homepage": "https://www.vendure.io",
17
17
  "funding": "https://github.com/sponsors/michaelbromley",
18
18
  "private": false,
19
19
  "license": "GPL-3.0-or-later",
@@ -49,7 +49,7 @@
49
49
  "@nestjs/platform-express": "~11.0.12",
50
50
  "@nestjs/terminus": "~11.0.0",
51
51
  "@nestjs/typeorm": "~11.0.0",
52
- "@vendure/common": "^3.2.0",
52
+ "@vendure/common": "^3.2.1",
53
53
  "bcrypt": "^5.1.1",
54
54
  "body-parser": "^1.20.2",
55
55
  "cookie-session": "^2.1.0",
@@ -103,5 +103,5 @@
103
103
  "sqlite3": "^5.1.7",
104
104
  "typescript": "5.8.2"
105
105
  },
106
- "gitHead": "58c173ac0c7854ff53809d69f34a496f3eff1910"
106
+ "gitHead": "d86ca35d52e64990f5cb17dad476c6315a2e548c"
107
107
  }
@@ -1 +0,0 @@
1
- export declare function logColored(message: string): void;
package/cli/cli-utils.js DELETED
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.logColored = void 0;
4
- function logColored(message) {
5
- console.log('\x1b[36m%s\x1b[0m', message);
6
- }
7
- exports.logColored = logColored;
8
- //# sourceMappingURL=cli-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../src/cli/cli-utils.ts"],"names":[],"mappings":";;;AAIA,SAAgB,UAAU,CAAC,OAAe;IACtC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAFD,gCAEC"}
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
@@ -1,119 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- const commander_1 = __importDefault(require("commander"));
8
- const fs_extra_1 = __importDefault(require("fs-extra"));
9
- const path_1 = __importDefault(require("path"));
10
- const cli_utils_1 = require("./cli-utils");
11
- const populate_1 = require("./populate");
12
- const version = require('../../package.json').version;
13
- (0, cli_utils_1.logColored)(`
14
- _
15
- | |
16
- __ _____ _ __ __| |_ _ _ __ ___
17
- \\ \\ / / _ \\ '_ \\ / _\` | | | | '__/ _ \\
18
- \\ V / __/ | | | (_| | |_| | | | __/
19
- \\_/ \\___|_| |_|\\__,_|\\__,_|_| \\___|
20
- `);
21
- commander_1.default.version(`Vendure CLI v${version}`, '-v --version').name('vendure');
22
- commander_1.default
23
- .command('import-products <csvFile>')
24
- .option('-l, --language', 'Specify ISO 639-1 language code, e.g. "de", "es". Defaults to "en"')
25
- .description('Import product data from the specified csv file')
26
- .action(async (csvPath, command) => {
27
- const filePath = path_1.default.join(process.cwd(), csvPath);
28
- await importProducts(filePath, command.language);
29
- });
30
- commander_1.default
31
- .command('init <initDataFile>')
32
- .description('Import initial data from the specified json file')
33
- .action(async (initDataFile, command) => {
34
- const filePath = path_1.default.join(process.cwd(), initDataFile);
35
- (0, cli_utils_1.logColored)(`\nPopulating initial data from "${filePath}"...\n`);
36
- const initialData = require(filePath);
37
- const app = await getApplicationRef();
38
- if (app) {
39
- await (0, populate_1.populateInitialData)(app, initialData);
40
- (0, cli_utils_1.logColored)('\nDone!');
41
- await app.close();
42
- }
43
- process.exit(0);
44
- });
45
- commander_1.default
46
- .command('create-collections <initDataFile>')
47
- .description('Create collections from the specified json file')
48
- .action(async (initDataFile, command) => {
49
- const filePath = path_1.default.join(process.cwd(), initDataFile);
50
- (0, cli_utils_1.logColored)(`\nCreating collections from "${filePath}"...\n`);
51
- const initialData = require(filePath);
52
- const app = await getApplicationRef();
53
- if (app) {
54
- await (0, populate_1.populateCollections)(app, initialData);
55
- (0, cli_utils_1.logColored)('\nDone!');
56
- await app.close();
57
- }
58
- process.exit(0);
59
- });
60
- commander_1.default.parse(process.argv);
61
- if (!process.argv.slice(2).length) {
62
- commander_1.default.help();
63
- }
64
- async function importProducts(csvPath, languageCode) {
65
- (0, cli_utils_1.logColored)(`\nImporting from "${csvPath}"...\n`);
66
- const app = await getApplicationRef();
67
- if (app) {
68
- await (0, populate_1.importProductsFromCsv)(app, csvPath, languageCode);
69
- (0, cli_utils_1.logColored)('\nDone!');
70
- await app.close();
71
- process.exit(0);
72
- }
73
- }
74
- async function getApplicationRef() {
75
- const tsConfigFile = path_1.default.join(process.cwd(), 'vendure-config.ts');
76
- const jsConfigFile = path_1.default.join(process.cwd(), 'vendure-config.js');
77
- let isTs = false;
78
- let configFile;
79
- if (fs_extra_1.default.existsSync(tsConfigFile)) {
80
- configFile = tsConfigFile;
81
- isTs = true;
82
- }
83
- else if (fs_extra_1.default.existsSync(jsConfigFile)) {
84
- configFile = jsConfigFile;
85
- }
86
- if (!configFile) {
87
- console.error('Could not find a config file');
88
- console.error(`Checked "${tsConfigFile}", "${jsConfigFile}"`);
89
- process.exit(1);
90
- return;
91
- }
92
- if (isTs) {
93
- const tsNode = require('ts-node');
94
- if (!tsNode) {
95
- console.error('For "populate" to work with TypeScript projects, you must have ts-node installed');
96
- process.exit(1);
97
- return;
98
- }
99
- require('ts-node').register();
100
- }
101
- const index = require(configFile);
102
- if (!index) {
103
- console.error(`Could not read the contents of "${configFile}"`);
104
- process.exit(1);
105
- return;
106
- }
107
- if (!index.config) {
108
- console.error(`The file "${configFile}" does not export a "config" object`);
109
- process.exit(1);
110
- return;
111
- }
112
- const config = index.config;
113
- config.dbConnectionOptions.synchronize = true;
114
- const { bootstrap } = require('@vendure/core');
115
- console.log('Bootstrapping Vendure server...');
116
- const app = await bootstrap(config);
117
- return app;
118
- }
119
- //# sourceMappingURL=vendure-cli.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vendure-cli.js","sourceRoot":"","sources":["../src/cli/vendure-cli.ts"],"names":[],"mappings":"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"}