@vendure/cli 2.3.2 → 2.3.4

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 (22) hide show
  1. package/dist/cli.js +9 -9
  2. package/dist/commands/add/api-extension/templates/api-extensions.template.ts +3 -3
  3. package/dist/commands/add/api-extension/templates/crud-resolver.template.ts +109 -109
  4. package/dist/commands/add/api-extension/templates/simple-resolver.template.ts +31 -31
  5. package/dist/commands/add/codegen/add-codegen.js +6 -6
  6. package/dist/commands/add/codegen/templates/codegen.template.ts +17 -17
  7. package/dist/commands/add/entity/templates/entity-translation.template.ts +29 -29
  8. package/dist/commands/add/entity/templates/entity.template.ts +31 -31
  9. package/dist/commands/add/job-queue/add-job-queue.js +36 -36
  10. package/dist/commands/add/plugin/templates/constants.template.ts +2 -2
  11. package/dist/commands/add/plugin/templates/plugin.template.ts +25 -25
  12. package/dist/commands/add/plugin/templates/types.template.ts +7 -7
  13. package/dist/commands/add/service/add-service.js +21 -21
  14. package/dist/commands/add/service/templates/basic-service.template.ts +13 -13
  15. package/dist/commands/add/service/templates/entity-service.template.ts +146 -146
  16. package/dist/commands/add/ui-extensions/codemods/add-ui-extension-static-prop/add-ui-extension-static-prop.js +5 -5
  17. package/dist/commands/add/ui-extensions/codemods/update-admin-ui-plugin-init/update-admin-ui-plugin-init.js +6 -6
  18. package/dist/commands/add/ui-extensions/templates/providers.template.ts +3 -3
  19. package/dist/commands/add/ui-extensions/templates/routes.template.ts +3 -3
  20. package/dist/shared/vendure-plugin-ref.js +3 -3
  21. package/package.json +4 -4
  22. package/LICENSE +0 -9
package/dist/cli.js CHANGED
@@ -34,15 +34,15 @@ const version = require('../package.json').version;
34
34
  program
35
35
  .version(version)
36
36
  .usage(`vendure <command>`)
