@adobe/ccweb-add-on-scaffolder 2.5.0 → 3.1.0

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 (66) hide show
  1. package/.c8rc.json +5 -1
  2. package/.mocharc.json +9 -2
  3. package/dist/app/AddOnBuilder.d.ts +27 -7
  4. package/dist/app/AddOnBuilder.d.ts.map +1 -1
  5. package/dist/app/AddOnBuilder.js +247 -0
  6. package/dist/app/AddOnScaffolder.d.ts +29 -2
  7. package/dist/app/AddOnScaffolder.d.ts.map +1 -1
  8. package/dist/app/AddOnScaffolder.js +106 -1
  9. package/dist/app/PackageBuilder.d.ts +21 -7
  10. package/dist/app/PackageBuilder.d.ts.map +1 -1
  11. package/dist/app/PackageBuilder.js +68 -1
  12. package/dist/app/index.d.ts +0 -3
  13. package/dist/app/index.d.ts.map +1 -1
  14. package/dist/app/index.js +0 -3
  15. package/dist/config/inversify.config.d.ts +2 -1
  16. package/dist/config/inversify.config.d.ts.map +1 -1
  17. package/dist/config/inversify.config.js +8 -6
  18. package/dist/config/inversify.types.d.ts +0 -1
  19. package/dist/config/inversify.types.d.ts.map +1 -1
  20. package/dist/config/inversify.types.js +0 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +0 -1
  24. package/dist/models/ScaffolderOptions.d.ts +3 -3
  25. package/dist/models/ScaffolderOptions.d.ts.map +1 -1
  26. package/dist/models/ScaffolderOptions.js +4 -4
  27. package/dist/tsconfig.tsbuildinfo +1 -1
  28. package/dist/validators/TemplateValidator.d.ts +12 -2
  29. package/dist/validators/TemplateValidator.d.ts.map +1 -1
  30. package/dist/validators/TemplateValidator.js +54 -1
  31. package/dist/validators/index.d.ts +0 -1
  32. package/dist/validators/index.d.ts.map +1 -1
  33. package/dist/validators/index.js +0 -1
  34. package/package.json +11 -11
  35. package/src/app/AddOnBuilder.ts +258 -15
  36. package/src/app/AddOnScaffolder.ts +120 -3
  37. package/src/app/PackageBuilder.ts +75 -9
  38. package/src/app/index.ts +0 -3
  39. package/src/config/inversify.config.ts +10 -10
  40. package/src/config/inversify.types.ts +6 -2
  41. package/src/index.ts +1 -1
  42. package/src/models/ScaffolderOptions.ts +4 -4
  43. package/src/test/app/{TemplateAddOnBuilder.spec.ts → AddOnBuilder.spec.ts} +21 -22
  44. package/src/test/app/{TemplateAddOnScaffolder.spec.ts → AddOnScaffolder.spec.ts} +20 -22
  45. package/src/test/app/{TemplatePackageBuilder.spec.ts → PackageBuilder.spec.ts} +13 -14
  46. package/src/test/models/ScaffolderOptions.spec.ts +5 -5
  47. package/src/test/validators/{AppTemplateValidator.spec.ts → TemplateValidator.spec.ts} +2 -3
  48. package/src/validators/TemplateValidator.ts +46 -3
  49. package/src/validators/index.ts +0 -1
  50. package/tsconfig.json +4 -1
  51. package/dist/app/TemplateAddOnBuilder.d.ts +0 -90
  52. package/dist/app/TemplateAddOnBuilder.d.ts.map +0 -1
  53. package/dist/app/TemplateAddOnBuilder.js +0 -273
  54. package/dist/app/TemplateAddOnScaffolder.d.ts +0 -63
  55. package/dist/app/TemplateAddOnScaffolder.d.ts.map +0 -1
  56. package/dist/app/TemplateAddOnScaffolder.js +0 -130
  57. package/dist/app/TemplatePackageBuilder.d.ts +0 -49
  58. package/dist/app/TemplatePackageBuilder.d.ts.map +0 -1
  59. package/dist/app/TemplatePackageBuilder.js +0 -92
  60. package/dist/validators/AddOnTemplateValidator.d.ts +0 -46
  61. package/dist/validators/AddOnTemplateValidator.d.ts.map +0 -1
  62. package/dist/validators/AddOnTemplateValidator.js +0 -78
  63. package/src/app/TemplateAddOnBuilder.ts +0 -319
  64. package/src/app/TemplateAddOnScaffolder.ts +0 -153
  65. package/src/app/TemplatePackageBuilder.ts +0 -102
  66. package/src/validators/AddOnTemplateValidator.ts +0 -79
