@speedkit/cli 4.26.0 → 4.27.1

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 (149) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +203 -15
  3. package/dist/commands/auto-prewarm.d.ts +12 -1
  4. package/dist/commands/auto-prewarm.js +26 -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 +27 -0
  9. package/dist/commands/query/parameter.js +28 -0
  10. package/dist/commands/query/prewarm.d.ts +32 -0
  11. package/dist/commands/query/prewarm.js +32 -0
  12. package/dist/helpers/clipboard.d.ts +19 -0
  13. package/dist/helpers/clipboard.js +70 -0
  14. package/dist/helpers/evaluate-speed-kit-config.d.ts +8 -18
  15. package/dist/helpers/evaluate-speed-kit-config.js +8 -6
  16. package/dist/helpers/evaluate-speed-kit-config.spec.d.ts +1 -0
  17. package/dist/helpers/evaluate-speed-kit-config.spec.js +78 -0
  18. package/dist/models/cli-parameters.d.ts +106 -0
  19. package/dist/models/cli-parameters.js +183 -0
  20. package/dist/models/cli-parameters.spec.d.ts +1 -0
  21. package/dist/models/cli-parameters.spec.js +47 -0
  22. package/dist/services/athena/athena-service-factory.d.ts +4 -1
  23. package/dist/services/athena/athena-service-factory.js +9 -3
  24. package/dist/services/athena/athena-service.d.ts +13 -1
  25. package/dist/services/athena/athena-service.js +27 -5
  26. package/dist/services/athena/athena-service.spec.d.ts +1 -0
  27. package/dist/services/athena/athena-service.spec.js +93 -0
  28. package/dist/services/deploy/handler/install-resource-handler.js +3 -4
  29. package/dist/services/onboarding/onboarding-service-factory.js +2 -2
  30. package/dist/services/pop-config/pop-config-service.d.ts +8 -1
  31. package/dist/services/pop-config/pop-config-service.js +16 -28
  32. package/dist/services/prewarm/assets/asset-api-client.d.ts +1 -1
  33. package/dist/services/prewarm/assets/asset-api-client.js +5 -4
  34. package/dist/services/prewarm/auto-pre-warm-factory.d.ts +20 -2
  35. package/dist/services/prewarm/auto-pre-warm-factory.js +24 -6
  36. package/dist/services/prewarm/csv-reader.d.ts +21 -2
  37. package/dist/services/prewarm/csv-reader.js +71 -9
  38. package/dist/services/prewarm/csv-reader.spec.d.ts +1 -0
  39. package/dist/services/prewarm/csv-reader.spec.js +75 -0
  40. package/dist/services/prewarm/index.d.ts +1 -0
  41. package/dist/services/prewarm/index.js +1 -0
  42. package/dist/services/prewarm/pre-warm-factory.d.ts +0 -2
  43. package/dist/services/prewarm/pre-warm-factory.js +8 -11
  44. package/dist/services/prewarm/pre-warm-model.d.ts +14 -1
  45. package/dist/services/prewarm/pre-warm-model.js +0 -1
  46. package/dist/services/prewarm/pre-warm-service.d.ts +9 -4
  47. package/dist/services/prewarm/pre-warm-service.js +18 -14
  48. package/dist/services/prewarm/prewarm-targets.d.ts +12 -0
  49. package/dist/services/prewarm/prewarm-targets.js +18 -0
  50. package/dist/services/prewarm/prewarm-targets.spec.d.ts +1 -0
  51. package/dist/services/prewarm/prewarm-targets.spec.js +29 -0
  52. package/dist/services/query-builder/error/match-matches-nothing-error.d.ts +11 -0
  53. package/dist/services/query-builder/error/match-matches-nothing-error.js +17 -0
  54. package/dist/services/query-builder/queries/device.d.ts +21 -0
  55. package/dist/services/query-builder/queries/device.js +26 -0
  56. package/dist/services/query-builder/queries/index.d.ts +6 -0
  57. package/dist/services/query-builder/queries/index.js +6 -0
  58. package/dist/services/query-builder/queries/page-filter.d.ts +39 -0
  59. package/dist/services/query-builder/queries/page-filter.js +135 -0
  60. package/dist/services/query-builder/queries/page-source.d.ts +30 -0
  61. package/dist/services/query-builder/queries/page-source.js +79 -0
  62. package/dist/services/query-builder/queries/parameter-query.d.ts +14 -0
  63. package/dist/services/query-builder/queries/parameter-query.js +142 -0
  64. package/dist/services/query-builder/queries/pops-query.d.ts +27 -0
  65. package/dist/services/query-builder/queries/pops-query.js +65 -0
  66. package/dist/services/query-builder/queries/prewarm-query.d.ts +18 -0
  67. package/dist/services/query-builder/queries/prewarm-query.js +227 -0
  68. package/dist/services/query-builder/queries/query-model.d.ts +97 -0
  69. package/dist/services/query-builder/queries/query-model.js +19 -0
  70. package/dist/services/query-builder/queries/spec/golden-configs.d.ts +18 -0
  71. package/dist/services/query-builder/queries/spec/golden-configs.js +116 -0
  72. package/dist/services/query-builder/queries/spec/golden.spec.d.ts +1 -0
  73. package/dist/services/query-builder/queries/spec/golden.spec.js +161 -0
  74. package/dist/services/query-builder/queries/spec/pops-query.spec.d.ts +1 -0
  75. package/dist/services/query-builder/queries/spec/pops-query.spec.js +58 -0
  76. package/dist/services/query-builder/queries/spec/queries.spec.d.ts +1 -0
  77. package/dist/services/query-builder/queries/spec/queries.spec.js +312 -0
  78. package/dist/services/query-builder/queries/spec/reported-bugs.spec.d.ts +1 -0
  79. package/dist/services/query-builder/queries/spec/reported-bugs.spec.js +86 -0
  80. package/dist/services/query-builder/query-builder-factory.d.ts +2 -2
  81. package/dist/services/query-builder/query-builder-factory.js +36 -8
  82. package/dist/services/query-builder/query-builder-model.d.ts +33 -19
  83. package/dist/services/query-builder/query-builder-model.js +5 -5
  84. package/dist/services/query-builder/query-builder-service.d.ts +26 -5
  85. package/dist/services/query-builder/query-builder-service.js +157 -44
  86. package/dist/services/query-builder/query-command.d.ts +27 -0
  87. package/dist/services/query-builder/query-command.js +36 -0
  88. package/dist/services/query-builder/rules/index.d.ts +8 -0
  89. package/dist/services/query-builder/rules/index.js +8 -0
  90. package/dist/services/query-builder/rules/match-pattern.d.ts +51 -0
  91. package/dist/services/query-builder/rules/match-pattern.js +141 -0
  92. package/dist/services/query-builder/rules/pattern-language.d.ts +59 -0
  93. package/dist/services/query-builder/rules/pattern-language.js +159 -0
  94. package/dist/services/query-builder/rules/rule-model.d.ts +107 -0
  95. package/dist/services/query-builder/rules/rule-model.js +54 -0
  96. package/dist/services/query-builder/rules/rule-parser.d.ts +33 -0
  97. package/dist/services/query-builder/rules/rule-parser.js +189 -0
  98. package/dist/services/query-builder/rules/rule-reducer.d.ts +71 -0
  99. package/dist/services/query-builder/rules/rule-reducer.js +383 -0
  100. package/dist/services/query-builder/rules/rule-relevance.d.ts +43 -0
  101. package/dist/services/query-builder/rules/rule-relevance.js +69 -0
  102. package/dist/services/query-builder/rules/rule-to-sql.d.ts +51 -0
  103. package/dist/services/query-builder/rules/rule-to-sql.js +75 -0
  104. package/dist/services/query-builder/rules/spec/pattern-language.spec.d.ts +1 -0
  105. package/dist/services/query-builder/rules/spec/pattern-language.spec.js +90 -0
  106. package/dist/services/query-builder/rules/spec/rule-parser.spec.d.ts +1 -0
  107. package/dist/services/query-builder/rules/spec/rule-parser.spec.js +150 -0
  108. package/dist/services/query-builder/rules/spec/rule-reducer.spec.d.ts +1 -0
  109. package/dist/services/query-builder/rules/spec/rule-reducer.spec.js +169 -0
  110. package/dist/services/query-builder/rules/spec/rule-relevance.spec.d.ts +1 -0
  111. package/dist/services/query-builder/rules/spec/rule-relevance.spec.js +88 -0
  112. package/dist/services/query-builder/rules/spec/rule-to-sql.spec.d.ts +1 -0
  113. package/dist/services/query-builder/rules/spec/rule-to-sql.spec.js +110 -0
  114. package/dist/services/query-builder/rules/spec/runtime-semantics.spec.d.ts +1 -0
  115. package/dist/services/query-builder/rules/spec/runtime-semantics.spec.js +55 -0
  116. package/dist/services/query-builder/rules/spec/strip-parameters.spec.d.ts +1 -0
  117. package/dist/services/query-builder/rules/spec/strip-parameters.spec.js +85 -0
  118. package/dist/services/query-builder/rules/strip-parameters.d.ts +39 -0
  119. package/dist/services/query-builder/rules/strip-parameters.js +197 -0
  120. package/dist/services/query-builder/sql/expression.d.ts +73 -0
  121. package/dist/services/query-builder/sql/expression.js +133 -0
  122. package/dist/services/query-builder/sql/format.d.ts +14 -0
  123. package/dist/services/query-builder/sql/format.js +48 -0
  124. package/dist/services/query-builder/sql/index.d.ts +4 -0
  125. package/dist/services/query-builder/sql/index.js +4 -0
  126. package/dist/services/query-builder/sql/predicate.d.ts +66 -0
  127. package/dist/services/query-builder/sql/predicate.js +124 -0
  128. package/dist/services/query-builder/sql/regex.d.ts +28 -0
  129. package/dist/services/query-builder/sql/regex.js +81 -0
  130. package/dist/services/query-builder/sql/spec/expression.spec.d.ts +1 -0
  131. package/dist/services/query-builder/sql/spec/expression.spec.js +75 -0
  132. package/dist/services/query-builder/sql/spec/format.spec.d.ts +1 -0
  133. package/dist/services/query-builder/sql/spec/format.spec.js +37 -0
  134. package/dist/services/query-builder/sql/spec/predicate.spec.d.ts +1 -0
  135. package/dist/services/query-builder/sql/spec/predicate.spec.js +78 -0
  136. package/dist/services/query-builder/sql/spec/regex.spec.d.ts +1 -0
  137. package/dist/services/query-builder/sql/spec/regex.spec.js +62 -0
  138. package/oclif.manifest.json +401 -100
  139. package/package.json +11 -2
  140. package/dist/commands/build-parameter-query.d.ts +0 -14
  141. package/dist/commands/build-parameter-query.js +0 -25
  142. package/dist/commands/build-prewarm-query.d.ts +0 -16
  143. package/dist/commands/build-prewarm-query.js +0 -37
  144. package/dist/helpers/build-query-helper.d.ts +0 -32
  145. package/dist/helpers/build-query-helper.js +0 -223
  146. package/dist/helpers/get-parsed-config.d.ts +0 -15
  147. package/dist/helpers/get-parsed-config.js +0 -62
  148. package/dist/services/onboarding/dashboard/parameter-query-builder.d.ts +0 -8
  149. package/dist/services/onboarding/dashboard/parameter-query-builder.js +0 -63