37
- .description(picocolors_1.default.blue(`
38
- 888
39
- 888
40
- 888
41
- 888 888 .d88b. 88888b. .d88888 888 888 888d888 .d88b.
42
- 888 888 d8P Y8b 888 "88b d88" 888 888 888 888P" d8P Y8b
43
- Y88 88P 88888888 888 888 888 888 888 888 888 88888888
44
- Y8bd8P Y8b. 888 888 Y88b 888 Y88b 888 888 Y8b.
45
- Y88P "Y8888 888 888 "Y88888 "Y88888 888 "Y8888
37
+ .description(picocolors_1.default.blue(`
38
+ 888
39
+ 888
40
+ 888
41
+ 888 888 .d88b. 88888b. .d88888 888 888 888d888 .d88b.
42
+ 888 888 d8P Y8b 888 "88b d88" 888 888 888 888P" d8P Y8b
43
+ Y88 88P 88888888 888 888 888 888 888 888 888 88888888
44
+ Y8bd8P Y8b. 888 888 Y88b 888 Y88b 888 888 Y8b.
45
+ Y88P "Y8888 888 888 "Y88888 "Y88888 888 "Y8888
46
46
  `));
47
47
  program
48
48
  .command('add')
@@ -1,3 +1,3 @@
1
- import gql from 'graphql-tag';
2
-
3
- export const adminApiExtensions = gql``;
1
+ import gql from 'graphql-tag';
2
+
3
+ export const adminApiExtensions = gql``;
@@ -1,109 +1,109 @@
1
- import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
2
- import { DeletionResponse, Permission } from '@vendure/common/lib/generated-types';
3
- import { CustomFieldsObject } from '@vendure/common/lib/shared-types';
4
- import {
5
- Allow,
6
- Ctx,
7
- PaginatedList,
8
- RequestContext,
9
- Transaction,
10
- Relations,
11
- VendureEntity,
12
- ID,
13
- TranslationInput,
14
- ListQueryOptions,
15
- RelationPaths,
16
- } from '@vendure/core';
17
-
18
- class TemplateEntity extends VendureEntity {
19
- constructor() {
20
- super();
21
- }
22
- }
23
-
24
- class TemplateService {
25
- findAll(ctx: RequestContext, options?: any, relations?: any): Promise<PaginatedList<TemplateEntity>> {
26
- throw new Error('Method not implemented.');
27
- }
28
-
29
- findOne(ctx: RequestContext, id: ID, relations?: any): Promise<TemplateEntity | null> {
30
- throw new Error('Method not implemented.');
31
- }
32
-
33
- create(ctx: RequestContext, input: any): Promise<TemplateEntity> {
34
- throw new Error('Method not implemented.');
35
- }
36
-
37
- update(ctx: RequestContext, input: any): Promise<TemplateEntity> {
38
- throw new Error('Method not implemented.');
39
- }
40
-
41
- delete(ctx: RequestContext, id: ID): Promise<DeletionResponse> {
42
- throw new Error('Method not implemented.');
43
- }
44
- }
45
-
46
- // These can be replaced by generated types if you set up code generation
47
- interface CreateEntityInput {
48
- // Define the input fields here
49
- customFields?: CustomFieldsObject;
50
- translations: Array<TranslationInput<TemplateEntity>>;
51
- }
52
- interface UpdateEntityInput {
53
- id: ID;
54
- // Define the input fields here
55
- customFields?: CustomFieldsObject;
56
- translations: Array<TranslationInput<TemplateEntity>>;
57
- }
58
-
59
- @Resolver()
60
- export class EntityAdminResolver {
61
- constructor(private templateService: TemplateService) {}
62
-
63
- @Query()
64
- @Allow(Permission.SuperAdmin)
65
- async entity(
66
- @Ctx() ctx: RequestContext,
67
- @Args() args: { id: ID },
68
- @Relations(TemplateEntity) relations: RelationPaths<TemplateEntity>,
69
- ): Promise<TemplateEntity | null> {
70
- return this.templateService.findOne(ctx, args.id, relations);
71
- }
72
-
73
- @Query()
74
- @Allow(Permission.SuperAdmin)
75
- async entities(
76
- @Ctx() ctx: RequestContext,
77
- @Args() args: { options: ListQueryOptions<TemplateEntity> },
78
- @Relations(TemplateEntity) relations: RelationPaths<TemplateEntity>,
79
- ): Promise<PaginatedList<TemplateEntity>> {
80
- return this.templateService.findAll(ctx, args.options || undefined, relations);
81
- }
82
-
83
- @Mutation()
84
- @Transaction()
85
- @Allow(Permission.SuperAdmin)
86
- async createEntity(
87
- @Ctx() ctx: RequestContext,
88
- @Args() args: { input: CreateEntityInput },
89
- ): Promise<TemplateEntity> {
90
- return this.templateService.create(ctx, args.input);
91
- }
92
-
93
- @Mutation()
94
- @Transaction()
95
- @Allow(Permission.SuperAdmin)
96
- async updateEntity(
97
- @Ctx() ctx: RequestContext,
98
- @Args() args: { input: UpdateEntityInput },
99
- ): Promise<TemplateEntity> {
100
- return this.templateService.update(ctx, args.input);
101
- }
102
-
103
- @Mutation()
104
- @Transaction()
105
- @Allow(Permission.SuperAdmin)
106
- async deleteEntity(@Ctx() ctx: RequestContext, @Args() args: { id: ID }): Promise<DeletionResponse> {
107
- return this.templateService.delete(ctx, args.id);
108
- }
109
- }
1
+ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
2
+ import { DeletionResponse, Permission } from '@vendure/common/lib/generated-types';
3
+ import { CustomFieldsObject } from '@vendure/common/lib/shared-types';
4
+ import {
5
+ Allow,
6
+ Ctx,
7
+ PaginatedList,
8
+ RequestContext,
9
+ Transaction,
10
+ Relations,
11
+ VendureEntity,
12
+ ID,
13
+ TranslationInput,
14
+ ListQueryOptions,
15
+ RelationPaths,
16
+ } from '@vendure/core';
17
+
18
+ class TemplateEntity extends VendureEntity {
19
+ constructor() {
20
+ super();
21
+ }
22
+ }
23
+
24
+ class TemplateService {
25
+ findAll(ctx: RequestContext, options?: any, relations?: any): Promise<PaginatedList<TemplateEntity>> {
26
+ throw new Error('Method not implemented.');
27
+ }
28
+
29
+ findOne(ctx: RequestContext, id: ID, relations?: any): Promise<TemplateEntity | null> {
30
+ throw new Error('Method not implemented.');
31
+ }
32
+
33
+ create(ctx: RequestContext, input: any): Promise<TemplateEntity> {
34
+ throw new Error('Method not implemented.');
35
+ }
36
+
37
+ update(ctx: RequestContext, input: any): Promise<TemplateEntity> {
38
+ throw new Error('Method not implemented.');
39
+ }
40
+
41
+ delete(ctx: RequestContext, id: ID): Promise<DeletionResponse> {
42
+ throw new Error('Method not implemented.');
43
+ }
44
+ }
45
+
46
+ // These can be replaced by generated types if you set up code generation
47
+ interface CreateEntityInput {
48
+ // Define the input fields here
49
+ customFields?: CustomFieldsObject;
50
+ translations: Array<TranslationInput<TemplateEntity>>;
51
+ }
52
+ interface UpdateEntityInput {
53
+ id: ID;
54
+ // Define the input fields here
55
+ customFields?: CustomFieldsObject;
56
+ translations: Array<TranslationInput<TemplateEntity>>;
57
+ }
58
+
59
+ @Resolver()
60
+ export class EntityAdminResolver {
61
+ constructor(private templateService: TemplateService) {}
62
+
63
+ @Query()
64
+ @Allow(Permission.SuperAdmin)
65
+ async entity(
66
+ @Ctx() ctx: RequestContext,
67
+ @Args() args: { id: ID },
68
+ @Relations(TemplateEntity) relations: RelationPaths<TemplateEntity>,
69
+ ): Promise<TemplateEntity | null> {
70
+ return this.templateService.findOne(ctx, args.id, relations);
71
+ }
72
+
73
+ @Query()
74
+ @Allow(Permission.SuperAdmin)
75
+ async entities(
76
+ @Ctx() ctx: RequestContext,
77
+ @Args() args: { options: ListQueryOptions<TemplateEntity> },
78
+ @Relations(TemplateEntity) relations: RelationPaths<TemplateEntity>,
79
+ ): Promise<PaginatedList<TemplateEntity>> {
80
+ return this.templateService.findAll(ctx, args.options || undefined, relations);
81
+ }
82
+
83
+ @Mutation()
84
+ @Transaction()
85
+ @Allow(Permission.SuperAdmin)
86
+ async createEntity(
87
+ @Ctx() ctx: RequestContext,
88
+ @Args() args: { input: CreateEntityInput },
89
+ ): Promise<TemplateEntity> {
90
+ return this.templateService.create(ctx, args.input);
91
+ }
92
+
93
+ @Mutation()
94
+ @Transaction()
95
+ @Allow(Permission.SuperAdmin)
96
+ async updateEntity(
97
+ @Ctx() ctx: RequestContext,
98
+ @Args() args: { input: UpdateEntityInput },
99
+ ): Promise<TemplateEntity> {
100
+ return this.templateService.update(ctx, args.input);
101
+ }
102
+
103
+ @Mutation()
104
+ @Transaction()
105
+ @Allow(Permission.SuperAdmin)
106
+ async deleteEntity(@Ctx() ctx: RequestContext, @Args() args: { id: ID }): Promise<DeletionResponse> {
107
+ return this.templateService.delete(ctx, args.id);
108
+ }
109
+ }
@@ -1,31 +1,31 @@
1
- import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
2
- import { Permission } from '@vendure/common/lib/generated-types';
3
- import { ID } from '@vendure/common/lib/shared-types';
4
- import { Allow, Ctx, RequestContext, Transaction } from '@vendure/core';
5
-
6
- class TemplateService {
7
- async exampleQueryHandler(ctx: RequestContext, id: ID) {
8
- return true;
9
- }
10
- async exampleMutationHandler(ctx: RequestContext, id: ID) {
11
- return true;
12
- }
13
- }
14
-
15
- @Resolver()
16
- export class SimpleAdminResolver {
17
- constructor(private templateService: TemplateService) {}
18
-
19
- @Query()
20
- @Allow(Permission.SuperAdmin)
21
- async exampleQuery(@Ctx() ctx: RequestContext, @Args() args: { id: ID }): Promise<boolean> {
22
- return this.templateService.exampleQueryHandler(ctx, args.id);
23
- }
24
-
25
- @Mutation()
26
- @Transaction()
27
- @Allow(Permission.SuperAdmin)
28
- async exampleMutation(@Ctx() ctx: RequestContext, @Args() args: { id: ID }): Promise<boolean> {
29
- return this.templateService.exampleMutationHandler(ctx, args.id);
30
- }
31
- }
1
+ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
2
+ import { Permission } from '@vendure/common/lib/generated-types';
3
+ import { ID } from '@vendure/common/lib/shared-types';
4
+ import { Allow, Ctx, RequestContext, Transaction } from '@vendure/core';
5
+
6
+ class TemplateService {
7
+ async exampleQueryHandler(ctx: RequestContext, id: ID) {
8
+ return true;
9
+ }
10
+ async exampleMutationHandler(ctx: RequestContext, id: ID) {
11
+ return true;
12
+ }
13
+ }
14
+
15
+ @Resolver()
16
+ export class SimpleAdminResolver {
17
+ constructor(private templateService: TemplateService) {}
18
+
19
+ @Query()
20
+ @Allow(Permission.SuperAdmin)
21
+ async exampleQuery(@Ctx() ctx: RequestContext, @Args() args: { id: ID }): Promise<boolean> {
22
+ return this.templateService.exampleQueryHandler(ctx, args.id);
23
+ }
24
+
25
+ @Mutation()
26
+ @Transaction()
27
+ @Allow(Permission.SuperAdmin)
28
+ async exampleMutation(@Ctx() ctx: RequestContext, @Args() args: { id: ID }): Promise<boolean> {
29
+ return this.templateService.exampleMutationHandler(ctx, args.id);
30
+ }
31
+ }
@@ -86,12 +86,12 @@ async function addCodegen(options) {
86
86
  codegenFile.addEntryToGeneratesObject({
87
87
  name: `'${uiExtensionsPath}/gql/'`,
88
88
  kind: ts_morph_1.StructureKind.PropertyAssignment,
89
- initializer: `{
90
- preset: 'client',
91
- documents: '${uiExtensionsPath}/**/*.ts',
92
- presetConfig: {
93
- fragmentMasking: false,
94
- },
89
+ initializer: `{
90
+ preset: 'client',
91
+ documents: '${uiExtensionsPath}/**/*.ts',
92
+ presetConfig: {
93
+ fragmentMasking: false,
94
+ },
95
95
  }`,
96
96
  });
97
97
  }
