googlemaps-kit 0.5.0 → 0.7.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 (343) hide show
  1. package/README.md +56 -3
  2. package/dist/advanced/parsers.d.ts +1 -1
  3. package/dist/advanced/parsers.d.ts.map +1 -1
  4. package/dist/advanced/parsers.js +1 -1
  5. package/dist/advanced/parsers.js.map +1 -1
  6. package/dist/advanced.d.ts +2 -2
  7. package/dist/advanced.d.ts.map +1 -1
  8. package/dist/advanced.js.map +1 -1
  9. package/dist/books.d.ts +30 -0
  10. package/dist/books.d.ts.map +1 -0
  11. package/dist/books.js +77 -0
  12. package/dist/books.js.map +1 -0
  13. package/dist/cli/run.d.ts.map +1 -1
  14. package/dist/cli/run.js +9 -11
  15. package/dist/cli/run.js.map +1 -1
  16. package/dist/cli/tui/app.d.ts.map +1 -1
  17. package/dist/cli/tui/app.js +7 -7
  18. package/dist/cli/tui/app.js.map +1 -1
  19. package/dist/cli.js +14 -11
  20. package/dist/cli.js.map +1 -1
  21. package/dist/client/gmaps-client.d.ts +7 -29
  22. package/dist/client/gmaps-client.d.ts.map +1 -1
  23. package/dist/client/gmaps-client.js +15 -131
  24. package/dist/client/gmaps-client.js.map +1 -1
  25. package/dist/client/http-client.d.ts +3 -1
  26. package/dist/client/http-client.d.ts.map +1 -1
  27. package/dist/client/http-client.js +14 -3
  28. package/dist/client/http-client.js.map +1 -1
  29. package/dist/client/intent.d.ts +1 -11
  30. package/dist/client/intent.d.ts.map +1 -1
  31. package/dist/client/intent.js +17 -13
  32. package/dist/client/intent.js.map +1 -1
  33. package/dist/client/maps-tools.d.ts +8 -4
  34. package/dist/client/maps-tools.d.ts.map +1 -1
  35. package/dist/client/maps-tools.js +20 -11
  36. package/dist/client/maps-tools.js.map +1 -1
  37. package/dist/client/namespaces.d.ts +51 -19
  38. package/dist/client/namespaces.d.ts.map +1 -1
  39. package/dist/client/namespaces.js +82 -28
  40. package/dist/client/namespaces.js.map +1 -1
  41. package/dist/client/place-workflows.d.ts +7 -0
  42. package/dist/client/place-workflows.d.ts.map +1 -0
  43. package/dist/client/place-workflows.js +113 -0
  44. package/dist/client/place-workflows.js.map +1 -0
  45. package/dist/finance/client.d.ts +19 -0
  46. package/dist/finance/client.d.ts.map +1 -0
  47. package/dist/finance/client.js +75 -0
  48. package/dist/finance/client.js.map +1 -0
  49. package/dist/finance/parsers.d.ts +13 -0
  50. package/dist/finance/parsers.d.ts.map +1 -0
  51. package/dist/finance/parsers.js +146 -0
  52. package/dist/finance/parsers.js.map +1 -0
  53. package/dist/finance/types.d.ts +76 -0
  54. package/dist/finance/types.d.ts.map +1 -0
  55. package/dist/finance/types.js +2 -0
  56. package/dist/finance/types.js.map +1 -0
  57. package/dist/finance.d.ts +5 -0
  58. package/dist/finance.d.ts.map +1 -0
  59. package/dist/finance.js +4 -0
  60. package/dist/finance.js.map +1 -0
  61. package/dist/flights/client.d.ts +9 -0
  62. package/dist/flights/client.d.ts.map +1 -0
  63. package/dist/flights/client.js +14 -0
  64. package/dist/flights/client.js.map +1 -0
  65. package/dist/flights/parsers.d.ts +11 -0
  66. package/dist/flights/parsers.d.ts.map +1 -0
  67. package/dist/flights/parsers.js +64 -0
  68. package/dist/flights/parsers.js.map +1 -0
  69. package/dist/flights/types.d.ts +52 -0
  70. package/dist/flights/types.d.ts.map +1 -0
  71. package/dist/flights/types.js +2 -0
  72. package/dist/flights/types.js.map +1 -0
  73. package/dist/flights.d.ts +5 -0
  74. package/dist/flights.d.ts.map +1 -0
  75. package/dist/flights.js +4 -0
  76. package/dist/flights.js.map +1 -0
  77. package/dist/gemini-web/client.d.ts +16 -0
  78. package/dist/gemini-web/client.d.ts.map +1 -0
  79. package/dist/gemini-web/client.js +110 -0
  80. package/dist/gemini-web/client.js.map +1 -0
  81. package/dist/gemini-web/parsers.d.ts +5 -0
  82. package/dist/gemini-web/parsers.d.ts.map +1 -0
  83. package/dist/gemini-web/parsers.js +62 -0
  84. package/dist/gemini-web/parsers.js.map +1 -0
  85. package/dist/gemini-web/types.d.ts +47 -0
  86. package/dist/gemini-web/types.d.ts.map +1 -0
  87. package/dist/gemini-web/types.js +2 -0
  88. package/dist/gemini-web/types.js.map +1 -0
  89. package/dist/gemini-web.d.ts +5 -0
  90. package/dist/gemini-web.d.ts.map +1 -0
  91. package/dist/gemini-web.js +4 -0
  92. package/dist/gemini-web.js.map +1 -0
  93. package/dist/google-search/client.d.ts +16 -0
  94. package/dist/google-search/client.d.ts.map +1 -0
  95. package/dist/google-search/client.js +117 -0
  96. package/dist/google-search/client.js.map +1 -0
  97. package/dist/google-search/errors.d.ts +8 -0
  98. package/dist/google-search/errors.d.ts.map +1 -0
  99. package/dist/google-search/errors.js +13 -0
  100. package/dist/google-search/errors.js.map +1 -0
  101. package/dist/google-search/html.d.ts +12 -0
  102. package/dist/google-search/html.d.ts.map +1 -0
  103. package/dist/google-search/html.js +135 -0
  104. package/dist/google-search/html.js.map +1 -0
  105. package/dist/google-search/parsers.d.ts +6 -0
  106. package/dist/google-search/parsers.d.ts.map +1 -0
  107. package/dist/google-search/parsers.js +177 -0
  108. package/dist/google-search/parsers.js.map +1 -0
  109. package/dist/google-search/types.d.ts +66 -0
  110. package/dist/google-search/types.d.ts.map +1 -0
  111. package/dist/google-search/types.js +2 -0
  112. package/dist/google-search/types.js.map +1 -0
  113. package/dist/google-search.d.ts +6 -0
  114. package/dist/google-search.d.ts.map +1 -0
  115. package/dist/google-search.js +4 -0
  116. package/dist/google-search.js.map +1 -0
  117. package/dist/hotels/client.d.ts +9 -0
  118. package/dist/hotels/client.d.ts.map +1 -0
  119. package/dist/hotels/client.js +14 -0
  120. package/dist/hotels/client.js.map +1 -0
  121. package/dist/hotels/parsers.d.ts +7 -0
  122. package/dist/hotels/parsers.d.ts.map +1 -0
  123. package/dist/hotels/parsers.js +74 -0
  124. package/dist/hotels/parsers.js.map +1 -0
  125. package/dist/hotels/types.d.ts +55 -0
  126. package/dist/hotels/types.d.ts.map +1 -0
  127. package/dist/hotels/types.js +2 -0
  128. package/dist/hotels/types.js.map +1 -0
  129. package/dist/hotels.d.ts +4 -0
  130. package/dist/hotels.d.ts.map +1 -0
  131. package/dist/hotels.js +3 -0
  132. package/dist/hotels.js.map +1 -0
  133. package/dist/index.d.ts +9 -5
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +3 -1
  136. package/dist/index.js.map +1 -1
  137. package/dist/known-surfaces.d.ts +35 -5
  138. package/dist/known-surfaces.d.ts.map +1 -1
  139. package/dist/known-surfaces.js +35 -5
  140. package/dist/known-surfaces.js.map +1 -1
  141. package/dist/lens/client.d.ts +14 -0
  142. package/dist/lens/client.d.ts.map +1 -0
  143. package/dist/lens/client.js +116 -0
  144. package/dist/lens/client.js.map +1 -0
  145. package/dist/lens/errors.d.ts +8 -0
  146. package/dist/lens/errors.d.ts.map +1 -0
  147. package/dist/lens/errors.js +13 -0
  148. package/dist/lens/errors.js.map +1 -0
  149. package/dist/lens/types.d.ts +27 -0
  150. package/dist/lens/types.d.ts.map +1 -0
  151. package/dist/lens/types.js +2 -0
  152. package/dist/lens/types.js.map +1 -0
  153. package/dist/lens.d.ts +8 -0
  154. package/dist/lens.d.ts.map +1 -0
  155. package/dist/lens.js +5 -0
  156. package/dist/lens.js.map +1 -0
  157. package/dist/news.d.ts +46 -0
  158. package/dist/news.d.ts.map +1 -0
  159. package/dist/news.js +202 -0
  160. package/dist/news.js.map +1 -0
  161. package/dist/pagespeed/client.d.ts +28 -0
  162. package/dist/pagespeed/client.d.ts.map +1 -0
  163. package/dist/pagespeed/client.js +222 -0
  164. package/dist/pagespeed/client.js.map +1 -0
  165. package/dist/pagespeed/errors.d.ts +9 -0
  166. package/dist/pagespeed/errors.d.ts.map +1 -0
  167. package/dist/pagespeed/errors.js +15 -0
  168. package/dist/pagespeed/errors.js.map +1 -0
  169. package/dist/pagespeed/parsers.d.ts +7 -0
  170. package/dist/pagespeed/parsers.d.ts.map +1 -0
  171. package/dist/pagespeed/parsers.js +236 -0
  172. package/dist/pagespeed/parsers.js.map +1 -0
  173. package/dist/pagespeed/types.d.ts +156 -0
  174. package/dist/pagespeed/types.d.ts.map +1 -0
  175. package/dist/pagespeed/types.js +2 -0
  176. package/dist/pagespeed/types.js.map +1 -0
  177. package/dist/pagespeed/wire.d.ts +10 -0
  178. package/dist/pagespeed/wire.d.ts.map +1 -0
  179. package/dist/pagespeed/wire.js +96 -0
  180. package/dist/pagespeed/wire.js.map +1 -0
  181. package/dist/pagespeed.d.ts +6 -0
  182. package/dist/pagespeed.d.ts.map +1 -0
  183. package/dist/pagespeed.js +4 -0
  184. package/dist/pagespeed.js.map +1 -0
  185. package/dist/parsers/geocode.d.ts.map +1 -1
  186. package/dist/parsers/geocode.js +30 -1
  187. package/dist/parsers/geocode.js.map +1 -1
  188. package/dist/parsers/reviews.d.ts +8 -1
  189. package/dist/parsers/reviews.d.ts.map +1 -1
  190. package/dist/parsers/reviews.js +46 -9
  191. package/dist/parsers/reviews.js.map +1 -1
  192. package/dist/platform/catalog.d.ts +18 -0
  193. package/dist/platform/catalog.d.ts.map +1 -0
  194. package/dist/platform/catalog.js +320 -0
  195. package/dist/platform/catalog.js.map +1 -0
  196. package/dist/platform/parity.d.ts +12 -0
  197. package/dist/platform/parity.d.ts.map +1 -0
  198. package/dist/platform/parity.js +25 -0
  199. package/dist/platform/parity.js.map +1 -0
  200. package/dist/services/elevation.d.ts +6 -4
  201. package/dist/services/elevation.d.ts.map +1 -1
  202. package/dist/services/elevation.js +39 -4
  203. package/dist/services/elevation.js.map +1 -1
  204. package/dist/services/environment/air-quality.d.ts +39 -0
  205. package/dist/services/environment/air-quality.d.ts.map +1 -0
  206. package/dist/services/environment/air-quality.js +82 -0
  207. package/dist/services/environment/air-quality.js.map +1 -0
  208. package/dist/services/environment/weather.d.ts +42 -0
  209. package/dist/services/environment/weather.d.ts.map +1 -0
  210. package/dist/services/environment/weather.js +63 -0
  211. package/dist/services/environment/weather.js.map +1 -0
  212. package/dist/services/geocode.d.ts +5 -1
  213. package/dist/services/geocode.d.ts.map +1 -1
  214. package/dist/services/geocode.js +13 -0
  215. package/dist/services/geocode.js.map +1 -1
  216. package/dist/services/keyed.d.ts +80 -0
  217. package/dist/services/keyed.d.ts.map +1 -0
  218. package/dist/services/keyed.js +152 -0
  219. package/dist/services/keyed.js.map +1 -0
  220. package/dist/services/knowledge.d.ts +6 -2
  221. package/dist/services/knowledge.d.ts.map +1 -1
  222. package/dist/services/knowledge.js +30 -5
  223. package/dist/services/knowledge.js.map +1 -1
  224. package/dist/services/mobility.d.ts.map +1 -1
  225. package/dist/services/mobility.js +13 -2
  226. package/dist/services/mobility.js.map +1 -1
  227. package/dist/services/nearby-search.d.ts +32 -0
  228. package/dist/services/nearby-search.d.ts.map +1 -0
  229. package/dist/services/nearby-search.js +85 -0
  230. package/dist/services/nearby-search.js.map +1 -0
  231. package/dist/services/panorama.d.ts +8 -1
  232. package/dist/services/panorama.d.ts.map +1 -1
  233. package/dist/services/panorama.js +48 -0
  234. package/dist/services/panorama.js.map +1 -1
  235. package/dist/services/photos.d.ts.map +1 -1
  236. package/dist/services/photos.js +9 -2
  237. package/dist/services/photos.js.map +1 -1
  238. package/dist/services/places.d.ts.map +1 -1
  239. package/dist/services/places.js +1 -0
  240. package/dist/services/places.js.map +1 -1
  241. package/dist/services/reviews.d.ts.map +1 -1
  242. package/dist/services/reviews.js +4 -1
  243. package/dist/services/reviews.js.map +1 -1
  244. package/dist/services/search.d.ts +8 -3
  245. package/dist/services/search.d.ts.map +1 -1
  246. package/dist/services/search.js +28 -9
  247. package/dist/services/search.js.map +1 -1
  248. package/dist/translate.d.ts +75 -0
  249. package/dist/translate.d.ts.map +1 -0
  250. package/dist/translate.js +126 -0
  251. package/dist/translate.js.map +1 -0
  252. package/dist/travel-google/common.d.ts +24 -0
  253. package/dist/travel-google/common.d.ts.map +1 -0
  254. package/dist/travel-google/common.js +72 -0
  255. package/dist/travel-google/common.js.map +1 -0
  256. package/dist/trends/client.d.ts +17 -0
  257. package/dist/trends/client.d.ts.map +1 -0
  258. package/dist/trends/client.js +86 -0
  259. package/dist/trends/client.js.map +1 -0
  260. package/dist/trends/errors.d.ts +8 -0
  261. package/dist/trends/errors.d.ts.map +1 -0
  262. package/dist/trends/errors.js +13 -0
  263. package/dist/trends/errors.js.map +1 -0
  264. package/dist/trends/links.d.ts +8 -0
  265. package/dist/trends/links.d.ts.map +1 -0
  266. package/dist/trends/links.js +71 -0
  267. package/dist/trends/links.js.map +1 -0
  268. package/dist/trends/parsers.d.ts +5 -0
  269. package/dist/trends/parsers.d.ts.map +1 -0
  270. package/dist/trends/parsers.js +126 -0
  271. package/dist/trends/parsers.js.map +1 -0
  272. package/dist/trends/types.d.ts +71 -0
  273. package/dist/trends/types.d.ts.map +1 -0
  274. package/dist/trends/types.js +2 -0
  275. package/dist/trends/types.js.map +1 -0
  276. package/dist/trends.d.ts +9 -0
  277. package/dist/trends.d.ts.map +1 -0
  278. package/dist/trends.js +8 -0
  279. package/dist/trends.js.map +1 -0
  280. package/dist/types/common.d.ts +28 -2
  281. package/dist/types/common.d.ts.map +1 -1
  282. package/dist/types/common.js.map +1 -1
  283. package/dist/types/directions.d.ts +1 -1
  284. package/dist/types/directions.d.ts.map +1 -1
  285. package/dist/types/dx.d.ts +23 -10
  286. package/dist/types/dx.d.ts.map +1 -1
  287. package/dist/types/panorama.d.ts +19 -0
  288. package/dist/types/panorama.d.ts.map +1 -1
  289. package/dist/types/reviews.d.ts +3 -4
  290. package/dist/types/reviews.d.ts.map +1 -1
  291. package/dist/types/suggest.d.ts +4 -6
  292. package/dist/types/suggest.d.ts.map +1 -1
  293. package/dist/utils/google-web.d.ts +24 -0
  294. package/dist/utils/google-web.d.ts.map +1 -0
  295. package/dist/utils/google-web.js +150 -0
  296. package/dist/utils/google-web.js.map +1 -0
  297. package/dist/utils/place-ref.d.ts +14 -4
  298. package/dist/utils/place-ref.d.ts.map +1 -1
  299. package/dist/utils/place-ref.js +49 -1
  300. package/dist/utils/place-ref.js.map +1 -1
  301. package/dist/youtube/client.d.ts +19 -0
  302. package/dist/youtube/client.d.ts.map +1 -0
  303. package/dist/youtube/client.js +115 -0
  304. package/dist/youtube/client.js.map +1 -0
  305. package/dist/youtube/errors.d.ts +8 -0
  306. package/dist/youtube/errors.d.ts.map +1 -0
  307. package/dist/youtube/errors.js +13 -0
  308. package/dist/youtube/errors.js.map +1 -0
  309. package/dist/youtube/parsers.d.ts +9 -0
  310. package/dist/youtube/parsers.d.ts.map +1 -0
  311. package/dist/youtube/parsers.js +213 -0
  312. package/dist/youtube/parsers.js.map +1 -0
  313. package/dist/youtube/types.d.ts +90 -0
  314. package/dist/youtube/types.d.ts.map +1 -0
  315. package/dist/youtube/types.js +2 -0
  316. package/dist/youtube/types.js.map +1 -0
  317. package/dist/youtube.d.ts +9 -0
  318. package/dist/youtube.d.ts.map +1 -0
  319. package/dist/youtube.js +6 -0
  320. package/dist/youtube.js.map +1 -0
  321. package/docs/books.md +18 -0
  322. package/docs/environment-research.md +65 -0
  323. package/docs/finance-research.md +153 -0
  324. package/docs/finance.md +43 -0
  325. package/docs/gemini-web.md +36 -0
  326. package/docs/google-ai-books-research.md +53 -0
  327. package/docs/google-media-research.md +105 -0
  328. package/docs/google-search-research.md +36 -0
  329. package/docs/google-search.md +53 -0
  330. package/docs/google-services-research.md +135 -0
  331. package/docs/google-travel-research.md +86 -0
  332. package/docs/internal/reverse-engineering.md +85 -0
  333. package/docs/lens.md +54 -0
  334. package/docs/maps-revalidation.md +31 -0
  335. package/docs/news.md +35 -0
  336. package/docs/pagespeed-research.md +153 -0
  337. package/docs/pagespeed.md +135 -0
  338. package/docs/reviews-research.md +33 -0
  339. package/docs/translate.md +78 -0
  340. package/docs/trends-research.md +82 -0
  341. package/docs/trends.md +75 -0
  342. package/docs/youtube.md +72 -0
  343. package/package.json +77 -2
