@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.
Files changed (150) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +192 -19
  3. package/dist/commands/auto-prewarm.d.ts +8 -1
  4. package/dist/commands/auto-prewarm.js +18 -7
  5. package/dist/commands/generate-pop-config.d.ts +1 -0
  6. package/dist/commands/generate-pop-config.js +9 -3
  7. package/dist/commands/prewarm.js +3 -1
  8. package/dist/commands/query/parameter.d.ts +26 -0
  9. package/dist/commands/query/parameter.js +27 -0
  10. package/dist/commands/query/prewarm.d.ts +31 -0
  11. package/dist/commands/query/prewarm.js +31 -0
  12. package/dist/commands/revalidate.js +8 -6
  13. package/dist/helpers/clipboard.d.ts +19 -0
  14. package/dist/helpers/clipboard.js +70 -0
  15. package/dist/helpers/evaluate-speed-kit-config.d.ts +8 -18
  16. package/dist/helpers/evaluate-speed-kit-config.js +8 -6
  17. package/dist/helpers/evaluate-speed-kit-config.spec.d.ts +1 -0
  18. package/dist/helpers/evaluate-speed-kit-config.spec.js +78 -0
  19. package/dist/models/cli-parameters.d.ts +73 -0
  20. package/dist/models/cli-parameters.js +151 -0
  21. package/dist/models/cli-parameters.spec.d.ts +1 -0
  22. package/dist/models/cli-parameters.spec.js +47 -0
  23. package/dist/services/athena/athena-service.d.ts +2 -0
  24. package/dist/services/athena/athena-service.js +15 -4
  25. package/dist/services/athena/athena-service.spec.d.ts +1 -0
  26. package/dist/services/athena/athena-service.spec.js +74 -0
  27. package/dist/services/deploy/handler/install-resource-handler.js +3 -4
  28. package/dist/services/onboarding/onboarding-service-factory.js +2 -2
  29. package/dist/services/pop-config/pop-config-service.d.ts +8 -1
  30. package/dist/services/pop-config/pop-config-service.js +16 -28
  31. package/dist/services/prewarm/assets/asset-api-client.d.ts +1 -1
  32. package/dist/services/prewarm/assets/asset-api-client.js +5 -4
  33. package/dist/services/prewarm/auto-pre-warm-factory.d.ts +12 -2
  34. package/dist/services/prewarm/auto-pre-warm-factory.js +20 -6
  35. package/dist/services/prewarm/csv-reader.d.ts +21 -2
  36. package/dist/services/prewarm/csv-reader.js +71 -9
  37. package/dist/services/prewarm/csv-reader.spec.d.ts +1 -0
  38. package/dist/services/prewarm/csv-reader.spec.js +75 -0
  39. package/dist/services/prewarm/index.d.ts +1 -0
  40. package/dist/services/prewarm/index.js +1 -0
  41. package/dist/services/prewarm/pre-warm-factory.d.ts +0 -2
  42. package/dist/services/prewarm/pre-warm-factory.js +8 -11
  43. package/dist/services/prewarm/pre-warm-model.d.ts +14 -1
  44. package/dist/services/prewarm/pre-warm-model.js +0 -1
  45. package/dist/services/prewarm/pre-warm-service.d.ts +9 -4
  46. package/dist/services/prewarm/pre-warm-service.js +18 -14
  47. package/dist/services/prewarm/prewarm-targets.d.ts +12 -0
  48. package/dist/services/prewarm/prewarm-targets.js +18 -0
  49. package/dist/services/prewarm/prewarm-targets.spec.d.ts +1 -0
  50. package/dist/services/prewarm/prewarm-targets.spec.js +29 -0
  51. package/dist/services/query-builder/error/match-matches-nothing-error.d.ts +11 -0
  52. package/dist/services/query-builder/error/match-matches-nothing-error.js +17 -0
  53. package/dist/services/query-builder/queries/device.d.ts +21 -0
  54. package/dist/services/query-builder/queries/device.js +26 -0
  55. package/dist/services/query-builder/queries/index.d.ts +6 -0
  56. package/dist/services/query-builder/queries/index.js +6 -0
  57. package/dist/services/query-builder/queries/page-filter.d.ts +39 -0
  58. package/dist/services/query-builder/queries/page-filter.js +135 -0
  59. package/dist/services/query-builder/queries/page-source.d.ts +30 -0
  60. package/dist/services/query-builder/queries/page-source.js +79 -0
  61. package/dist/services/query-builder/queries/parameter-query.d.ts +14 -0
  62. package/dist/services/query-builder/queries/parameter-query.js +142 -0
  63. package/dist/services/query-builder/queries/pops-query.d.ts +27 -0
  64. package/dist/services/query-builder/queries/pops-query.js +65 -0
  65. package/dist/services/query-builder/queries/prewarm-query.d.ts +18 -0
  66. package/dist/services/query-builder/queries/prewarm-query.js +227 -0
  67. package/dist/services/query-builder/queries/query-model.d.ts +97 -0
  68. package/dist/services/query-builder/queries/query-model.js +19 -0
  69. package/dist/services/query-builder/queries/spec/golden-configs.d.ts +18 -0
  70. package/dist/services/query-builder/queries/spec/golden-configs.js +116 -0
  71. package/dist/services/query-builder/queries/spec/golden.spec.d.ts +1 -0
  72. package/dist/services/query-builder/queries/spec/golden.spec.js +161 -0
  73. package/dist/services/query-builder/queries/spec/pops-query.spec.d.ts +1 -0
  74. package/dist/services/query-builder/queries/spec/pops-query.spec.js +58 -0
  75. package/dist/services/query-builder/queries/spec/queries.spec.d.ts +1 -0
  76. package/dist/services/query-builder/queries/spec/queries.spec.js +312 -0
  77. package/dist/services/query-builder/queries/spec/reported-bugs.spec.d.ts +1 -0
  78. package/dist/services/query-builder/queries/spec/reported-bugs.spec.js +86 -0
  79. package/dist/services/query-builder/query-builder-factory.d.ts +2 -2
  80. package/dist/services/query-builder/query-builder-factory.js +35 -7
  81. package/dist/services/query-builder/query-builder-model.d.ts +31 -19
  82. package/dist/services/query-builder/query-builder-model.js +5 -5
  83. package/dist/services/query-builder/query-builder-service.d.ts +26 -5
  84. package/dist/services/query-builder/query-builder-service.js +157 -44
  85. package/dist/services/query-builder/query-command.d.ts +26 -0
  86. package/dist/services/query-builder/query-command.js +35 -0
  87. package/dist/services/query-builder/rules/index.d.ts +8 -0
  88. package/dist/services/query-builder/rules/index.js +8 -0
  89. package/dist/services/query-builder/rules/match-pattern.d.ts +51 -0
  90. package/dist/services/query-builder/rules/match-pattern.js +141 -0
  91. package/dist/services/query-builder/rules/pattern-language.d.ts +59 -0
  92. package/dist/services/query-builder/rules/pattern-language.js +159 -0
  93. package/dist/services/query-builder/rules/rule-model.d.ts +107 -0
  94. package/dist/services/query-builder/rules/rule-model.js +54 -0
  95. package/dist/services/query-builder/rules/rule-parser.d.ts +33 -0
  96. package/dist/services/query-builder/rules/rule-parser.js +189 -0
  97. package/dist/services/query-builder/rules/rule-reducer.d.ts +71 -0
  98. package/dist/services/query-builder/rules/rule-reducer.js +383 -0
  99. package/dist/services/query-builder/rules/rule-relevance.d.ts +43 -0
  100. package/dist/services/query-builder/rules/rule-relevance.js +69 -0
  101. package/dist/services/query-builder/rules/rule-to-sql.d.ts +51 -0
  102. package/dist/services/query-builder/rules/rule-to-sql.js +75 -0
  103. package/dist/services/query-builder/rules/spec/pattern-language.spec.d.ts +1 -0
  104. package/dist/services/query-builder/rules/spec/pattern-language.spec.js +90 -0
  105. package/dist/services/query-builder/rules/spec/rule-parser.spec.d.ts +1 -0
  106. package/dist/services/query-builder/rules/spec/rule-parser.spec.js +150 -0
  107. package/dist/services/query-builder/rules/spec/rule-reducer.spec.d.ts +1 -0
  108. package/dist/services/query-builder/rules/spec/rule-reducer.spec.js +169 -0
  109. package/dist/services/query-builder/rules/spec/rule-relevance.spec.d.ts +1 -0
  110. package/dist/services/query-builder/rules/spec/rule-relevance.spec.js +88 -0
  111. package/dist/services/query-builder/rules/spec/rule-to-sql.spec.d.ts +1 -0
  112. package/dist/services/query-builder/rules/spec/rule-to-sql.spec.js +110 -0
  113. package/dist/services/query-builder/rules/spec/runtime-semantics.spec.d.ts +1 -0
  114. package/dist/services/query-builder/rules/spec/runtime-semantics.spec.js +55 -0
  115. package/dist/services/query-builder/rules/spec/strip-parameters.spec.d.ts +1 -0
  116. package/dist/services/query-builder/rules/spec/strip-parameters.spec.js +85 -0
  117. package/dist/services/query-builder/rules/strip-parameters.d.ts +39 -0
  118. package/dist/services/query-builder/rules/strip-parameters.js +197 -0
  119. package/dist/services/query-builder/sql/expression.d.ts +73 -0
  120. package/dist/services/query-builder/sql/expression.js +133 -0
  121. package/dist/services/query-builder/sql/format.d.ts +14 -0
  122. package/dist/services/query-builder/sql/format.js +48 -0
  123. package/dist/services/query-builder/sql/index.d.ts +4 -0
  124. package/dist/services/query-builder/sql/index.js +4 -0
  125. package/dist/services/query-builder/sql/predicate.d.ts +66 -0
  126. package/dist/services/query-builder/sql/predicate.js +124 -0
  127. package/dist/services/query-builder/sql/regex.d.ts +28 -0
  128. package/dist/services/query-builder/sql/regex.js +81 -0
  129. package/dist/services/query-builder/sql/spec/expression.spec.d.ts +1 -0
  130. package/dist/services/query-builder/sql/spec/expression.spec.js +75 -0
  131. package/dist/services/query-builder/sql/spec/format.spec.d.ts +1 -0
  132. package/dist/services/query-builder/sql/spec/format.spec.js +37 -0
  133. package/dist/services/query-builder/sql/spec/predicate.spec.d.ts +1 -0
  134. package/dist/services/query-builder/sql/spec/predicate.spec.js +78 -0
  135. package/dist/services/query-builder/sql/spec/regex.spec.d.ts +1 -0
  136. package/dist/services/query-builder/sql/spec/regex.spec.js +62 -0
  137. package/dist/services/revalidate/revalidate-model.d.ts +9 -3
  138. package/dist/services/revalidate/revalidate-model.js +12 -3
  139. package/oclif.manifest.json +354 -104
  140. package/package.json +11 -2
  141. package/dist/commands/build-parameter-query.d.ts +0 -14
  142. package/dist/commands/build-parameter-query.js +0 -25
  143. package/dist/commands/build-prewarm-query.d.ts +0 -16
  144. package/dist/commands/build-prewarm-query.js +0 -37
  145. package/dist/helpers/build-query-helper.d.ts +0 -32
  146. package/dist/helpers/build-query-helper.js +0 -223
  147. package/dist/helpers/get-parsed-config.d.ts +0 -15
  148. package/dist/helpers/get-parsed-config.js +0 -62
  149. package/dist/services/onboarding/dashboard/parameter-query-builder.d.ts +0 -8
  150. package/dist/services/onboarding/dashboard/parameter-query-builder.js +0 -63