@@ -13,9 +13,21 @@
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 -v MOBILE,DESKTOP"
16
+ "$ sk auto-prewarm customers/decathlon.de --device desktop,mobile",
17
+ "$ sk auto-prewarm customers/decathlon.de -v MOBILE,DESKTOP",
18
+ "$ sk auto-prewarm customers/decathlon.de --limit 5000 --minHits 5",
19
+ "$ sk auto-prewarm customers/decathlon.de --workgroup prewarming"
17
20
  ],
18
21
  "flags": {
22
+ "workgroup": {
23
+ "description": "Athena workgroup to run the query in, e.g. 'prewarming'. Defaults to the account's default workgroup",
24
+ "env": "SK_ATHENA_WORKGROUP",
25
+ "name": "workgroup",
26
+ "required": false,
27
+ "hasDynamicHelp": false,
28
+ "multiple": false,
29
+ "type": "option"
30
+ },
19
31
  "configName": {
20
32
  "char": "c",
21
33
  "description": "The costumer config name",
@@ -26,10 +38,95 @@
26
38
  "multiple": false,
27
39
  "type": "option"
28
40
  },
41
+ "days": {
42
+ "char": "d",
43
+ "description": "Number of days the query looks back",
44
+ "name": "days",
45
+ "required": false,
46
+ "hasDynamicHelp": false,
47
+ "multiple": false,
48
+ "type": "option"
49
+ },
50
+ "excludeNoindex": {
51
+ "description": "Exclude page impressions of pages marked noindex",
52
+ "name": "excludeNoindex",
53
+ "allowNo": false,
54
+ "type": "boolean"
55
+ },
56
+ "excludeSuspicious": {
57
+ "description": "Exclude page impressions Speed Kit classified as suspicious",
58
+ "name": "excludeSuspicious",
59
+ "allowNo": false,
60
+ "type": "boolean"
61
+ },
62
+ "explain": {
63
+ "description": "Account for every rule the query leaves out, reduces or approximates",
64
+ "name": "explain",
65
+ "allowNo": false,
66
+ "type": "boolean"
67
+ },
68
+ "hardNavigationsOnly": {
69
+ "description": "Exclude soft (SPA) navigations",
70
+ "name": "hardNavigationsOnly",
71
+ "allowNo": false,
72
+ "type": "boolean"
73
+ },
74
+ "device": {
75
+ "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",
76
+ "exclusive": [
77
+ "variation"
78
+ ],
79
+ "name": "device",
80
+ "required": false,
81
+ "delimiter": ",",
82
+ "hasDynamicHelp": false,
83
+ "multiple": true,
84
+ "options": [
85
+ "desktop",
86
+ "mobile",
87
+ "tablet"
88
+ ],
89
+ "type": "option"
90
+ },
29
91
  "variation": {
30
92
  "char": "v",
93
+ "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'",
94
+ "exclusive": [
95
+ "device"
96
+ ],
31
97
  "name": "variation",
32
- "default": "default",
98
+ "required": false,
99
+ "delimiter": ",",
100
+ "hasDynamicHelp": false,
101
+ "multiple": true,
102
+ "type": "option"
103
+ },
104
+ "excludeNotFound": {
105
+ "description": "Leave out urls the origin answers with a 404 more often than not",
106
+ "name": "excludeNotFound",
107
+ "allowNo": false,
108
+ "type": "boolean"
109
+ },
110
+ "limit": {
111
+ "description": "Keep only the most requested urls",
112
+ "name": "limit",
113
+ "required": false,
114
+ "hasDynamicHelp": false,
115
+ "multiple": false,
116
+ "type": "option"
117
+ },
118
+ "match": {
119
+ "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",
120
+ "name": "match",
121
+ "required": false,
122
+ "hasDynamicHelp": false,
123
+ "multiple": true,
124
+ "type": "option"
125
+ },
126
+ "minHits": {
127
+ "description": "Keep only urls requested at least this often in the window",
128
+ "name": "minHits",
129
+ "required": false,
33
130
  "hasDynamicHelp": false,
34
131
  "multiple": false,
35
132
  "type": "option"
@@ -38,6 +135,7 @@
38
135
  "char": "p",
39
136
  "description": "path to variations.csv",
40
137
  "exclusive": [
138
+ "device",
41
139
  "variation"
42
140
  ],
43
141
  "name": "variationPath",
@@ -81,102 +179,6 @@
81
179
  "auto-prewarm.js"
82
180
  ]
83
181
  },
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
182
  "deploy": {
181
183
  "aliases": [],
182
184
  "args": {
@@ -458,6 +460,14 @@
458
460
  "$ sk generate-pop-config --coverage 95 --pop-limit 6 --traffic-share 2 --deploy appName"
459
461
  ],
460
462
  "flags": {
463
+ "days": {
464
+ "description": "Number of days the query looks back",
465
+ "name": "days",
466
+ "required": false,
467
+ "hasDynamicHelp": false,
468
+ "multiple": false,
469
+ "type": "option"
470
+ },
461
471
  "coverage": {
462
472
  "char": "c",
463
473
  "description": "The percentage of traffic which should be covered through prewarming.",
@@ -768,8 +778,8 @@
768
778
  "flags": {
769
779
  "variation": {
770
780
  "char": "v",
781
+ "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
782
  "name": "variation",
772
- "default": "default",
773
783
  "hasDynamicHelp": false,
774
784
  "multiple": false,
775
785
  "type": "option"
@@ -1312,7 +1322,298 @@
1312
1322
  "extension",
1313
1323
  "update.js"
1314
1324
  ]
1325
+ },
1326
+ "query:parameter": {
1327
+ "aliases": [
1328
+ "build-parameter-query"
1329
+ ],
1330
+ "args": {
1331
+ "customerPath": {
1332
+ "description": "The customer config path",
1333
+ "name": "customerPath",
1334
+ "required": true
1335
+ }
1336
+ },
1337
+ "deprecateAliases": true,
1338
+ "description": "Build a parameter query that can be executed in Athena",
1339
+ "examples": [
1340
+ "$ sk query parameter <customerPath> -c <configName>",
1341
+ "$ sk query parameter customers/decathlon.de -c production",
1342
+ "$ sk query parameter customers/decathlon.de --explain"
1343
+ ],
1344
+ "flags": {
1345
+ "workgroup": {
1346
+ "description": "Athena workgroup to run the query in, e.g. 'prewarming'. Defaults to the account's default workgroup",
1347
+ "env": "SK_ATHENA_WORKGROUP",
1348
+ "name": "workgroup",
1349
+ "required": false,
1350
+ "hasDynamicHelp": false,
1351
+ "multiple": false,
1352
+ "type": "option"
1353
+ },
1354
+ "configName": {
1355
+ "char": "c",
1356
+ "description": "The costumer config name",
1357
+ "name": "configName",
1358
+ "required": false,
1359
+ "default": "production",
1360
+ "hasDynamicHelp": false,
1361
+ "multiple": false,
1362
+ "type": "option"
1363
+ },
1364
+ "days": {
1365
+ "char": "d",
1366
+ "description": "Number of days the query looks back",
1367
+ "name": "days",
1368
+ "required": false,
1369
+ "hasDynamicHelp": false,
1370
+ "multiple": false,
1371
+ "type": "option"
1372
+ },
1373
+ "excludeNoindex": {
1374
+ "description": "Exclude page impressions of pages marked noindex",
1375
+ "name": "excludeNoindex",
1376
+ "allowNo": false,
1377
+ "type": "boolean"
1378
+ },
1379
+ "excludeSuspicious": {
1380
+ "description": "Exclude page impressions Speed Kit classified as suspicious",
1381
+ "name": "excludeSuspicious",
1382
+ "allowNo": false,
1383
+ "type": "boolean"
1384
+ },
1385
+ "explain": {
1386
+ "description": "Account for every rule the query leaves out, reduces or approximates",
1387
+ "name": "explain",
1388
+ "allowNo": false,
1389
+ "type": "boolean"
1390
+ },
1391
+ "hardNavigationsOnly": {
1392
+ "description": "Exclude soft (SPA) navigations",
1393
+ "name": "hardNavigationsOnly",
1394
+ "allowNo": false,
1395
+ "type": "boolean"
1396
+ },
1397
+ "execute": {
1398
+ "char": "e",
1399
+ "description": "Execute the query directly and write the result to a <app>-<date>-<query>.csv file",
1400
+ "name": "execute",
1401
+ "allowNo": false,
1402
+ "type": "boolean"
1403
+ },
1404
+ "quiet": {
1405
+ "char": "q",
1406
+ "description": "Output only the raw query without clipboard copy or styling",
1407
+ "name": "quiet",
1408
+ "allowNo": false,
1409
+ "type": "boolean"
1410
+ },
1411
+ "bySet": {
1412
+ "description": "Rank whole sets of parameters instead of single parameters, to see which ones travel together",
1413
+ "name": "bySet",
1414
+ "allowNo": false,
1415
+ "type": "boolean"
1416
+ },
1417
+ "minImpressions": {
1418
+ "description": "Leave out parameters seen on fewer page impressions than this",
1419
+ "name": "minImpressions",
1420
+ "required": false,
1421
+ "hasDynamicHelp": false,
1422
+ "multiple": false,
1423
+ "type": "option"
1424
+ }
1425
+ },
1426
+ "hasDynamicHelp": false,
1427
+ "hiddenAliases": [],
1428
+ "id": "query:parameter",
1429
+ "pluginAlias": "@speedkit/cli",
1430
+ "pluginName": "@speedkit/cli",
1431
+ "pluginType": "core",
1432
+ "strict": true,
1433
+ "enableJsonFlag": false,
1434
+ "isESM": true,
1435
+ "relativePath": [
1436
+ "dist",
1437
+ "commands",
1438
+ "query",
1439
+ "parameter.js"
1440
+ ]
1441
+ },
1442
+ "query:prewarm": {
1443
+ "aliases": [
1444
+ "build-prewarm-query"
1445
+ ],
1446
+ "args": {
1447
+ "customerPath": {
1448
+ "description": "The customer config path",
1449
+ "name": "customerPath",
1450
+ "required": true
1451
+ }
1452
+ },
1453
+ "deprecateAliases": true,
1454
+ "description": "Build a prewarm query that can be executed in Athena",
1455
+ "examples": [
1456
+ "$ sk query prewarm <customerPath> -c <configName>",
1457
+ "$ sk query prewarm customers/decathlon.de -c production",
1458
+ "$ sk query prewarm customers/decathlon.de --explain",
1459
+ "$ sk query prewarm customers/decathlon.de --match '^/p/'",
1460
+ "$ sk query prewarm customers/decathlon.de --device desktop,mobile",
1461
+ "$ sk query prewarm customers/decathlon.de -v MOBILE,DESKTOP",
1462
+ "$ sk query prewarm customers/decathlon.de --count"
1463
+ ],
1464
+ "flags": {
1465
+ "workgroup": {
1466
+ "description": "Athena workgroup to run the query in, e.g. 'prewarming'. Defaults to the account's default workgroup",
1467
+ "env": "SK_ATHENA_WORKGROUP",
1468
+ "name": "workgroup",
1469
+ "required": false,
1470
+ "hasDynamicHelp": false,
1471
+ "multiple": false,
1472
+ "type": "option"
1473
+ },
1474
+ "configName": {
1475
+ "char": "c",
1476
+ "description": "The costumer config name",
1477
+ "name": "configName",
1478
+ "required": false,
1479
+ "default": "production",
1480
+ "hasDynamicHelp": false,
1481
+ "multiple": false,
1482
+ "type": "option"
1483
+ },
1484
+ "days": {
1485
+ "char": "d",
1486
+ "description": "Number of days the query looks back",
1487
+ "name": "days",
1488
+ "required": false,
1489
+ "hasDynamicHelp": false,
1490
+ "multiple": false,
1491
+ "type": "option"
1492
+ },
1493
+ "excludeNoindex": {
1494
+ "description": "Exclude page impressions of pages marked noindex",
1495
+ "name": "excludeNoindex",
1496
+ "allowNo": false,
1497
+ "type": "boolean"
1498
+ },
1499
+ "excludeSuspicious": {
1500
+ "description": "Exclude page impressions Speed Kit classified as suspicious",
1501
+ "name": "excludeSuspicious",
1502
+ "allowNo": false,
1503
+ "type": "boolean"
1504
+ },
1505
+ "explain": {
1506
+ "description": "Account for every rule the query leaves out, reduces or approximates",
1507
+ "name": "explain",
1508
+ "allowNo": false,
1509
+ "type": "boolean"
1510
+ },
1511
+ "hardNavigationsOnly": {
1512
+ "description": "Exclude soft (SPA) navigations",
1513
+ "name": "hardNavigationsOnly",
1514
+ "allowNo": false,
1515
+ "type": "boolean"
1516
+ },
1517
+ "execute": {
1518
+ "char": "e",
1519
+ "description": "Execute the query directly and write the result to a <app>-<date>-<query>.csv file",
1520
+ "name": "execute",
1521
+ "allowNo": false,
1522
+ "type": "boolean"
1523
+ },
1524
+ "quiet": {
1525
+ "char": "q",
1526
+ "description": "Output only the raw query without clipboard copy or styling",
1527
+ "name": "quiet",
1528
+ "allowNo": false,
1529
+ "type": "boolean"
1530
+ },
1531
+ "device": {
1532
+ "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",
1533
+ "exclusive": [
1534
+ "variation"
1535
+ ],
1536
+ "name": "device",
1537
+ "required": false,
1538
+ "delimiter": ",",
1539
+ "hasDynamicHelp": false,
1540
+ "multiple": true,
1541
+ "options": [
1542
+ "desktop",
1543
+ "mobile",
1544
+ "tablet"
1545
+ ],
1546
+ "type": "option"
1547
+ },
1548
+ "variation": {
1549
+ "char": "v",
1550
+ "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'",
1551
+ "exclusive": [
1552
+ "device"
1553
+ ],
1554
+ "name": "variation",
1555
+ "required": false,
1556
+ "delimiter": ",",
1557
+ "hasDynamicHelp": false,
1558
+ "multiple": true,
1559
+ "type": "option"
1560
+ },
1561
+ "excludeNotFound": {
1562
+ "description": "Leave out urls the origin answers with a 404 more often than not",
1563
+ "name": "excludeNotFound",
1564
+ "allowNo": false,
1565
+ "type": "boolean"
1566
+ },
1567
+ "limit": {
1568
+ "description": "Keep only the most requested urls",
1569
+ "name": "limit",
1570
+ "required": false,
1571
+ "hasDynamicHelp": false,
1572
+ "multiple": false,
1573
+ "type": "option"
1574
+ },
1575
+ "match": {
1576
+ "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",
1577
+ "name": "match",
1578
+ "required": false,
1579
+ "hasDynamicHelp": false,
1580
+ "multiple": true,
1581
+ "type": "option"
1582
+ },
1583
+ "minHits": {
1584
+ "description": "Keep only urls requested at least this often in the window",
1585
+ "name": "minHits",
1586
+ "required": false,
1587
+ "hasDynamicHelp": false,
1588
+ "multiple": false,
1589
+ "type": "option"
1590
+ },
1591
+ "count": {
1592
+ "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",
1593
+ "exclusive": [
1594
+ "execute"
1595
+ ],
1596
+ "name": "count",
1597
+ "allowNo": false,
1598
+ "type": "boolean"
1599
+ }
1600
+ },
1601
+ "hasDynamicHelp": false,
1602
+ "hiddenAliases": [],
1603
+ "id": "query:prewarm",
1604
+ "pluginAlias": "@speedkit/cli",
1605
+ "pluginName": "@speedkit/cli",
1606
+ "pluginType": "core",
1607
+ "strict": true,
1608
+ "enableJsonFlag": false,
1609
+ "isESM": true,
1610
+ "relativePath": [
1611
+ "dist",
1612
+ "commands",
1613
+ "query",
1614
+ "prewarm.js"
1615
+ ]
1315
1616
  }
1316
1617
  },
1317
- "version": "4.26.0"
1618
+ "version": "4.27.1"
1318
1619
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@speedkit/cli",
3
3
  "description": "Speed Kit CLI",
4
- "version": "4.26.0",
4
+ "version": "4.27.1",
5
5
  "author": {
6
6
  "name": "Baqend.com",
7
7
  "email": "info@baqend.com"
@@ -27,7 +27,9 @@
27
27
  "prepack": "npm run build",
28
28
  "test": "mocha",
29
29
  "coverage": "nyc mocha",
30
- "coverage:report": "nyc --reporter cobertura mocha"
30
+ "coverage:report": "nyc --reporter cobertura mocha",
31
+ "test:golden": "UPDATE_GOLDEN=1 mocha --grep \"golden queries\"",
32
+ "snapshot:queries": "node scripts/snapshot-customer-queries.mjs"
31
33
  },
32
34
  "mocha": {
33
35
  "reporter": "xunit",
@@ -69,6 +71,11 @@
69
71
  "./dist/hooks/init/dns-result-order.js"
70
72
  ]
71
73
  },
74
+ "topics": {
75
+ "query": {
76
+ "description": "Build the Athena queries a customer config implies"
77
+ }
78
+ },
72
79
  "bin": "sk",
73
80
  "dirname": "speed-kit-cli",
74
81
  "plugins": [
@@ -99,6 +106,7 @@
99
106
  "@oclif/plugin-help": "^6.2.45",
100
107
  "@oclif/plugin-not-found": "^3.2.81",
101
108
  "@oclif/plugin-warn-if-update-available": "^3.1.61",
109
+ "@speedkit/rules": "^1.3.0-0",
102
110
  "baqend": "^4.2.5",
103
111
  "chalk": "^5.6.2",
104
112
  "chokidar": "^5.0.0",
@@ -129,6 +137,7 @@
129
137
  "parse5-htmlparser2-tree-adapter": "^7.0.0",
130
138
  "puppeteer": "^24.41.0",
131
139
  "puppeteer-extra": "^3.3.6",
140
+ "refa": "^0.12.1",
132
141
  "semver": "^7.7.4",
133
142
  "spinnies": "^0.5.1",
134
143
  "strip-comments": "^2.0.1",
@@ -1,14 +0,0 @@
1
- import { Command } from "@oclif/core";
2
- export default class BuildParameterQuery extends Command {
3
- static args: {
4
- customerPath: import("@oclif/core/interfaces").Arg<string, {
5
- exists?: boolean;
6
- }>;
7
- };
8
- static description: string;
9
- static examples: string[];
10
- static flags: {
11
- configName: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
- };
13
- run(): Promise<void>;
14
- }
@@ -1,25 +0,0 @@
1
- import { Command } from "@oclif/core";
2
- import { CLI_CONFIG_NAME, CLI_CUSTOMER_CONFIG, CLIParameters, CLIParametersChar, CLIParametersExample, } from "../models/cli-parameters.js";
3
- import { QueryBuilderFactory } from "../services/query-builder/query-builder-factory.js";
4
- import { CliConfig } from "../helpers/cli-config.js";
5
- import { QueryTpe } from "../services/query-builder/query-builder-model.js";
6
- export default class BuildParameterQuery extends Command {
7
- static args = CLI_CUSTOMER_CONFIG;
8
- static description = "Build a parameter query that can be executed in Athena";
9
- static examples = [
10
- `$ sk build-parameter-query <${CLIParameters.CustomerPath}> -${CLIParametersChar.ConfigName} <${CLIParameters.ConfigName}>`,
11
- `$ sk build-parameter-query ${CLIParametersExample.CustomerPath} -${CLIParametersChar.ConfigName} ${CLIParametersExample.ConfigName}`,
12
- ];
13
- static flags = {
14
- ...CLI_CONFIG_NAME,
15
- };
16
- async run() {
17
- const { args: { customerPath }, flags: { configName }, } = await this.parse(BuildParameterQuery);
18
- const service = await new QueryBuilderFactory({
19
- configName,
20
- customerPath,
21
- isWindows: this.config.windows,
22
- }, new CliConfig(this.config).load()).buildService(QueryTpe.parameter);
23
- await service.run();
24
- }
25
- }
@@ -1,16 +0,0 @@
1
- import { Command } from "@oclif/core";
2
- export default class BuildPrewarmQuery extends Command {
3
- static args: {
4
- customerPath: import("@oclif/core/interfaces").Arg<string, {
5
- exists?: boolean;
6
- }>;
7
- };
8
- static description: string;
9
- static examples: string[];
10
- static flags: {
11
- quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- execute: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- configName: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
- };
15
- run(): Promise<void>;
16
- }