@speedkit/cli 4.26.0 → 4.27.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 +10 -0
- package/README.md +186 -15
- package/dist/commands/auto-prewarm.d.ts +8 -1
- package/dist/commands/auto-prewarm.js +18 -7
- package/dist/commands/generate-pop-config.d.ts +1 -0
- package/dist/commands/generate-pop-config.js +9 -3
- package/dist/commands/prewarm.js +3 -1
- package/dist/commands/query/parameter.d.ts +26 -0
- package/dist/commands/query/parameter.js +27 -0
- package/dist/commands/query/prewarm.d.ts +31 -0
- package/dist/commands/query/prewarm.js +31 -0
- package/dist/helpers/clipboard.d.ts +19 -0
- package/dist/helpers/clipboard.js +70 -0
- package/dist/helpers/evaluate-speed-kit-config.d.ts +8 -18
- package/dist/helpers/evaluate-speed-kit-config.js +8 -6
- package/dist/helpers/evaluate-speed-kit-config.spec.d.ts +1 -0
- package/dist/helpers/evaluate-speed-kit-config.spec.js +78 -0
- package/dist/models/cli-parameters.d.ts +73 -0
- package/dist/models/cli-parameters.js +151 -0
- package/dist/models/cli-parameters.spec.d.ts +1 -0
- package/dist/models/cli-parameters.spec.js +47 -0
- package/dist/services/athena/athena-service.d.ts +2 -0
- package/dist/services/athena/athena-service.js +15 -4
- package/dist/services/athena/athena-service.spec.d.ts +1 -0
- package/dist/services/athena/athena-service.spec.js +74 -0
- package/dist/services/deploy/handler/install-resource-handler.js +3 -4
- package/dist/services/onboarding/onboarding-service-factory.js +2 -2
- package/dist/services/pop-config/pop-config-service.d.ts +8 -1
- package/dist/services/pop-config/pop-config-service.js +16 -28
- package/dist/services/prewarm/assets/asset-api-client.d.ts +1 -1
- package/dist/services/prewarm/assets/asset-api-client.js +5 -4
- package/dist/services/prewarm/auto-pre-warm-factory.d.ts +12 -2
- package/dist/services/prewarm/auto-pre-warm-factory.js +20 -6
- package/dist/services/prewarm/csv-reader.d.ts +21 -2
- package/dist/services/prewarm/csv-reader.js +71 -9
- package/dist/services/prewarm/csv-reader.spec.d.ts +1 -0
- package/dist/services/prewarm/csv-reader.spec.js +75 -0
- package/dist/services/prewarm/index.d.ts +1 -0
- package/dist/services/prewarm/index.js +1 -0
- package/dist/services/prewarm/pre-warm-factory.d.ts +0 -2
- package/dist/services/prewarm/pre-warm-factory.js +8 -11
- package/dist/services/prewarm/pre-warm-model.d.ts +14 -1
- package/dist/services/prewarm/pre-warm-model.js +0 -1
- package/dist/services/prewarm/pre-warm-service.d.ts +9 -4
- package/dist/services/prewarm/pre-warm-service.js +18 -14
- package/dist/services/prewarm/prewarm-targets.d.ts +12 -0
- package/dist/services/prewarm/prewarm-targets.js +18 -0
- package/dist/services/prewarm/prewarm-targets.spec.d.ts +1 -0
- package/dist/services/prewarm/prewarm-targets.spec.js +29 -0
- package/dist/services/query-builder/error/match-matches-nothing-error.d.ts +11 -0
- package/dist/services/query-builder/error/match-matches-nothing-error.js +17 -0
- package/dist/services/query-builder/queries/device.d.ts +21 -0
- package/dist/services/query-builder/queries/device.js +26 -0
- package/dist/services/query-builder/queries/index.d.ts +6 -0
- package/dist/services/query-builder/queries/index.js +6 -0
- package/dist/services/query-builder/queries/page-filter.d.ts +39 -0
- package/dist/services/query-builder/queries/page-filter.js +135 -0
- package/dist/services/query-builder/queries/page-source.d.ts +30 -0
- package/dist/services/query-builder/queries/page-source.js +79 -0
- package/dist/services/query-builder/queries/parameter-query.d.ts +14 -0
- package/dist/services/query-builder/queries/parameter-query.js +142 -0
- package/dist/services/query-builder/queries/pops-query.d.ts +27 -0
- package/dist/services/query-builder/queries/pops-query.js +65 -0
- package/dist/services/query-builder/queries/prewarm-query.d.ts +18 -0
- package/dist/services/query-builder/queries/prewarm-query.js +227 -0
- package/dist/services/query-builder/queries/query-model.d.ts +97 -0
- package/dist/services/query-builder/queries/query-model.js +19 -0
- package/dist/services/query-builder/queries/spec/golden-configs.d.ts +18 -0
- package/dist/services/query-builder/queries/spec/golden-configs.js +116 -0
- package/dist/services/query-builder/queries/spec/golden.spec.d.ts +1 -0
- package/dist/services/query-builder/queries/spec/golden.spec.js +161 -0
- package/dist/services/query-builder/queries/spec/pops-query.spec.d.ts +1 -0
- package/dist/services/query-builder/queries/spec/pops-query.spec.js +58 -0
- package/dist/services/query-builder/queries/spec/queries.spec.d.ts +1 -0
- package/dist/services/query-builder/queries/spec/queries.spec.js +312 -0
- package/dist/services/query-builder/queries/spec/reported-bugs.spec.d.ts +1 -0
- package/dist/services/query-builder/queries/spec/reported-bugs.spec.js +86 -0
- package/dist/services/query-builder/query-builder-factory.d.ts +2 -2
- package/dist/services/query-builder/query-builder-factory.js +35 -7
- package/dist/services/query-builder/query-builder-model.d.ts +31 -19
- package/dist/services/query-builder/query-builder-model.js +5 -5
- package/dist/services/query-builder/query-builder-service.d.ts +26 -5
- package/dist/services/query-builder/query-builder-service.js +157 -44
- package/dist/services/query-builder/query-command.d.ts +26 -0
- package/dist/services/query-builder/query-command.js +35 -0
- package/dist/services/query-builder/rules/index.d.ts +8 -0
- package/dist/services/query-builder/rules/index.js +8 -0
- package/dist/services/query-builder/rules/match-pattern.d.ts +51 -0
- package/dist/services/query-builder/rules/match-pattern.js +141 -0
- package/dist/services/query-builder/rules/pattern-language.d.ts +59 -0
- package/dist/services/query-builder/rules/pattern-language.js +159 -0
- package/dist/services/query-builder/rules/rule-model.d.ts +107 -0
- package/dist/services/query-builder/rules/rule-model.js +54 -0
- package/dist/services/query-builder/rules/rule-parser.d.ts +33 -0
- package/dist/services/query-builder/rules/rule-parser.js +189 -0
- package/dist/services/query-builder/rules/rule-reducer.d.ts +71 -0
- package/dist/services/query-builder/rules/rule-reducer.js +383 -0
- package/dist/services/query-builder/rules/rule-relevance.d.ts +43 -0
- package/dist/services/query-builder/rules/rule-relevance.js +69 -0
- package/dist/services/query-builder/rules/rule-to-sql.d.ts +51 -0
- package/dist/services/query-builder/rules/rule-to-sql.js +75 -0
- package/dist/services/query-builder/rules/spec/pattern-language.spec.d.ts +1 -0
- package/dist/services/query-builder/rules/spec/pattern-language.spec.js +90 -0
- package/dist/services/query-builder/rules/spec/rule-parser.spec.d.ts +1 -0
- package/dist/services/query-builder/rules/spec/rule-parser.spec.js +150 -0
- package/dist/services/query-builder/rules/spec/rule-reducer.spec.d.ts +1 -0
- package/dist/services/query-builder/rules/spec/rule-reducer.spec.js +169 -0
- package/dist/services/query-builder/rules/spec/rule-relevance.spec.d.ts +1 -0
- package/dist/services/query-builder/rules/spec/rule-relevance.spec.js +88 -0
- package/dist/services/query-builder/rules/spec/rule-to-sql.spec.d.ts +1 -0
- package/dist/services/query-builder/rules/spec/rule-to-sql.spec.js +110 -0
- package/dist/services/query-builder/rules/spec/runtime-semantics.spec.d.ts +1 -0
- package/dist/services/query-builder/rules/spec/runtime-semantics.spec.js +55 -0
- package/dist/services/query-builder/rules/spec/strip-parameters.spec.d.ts +1 -0
- package/dist/services/query-builder/rules/spec/strip-parameters.spec.js +85 -0
- package/dist/services/query-builder/rules/strip-parameters.d.ts +39 -0
- package/dist/services/query-builder/rules/strip-parameters.js +197 -0
- package/dist/services/query-builder/sql/expression.d.ts +73 -0
- package/dist/services/query-builder/sql/expression.js +133 -0
- package/dist/services/query-builder/sql/format.d.ts +14 -0
- package/dist/services/query-builder/sql/format.js +48 -0
- package/dist/services/query-builder/sql/index.d.ts +4 -0
- package/dist/services/query-builder/sql/index.js +4 -0
- package/dist/services/query-builder/sql/predicate.d.ts +66 -0
- package/dist/services/query-builder/sql/predicate.js +124 -0
- package/dist/services/query-builder/sql/regex.d.ts +28 -0
- package/dist/services/query-builder/sql/regex.js +81 -0
- package/dist/services/query-builder/sql/spec/expression.spec.d.ts +1 -0
- package/dist/services/query-builder/sql/spec/expression.spec.js +75 -0
- package/dist/services/query-builder/sql/spec/format.spec.d.ts +1 -0
- package/dist/services/query-builder/sql/spec/format.spec.js +37 -0
- package/dist/services/query-builder/sql/spec/predicate.spec.d.ts +1 -0
- package/dist/services/query-builder/sql/spec/predicate.spec.js +78 -0
- package/dist/services/query-builder/sql/spec/regex.spec.d.ts +1 -0
- package/dist/services/query-builder/sql/spec/regex.spec.js +62 -0
- package/oclif.manifest.json +350 -100
- package/package.json +11 -2
- package/dist/commands/build-parameter-query.d.ts +0 -14
- package/dist/commands/build-parameter-query.js +0 -25
- package/dist/commands/build-prewarm-query.d.ts +0 -16
- package/dist/commands/build-prewarm-query.js +0 -37
- package/dist/helpers/build-query-helper.d.ts +0 -32
- package/dist/helpers/build-query-helper.js +0 -223
- package/dist/helpers/get-parsed-config.d.ts +0 -15
- package/dist/helpers/get-parsed-config.js +0 -62
- package/dist/services/onboarding/dashboard/parameter-query-builder.d.ts +0 -8
- package/dist/services/onboarding/dashboard/parameter-query-builder.js +0 -63
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { expect } from "chai";
|
|
2
|
+
import { describe, it } from "mocha";
|
|
3
|
+
import { and, FALSE, isFalse, isTrue, leaf, not, or, predicateKey, TRUE, } from "../predicate.js";
|
|
4
|
+
const a = leaf("a");
|
|
5
|
+
const b = leaf("b");
|
|
6
|
+
const c = leaf("c");
|
|
7
|
+
describe("predicate and", () => {
|
|
8
|
+
it("should be true without operands", () => {
|
|
9
|
+
expect(isTrue(and())).to.equal(true);
|
|
10
|
+
});
|
|
11
|
+
it("should return the only operand unwrapped", () => {
|
|
12
|
+
expect(and(a)).to.deep.equal(a);
|
|
13
|
+
});
|
|
14
|
+
it("should drop true operands", () => {
|
|
15
|
+
expect(and(a, TRUE, b)).to.deep.equal({
|
|
16
|
+
children: [a, b],
|
|
17
|
+
kind: "and",
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
it("should collapse to false on a false operand", () => {
|
|
21
|
+
expect(isFalse(and(a, FALSE))).to.equal(true);
|
|
22
|
+
});
|
|
23
|
+
it("should flatten nested conjunctions", () => {
|
|
24
|
+
expect(and(a, and(b, c))).to.deep.equal({
|
|
25
|
+
children: [a, b, c],
|
|
26
|
+
kind: "and",
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
it("should remove duplicate operands", () => {
|
|
30
|
+
expect(and(a, b, leaf("a"))).to.deep.equal({
|
|
31
|
+
children: [a, b],
|
|
32
|
+
kind: "and",
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
it("should collapse to false on contradicting operands", () => {
|
|
36
|
+
expect(isFalse(and(a, b, not(leaf("a"))))).to.equal(true);
|
|
37
|
+
});
|
|
38
|
+
it("should keep a disjunction as an operand", () => {
|
|
39
|
+
expect(and(a, or(b, c))).to.deep.equal({
|
|
40
|
+
children: [a, { children: [b, c], kind: "or" }],
|
|
41
|
+
kind: "and",
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe("predicate or", () => {
|
|
46
|
+
it("should be false without operands", () => {
|
|
47
|
+
expect(isFalse(or())).to.equal(true);
|
|
48
|
+
});
|
|
49
|
+
it("should drop false operands", () => {
|
|
50
|
+
expect(or(a, FALSE, b)).to.deep.equal({
|
|
51
|
+
children: [a, b],
|
|
52
|
+
kind: "or",
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
it("should collapse to true on a true operand", () => {
|
|
56
|
+
expect(isTrue(or(a, TRUE))).to.equal(true);
|
|
57
|
+
});
|
|
58
|
+
it("should collapse to true on complementary operands", () => {
|
|
59
|
+
expect(isTrue(or(a, not(leaf("a"))))).to.equal(true);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe("predicate not", () => {
|
|
63
|
+
it("should collapse a double negation", () => {
|
|
64
|
+
expect(not(not(a))).to.deep.equal(a);
|
|
65
|
+
});
|
|
66
|
+
it("should negate the constants", () => {
|
|
67
|
+
expect(isFalse(not(TRUE))).to.equal(true);
|
|
68
|
+
expect(isTrue(not(FALSE))).to.equal(true);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe("predicateKey", () => {
|
|
72
|
+
it("should not depend on the operand order", () => {
|
|
73
|
+
expect(predicateKey(and(a, b))).to.equal(predicateKey(and(b, a)));
|
|
74
|
+
});
|
|
75
|
+
it("should differ between and and or", () => {
|
|
76
|
+
expect(predicateKey(and(a, b))).to.not.equal(predicateKey(or(a, b)));
|
|
77
|
+
});
|
|
78
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { expect } from "chai";
|
|
2
|
+
import { describe, it } from "mocha";
|
|
3
|
+
import { escapeRegexLiteral, toAthenaRegex } from "../regex.js";
|
|
4
|
+
describe("toAthenaRegex", () => {
|
|
5
|
+
it("should keep a plain pattern", () => {
|
|
6
|
+
expect(toAthenaRegex(/^\/products\/\d+$/).pattern).to.equal(String.raw `^/products/\d+$`);
|
|
7
|
+
});
|
|
8
|
+
it("should move the i flag into the pattern", () => {
|
|
9
|
+
expect(toAthenaRegex(/^\/p\//i).pattern).to.equal(String.raw `(?i)^/p/`);
|
|
10
|
+
});
|
|
11
|
+
it("should combine the flags in a single group", () => {
|
|
12
|
+
expect(toAthenaRegex(/a.b/ims).pattern).to.equal("(?ims)a.b");
|
|
13
|
+
});
|
|
14
|
+
it("should ignore flags without a pattern equivalent", () => {
|
|
15
|
+
expect(toAthenaRegex(/abc/g).pattern).to.equal("abc");
|
|
16
|
+
});
|
|
17
|
+
it("should unescape a slash", () => {
|
|
18
|
+
expect(toAthenaRegex(/\/de\/shop/i).pattern).to.equal("(?i)/de/shop");
|
|
19
|
+
});
|
|
20
|
+
it("should keep an escaped backslash", () => {
|
|
21
|
+
expect(toAthenaRegex(/a\\b/).pattern).to.equal(String.raw `a\\b`);
|
|
22
|
+
});
|
|
23
|
+
it("should not warn about a pattern it fully supports", () => {
|
|
24
|
+
expect(toAthenaRegex(/^\/(shop|store)\/[a-z-]+$/i).warnings).to.deep.equal([]);
|
|
25
|
+
});
|
|
26
|
+
it("should keep lookahead without a warning", () => {
|
|
27
|
+
const { pattern, warnings } = toAthenaRegex(/^[^?]*\/(\?|$)/i);
|
|
28
|
+
expect(pattern).to.equal(String.raw `(?i)^[^?]*/(\?|$)`);
|
|
29
|
+
expect(warnings).to.deep.equal([]);
|
|
30
|
+
});
|
|
31
|
+
it("should warn about lookbehind", () => {
|
|
32
|
+
const { warnings } = toAthenaRegex(/(?<=\/de)\/shop/i);
|
|
33
|
+
expect(warnings).to.have.lengthOf(1);
|
|
34
|
+
expect(warnings[0]).to.contain("lookbehind");
|
|
35
|
+
});
|
|
36
|
+
it("should warn about a back reference", () => {
|
|
37
|
+
const { warnings } = toAthenaRegex(/(a)\1/);
|
|
38
|
+
expect(warnings).to.have.lengthOf(1);
|
|
39
|
+
expect(warnings[0]).to.contain("back reference");
|
|
40
|
+
});
|
|
41
|
+
it("should not read a back reference inside a character class", () => {
|
|
42
|
+
// Written through the constructor because TypeScript rejects the literal.
|
|
43
|
+
const inClass = new RegExp(String.raw `[\1]`);
|
|
44
|
+
expect(toAthenaRegex(inClass).warnings).to.deep.equal([]);
|
|
45
|
+
});
|
|
46
|
+
it("should warn about a unicode property escape", () => {
|
|
47
|
+
const { warnings } = toAthenaRegex(/\p{Letter}/u);
|
|
48
|
+
expect(warnings).to.have.lengthOf(1);
|
|
49
|
+
expect(warnings[0]).to.contain("unicode property");
|
|
50
|
+
});
|
|
51
|
+
it("should report each construct once", () => {
|
|
52
|
+
expect(toAthenaRegex(/(a)\1(b)\2/).warnings).to.have.lengthOf(1);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe("escapeRegexLiteral", () => {
|
|
56
|
+
it("should escape the regex metacharacters", () => {
|
|
57
|
+
expect(escapeRegexLiteral("utm_source?")).to.equal(String.raw `utm_source\?`);
|
|
58
|
+
});
|
|
59
|
+
it("should leave a plain parameter name alone", () => {
|
|
60
|
+
expect(escapeRegexLiteral("gclid")).to.equal("gclid");
|
|
61
|
+
});
|
|
62
|
+
});
|
package/oclif.manifest.json
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"examples": [
|
|
14
14
|
"$ sk auto-prewarm <customerPath> -c <configName>",
|
|
15
15
|
"$ sk auto-prewarm customers/decathlon.de -c production",
|
|
16
|
+
"$ sk auto-prewarm customers/decathlon.de --device desktop,mobile",
|
|
16
17
|
"$ sk auto-prewarm customers/decathlon.de -v MOBILE,DESKTOP"
|
|
17
18
|
],
|
|
18
19
|
"flags": {
|
|
@@ -26,18 +27,82 @@
|
|
|
26
27
|
"multiple": false,
|
|
27
28
|
"type": "option"
|
|
28
29
|
},
|
|
30
|
+
"days": {
|
|
31
|
+
"char": "d",
|
|
32
|
+
"description": "Number of days the query looks back",
|
|
33
|
+
"name": "days",
|
|
34
|
+
"required": false,
|
|
35
|
+
"hasDynamicHelp": false,
|
|
36
|
+
"multiple": false,
|
|
37
|
+
"type": "option"
|
|
38
|
+
},
|
|
39
|
+
"excludeNoindex": {
|
|
40
|
+
"description": "Exclude page impressions of pages marked noindex",
|
|
41
|
+
"name": "excludeNoindex",
|
|
42
|
+
"allowNo": false,
|
|
43
|
+
"type": "boolean"
|
|
44
|
+
},
|
|
45
|
+
"excludeSuspicious": {
|
|
46
|
+
"description": "Exclude page impressions Speed Kit classified as suspicious",
|
|
47
|
+
"name": "excludeSuspicious",
|
|
48
|
+
"allowNo": false,
|
|
49
|
+
"type": "boolean"
|
|
50
|
+
},
|
|
51
|
+
"explain": {
|
|
52
|
+
"description": "Account for every rule the query leaves out, reduces or approximates",
|
|
53
|
+
"name": "explain",
|
|
54
|
+
"allowNo": false,
|
|
55
|
+
"type": "boolean"
|
|
56
|
+
},
|
|
57
|
+
"hardNavigationsOnly": {
|
|
58
|
+
"description": "Exclude soft (SPA) navigations",
|
|
59
|
+
"name": "hardNavigationsOnly",
|
|
60
|
+
"allowNo": false,
|
|
61
|
+
"type": "boolean"
|
|
62
|
+
},
|
|
63
|
+
"match": {
|
|
64
|
+
"description": "Keep only urls whose path matches this regular expression, e.g. '^/p/'. The path is matched with its query string, the way a version 1 pathname rule matches it, so '[?&]size=' works too. Repeat the flag to keep the urls matching any of several patterns, and start a pattern with (?i) to match case-insensitively",
|
|
65
|
+
"name": "match",
|
|
66
|
+
"required": false,
|
|
67
|
+
"hasDynamicHelp": false,
|
|
68
|
+
"multiple": true,
|
|
69
|
+
"type": "option"
|
|
70
|
+
},
|
|
71
|
+
"device": {
|
|
72
|
+
"description": "Split the list by device class, so every url is warmed in the variations it was actually requested in. A class not named is left out",
|
|
73
|
+
"exclusive": [
|
|
74
|
+
"variation"
|
|
75
|
+
],
|
|
76
|
+
"name": "device",
|
|
77
|
+
"required": false,
|
|
78
|
+
"delimiter": ",",
|
|
79
|
+
"hasDynamicHelp": false,
|
|
80
|
+
"multiple": true,
|
|
81
|
+
"options": [
|
|
82
|
+
"desktop",
|
|
83
|
+
"mobile",
|
|
84
|
+
"tablet"
|
|
85
|
+
],
|
|
86
|
+
"type": "option"
|
|
87
|
+
},
|
|
29
88
|
"variation": {
|
|
30
89
|
"char": "v",
|
|
90
|
+
"description": "Pair every url of the list with each of these variations. For the custom variations no traffic can reveal, e.g. 'desktop-pdp-a,mobile-pdp-a'",
|
|
91
|
+
"exclusive": [
|
|
92
|
+
"device"
|
|
93
|
+
],
|
|
31
94
|
"name": "variation",
|
|
32
|
-
"
|
|
95
|
+
"required": false,
|
|
96
|
+
"delimiter": ",",
|
|
33
97
|
"hasDynamicHelp": false,
|
|
34
|
-
"multiple":
|
|
98
|
+
"multiple": true,
|
|
35
99
|
"type": "option"
|
|
36
100
|
},
|
|
37
101
|
"variationPath": {
|
|
38
102
|
"char": "p",
|
|
39
103
|
"description": "path to variations.csv",
|
|
40
104
|
"exclusive": [
|
|
105
|
+
"device",
|
|
41
106
|
"variation"
|
|
42
107
|
],
|
|
43
108
|
"name": "variationPath",
|
|
@@ -81,102 +146,6 @@
|
|
|
81
146
|
"auto-prewarm.js"
|
|
82
147
|
]
|
|
83
148
|
},
|
|
84
|
-
"build-parameter-query": {
|
|
85
|
-
"aliases": [],
|
|
86
|
-
"args": {
|
|
87
|
-
"customerPath": {
|
|
88
|
-
"description": "The customer config path",
|
|
89
|
-
"name": "customerPath",
|
|
90
|
-
"required": true
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
"description": "Build a parameter query that can be executed in Athena",
|
|
94
|
-
"examples": [
|
|
95
|
-
"$ sk build-parameter-query <customerPath> -c <configName>",
|
|
96
|
-
"$ sk build-parameter-query customers/decathlon.de -c production"
|
|
97
|
-
],
|
|
98
|
-
"flags": {
|
|
99
|
-
"configName": {
|
|
100
|
-
"char": "c",
|
|
101
|
-
"description": "The costumer config name",
|
|
102
|
-
"name": "configName",
|
|
103
|
-
"required": false,
|
|
104
|
-
"default": "production",
|
|
105
|
-
"hasDynamicHelp": false,
|
|
106
|
-
"multiple": false,
|
|
107
|
-
"type": "option"
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
"hasDynamicHelp": false,
|
|
111
|
-
"hiddenAliases": [],
|
|
112
|
-
"id": "build-parameter-query",
|
|
113
|
-
"pluginAlias": "@speedkit/cli",
|
|
114
|
-
"pluginName": "@speedkit/cli",
|
|
115
|
-
"pluginType": "core",
|
|
116
|
-
"strict": true,
|
|
117
|
-
"enableJsonFlag": false,
|
|
118
|
-
"isESM": true,
|
|
119
|
-
"relativePath": [
|
|
120
|
-
"dist",
|
|
121
|
-
"commands",
|
|
122
|
-
"build-parameter-query.js"
|
|
123
|
-
]
|
|
124
|
-
},
|
|
125
|
-
"build-prewarm-query": {
|
|
126
|
-
"aliases": [],
|
|
127
|
-
"args": {
|
|
128
|
-
"customerPath": {
|
|
129
|
-
"description": "The customer config path",
|
|
130
|
-
"name": "customerPath",
|
|
131
|
-
"required": true
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
"description": "Build a prewarm query that can be executed in Athena",
|
|
135
|
-
"examples": [
|
|
136
|
-
"$ sk build-prewarm-query <customerPath> -c <configName>",
|
|
137
|
-
"$ sk build-prewarm-query customers/decathlon.de -c production"
|
|
138
|
-
],
|
|
139
|
-
"flags": {
|
|
140
|
-
"configName": {
|
|
141
|
-
"char": "c",
|
|
142
|
-
"description": "The costumer config name",
|
|
143
|
-
"name": "configName",
|
|
144
|
-
"required": false,
|
|
145
|
-
"default": "production",
|
|
146
|
-
"hasDynamicHelp": false,
|
|
147
|
-
"multiple": false,
|
|
148
|
-
"type": "option"
|
|
149
|
-
},
|
|
150
|
-
"quiet": {
|
|
151
|
-
"char": "q",
|
|
152
|
-
"description": "Output only the raw query without clipboard copy or styling",
|
|
153
|
-
"name": "quiet",
|
|
154
|
-
"allowNo": false,
|
|
155
|
-
"type": "boolean"
|
|
156
|
-
},
|
|
157
|
-
"execute": {
|
|
158
|
-
"char": "e",
|
|
159
|
-
"description": "Execute the query directly and write the result to a <app>-<date>-prewarm.csv file",
|
|
160
|
-
"name": "execute",
|
|
161
|
-
"allowNo": false,
|
|
162
|
-
"type": "boolean"
|
|
163
|
-
}
|
|
164
|
-
},
|
|
165
|
-
"hasDynamicHelp": false,
|
|
166
|
-
"hiddenAliases": [],
|
|
167
|
-
"id": "build-prewarm-query",
|
|
168
|
-
"pluginAlias": "@speedkit/cli",
|
|
169
|
-
"pluginName": "@speedkit/cli",
|
|
170
|
-
"pluginType": "core",
|
|
171
|
-
"strict": true,
|
|
172
|
-
"enableJsonFlag": false,
|
|
173
|
-
"isESM": true,
|
|
174
|
-
"relativePath": [
|
|
175
|
-
"dist",
|
|
176
|
-
"commands",
|
|
177
|
-
"build-prewarm-query.js"
|
|
178
|
-
]
|
|
179
|
-
},
|
|
180
149
|
"deploy": {
|
|
181
150
|
"aliases": [],
|
|
182
151
|
"args": {
|
|
@@ -458,6 +427,14 @@
|
|
|
458
427
|
"$ sk generate-pop-config --coverage 95 --pop-limit 6 --traffic-share 2 --deploy appName"
|
|
459
428
|
],
|
|
460
429
|
"flags": {
|
|
430
|
+
"days": {
|
|
431
|
+
"description": "Number of days the query looks back",
|
|
432
|
+
"name": "days",
|
|
433
|
+
"required": false,
|
|
434
|
+
"hasDynamicHelp": false,
|
|
435
|
+
"multiple": false,
|
|
436
|
+
"type": "option"
|
|
437
|
+
},
|
|
461
438
|
"coverage": {
|
|
462
439
|
"char": "c",
|
|
463
440
|
"description": "The percentage of traffic which should be covered through prewarming.",
|
|
@@ -768,8 +745,8 @@
|
|
|
768
745
|
"flags": {
|
|
769
746
|
"variation": {
|
|
770
747
|
"char": "v",
|
|
748
|
+
"description": "Warm every url of the list in each of these variations, e.g. 'desktop,mobile'. Ignored for a list that names a variation itself",
|
|
771
749
|
"name": "variation",
|
|
772
|
-
"default": "default",
|
|
773
750
|
"hasDynamicHelp": false,
|
|
774
751
|
"multiple": false,
|
|
775
752
|
"type": "option"
|
|
@@ -1312,7 +1289,280 @@
|
|
|
1312
1289
|
"extension",
|
|
1313
1290
|
"update.js"
|
|
1314
1291
|
]
|
|
1292
|
+
},
|
|
1293
|
+
"query:parameter": {
|
|
1294
|
+
"aliases": [
|
|
1295
|
+
"build-parameter-query"
|
|
1296
|
+
],
|
|
1297
|
+
"args": {
|
|
1298
|
+
"customerPath": {
|
|
1299
|
+
"description": "The customer config path",
|
|
1300
|
+
"name": "customerPath",
|
|
1301
|
+
"required": true
|
|
1302
|
+
}
|
|
1303
|
+
},
|
|
1304
|
+
"deprecateAliases": true,
|
|
1305
|
+
"description": "Build a parameter query that can be executed in Athena",
|
|
1306
|
+
"examples": [
|
|
1307
|
+
"$ sk query parameter <customerPath> -c <configName>",
|
|
1308
|
+
"$ sk query parameter customers/decathlon.de -c production",
|
|
1309
|
+
"$ sk query parameter customers/decathlon.de --explain"
|
|
1310
|
+
],
|
|
1311
|
+
"flags": {
|
|
1312
|
+
"configName": {
|
|
1313
|
+
"char": "c",
|
|
1314
|
+
"description": "The costumer config name",
|
|
1315
|
+
"name": "configName",
|
|
1316
|
+
"required": false,
|
|
1317
|
+
"default": "production",
|
|
1318
|
+
"hasDynamicHelp": false,
|
|
1319
|
+
"multiple": false,
|
|
1320
|
+
"type": "option"
|
|
1321
|
+
},
|
|
1322
|
+
"days": {
|
|
1323
|
+
"char": "d",
|
|
1324
|
+
"description": "Number of days the query looks back",
|
|
1325
|
+
"name": "days",
|
|
1326
|
+
"required": false,
|
|
1327
|
+
"hasDynamicHelp": false,
|
|
1328
|
+
"multiple": false,
|
|
1329
|
+
"type": "option"
|
|
1330
|
+
},
|
|
1331
|
+
"excludeNoindex": {
|
|
1332
|
+
"description": "Exclude page impressions of pages marked noindex",
|
|
1333
|
+
"name": "excludeNoindex",
|
|
1334
|
+
"allowNo": false,
|
|
1335
|
+
"type": "boolean"
|
|
1336
|
+
},
|
|
1337
|
+
"excludeSuspicious": {
|
|
1338
|
+
"description": "Exclude page impressions Speed Kit classified as suspicious",
|
|
1339
|
+
"name": "excludeSuspicious",
|
|
1340
|
+
"allowNo": false,
|
|
1341
|
+
"type": "boolean"
|
|
1342
|
+
},
|
|
1343
|
+
"explain": {
|
|
1344
|
+
"description": "Account for every rule the query leaves out, reduces or approximates",
|
|
1345
|
+
"name": "explain",
|
|
1346
|
+
"allowNo": false,
|
|
1347
|
+
"type": "boolean"
|
|
1348
|
+
},
|
|
1349
|
+
"hardNavigationsOnly": {
|
|
1350
|
+
"description": "Exclude soft (SPA) navigations",
|
|
1351
|
+
"name": "hardNavigationsOnly",
|
|
1352
|
+
"allowNo": false,
|
|
1353
|
+
"type": "boolean"
|
|
1354
|
+
},
|
|
1355
|
+
"execute": {
|
|
1356
|
+
"char": "e",
|
|
1357
|
+
"description": "Execute the query directly and write the result to a <app>-<date>-<query>.csv file",
|
|
1358
|
+
"name": "execute",
|
|
1359
|
+
"allowNo": false,
|
|
1360
|
+
"type": "boolean"
|
|
1361
|
+
},
|
|
1362
|
+
"quiet": {
|
|
1363
|
+
"char": "q",
|
|
1364
|
+
"description": "Output only the raw query without clipboard copy or styling",
|
|
1365
|
+
"name": "quiet",
|
|
1366
|
+
"allowNo": false,
|
|
1367
|
+
"type": "boolean"
|
|
1368
|
+
},
|
|
1369
|
+
"bySet": {
|
|
1370
|
+
"description": "Rank whole sets of parameters instead of single parameters, to see which ones travel together",
|
|
1371
|
+
"name": "bySet",
|
|
1372
|
+
"allowNo": false,
|
|
1373
|
+
"type": "boolean"
|
|
1374
|
+
},
|
|
1375
|
+
"minImpressions": {
|
|
1376
|
+
"description": "Leave out parameters seen on fewer page impressions than this",
|
|
1377
|
+
"name": "minImpressions",
|
|
1378
|
+
"required": false,
|
|
1379
|
+
"hasDynamicHelp": false,
|
|
1380
|
+
"multiple": false,
|
|
1381
|
+
"type": "option"
|
|
1382
|
+
}
|
|
1383
|
+
},
|
|
1384
|
+
"hasDynamicHelp": false,
|
|
1385
|
+
"hiddenAliases": [],
|
|
1386
|
+
"id": "query:parameter",
|
|
1387
|
+
"pluginAlias": "@speedkit/cli",
|
|
1388
|
+
"pluginName": "@speedkit/cli",
|
|
1389
|
+
"pluginType": "core",
|
|
1390
|
+
"strict": true,
|
|
1391
|
+
"enableJsonFlag": false,
|
|
1392
|
+
"isESM": true,
|
|
1393
|
+
"relativePath": [
|
|
1394
|
+
"dist",
|
|
1395
|
+
"commands",
|
|
1396
|
+
"query",
|
|
1397
|
+
"parameter.js"
|
|
1398
|
+
]
|
|
1399
|
+
},
|
|
1400
|
+
"query:prewarm": {
|
|
1401
|
+
"aliases": [
|
|
1402
|
+
"build-prewarm-query"
|
|
1403
|
+
],
|
|
1404
|
+
"args": {
|
|
1405
|
+
"customerPath": {
|
|
1406
|
+
"description": "The customer config path",
|
|
1407
|
+
"name": "customerPath",
|
|
1408
|
+
"required": true
|
|
1409
|
+
}
|
|
1410
|
+
},
|
|
1411
|
+
"deprecateAliases": true,
|
|
1412
|
+
"description": "Build a prewarm query that can be executed in Athena",
|
|
1413
|
+
"examples": [
|
|
1414
|
+
"$ sk query prewarm <customerPath> -c <configName>",
|
|
1415
|
+
"$ sk query prewarm customers/decathlon.de -c production",
|
|
1416
|
+
"$ sk query prewarm customers/decathlon.de --explain",
|
|
1417
|
+
"$ sk query prewarm customers/decathlon.de --match '^/p/'",
|
|
1418
|
+
"$ sk query prewarm customers/decathlon.de --device desktop,mobile",
|
|
1419
|
+
"$ sk query prewarm customers/decathlon.de -v MOBILE,DESKTOP",
|
|
1420
|
+
"$ sk query prewarm customers/decathlon.de --count"
|
|
1421
|
+
],
|
|
1422
|
+
"flags": {
|
|
1423
|
+
"configName": {
|
|
1424
|
+
"char": "c",
|
|
1425
|
+
"description": "The costumer config name",
|
|
1426
|
+
"name": "configName",
|
|
1427
|
+
"required": false,
|
|
1428
|
+
"default": "production",
|
|
1429
|
+
"hasDynamicHelp": false,
|
|
1430
|
+
"multiple": false,
|
|
1431
|
+
"type": "option"
|
|
1432
|
+
},
|
|
1433
|
+
"days": {
|
|
1434
|
+
"char": "d",
|
|
1435
|
+
"description": "Number of days the query looks back",
|
|
1436
|
+
"name": "days",
|
|
1437
|
+
"required": false,
|
|
1438
|
+
"hasDynamicHelp": false,
|
|
1439
|
+
"multiple": false,
|
|
1440
|
+
"type": "option"
|
|
1441
|
+
},
|
|
1442
|
+
"excludeNoindex": {
|
|
1443
|
+
"description": "Exclude page impressions of pages marked noindex",
|
|
1444
|
+
"name": "excludeNoindex",
|
|
1445
|
+
"allowNo": false,
|
|
1446
|
+
"type": "boolean"
|
|
1447
|
+
},
|
|
1448
|
+
"excludeSuspicious": {
|
|
1449
|
+
"description": "Exclude page impressions Speed Kit classified as suspicious",
|
|
1450
|
+
"name": "excludeSuspicious",
|
|
1451
|
+
"allowNo": false,
|
|
1452
|
+
"type": "boolean"
|
|
1453
|
+
},
|
|
1454
|
+
"explain": {
|
|
1455
|
+
"description": "Account for every rule the query leaves out, reduces or approximates",
|
|
1456
|
+
"name": "explain",
|
|
1457
|
+
"allowNo": false,
|
|
1458
|
+
"type": "boolean"
|
|
1459
|
+
},
|
|
1460
|
+
"hardNavigationsOnly": {
|
|
1461
|
+
"description": "Exclude soft (SPA) navigations",
|
|
1462
|
+
"name": "hardNavigationsOnly",
|
|
1463
|
+
"allowNo": false,
|
|
1464
|
+
"type": "boolean"
|
|
1465
|
+
},
|
|
1466
|
+
"execute": {
|
|
1467
|
+
"char": "e",
|
|
1468
|
+
"description": "Execute the query directly and write the result to a <app>-<date>-<query>.csv file",
|
|
1469
|
+
"name": "execute",
|
|
1470
|
+
"allowNo": false,
|
|
1471
|
+
"type": "boolean"
|
|
1472
|
+
},
|
|
1473
|
+
"quiet": {
|
|
1474
|
+
"char": "q",
|
|
1475
|
+
"description": "Output only the raw query without clipboard copy or styling",
|
|
1476
|
+
"name": "quiet",
|
|
1477
|
+
"allowNo": false,
|
|
1478
|
+
"type": "boolean"
|
|
1479
|
+
},
|
|
1480
|
+
"device": {
|
|
1481
|
+
"description": "Split the list by device class, so every url is warmed in the variations it was actually requested in. A class not named is left out",
|
|
1482
|
+
"exclusive": [
|
|
1483
|
+
"variation"
|
|
1484
|
+
],
|
|
1485
|
+
"name": "device",
|
|
1486
|
+
"required": false,
|
|
1487
|
+
"delimiter": ",",
|
|
1488
|
+
"hasDynamicHelp": false,
|
|
1489
|
+
"multiple": true,
|
|
1490
|
+
"options": [
|
|
1491
|
+
"desktop",
|
|
1492
|
+
"mobile",
|
|
1493
|
+
"tablet"
|
|
1494
|
+
],
|
|
1495
|
+
"type": "option"
|
|
1496
|
+
},
|
|
1497
|
+
"variation": {
|
|
1498
|
+
"char": "v",
|
|
1499
|
+
"description": "Pair every url of the list with each of these variations. For the custom variations no traffic can reveal, e.g. 'desktop-pdp-a,mobile-pdp-a'",
|
|
1500
|
+
"exclusive": [
|
|
1501
|
+
"device"
|
|
1502
|
+
],
|
|
1503
|
+
"name": "variation",
|
|
1504
|
+
"required": false,
|
|
1505
|
+
"delimiter": ",",
|
|
1506
|
+
"hasDynamicHelp": false,
|
|
1507
|
+
"multiple": true,
|
|
1508
|
+
"type": "option"
|
|
1509
|
+
},
|
|
1510
|
+
"count": {
|
|
1511
|
+
"description": "Run the query and report how large the list is instead of what is in it: urls, the impressions they stand for, and a row per variation where the list carries variations. Every other flag still applies, so this counts the list the same command would produce",
|
|
1512
|
+
"exclusive": [
|
|
1513
|
+
"execute"
|
|
1514
|
+
],
|
|
1515
|
+
"name": "count",
|
|
1516
|
+
"allowNo": false,
|
|
1517
|
+
"type": "boolean"
|
|
1518
|
+
},
|
|
1519
|
+
"excludeNotFound": {
|
|
1520
|
+
"description": "Leave out urls the origin answers with a 404 more often than not",
|
|
1521
|
+
"name": "excludeNotFound",
|
|
1522
|
+
"allowNo": false,
|
|
1523
|
+
"type": "boolean"
|
|
1524
|
+
},
|
|
1525
|
+
"limit": {
|
|
1526
|
+
"description": "Keep only the most requested urls",
|
|
1527
|
+
"name": "limit",
|
|
1528
|
+
"required": false,
|
|
1529
|
+
"hasDynamicHelp": false,
|
|
1530
|
+
"multiple": false,
|
|
1531
|
+
"type": "option"
|
|
1532
|
+
},
|
|
1533
|
+
"match": {
|
|
1534
|
+
"description": "Keep only urls whose path matches this regular expression, e.g. '^/p/'. The path is matched with its query string, the way a version 1 pathname rule matches it, so '[?&]size=' works too. Repeat the flag to keep the urls matching any of several patterns, and start a pattern with (?i) to match case-insensitively",
|
|
1535
|
+
"name": "match",
|
|
1536
|
+
"required": false,
|
|
1537
|
+
"hasDynamicHelp": false,
|
|
1538
|
+
"multiple": true,
|
|
1539
|
+
"type": "option"
|
|
1540
|
+
},
|
|
1541
|
+
"minHits": {
|
|
1542
|
+
"description": "Keep only urls requested at least this often in the window",
|
|
1543
|
+
"name": "minHits",
|
|
1544
|
+
"required": false,
|
|
1545
|
+
"hasDynamicHelp": false,
|
|
1546
|
+
"multiple": false,
|
|
1547
|
+
"type": "option"
|
|
1548
|
+
}
|
|
1549
|
+
},
|
|
1550
|
+
"hasDynamicHelp": false,
|
|
1551
|
+
"hiddenAliases": [],
|
|
1552
|
+
"id": "query:prewarm",
|
|
1553
|
+
"pluginAlias": "@speedkit/cli",
|
|
1554
|
+
"pluginName": "@speedkit/cli",
|
|
1555
|
+
"pluginType": "core",
|
|
1556
|
+
"strict": true,
|
|
1557
|
+
"enableJsonFlag": false,
|
|
1558
|
+
"isESM": true,
|
|
1559
|
+
"relativePath": [
|
|
1560
|
+
"dist",
|
|
1561
|
+
"commands",
|
|
1562
|
+
"query",
|
|
1563
|
+
"prewarm.js"
|
|
1564
|
+
]
|
|
1315
1565
|
}
|
|
1316
1566
|
},
|
|
1317
|
-
"version": "4.
|
|
1567
|
+
"version": "4.27.0"
|
|
1318
1568
|
}
|