@@ -1,32 +0,0 @@
1
- /**
2
- * Returns the whitelisted filter as a sql query string.
3
- *
4
- * @param parsedConfig - The speed kit config parsed as an object.
5
- */
6
- export declare function getWhitelistedFilter(parsedConfig: any): string;
7
- /**
8
- * Returns the blacklisted filter as a SQL query string.
9
- *
10
- * @param parsedConfig - The speed kit config parsed as an object.
11
- */
12
- export declare function getBlacklistedFilter(parsedConfig: any): string;
13
- /**
14
- * Returns the parameter filter as a SQL query string.
15
- *
16
- * @param params - The stripped parameters that are named within the speed kit config.
17
- * @param skConfigVersion - The Speed Kit config ruleset version.
18
- */
19
- export declare function getParameterFilter(parameters: (string | RegExp)[], skConfigVersion?: number): string;
20
- /**
21
- * Returns the parameter replace (regexp_replace) as a SQL query string.
22
- *
23
- * @param params - The stripped parameters that are named within the speed kit config.
24
- * @param skConfigVersion - The Speed Kit config ruleset version.
25
- */
26
- export declare function getParameterReplaceFilter(parameters: (string | RegExp)[], skConfigVersion?: number): string;
27
- /**
28
- * Returns the stripped parameters that are named within the speed kit config.
29
- *
30
- * @param parsedConfig - The speed kit config parsed as an object.
31
- */
32
- export declare function getStrippedParameters(parsedConfig: any): (string | RegExp)[];
@@ -1,223 +0,0 @@
1
- /**
2
- * Returns the string between a left bound and a right bound.
3
- *
4
- * @param input - The input string to get the inner string from.
5
- * @param leftBound - The left bound of the string to be cut.
6
- * @param rightBound - The right bound of the string to be cut.
7
- */
8
- function getStringBetween(input, leftBound, rightBound) {
9
- return input.slice(input.indexOf(leftBound) + 1, input.lastIndexOf(rightBound));
10
- }
11
- /**
12
- * Returns the comparison filter (like, regexp_like) as a SQL query string.
13
- *
14
- * @param property - The property to be compared
15
- * @param sqlField -The SQL field to compare with.
16
- * @param shouldEqual - True if the property should equal the sql value, false otherwise.
17
- * @param type - Whether type of property is a pathname or url.
18
- */
19
- function getFilterForProperty(property, sqlField, shouldEqual, type) {
20
- if (typeof property === "string") {
21
- if (type === "pathname") {
22
- return `url_extract_path(${sqlField}) ${shouldEqual ? "" : "not "}like '${property}%'`;
23
- }
24
- return `${sqlField} ${shouldEqual ? "" : "not "}like 'https://${property}%'`;
25
- }
26
- const ignoreCase = isRegExpIgnoringCase(property);
27
- const sqlRegExp = getStringBetween(String(property), "/", "/");
28
- if (type === "pathname") {
29
- return `${shouldEqual ? "" : "not "}regexp_like(url_extract_path(${sqlField}), '${ignoreCase ? "(?i)" : ""}${sqlRegExp}')`;
30
- }
31
- return `${shouldEqual ? "" : "not "}regexp_like(${sqlField}, '${ignoreCase ? "(?i)" : ""}${sqlRegExp}')`;
32
- }
33
- /**
34
- * Returns all properties of a speed kit rule with the given keys.
35
- *
36
- * @param speedKitRuleValues - The speed kit rule value to get the properties from (e.g. the whitelist).
37
- * @param key - The key to get the properties with (e.g. 'pathname').
38
- */
39
- function getRuleProperty(speedKitRuleValues, key) {
40
- const properties = [];
41
- if (!speedKitRuleValues) {
42
- return properties;
43
- }
44
- for (const ruleValue of speedKitRuleValues) {
45
- for (const ruleKey of Object.keys(ruleValue).filter((ruleKey) => key === ruleKey))
46
- properties.push(...ruleValue[ruleKey]);
47
- }
48
- return properties;
49
- }
50
- /**
51
- * Returns the whitelisted filter as a sql query string.
52
- *
53
- * @param parsedConfig - The speed kit config parsed as an object.
54
- */
55
- export function getWhitelistedFilter(parsedConfig) {
56
- const { whitelist, enabledSites } = parsedConfig;
57
- // TODO: use origins instead here
58
- const whitelistedFilter = `(\n ${(whitelist[0].host || whitelist[0].url)
59
- .map((hostname) => getFilterForProperty(hostname, "url", true, "url"))
60
- .join("\n or ")}\n )`;
61
- const enabledFilter = getRuleProperty(enabledSites, "pathname")
62
- .map((pathname) => getFilterForProperty(pathname, "url", true, "pathname"))
63
- .join("\nor ");
64
- if (!enabledFilter) {
65
- return `${whitelistedFilter}`;
66
- }
67
- return `(${whitelistedFilter}) and (${enabledFilter})`;
68
- }
69
- /**
70
- * Returns the blacklisted filter as a SQL query string.
71
- *
72
- * @param parsedConfig - The speed kit config parsed as an object.
73
- */
74
- export function getBlacklistedFilter(parsedConfig) {
75
- const { blacklist, disabledSites } = parsedConfig;
76
- const blacklistedPathnamesFilter = getRuleProperty(blacklist, "pathname")
77
- .map((pathname) => getFilterForProperty(pathname, "url", false, "pathname"))
78
- .join("\n and ");
79
- const blacklistedUrlsFilter = getRuleProperty(blacklist, "url")
80
- .map((url) => getFilterForProperty(url, "url", false, "url"))
81
- .join("\n and ");
82
- const disabledFilter = getRuleProperty(disabledSites, "pathname")
83
- .map((pathname) => getFilterForProperty(pathname, "url", false, "pathname"))
84
- .join("\n and ");
85
- let blacklistedFilter = "";
86
- if (blacklistedPathnamesFilter) {
87
- blacklistedFilter += blacklistedPathnamesFilter;
88
- }
89
- if (blacklistedUrlsFilter) {
90
- blacklistedFilter += `\n and ${blacklistedUrlsFilter}`;
91
- }
92
- if (disabledFilter) {
93
- blacklistedFilter += `\n and ${disabledFilter}`;
94
- }
95
- return blacklistedFilter;
96
- }
97
- /**
98
- * Returns the parameter filter as a SQL query string.
99
- *
100
- * @param params - The stripped parameters that are named within the speed kit config.
101
- * @param skConfigVersion - The Speed Kit config ruleset version.
102
- */
103
- export function getParameterFilter(parameters, skConfigVersion = 1) {
104
- return parameters
105
- .map((parameter) => {
106
- // Prefix comparison for strings
107
- if (typeof parameter === "string") {
108
- return skConfigVersion === 1
109
- ? `not regexp_like(key, '^${parameter}')`
110
- : `key <> '${parameter}'`;
111
- }
112
- // Regexp like for complex regular expressions
113
- const ignoreCase = isRegExpIgnoringCase(parameter);
114
- return `not regexp_like(key, '${ignoreCase ? "(?i)" : ""}${getStringBetween(String(parameter), "/", "/")}')`;
115
- })
116
- .join("\nand ");
117
- }
118
- /**
119
- * Returns the parameter replace (regexp_replace) as a SQL query string.
120
- *
121
- * @param params - The stripped parameters that are named within the speed kit config.
122
- * @param skConfigVersion - The Speed Kit config ruleset version.
123
- */
124
- export function getParameterReplaceFilter(parameters, skConfigVersion = 1) {
125
- const prefixParameters = [];
126
- const suffixParameters = [];
127
- const fullMatchParameters = [];
128
- const prefixIgnoreCaseParameters = [];
129
- const suffixIgnoreCaseParameters = [];
130
- const fullMatchIgnoreCaseParameters = [];
131
- for (const parameter of parameters) {
132
- // String params or regex params with start marker but no end marker
133
- if (typeof parameter === "string") {
134
- if (skConfigVersion === 1) {
135
- prefixParameters.push(parameter);
136
- continue;
137
- }
138
- else {
139
- fullMatchParameters.push(parameter);
140
- continue;
141
- }
142
- }
143
- const ignoreCase = isRegExpIgnoringCase(parameter);
144
- // Regex params with start marker but no end marker
145
- if (/\/\^[^$]+$/.test(String(parameter))) {
146
- (ignoreCase ? prefixIgnoreCaseParameters : prefixParameters).push(getStringBetween(String(parameter), "^", "/"));
147
- continue;
148
- }
149
- // Regex params with end marker but no start marker
150
- if (/\/[^$^]+\$/.test(String(parameter))) {
151
- (ignoreCase ? suffixIgnoreCaseParameters : suffixParameters).push(getStringBetween(String(parameter), "/", "$"));
152
- continue;
153
- }
154
- // Regex params with start marker and end marker
155
- if (/\/\^[^$]+\$\//.test(String(parameter))) {
156
- (ignoreCase ? fullMatchIgnoreCaseParameters : fullMatchParameters).push(getStringBetween(String(parameter), "^", "$"));
157
- continue;
158
- }
159
- // Regex params with no start marker and no end marker are being considered full matches
160
- (ignoreCase ? fullMatchIgnoreCaseParameters : fullMatchParameters).push(getStringBetween(String(parameter), "/", "/"));
161
- }
162
- let regExpQuery = "regexp_replace(url, '#.*' )";
163
- const regExps = [
164
- getParameterPrefixRegExp(prefixParameters, false),
165
- getParameterPrefixRegExp(prefixIgnoreCaseParameters, true),
166
- getParameterSuffixRegExp(suffixParameters, false),
167
- getParameterSuffixRegExp(suffixIgnoreCaseParameters, true),
168
- getParameterFullMatchRegExp(fullMatchParameters, false),
169
- getParameterFullMatchRegExp(fullMatchIgnoreCaseParameters, true),
170
- ];
171
- // Nest all regexes inside each other:
172
- for (const regExp of regExps) {
173
- if (regExp) {
174
- regExpQuery = `regexp_replace(${regExpQuery}, '${regExp}', '')`;
175
- }
176
- }
177
- return regExpQuery;
178
- }
179
- function isRegExpIgnoringCase(regExp) {
180
- return /\/i$/.test(String(regExp));
181
- }
182
- function getParameterPrefixRegExp(parameters, ignoreCase) {
183
- return parameters.length > 0
184
- ? `${ignoreCase ? "(?i)" : ""}[?&](${parameters.join("|")})[^&]*`
185
- : null;
186
- }
187
- function getParameterSuffixRegExp(parameters, ignoreCase) {
188
- return parameters.length > 0
189
- ? `${ignoreCase ? "(?i)" : ""}[?&][^&]*(${parameters.join("|")})(=[^&]*)?(?=&|$)`
190
- : null;
191
- }
192
- function getParameterFullMatchRegExp(parameters, ignoreCase) {
193
- return parameters.length > 0
194
- ? `${ignoreCase ? "(?i)" : ""}[?&](${parameters.join("|")})(=[^&]*)?(?=&|$)`
195
- : null;
196
- }
197
- /**
198
- * Returns the stripped parameters that are named within the speed kit config.
199
- *
200
- * @param parsedConfig - The speed kit config parsed as an object.
201
- */
202
- export function getStrippedParameters(parsedConfig) {
203
- const parameterArray = parsedConfig.stripQueryParams;
204
- if (!parameterArray) {
205
- return [];
206
- }
207
- const isSimpleArray = parameterArray.every((parameter) => typeof parameter === "string" || parameter instanceof RegExp);
208
- if (isSimpleArray) {
209
- return parameterArray;
210
- }
211
- const parameters = [];
212
- for (const entry of parameterArray) {
213
- if (!entry.params) {
214
- continue;
215
- }
216
- if (!Array.isArray(entry.params)) {
217
- parameters.push(entry.params);
218
- continue;
219
- }
220
- parameters.push(...entry.params);
221
- }
222
- return parameters;
223
- }
@@ -1,15 +0,0 @@
1
- import { ConfigFile } from "./customer-config.js";
2
- interface SpeedKitConfig {
3
- ruleSetConfig?: {
4
- version?: string;
5
- };
6
- [key: string]: any;
7
- }
8
- /**
9
- * @deprecated
10
- * @param config
11
- */
12
- export declare function parseSpeedKitConfig(config: string): SpeedKitConfig;
13
- export declare function getParsedConfig(configFile: ConfigFile): Promise<SpeedKitConfig>;
14
- export declare function getSpeedKitConfigVersion(config: SpeedKitConfig): number;
15
- export {};
@@ -1,62 +0,0 @@
1
- /* eslint-disable */
2
- import * as vm from "node:vm";
3
- /**
4
- * @deprecated
5
- * @param config
6
- */
7
- export function parseSpeedKitConfig(config) {
8
- // Replace all properties that use function calls or that are related to other objects like window
9
- const window = {};
10
- window.top = window;
11
- const storage = {
12
- length: 0,
13
- clear: () => { },
14
- getItem: () => { },
15
- key: () => null,
16
- removeItem: () => { },
17
- setItem: () => { },
18
- };
19
- const node = {
20
- querySelector: () => node,
21
- querySelectorAll: () => [],
22
- classList: { contains: () => false },
23
- };
24
- const context = {
25
- window,
26
- APP: "",
27
- document: Object.assign(Object.create(node), {
28
- cookie: "",
29
- documentElement: Object.create(node),
30
- head: Object.create(node),
31
- body: Object.create(node),
32
- }),
33
- speedKit: window.speedKit,
34
- navigator: { userAgent: "test-agent" },
35
- location: new URL("https://www.example.com"),
36
- localStorage: storage,
37
- sessionStorage: storage,
38
- };
39
- vm.runInNewContext(config, context);
40
- return window.speedKit;
41
- }
42
- export async function getParsedConfig(configFile) {
43
- const configString = configFile ? await configFile.readContent() : undefined;
44
- if (!configString) {
45
- throw new Error("Speed Kit config could not be found in directory");
46
- }
47
- let parsedConfig;
48
- try {
49
- parsedConfig = parseSpeedKitConfig(configString);
50
- }
51
- catch (error) {
52
- throw new Error(`Speed Kit config string could not be parsed.\n${error.stack}`);
53
- }
54
- if (!parsedConfig) {
55
- throw new Error("Speed Kit config was not correctly exposed on the global speedKit variable.");
56
- }
57
- return parsedConfig;
58
- }
59
- export function getSpeedKitConfigVersion(config) {
60
- return Number(config.ruleSetConfig?.version) || 1;
61
- }
62
- /* eslint-enable */
@@ -1,8 +0,0 @@
1
- import { CustomerConfig, ConfigFileInterface } from "../../integration-api/index.js";
2
- export declare class ParameterQueryBuilder {
3
- private customerConfig;
4
- private speedKitConfigFile;
5
- constructor(customerConfig: CustomerConfig, speedKitConfigFile: ConfigFileInterface);
6
- buildParameterQuery(app: string, parameterFilter: string, whitelistedFilter: string, blacklistedFilter: string, parameterReplaceFilter: string): string;
7
- getQuery(): string;
8
- }
@@ -1,63 +0,0 @@
1
- import { getBlacklistedFilter, getParameterFilter, getParameterReplaceFilter, getStrippedParameters, getWhitelistedFilter, } from "../../../helpers/build-query-helper.js";
2
- import { parseSpeedKitConfig } from "../../../helpers/get-parsed-config.js";
3
- export class ParameterQueryBuilder {
4
- customerConfig;
5
- speedKitConfigFile;
6
- constructor(customerConfig, speedKitConfigFile) {
7
- this.customerConfig = customerConfig;
8
- this.speedKitConfigFile = speedKitConfigFile;
9
- }
10
- buildParameterQuery(app, parameterFilter, whitelistedFilter, blacklistedFilter, parameterReplaceFilter) {
11
- const nowMinusOneMonth = new Date(new Date().setMonth(new Date().getMonth() - 1, new Date().getDate()));
12
- const monthString = `${nowMinusOneMonth.getMonth() + 1 < 10 ? "0" : ""}${nowMinusOneMonth.getMonth() + 1}`;
13
- const dateString = `${nowMinusOneMonth.getDate() < 10 ? "0" : ""}${nowMinusOneMonth.getDate()}`;
14
- const date = `${nowMinusOneMonth.getFullYear()}-${monthString}-${dateString}`;
15
- return `
16
- with urlWithParams as (
17
- select
18
- url,
19
- createdat,
20
- split(url, '?')[1] as urlWithoutParams,
21
- filter (
22
- transform(
23
- split(split(url, '?')[2], '&'),
24
- (pair) -> split(pair, '=')[1]
25
- ),
26
- (key) -> ${parameterFilter}
27
- ) as paramKeys
28
- from live.rum.pi
29
- where app = '${app}'
30
- and date >= '${date}'
31
- and cardinality(split(url, '?')) > 1
32
- and (${whitelistedFilter})
33
- and ${blacklistedFilter}
34
- ), prepared as (
35
- select count(*) as PIs,
36
- count(distinct url) as urls,
37
- count(distinct ${parameterReplaceFilter}) as cachedUrls,
38
- count(distinct urlWithoutParams) as uniqueWithoutParam,
39
- paramKeys,
40
- element_at(array_distinct(max_by(url, MD5(to_utf8(to_iso8601(createdat))), 500)), 1) as example1,
41
- element_at(array_distinct(max_by(url, MD5(to_utf8(to_iso8601(createdat))), 500)), 2) as example2,
42
- element_at(array_distinct(max_by(url, MD5(to_utf8(to_iso8601(createdat))), 500)), 3) as example3
43
- from urlWithParams
44
- group by paramKeys
45
- )
46
-
47
- select paramKeys, cachedUrls - uniqueWithoutParam as potentialGain, cachedUrls, PIs, example1, example2, example3
48
- from prepared
49
- where cardinality(paramKeys) > 0
50
- order by case when potentialGain > cachedUrls and potentialGain > PIs then potentialGain
51
- when cachedUrls > PIs then cachedUrls
52
- else PIs end desc`;
53
- }
54
- getQuery() {
55
- const parsedConfig = parseSpeedKitConfig(this.speedKitConfigFile.getContent());
56
- const parameters = getStrippedParameters(parsedConfig);
57
- const parameterFilter = getParameterFilter(parameters);
58
- const whitelistedFilter = getWhitelistedFilter(parsedConfig);
59
- const blacklistedFilter = getBlacklistedFilter(parsedConfig);
60
- const parameterReplaceFilter = getParameterReplaceFilter(parameters);
61
- return this.buildParameterQuery(this.customerConfig.app, parameterFilter, whitelistedFilter, blacklistedFilter, parameterReplaceFilter);
62
- }
63
- }