@speedkit/cli 4.20.5 → 4.22.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.
- package/CHANGELOG.md +22 -0
- package/README.md +83 -2
- package/dist/commands/extension/add.d.ts +9 -0
- package/dist/commands/extension/add.js +41 -0
- package/dist/commands/extension/list.d.ts +6 -0
- package/dist/commands/extension/list.js +27 -0
- package/dist/commands/extension/remove.d.ts +9 -0
- package/dist/commands/extension/remove.js +38 -0
- package/dist/commands/extension/update.d.ts +6 -0
- package/dist/commands/extension/update.js +20 -0
- package/dist/commands/generate-customer-config.d.ts +2 -0
- package/dist/commands/generate-customer-config.js +10 -2
- package/dist/helpers/cli-config.d.ts +11 -0
- package/dist/helpers/cli-config.js +4 -0
- package/dist/helpers/cli-config.spec.js +13 -0
- package/dist/hooks/init/first-run.js +1 -0
- package/dist/services/customer-config/customer-config-service-context.d.ts +9 -1
- package/dist/services/customer-config/customer-config-service-context.js +11 -1
- package/dist/services/customer-config/customer-config-service-model.d.ts +6 -0
- package/dist/services/customer-config/customer-config-service-model.js +36 -0
- package/dist/services/customer-config/customer-config-service.d.ts +8 -3
- package/dist/services/customer-config/customer-config-service.js +71 -25
- package/dist/services/customer-config/template-source.d.ts +33 -0
- package/dist/services/customer-config/template-source.js +49 -0
- package/dist/services/integration-api/integration-api-model.js +3 -1
- package/dist/services/setup/extension/crx.d.ts +13 -0
- package/dist/services/setup/extension/crx.js +48 -0
- package/dist/services/setup/extension/crx.spec.d.ts +1 -0
- package/dist/services/setup/extension/crx.spec.js +38 -0
- package/dist/services/setup/extension/extension-installer.d.ts +31 -0
- package/dist/services/setup/extension/extension-installer.js +87 -0
- package/dist/services/setup/extension/extension-setup-service.d.ts +40 -0
- package/dist/services/setup/extension/extension-setup-service.js +152 -0
- package/dist/services/setup/extension/webstore.d.ts +33 -0
- package/dist/services/setup/extension/webstore.js +74 -0
- package/dist/services/setup/extension/webstore.spec.d.ts +1 -0
- package/dist/services/setup/extension/webstore.spec.js +51 -0
- package/dist/services/setup/index.d.ts +4 -0
- package/dist/services/setup/index.js +4 -0
- package/dist/services/setup/setup-service-factory.js +5 -1
- package/dist/services/setup/setup-service.d.ts +11 -2
- package/dist/services/setup/setup-service.js +18 -3
- package/oclif.manifest.json +131 -1
- package/package.json +8 -1
- package/dist/services/customer-config/templates/config_SpeedKit.js.hbs +0 -548
- package/dist/services/customer-config/templates/config_customer.json.hbs +0 -38
- package/dist/services/customer-config/templates/config_documentHandler.js.hbs +0 -362
- package/dist/services/customer-config/templates/config_dynamicBlocks.es6.hbs +0 -163
- package/dist/services/customer-config/templates/config_dynamicStyles.css.hbs +0 -137
- package/dist/services/customer-config/templates/config_loadHandler.js.hbs +0 -391
- package/dist/services/customer-config/templates/downtimeDetection.js.hbs +0 -209
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
# [4.22.0](https://gitlab.orestes.info/baqend/speed-kit-cli/compare/v4.21.0...v4.22.0) (2026-08-20)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **customer-config:** contract-check against the CLI's variable inventory ([7ebd2d2](https://gitlab.orestes.info/baqend/speed-kit-cli/commit/7ebd2d28331a59dc3754fa1f6cd859f978febf6c))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **customer-config:** --mode flag picks the template set ([b471e8b](https://gitlab.orestes.info/baqend/speed-kit-cli/commit/b471e8b8c6de32babfd26f69688409cae04288ae))
|
|
12
|
+
* **customer-config:** graduate an existing pre-PoC config ([28af5e2](https://gitlab.orestes.info/baqend/speed-kit-cli/commit/28af5e2d06c8c9571da3d72563ae229b12f27d56))
|
|
13
|
+
* **customer-config:** pre-poc mode asks only what the baseline needs ([35cbcbd](https://gitlab.orestes.info/baqend/speed-kit-cli/commit/35cbcbd698144ac82dd275dcf63a0e62b03dba24))
|
|
14
|
+
* **customer-config:** render wizard templates from sk-onboarding ([266cbe3](https://gitlab.orestes.info/baqend/speed-kit-cli/commit/266cbe3c68f5e4aafa431e2fa4a5f9311c3e28c9))
|
|
15
|
+
|
|
16
|
+
# [4.21.0](https://gitlab.orestes.info/baqend/speed-kit-cli/compare/v4.20.5...v4.21.0) (2026-08-14)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* implement extensionManagement ([17e65b7](https://gitlab.orestes.info/baqend/speed-kit-cli/commit/17e65b72c8e7791ba1174dd7c948daffe4a9b9cc))
|
|
22
|
+
|
|
1
23
|
## [4.20.5](https://gitlab.orestes.info/baqend/speed-kit-cli/compare/v4.20.4...v4.20.5) (2026-08-10)
|
|
2
24
|
|
|
3
25
|
|
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ $ npm install -g @speedkit/cli
|
|
|
21
21
|
$ sk COMMAND
|
|
22
22
|
running command...
|
|
23
23
|
$ sk (--version)
|
|
24
|
-
@speedkit/cli/4.
|
|
24
|
+
@speedkit/cli/4.22.0 linux-x64 node-v22.23.2
|
|
25
25
|
$ sk --help [COMMAND]
|
|
26
26
|
USAGE
|
|
27
27
|
$ sk COMMAND
|
|
@@ -78,6 +78,10 @@ By either...
|
|
|
78
78
|
* [`sk deploy CUSTOMERPATH`](#sk-deploy-customerpath)
|
|
79
79
|
* [`sk diff-url-parameters PAGEURL`](#sk-diff-url-parameters-pageurl)
|
|
80
80
|
* [`sk document-handler CUSTOMERPATH`](#sk-document-handler-customerpath)
|
|
81
|
+
* [`sk extension add [REF]`](#sk-extension-add-ref)
|
|
82
|
+
* [`sk extension list`](#sk-extension-list)
|
|
83
|
+
* [`sk extension remove [REF]`](#sk-extension-remove-ref)
|
|
84
|
+
* [`sk extension update`](#sk-extension-update)
|
|
81
85
|
* [`sk find-pops APP`](#sk-find-pops-app)
|
|
82
86
|
* [`sk generate-customer-config`](#sk-generate-customer-config)
|
|
83
87
|
* [`sk generate-pop-config APP`](#sk-generate-pop-config-app)
|
|
@@ -381,6 +385,78 @@ EXAMPLES
|
|
|
381
385
|
$ sk deploy customers/decathlon.de -c production
|
|
382
386
|
```
|
|
383
387
|
|
|
388
|
+
## `sk extension add [REF]`
|
|
389
|
+
|
|
390
|
+
Install a Chrome extension into the onboarding browser by Web Store link or id
|
|
391
|
+
|
|
392
|
+
```
|
|
393
|
+
USAGE
|
|
394
|
+
$ sk extension add [REF]
|
|
395
|
+
|
|
396
|
+
ARGUMENTS
|
|
397
|
+
[REF] Chrome Web Store link or extension id
|
|
398
|
+
|
|
399
|
+
DESCRIPTION
|
|
400
|
+
Install a Chrome extension into the onboarding browser by Web Store link or id
|
|
401
|
+
|
|
402
|
+
EXAMPLES
|
|
403
|
+
$ sk extension add fmkadmapgofadopljbjfkapdkoienihi
|
|
404
|
+
|
|
405
|
+
$ sk extension add https://chromewebstore.google.com/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi
|
|
406
|
+
|
|
407
|
+
$ sk extension add
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
## `sk extension list`
|
|
411
|
+
|
|
412
|
+
List Chrome extensions managed by the setup wizard
|
|
413
|
+
|
|
414
|
+
```
|
|
415
|
+
USAGE
|
|
416
|
+
$ sk extension list
|
|
417
|
+
|
|
418
|
+
DESCRIPTION
|
|
419
|
+
List Chrome extensions managed by the setup wizard
|
|
420
|
+
|
|
421
|
+
EXAMPLES
|
|
422
|
+
$ sk extension list
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
## `sk extension remove [REF]`
|
|
426
|
+
|
|
427
|
+
Remove a managed Chrome extension
|
|
428
|
+
|
|
429
|
+
```
|
|
430
|
+
USAGE
|
|
431
|
+
$ sk extension remove [REF]
|
|
432
|
+
|
|
433
|
+
ARGUMENTS
|
|
434
|
+
[REF] Chrome Web Store link or extension id
|
|
435
|
+
|
|
436
|
+
DESCRIPTION
|
|
437
|
+
Remove a managed Chrome extension
|
|
438
|
+
|
|
439
|
+
EXAMPLES
|
|
440
|
+
$ sk extension remove
|
|
441
|
+
|
|
442
|
+
$ sk extension remove <id>
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
## `sk extension update`
|
|
446
|
+
|
|
447
|
+
Check managed Chrome extensions for updates and install them
|
|
448
|
+
|
|
449
|
+
```
|
|
450
|
+
USAGE
|
|
451
|
+
$ sk extension update
|
|
452
|
+
|
|
453
|
+
DESCRIPTION
|
|
454
|
+
Check managed Chrome extensions for updates and install them
|
|
455
|
+
|
|
456
|
+
EXAMPLES
|
|
457
|
+
$ sk extension update
|
|
458
|
+
```
|
|
459
|
+
|
|
384
460
|
## `sk find-pops APP`
|
|
385
461
|
|
|
386
462
|
Get IPs for all fastly PoPs
|
|
@@ -410,13 +486,18 @@ Generates a customer config guided by a wizard 🧙
|
|
|
410
486
|
|
|
411
487
|
```
|
|
412
488
|
USAGE
|
|
413
|
-
$ sk generate-customer-config [-a <value>] [-d <value>]
|
|
489
|
+
$ sk generate-customer-config [-a <value>] [-d <value>] [--templates <value>] [--mode customer-config|pre-poc]
|
|
414
490
|
|
|
415
491
|
FLAGS
|
|
416
492
|
-a, --app=<value> The SK app name which is also being used the config output directory name
|
|
417
493
|
(kebab-case)
|
|
418
494
|
-d, --customersDirectory=<value> Name of the sk-onboarding directory where all customer configs are being stored
|
|
419
495
|
(default: "customers")
|
|
496
|
+
--mode=<option> [default: customer-config] Which config to scaffold: the full acceleration config,
|
|
497
|
+
or the tracking-only pre-PoC config
|
|
498
|
+
<options: customer-config|pre-poc>
|
|
499
|
+
--templates=<value> Path to the templates/ root (default: the sk-onboarding checkout the CLI runs in, or
|
|
500
|
+
the sk-onboarding repo on GitLab when run standalone)
|
|
420
501
|
|
|
421
502
|
DESCRIPTION
|
|
422
503
|
Generates a customer config guided by a wizard 🧙
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
export default class ExtensionAdd extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
ref: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Args, Command } from "@oclif/core";
|
|
2
|
+
import { CliServiceFactory } from "../../services/cli/index.js";
|
|
3
|
+
import { SetupServiceFactory } from "../../services/setup/index.js";
|
|
4
|
+
export default class ExtensionAdd extends Command {
|
|
5
|
+
static description = "Install a Chrome extension into the onboarding browser by Web Store link or id";
|
|
6
|
+
static examples = [
|
|
7
|
+
"$ sk extension add fmkadmapgofadopljbjfkapdkoienihi",
|
|
8
|
+
"$ sk extension add https://chromewebstore.google.com/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi",
|
|
9
|
+
"$ sk extension add",
|
|
10
|
+
];
|
|
11
|
+
static args = {
|
|
12
|
+
ref: Args.string({
|
|
13
|
+
name: "ref",
|
|
14
|
+
required: false,
|
|
15
|
+
description: "Chrome Web Store link or extension id",
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
async run() {
|
|
19
|
+
const { args } = await this.parse(ExtensionAdd);
|
|
20
|
+
const cli = new CliServiceFactory().getService();
|
|
21
|
+
const { extensions } = new SetupServiceFactory(this.config).getService();
|
|
22
|
+
let ref = args.ref;
|
|
23
|
+
if (!ref) {
|
|
24
|
+
ref = await cli.prompt("Paste a Chrome Web Store link or extension id", {
|
|
25
|
+
defaultAnswer: "",
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (!ref?.trim()) {
|
|
29
|
+
cli.writeWarning("No extension provided.");
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
cli.writeWarning("Only add extensions you trust — they are loaded into the onboarding browser.");
|
|
33
|
+
try {
|
|
34
|
+
const ext = await extensions.addFromInput(ref);
|
|
35
|
+
cli.writeSuccess(`Installed ${ext.name} ${ext.version}`);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
cli.writeError(`Could not install extension: ${error?.message ?? error}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
import { CliServiceFactory } from "../../services/cli/index.js";
|
|
3
|
+
import { SetupServiceFactory } from "../../services/setup/index.js";
|
|
4
|
+
export default class ExtensionList extends Command {
|
|
5
|
+
static description = "List Chrome extensions managed by the setup wizard";
|
|
6
|
+
static examples = ["$ sk extension list"];
|
|
7
|
+
async run() {
|
|
8
|
+
const cli = new CliServiceFactory().getService();
|
|
9
|
+
const { extensions } = new SetupServiceFactory(this.config).getService();
|
|
10
|
+
const list = extensions.list();
|
|
11
|
+
if (list.length === 0) {
|
|
12
|
+
cli.writeWarning("No managed extensions installed.");
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
cli.table(list.map((ext) => ({
|
|
16
|
+
name: ext.name,
|
|
17
|
+
version: ext.version,
|
|
18
|
+
id: ext.id,
|
|
19
|
+
path: ext.path,
|
|
20
|
+
})), {
|
|
21
|
+
name: { header: "Name" },
|
|
22
|
+
version: { header: "Version" },
|
|
23
|
+
id: { header: "Id" },
|
|
24
|
+
path: { header: "Path" },
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
export default class ExtensionRemove extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
ref: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Args, Command } from "@oclif/core";
|
|
2
|
+
import { CliServiceFactory } from "../../services/cli/index.js";
|
|
3
|
+
import { parseExtensionId, SetupServiceFactory, } from "../../services/setup/index.js";
|
|
4
|
+
export default class ExtensionRemove extends Command {
|
|
5
|
+
static description = "Remove a managed Chrome extension";
|
|
6
|
+
static examples = ["$ sk extension remove", "$ sk extension remove <id>"];
|
|
7
|
+
static args = {
|
|
8
|
+
ref: Args.string({
|
|
9
|
+
name: "ref",
|
|
10
|
+
required: false,
|
|
11
|
+
description: "Chrome Web Store link or extension id",
|
|
12
|
+
}),
|
|
13
|
+
};
|
|
14
|
+
async run() {
|
|
15
|
+
const { args } = await this.parse(ExtensionRemove);
|
|
16
|
+
const cli = new CliServiceFactory().getService();
|
|
17
|
+
const { extensions } = new SetupServiceFactory(this.config).getService();
|
|
18
|
+
const list = extensions.list();
|
|
19
|
+
if (list.length === 0) {
|
|
20
|
+
cli.writeWarning("No managed extensions to remove.");
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
let id = args.ref ? parseExtensionId(args.ref) : null;
|
|
24
|
+
if (!id) {
|
|
25
|
+
id = await cli.select("Which extension should be removed?", list.map((ext) => ({
|
|
26
|
+
name: `${ext.name} (${ext.version})`,
|
|
27
|
+
value: ext.id,
|
|
28
|
+
})));
|
|
29
|
+
}
|
|
30
|
+
const removed = await extensions.remove(id);
|
|
31
|
+
if (removed) {
|
|
32
|
+
cli.writeSuccess(`Removed extension ${id}`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
cli.writeWarning(`Extension not found: ${id}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
import { CliServiceFactory } from "../../services/cli/index.js";
|
|
3
|
+
import { SetupServiceFactory } from "../../services/setup/index.js";
|
|
4
|
+
export default class ExtensionUpdate extends Command {
|
|
5
|
+
static description = "Check managed Chrome extensions for updates and install them";
|
|
6
|
+
static examples = ["$ sk extension update"];
|
|
7
|
+
async run() {
|
|
8
|
+
const cli = new CliServiceFactory().getService();
|
|
9
|
+
const { extensions } = new SetupServiceFactory(this.config).getService();
|
|
10
|
+
const list = extensions.list();
|
|
11
|
+
if (list.length === 0) {
|
|
12
|
+
cli.writeWarning("No managed extensions to update.");
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
cli.startAction("EXT:CHECK", "Checking extensions for updates…");
|
|
16
|
+
cli.endAction("EXT:CHECK");
|
|
17
|
+
await extensions.updateAll();
|
|
18
|
+
cli.writeSuccess("Extension update check complete.");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -5,6 +5,8 @@ export default class GenerateCustomerConfig extends Command {
|
|
|
5
5
|
static flags: {
|
|
6
6
|
app: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
7
|
customersDirectory: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
templates: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
mode: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
10
|
};
|
|
9
11
|
run(): Promise<void>;
|
|
10
12
|
}
|
|
@@ -16,10 +16,18 @@ export default class GenerateCustomerConfig extends Command {
|
|
|
16
16
|
char: CLIParametersChar.CustomersDirectory,
|
|
17
17
|
description: `Name of the sk-onboarding directory where all customer configs are being stored (default: "${CLIParametersExample.CustomersDirectory}")`,
|
|
18
18
|
}),
|
|
19
|
+
templates: Flags.string({
|
|
20
|
+
description: "Path to the templates/ root (default: the sk-onboarding checkout the CLI runs in, or the sk-onboarding repo on GitLab when run standalone)",
|
|
21
|
+
}),
|
|
22
|
+
mode: Flags.string({
|
|
23
|
+
options: ["customer-config", "pre-poc"],
|
|
24
|
+
default: "customer-config",
|
|
25
|
+
description: "Which config to scaffold: the full acceleration config, or the tracking-only pre-PoC config",
|
|
26
|
+
}),
|
|
19
27
|
};
|
|
20
28
|
async run() {
|
|
21
|
-
const { flags: { app, customersDirectory }, } = await this.parse(GenerateCustomerConfig);
|
|
22
|
-
const context = new CustomerConfigServiceContext(app, customersDirectory);
|
|
29
|
+
const { flags: { app, customersDirectory, templates, mode }, } = await this.parse(GenerateCustomerConfig);
|
|
30
|
+
const context = new CustomerConfigServiceContext(app, customersDirectory, templates, mode);
|
|
23
31
|
const customerConfigService = await new CustomerConfigServiceFactory(context).buildService();
|
|
24
32
|
await customerConfigService.generateConfig();
|
|
25
33
|
}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { Config } from "@oclif/core";
|
|
2
|
+
/** A Chrome extension installed via the setup wizard and tracked for updates. */
|
|
3
|
+
export interface ManagedExtension {
|
|
4
|
+
/** Chrome Web Store extension id */
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
version: string;
|
|
8
|
+
/** absolute path to the unpacked extension directory */
|
|
9
|
+
path: string;
|
|
10
|
+
}
|
|
2
11
|
export interface UserCliConfig {
|
|
3
12
|
chromeExtensionPaths: string;
|
|
4
13
|
chromePath: string;
|
|
@@ -14,6 +23,8 @@ export interface UserCliConfig {
|
|
|
14
23
|
browserAutoUpdate: boolean;
|
|
15
24
|
updateReminderDays: number;
|
|
16
25
|
lastBrowserUpdateCheck: string;
|
|
26
|
+
managedChromeExtensions: ManagedExtension[];
|
|
27
|
+
lastExtensionUpdateCheck: string;
|
|
17
28
|
firstRunCompleted: boolean;
|
|
18
29
|
tempFolder: string;
|
|
19
30
|
runtimeConfig: Config;
|
|
@@ -36,6 +36,8 @@ export class CliConfig {
|
|
|
36
36
|
browserAutoUpdate: false,
|
|
37
37
|
updateReminderDays: 3,
|
|
38
38
|
lastBrowserUpdateCheck: "",
|
|
39
|
+
managedChromeExtensions: [],
|
|
40
|
+
lastExtensionUpdateCheck: "",
|
|
39
41
|
firstRunCompleted: false,
|
|
40
42
|
tempFolder: "/tmp",
|
|
41
43
|
runtimeConfig: {},
|
|
@@ -74,6 +76,8 @@ export class CliConfig {
|
|
|
74
76
|
browserAutoUpdate: false,
|
|
75
77
|
updateReminderDays: 3,
|
|
76
78
|
lastBrowserUpdateCheck: "",
|
|
79
|
+
managedChromeExtensions: [],
|
|
80
|
+
lastExtensionUpdateCheck: "",
|
|
77
81
|
firstRunCompleted: false,
|
|
78
82
|
};
|
|
79
83
|
}
|
|
@@ -67,4 +67,17 @@ describe("CliConfig save/load", () => {
|
|
|
67
67
|
const reloaded = new CliConfig(fakeOclifConfig(dir)).load();
|
|
68
68
|
expect(reloaded.browserAutoUpdate).to.equal(false);
|
|
69
69
|
});
|
|
70
|
+
it("round-trips the managedChromeExtensions array", () => {
|
|
71
|
+
const cfg = new CliConfig(fakeOclifConfig(dir));
|
|
72
|
+
cfg.load();
|
|
73
|
+
cfg.save({
|
|
74
|
+
managedChromeExtensions: [
|
|
75
|
+
{ id: "abc", name: "Ext", version: "1.0.0", path: "/tmp/ext/abc" },
|
|
76
|
+
],
|
|
77
|
+
});
|
|
78
|
+
const reloaded = new CliConfig(fakeOclifConfig(dir)).load();
|
|
79
|
+
expect(reloaded.managedChromeExtensions).to.have.length(1);
|
|
80
|
+
expect(reloaded.managedChromeExtensions[0].id).to.equal("abc");
|
|
81
|
+
expect(reloaded.managedChromeExtensions[0].version).to.equal("1.0.0");
|
|
82
|
+
});
|
|
70
83
|
});
|
|
@@ -28,6 +28,7 @@ const hook = async function (opts) {
|
|
|
28
28
|
}
|
|
29
29
|
const service = new SetupServiceFactory(config).getService();
|
|
30
30
|
await service.remindBrowserUpdate();
|
|
31
|
+
await service.remindExtensionUpdates();
|
|
31
32
|
}
|
|
32
33
|
catch {
|
|
33
34
|
// never block a command because of setup housekeeping
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
export declare class CustomerConfigServiceContext {
|
|
2
2
|
appName: string;
|
|
3
3
|
customersDirectory: string;
|
|
4
|
-
|
|
4
|
+
/** Explicit templates/ root; overrides checkout detection and the remote fetch. */
|
|
5
|
+
templatesPath?: string;
|
|
6
|
+
/** Template set = wizard mode: "customer-config" (default) or "pre-poc". */
|
|
7
|
+
mode: string;
|
|
8
|
+
constructor(appName?: string, customersDirectory?: string,
|
|
9
|
+
/** Explicit templates/ root; overrides checkout detection and the remote fetch. */
|
|
10
|
+
templatesPath?: string,
|
|
11
|
+
/** Template set = wizard mode: "customer-config" (default) or "pre-poc". */
|
|
12
|
+
mode?: string);
|
|
5
13
|
}
|
|
@@ -2,10 +2,20 @@ import { CLIParametersExample } from "../../models/cli-parameters.js";
|
|
|
2
2
|
export class CustomerConfigServiceContext {
|
|
3
3
|
appName;
|
|
4
4
|
customersDirectory;
|
|
5
|
-
|
|
5
|
+
templatesPath;
|
|
6
|
+
mode;
|
|
7
|
+
constructor(appName = "", customersDirectory = CLIParametersExample.CustomersDirectory,
|
|
8
|
+
/** Explicit templates/ root; overrides checkout detection and the remote fetch. */
|
|
9
|
+
templatesPath,
|
|
10
|
+
/** Template set = wizard mode: "customer-config" (default) or "pre-poc". */
|
|
11
|
+
mode = "customer-config") {
|
|
6
12
|
this.appName = appName;
|
|
7
13
|
this.customersDirectory = customersDirectory;
|
|
14
|
+
this.templatesPath = templatesPath;
|
|
15
|
+
this.mode = mode;
|
|
8
16
|
this.appName = appName;
|
|
9
17
|
this.customersDirectory = customersDirectory;
|
|
18
|
+
this.templatesPath = templatesPath;
|
|
19
|
+
this.mode = mode;
|
|
10
20
|
}
|
|
11
21
|
}
|
|
@@ -59,3 +59,9 @@ export interface CustomerConfigSettings {
|
|
|
59
59
|
isPlentymarkets?: boolean;
|
|
60
60
|
addDowntimeDetection?: boolean;
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Every variable this CLI can hand to the wizard templates — the template
|
|
64
|
+
* manifest in sk-onboarding must be a subset. Extend this together with
|
|
65
|
+
* `CustomerConfigSettings` when the wizard gains a question.
|
|
66
|
+
*/
|
|
67
|
+
export declare const TEMPLATE_VARIABLES: readonly string[];
|
|
@@ -32,3 +32,39 @@ export var EnvironmentType;
|
|
|
32
32
|
EnvironmentType["STAGING"] = "staging";
|
|
33
33
|
EnvironmentType["TEST"] = "test";
|
|
34
34
|
})(EnvironmentType || (EnvironmentType = {}));
|
|
35
|
+
/**
|
|
36
|
+
* Every variable this CLI can hand to the wizard templates — the template
|
|
37
|
+
* manifest in sk-onboarding must be a subset. Extend this together with
|
|
38
|
+
* `CustomerConfigSettings` when the wizard gains a question.
|
|
39
|
+
*/
|
|
40
|
+
export const TEMPLATE_VARIABLES = [
|
|
41
|
+
"appName",
|
|
42
|
+
"production.host",
|
|
43
|
+
"production.forceInstall",
|
|
44
|
+
"staging.host",
|
|
45
|
+
"staging.forceInstall",
|
|
46
|
+
"activateScopedDeployments",
|
|
47
|
+
"subRouteScope",
|
|
48
|
+
"includeServiceWorker",
|
|
49
|
+
"activateImageOptimisation",
|
|
50
|
+
"removeLazyLoading",
|
|
51
|
+
"addSSR",
|
|
52
|
+
"addSSRInnerShadowDomSupport",
|
|
53
|
+
"addDeviceDetection",
|
|
54
|
+
"useGATracking",
|
|
55
|
+
"useScrapingBee",
|
|
56
|
+
"withGoogleOptimize",
|
|
57
|
+
"activateCfRocketLoaderPlugin",
|
|
58
|
+
"hasSoftNavigations",
|
|
59
|
+
"convertSoftToHardNavigations",
|
|
60
|
+
"handleUsercentrics",
|
|
61
|
+
"isPOV",
|
|
62
|
+
"useDisabledSitesApproach",
|
|
63
|
+
"shopSystemName",
|
|
64
|
+
"isShopify",
|
|
65
|
+
"isShopware",
|
|
66
|
+
"isSalesforce",
|
|
67
|
+
"isOxid",
|
|
68
|
+
"isPlentymarkets",
|
|
69
|
+
"addDowntimeDetection",
|
|
70
|
+
];
|
|
@@ -10,15 +10,20 @@ export declare class CustomerConfigService {
|
|
|
10
10
|
private set appName(value);
|
|
11
11
|
private set outputDirPath(value);
|
|
12
12
|
private get outputDirPath();
|
|
13
|
-
|
|
13
|
+
/** Set from the "Downtime Detection" feature answer in the wizard. */
|
|
14
|
+
private includeDowntimeDetection;
|
|
14
15
|
constructor(context: CustomerConfigServiceContext, cli: CliService);
|
|
15
16
|
private getOutputDirPath;
|
|
16
|
-
private
|
|
17
|
+
private getOutputFileName;
|
|
17
18
|
private getPathWithChangedDir;
|
|
18
19
|
private isDirNotEmpty;
|
|
19
20
|
private chooseNewOutputDirectoryName;
|
|
21
|
+
/** A pre-PoC config marks itself via splitTestId "pre_poc" in config_SpeedKit.js. */
|
|
22
|
+
private isPrePocConfig;
|
|
23
|
+
/** Parks every config_* file as *_pre-poc (suffix before the extension). */
|
|
24
|
+
private renamePrePocFiles;
|
|
20
25
|
private selectOutputDirectory;
|
|
21
|
-
private
|
|
26
|
+
private compileTemplateFiles;
|
|
22
27
|
private getEnvironmentConfig;
|
|
23
28
|
private shouldFileBeOverwritten;
|
|
24
29
|
private getConfigSettings;
|