@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
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for dealing with the Chrome Web Store: extracting an extension
|
|
3
|
+
* id from user input, and building the Google update-service URLs used to
|
|
4
|
+
* download a CRX and to check for a newer version.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Resolves a Chrome extension id from a bare id or a Web Store URL. Supports
|
|
8
|
+
* both the current `chromewebstore.google.com/detail/<slug>/<id>` and the
|
|
9
|
+
* legacy `chrome.google.com/webstore/detail/<slug>/<id>` layouts. Returns null
|
|
10
|
+
* when no valid id can be found.
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseExtensionId(input: string): string | null;
|
|
13
|
+
/**
|
|
14
|
+
* Builds the download URL for an extension's CRX. `response=redirect` makes the
|
|
15
|
+
* endpoint 302 to the actual CRX file, which fetch follows automatically.
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildCrxUrl(id: string, chromeMajorVersion: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Builds the update-check URL. `installsource=ondemand` makes the endpoint
|
|
20
|
+
* report the latest available version (without it, it answers "noupdate"),
|
|
21
|
+
* which we then compare against the installed version ourselves.
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildUpdateCheckUrl(id: string, chromeMajorVersion: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Parses the latest version from an update-check XML response. Returns null when
|
|
26
|
+
* the response reports no update or carries no version attribute.
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseUpdateCheckVersion(xml: string): string | null;
|
|
29
|
+
/**
|
|
30
|
+
* Compares two dotted numeric versions (handles Chrome's 4-part versions, which
|
|
31
|
+
* semver cannot parse). Returns >0 if a is newer, <0 if older, 0 if equal.
|
|
32
|
+
*/
|
|
33
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for dealing with the Chrome Web Store: extracting an extension
|
|
3
|
+
* id from user input, and building the Google update-service URLs used to
|
|
4
|
+
* download a CRX and to check for a newer version.
|
|
5
|
+
*/
|
|
6
|
+
const EXTENSION_ID = /[a-p]{32}/;
|
|
7
|
+
const CRX_ENDPOINT = "https://clients2.google.com/service/update2/crx";
|
|
8
|
+
/**
|
|
9
|
+
* Resolves a Chrome extension id from a bare id or a Web Store URL. Supports
|
|
10
|
+
* both the current `chromewebstore.google.com/detail/<slug>/<id>` and the
|
|
11
|
+
* legacy `chrome.google.com/webstore/detail/<slug>/<id>` layouts. Returns null
|
|
12
|
+
* when no valid id can be found.
|
|
13
|
+
*/
|
|
14
|
+
export function parseExtensionId(input) {
|
|
15
|
+
const trimmed = (input ?? "").trim();
|
|
16
|
+
if (!trimmed) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
if (new RegExp(`^${EXTENSION_ID.source}$`).test(trimmed)) {
|
|
20
|
+
return trimmed;
|
|
21
|
+
}
|
|
22
|
+
const detail = trimmed.match(new RegExp(`/detail/(?:[^/]+/)?(${EXTENSION_ID.source})`));
|
|
23
|
+
if (detail) {
|
|
24
|
+
return detail[1];
|
|
25
|
+
}
|
|
26
|
+
const anywhere = trimmed.match(EXTENSION_ID);
|
|
27
|
+
return anywhere ? anywhere[0] : null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Builds the download URL for an extension's CRX. `response=redirect` makes the
|
|
31
|
+
* endpoint 302 to the actual CRX file, which fetch follows automatically.
|
|
32
|
+
*/
|
|
33
|
+
export function buildCrxUrl(id, chromeMajorVersion) {
|
|
34
|
+
const x = encodeURIComponent(`id=${id}&installsource=ondemand&uc`);
|
|
35
|
+
return (`${CRX_ENDPOINT}?response=redirect&acceptformat=crx2,crx3` +
|
|
36
|
+
`&prodversion=${chromeMajorVersion}&x=${x}`);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Builds the update-check URL. `installsource=ondemand` makes the endpoint
|
|
40
|
+
* report the latest available version (without it, it answers "noupdate"),
|
|
41
|
+
* which we then compare against the installed version ourselves.
|
|
42
|
+
*/
|
|
43
|
+
export function buildUpdateCheckUrl(id, chromeMajorVersion) {
|
|
44
|
+
const x = encodeURIComponent(`id=${id}&installsource=ondemand&uc`);
|
|
45
|
+
return (`${CRX_ENDPOINT}?response=updatecheck&acceptformat=crx2,crx3` +
|
|
46
|
+
`&prodversion=${chromeMajorVersion}&x=${x}`);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parses the latest version from an update-check XML response. Returns null when
|
|
50
|
+
* the response reports no update or carries no version attribute.
|
|
51
|
+
*/
|
|
52
|
+
export function parseUpdateCheckVersion(xml) {
|
|
53
|
+
if (/status="noupdate"/.test(xml)) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const match = xml.match(/<updatecheck[^>]*\bversion="([^"]+)"/);
|
|
57
|
+
return match ? match[1] : null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Compares two dotted numeric versions (handles Chrome's 4-part versions, which
|
|
61
|
+
* semver cannot parse). Returns >0 if a is newer, <0 if older, 0 if equal.
|
|
62
|
+
*/
|
|
63
|
+
export function compareVersions(a, b) {
|
|
64
|
+
const partsA = a.split(".").map((part) => Number.parseInt(part, 10) || 0);
|
|
65
|
+
const partsB = b.split(".").map((part) => Number.parseInt(part, 10) || 0);
|
|
66
|
+
const length = Math.max(partsA.length, partsB.length);
|
|
67
|
+
for (let index = 0; index < length; index++) {
|
|
68
|
+
const diff = (partsA[index] || 0) - (partsB[index] || 0);
|
|
69
|
+
if (diff !== 0) {
|
|
70
|
+
return diff > 0 ? 1 : -1;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { expect } from "chai";
|
|
2
|
+
import { describe, it } from "mocha";
|
|
3
|
+
import { buildCrxUrl, buildUpdateCheckUrl, compareVersions, parseExtensionId, parseUpdateCheckVersion, } from "./webstore.js";
|
|
4
|
+
const ID = "fmkadmapgofadopljbjfkapdkoienihi";
|
|
5
|
+
describe("webstore.parseExtensionId", () => {
|
|
6
|
+
it("accepts a bare 32-char id", () => {
|
|
7
|
+
expect(parseExtensionId(ID)).to.equal(ID);
|
|
8
|
+
});
|
|
9
|
+
it("extracts the id from a current Web Store URL", () => {
|
|
10
|
+
expect(parseExtensionId(`https://chromewebstore.google.com/detail/react-developer-tools/${ID}`)).to.equal(ID);
|
|
11
|
+
});
|
|
12
|
+
it("extracts the id from a legacy Web Store URL with query", () => {
|
|
13
|
+
expect(parseExtensionId(`https://chrome.google.com/webstore/detail/react/${ID}?hl=en`)).to.equal(ID);
|
|
14
|
+
});
|
|
15
|
+
it("returns null for input without an id", () => {
|
|
16
|
+
expect(parseExtensionId("not-an-extension")).to.equal(null);
|
|
17
|
+
expect(parseExtensionId("")).to.equal(null);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
describe("webstore URL builders", () => {
|
|
21
|
+
it("builds a redirecting CRX download URL with the id and prodversion", () => {
|
|
22
|
+
const url = buildCrxUrl(ID, "131");
|
|
23
|
+
expect(url).to.contain("response=redirect");
|
|
24
|
+
expect(url).to.contain("prodversion=131");
|
|
25
|
+
expect(url).to.contain(encodeURIComponent(`id=${ID}`));
|
|
26
|
+
});
|
|
27
|
+
it("builds an update-check URL that reports the latest version", () => {
|
|
28
|
+
const url = buildUpdateCheckUrl(ID, "131");
|
|
29
|
+
expect(url).to.contain("response=updatecheck");
|
|
30
|
+
expect(url).to.contain(encodeURIComponent("installsource=ondemand"));
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe("webstore.parseUpdateCheckVersion", () => {
|
|
34
|
+
it("parses the version from an update response", () => {
|
|
35
|
+
const xml = `<gupdate><app appid="${ID}">` +
|
|
36
|
+
`<updatecheck status="ok" codebase="https://x/ext.crx" version="4.28.0"/>` +
|
|
37
|
+
`</app></gupdate>`;
|
|
38
|
+
expect(parseUpdateCheckVersion(xml)).to.equal("4.28.0");
|
|
39
|
+
});
|
|
40
|
+
it("returns null when there is no update", () => {
|
|
41
|
+
const xml = `<updatecheck status="noupdate"/>`;
|
|
42
|
+
expect(parseUpdateCheckVersion(xml)).to.equal(null);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe("webstore.compareVersions", () => {
|
|
46
|
+
it("handles 4-part Chrome-style versions", () => {
|
|
47
|
+
expect(compareVersions("1.2.3.4", "1.2.3.3")).to.be.greaterThan(0);
|
|
48
|
+
expect(compareVersions("1.2.0.0", "1.10.0.0")).to.be.lessThan(0);
|
|
49
|
+
expect(compareVersions("2.0", "2.0.0.0")).to.equal(0);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
@@ -6,5 +6,9 @@ export * from "./browser/browser-manager.js";
|
|
|
6
6
|
export * from "./browser/browser-setup-service.js";
|
|
7
7
|
export * from "./difftool/difftool-detector.js";
|
|
8
8
|
export * from "./difftool/difftool-setup-service.js";
|
|
9
|
+
export * from "./extension/webstore.js";
|
|
10
|
+
export * from "./extension/crx.js";
|
|
11
|
+
export * from "./extension/extension-installer.js";
|
|
12
|
+
export * from "./extension/extension-setup-service.js";
|
|
9
13
|
export * from "./os/tool-registry.js";
|
|
10
14
|
export * from "./os/detector-helper.js";
|
|
@@ -6,5 +6,9 @@ export * from "./browser/browser-manager.js";
|
|
|
6
6
|
export * from "./browser/browser-setup-service.js";
|
|
7
7
|
export * from "./difftool/difftool-detector.js";
|
|
8
8
|
export * from "./difftool/difftool-setup-service.js";
|
|
9
|
+
export * from "./extension/webstore.js";
|
|
10
|
+
export * from "./extension/crx.js";
|
|
11
|
+
export * from "./extension/extension-installer.js";
|
|
12
|
+
export * from "./extension/extension-setup-service.js";
|
|
9
13
|
export * from "./os/tool-registry.js";
|
|
10
14
|
export * from "./os/detector-helper.js";
|
|
@@ -6,6 +6,8 @@ import { BrowserManager } from "./browser/browser-manager.js";
|
|
|
6
6
|
import { BrowserSetupService } from "./browser/browser-setup-service.js";
|
|
7
7
|
import { DiffToolDetector } from "./difftool/difftool-detector.js";
|
|
8
8
|
import { DiffToolSetupService } from "./difftool/difftool-setup-service.js";
|
|
9
|
+
import { ExtensionInstaller, resolveChromeMajorVersion, } from "./extension/extension-installer.js";
|
|
10
|
+
import { ExtensionSetupService } from "./extension/extension-setup-service.js";
|
|
9
11
|
import { SetupContext } from "./setup-context.js";
|
|
10
12
|
import { SetupService } from "./setup-service.js";
|
|
11
13
|
export class SetupServiceFactory {
|
|
@@ -31,7 +33,9 @@ export class SetupServiceFactory {
|
|
|
31
33
|
const browserSetup = new BrowserSetupService(cli, cliConfig, userConfig, browserDetector, browserManager);
|
|
32
34
|
const diffDetector = new DiffToolDetector(platform, home);
|
|
33
35
|
const diffSetup = new DiffToolSetupService(cli, cliConfig, userConfig, diffDetector);
|
|
34
|
-
|
|
36
|
+
const extensionInstaller = new ExtensionInstaller(cacheDir, resolveChromeMajorVersion(userConfig.browserBuildId));
|
|
37
|
+
const extensionSetup = new ExtensionSetupService(cli, cliConfig, userConfig, extensionInstaller);
|
|
38
|
+
this.service = new SetupService(cli, cliConfig, userConfig, browserSetup, diffSetup, extensionSetup, this.context);
|
|
35
39
|
return this.service;
|
|
36
40
|
}
|
|
37
41
|
}
|
|
@@ -2,6 +2,7 @@ import { CliServiceInterface } from "../cli/index.js";
|
|
|
2
2
|
import { CliConfig, UserCliConfig } from "../../helpers/cli-config.js";
|
|
3
3
|
import { BrowserSetupService } from "./browser/browser-setup-service.js";
|
|
4
4
|
import { DiffToolSetupService } from "./difftool/difftool-setup-service.js";
|
|
5
|
+
import { ExtensionSetupService } from "./extension/extension-setup-service.js";
|
|
5
6
|
import { SetupContext } from "./setup-context.js";
|
|
6
7
|
export declare class SetupService {
|
|
7
8
|
private readonly cli;
|
|
@@ -9,12 +10,20 @@ export declare class SetupService {
|
|
|
9
10
|
private readonly userConfig;
|
|
10
11
|
private readonly browserSetup;
|
|
11
12
|
private readonly diffSetup;
|
|
13
|
+
private readonly extensionSetup;
|
|
12
14
|
private readonly context;
|
|
13
|
-
constructor(cli: CliServiceInterface, cliConfig: CliConfig, userConfig: UserCliConfig, browserSetup: BrowserSetupService, diffSetup: DiffToolSetupService, context: SetupContext);
|
|
14
|
-
/**
|
|
15
|
+
constructor(cli: CliServiceInterface, cliConfig: CliConfig, userConfig: UserCliConfig, browserSetup: BrowserSetupService, diffSetup: DiffToolSetupService, extensionSetup: ExtensionSetupService, context: SetupContext);
|
|
16
|
+
/**
|
|
17
|
+
* Runs the full first-run wizard (browser + diff tool + extensions) and marks
|
|
18
|
+
* it done.
|
|
19
|
+
*/
|
|
15
20
|
run(): Promise<void>;
|
|
16
21
|
/** True when the first-run wizard has already been completed once. */
|
|
17
22
|
isFirstRunCompleted(): boolean;
|
|
18
23
|
/** Update-reminder check for the browser, used by the init hook. */
|
|
19
24
|
remindBrowserUpdate(): Promise<void>;
|
|
25
|
+
/** Daily update-reminder check for managed extensions, used by the init hook. */
|
|
26
|
+
remindExtensionUpdates(): Promise<void>;
|
|
27
|
+
/** Extension management operations exposed for the `sk extension` commands. */
|
|
28
|
+
get extensions(): ExtensionSetupService;
|
|
20
29
|
}
|
|
@@ -4,24 +4,31 @@ export class SetupService {
|
|
|
4
4
|
userConfig;
|
|
5
5
|
browserSetup;
|
|
6
6
|
diffSetup;
|
|
7
|
+
extensionSetup;
|
|
7
8
|
context;
|
|
8
|
-
constructor(cli, cliConfig, userConfig, browserSetup, diffSetup, context) {
|
|
9
|
+
constructor(cli, cliConfig, userConfig, browserSetup, diffSetup, extensionSetup, context) {
|
|
9
10
|
this.cli = cli;
|
|
10
11
|
this.cliConfig = cliConfig;
|
|
11
12
|
this.userConfig = userConfig;
|
|
12
13
|
this.browserSetup = browserSetup;
|
|
13
14
|
this.diffSetup = diffSetup;
|
|
15
|
+
this.extensionSetup = extensionSetup;
|
|
14
16
|
this.context = context;
|
|
15
17
|
}
|
|
16
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Runs the full first-run wizard (browser + diff tool + extensions) and marks
|
|
20
|
+
* it done.
|
|
21
|
+
*/
|
|
17
22
|
async run() {
|
|
18
23
|
this.cli.spacer();
|
|
19
24
|
this.cli.write(this.cli.style.bold("Speed Kit CLI — setup"));
|
|
20
|
-
this.cli.comment("Configure the browser
|
|
25
|
+
this.cli.comment("Configure the browser, diff tool and extensions used for onboarding.");
|
|
21
26
|
this.cli.spacer();
|
|
22
27
|
await this.browserSetup.run();
|
|
23
28
|
this.cli.spacer();
|
|
24
29
|
await this.diffSetup.run();
|
|
30
|
+
this.cli.spacer();
|
|
31
|
+
await this.extensionSetup.run();
|
|
25
32
|
this.cliConfig.save({ firstRunCompleted: true });
|
|
26
33
|
this.cli.spacer();
|
|
27
34
|
this.cli.writeSuccess("Setup complete. Re-run any time with `sk config setup`.");
|
|
@@ -34,4 +41,12 @@ export class SetupService {
|
|
|
34
41
|
async remindBrowserUpdate() {
|
|
35
42
|
await this.browserSetup.remindIfDue();
|
|
36
43
|
}
|
|
44
|
+
/** Daily update-reminder check for managed extensions, used by the init hook. */
|
|
45
|
+
async remindExtensionUpdates() {
|
|
46
|
+
await this.extensionSetup.remindIfDue();
|
|
47
|
+
}
|
|
48
|
+
/** Extension management operations exposed for the `sk extension` commands. */
|
|
49
|
+
get extensions() {
|
|
50
|
+
return this.extensionSetup;
|
|
51
|
+
}
|
|
37
52
|
}
|
package/oclif.manifest.json
CHANGED
|
@@ -402,6 +402,25 @@
|
|
|
402
402
|
"hasDynamicHelp": false,
|
|
403
403
|
"multiple": false,
|
|
404
404
|
"type": "option"
|
|
405
|
+
},
|
|
406
|
+
"templates": {
|
|
407
|
+
"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)",
|
|
408
|
+
"name": "templates",
|
|
409
|
+
"hasDynamicHelp": false,
|
|
410
|
+
"multiple": false,
|
|
411
|
+
"type": "option"
|
|
412
|
+
},
|
|
413
|
+
"mode": {
|
|
414
|
+
"description": "Which config to scaffold: the full acceleration config, or the tracking-only pre-PoC config",
|
|
415
|
+
"name": "mode",
|
|
416
|
+
"default": "customer-config",
|
|
417
|
+
"hasDynamicHelp": false,
|
|
418
|
+
"multiple": false,
|
|
419
|
+
"options": [
|
|
420
|
+
"customer-config",
|
|
421
|
+
"pre-poc"
|
|
422
|
+
],
|
|
423
|
+
"type": "option"
|
|
405
424
|
}
|
|
406
425
|
},
|
|
407
426
|
"hasDynamicHelp": false,
|
|
@@ -999,7 +1018,118 @@
|
|
|
999
1018
|
"config",
|
|
1000
1019
|
"setup.js"
|
|
1001
1020
|
]
|
|
1021
|
+
},
|
|
1022
|
+
"extension:add": {
|
|
1023
|
+
"aliases": [],
|
|
1024
|
+
"args": {
|
|
1025
|
+
"ref": {
|
|
1026
|
+
"description": "Chrome Web Store link or extension id",
|
|
1027
|
+
"name": "ref",
|
|
1028
|
+
"required": false
|
|
1029
|
+
}
|
|
1030
|
+
},
|
|
1031
|
+
"description": "Install a Chrome extension into the onboarding browser by Web Store link or id",
|
|
1032
|
+
"examples": [
|
|
1033
|
+
"$ sk extension add fmkadmapgofadopljbjfkapdkoienihi",
|
|
1034
|
+
"$ sk extension add https://chromewebstore.google.com/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi",
|
|
1035
|
+
"$ sk extension add"
|
|
1036
|
+
],
|
|
1037
|
+
"flags": {},
|
|
1038
|
+
"hasDynamicHelp": false,
|
|
1039
|
+
"hiddenAliases": [],
|
|
1040
|
+
"id": "extension:add",
|
|
1041
|
+
"pluginAlias": "@speedkit/cli",
|
|
1042
|
+
"pluginName": "@speedkit/cli",
|
|
1043
|
+
"pluginType": "core",
|
|
1044
|
+
"strict": true,
|
|
1045
|
+
"enableJsonFlag": false,
|
|
1046
|
+
"isESM": true,
|
|
1047
|
+
"relativePath": [
|
|
1048
|
+
"dist",
|
|
1049
|
+
"commands",
|
|
1050
|
+
"extension",
|
|
1051
|
+
"add.js"
|
|
1052
|
+
]
|
|
1053
|
+
},
|
|
1054
|
+
"extension:list": {
|
|
1055
|
+
"aliases": [],
|
|
1056
|
+
"args": {},
|
|
1057
|
+
"description": "List Chrome extensions managed by the setup wizard",
|
|
1058
|
+
"examples": [
|
|
1059
|
+
"$ sk extension list"
|
|
1060
|
+
],
|
|
1061
|
+
"flags": {},
|
|
1062
|
+
"hasDynamicHelp": false,
|
|
1063
|
+
"hiddenAliases": [],
|
|
1064
|
+
"id": "extension:list",
|
|
1065
|
+
"pluginAlias": "@speedkit/cli",
|
|
1066
|
+
"pluginName": "@speedkit/cli",
|
|
1067
|
+
"pluginType": "core",
|
|
1068
|
+
"strict": true,
|
|
1069
|
+
"enableJsonFlag": false,
|
|
1070
|
+
"isESM": true,
|
|
1071
|
+
"relativePath": [
|
|
1072
|
+
"dist",
|
|
1073
|
+
"commands",
|
|
1074
|
+
"extension",
|
|
1075
|
+
"list.js"
|
|
1076
|
+
]
|
|
1077
|
+
},
|
|
1078
|
+
"extension:remove": {
|
|
1079
|
+
"aliases": [],
|
|
1080
|
+
"args": {
|
|
1081
|
+
"ref": {
|
|
1082
|
+
"description": "Chrome Web Store link or extension id",
|
|
1083
|
+
"name": "ref",
|
|
1084
|
+
"required": false
|
|
1085
|
+
}
|
|
1086
|
+
},
|
|
1087
|
+
"description": "Remove a managed Chrome extension",
|
|
1088
|
+
"examples": [
|
|
1089
|
+
"$ sk extension remove",
|
|
1090
|
+
"$ sk extension remove <id>"
|
|
1091
|
+
],
|
|
1092
|
+
"flags": {},
|
|
1093
|
+
"hasDynamicHelp": false,
|
|
1094
|
+
"hiddenAliases": [],
|
|
1095
|
+
"id": "extension:remove",
|
|
1096
|
+
"pluginAlias": "@speedkit/cli",
|
|
1097
|
+
"pluginName": "@speedkit/cli",
|
|
1098
|
+
"pluginType": "core",
|
|
1099
|
+
"strict": true,
|
|
1100
|
+
"enableJsonFlag": false,
|
|
1101
|
+
"isESM": true,
|
|
1102
|
+
"relativePath": [
|
|
1103
|
+
"dist",
|
|
1104
|
+
"commands",
|
|
1105
|
+
"extension",
|
|
1106
|
+
"remove.js"
|
|
1107
|
+
]
|
|
1108
|
+
},
|
|
1109
|
+
"extension:update": {
|
|
1110
|
+
"aliases": [],
|
|
1111
|
+
"args": {},
|
|
1112
|
+
"description": "Check managed Chrome extensions for updates and install them",
|
|
1113
|
+
"examples": [
|
|
1114
|
+
"$ sk extension update"
|
|
1115
|
+
],
|
|
1116
|
+
"flags": {},
|
|
1117
|
+
"hasDynamicHelp": false,
|
|
1118
|
+
"hiddenAliases": [],
|
|
1119
|
+
"id": "extension:update",
|
|
1120
|
+
"pluginAlias": "@speedkit/cli",
|
|
1121
|
+
"pluginName": "@speedkit/cli",
|
|
1122
|
+
"pluginType": "core",
|
|
1123
|
+
"strict": true,
|
|
1124
|
+
"enableJsonFlag": false,
|
|
1125
|
+
"isESM": true,
|
|
1126
|
+
"relativePath": [
|
|
1127
|
+
"dist",
|
|
1128
|
+
"commands",
|
|
1129
|
+
"extension",
|
|
1130
|
+
"update.js"
|
|
1131
|
+
]
|
|
1002
1132
|
}
|
|
1003
1133
|
},
|
|
1004
|
-
"version": "4.
|
|
1134
|
+
"version": "4.22.0"
|
|
1005
1135
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@speedkit/cli",
|
|
3
3
|
"description": "Speed Kit CLI",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.22.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Baqend.com",
|
|
7
7
|
"email": "info@baqend.com"
|
|
@@ -110,6 +110,7 @@
|
|
|
110
110
|
"iconv-lite": "^0.7.2",
|
|
111
111
|
"json2csv": "^6.0.0-alpha.2",
|
|
112
112
|
"node-fetch": "^3.3.2",
|
|
113
|
+
"nunjucks": "^3.2.4",
|
|
113
114
|
"nypm": "^0.6.6",
|
|
114
115
|
"puppeteer": "^24.41.0",
|
|
115
116
|
"puppeteer-extra": "^3.3.6",
|
|
@@ -128,6 +129,7 @@
|
|
|
128
129
|
"@oclif/test": "^4.1.18",
|
|
129
130
|
"@types/chai": "^4.3.10",
|
|
130
131
|
"@types/node": "^25.6.0",
|
|
132
|
+
"@types/nunjucks": "^3.2.6",
|
|
131
133
|
"@types/uuid": "^9.0.8",
|
|
132
134
|
"chai": "^4.4.1",
|
|
133
135
|
"copyfiles": "^2.4.1",
|
|
@@ -154,5 +156,10 @@
|
|
|
154
156
|
"*.ts": [
|
|
155
157
|
"eslint --fix --quiet"
|
|
156
158
|
]
|
|
159
|
+
},
|
|
160
|
+
"overrides": {
|
|
161
|
+
"nunjucks": {
|
|
162
|
+
"chokidar": "$chokidar"
|
|
163
|
+
}
|
|
157
164
|
}
|
|
158
165
|
}
|