wrangler 0.0.0-e492c10 → 0.0.0-e4ca780f

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 (360) hide show
  1. package/Cloudflare_CA.pem +18 -0
  2. package/README.md +25 -5
  3. package/bin/wrangler.js +174 -34
  4. package/kv-asset-handler.js +1 -0
  5. package/miniflare-dist/index.mjs +1590 -81
  6. package/package.json +198 -149
  7. package/src/__tests__/access.test.ts +25 -0
  8. package/src/__tests__/api-dev.test.ts +238 -0
  9. package/src/__tests__/api-devregistry.test.ts +121 -0
  10. package/src/__tests__/api.test.ts +102 -0
  11. package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
  12. package/src/__tests__/config-cache.test.ts +30 -24
  13. package/src/__tests__/configuration.test.ts +4498 -3114
  14. package/src/__tests__/d1/d1.test.ts +82 -0
  15. package/src/__tests__/d1/execute.test.ts +66 -0
  16. package/src/__tests__/d1/migrate.test.ts +157 -0
  17. package/src/__tests__/d1/splitter.test.ts +255 -0
  18. package/src/__tests__/delete.test.ts +272 -0
  19. package/src/__tests__/deployments.test.ts +369 -0
  20. package/src/__tests__/dev.test.tsx +1592 -802
  21. package/src/__tests__/generate.test.ts +237 -0
  22. package/src/__tests__/get-host-from-url.test.ts +16 -0
  23. package/src/__tests__/guess-worker-format.test.ts +103 -68
  24. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  25. package/src/__tests__/helpers/end-event-loop.ts +6 -0
  26. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  27. package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
  28. package/src/__tests__/helpers/mock-bin.ts +20 -20
  29. package/src/__tests__/helpers/mock-console.ts +64 -39
  30. package/src/__tests__/helpers/mock-dialogs.ts +104 -55
  31. package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
  32. package/src/__tests__/helpers/mock-get-zone-from-host.ts +11 -0
  33. package/src/__tests__/helpers/mock-http-server.ts +30 -30
  34. package/src/__tests__/helpers/mock-istty.ts +65 -18
  35. package/src/__tests__/helpers/mock-known-routes.ts +12 -0
  36. package/src/__tests__/helpers/mock-kv.ts +41 -28
  37. package/src/__tests__/helpers/mock-oauth-flow.ts +241 -233
  38. package/src/__tests__/helpers/mock-process.ts +34 -0
  39. package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
  40. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  41. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  42. package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
  43. package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
  44. package/src/__tests__/helpers/msw/handlers/deployments.ts +160 -0
  45. package/src/__tests__/helpers/msw/handlers/namespaces.ts +81 -0
  46. package/src/__tests__/helpers/msw/handlers/oauth.ts +31 -0
  47. package/src/__tests__/helpers/msw/handlers/r2.ts +60 -0
  48. package/src/__tests__/helpers/msw/handlers/script.ts +56 -0
  49. package/src/__tests__/helpers/msw/handlers/user.ts +52 -0
  50. package/src/__tests__/helpers/msw/handlers/zones.ts +20 -0
  51. package/src/__tests__/helpers/msw/index.ts +52 -0
  52. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  53. package/src/__tests__/helpers/run-in-tmp.ts +27 -28
  54. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  55. package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
  56. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  57. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  58. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  59. package/src/__tests__/helpers/worker-scripts/parent-worker.js +11 -0
  60. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  61. package/src/__tests__/helpers/write-worker-source.ts +16 -16
  62. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  63. package/src/__tests__/https-options.test.ts +142 -109
  64. package/src/__tests__/index.test.ts +262 -224
  65. package/src/__tests__/init.test.ts +3168 -1488
  66. package/src/__tests__/jest.setup.ts +152 -50
  67. package/src/__tests__/kv.test.ts +1789 -1432
  68. package/src/__tests__/logger.test.ts +167 -75
  69. package/src/__tests__/logout.test.ts +47 -0
  70. package/src/__tests__/metrics.test.ts +493 -0
  71. package/src/__tests__/middleware.scheduled.test.ts +145 -0
  72. package/src/__tests__/middleware.test.ts +816 -0
  73. package/src/__tests__/mtls-certificates.test.ts +588 -0
  74. package/src/__tests__/package-manager.test.ts +312 -165
  75. package/src/__tests__/pages/deployment-list.test.ts +80 -0
  76. package/src/__tests__/pages/functions-build.test.ts +452 -0
  77. package/src/__tests__/pages/pages.test.ts +81 -0
  78. package/src/__tests__/pages/project-create.test.ts +63 -0
  79. package/src/__tests__/pages/project-list.test.ts +110 -0
  80. package/src/__tests__/pages/project-upload.test.ts +500 -0
  81. package/src/__tests__/pages/publish.test.ts +2864 -0
  82. package/src/__tests__/pages-deployment-tail.test.ts +955 -0
  83. package/src/__tests__/parse.test.ts +358 -248
  84. package/src/__tests__/paths.test.ts +39 -0
  85. package/src/__tests__/publish.test.ts +8322 -4847
  86. package/src/__tests__/pubsub.test.ts +496 -0
  87. package/src/__tests__/queues.test.ts +532 -0
  88. package/src/__tests__/r2.test.ts +369 -205
  89. package/src/__tests__/route.test.ts +18 -18
  90. package/src/__tests__/secret.test.ts +683 -436
  91. package/src/__tests__/tail.test.ts +835 -567
  92. package/src/__tests__/test-old-node-version.js +31 -0
  93. package/src/__tests__/traverse-module-graph.test.ts +220 -0
  94. package/src/__tests__/tsconfig-sanity.ts +12 -0
  95. package/src/__tests__/tsconfig.json +8 -0
  96. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  97. package/src/__tests__/type-generation.test.ts +234 -0
  98. package/src/__tests__/user.test.ts +107 -120
  99. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  100. package/src/__tests__/validate-dev-props.test.ts +56 -0
  101. package/src/__tests__/version.test.ts +35 -0
  102. package/src/__tests__/whoami.test.tsx +165 -98
  103. package/src/__tests__/worker-namespace.test.ts +340 -0
  104. package/src/abort.d.ts +3 -0
  105. package/src/api/dev.ts +316 -0
  106. package/src/api/index.ts +11 -0
  107. package/src/api/mtls-certificate.ts +148 -0
  108. package/src/api/pages/create-worker-bundle-contents.ts +76 -0
  109. package/src/api/pages/index.ts +5 -0
  110. package/src/api/pages/publish.tsx +355 -0
  111. package/src/bundle-reporter.ts +68 -0
  112. package/src/bundle.ts +874 -135
  113. package/src/cfetch/index.ts +123 -69
  114. package/src/cfetch/internal.ts +217 -96
  115. package/src/cli.ts +23 -8
  116. package/src/config/config.ts +244 -196
  117. package/src/config/diagnostics.ts +61 -61
  118. package/src/config/environment.ts +563 -339
  119. package/src/config/index.ts +381 -41
  120. package/src/config/validation-helpers.ts +379 -357
  121. package/src/config/validation.ts +2181 -1263
  122. package/src/config-cache.ts +81 -41
  123. package/src/create-worker-preview.ts +250 -132
  124. package/src/create-worker-upload-form.ts +343 -224
  125. package/src/d1/backups.tsx +219 -0
  126. package/src/d1/constants.ts +2 -0
  127. package/src/d1/create.tsx +68 -0
  128. package/src/d1/delete.ts +53 -0
  129. package/src/d1/execute.tsx +357 -0
  130. package/src/d1/formatTimeAgo.ts +14 -0
  131. package/src/d1/index.ts +100 -0
  132. package/src/d1/list.tsx +60 -0
  133. package/src/d1/migrations/apply.tsx +212 -0
  134. package/src/d1/migrations/create.tsx +79 -0
  135. package/src/d1/migrations/helpers.ts +172 -0
  136. package/src/d1/migrations/index.ts +3 -0
  137. package/src/d1/migrations/list.tsx +95 -0
  138. package/src/d1/migrations/options.ts +23 -0
  139. package/src/d1/options.ts +22 -0
  140. package/src/d1/splitter.ts +161 -0
  141. package/src/d1/types.ts +25 -0
  142. package/src/d1/utils.ts +49 -0
  143. package/src/delete.ts +100 -0
  144. package/src/deployments.ts +368 -0
  145. package/src/deprecated/index.ts +144 -0
  146. package/src/dev/dev-vars.ts +20 -17
  147. package/src/dev/dev.tsx +535 -353
  148. package/src/dev/get-local-persistence-path.ts +31 -0
  149. package/src/dev/local.tsx +900 -292
  150. package/src/dev/remote.tsx +620 -201
  151. package/src/dev/start-server.ts +534 -0
  152. package/src/dev/use-esbuild.ts +182 -97
  153. package/src/dev/validate-dev-props.ts +40 -0
  154. package/src/dev-registry.ts +202 -0
  155. package/src/dev.tsx +929 -0
  156. package/src/dialogs.ts +136 -0
  157. package/src/dispatch-namespace.ts +211 -0
  158. package/src/docs/index.ts +97 -0
  159. package/src/durable.ts +102 -0
  160. package/src/entry.ts +259 -189
  161. package/src/environment-variables/factory.ts +88 -0
  162. package/src/environment-variables/misc-variables.ts +30 -0
  163. package/src/errors.ts +6 -6
  164. package/src/generate/index.ts +298 -0
  165. package/src/git-client.ts +135 -0
  166. package/src/global-wrangler-config-path.ts +26 -0
  167. package/src/https-options.ts +84 -80
  168. package/src/index.ts +758 -0
  169. package/src/init.ts +1032 -0
  170. package/src/inspect.ts +721 -562
  171. package/src/intl-polyfill.d.ts +123 -123
  172. package/src/is-ci.ts +14 -0
  173. package/src/is-interactive.ts +16 -0
  174. package/src/jest.d.ts +4 -0
  175. package/src/kv/helpers.ts +430 -0
  176. package/src/kv/index.ts +594 -0
  177. package/src/logger.ts +96 -43
  178. package/src/metrics/index.ts +5 -0
  179. package/src/metrics/metrics-config.ts +239 -0
  180. package/src/metrics/metrics-dispatcher.ts +96 -0
  181. package/src/metrics/metrics-usage-headers.ts +24 -0
  182. package/src/metrics/send-event.ts +99 -0
  183. package/src/miniflare-cli/assets.ts +251 -0
  184. package/src/miniflare-cli/index.ts +202 -33
  185. package/src/miniflare-cli/request-context.ts +18 -18
  186. package/src/miniflare-cli/tsconfig.json +9 -0
  187. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  188. package/src/miniflare-cli/types.ts +11 -0
  189. package/src/module-collection.ts +290 -215
  190. package/src/mtls-certificate/cli.ts +155 -0
  191. package/src/open-in-browser.ts +5 -14
  192. package/src/package-manager.ts +182 -90
  193. package/src/pages/build.ts +410 -0
  194. package/src/pages/buildFunctions.ts +140 -0
  195. package/src/pages/constants.ts +18 -0
  196. package/src/pages/deployment-tails.ts +281 -0
  197. package/src/pages/deployments.tsx +84 -0
  198. package/src/pages/dev.ts +716 -0
  199. package/src/pages/errors.ts +67 -0
  200. package/src/pages/functions/buildPlugin.ts +113 -0
  201. package/src/pages/functions/buildWorker.ts +291 -0
  202. package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
  203. package/src/pages/functions/filepath-routing.ts +189 -0
  204. package/src/pages/functions/identifiers.ts +78 -0
  205. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  206. package/src/pages/functions/routes-consolidation.ts +73 -0
  207. package/src/pages/functions/routes-transformation.test.ts +282 -0
  208. package/src/pages/functions/routes-transformation.ts +115 -0
  209. package/src/pages/functions/routes-validation.test.ts +403 -0
  210. package/src/pages/functions/routes-validation.ts +202 -0
  211. package/src/pages/functions/routes.ts +151 -0
  212. package/src/pages/functions/tsconfig.json +8 -0
  213. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  214. package/src/pages/functions.ts +86 -0
  215. package/src/pages/hash.ts +13 -0
  216. package/src/pages/index.ts +102 -0
  217. package/src/pages/projects.tsx +159 -0
  218. package/src/pages/prompt-select-project.tsx +31 -0
  219. package/src/pages/publish.tsx +267 -0
  220. package/src/pages/types.ts +46 -0
  221. package/src/pages/upload.tsx +469 -0
  222. package/src/pages/utils.ts +23 -0
  223. package/src/parse.ts +246 -123
  224. package/src/paths.ts +53 -8
  225. package/src/proxy.ts +628 -383
  226. package/src/publish/index.ts +274 -0
  227. package/src/publish/publish.ts +1060 -0
  228. package/src/pubsub/index.ts +286 -0
  229. package/src/pubsub/pubsub-commands.ts +623 -0
  230. package/src/queues/cli/commands/consumer/add.ts +71 -0
  231. package/src/queues/cli/commands/consumer/index.ts +19 -0
  232. package/src/queues/cli/commands/consumer/remove.ts +31 -0
  233. package/src/queues/cli/commands/create.ts +25 -0
  234. package/src/queues/cli/commands/delete.ts +26 -0
  235. package/src/queues/cli/commands/index.ts +35 -0
  236. package/src/queues/cli/commands/list.ts +25 -0
  237. package/src/queues/client.ts +136 -0
  238. package/src/queues/utils.ts +18 -0
  239. package/src/r2/constants.ts +4 -0
  240. package/src/r2/helpers.ts +132 -0
  241. package/src/r2/index.ts +289 -0
  242. package/src/routes.ts +140 -0
  243. package/src/secret/index.ts +376 -0
  244. package/src/selfsigned.d.ts +23 -23
  245. package/src/sites.ts +372 -0
  246. package/src/tail/createTail.ts +406 -0
  247. package/src/tail/filters.ts +109 -111
  248. package/src/tail/index.ts +208 -296
  249. package/src/tail/printing.ts +101 -46
  250. package/src/traverse-module-graph.ts +53 -0
  251. package/src/tsconfig-sanity.ts +16 -0
  252. package/src/type-generation.ts +181 -0
  253. package/src/update-check.ts +11 -11
  254. package/src/user/access.ts +68 -0
  255. package/src/user/auth-variables.ts +113 -0
  256. package/src/user/choose-account.tsx +39 -0
  257. package/src/user/generate-auth-url.ts +33 -0
  258. package/src/user/generate-random-state.ts +16 -0
  259. package/src/user/index.ts +2 -0
  260. package/src/user/user.ts +1233 -0
  261. package/src/utils/collectKeyValues.ts +14 -0
  262. package/src/utils/render.ts +93 -0
  263. package/src/whoami.ts +135 -0
  264. package/src/worker.ts +203 -101
  265. package/src/yargs-types.ts +37 -0
  266. package/src/zones.ts +191 -0
  267. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  268. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  269. package/templates/__tests__/tsconfig.json +8 -0
  270. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  271. package/templates/checked-fetch.js +23 -0
  272. package/templates/d1-beta-facade.js +244 -0
  273. package/templates/facade.d.ts +14 -0
  274. package/templates/first-party-worker-module-facade.ts +19 -0
  275. package/templates/format-dev-errors.ts +34 -0
  276. package/templates/gitignore +1 -0
  277. package/templates/init-tests/test-jest-new-worker.js +23 -0
  278. package/templates/init-tests/test-vitest-new-worker.js +24 -0
  279. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  280. package/templates/middleware/common.ts +62 -0
  281. package/templates/middleware/loader-modules.ts +84 -0
  282. package/templates/middleware/loader-sw.ts +233 -0
  283. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  284. package/templates/middleware/middleware-pretty-error.ts +40 -0
  285. package/templates/middleware/middleware-scheduled.ts +15 -0
  286. package/templates/new-worker-scheduled.js +17 -0
  287. package/templates/new-worker-scheduled.ts +32 -0
  288. package/templates/new-worker.js +3 -3
  289. package/templates/new-worker.ts +21 -3
  290. package/templates/no-op-worker.js +10 -0
  291. package/templates/pages-dev-pipeline.ts +31 -0
  292. package/templates/pages-dev-util.ts +52 -0
  293. package/templates/pages-shim.ts +12 -0
  294. package/templates/pages-template-plugin.ts +180 -0
  295. package/templates/pages-template-worker.ts +189 -0
  296. package/templates/serve-static-assets.ts +66 -0
  297. package/templates/service-bindings-module-facade.js +55 -0
  298. package/templates/service-bindings-sw-facade.js +42 -0
  299. package/templates/tsconfig-sanity.ts +11 -0
  300. package/templates/tsconfig.init.json +105 -0
  301. package/templates/tsconfig.json +6 -103
  302. package/templates/tsconfig.tsbuildinfo +1 -0
  303. package/wrangler-dist/cli.d.ts +1641 -0
  304. package/wrangler-dist/cli.js +129145 -89350
  305. package/wrangler-dist/wasm-sync.wasm +0 -0
  306. package/pages/functions/buildPlugin.ts +0 -92
  307. package/pages/functions/buildWorker.ts +0 -138
  308. package/pages/functions/filepath-routing.ts +0 -189
  309. package/pages/functions/identifiers.ts +0 -78
  310. package/pages/functions/routes.ts +0 -156
  311. package/pages/functions/template-plugin.ts +0 -146
  312. package/pages/functions/template-worker.ts +0 -143
  313. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  314. package/src/__tests__/helpers/mock-cfetch.ts +0 -211
  315. package/src/__tests__/pages.test.ts +0 -327
  316. package/src/dialogs.tsx +0 -87
  317. package/src/environment-variables.ts +0 -35
  318. package/src/index.tsx +0 -2698
  319. package/src/kv.ts +0 -319
  320. package/src/miniflare-cli/enum-keys.ts +0 -17
  321. package/src/pages.tsx +0 -1875
  322. package/src/publish.ts +0 -469
  323. package/src/r2.ts +0 -50
  324. package/src/sites.tsx +0 -293
  325. package/src/user.tsx +0 -1203
  326. package/src/whoami.tsx +0 -70
  327. package/templates/static-asset-facade.js +0 -47
  328. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  329. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  330. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  331. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  332. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  333. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  334. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  335. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  336. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  337. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  338. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  339. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  340. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  341. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  342. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  343. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  344. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  345. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  346. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  347. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  348. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  349. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  350. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  351. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  352. package/vendor/wrangler-mime/LICENSE +0 -21
  353. package/vendor/wrangler-mime/Mime.js +0 -97
  354. package/vendor/wrangler-mime/README.md +0 -187
  355. package/vendor/wrangler-mime/cli.js +0 -46
  356. package/vendor/wrangler-mime/index.js +0 -4
  357. package/vendor/wrangler-mime/lite.js +0 -4
  358. package/vendor/wrangler-mime/package.json +0 -52
  359. package/vendor/wrangler-mime/types/other.js +0 -1
  360. package/vendor/wrangler-mime/types/standard.js +0 -1