@@ -1,17 +1,17 @@
1
- import type { CodegenConfig } from '@graphql-codegen/cli';
2
-
3
- const config: CodegenConfig = {
4
- overwrite: true,
5
- // This assumes your server is running on the standard port
6
- // and with the default admin API path. Adjust accordingly.
7
- schema: 'http://localhost:3000/admin-api',
8
- config: {
9
- // This tells codegen that the `Money` scalar is a number
10
- scalars: { Money: 'number' },
11
- // This ensures generated enums do not conflict with the built-in types.
12
- namingConvention: { enumValues: 'keep' },
13
- },
14
- generates: {},
15
- };
16
-
17
- export default config;
1
+ import type { CodegenConfig } from '@graphql-codegen/cli';
2
+
3
+ const config: CodegenConfig = {
4
+ overwrite: true,
5
+ // This assumes your server is running on the standard port
6
+ // and with the default admin API path. Adjust accordingly.
7
+ schema: 'http://localhost:3000/admin-api',
8
+ config: {
9
+ // This tells codegen that the `Money` scalar is a number
10
+ scalars: { Money: 'number' },
11
+ // This ensures generated enums do not conflict with the built-in types.
12
+ namingConvention: { enumValues: 'keep' },
13
+ },
14
+ generates: {},
15
+ };
16
+
17
+ export default config;
@@ -1,29 +1,29 @@
1
- import { LanguageCode } from '@vendure/common/lib/generated-types';
2
- import { DeepPartial } from '@vendure/common/lib/shared-types';
3
- import { HasCustomFields, Translation, VendureEntity } from '@vendure/core';
4
- import { Column, Entity, Index, ManyToOne } from 'typeorm';
5
-
6
- import { ScaffoldEntity } from './entity.template';
7
-
8
- export class ScaffoldEntityCustomFieldsTranslation {}
9
-
10
- @Entity()
11
- export class ScaffoldTranslation
12
- extends VendureEntity
13
- implements Translation<ScaffoldEntity>, HasCustomFields
14
- {
15
- constructor(input?: DeepPartial<Translation<ScaffoldTranslation>>) {
16
- super(input);
17
- }
18
-
19
- @Column('varchar') languageCode: LanguageCode;
20
-
21
- @Column() localizedName: string;
22
-
23
- @Index()
24
- @ManyToOne(type => ScaffoldEntity, base => base.translations, { onDelete: 'CASCADE' })
25
- base: ScaffoldEntity;
26
-
27
- @Column(type => ScaffoldEntityCustomFieldsTranslation)
28
- customFields: ScaffoldEntityCustomFieldsTranslation;
29
- }
1
+ import { LanguageCode } from '@vendure/common/lib/generated-types';
2
+ import { DeepPartial } from '@vendure/common/lib/shared-types';
3
+ import { HasCustomFields, Translation, VendureEntity } from '@vendure/core';
4
+ import { Column, Entity, Index, ManyToOne } from 'typeorm';
5
+
6
+ import { ScaffoldEntity } from './entity.template';
7
+
8
+ export class ScaffoldEntityCustomFieldsTranslation {}
9
+
10
+ @Entity()
11
+ export class ScaffoldTranslation
12
+ extends VendureEntity
13
+ implements Translation<ScaffoldEntity>, HasCustomFields
14
+ {
15
+ constructor(input?: DeepPartial<Translation<ScaffoldTranslation>>) {
16
+ super(input);
17
+ }
18
+
19
+ @Column('varchar') languageCode: LanguageCode;
20
+
21
+ @Column() localizedName: string;
22
+
23
+ @Index()
24
+ @ManyToOne(type => ScaffoldEntity, base => base.translations, { onDelete: 'CASCADE' })
25
+ base: ScaffoldEntity;
26
+
27
+ @Column(type => ScaffoldEntityCustomFieldsTranslation)
28
+ customFields: ScaffoldEntityCustomFieldsTranslation;
29
+ }
@@ -1,31 +1,31 @@
1
- import {
2
- DeepPartial,
3
- HasCustomFields,
4
- LocaleString,
5
- Translatable,
6
- Translation,
7
- VendureEntity,
8
- } from '@vendure/core';
9
- import { Column, Entity, OneToMany } from 'typeorm';
10
-
11
- import { ScaffoldTranslation } from './entity-translation.template';
12
-
13
- export class ScaffoldEntityCustomFields {}
14
-
15
- @Entity()
16
- export class ScaffoldEntity extends VendureEntity implements Translatable, HasCustomFields {
17
- constructor(input?: DeepPartial<ScaffoldEntity>) {
18
- super(input);
19
- }
20
-
21
- @Column()
22
- code: string;
23
-
24
- @Column(type => ScaffoldEntityCustomFields)
25
- customFields: ScaffoldEntityCustomFields;
26
-
27
- localizedName: LocaleString;
28
-
29
- @OneToMany(type => ScaffoldTranslation, translation => translation.base, { eager: true })
30
- translations: Array<Translation<ScaffoldEntity>>;
31
- }
1
+ import {
2
+ DeepPartial,
3
+ HasCustomFields,
4
+ LocaleString,
5
+ Translatable,
6
+ Translation,
7
+ VendureEntity,
8
+ } from '@vendure/core';
9
+ import { Column, Entity, OneToMany } from 'typeorm';
10
+
11
+ import { ScaffoldTranslation } from './entity-translation.template';
12
+
13
+ export class ScaffoldEntityCustomFields {}
14
+
15
+ @Entity()
16
+ export class ScaffoldEntity extends VendureEntity implements Translatable, HasCustomFields {
17
+ constructor(input?: DeepPartial<ScaffoldEntity>) {
18
+ super(input);
19
+ }
20
+
21
+ @Column()
22
+ code: string;
23
+
24
+ @Column(type => ScaffoldEntityCustomFields)
25
+ customFields: ScaffoldEntityCustomFields;
26
+
27
+ localizedName: LocaleString;
28
+
29
+ @OneToMany(type => ScaffoldTranslation, translation => translation.base, { eager: true })
30
+ translations: Array<Translation<ScaffoldEntity>>;
31
+ }
@@ -73,39 +73,39 @@ async function addJobQueue(options) {
73
73
  if (ts_morph_1.Node.isBlock(body)) {
74
74
  body.addStatements(writer => {
75
75
  writer
76
- .write(`this.${jobQueuePropertyName} = await this.jobQueueService.createQueue({
77
- name: '${jobQueueName}',
78
- process: async job => {
79
- // Deserialize the RequestContext from the job data
80
- const ctx = RequestContext.deserialize(job.data.ctx);
81
- // The "someArg" property is passed in when the job is triggered
82
- const someArg = job.data.someArg;
83
-
84
- // Inside the \`process\` function we define how each job
85
- // in the queue will be processed.
86
- // Let's simulate some long-running task
87
- const totalItems = 10;
88
- for (let i = 0; i < totalItems; i++) {
89
- await new Promise(resolve => setTimeout(resolve, 500));
90
-
91
- // You can optionally respond to the job being cancelled
92
- // during processing. This can be useful for very long-running
93
- // tasks which can be cancelled by the user.
94
- if (job.state === JobState.CANCELLED) {
95
- throw new Error('Job was cancelled');
96
- }
97
-
98
- // Progress can be reported as a percentage like this
99
- job.setProgress(Math.floor(i / totalItems * 100));
100
- }
101
-
102
- // The value returned from the \`process\` function is stored
103
- // as the "result" field of the job
104
- return {
105
- processedCount: totalItems,
106
- message: \`Successfully processed \${totalItems} items\`,
107
- };
108
- },
76
+ .write(`this.${jobQueuePropertyName} = await this.jobQueueService.createQueue({
77
+ name: '${jobQueueName}',
78
+ process: async job => {
79
+ // Deserialize the RequestContext from the job data
80
+ const ctx = RequestContext.deserialize(job.data.ctx);
81
+ // The "someArg" property is passed in when the job is triggered
82
+ const someArg = job.data.someArg;
83
+
84
+ // Inside the \`process\` function we define how each job
85
+ // in the queue will be processed.
86
+ // Let's simulate some long-running task
87
+ const totalItems = 10;
88
+ for (let i = 0; i < totalItems; i++) {
89
+ await new Promise(resolve => setTimeout(resolve, 500));
90
+
91
+ // You can optionally respond to the job being cancelled
92
+ // during processing. This can be useful for very long-running
93
+ // tasks which can be cancelled by the user.
94
+ if (job.state === JobState.CANCELLED) {
95
+ throw new Error('Job was cancelled');
96
+ }
97
+
98
+ // Progress can be reported as a percentage like this
99
+ job.setProgress(Math.floor(i / totalItems * 100));
100
+ }
101
+
102
+ // The value returned from the \`process\` function is stored
103
+ // as the "result" field of the job
104
+ return {
105
+ processedCount: totalItems,
106
+ message: \`Successfully processed \${totalItems} items\`,
107
+ };
108
+ },
109
109
  })`)
110
110
  .newLine();
111
111
  }).forEach(s => s.formatText());
@@ -116,9 +116,9 @@ async function addJobQueue(options) {
116
116
  scope: ts_morph_1.Scope.Public,
117
117
  parameters: [{ name: 'ctx', type: 'RequestContext' }],
118
118
  statements: writer => {
119
- writer.write(`return this.${jobQueuePropertyName}.add({
120
- ctx: ctx.serialize(),
121
- someArg: 'foo',
119
+ writer.write(`return this.${jobQueuePropertyName}.add({
120
+ ctx: ctx.serialize(),
121
+ someArg: 'foo',
122
122
  })`);
123
123
  },
124
124
  })
@@ -1,2 +1,2 @@
1
- export const TEMPLATE_PLUGIN_OPTIONS = Symbol('TEMPLATE_PLUGIN_OPTIONS');
2
- export const loggerCtx = 'TemplatePlugin';
1
+ export const TEMPLATE_PLUGIN_OPTIONS = Symbol('TEMPLATE_PLUGIN_OPTIONS');
2
+ export const loggerCtx = 'TemplatePlugin';
@@ -1,25 +1,25 @@
1
- import { PluginCommonModule, Type, VendurePlugin } from '@vendure/core';
2
-
3
- import { TEMPLATE_PLUGIN_OPTIONS } from './constants.template';
4
- import { PluginInitOptions } from './types.template';
5
-
6
- @VendurePlugin({
7
- imports: [PluginCommonModule],
8
- providers: [{ provide: TEMPLATE_PLUGIN_OPTIONS, useFactory: () => TemplatePlugin.options }],
9
- configuration: config => {
10
- // Plugin-specific configuration
11
- // such as custom fields, custom permissions,
12
- // strategies etc. can be configured here by
13
- // modifying the `config` object.
14
- return config;
15
- },
16
- compatibility: '^2.0.0',
17
- })
18
- export class TemplatePlugin {
19
- static options: PluginInitOptions;
20
-
21
- static init(options: PluginInitOptions): Type<TemplatePlugin> {
22
- this.options = options;
23
- return TemplatePlugin;
24
- }
25
- }
1
+ import { PluginCommonModule, Type, VendurePlugin } from '@vendure/core';
2
+
3
+ import { TEMPLATE_PLUGIN_OPTIONS } from './constants.template';
4
+ import { PluginInitOptions } from './types.template';
5
+
6
+ @VendurePlugin({
7
+ imports: [PluginCommonModule],
8
+ providers: [{ provide: TEMPLATE_PLUGIN_OPTIONS, useFactory: () => TemplatePlugin.options }],
9
+ configuration: config => {
10
+ // Plugin-specific configuration
11
+ // such as custom fields, custom permissions,
12
+ // strategies etc. can be configured here by
13
+ // modifying the `config` object.
14
+ return config;
15
+ },
16
+ compatibility: '^2.0.0',
17
+ })
18
+ export class TemplatePlugin {
19
+ static options: PluginInitOptions;
20
+
21
+ static init(options: PluginInitOptions): Type<TemplatePlugin> {
22
+ this.options = options;
23
+ return TemplatePlugin;
24
+ }
25
+ }
@@ -1,7 +1,7 @@
1
- /**
2
- * @description
3
- * The plugin can be configured using the following options:
4
- */
5
- export interface PluginInitOptions {
6
- exampleOption?: string;
7
- }
1
+ /**
2
+ * @description
3
+ * The plugin can be configured using the following options:
4
+ */
5
+ export interface PluginInitOptions {
6
+ exampleOption?: string;
7
+ }
@@ -180,11 +180,11 @@ function customizeFindOneMethod(serviceClassDeclaration, entityRef) {
180
180
  const findOneMethod = serviceClassDeclaration.getMethod('findOne');
181
181
  findOneMethod
182
182
  .setBodyText(writer => {
183
- writer.write(` return this.connection
184
- .getRepository(ctx, ${entityRef.name})
185
- .findOne({
186
- where: { id },
187
- relations,
183
+ writer.write(` return this.connection
184
+ .getRepository(ctx, ${entityRef.name})
185
+ .findOne({
186
+ where: { id },
187
+ relations,
188
188
  })`);
189
189
  if (entityRef.isTranslatable()) {
190
190
  writer.write(`.then(entity => entity && this.translator.translate(entity, ctx));`);
@@ -233,14 +233,14 @@ function customizeCreateMethod(serviceClassDeclaration, entityRef) {
233
233
  .setBodyText(writer => {
234
234
  var _a;
235
235
  if (entityRef.isTranslatable()) {
236
- writer.write(`const newEntity = await this.translatableSaver.create({
237
- ctx,
238
- input,
239
- entityType: ${entityRef.name},
240
- translationType: ${(_a = entityRef.getTranslationClass()) === null || _a === void 0 ? void 0 : _a.getName()},
241
- beforeSave: async f => {
242
- // Any pre-save logic can go here
243
- },
236
+ writer.write(`const newEntity = await this.translatableSaver.create({
237
+ ctx,
238
+ input,
239
+ entityType: ${entityRef.name},
240
+ translationType: ${(_a = entityRef.getTranslationClass()) === null || _a === void 0 ? void 0 : _a.getName()},
241
+ beforeSave: async f => {
242
+ // Any pre-save logic can go here
243
+ },
244
244
  });`);
245
245
  }
246
246
  else {
@@ -262,14 +262,14 @@ function customizeUpdateMethod(serviceClassDeclaration, entityRef) {
262
262
  .setBodyText(writer => {
263
263
  var _a;
264
264
  if (entityRef.isTranslatable()) {
265
- writer.write(`const updatedEntity = await this.translatableSaver.update({
266
- ctx,
267
- input,
268
- entityType: ${entityRef.name},
269
- translationType: ${(_a = entityRef.getTranslationClass()) === null || _a === void 0 ? void 0 : _a.getName()},
270
- beforeSave: async f => {
271
- // Any pre-save logic can go here
272
- },
265
+ writer.write(`const updatedEntity = await this.translatableSaver.update({
266
+ ctx,
267
+ input,
268
+ entityType: ${entityRef.name},
269
+ translationType: ${(_a = entityRef.getTranslationClass()) === null || _a === void 0 ? void 0 : _a.getName()},
270
+ beforeSave: async f => {
271
+ // Any pre-save logic can go here
272
+ },
273
273
  });`);
274
274
  }
275
275
  else {
@@ -1,13 +1,13 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { ID, Product, RequestContext, TransactionalConnection } from '@vendure/core';
3
-
4
- @Injectable()
5
- export class BasicServiceTemplate {
6
- constructor(private connection: TransactionalConnection) {}
7
-
8
- async exampleMethod(ctx: RequestContext, id: ID) {
9
- // Add your method logic here
10
- const result = await this.connection.getRepository(ctx, Product).findOne({ where: { id } });
11
- return result;
12
- }
13
- }
1
+ import { Injectable } from '@nestjs/common';
2
+ import { ID, Product, RequestContext, TransactionalConnection } from '@vendure/core';
3
+
4
+ @Injectable()
5
+ export class BasicServiceTemplate {
6
+ constructor(private connection: TransactionalConnection) {}
7
+
8
+ async exampleMethod(ctx: RequestContext, id: ID) {
9
+ // Add your method logic here
10
+ const result = await this.connection.getRepository(ctx, Product).findOne({ where: { id } });
11
+ return result;
12
+ }
13
+ }
@@ -1,146 +1,146 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { DeletionResponse, DeletionResult, LanguageCode } from '@vendure/common/lib/generated-types';
3
- import { CustomFieldsObject, ID, PaginatedList } from '@vendure/common/lib/shared-types';
4
- import {
5
- assertFound,
6
- CustomFieldRelationService,
7
- HasCustomFields,
8
- ListQueryBuilder,
9
- ListQueryOptions,
10
- RelationPaths,
11
- RequestContext,
12
- TransactionalConnection,
13
- Translatable,
14
- TranslatableSaver,
15
- Translated,
16
- Translation,
17
- TranslationInput,
18
- TranslatorService,
19
- VendureEntity,
20
- patchEntity,
21
- } from '@vendure/core';
22
-
23
- // These can be replaced by generated types if you set up code generation
24
- interface CreateEntityInput {
25
- // Define the input fields here
26
- customFields?: CustomFieldsObject;
27
- translations: Array<TranslationInput<TemplateEntity>>;
28
- }
29
- interface UpdateEntityInput {
30
- id: ID;
31
- // Define the input fields here
32
- customFields?: CustomFieldsObject;
33
- translations: Array<TranslationInput<TemplateEntity>>;
34
- }
35
-
36
- class TemplateEntity extends VendureEntity implements Translatable, HasCustomFields {
37
- constructor() {
38
- super();
39
- }
40
-
41
- customFields: CustomFieldsObject;
42
-
43
- translations: Array<Translation<TemplateEntity>>;
44
- }
45
-
46
- class TemplateEntityTranslation extends VendureEntity implements Translation<TemplateEntity> {
47
- constructor() {
48
- super();
49
- }
50
-
51
- id: ID;
52
- languageCode: LanguageCode;
53
- base: TemplateEntity;
54
- customFields: CustomFieldsObject;
55
- }
56
-
57
- @Injectable()
58
- export class EntityServiceTemplate {
59
- constructor(
60
- private connection: TransactionalConnection,
61
- private translatableSaver: TranslatableSaver,
62
- private listQueryBuilder: ListQueryBuilder,
63
- private customFieldRelationService: CustomFieldRelationService,
64
- private translator: TranslatorService,
65
- ) {}
66
-
67
- findAll(
68
- ctx: RequestContext,
69
- options?: ListQueryOptions<TemplateEntity>,
70
- relations?: RelationPaths<TemplateEntity>,
71
- ): Promise<PaginatedList<Translated<TemplateEntity>>> {
72
- return this.listQueryBuilder
73
- .build(TemplateEntity, options, {
74
- relations,
75
- ctx,
76
- })
77
- .getManyAndCount()
78
- .then(([_items, totalItems]) => {
79
- const items = _items.map(item => this.translator.translate(item, ctx));
80
- return {
81
- items,
82
- totalItems,
83
- };
84
- });
85
- }
86
-
87
- findOne(
88
- ctx: RequestContext,
89
- id: ID,
90
- relations?: RelationPaths<TemplateEntity>,
91
- ): Promise<Translated<TemplateEntity> | null> {
92
- return this.connection
93
- .getRepository(ctx, TemplateEntity)
94
- .findOne({
95
- where: { id },
96
- relations,
97
- })
98
- .then(entity => entity && this.translator.translate(entity, ctx));
99
- }
100
-
101
- async create(ctx: RequestContext, input: CreateEntityInput): Promise<Translated<TemplateEntity>> {
102
- const newEntity = await this.translatableSaver.create({
103
- ctx,
104
- input,
105
- entityType: TemplateEntity,
106
- translationType: TemplateEntityTranslation,
107
- beforeSave: async f => {
108
- // Any pre-save logic can go here
109
- },
110
- });
111
- // Ensure any custom field relations get saved
112
- await this.customFieldRelationService.updateRelations(ctx, TemplateEntity, input, newEntity);
113
- return assertFound(this.findOne(ctx, newEntity.id));
114
- }
115
-
116
- async update(ctx: RequestContext, input: UpdateEntityInput): Promise<Translated<TemplateEntity>> {
117
- const updatedEntity = await this.translatableSaver.update({
118
- ctx,
119
- input,
120
- entityType: TemplateEntity,
121
- translationType: TemplateEntityTranslation,
122
- beforeSave: async f => {
123
- // Any pre-save logic can go here
124
- },
125
- });
126
- // This is just here to stop the import being removed by the IDE
127
- patchEntity(updatedEntity, {});
128
- await this.customFieldRelationService.updateRelations(ctx, TemplateEntity, input, updatedEntity);
129
- return assertFound(this.findOne(ctx, updatedEntity.id));
130
- }
131
-
132
- async delete(ctx: RequestContext, id: ID): Promise<DeletionResponse> {
133
- const entity = await this.connection.getEntityOrThrow(ctx, TemplateEntity, id);
134
- try {
135
- await this.connection.getRepository(ctx, TemplateEntity).remove(entity);
136
- return {
137
- result: DeletionResult.DELETED,
138
- };
139
- } catch (e: any) {
140
- return {
141
- result: DeletionResult.NOT_DELETED,
142
- message: e.toString(),
143
- };
144
- }
145
- }
146
- }
1
+ import { Injectable } from '@nestjs/common';
2
+ import { DeletionResponse, DeletionResult, LanguageCode } from '@vendure/common/lib/generated-types';
3
+ import { CustomFieldsObject, ID, PaginatedList } from '@vendure/common/lib/shared-types';
4
+ import {
5
+ assertFound,
6
+ CustomFieldRelationService,
7
+ HasCustomFields,
8
+ ListQueryBuilder,
9
+ ListQueryOptions,
10
+ RelationPaths,
11
+ RequestContext,
12
+ TransactionalConnection,
13
+ Translatable,
14
+ TranslatableSaver,
15
+ Translated,
16
+ Translation,
17
+ TranslationInput,
18
+ TranslatorService,
19
+ VendureEntity,
20
+ patchEntity,
21
+ } from '@vendure/core';
22
+
23
+ // These can be replaced by generated types if you set up code generation
24
+ interface CreateEntityInput {
25
+ // Define the input fields here
26
+ customFields?: CustomFieldsObject;
27
+ translations: Array<TranslationInput<TemplateEntity>>;
28
+ }
29
+ interface UpdateEntityInput {
30
+ id: ID;
31
+ // Define the input fields here
32
+ customFields?: CustomFieldsObject;
33
+ translations: Array<TranslationInput<TemplateEntity>>;
34
+ }
35
+
36
+ class TemplateEntity extends VendureEntity implements Translatable, HasCustomFields {
37
+ constructor() {
38
+ super();
39
+ }
40
+
41
+ customFields: CustomFieldsObject;
42
+
43
+ translations: Array<Translation<TemplateEntity>>;
44
+ }
45
+
46
+ class TemplateEntityTranslation extends VendureEntity implements Translation<TemplateEntity> {
47
+ constructor() {
48
+ super();
49
+ }
50
+
51
+ id: ID;
52
+ languageCode: LanguageCode;
53
+ base: TemplateEntity;
54
+ customFields: CustomFieldsObject;
55
+ }
56
+
57
+ @Injectable()
58
+ export class EntityServiceTemplate {
59
+ constructor(
60
+ private connection: TransactionalConnection,
61
+ private translatableSaver: TranslatableSaver,
62
+ private listQueryBuilder: ListQueryBuilder,
63
+ private customFieldRelationService: CustomFieldRelationService,
64
+ private translator: TranslatorService,
65
+ ) {}
66
+
67
+ findAll(
68
+ ctx: RequestContext,
69
+ options?: ListQueryOptions<TemplateEntity>,
70
+ relations?: RelationPaths<TemplateEntity>,
71
+ ): Promise<PaginatedList<Translated<TemplateEntity>>> {
72
+ return this.listQueryBuilder
73
+ .build(TemplateEntity, options, {
74
+ relations,
75
+ ctx,
76
+ })
77
+ .getManyAndCount()
78
+ .then(([_items, totalItems]) => {
79
+ const items = _items.map(item => this.translator.translate(item, ctx));
80
+ return {
81
+ items,
82
+ totalItems,
83
+ };
84
+ });
85
+ }
86
+
87
+ findOne(
88
+ ctx: RequestContext,
89
+ id: ID,
90
+ relations?: RelationPaths<TemplateEntity>,
91
+ ): Promise<Translated<TemplateEntity> | null> {
92
+ return this.connection
93
+ .getRepository(ctx, TemplateEntity)
94
+ .findOne({
95
+ where: { id },
96
+ relations,
97
+ })
98
+ .then(entity => entity && this.translator.translate(entity, ctx));
99
+ }
100
+
101
+ async create(ctx: RequestContext, input: CreateEntityInput): Promise<Translated<TemplateEntity>> {
102
+ const newEntity = await this.translatableSaver.create({
103
+ ctx,
104
+ input,
105
+ entityType: TemplateEntity,
106
+ translationType: TemplateEntityTranslation,
107
+ beforeSave: async f => {
108
+ // Any pre-save logic can go here
109
+ },
110
+ });
111
+ // Ensure any custom field relations get saved
112
+ await this.customFieldRelationService.updateRelations(ctx, TemplateEntity, input, newEntity);
113
+ return assertFound(this.findOne(ctx, newEntity.id));
114
+ }
115
+
116
+ async update(ctx: RequestContext, input: UpdateEntityInput): Promise<Translated<TemplateEntity>> {
117
+ const updatedEntity = await this.translatableSaver.update({
118
+ ctx,
119
+ input,
120
+ entityType: TemplateEntity,
121
+ translationType: TemplateEntityTranslation,
122
+ beforeSave: async f => {
123
+ // Any pre-save logic can go here
124
+ },
125
+ });
126
+ // This is just here to stop the import being removed by the IDE
127
+ patchEntity(updatedEntity, {});
128
+ await this.customFieldRelationService.updateRelations(ctx, TemplateEntity, input, updatedEntity);
129
+ return assertFound(this.findOne(ctx, updatedEntity.id));
130
+ }
131
+
132
+ async delete(ctx: RequestContext, id: ID): Promise<DeletionResponse> {
133
+ const entity = await this.connection.getEntityOrThrow(ctx, TemplateEntity, id);
134
+ try {
135
+ await this.connection.getRepository(ctx, TemplateEntity).remove(entity);
136
+ return {
137
+ result: DeletionResult.DELETED,
138
+ };
139
+ } catch (e: any) {
140
+ return {
141
+ result: DeletionResult.NOT_DELETED,
142
+ message: e.toString(),
143
+ };
144
+ }
145
+ }
146
+ }
@@ -13,11 +13,11 @@ function addUiExtensionStaticProp(plugin) {
13
13
  name: 'ui',
14
14
  isStatic: true,
15
15
  type: adminUiExtensionType,
16
- initializer: `{
17
- id: '${extensionId}-ui',
18
- extensionPath: path.join(__dirname, 'ui'),
19
- routes: [{ route: '${extensionId}', filePath: 'routes.ts' }],
20
- providers: ['providers.ts'],
16
+ initializer: `{
17
+ id: '${extensionId}-ui',
18
+ extensionPath: path.join(__dirname, 'ui'),
19
+ routes: [{ route: '${extensionId}', filePath: 'routes.ts' }],
20
+ providers: ['providers.ts'],
21
21
  }`,
22
22
  })
23
23
  .formatText();
@@ -19,12 +19,12 @@ function updateAdminUiPluginInit(vendureConfig, options) {
19
19
  initObject === null || initObject === void 0 ? void 0 : initObject.addProperty({
20
20
  name: 'app',
21
21
  kind: ts_morph_1.StructureKind.PropertyAssignment,
22
- initializer: `compileUiExtensions({
23
- outputPath: path.join(__dirname, '../admin-ui'),
24
- extensions: [
25
- ${options.pluginClassName}.ui,
26
- ],
27
- devMode: true,
22
+ initializer: `compileUiExtensions({
23
+ outputPath: path.join(__dirname, '../admin-ui'),
24
+ extensions: [
25
+ ${options.pluginClassName}.ui,
26
+ ],
27
+ devMode: true,
28
28
  }),`,
29
29
  }).formatText();
30
30
  }
@@ -1,3 +1,3 @@
1
- export default [
2
- // Add your providers here
3
- ];
1
+ export default [
2
+ // Add your providers here
3
+ ];
@@ -1,3 +1,3 @@
1
- export default [
2
- // Add your custom routes here
3
- ];
1
+ export default [
2
+ // Add your custom routes here
3
+ ];
@@ -129,9 +129,9 @@ class VendurePluginRef {
129
129
  pluginOptions
130
130
  .addPropertyAssignment({
131
131
  name: 'adminApiExtensions',
132
- initializer: `{
133
- schema: ${extension.schema.getName()},
134
- resolvers: [${extension.resolvers.map(r => r.getName()).join(', ')}]
132
+ initializer: `{
133
+ schema: ${extension.schema.getName()},
134
+ resolvers: [${extension.resolvers.map(r => r.getName()).join(', ')}]
135
135
  }`,
136
136
  })
137
137
  .formatText();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vendure/cli",
3
- "version": "2.3.2",
3
+ "version": "2.3.4",
4
4
  "description": "A modern, headless ecommerce framework",
5
5
  "repository": {
6
6
  "type": "git",
@@ -35,7 +35,7 @@
35
35
  ],
36
36
  "dependencies": {
37
37
  "@clack/prompts": "^0.7.0",
38
- "@vendure/common": "^2.3.2",
38
+ "@vendure/common": "^2.3.4",
39
39
  "change-case": "^4.1.2",
40
40
  "commander": "^11.0.0",
41
41
  "dotenv": "^16.4.5",
@@ -46,8 +46,8 @@
46
46
  "tsconfig-paths": "^4.2.0"
47
47
  },
48
48
  "devDependencies": {
49
- "@vendure/core": "^2.3.2",
49
+ "@vendure/core": "^2.3.4",
50
50
  "typescript": "5.3.3"
51
51
  },
52
- "gitHead": "9e88536523dbb4e2713957457c45c3d7940a456e"
52
+ "gitHead": "4f4c3ae5f5505fc475c22baebcd774c1fc5a4713"
53
53
  }
package/LICENSE DELETED
@@ -1,9 +0,0 @@
1
- The MIT License
2
-
3
- Copyright (c) 2018 Michael Bromley
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
-
7
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
-
9
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.