@@ -0,0 +1,236 @@
1
+ import { PageSpeedError } from './errors.js';
2
+ const metricThresholds = {
3
+ largest_contentful_paint: [2500, 4000],
4
+ cumulative_layout_shift: [0.1, 0.25],
5
+ interaction_to_next_paint: [200, 500],
6
+ first_contentful_paint: [1800, 3000],
7
+ experimental_time_to_first_byte: [800, 1800],
8
+ };
9
+ function malformed(label) {
10
+ throw new PageSpeedError(`Malformed PageSpeed ${label}`, 'parse');
11
+ }
12
+ function array(value, label) {
13
+ return Array.isArray(value) ? value : malformed(label);
14
+ }
15
+ function string(value, label) {
16
+ return typeof value === 'string' && value.length > 0 ? value : malformed(label);
17
+ }
18
+ function integer(value, label) {
19
+ return typeof value === 'number' && Number.isSafeInteger(value) ? value : malformed(label);
20
+ }
21
+ function record(value) {
22
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
23
+ }
24
+ function parseStrategy(code) {
25
+ return code === 1 ? 'mobile' : code === 2 ? 'desktop' : undefined;
26
+ }
27
+ function status(code) {
28
+ return code === 1 ? 'pending' : code === 2 ? 'complete' : 'unknown';
29
+ }
30
+ export function parseReportId(value) {
31
+ if (typeof value !== 'string')
32
+ return malformed('report ID');
33
+ if (/^[a-zA-Z0-9]+$/.test(value))
34
+ return value;
35
+ let url;
36
+ try {
37
+ url = new URL(value);
38
+ }
39
+ catch {
40
+ return malformed('report URL or ID');
41
+ }
42
+ if (url.protocol !== 'https:' || url.hostname !== 'pagespeed.web.dev' || url.port || url.username || url.password) {
43
+ return malformed('report URL');
44
+ }
45
+ const match = /^\/analysis\/(?:[^/]+\/)?([a-zA-Z0-9]+)\/?$/.exec(url.pathname);
46
+ return match?.[1] ?? malformed('report URL');
47
+ }
48
+ export function buildReportUrl(id, strategy) {
49
+ const url = new URL(`https://pagespeed.web.dev/analysis/${parseReportId(id)}`);
50
+ if (strategy !== undefined) {
51
+ if (strategy !== 'mobile' && strategy !== 'desktop')
52
+ return malformed('report strategy');
53
+ url.searchParams.set('form_factor', strategy);
54
+ }
55
+ return url.toString();
56
+ }
57
+ function timestamp(raw) {
58
+ const value = array(raw, 'creation timestamp');
59
+ const seconds = integer(value[0], 'creation timestamp seconds');
60
+ const nanos = value[1] == null ? 0 : integer(value[1], 'creation timestamp nanoseconds');
61
+ if (nanos < 0 || nanos >= 1_000_000_000)
62
+ return malformed('creation timestamp nanoseconds');
63
+ const date = new Date(seconds * 1000 + Math.floor(nanos / 1_000_000));
64
+ return Number.isFinite(date.getTime()) ? date.toISOString() : malformed('creation timestamp');
65
+ }
66
+ export function parseAnalysis(raw) {
67
+ const data = array(raw, 'analysis');
68
+ const id = string(data[0], 'analysis ID');
69
+ const url = string(data[1], 'analysis URL');
70
+ const statusCode = integer(data[2], 'analysis status');
71
+ const results = data[4] == null ? [] : array(data[4], 'analysis results').map(parseResult);
72
+ const urls = {};
73
+ if (data[5] != null) {
74
+ for (const rawEntry of array(data[5], 'analysis URLs')) {
75
+ const entry = array(rawEntry, 'analysis URL entry');
76
+ const code = integer(entry[0], 'analysis URL strategy');
77
+ const entryUrl = string(entry[1], 'analysis strategy URL');
78
+ const formFactor = parseStrategy(code);
79
+ if (formFactor)
80
+ urls[formFactor] = entryUrl;
81
+ }
82
+ }
83
+ return {
84
+ id,
85
+ url,
86
+ status: status(statusCode),
87
+ statusCode,
88
+ results,
89
+ urls,
90
+ ...(data[6] == null ? {} : { createdAt: timestamp(data[6]) }),
91
+ reportUrl: buildReportUrl(id),
92
+ raw: data,
93
+ };
94
+ }
95
+ function parseLighthouse(raw) {
96
+ if (typeof raw !== 'string')
97
+ return malformed('Lighthouse JSON');
98
+ let value;
99
+ try {
100
+ value = JSON.parse(raw);
101
+ }
102
+ catch (cause) {
103
+ throw new PageSpeedError('Malformed PageSpeed Lighthouse JSON', 'parse', undefined, undefined, undefined, { cause });
104
+ }
105
+ if (!record(value) || !record(value.audits) || !record(value.categories))
106
+ return malformed('Lighthouse report');
107
+ for (const key of ['lighthouseVersion', 'requestedUrl', 'finalUrl', 'fetchTime']) {
108
+ string(value[key], `Lighthouse ${key}`);
109
+ }
110
+ return value;
111
+ }
112
+ export function parseResult(raw) {
113
+ const data = array(raw, 'result');
114
+ const strategyCode = integer(data[2], 'result strategy');
115
+ const typeCode = integer(data[3], 'result type');
116
+ const statusCode = integer(data[6], 'result status');
117
+ const result = {
118
+ id: string(data[8], 'result ID'),
119
+ url: string(data[0], 'result URL'),
120
+ strategy: parseStrategy(strategyCode),
121
+ strategyCode,
122
+ type: typeCode === 1 ? 'lighthouse' : typeCode === 2 ? 'origin' : typeCode === 3 ? 'page' : 'unknown',
123
+ typeCode,
124
+ status: status(statusCode),
125
+ statusCode,
126
+ raw: data,
127
+ };
128
+ if (data[1] != null)
129
+ result.finalUrl = string(data[1], 'result final URL');
130
+ if (data[7] != null) {
131
+ const error = array(data[7], 'result error');
132
+ if (error[1] != null && typeof error[1] !== 'string')
133
+ return malformed('result error message');
134
+ result.error = {
135
+ code: integer(error[0], 'result error code'),
136
+ message: error[1] == null ? '' : error[1],
137
+ ...(error[2] == null ? {} : { details: array(error[2], 'result error details') }),
138
+ };
139
+ }
140
+ if (data[5] != null)
141
+ result.fieldData = parseFieldData(data[5]);
142
+ if (data[9] != null && data[9] !== '')
143
+ result.lighthouse = parseLighthouse(data[9]);
144
+ return result;
145
+ }
146
+ function typedNumber(value) {
147
+ if (!Array.isArray(value))
148
+ return undefined;
149
+ if (typeof value[1] === 'number' && Number.isFinite(value[1]))
150
+ return value[1];
151
+ if (typeof value[2] === 'string' && /^-?\d+(?:\.\d+)?$/.test(value[2])) {
152
+ const numeric = Number(value[2]);
153
+ if (Number.isFinite(numeric))
154
+ return numeric;
155
+ }
156
+ return undefined;
157
+ }
158
+ function rating(name, percentile) {
159
+ const thresholds = metricThresholds[name];
160
+ if (!thresholds)
161
+ return undefined;
162
+ return percentile <= thresholds[0] ? 'good' : percentile <= thresholds[1] ? 'needs-improvement' : 'poor';
163
+ }
164
+ function parseFieldMetric(raw) {
165
+ const data = array(raw, 'field metric');
166
+ const name = string(data[0], 'field metric name');
167
+ const metric = { name, histogram: [], raw: data };
168
+ // CrUX Metric oneofs: slot 1 contains [unused, [histogram, percentile]], slot 2 contains fractions.
169
+ const distribution = Array.isArray(data[1]) && Array.isArray(data[1][1]) ? data[1][1] : undefined;
170
+ if (distribution) {
171
+ const bins = Array.isArray(distribution[0]) ? distribution[0][0] : undefined;
172
+ if (bins != null) {
173
+ for (const rawBin of array(bins, 'field metric histogram')) {
174
+ const bin = array(rawBin, 'field metric histogram bin');
175
+ const start = typedNumber(bin[0]);
176
+ const end = typedNumber(bin[1]);
177
+ if (start === undefined || (bin[1] != null && end === undefined) || typeof bin[2] !== 'number' || !Number.isFinite(bin[2])) {
178
+ return malformed('field metric histogram bin');
179
+ }
180
+ metric.histogram.push({ start, ...(end === undefined ? {} : { end }), density: bin[2] });
181
+ }
182
+ }
183
+ const percentile = typedNumber(Array.isArray(distribution[1]) ? distribution[1][0] : undefined);
184
+ if (percentile !== undefined) {
185
+ metric.percentile = percentile;
186
+ metric.rating = rating(name, percentile);
187
+ }
188
+ }
189
+ const fractions = Array.isArray(data[2]) ? data[2][0] : undefined;
190
+ if (fractions != null) {
191
+ metric.fractions = Object.fromEntries(array(fractions, 'field metric fractions').map(rawFraction => {
192
+ const fraction = array(rawFraction, 'field metric fraction');
193
+ const value = Array.isArray(fraction[1]) ? fraction[1][0] : undefined;
194
+ if (typeof value !== 'number' || !Number.isFinite(value))
195
+ return malformed('field metric fraction value');
196
+ return [string(fraction[0], 'field metric fraction name'), value];
197
+ }));
198
+ }
199
+ return metric;
200
+ }
201
+ function date(raw) {
202
+ const value = array(raw, 'collection date');
203
+ const year = integer(value[0], 'collection year');
204
+ const month = integer(value[1], 'collection month');
205
+ const day = integer(value[2], 'collection day');
206
+ if (year < 1 || year > 9999 || month < 1 || month > 12 || day < 1 || day > 31)
207
+ return malformed('collection date');
208
+ const formatted = `${String(year).padStart(4, '0')}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;
209
+ if (new Date(`${formatted}T00:00:00.000Z`).toISOString().slice(0, 10) !== formatted)
210
+ return malformed('collection date');
211
+ return formatted;
212
+ }
213
+ export function parseFieldData(raw) {
214
+ const data = array(raw, 'field data');
215
+ array(data[0], 'field data key');
216
+ const metrics = Object.fromEntries(array(data[1], 'field data metrics').map(rawMetric => {
217
+ const metric = parseFieldMetric(rawMetric);
218
+ return [metric.name, metric];
219
+ }));
220
+ const eligible = (name) => {
221
+ const metric = metrics[name];
222
+ return metric?.histogram.length === 3 && metric.percentile !== undefined ? metric : undefined;
223
+ };
224
+ const lcp = eligible('largest_contentful_paint');
225
+ const cls = eligible('cumulative_layout_shift');
226
+ const inp = eligible('interaction_to_next_paint');
227
+ // The web UI requires LCP and CLS, but permits origins/pages without eligible INP samples.
228
+ const coreWebVitals = !lcp || !cls ? 'unavailable' : lcp.rating === 'good' && cls.rating === 'good' && (!inp || inp.rating === 'good') ? 'passed' : 'failed';
229
+ const result = { metrics, coreWebVitals, raw: data };
230
+ if (data[3] != null) {
231
+ const period = array(data[3], 'collection period');
232
+ result.collectionPeriod = { firstDate: date(period[0]), lastDate: date(period[1]) };
233
+ }
234
+ return result;
235
+ }
236
+ //# sourceMappingURL=parsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/pagespeed/parsers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ export type PageSpeedStrategy = 'mobile' | 'desktop';
2
+ export type PageSpeedCategory = 'performance' | 'accessibility' | 'best-practices' | 'seo';
3
+ export type PageSpeedStatus = 'pending' | 'complete' | 'unknown';
4
+ export type PageSpeedResultType = 'lighthouse' | 'origin' | 'page' | 'unknown';
5
+ export type PageSpeedRating = 'good' | 'needs-improvement' | 'poor';
6
+ export interface PageSpeedConfig {
7
+ fetch?: typeof globalThis.fetch;
8
+ locale?: string;
9
+ apiKey?: string;
10
+ /** Deadline for each HTTP request, including its response body. Defaults to 120 seconds. */
11
+ timeoutMs?: number;
12
+ }
13
+ export interface PageSpeedRequestOptions {
14
+ signal?: AbortSignal;
15
+ }
16
+ export interface CreateAnalysisOptions extends PageSpeedRequestOptions {
17
+ useOriginalUrl?: boolean;
18
+ }
19
+ export interface WaitForAnalysisOptions extends PageSpeedRequestOptions {
20
+ /** Overall polling deadline. Defaults to 180 seconds. */
21
+ timeoutMs?: number;
22
+ /** Defaults to the web client's observed interval of 3000 ms. */
23
+ pollIntervalMs?: number;
24
+ onProgress?: (analysis: PageSpeedAnalysis) => void;
25
+ }
26
+ export interface AnalyzeOptions extends CreateAnalysisOptions, WaitForAnalysisOptions {
27
+ }
28
+ export interface RunPagespeedOptions extends PageSpeedRequestOptions {
29
+ strategy?: PageSpeedStrategy;
30
+ categories?: PageSpeedCategory[];
31
+ locale?: string;
32
+ captchaToken?: string;
33
+ utmCampaign?: string;
34
+ utmSource?: string;
35
+ }
36
+ export interface LighthouseAudit {
37
+ id: string;
38
+ title: string;
39
+ description?: string;
40
+ score: number | null;
41
+ scoreDisplayMode: string;
42
+ numericValue?: number;
43
+ numericUnit?: string;
44
+ displayValue?: string;
45
+ details?: Record<string, unknown>;
46
+ metricSavings?: Record<string, number>;
47
+ [key: string]: unknown;
48
+ }
49
+ export interface LighthouseCategory {
50
+ id: string;
51
+ title: string;
52
+ score: number | null;
53
+ auditRefs?: Array<{
54
+ id: string;
55
+ weight: number;
56
+ group?: string;
57
+ [key: string]: unknown;
58
+ }>;
59
+ [key: string]: unknown;
60
+ }
61
+ /** The complete Lighthouse report, including categories and audits unknown to this client. */
62
+ export interface LighthouseResult {
63
+ lighthouseVersion: string;
64
+ requestedUrl: string;
65
+ finalUrl: string;
66
+ fetchTime: string;
67
+ audits: Record<string, LighthouseAudit>;
68
+ categories: Record<string, LighthouseCategory>;
69
+ runtimeError?: {
70
+ code: string;
71
+ message: string;
72
+ };
73
+ runWarnings?: unknown[];
74
+ configSettings?: Record<string, unknown>;
75
+ [key: string]: unknown;
76
+ }
77
+ export interface PageSpeedFieldMetric {
78
+ name: string;
79
+ percentile?: number;
80
+ histogram: Array<{
81
+ start: number;
82
+ end?: number;
83
+ density: number;
84
+ }>;
85
+ fractions?: Record<string, number>;
86
+ rating?: PageSpeedRating;
87
+ /** Unmodified positional data for metrics whose schema changes independently of the UI. */
88
+ raw: unknown[];
89
+ }
90
+ export interface PageSpeedFieldData {
91
+ metrics: Record<string, PageSpeedFieldMetric>;
92
+ collectionPeriod?: {
93
+ firstDate: string;
94
+ lastDate: string;
95
+ };
96
+ coreWebVitals: 'passed' | 'failed' | 'unavailable';
97
+ raw: unknown[];
98
+ }
99
+ export interface PageSpeedRpcStatus {
100
+ code: number;
101
+ message: string;
102
+ details?: unknown[];
103
+ }
104
+ export interface PageSpeedResult {
105
+ id: string;
106
+ url: string;
107
+ finalUrl?: string;
108
+ strategy?: PageSpeedStrategy;
109
+ type: PageSpeedResultType;
110
+ status: PageSpeedStatus;
111
+ statusCode: number;
112
+ typeCode: number;
113
+ strategyCode: number;
114
+ error?: PageSpeedRpcStatus;
115
+ lighthouse?: LighthouseResult;
116
+ fieldData?: PageSpeedFieldData;
117
+ raw: unknown[];
118
+ }
119
+ export interface PageSpeedAnalysis {
120
+ id: string;
121
+ url: string;
122
+ status: PageSpeedStatus;
123
+ statusCode: number;
124
+ results: PageSpeedResult[];
125
+ urls: Partial<Record<PageSpeedStrategy, string>>;
126
+ createdAt?: string;
127
+ reportUrl: string;
128
+ raw: unknown[];
129
+ }
130
+ export interface PagespeedApiLoadingExperience {
131
+ id?: string;
132
+ overall_category?: string;
133
+ initial_url?: string;
134
+ origin_fallback?: boolean;
135
+ metrics?: Record<string, {
136
+ percentile?: number;
137
+ category?: string;
138
+ distributions?: Array<{
139
+ min: number;
140
+ max?: number;
141
+ proportion: number;
142
+ }>;
143
+ [key: string]: unknown;
144
+ }>;
145
+ [key: string]: unknown;
146
+ }
147
+ export interface RunPagespeedResponse {
148
+ id?: string;
149
+ kind?: string;
150
+ analysisUTCTimestamp?: string;
151
+ lighthouseResult?: LighthouseResult;
152
+ loadingExperience?: PagespeedApiLoadingExperience;
153
+ originLoadingExperience?: PagespeedApiLoadingExperience;
154
+ [key: string]: unknown;
155
+ }
156
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pagespeed/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pagespeed/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export interface PageSpeedSession {
2
+ build: string;
3
+ sessionId: string;
4
+ location: number;
5
+ token?: string;
6
+ }
7
+ export declare function parseSession(html: string): PageSpeedSession;
8
+ export declare function buildRpcBody(rpcId: string, args: unknown[], token?: string): string;
9
+ export declare function decodeRpcResponse(body: string, rpcId: string): unknown;
10
+ //# sourceMappingURL=wire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/pagespeed/wire.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2BD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAkB3D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAInF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CA4BtE"}
@@ -0,0 +1,96 @@
1
+ import { PageSpeedError } from './errors.js';
2
+ function jsonEnd(text, start) {
3
+ let depth = 0;
4
+ let quoted = false;
5
+ let escaped = false;
6
+ for (let i = start; i < text.length; i++) {
7
+ const char = text[i];
8
+ if (quoted) {
9
+ if (escaped)
10
+ escaped = false;
11
+ else if (char === '\\')
12
+ escaped = true;
13
+ else if (char === '"')
14
+ quoted = false;
15
+ }
16
+ else if (char === '"')
17
+ quoted = true;
18
+ else if (char === '[' || char === '{')
19
+ depth++;
20
+ else if ((char === ']' || char === '}') && --depth === 0)
21
+ return i + 1;
22
+ }
23
+ throw new PageSpeedError('Truncated PageSpeed JSON response', 'parse');
24
+ }
25
+ function parseJson(text) {
26
+ try {
27
+ return JSON.parse(text);
28
+ }
29
+ catch (cause) {
30
+ throw new PageSpeedError('Invalid PageSpeed JSON response', 'parse', undefined, undefined, undefined, { cause });
31
+ }
32
+ }
33
+ export function parseSession(html) {
34
+ const assignment = /(?:window\.)?WIZ_global_data\s*=\s*/.exec(html);
35
+ if (!assignment)
36
+ throw new PageSpeedError('PageSpeed bootstrap is missing WIZ_global_data', 'parse');
37
+ const start = assignment.index + assignment[0].length;
38
+ if (html[start] !== '{')
39
+ throw new PageSpeedError('Invalid PageSpeed bootstrap data', 'parse');
40
+ const data = parseJson(html.slice(start, jsonEnd(html, start)));
41
+ if (typeof data.cfb2h !== 'string' || typeof data.FdrFJe !== 'string') {
42
+ throw new PageSpeedError('PageSpeed bootstrap is missing its build or session ID', 'parse');
43
+ }
44
+ if (typeof data.pDzS6 !== 'number' || !Number.isInteger(data.pDzS6)) {
45
+ throw new PageSpeedError('PageSpeed bootstrap is missing its analysis location', 'parse');
46
+ }
47
+ return {
48
+ build: data.cfb2h,
49
+ sessionId: data.FdrFJe,
50
+ location: data.pDzS6,
51
+ token: typeof data.SNlM0e === 'string' ? data.SNlM0e : undefined,
52
+ };
53
+ }
54
+ export function buildRpcBody(rpcId, args, token) {
55
+ const form = new URLSearchParams({ 'f.req': JSON.stringify([[[rpcId, JSON.stringify(args), null, 'generic']]]) });
56
+ if (token)
57
+ form.set('at', token);
58
+ return form.toString();
59
+ }
60
+ export function decodeRpcResponse(body, rpcId) {
61
+ const text = body.trim().replace(/^\)\]\}'/, '').trim();
62
+ let cursor = 0;
63
+ const matches = [];
64
+ while (cursor < text.length) {
65
+ while (/\s/.test(text[cursor] ?? '') && cursor < text.length)
66
+ cursor++;
67
+ if (cursor === text.length)
68
+ break;
69
+ const length = /^\d+\r?\n/.exec(text.slice(cursor));
70
+ if (length)
71
+ cursor += length[0].length;
72
+ if (text[cursor] !== '[')
73
+ throw new PageSpeedError('Invalid PageSpeed batch framing', 'parse');
74
+ // Scan JSON boundaries because frame sizes and JavaScript string lengths differ for Unicode.
75
+ const end = jsonEnd(text, cursor);
76
+ const frame = parseJson(text.slice(cursor, end));
77
+ if (!Array.isArray(frame))
78
+ throw new PageSpeedError('Invalid PageSpeed batch frame', 'parse');
79
+ const rows = typeof frame[0] === 'string' ? [frame] : frame;
80
+ for (const row of rows) {
81
+ if (Array.isArray(row) && row[1] === rpcId && (row[0] === 'wrb.fr' || row[0] === 'er'))
82
+ matches.push(row);
83
+ }
84
+ cursor = end;
85
+ }
86
+ if (matches.length !== 1)
87
+ throw new PageSpeedError(`Expected one PageSpeed ${rpcId} response; received ${matches.length}`, 'parse');
88
+ const row = matches[0];
89
+ if (row[0] === 'er' || row[2] == null) {
90
+ const error = row[0] === 'er' ? row[2] : row[5];
91
+ const code = typeof error === 'number' ? error : Array.isArray(error) && typeof error[0] === 'number' ? error[0] : undefined;
92
+ throw new PageSpeedError(`PageSpeed RPC ${rpcId} failed${code === undefined ? '' : ` (${code})`}`, 'rpc', undefined, code);
93
+ }
94
+ return typeof row[2] === 'string' ? parseJson(row[2]) : row[2];
95
+ }
96
+ //# sourceMappingURL=wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/pagespeed/wire.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { PageSpeedClient, pageSpeed } from './pagespeed/client.js';
2
+ export { PageSpeedError } from './pagespeed/errors.js';
3
+ export type { PageSpeedErrorKind } from './pagespeed/errors.js';
4
+ export { buildReportUrl, parseReportId } from './pagespeed/parsers.js';
5
+ export type * from './pagespeed/types.js';
6
+ //# sourceMappingURL=pagespeed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagespeed.d.ts","sourceRoot":"","sources":["../src/pagespeed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvE,mBAAmB,sBAAsB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { PageSpeedClient, pageSpeed } from './pagespeed/client.js';
2
+ export { PageSpeedError } from './pagespeed/errors.js';
3
+ export { buildReportUrl, parseReportId } from './pagespeed/parsers.js';
4
+ //# sourceMappingURL=pagespeed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagespeed.js","sourceRoot":"","sources":["../src/pagespeed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"geocode.d.ts","sourceRoot":"","sources":["../../src/parsers/geocode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,KAAK,MAAM,EAAiF,MAAM,sBAAsB,CAAC;AAIlI,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAkGrF,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAenE;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EAAE,EACxB,GAAG,CAAC,EAAE,OAAO,GACZ;IAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,aAAa,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,CAOhF;AAID,sDAAsD;AACtD,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC,GAC/C,MAAM,GAAG,SAAS,CAKpB;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,EAAE,CAmB1E;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,oBAAoB,CAAC;CACpC;AAED,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,EAAE,GAAE,IAAiB,GACpB,qBAAqB,GAAG,SAAS,CAiCnC;AAgBD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,EAAE,GAAE,IAAiB,GACpB,cAAc,CAiBhB"}
1
+ {"version":3,"file":"geocode.d.ts","sourceRoot":"","sources":["../../src/parsers/geocode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,KAAK,MAAM,EAAiF,MAAM,sBAAsB,CAAC;AAIlI,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA0HrF,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAenE;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EAAE,EACxB,GAAG,CAAC,EAAE,OAAO,GACZ;IAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,aAAa,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,CAOhF;AAID,sDAAsD;AACtD,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC,GAC/C,MAAM,GAAG,SAAS,CAKpB;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,EAAE,CAmB1E;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,oBAAoB,CAAC;CACpC;AAED,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,EAAE,GAAE,IAAiB,GACpB,qBAAqB,GAAG,SAAS,CAiCnC;AAgBD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,EAAE,GAAE,IAAiB,GACpB,cAAc,CAiBhB"}
@@ -6,6 +6,30 @@ const COORD_LINE_RE = /^-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?$/;
6
6
  function isCoordinateLine(value) {
7
7
  return COORD_LINE_RE.test(value.trim());
8
8
  }
9
+ function abbreviateComponent(longName) {
10
+ const usState = /^([A-Za-z .]+),\s*([A-Z]{2})\s*(\d{5})?/.exec(longName);
11
+ if (usState?.[2])
12
+ return usState[2];
13
+ if (longName.length <= 3)
14
+ return longName;
15
+ return longName;
16
+ }
17
+ function inferGeocodeTypes(longName, index, total) {
18
+ if (index === total - 1)
19
+ return ['country', 'political'];
20
+ if (/^\d{4,6}\b/.test(longName) || /^\d{5}(-\d{4})?$/.test(longName)) {
21
+ return ['postal_code'];
22
+ }
23
+ if (index === 0 && /\d/.test(longName))
24
+ return ['street_address'];
25
+ if (index === 0)
26
+ return ['route'];
27
+ if (index === 1 && total > 2)
28
+ return ['locality', 'political'];
29
+ if (index === total - 2)
30
+ return ['administrative_area_level_1', 'political'];
31
+ return ['political'];
32
+ }
9
33
  function parseAddressComponents(raw) {
10
34
  if (!Array.isArray(raw))
11
35
  return undefined;
@@ -14,7 +38,12 @@ function parseAddressComponents(raw) {
14
38
  return undefined;
15
39
  if (parts.every(isCoordinateLine))
16
40
  return undefined;
17
- return parts.map((longName, index) => ({ longName, raw: raw[index] }));
41
+ return parts.map((longName, index) => ({
42
+ longName,
43
+ shortName: abbreviateComponent(longName),
44
+ types: inferGeocodeTypes(longName, index, parts.length),
45
+ raw: raw[index],
46
+ }));
18
47
  }
19
48
  function parseSingleGeocodeResult(placeRow) {
20
49
  const lat = safeGet(placeRow, 9, 2);