@speedkit/cli 4.25.2 → 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 +17 -0
- package/README.md +192 -19
- 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/commands/revalidate.js +8 -6
- 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/dist/services/revalidate/revalidate-model.d.ts +9 -3
- package/dist/services/revalidate/revalidate-model.js +12 -3
- package/oclif.manifest.json +354 -104
- 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
|
+
});
|
|
@@ -6,11 +6,17 @@ export type RevalidateType = (typeof REVALIDATE_TYPES)[number];
|
|
|
6
6
|
*/
|
|
7
7
|
export declare const ASSET_TABLE = "speedKit.Asset";
|
|
8
8
|
/**
|
|
9
|
-
* Above this many assets the command asks before it
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* Above this many assets the command asks before it runs a job that drops
|
|
10
|
+
* entries. Such a job cannot be undone: the entries are gone until traffic
|
|
11
|
+
* caches them again.
|
|
12
12
|
*/
|
|
13
13
|
export declare const CONFIRMATION_THRESHOLD = 100;
|
|
14
|
+
/**
|
|
15
|
+
* The job types that stop serving the cached entry straight away, so a large one
|
|
16
|
+
* needs the confirmation. `REFRESH` and `INSTANT` keep serving while they
|
|
17
|
+
* revalidate, so they need none.
|
|
18
|
+
*/
|
|
19
|
+
export declare const DROPPING_TYPES: ReadonlySet<RevalidateType>;
|
|
14
20
|
/**
|
|
15
21
|
* Scope of a revalidation job.
|
|
16
22
|
*
|
|
@@ -10,11 +10,20 @@ export const REVALIDATE_TYPES = [
|
|
|
10
10
|
*/
|
|
11
11
|
export const ASSET_TABLE = "speedKit.Asset";
|
|
12
12
|
/**
|
|
13
|
-
* Above this many assets the command asks before it
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* Above this many assets the command asks before it runs a job that drops
|
|
14
|
+
* entries. Such a job cannot be undone: the entries are gone until traffic
|
|
15
|
+
* caches them again.
|
|
16
16
|
*/
|
|
17
17
|
export const CONFIRMATION_THRESHOLD = 100;
|
|
18
|
+
/**
|
|
19
|
+
* The job types that stop serving the cached entry straight away, so a large one
|
|
20
|
+
* needs the confirmation. `REFRESH` and `INSTANT` keep serving while they
|
|
21
|
+
* revalidate, so they need none.
|
|
22
|
+
*/
|
|
23
|
+
export const DROPPING_TYPES = new Set([
|
|
24
|
+
"PURGE",
|
|
25
|
+
"DEPLOYMENT",
|
|
26
|
+
]);
|
|
18
27
|
export class RevalidateContext {
|
|
19
28
|
app;
|
|
20
29
|
quiet;
|