@@ -22,8 +22,12 @@
22
22
  * SOFTWARE.
23
23
  ********************************************************************************/
24
24
 
25
- export const ITypes = {
26
- Command: Symbol.for("Command"),
25
+ export const ITypes: {
26
+ AddOnScaffolder: symbol;
27
+ AddOnBuilder: symbol;
28
+ PackageBuilder: symbol;
29
+ TemplateValidator: symbol;
30
+ } = {
27
31
  AddOnScaffolder: Symbol.for("AddOnScaffolder"),
28
32
  AddOnBuilder: Symbol.for("AddOnBuilder"),
29
33
  PackageBuilder: Symbol.for("PackageBuilder"),
package/src/index.ts CHANGED
@@ -22,7 +22,7 @@
22
22
  * SOFTWARE.
23
23
  ********************************************************************************/
24
24
 
25
- export * from "./app/AddOnScaffolder.js";
25
+ export type * from "./app/AddOnScaffolder.js";
26
26
  export * from "./config/index.js";
27
27
  export * from "./constants.js";
28
28
  export * from "./models/index.js";
@@ -41,7 +41,7 @@ export class ScaffolderOptions {
41
41
  /**
42
42
  * Kind of the Add-on. For example: panel.
43
43
  */
44
- readonly addOnKind: EntrypointType;
44
+ readonly entrypointType: EntrypointType;
45
45
 
46
46
  /**
47
47
  * Path of the Add-on root directory.
@@ -62,7 +62,7 @@ export class ScaffolderOptions {
62
62
  * Instantiate {@link ScaffolderOptions}.
63
63
  * @param addOnDirectory - Path of the Add-on directory.
64
64
  * @param addOnName - Name of the Add-on.
65
- * @param addOnKind - Kind of the Add-on. For example: panel.
65
+ * @param entrypointType - Kind of the Add-on. For example: panel.
66
66
  * @param rootDirectory - Path of the Add-on root directory.
67
67
  * @param templateName - Name of the template with which the Add-on is to be scaffolded.
68
68
  * @param verbose - Verbose flag.
@@ -71,14 +71,14 @@ export class ScaffolderOptions {
71
71
  constructor(
72
72
  addOnDirectory: string,
73
73
  addOnName: string,
74
- addOnKind: EntrypointType,
74
+ entrypointType: EntrypointType,
75
75
  rootDirectory: string,
76
76
  templateName: string,
77
77
  verbose: boolean
78
78
  ) {
79
79
  this.addOnDirectory = addOnDirectory;
80
80
  this.addOnName = addOnName;
81
- this.addOnKind = addOnKind;
81
+ this.entrypointType = entrypointType;
82
82
  this.rootDirectory = rootDirectory;
83
83
  this.templateName = templateName;
84
84
  this.verbose = verbose;
@@ -37,14 +37,13 @@ import sinon from "sinon";
37
37
  import type { StubbedInstance } from "ts-sinon";
38
38
  import { stubInterface } from "ts-sinon";
39
39
  import { fileURLToPath } from "url";
40
- import type { AddOnBuilder } from "../../app/index.js";
41
- import { TemplateAddOnBuilder } from "../../app/index.js";
40
+ import { AddOnBuilder } from "../../app/AddOnBuilder.js";
42
41
  import { MANIFEST_JSON, PACKAGE_JSON } from "../../constants.js";
43
42
  import { ScaffolderOptions } from "../../models/ScaffolderOptions.js";
44
43
 
45
44
  chai.use(chaiAsPromised);
46
45
 
47
- describe("TemplateAddOnBuilder", () => {
46
+ describe("AddOnBuilder", () => {
48
47
  const __filename = fileURLToPath(import.meta.url);
49
48
  const __dirname = path.dirname(__filename);
50
49
  const __require = createRequire(import.meta.url);
@@ -70,7 +69,7 @@ describe("TemplateAddOnBuilder", () => {
70
69
 
71
70
  const expectedPacakgeJson = new PackageJson(testAppPackageJson);
72
71
 
73
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
72
+ const addOnBuilder = new AddOnBuilder(options, logger);
74
73
  const packageJson = addOnBuilder.getPackageJson();
75
74
 
76
75
  assert.deepEqual(packageJson, expectedPacakgeJson);
@@ -99,7 +98,7 @@ describe("TemplateAddOnBuilder", () => {
99
98
 
100
99
  const expectedTemplateJson = new TemplateJson({});
101
100
 
102
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
101
+ const addOnBuilder = new AddOnBuilder(options, logger);
103
102
  const templateJson = addOnBuilder.getTemplateJson();
104
103
 
105
104
  assert.deepEqual(templateJson, expectedTemplateJson);
@@ -128,7 +127,7 @@ describe("TemplateAddOnBuilder", () => {
128
127
  }
129
128
  });
130
129
 
131
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
130
+ const addOnBuilder = new AddOnBuilder(options, logger);
132
131
  const templateJson = addOnBuilder.getTemplateJson();
133
132
 
134
133
  assert.deepEqual(templateJson, expectedTemplateJson);
@@ -146,7 +145,7 @@ describe("TemplateAddOnBuilder", () => {
146
145
  false
147
146
  );
148
147
 
149
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
148
+ const addOnBuilder = new AddOnBuilder(options, logger);
150
149
  const devDependencies = addOnBuilder.getDevDependenciesToInstall(new TemplateJson({}));
151
150
 
152
151
  assert.equal(devDependencies.size, 0);
@@ -172,7 +171,7 @@ describe("TemplateAddOnBuilder", () => {
172
171
 
173
172
  const expectedDevDependencies = new Set(["a@1.0.0", "b@2.0.0", "c@3.0.0"]);
174
173
 
175
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
174
+ const addOnBuilder = new AddOnBuilder(options, logger);
176
175
  const devDependencies = addOnBuilder.getDevDependenciesToInstall(templateJson);
177
176
 
178
177
  assert.deepEqual(devDependencies, expectedDevDependencies);
@@ -190,7 +189,7 @@ describe("TemplateAddOnBuilder", () => {
190
189
  false
191
190
  );
192
191
 
193
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
192
+ const addOnBuilder = new AddOnBuilder(options, logger);
194
193
  const dependencies = addOnBuilder.getDependenciesToInstall(new TemplateJson({}));
195
194
 
196
195
  assert.equal(dependencies.size, 0);
@@ -216,14 +215,14 @@ describe("TemplateAddOnBuilder", () => {
216
215
 
217
216
  const expectedDependencies = new Set(["a@1.0.0", "b@2.0.0", "c@3.0.0"]);
218
217
 
219
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
218
+ const addOnBuilder = new AddOnBuilder(options, logger);
220
219
  const dependencies = addOnBuilder.getDependenciesToInstall(templateJson);
221
220
 
222
221
  assert.deepEqual(dependencies, expectedDependencies);
223
222
  });
224
223
  });
225
224
 
226
- describe("build()", () => {
225
+ describe("build", () => {
227
226
  const additionalInfo = {
228
227
  sourceId: "fakeAddOnSource",
229
228
  privileged: true,
@@ -315,7 +314,7 @@ describe("TemplateAddOnBuilder", () => {
315
314
  .withArgs(manifestJsonPath, getJSONString(manifest!.manifestProperties) + os.EOL)
316
315
  .returns();
317
316
 
318
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
317
+ const addOnBuilder = new AddOnBuilder(options, logger);
319
318
  addOnBuilder.build(packageJson);
320
319
 
321
320
  assert.equal(renameSpy.callCount, 0);
@@ -399,7 +398,7 @@ describe("TemplateAddOnBuilder", () => {
399
398
  .withArgs(manifestJsonPath, getJSONString(manifest!.manifestProperties) + os.EOL)
400
399
  .returns();
401
400
 
402
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
401
+ const addOnBuilder = new AddOnBuilder(options, logger);
403
402
  addOnBuilder.build(packageJson);
404
403
 
405
404
  assert.equal(renameStub.callCount, 1);
@@ -499,7 +498,7 @@ describe("TemplateAddOnBuilder", () => {
499
498
  .withArgs(manifestJsonPath, getJSONString(manifest!.manifestProperties) + os.EOL)
500
499
  .returns();
501
500
 
502
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
501
+ const addOnBuilder = new AddOnBuilder(options, logger);
503
502
  addOnBuilder.build(packageJson);
504
503
 
505
504
  assert.equal(logger.warning.callCount, 1);
@@ -584,7 +583,7 @@ describe("TemplateAddOnBuilder", () => {
584
583
  .withArgs(manifestJsonPath, getJSONString(manifest!.manifestProperties) + os.EOL)
585
584
  .returns();
586
585
 
587
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
586
+ const addOnBuilder = new AddOnBuilder(options, logger);
588
587
  addOnBuilder.build(packageJson);
589
588
 
590
589
  assert.equal(copyStub.callCount, 1);
@@ -678,7 +677,7 @@ describe("TemplateAddOnBuilder", () => {
678
677
  .withArgs(manifestJsonPath, getJSONString(manifest!.manifestProperties) + os.EOL)
679
678
  .returns();
680
679
 
681
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
680
+ const addOnBuilder = new AddOnBuilder(options, logger);
682
681
  addOnBuilder.build(packageJson);
683
682
 
684
683
  assert.equal(moveStub.callCount, 1);
@@ -767,7 +766,7 @@ describe("TemplateAddOnBuilder", () => {
767
766
  .withArgs(manifestJsonPath, getJSONString(manifest!.manifestProperties) + os.EOL)
768
767
  .returns();
769
768
 
770
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
769
+ const addOnBuilder = new AddOnBuilder(options, logger);
771
770
  addOnBuilder.build(packageJson);
772
771
 
773
772
  assert.equal(readFileStub.callCount, 1);
@@ -868,7 +867,7 @@ describe("TemplateAddOnBuilder", () => {
868
867
  .withArgs(manifestJsonPath, getJSONString(manifest!.manifestProperties) + os.EOL)
869
868
  .returns();
870
869
 
871
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
870
+ const addOnBuilder = new AddOnBuilder(options, logger);
872
871
  addOnBuilder.build(packageJson);
873
872
 
874
873
  assert.equal(writeFileStub.callCount, 2);
@@ -952,7 +951,7 @@ describe("TemplateAddOnBuilder", () => {
952
951
  .withArgs(manifestJsonPath, getJSONString(manifest!.manifestProperties) + os.EOL)
953
952
  .returns();
954
953
 
955
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
954
+ const addOnBuilder = new AddOnBuilder(options, logger);
956
955
  addOnBuilder.build(packageJson);
957
956
 
958
957
  assert.equal(unlinkStub.callCount, 1);
@@ -1015,7 +1014,7 @@ describe("TemplateAddOnBuilder", () => {
1015
1014
  // _removeTemplateTempFiles() stubs.
1016
1015
  sandbox.stub(fs, "removeSync").returns();
1017
1016
 
1018
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
1017
+ const addOnBuilder = new AddOnBuilder(options, logger);
1019
1018
  addOnBuilder.build(thirdPackageJson);
1020
1019
 
1021
1020
  assert.equal(writeFileStub.callCount, 1);
@@ -1120,7 +1119,7 @@ describe("TemplateAddOnBuilder", () => {
1120
1119
 
1121
1120
  writeFileStub.withArgs(manifestJsonPath, getJSONString(manifest!.manifestProperties) + os.EOL).returns();
1122
1121
 
1123
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
1122
+ const addOnBuilder = new AddOnBuilder(options, logger);
1124
1123
  addOnBuilder.build(packageJson);
1125
1124
  addOnBuilder.displaySuccess();
1126
1125
  assert.equal(logger.message.callCount, 3);
@@ -1292,7 +1291,7 @@ describe("TemplateAddOnBuilder", () => {
1292
1291
 
1293
1292
  writeFileStub.withArgs(manifestJsonPath, getJSONString(manifest!.manifestProperties) + os.EOL).returns();
1294
1293
 
1295
- const addOnBuilder: AddOnBuilder = new TemplateAddOnBuilder(options, logger);
1294
+ const addOnBuilder = new AddOnBuilder(options, logger);
1296
1295
  addOnBuilder.build(packageJson);
1297
1296
  addOnBuilder.displaySuccess();
1298
1297
 
@@ -25,7 +25,8 @@
25
25
  import type { Logger, Process } from "@adobe/ccweb-add-on-core";
26
26
  import { DEFAULT_HOST_NAME, PackageJson, TemplateJson } from "@adobe/ccweb-add-on-core";
27
27
  import { EntrypointType } from "@adobe/ccweb-add-on-manifest";
28
- import { SetupCommandOptions, type CommandExecutor as SSLCommandExecutor } from "@adobe/ccweb-add-on-ssl";
28
+ import type { CommandExecutor as SSLCommandExecutor } from "@adobe/ccweb-add-on-ssl";
29
+ import { SetupCommandOptions as SSLSetupCommandOptions } from "@adobe/ccweb-add-on-ssl";
29
30
  import { assert } from "chai";
30
31
  import "mocha";
31
32
  import path from "path";
@@ -34,18 +35,15 @@ import sinon from "sinon";
34
35
  import type { StubbedInstance } from "ts-sinon";
35
36
  import { stubInterface } from "ts-sinon";
36
37
  import { fileURLToPath } from "url";
37
- import type {
38
- AddOnBuilder,
39
- AddOnBuilderFactory,
40
- AddOnScaffolder,
41
- PackageBuilder,
42
- PackageBuilderFactory
43
- } from "../../app/index.js";
44
- import { TemplateAddOnScaffolder } from "../../app/index.js";
38
+ import type { AddOnBuilderFactory } from "../../app/AddOnBuilder.js";
39
+ import type { AddOnBuilder } from "../../app/AddOnBuilder.js";
40
+ import { AddOnScaffolder } from "../../app/AddOnScaffolder.js";
41
+ import type { PackageBuilderFactory } from "../../app/PackageBuilder.js";
42
+ import type { PackageBuilder } from "../../app/PackageBuilder.js";
45
43
  import { ScaffolderOptions } from "../../models/ScaffolderOptions.js";
46
44
  import type { TemplateValidator } from "../../validators/TemplateValidator.js";
47
45
 
48
- describe("TemplateAddOnScaffolder", () => {
46
+ describe("AddOnScaffolder", () => {
49
47
  const __filename = fileURLToPath(import.meta.url);
50
48
  const __dirname = path.dirname(__filename);
51
49
 
@@ -60,7 +58,7 @@ describe("TemplateAddOnScaffolder", () => {
60
58
  let addOnBuilder: StubbedInstance<AddOnBuilder>;
61
59
  let addOnBuilderFactory: AddOnBuilderFactory;
62
60
 
63
- let sslCommandExecutor: StubbedInstance<SSLCommandExecutor>;
61
+ let sslCommandExecutor: StubbedInstance<SSLCommandExecutor<SSLSetupCommandOptions>>;
64
62
 
65
63
  let cliProcess: StubbedInstance<Process>;
66
64
  let logger: StubbedInstance<Logger>;
@@ -83,7 +81,7 @@ describe("TemplateAddOnScaffolder", () => {
83
81
  cliProcess = stubInterface();
84
82
  logger = stubInterface();
85
83
 
86
- addOnScaffolder = new TemplateAddOnScaffolder(
84
+ addOnScaffolder = new AddOnScaffolder(
87
85
  addOnBuilderFactory,
88
86
  packageBuilderFactory,
89
87
  templateValidator,
@@ -105,7 +103,7 @@ describe("TemplateAddOnScaffolder", () => {
105
103
 
106
104
  const addOnDirectory = `${__dirname}/data/first-test-app`;
107
105
  const addOnName = "first-test-app";
108
- const addOnKind = EntrypointType.PANEL;
106
+ const entrypointType = EntrypointType.PANEL;
109
107
  const rootDirectory = `${__dirname}/data`;
110
108
  const templateName = "javascript";
111
109
  const verbose = false;
@@ -113,7 +111,7 @@ describe("TemplateAddOnScaffolder", () => {
113
111
  const options = new ScaffolderOptions(
114
112
  addOnDirectory,
115
113
  addOnName,
116
- addOnKind,
114
+ entrypointType,
117
115
  rootDirectory,
118
116
  templateName,
119
117
  verbose
@@ -131,7 +129,7 @@ describe("TemplateAddOnScaffolder", () => {
131
129
  {
132
130
  addOnDirectory: `${__dirname}/data/first-test-app`,
133
131
  addOnName: "first-test-app",
134
- addOnKind: EntrypointType.PANEL,
132
+ entrypointType: EntrypointType.PANEL,
135
133
  rootDirectory: `${__dirname}/data`,
136
134
  templateName: "javascript",
137
135
  verbose: true
@@ -139,7 +137,7 @@ describe("TemplateAddOnScaffolder", () => {
139
137
  {
140
138
  addOnDirectory: `${__dirname}/data/second-test-app`,
141
139
  addOnName: "second-test-app",
142
- addOnKind: EntrypointType.PANEL,
140
+ entrypointType: EntrypointType.PANEL,
143
141
  rootDirectory: `${__dirname}/data`,
144
142
  templateName: "javascript",
145
143
  verbose: false
@@ -152,8 +150,8 @@ describe("TemplateAddOnScaffolder", () => {
152
150
  const packageJson = new PackageJson({
153
151
  name: run.addOnName,
154
152
  version: "1.0.0",
155
- description: `WXP ${run.addOnKind} application.`,
156
- keywords: ["adobe", "wxp", run.addOnKind],
153
+ description: `WXP ${run.entrypointType} application.`,
154
+ keywords: ["adobe", "wxp", run.entrypointType],
157
155
  scripts: {
158
156
  clean: "ccweb-add-on-scripts clean",
159
157
  build: "ccweb-add-on-scripts build",
@@ -182,8 +180,8 @@ describe("TemplateAddOnScaffolder", () => {
182
180
  const combinedPackageJson = new PackageJson({
183
181
  name: run.addOnName,
184
182
  version: "1.0.0",
185
- description: `WXP ${run.addOnKind} application.`,
186
- keywords: ["adobe", "wxp", run.addOnKind],
183
+ description: `WXP ${run.entrypointType} application.`,
184
+ keywords: ["adobe", "wxp", run.entrypointType],
187
185
  scripts: {
188
186
  clean: "ccweb-add-on-scripts clean",
189
187
  build: "ccweb-add-on-scripts build",
@@ -235,7 +233,7 @@ describe("TemplateAddOnScaffolder", () => {
235
233
  .withArgs("npm", expectedDependenciesArgs, { stdio: "inherit" })
236
234
  .returns(Promise.resolve(installDependenciesResult));
237
235
 
238
- const setupCommandOptions = new SetupCommandOptions(DEFAULT_HOST_NAME, true, run.verbose);
236
+ const setupCommandOptions = new SSLSetupCommandOptions(DEFAULT_HOST_NAME, true, run.verbose);
239
237
  sslCommandExecutor.execute.withArgs(setupCommandOptions).resolves();
240
238
 
241
239
  addOnBuilder.displaySuccess.returns();
@@ -243,7 +241,7 @@ describe("TemplateAddOnScaffolder", () => {
243
241
  const options = new ScaffolderOptions(
244
242
  run.addOnDirectory,
245
243
  run.addOnName,
246
- run.addOnKind as EntrypointType,
244
+ run.entrypointType as EntrypointType,
247
245
  run.rootDirectory,
248
246
  run.templateName,
249
247
  run.verbose
@@ -25,11 +25,10 @@
25
25
  import { PackageJson, TemplateJson } from "@adobe/ccweb-add-on-core";
26
26
  import { assert } from "chai";
27
27
  import "mocha";
28
- import type { PackageBuilder } from "../../app/index.js";
29
- import { TemplatePackageBuilder } from "../../app/index.js";
28
+ import { PackageBuilder } from "../../app/PackageBuilder.js";
30
29
 
31
- describe("TemplatePackageBuilder", () => {
32
- describe("build()", () => {
30
+ describe("PackageBuilder", () => {
31
+ describe("build", () => {
33
32
  describe("buildDevDependencies ...", () => {
34
33
  it("should combine devDependencies from package when template does not have devDependencies.", () => {
35
34
  const packageJsonContent = {
@@ -52,7 +51,7 @@ describe("TemplatePackageBuilder", () => {
52
51
  ...templateJsonContent
53
52
  };
54
53
 
55
- const packageBuilder: PackageBuilder = new TemplatePackageBuilder(packageJson, templateJson);
54
+ const packageBuilder = new PackageBuilder(packageJson, templateJson);
56
55
  const combinedPackageJson = packageBuilder.build();
57
56
 
58
57
  assert.deepEqual(combinedPackageJson, new PackageJson(expectedPackageJsonContent));
@@ -79,7 +78,7 @@ describe("TemplatePackageBuilder", () => {
79
78
  ...templateJsonContent
80
79
  };
81
80
 
82
- const packageBuilder: PackageBuilder = new TemplatePackageBuilder(packageJson, templateJson);
81
+ const packageBuilder = new PackageBuilder(packageJson, templateJson);
83
82
  const combinedPackageJson = packageBuilder.build();
84
83
 
85
84
  assert.deepEqual(combinedPackageJson, new PackageJson(expectedPackageJsonContent));
@@ -111,7 +110,7 @@ describe("TemplatePackageBuilder", () => {
111
110
  }
112
111
  };
113
112
 
114
- const packageBuilder: PackageBuilder = new TemplatePackageBuilder(packageJson, templateJson);
113
+ const packageBuilder = new PackageBuilder(packageJson, templateJson);
115
114
  const combinedPackageJson = packageBuilder.build();
116
115
 
117
116
  assert.deepEqual(combinedPackageJson, new PackageJson(expectedPackageJsonContent));
@@ -140,7 +139,7 @@ describe("TemplatePackageBuilder", () => {
140
139
  ...templateJsonContent
141
140
  };
142
141
 
143
- const packageBuilder: PackageBuilder = new TemplatePackageBuilder(packageJson, templateJson);
142
+ const packageBuilder = new PackageBuilder(packageJson, templateJson);
144
143
  const combinedPackageJson = packageBuilder.build();
145
144
 
146
145
  assert.deepEqual(combinedPackageJson, new PackageJson(expectedPackageJsonContent));
@@ -167,7 +166,7 @@ describe("TemplatePackageBuilder", () => {
167
166
  ...templateJsonContent
168
167
  };
169
168
 
170
- const packageBuilder: PackageBuilder = new TemplatePackageBuilder(packageJson, templateJson);
169
+ const packageBuilder = new PackageBuilder(packageJson, templateJson);
171
170
  const combinedPackageJson = packageBuilder.build();
172
171
 
173
172
  assert.deepEqual(combinedPackageJson, new PackageJson(expectedPackageJsonContent));
@@ -199,7 +198,7 @@ describe("TemplatePackageBuilder", () => {
199
198
  }
200
199
  };
201
200
 
202
- const packageBuilder: PackageBuilder = new TemplatePackageBuilder(packageJson, templateJson);
201
+ const packageBuilder = new PackageBuilder(packageJson, templateJson);
203
202
  const combinedPackageJson = packageBuilder.build();
204
203
 
205
204
  assert.deepEqual(combinedPackageJson, new PackageJson(expectedPackageJsonContent));
@@ -228,7 +227,7 @@ describe("TemplatePackageBuilder", () => {
228
227
  ...templateJsonContent
229
228
  };
230
229
 
231
- const packageBuilder: PackageBuilder = new TemplatePackageBuilder(packageJson, templateJson);
230
+ const packageBuilder = new PackageBuilder(packageJson, templateJson);
232
231
  const combinedPackageJson = packageBuilder.build();
233
232
 
234
233
  assert.deepEqual(combinedPackageJson, new PackageJson(expectedPackageJsonContent));
@@ -255,7 +254,7 @@ describe("TemplatePackageBuilder", () => {
255
254
  ...templateJsonContent
256
255
  };
257
256
 
258
- const packageBuilder: PackageBuilder = new TemplatePackageBuilder(packageJson, templateJson);
257
+ const packageBuilder = new PackageBuilder(packageJson, templateJson);
259
258
  const combinedPackageJson = packageBuilder.build();
260
259
 
261
260
  assert.deepEqual(combinedPackageJson, new PackageJson(expectedPackageJsonContent));
@@ -284,7 +283,7 @@ describe("TemplatePackageBuilder", () => {
284
283
  scripts: { ...packageJsonContent.scripts, ...templateJsonContent.scripts }
285
284
  };
286
285
 
287
- const packageBuilder: PackageBuilder = new TemplatePackageBuilder(packageJson, templateJson);
286
+ const packageBuilder = new PackageBuilder(packageJson, templateJson);
288
287
  const combinedPackageJson = packageBuilder.build();
289
288
 
290
289
  assert.deepEqual(combinedPackageJson, new PackageJson(expectedPackageJsonContent));
@@ -322,7 +321,7 @@ describe("TemplatePackageBuilder", () => {
322
321
  scripts: { ...packageJsonContent.scripts, ...templateJsonContent.scripts }
323
322
  };
324
323
 
325
- const packageBuilder: PackageBuilder = new TemplatePackageBuilder(packageJson, templateJson);
324
+ const packageBuilder = new PackageBuilder(packageJson, templateJson);
326
325
  const combinedPackageJson = packageBuilder.build();
327
326
 
328
327
  assert.deepEqual(combinedPackageJson, new PackageJson(expectedPackageJsonContent));
@@ -25,7 +25,7 @@
25
25
  import { EntrypointType } from "@adobe/ccweb-add-on-manifest";
26
26
  import { assert } from "chai";
27
27
  import "mocha";
28
- import { ScaffolderOptions } from "../../models/index.js";
28
+ import { ScaffolderOptions } from "../../models/ScaffolderOptions.js";
29
29
 
30
30
  describe("ScaffolderOptions", () => {
31
31
  describe("constructor", () => {
@@ -33,25 +33,25 @@ describe("ScaffolderOptions", () => {
33
33
  {
34
34
  addOnDirectory: "/apps/test-app",
35
35
  addOnName: "test-app",
36
- addOnKind: EntrypointType.PANEL,
36
+ entrypointType: EntrypointType.PANEL,
37
37
  rootDirectory: "/apps",
38
38
  templateName: "javascript",
39
39
  verbose: false
40
40
  }
41
41
  ];
42
42
  runs.forEach(run => {
43
- it(`should create a new instance for: ${run.addOnKind}.`, () => {
43
+ it(`should create a new instance for: ${run.entrypointType}.`, () => {
44
44
  const scaffolderOptions = new ScaffolderOptions(
45
45
  run.addOnDirectory,
46
46
  run.addOnName,
47
- run.addOnKind as EntrypointType,
47
+ run.entrypointType as EntrypointType,
48
48
  run.rootDirectory,
49
49
  run.templateName,
50
50
  run.verbose
51
51
  );
52
52
  assert.equal(scaffolderOptions.addOnDirectory, run.addOnDirectory);
53
53
  assert.equal(scaffolderOptions.addOnName, run.addOnName);
54
- assert.equal(scaffolderOptions.addOnKind, run.addOnKind);
54
+ assert.equal(scaffolderOptions.entrypointType, run.entrypointType);
55
55
  assert.equal(scaffolderOptions.rootDirectory, run.rootDirectory);
56
56
  assert.equal(scaffolderOptions.templateName, run.templateName);
57
57
  assert.equal(scaffolderOptions.verbose, run.verbose);
@@ -30,8 +30,7 @@ import sinon from "sinon";
30
30
  import type { StubbedInstance } from "ts-sinon";
31
31
  import { stubInterface } from "ts-sinon";
32
32
  import { PROGRAM_NAME } from "../../constants.js";
33
- import type { TemplateValidator } from "../../validators/index.js";
34
- import { AddOnTemplateValidator } from "../../validators/index.js";
33
+ import { TemplateValidator } from "../../validators/TemplateValidator.js";
35
34
 
36
35
  describe("AddOnTemplateValidator", () => {
37
36
  describe("validateTemplate ...", () => {
@@ -42,7 +41,7 @@ describe("AddOnTemplateValidator", () => {
42
41
  beforeEach(() => {
43
42
  sandbox = sinon.createSandbox();
44
43
  logger = stubInterface<Logger>();
45
- validator = new AddOnTemplateValidator(logger);
44
+ validator = new TemplateValidator(logger);
46
45
  });
47
46
 
48
47
  afterEach(() => {
@@ -22,14 +22,57 @@
22
22
  * SOFTWARE.
23
23
  ********************************************************************************/
24
24
 
25
+ import type { Logger } from "@adobe/ccweb-add-on-core";
26
+ import { ITypes as ICoreTypes, isNullOrWhiteSpace } from "@adobe/ccweb-add-on-core";
27
+ import { inject, injectable } from "inversify";
28
+ import process from "process";
29
+ import "reflect-metadata";
30
+ import format from "string-template";
31
+ import { PROGRAM_NAME } from "../constants.js";
32
+
25
33
  /**
26
- * Template validator interface to validate user selected template.
34
+ * Validator class to validate user selected template..
27
35
  */
28
- export interface TemplateValidator {
36
+ @injectable()
37
+ export class TemplateValidator {
38
+ private readonly _logger: Logger;
39
+
40
+ /**
41
+ * Instantiate {@link TemplateValidator}.
42
+ *
43
+ * @param logger - {@link Logger} reference.
44
+ * @returns Reference to a new {@link TemplateValidator} instance.
45
+ */
46
+ constructor(@inject(ICoreTypes.Logger) logger: Logger) {
47
+ this._logger = logger;
48
+ }
49
+
29
50
  /**
30
51
  * Validate the template.
31
52
  *
32
53
  * @param templateName - Name of the template.
33
54
  */
34
- validateTemplate(templateName: string): void;
55
+ validateTemplate(templateName: string): void {
56
+ if (isNullOrWhiteSpace(templateName)) {
57
+ this._logger.warning(LOGS.specifyValidTemplateName);
58
+ this._logger.warning(format(LOGS.executeProgram, { PROGRAM_NAME }), {
59
+ prefix: LOGS.tab
60
+ });
61
+ this._logger.message(LOGS.forExample, { prefix: LOGS.newLine });
62
+ this._logger.information(format(LOGS.executeProgramExample, { PROGRAM_NAME }), {
63
+ prefix: LOGS.tab
64
+ });
65
+
66
+ process.exit(1);
67
+ }
68
+ }
35
69
  }
70
+
71
+ const LOGS = {
72
+ newLine: "\n",
73
+ tab: " ",
74
+ specifyValidTemplateName: "Please specify a valid template name:",
75
+ executeProgram: "{PROGRAM_NAME} --template <template-name>",
76
+ executeProgramExample: "{PROGRAM_NAME} --template javascript",
77
+ forExample: "For example:"
78
+ };
@@ -22,5 +22,4 @@
22
22
  * SOFTWARE.
23
23
  ********************************************************************************/
24
24
 
25
- export * from "./AddOnTemplateValidator.js";
26
25
  export * from "./TemplateValidator.js";
package/tsconfig.json CHANGED
@@ -17,11 +17,14 @@
17
17
  "outDir": "dist",
18
18
  "preserveConstEnums": true,
19
19
  "resolveJsonModule": true,
20
+ "skipLibCheck": true,
20
21
  "sourceMap": true,
21
22
  "strict": true,
22
23
  "target": "ESNext",
24
+ "lib": ["ES2020", "DOM"],
23
25
  "types": ["reflect-metadata"],
24
- "useUnknownInCatchVariables": false
26
+ "useUnknownInCatchVariables": false,
27
+ "isolatedDeclarations": true
25
28
  },
26
29
  "exclude": ["node_modules", "src/test/**/*"],
27
30
  "include": ["src/**/*"]