@@ -1,44 +1,45 @@
1
1
  import {
2
- formatMessage,
3
- searchLocation,
4
- indexLocation,
5
- parseJSON,
6
- parseTOML,
2
+ formatMessage,
3
+ searchLocation,
4
+ indexLocation,
5
+ parseJSON,
6
+ parseTOML,
7
+ parseJSONC,
7
8
  } from "../parse";
8
9
  import type { Message } from "../parse";
9
10
 
10
11
  describe("formatMessage", () => {
11
- const format = (input: Message) => {
12
- // No color and skip emojis at the start.
13
- return formatMessage(input, false).substring(2);
14
- };
12
+ const format = (input: Message) => {
13
+ // No color and skip emojis at the start.
14
+ return formatMessage(input, false).substring(2);
15
+ };
15
16
 
16
- it("should format message without location", () => {
17
- expect(
18
- format({
19
- text: "Invalid argument",
20
- kind: "warning",
21
- })
22
- ).toMatchInlineSnapshot(`
17
+ it("should format message without location", () => {
18
+ expect(
19
+ format({
20
+ text: "Invalid argument",
21
+ kind: "warning",
22
+ })
23
+ ).toMatchInlineSnapshot(`
23
24
  "[WARNING] Invalid argument
24
25
 
25
26
  "
26
27
  `);
27
- });
28
+ });
28
29
 
29
- it("should format message with location", () => {
30
- expect(
31
- format({
32
- text: "Missing property: main",
33
- location: {
34
- line: 1,
35
- column: 0,
36
- lineText: "{}",
37
- file: "package.json",
38
- fileText: "{}",
39
- },
40
- })
41
- ).toMatchInlineSnapshot(`
30
+ it("should format message with location", () => {
31
+ expect(
32
+ format({
33
+ text: "Missing property: main",
34
+ location: {
35
+ line: 1,
36
+ column: 0,
37
+ lineText: "{}",
38
+ file: "package.json",
39
+ fileText: "{}",
40
+ },
41
+ })
42
+ ).toMatchInlineSnapshot(`
42
43
  "[ERROR] Missing property: main
43
44
 
44
45
  package.json:1:0:
@@ -47,28 +48,28 @@ describe("formatMessage", () => {
47
48
 
48
49
  "
49
50
  `);
50
- });
51
+ });
51
52
 
52
- it("should format message with location and notes", () => {
53
- expect(
54
- format({
55
- text: "Invalid property: type",
56
- location: {
57
- line: 3,
58
- column: 8,
59
- length: 7,
60
- lineText: "type = 'modular'",
61
- suggestion: "Did you mean 'module'?",
62
- file: "package.toml",
63
- fileText: "[package]\ntype = 'modular'\n",
64
- },
65
- notes: [
66
- {
67
- text: "There are two acceptable types: 'module' and 'commonjs'",
68
- },
69
- ],
70
- })
71
- ).toMatchInlineSnapshot(`
53
+ it("should format message with location and notes", () => {
54
+ expect(
55
+ format({
56
+ text: "Invalid property: type",
57
+ location: {
58
+ line: 3,
59
+ column: 8,
60
+ length: 7,
61
+ lineText: "type = 'modular'",
62
+ suggestion: "Did you mean 'module'?",
63
+ file: "package.toml",
64
+ fileText: "[package]\ntype = 'modular'\n",
65
+ },
66
+ notes: [
67
+ {
68
+ text: "There are two acceptable types: 'module' and 'commonjs'",
69
+ },
70
+ ],
71
+ })
72
+ ).toMatchInlineSnapshot(`
72
73
  "[ERROR] Invalid property: type
73
74
 
74
75
  package.toml:3:8:
@@ -80,29 +81,29 @@ describe("formatMessage", () => {
80
81
 
81
82
  "
82
83
  `);
83
- });
84
+ });
84
85
  });
85
86
 
86
87
  describe("parseTOML", () => {
87
- it("should parse toml that is empty", () => {
88
- expect(parseTOML("")).toStrictEqual({});
89
- });
88
+ it("should parse toml that is empty", () => {
89
+ expect(parseTOML("")).toStrictEqual({});
90
+ });
90
91
 
91
- it("should parse toml with basic values", () => {
92
- expect(
93
- parseTOML(`
92
+ it("should parse toml with basic values", () => {
93
+ expect(
94
+ parseTOML(`
94
95
  name = "basic"
95
96
  version = 1
96
97
  `)
97
- ).toStrictEqual({
98
- name: "basic",
99
- version: 1,
100
- });
101
- });
98
+ ).toStrictEqual({
99
+ name: "basic",
100
+ version: 1,
101
+ });
102
+ });
102
103
 
103
- it("should parse toml with complex values", () => {
104
- expect(
105
- parseTOML(`
104
+ it("should parse toml with complex values", () => {
105
+ expect(
106
+ parseTOML(`
106
107
  name = 'complex'
107
108
  version = 1
108
109
  [owner]
@@ -111,216 +112,325 @@ describe("parseTOML", () => {
111
112
  [owner.dog]
112
113
  exists = true
113
114
  `)
114
- ).toStrictEqual({
115
- name: "complex",
116
- owner: {
117
- alive: true,
118
- dog: {
119
- exists: true,
120
- },
121
- name: ["tim"],
122
- },
123
- version: 1,
124
- });
125
- });
115
+ ).toStrictEqual({
116
+ name: "complex",
117
+ owner: {
118
+ alive: true,
119
+ dog: {
120
+ exists: true,
121
+ },
122
+ name: ["tim"],
123
+ },
124
+ version: 1,
125
+ });
126
+ });
126
127
 
127
- it("should fail to parse toml with invalid string", () => {
128
- try {
129
- parseTOML(`name = 'fail"`);
130
- fail("parseTOML did not throw");
131
- } catch (err) {
132
- expect({ ...(err as Error) }).toStrictEqual({
133
- name: "ParseError",
134
- text: "Unterminated string",
135
- kind: "error",
136
- location: {
137
- line: 1,
138
- column: 14,
139
- fileText: "name = 'fail\"",
140
- file: undefined,
141
- lineText: "name = 'fail\"",
142
- },
143
- notes: [],
144
- });
145
- }
146
- });
128
+ it("should fail to parse toml with invalid string", () => {
129
+ try {
130
+ parseTOML(`name = 'fail"`);
131
+ fail("parseTOML did not throw");
132
+ } catch (err) {
133
+ expect({ ...(err as Error) }).toStrictEqual({
134
+ name: "ParseError",
135
+ text: "Unterminated string",
136
+ kind: "error",
137
+ location: {
138
+ line: 1,
139
+ column: 14,
140
+ fileText: "name = 'fail\"",
141
+ file: undefined,
142
+ lineText: "name = 'fail\"",
143
+ },
144
+ notes: [],
145
+ });
146
+ }
147
+ });
147
148
 
148
- it("should fail to parse toml with invalid header", () => {
149
- try {
150
- parseTOML(`\n[name`, "config.toml");
151
- fail("parseTOML did not throw");
152
- } catch (err) {
153
- expect({ ...(err as Error) }).toStrictEqual({
154
- name: "ParseError",
155
- text: "Key ended without value",
156
- kind: "error",
157
- location: {
158
- line: 2,
159
- column: 5,
160
- lineText: "[name",
161
- file: "config.toml",
162
- fileText: "\n[name",
163
- },
164
- notes: [],
165
- });
166
- }
167
- });
149
+ it("should fail to parse toml with invalid header", () => {
150
+ try {
151
+ parseTOML(`\n[name`, "config.toml");
152
+ fail("parseTOML did not throw");
153
+ } catch (err) {
154
+ expect({ ...(err as Error) }).toStrictEqual({
155
+ name: "ParseError",
156
+ text: "Key ended without value",
157
+ kind: "error",
158
+ location: {
159
+ line: 2,
160
+ column: 5,
161
+ lineText: "[name",
162
+ file: "config.toml",
163
+ fileText: "\n[name",
164
+ },
165
+ notes: [],
166
+ });
167
+ }
168
+ });
168
169
 
169
- it("should cope with Windows line-endings", () => {
170
- expect(parseTOML("# A comment with a Windows line-ending\r\n")).toEqual({});
171
- });
170
+ it("should cope with Windows line-endings", () => {
171
+ expect(
172
+ parseTOML(
173
+ "# A comment with a Windows line-ending\r\n# Another comment with a Windows line-ending\r\n"
174
+ )
175
+ ).toEqual({});
176
+ });
172
177
  });
173
178
 
174
179
  describe("parseJSON", () => {
175
- it("should parse json that is empty", () => {
176
- expect(parseJSON("{}")).toStrictEqual({});
177
- });
180
+ it("should parse json that is empty", () => {
181
+ expect(parseJSON("{}")).toStrictEqual({});
182
+ });
178
183
 
179
- it("should parse json with basic values", () => {
180
- expect(
181
- parseJSON(`
184
+ it("should parse json with basic values", () => {
185
+ expect(
186
+ parseJSON(`
182
187
  {
183
188
  "name" : "basic",
184
189
  "version": 1
185
190
  }`)
186
- ).toStrictEqual({
187
- name: "basic",
188
- version: 1,
189
- });
190
- });
191
+ ).toStrictEqual({
192
+ name: "basic",
193
+ version: 1,
194
+ });
195
+ });
191
196
 
192
- it("should parse json with complex values", () => {
193
- expect(
194
- parseJSON(
195
- `{
197
+ it("should parse json with complex values", () => {
198
+ expect(
199
+ parseJSON(
200
+ `{
196
201
  "name":"complex",
197
202
  "spec":{
198
203
  "uptime":[1,2.5,3],
199
204
  "ok":true
200
205
  }
201
206
  }`
202
- )
203
- ).toStrictEqual({
204
- name: "complex",
205
- spec: {
206
- uptime: [1, 2.5, 3],
207
- ok: true,
208
- },
209
- });
210
- });
207
+ )
208
+ ).toStrictEqual({
209
+ name: "complex",
210
+ spec: {
211
+ uptime: [1, 2.5, 3],
212
+ ok: true,
213
+ },
214
+ });
215
+ });
211
216
 
212
- it("should fail to parse json with invalid string", () => {
213
- try {
214
- parseJSON(`\n{\n"version" "1\n}\n`);
215
- fail("parseJSON did not throw");
216
- } catch (err) {
217
- expect({ ...(err as Error) }).toStrictEqual({
218
- name: "ParseError",
219
- text: "Unexpected string",
220
- kind: "error",
221
- location: {
222
- line: 3,
223
- column: 9,
224
- lineText: '"version" "1',
225
- file: undefined,
226
- fileText: `\n{\n"version" "1\n}\n`,
227
- },
228
- notes: [],
229
- });
230
- }
231
- });
217
+ it("should fail to parse json with invalid string", () => {
218
+ try {
219
+ parseJSON(`\n{\n"version" "1\n}\n`);
220
+ fail("parseJSON did not throw");
221
+ } catch (err) {
222
+ expect({ ...(err as Error) }).toStrictEqual({
223
+ name: "ParseError",
224
+ text: "Unexpected string",
225
+ kind: "error",
226
+ location: {
227
+ line: 3,
228
+ column: 9,
229
+ lineText: '"version" "1',
230
+ file: undefined,
231
+ fileText: `\n{\n"version" "1\n}\n`,
232
+ },
233
+ notes: [],
234
+ });
235
+ }
236
+ });
232
237
 
233
- it("should fail to parse json with invalid number", () => {
234
- const file = "config.json",
235
- fileText = `{\n\t"a":{\n\t\t"b":{\n\t\t\t"c":[012345]\n}\n}\n}`;
236
- try {
237
- parseJSON(fileText, file);
238
- fail("parseJSON did not throw");
239
- } catch (err) {
240
- expect({ ...(err as Error) }).toStrictEqual({
241
- name: "ParseError",
242
- text: "Unexpected number",
243
- kind: "error",
244
- location: {
245
- file,
246
- fileText,
247
- line: 4,
248
- column: 8,
249
- lineText: `\t\t\t"c":[012345]`,
250
- },
251
- notes: [],
252
- });
253
- }
254
- });
238
+ it("should fail to parse json with invalid number", () => {
239
+ const file = "config.json",
240
+ fileText = `{\n\t"a":{\n\t\t"b":{\n\t\t\t"c":[012345]\n}\n}\n}`;
241
+ try {
242
+ parseJSON(fileText, file);
243
+ fail("parseJSON did not throw");
244
+ } catch (err) {
245
+ expect({ ...(err as Error) }).toStrictEqual({
246
+ name: "ParseError",
247
+ text: "Unexpected number",
248
+ kind: "error",
249
+ location: {
250
+ file,
251
+ fileText,
252
+ line: 4,
253
+ column: 8,
254
+ lineText: `\t\t\t"c":[012345]`,
255
+ },
256
+ notes: [],
257
+ });
258
+ }
259
+ });
255
260
  });
261
+ describe("parseJSONC", () => {
262
+ it("should parse jsonc that is empty", () => {
263
+ expect(parseJSONC("{}")).toStrictEqual({});
264
+ });
256
265
 
266
+ it("should parse jsonc with basic values", () => {
267
+ expect(
268
+ parseJSONC(`
269
+ {
270
+ "name" : "basic",
271
+ "version": 1
272
+ }`)
273
+ ).toStrictEqual({
274
+ name: "basic",
275
+ version: 1,
276
+ });
277
+ });
278
+
279
+ it("should parse jsonc with complex values", () => {
280
+ expect(
281
+ parseJSONC(
282
+ `{
283
+ "name":"complex",
284
+ "spec":{
285
+ "uptime":[1,2.5,3],
286
+ "ok":true
287
+ }
288
+ }`
289
+ )
290
+ ).toStrictEqual({
291
+ name: "complex",
292
+ spec: {
293
+ uptime: [1, 2.5, 3],
294
+ ok: true,
295
+ },
296
+ });
297
+ });
298
+
299
+ it("should parse jsonc with comments", () => {
300
+ expect(
301
+ parseJSONC(
302
+ `{
303
+ // Comment A
304
+ "name":"complex",
305
+ "spec":{
306
+ // Nested comment
307
+ "uptime":[1,2.5,3],
308
+ "ok":true
309
+ }
310
+ }`
311
+ )
312
+ ).toStrictEqual({
313
+ name: "complex",
314
+ spec: {
315
+ uptime: [1, 2.5, 3],
316
+ ok: true,
317
+ },
318
+ });
319
+ });
320
+
321
+ it("should fail to parse jsonc with invalid string", () => {
322
+ try {
323
+ parseJSONC(`\n{\n"version" "1\n}\n`);
324
+ fail("parseJSONC did not throw");
325
+ } catch (err) {
326
+ expect({ ...(err as Error) }).toStrictEqual({
327
+ name: "ParseError",
328
+ text: "UnexpectedEndOfString",
329
+ kind: "error",
330
+ location: {
331
+ length: 2,
332
+ line: 3,
333
+ column: 10,
334
+ lineText: '"version" "1',
335
+ file: undefined,
336
+ fileText: `\n{\n"version" "1\n}\n`,
337
+ },
338
+ notes: [],
339
+ });
340
+ }
341
+ });
342
+
343
+ it("should fail to parse jsonc with invalid number", () => {
344
+ const file = "config.json",
345
+ fileText = `{\n\t"a":{\n\t\t"b":{\n\t\t\t"c":[012345]\n}\n}\n}`;
346
+ try {
347
+ parseJSONC(fileText, file);
348
+ fail("parseJSONC did not throw");
349
+ } catch (err) {
350
+ expect({ ...(err as Error) }).toStrictEqual({
351
+ name: "ParseError",
352
+ text: "CommaExpected",
353
+ kind: "error",
354
+ location: {
355
+ file,
356
+ fileText,
357
+ length: 5,
358
+ line: 4,
359
+ column: 9,
360
+ lineText: `\t\t\t"c":[012345]`,
361
+ },
362
+ notes: [],
363
+ });
364
+ }
365
+ });
366
+ });
257
367
  describe("indexLocation", () => {
258
- it("should calculate location from one-line input", () => {
259
- const fileText = "";
260
- expect(indexLocation({ fileText }, 1)).toStrictEqual({
261
- fileText,
262
- line: 1,
263
- column: 0,
264
- lineText: "",
265
- });
266
- });
368
+ it("should calculate location from one-line input", () => {
369
+ const fileText = "";
370
+ expect(indexLocation({ fileText }, 1)).toStrictEqual({
371
+ fileText,
372
+ line: 1,
373
+ column: 0,
374
+ lineText: "",
375
+ });
376
+ });
267
377
 
268
- it("should calculate location from multi-line input", () => {
269
- const file = "package.json",
270
- fileText = `\n{\n\t"hello":"world"\n}\n`;
271
- expect(indexLocation({ file, fileText }, 11)).toStrictEqual({
272
- file,
273
- fileText,
274
- line: 3,
275
- column: 7,
276
- lineText: `\t"hello":"world"`,
277
- });
278
- });
378
+ it("should calculate location from multi-line input", () => {
379
+ const file = "package.json",
380
+ fileText = `\n{\n\t"hello":"world"\n}\n`;
381
+ expect(indexLocation({ file, fileText }, 11)).toStrictEqual({
382
+ file,
383
+ fileText,
384
+ line: 3,
385
+ column: 7,
386
+ lineText: `\t"hello":"world"`,
387
+ });
388
+ });
279
389
 
280
- it("should calculate location when index is out of bounds", () => {
281
- const fileText = `\n\n\n\n`;
282
- expect(indexLocation({ fileText }, 10)).toStrictEqual({
283
- fileText,
284
- line: 5,
285
- column: 0,
286
- lineText: undefined,
287
- });
288
- });
390
+ it("should calculate location when index is out of bounds", () => {
391
+ const fileText = `\n\n\n\n`;
392
+ expect(indexLocation({ fileText }, 10)).toStrictEqual({
393
+ fileText,
394
+ line: 5,
395
+ column: 0,
396
+ lineText: undefined,
397
+ });
398
+ });
289
399
  });
290
400
 
291
401
  describe("searchLocation", () => {
292
- it("should calculate location from one-line match", () => {
293
- const file = "config.toml",
294
- fileText = `name = 'coolthing'`;
295
- expect(searchLocation({ file, fileText }, "coolthing")).toStrictEqual({
296
- file,
297
- fileText,
298
- line: 1,
299
- column: 8,
300
- length: 9,
301
- lineText: `name = 'coolthing'`,
302
- });
303
- });
402
+ it("should calculate location from one-line match", () => {
403
+ const file = "config.toml",
404
+ fileText = `name = 'coolthing'`;
405
+ expect(searchLocation({ file, fileText }, "coolthing")).toStrictEqual({
406
+ file,
407
+ fileText,
408
+ line: 1,
409
+ column: 8,
410
+ length: 9,
411
+ lineText: `name = 'coolthing'`,
412
+ });
413
+ });
304
414
 
305
- it("should calculate location from multi-line match", () => {
306
- const fileText = `\n{"versions":[\n\t"1.2.3",\n\t"1.2.4",\n\t"1.2.5"\n]}\n`;
307
- expect(searchLocation({ fileText }, "1.2.4")).toStrictEqual({
308
- fileText,
309
- line: 4,
310
- column: 2,
311
- length: 5,
312
- lineText: `\t"1.2.4",`,
313
- });
314
- });
415
+ it("should calculate location from multi-line match", () => {
416
+ const fileText = `\n{"versions":[\n\t"1.2.3",\n\t"1.2.4",\n\t"1.2.5"\n]}\n`;
417
+ expect(searchLocation({ fileText }, "1.2.4")).toStrictEqual({
418
+ fileText,
419
+ line: 4,
420
+ column: 2,
421
+ length: 5,
422
+ lineText: `\t"1.2.4",`,
423
+ });
424
+ });
315
425
 
316
- it("should calculate location from no match", () => {
317
- const fileText = `\n{}\n`;
318
- expect(searchLocation({ fileText }, "apple")).toStrictEqual({
319
- fileText,
320
- line: 3,
321
- column: 0,
322
- length: undefined,
323
- lineText: undefined,
324
- });
325
- });
426
+ it("should calculate location from no match", () => {
427
+ const fileText = `\n{}\n`;
428
+ expect(searchLocation({ fileText }, "apple")).toStrictEqual({
429
+ fileText,
430
+ line: 3,
431
+ column: 0,
432
+ length: undefined,
433
+ lineText: undefined,
434
+ });
435
+ });
326
436
  });