elm-pages 3.0.0-beta.20 → 3.0.0-beta.21

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 (433) hide show
  1. package/README.md +1 -1
  2. package/codegen/elm-pages-codegen.cjs +111 -99
  3. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/dependencies.75364bef27ac5a049b87c3325f846fc6dbda23b8ed7187ed06748b96bb6a50a7.json +1 -0
  4. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Console-Text.elmi +0 -0
  5. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Console-Text.elmo +0 -0
  6. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmi +0 -0
  7. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmo +0 -0
  8. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmi +0 -0
  9. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmo +0 -0
  10. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Generated-Main.elmi +0 -0
  11. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Generated-Main.elmo +0 -0
  12. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format-Color.elmi +0 -0
  13. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format-Color.elmo +0 -0
  14. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format-Monochrome.elmi +0 -0
  15. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format-Monochrome.elmo +0 -0
  16. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format.elmi +0 -0
  17. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format.elmo +0 -0
  18. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console.elmi +0 -0
  19. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console.elmo +0 -0
  20. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Highlightable.elmi +0 -0
  21. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Highlightable.elmo +0 -0
  22. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-JUnit.elmi +0 -0
  23. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-JUnit.elmo +0 -0
  24. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Json.elmi +0 -0
  25. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Json.elmo +0 -0
  26. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Reporter.elmi +0 -0
  27. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Reporter.elmo +0 -0
  28. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-TestResults.elmi +0 -0
  29. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-TestResults.elmo +0 -0
  30. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-JsMessage.elmi +0 -0
  31. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-JsMessage.elmo +0 -0
  32. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node-Vendor-Console.elmi +0 -0
  33. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node-Vendor-Console.elmo +0 -0
  34. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node-Vendor-Diff.elmi +0 -0
  35. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node-Vendor-Diff.elmo +0 -0
  36. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node.elmi +0 -0
  37. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node.elmo +0 -0
  38. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/d.dat +0 -0
  39. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/i.dat +0 -0
  40. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/lock +0 -0
  41. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/o.dat +0 -0
  42. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm.json +38 -0
  43. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elmTestOutput.js +29673 -0
  44. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/package.json +1 -0
  45. package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/src/Test/Generated/Main.elm +27 -0
  46. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmi +0 -0
  47. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmo +0 -0
  48. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmo +0 -0
  49. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  50. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +1 -1
  51. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +37 -107
  52. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
  53. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_supervisor.js +4 -4
  54. package/generator/dead-code-review/node_modules/.package-lock.json +484 -0
  55. package/generator/dead-code-review/node_modules/ansi-styles/index.d.ts +345 -0
  56. package/generator/dead-code-review/node_modules/ansi-styles/index.js +163 -0
  57. package/generator/dead-code-review/node_modules/ansi-styles/license +9 -0
  58. package/generator/dead-code-review/node_modules/ansi-styles/package.json +56 -0
  59. package/generator/dead-code-review/node_modules/ansi-styles/readme.md +152 -0
  60. package/generator/dead-code-review/node_modules/anymatch/LICENSE +15 -0
  61. package/generator/dead-code-review/node_modules/anymatch/README.md +87 -0
  62. package/generator/dead-code-review/node_modules/anymatch/index.d.ts +20 -0
  63. package/generator/dead-code-review/node_modules/anymatch/index.js +104 -0
  64. package/generator/dead-code-review/node_modules/anymatch/package.json +48 -0
  65. package/generator/dead-code-review/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  66. package/generator/dead-code-review/node_modules/balanced-match/LICENSE.md +21 -0
  67. package/generator/dead-code-review/node_modules/balanced-match/README.md +97 -0
  68. package/generator/dead-code-review/node_modules/balanced-match/index.js +62 -0
  69. package/generator/dead-code-review/node_modules/balanced-match/package.json +48 -0
  70. package/generator/dead-code-review/node_modules/binary-extensions/binary-extensions.json +260 -0
  71. package/generator/dead-code-review/node_modules/binary-extensions/binary-extensions.json.d.ts +3 -0
  72. package/generator/dead-code-review/node_modules/binary-extensions/index.d.ts +14 -0
  73. package/generator/dead-code-review/node_modules/binary-extensions/index.js +1 -0
  74. package/generator/dead-code-review/node_modules/binary-extensions/license +9 -0
  75. package/generator/dead-code-review/node_modules/binary-extensions/package.json +38 -0
  76. package/generator/dead-code-review/node_modules/binary-extensions/readme.md +41 -0
  77. package/generator/dead-code-review/node_modules/brace-expansion/.github/FUNDING.yml +2 -0
  78. package/generator/dead-code-review/node_modules/brace-expansion/LICENSE +21 -0
  79. package/generator/dead-code-review/node_modules/brace-expansion/README.md +135 -0
  80. package/generator/dead-code-review/node_modules/brace-expansion/index.js +203 -0
  81. package/generator/dead-code-review/node_modules/brace-expansion/package.json +46 -0
  82. package/generator/dead-code-review/node_modules/braces/CHANGELOG.md +184 -0
  83. package/generator/dead-code-review/node_modules/braces/LICENSE +21 -0
  84. package/generator/dead-code-review/node_modules/braces/README.md +593 -0
  85. package/generator/dead-code-review/node_modules/braces/index.js +170 -0
  86. package/generator/dead-code-review/node_modules/braces/lib/compile.js +57 -0
  87. package/generator/dead-code-review/node_modules/braces/lib/constants.js +57 -0
  88. package/generator/dead-code-review/node_modules/braces/lib/expand.js +113 -0
  89. package/generator/dead-code-review/node_modules/braces/lib/parse.js +333 -0
  90. package/generator/dead-code-review/node_modules/braces/lib/stringify.js +32 -0
  91. package/generator/dead-code-review/node_modules/braces/lib/utils.js +112 -0
  92. package/generator/dead-code-review/node_modules/braces/package.json +77 -0
  93. package/generator/dead-code-review/node_modules/chalk/index.d.ts +415 -0
  94. package/generator/dead-code-review/node_modules/chalk/license +9 -0
  95. package/generator/dead-code-review/node_modules/chalk/package.json +68 -0
  96. package/generator/dead-code-review/node_modules/chalk/readme.md +341 -0
  97. package/generator/dead-code-review/node_modules/chalk/source/index.js +229 -0
  98. package/generator/dead-code-review/node_modules/chalk/source/templates.js +134 -0
  99. package/generator/dead-code-review/node_modules/chalk/source/util.js +39 -0
  100. package/generator/dead-code-review/node_modules/chokidar/LICENSE +21 -0
  101. package/generator/dead-code-review/node_modules/chokidar/README.md +308 -0
  102. package/generator/dead-code-review/node_modules/chokidar/index.js +973 -0
  103. package/generator/dead-code-review/node_modules/chokidar/lib/constants.js +65 -0
  104. package/generator/dead-code-review/node_modules/chokidar/lib/fsevents-handler.js +524 -0
  105. package/generator/dead-code-review/node_modules/chokidar/lib/nodefs-handler.js +654 -0
  106. package/generator/dead-code-review/node_modules/chokidar/package.json +85 -0
  107. package/generator/dead-code-review/node_modules/chokidar/types/index.d.ts +188 -0
  108. package/generator/dead-code-review/node_modules/color-convert/CHANGELOG.md +54 -0
  109. package/generator/dead-code-review/node_modules/color-convert/LICENSE +21 -0
  110. package/generator/dead-code-review/node_modules/color-convert/README.md +68 -0
  111. package/generator/dead-code-review/node_modules/color-convert/conversions.js +839 -0
  112. package/generator/dead-code-review/node_modules/color-convert/index.js +81 -0
  113. package/generator/dead-code-review/node_modules/color-convert/package.json +48 -0
  114. package/generator/dead-code-review/node_modules/color-convert/route.js +97 -0
  115. package/generator/dead-code-review/node_modules/color-name/LICENSE +8 -0
  116. package/generator/dead-code-review/node_modules/color-name/README.md +11 -0
  117. package/generator/dead-code-review/node_modules/color-name/index.js +152 -0
  118. package/generator/dead-code-review/node_modules/color-name/package.json +28 -0
  119. package/generator/dead-code-review/node_modules/commander/LICENSE +22 -0
  120. package/generator/dead-code-review/node_modules/commander/Readme.md +1118 -0
  121. package/generator/dead-code-review/node_modules/commander/esm.mjs +16 -0
  122. package/generator/dead-code-review/node_modules/commander/index.js +27 -0
  123. package/generator/dead-code-review/node_modules/commander/lib/argument.js +147 -0
  124. package/generator/dead-code-review/node_modules/commander/lib/command.js +2160 -0
  125. package/generator/dead-code-review/node_modules/commander/lib/error.js +45 -0
  126. package/generator/dead-code-review/node_modules/commander/lib/help.js +406 -0
  127. package/generator/dead-code-review/node_modules/commander/lib/option.js +326 -0
  128. package/generator/dead-code-review/node_modules/commander/lib/suggestSimilar.js +100 -0
  129. package/generator/dead-code-review/node_modules/commander/package-support.json +16 -0
  130. package/generator/dead-code-review/node_modules/commander/package.json +80 -0
  131. package/generator/dead-code-review/node_modules/commander/typings/index.d.ts +881 -0
  132. package/generator/dead-code-review/node_modules/cross-spawn/CHANGELOG.md +130 -0
  133. package/generator/dead-code-review/node_modules/cross-spawn/LICENSE +21 -0
  134. package/generator/dead-code-review/node_modules/cross-spawn/README.md +96 -0
  135. package/generator/dead-code-review/node_modules/cross-spawn/index.js +39 -0
  136. package/generator/dead-code-review/node_modules/cross-spawn/lib/enoent.js +59 -0
  137. package/generator/dead-code-review/node_modules/cross-spawn/lib/parse.js +91 -0
  138. package/generator/dead-code-review/node_modules/cross-spawn/lib/util/escape.js +45 -0
  139. package/generator/dead-code-review/node_modules/cross-spawn/lib/util/readShebang.js +23 -0
  140. package/generator/dead-code-review/node_modules/cross-spawn/lib/util/resolveCommand.js +52 -0
  141. package/generator/dead-code-review/node_modules/cross-spawn/package.json +73 -0
  142. package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/LICENSE +373 -0
  143. package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/README.md +64 -0
  144. package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/elm_solve_deps_wasm.d.ts +22 -0
  145. package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/elm_solve_deps_wasm.js +419 -0
  146. package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/elm_solve_deps_wasm_bg.wasm +0 -0
  147. package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/package.json +27 -0
  148. package/generator/dead-code-review/node_modules/elm-test/LICENSE +27 -0
  149. package/generator/dead-code-review/node_modules/elm-test/README.md +192 -0
  150. package/generator/dead-code-review/node_modules/elm-test/bin/elm-test +3 -0
  151. package/generator/dead-code-review/node_modules/elm-test/elm/elm.json +25 -0
  152. package/generator/dead-code-review/node_modules/elm-test/elm/src/Console/Text.elm +217 -0
  153. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Console/Format/Color.elm +30 -0
  154. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Console/Format/Monochrome.elm +39 -0
  155. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Console/Format.elm +212 -0
  156. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Console.elm +207 -0
  157. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Highlightable.elm +48 -0
  158. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/JUnit.elm +161 -0
  159. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Json.elm +158 -0
  160. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Reporter.elm +53 -0
  161. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/TestResults.elm +113 -0
  162. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Runner/JsMessage.elm +38 -0
  163. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Runner/Node/Vendor/Console.elm +230 -0
  164. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Runner/Node/Vendor/Diff.elm +326 -0
  165. package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Runner/Node.elm +440 -0
  166. package/generator/dead-code-review/node_modules/elm-test/lib/Compile.js +110 -0
  167. package/generator/dead-code-review/node_modules/elm-test/lib/DependencyProvider.js +343 -0
  168. package/generator/dead-code-review/node_modules/elm-test/lib/ElmCompiler.js +109 -0
  169. package/generator/dead-code-review/node_modules/elm-test/lib/ElmHome.js +47 -0
  170. package/generator/dead-code-review/node_modules/elm-test/lib/ElmJson.js +194 -0
  171. package/generator/dead-code-review/node_modules/elm-test/lib/FindTests.js +276 -0
  172. package/generator/dead-code-review/node_modules/elm-test/lib/Generate.js +294 -0
  173. package/generator/dead-code-review/node_modules/elm-test/lib/Install.js +290 -0
  174. package/generator/dead-code-review/node_modules/elm-test/lib/Parser.js +941 -0
  175. package/generator/dead-code-review/node_modules/elm-test/lib/Project.js +117 -0
  176. package/generator/dead-code-review/node_modules/elm-test/lib/Report.js +23 -0
  177. package/generator/dead-code-review/node_modules/elm-test/lib/RunTests.js +322 -0
  178. package/generator/dead-code-review/node_modules/elm-test/lib/Solve.js +76 -0
  179. package/generator/dead-code-review/node_modules/elm-test/lib/Supervisor.js +294 -0
  180. package/generator/dead-code-review/node_modules/elm-test/lib/SyncGet.js +45 -0
  181. package/generator/dead-code-review/node_modules/elm-test/lib/SyncGetWorker.js +36 -0
  182. package/generator/dead-code-review/node_modules/elm-test/lib/elm-test.js +318 -0
  183. package/generator/dead-code-review/node_modules/elm-test/package.json +69 -0
  184. package/generator/dead-code-review/node_modules/elm-test/templates/after.js +29 -0
  185. package/generator/dead-code-review/node_modules/elm-test/templates/before.js +58 -0
  186. package/generator/dead-code-review/node_modules/elm-test/templates/tests/Example.elm +10 -0
  187. package/generator/dead-code-review/node_modules/fill-range/LICENSE +21 -0
  188. package/generator/dead-code-review/node_modules/fill-range/README.md +237 -0
  189. package/generator/dead-code-review/node_modules/fill-range/index.js +249 -0
  190. package/generator/dead-code-review/node_modules/fill-range/package.json +69 -0
  191. package/generator/dead-code-review/node_modules/fs.realpath/LICENSE +43 -0
  192. package/generator/dead-code-review/node_modules/fs.realpath/README.md +33 -0
  193. package/generator/dead-code-review/node_modules/fs.realpath/index.js +66 -0
  194. package/generator/dead-code-review/node_modules/fs.realpath/old.js +303 -0
  195. package/generator/dead-code-review/node_modules/fs.realpath/package.json +26 -0
  196. package/generator/dead-code-review/node_modules/fsevents/LICENSE +22 -0
  197. package/generator/dead-code-review/node_modules/fsevents/README.md +83 -0
  198. package/generator/dead-code-review/node_modules/fsevents/fsevents.d.ts +46 -0
  199. package/generator/dead-code-review/node_modules/fsevents/fsevents.js +82 -0
  200. package/generator/dead-code-review/node_modules/fsevents/fsevents.node +0 -0
  201. package/generator/dead-code-review/node_modules/fsevents/package.json +62 -0
  202. package/generator/dead-code-review/node_modules/glob/LICENSE +15 -0
  203. package/generator/dead-code-review/node_modules/glob/README.md +378 -0
  204. package/generator/dead-code-review/node_modules/glob/common.js +240 -0
  205. package/generator/dead-code-review/node_modules/glob/glob.js +790 -0
  206. package/generator/dead-code-review/node_modules/glob/package.json +55 -0
  207. package/generator/dead-code-review/node_modules/glob/sync.js +486 -0
  208. package/generator/dead-code-review/node_modules/glob-parent/CHANGELOG.md +110 -0
  209. package/generator/dead-code-review/node_modules/glob-parent/LICENSE +15 -0
  210. package/generator/dead-code-review/node_modules/glob-parent/README.md +137 -0
  211. package/generator/dead-code-review/node_modules/glob-parent/index.js +42 -0
  212. package/generator/dead-code-review/node_modules/glob-parent/package.json +48 -0
  213. package/generator/dead-code-review/node_modules/graceful-fs/LICENSE +15 -0
  214. package/generator/dead-code-review/node_modules/graceful-fs/README.md +143 -0
  215. package/generator/dead-code-review/node_modules/graceful-fs/clone.js +23 -0
  216. package/generator/dead-code-review/node_modules/graceful-fs/graceful-fs.js +448 -0
  217. package/generator/dead-code-review/node_modules/graceful-fs/legacy-streams.js +118 -0
  218. package/generator/dead-code-review/node_modules/graceful-fs/package.json +50 -0
  219. package/generator/dead-code-review/node_modules/graceful-fs/polyfills.js +355 -0
  220. package/generator/dead-code-review/node_modules/has-flag/index.d.ts +39 -0
  221. package/generator/dead-code-review/node_modules/has-flag/index.js +8 -0
  222. package/generator/dead-code-review/node_modules/has-flag/license +9 -0
  223. package/generator/dead-code-review/node_modules/has-flag/package.json +46 -0
  224. package/generator/dead-code-review/node_modules/has-flag/readme.md +89 -0
  225. package/generator/dead-code-review/node_modules/inflight/LICENSE +15 -0
  226. package/generator/dead-code-review/node_modules/inflight/README.md +37 -0
  227. package/generator/dead-code-review/node_modules/inflight/inflight.js +54 -0
  228. package/generator/dead-code-review/node_modules/inflight/package.json +29 -0
  229. package/generator/dead-code-review/node_modules/inherits/LICENSE +16 -0
  230. package/generator/dead-code-review/node_modules/inherits/README.md +42 -0
  231. package/generator/dead-code-review/node_modules/inherits/inherits.js +9 -0
  232. package/generator/dead-code-review/node_modules/inherits/inherits_browser.js +27 -0
  233. package/generator/dead-code-review/node_modules/inherits/package.json +29 -0
  234. package/generator/dead-code-review/node_modules/is-binary-path/index.d.ts +17 -0
  235. package/generator/dead-code-review/node_modules/is-binary-path/index.js +7 -0
  236. package/generator/dead-code-review/node_modules/is-binary-path/license +9 -0
  237. package/generator/dead-code-review/node_modules/is-binary-path/package.json +40 -0
  238. package/generator/dead-code-review/node_modules/is-binary-path/readme.md +34 -0
  239. package/generator/dead-code-review/node_modules/is-extglob/LICENSE +21 -0
  240. package/generator/dead-code-review/node_modules/is-extglob/README.md +107 -0
  241. package/generator/dead-code-review/node_modules/is-extglob/index.js +20 -0
  242. package/generator/dead-code-review/node_modules/is-extglob/package.json +69 -0
  243. package/generator/dead-code-review/node_modules/is-glob/LICENSE +21 -0
  244. package/generator/dead-code-review/node_modules/is-glob/README.md +206 -0
  245. package/generator/dead-code-review/node_modules/is-glob/index.js +150 -0
  246. package/generator/dead-code-review/node_modules/is-glob/package.json +81 -0
  247. package/generator/dead-code-review/node_modules/is-number/LICENSE +21 -0
  248. package/generator/dead-code-review/node_modules/is-number/README.md +187 -0
  249. package/generator/dead-code-review/node_modules/is-number/index.js +18 -0
  250. package/generator/dead-code-review/node_modules/is-number/package.json +82 -0
  251. package/generator/dead-code-review/node_modules/isexe/LICENSE +15 -0
  252. package/generator/dead-code-review/node_modules/isexe/README.md +51 -0
  253. package/generator/dead-code-review/node_modules/isexe/index.js +57 -0
  254. package/generator/dead-code-review/node_modules/isexe/mode.js +41 -0
  255. package/generator/dead-code-review/node_modules/isexe/package.json +31 -0
  256. package/generator/dead-code-review/node_modules/isexe/test/basic.js +221 -0
  257. package/generator/dead-code-review/node_modules/isexe/windows.js +42 -0
  258. package/generator/dead-code-review/node_modules/minimatch/LICENSE +15 -0
  259. package/generator/dead-code-review/node_modules/minimatch/README.md +259 -0
  260. package/generator/dead-code-review/node_modules/minimatch/lib/path.js +4 -0
  261. package/generator/dead-code-review/node_modules/minimatch/minimatch.js +906 -0
  262. package/generator/dead-code-review/node_modules/minimatch/package.json +32 -0
  263. package/generator/dead-code-review/node_modules/normalize-path/LICENSE +21 -0
  264. package/generator/dead-code-review/node_modules/normalize-path/README.md +127 -0
  265. package/generator/dead-code-review/node_modules/normalize-path/index.js +35 -0
  266. package/generator/dead-code-review/node_modules/normalize-path/package.json +77 -0
  267. package/generator/dead-code-review/node_modules/once/LICENSE +15 -0
  268. package/generator/dead-code-review/node_modules/once/README.md +79 -0
  269. package/generator/dead-code-review/node_modules/once/once.js +42 -0
  270. package/generator/dead-code-review/node_modules/once/package.json +33 -0
  271. package/generator/dead-code-review/node_modules/path-key/index.d.ts +40 -0
  272. package/generator/dead-code-review/node_modules/path-key/index.js +16 -0
  273. package/generator/dead-code-review/node_modules/path-key/license +9 -0
  274. package/generator/dead-code-review/node_modules/path-key/package.json +39 -0
  275. package/generator/dead-code-review/node_modules/path-key/readme.md +61 -0
  276. package/generator/dead-code-review/node_modules/picomatch/CHANGELOG.md +136 -0
  277. package/generator/dead-code-review/node_modules/picomatch/LICENSE +21 -0
  278. package/generator/dead-code-review/node_modules/picomatch/README.md +708 -0
  279. package/generator/dead-code-review/node_modules/picomatch/index.js +3 -0
  280. package/generator/dead-code-review/node_modules/picomatch/lib/constants.js +179 -0
  281. package/generator/dead-code-review/node_modules/picomatch/lib/parse.js +1091 -0
  282. package/generator/dead-code-review/node_modules/picomatch/lib/picomatch.js +342 -0
  283. package/generator/dead-code-review/node_modules/picomatch/lib/scan.js +391 -0
  284. package/generator/dead-code-review/node_modules/picomatch/lib/utils.js +64 -0
  285. package/generator/dead-code-review/node_modules/picomatch/package.json +81 -0
  286. package/generator/dead-code-review/node_modules/readdirp/LICENSE +21 -0
  287. package/generator/dead-code-review/node_modules/readdirp/README.md +122 -0
  288. package/generator/dead-code-review/node_modules/readdirp/index.d.ts +43 -0
  289. package/generator/dead-code-review/node_modules/readdirp/index.js +287 -0
  290. package/generator/dead-code-review/node_modules/readdirp/package.json +122 -0
  291. package/generator/dead-code-review/node_modules/shebang-command/index.js +19 -0
  292. package/generator/dead-code-review/node_modules/shebang-command/license +9 -0
  293. package/generator/dead-code-review/node_modules/shebang-command/package.json +34 -0
  294. package/generator/dead-code-review/node_modules/shebang-command/readme.md +34 -0
  295. package/generator/dead-code-review/node_modules/shebang-regex/index.d.ts +22 -0
  296. package/generator/dead-code-review/node_modules/shebang-regex/index.js +2 -0
  297. package/generator/dead-code-review/node_modules/shebang-regex/license +9 -0
  298. package/generator/dead-code-review/node_modules/shebang-regex/package.json +35 -0
  299. package/generator/dead-code-review/node_modules/shebang-regex/readme.md +33 -0
  300. package/generator/dead-code-review/node_modules/split/.travis.yml +3 -0
  301. package/generator/dead-code-review/node_modules/split/LICENCE +22 -0
  302. package/generator/dead-code-review/node_modules/split/examples/pretty.js +26 -0
  303. package/generator/dead-code-review/node_modules/split/index.js +63 -0
  304. package/generator/dead-code-review/node_modules/split/package.json +30 -0
  305. package/generator/dead-code-review/node_modules/split/readme.markdown +72 -0
  306. package/generator/dead-code-review/node_modules/split/test/options.asynct.js +46 -0
  307. package/generator/dead-code-review/node_modules/split/test/partitioned_unicode.js +34 -0
  308. package/generator/dead-code-review/node_modules/split/test/split.asynct.js +137 -0
  309. package/generator/dead-code-review/node_modules/split/test/try_catch.asynct.js +51 -0
  310. package/generator/dead-code-review/node_modules/supports-color/browser.js +5 -0
  311. package/generator/dead-code-review/node_modules/supports-color/index.js +135 -0
  312. package/generator/dead-code-review/node_modules/supports-color/license +9 -0
  313. package/generator/dead-code-review/node_modules/supports-color/package.json +53 -0
  314. package/generator/dead-code-review/node_modules/supports-color/readme.md +76 -0
  315. package/generator/dead-code-review/node_modules/through/.travis.yml +5 -0
  316. package/generator/dead-code-review/node_modules/through/LICENSE.APACHE2 +15 -0
  317. package/generator/dead-code-review/node_modules/through/LICENSE.MIT +24 -0
  318. package/generator/dead-code-review/node_modules/through/index.js +108 -0
  319. package/generator/dead-code-review/node_modules/through/package.json +36 -0
  320. package/generator/dead-code-review/node_modules/through/readme.markdown +64 -0
  321. package/generator/dead-code-review/node_modules/through/test/async.js +28 -0
  322. package/generator/dead-code-review/node_modules/through/test/auto-destroy.js +30 -0
  323. package/generator/dead-code-review/node_modules/through/test/buffering.js +71 -0
  324. package/generator/dead-code-review/node_modules/through/test/end.js +45 -0
  325. package/generator/dead-code-review/node_modules/through/test/index.js +133 -0
  326. package/generator/dead-code-review/node_modules/to-regex-range/LICENSE +21 -0
  327. package/generator/dead-code-review/node_modules/to-regex-range/README.md +305 -0
  328. package/generator/dead-code-review/node_modules/to-regex-range/index.js +288 -0
  329. package/generator/dead-code-review/node_modules/to-regex-range/package.json +88 -0
  330. package/generator/dead-code-review/node_modules/which/CHANGELOG.md +166 -0
  331. package/generator/dead-code-review/node_modules/which/LICENSE +15 -0
  332. package/generator/dead-code-review/node_modules/which/README.md +54 -0
  333. package/generator/dead-code-review/node_modules/which/bin/node-which +52 -0
  334. package/generator/dead-code-review/node_modules/which/package.json +43 -0
  335. package/generator/dead-code-review/node_modules/which/which.js +125 -0
  336. package/generator/dead-code-review/node_modules/wrappy/LICENSE +15 -0
  337. package/generator/dead-code-review/node_modules/wrappy/README.md +36 -0
  338. package/generator/dead-code-review/node_modules/wrappy/package.json +29 -0
  339. package/generator/dead-code-review/node_modules/wrappy/wrappy.js +33 -0
  340. package/generator/dead-code-review/node_modules/xmlbuilder/.nycrc +6 -0
  341. package/generator/dead-code-review/node_modules/xmlbuilder/.vscode/launch.json +23 -0
  342. package/generator/dead-code-review/node_modules/xmlbuilder/CHANGELOG.md +593 -0
  343. package/generator/dead-code-review/node_modules/xmlbuilder/LICENSE +21 -0
  344. package/generator/dead-code-review/node_modules/xmlbuilder/README.md +103 -0
  345. package/generator/dead-code-review/node_modules/xmlbuilder/lib/Derivation.js +10 -0
  346. package/generator/dead-code-review/node_modules/xmlbuilder/lib/DocumentPosition.js +12 -0
  347. package/generator/dead-code-review/node_modules/xmlbuilder/lib/NodeType.js +25 -0
  348. package/generator/dead-code-review/node_modules/xmlbuilder/lib/OperationType.js +11 -0
  349. package/generator/dead-code-review/node_modules/xmlbuilder/lib/Utility.js +88 -0
  350. package/generator/dead-code-review/node_modules/xmlbuilder/lib/WriterState.js +10 -0
  351. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLAttribute.js +130 -0
  352. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLCData.js +41 -0
  353. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLCharacterData.js +86 -0
  354. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLComment.js +41 -0
  355. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDOMConfiguration.js +80 -0
  356. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDOMErrorHandler.js +20 -0
  357. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDOMImplementation.js +55 -0
  358. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDOMStringList.js +44 -0
  359. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDTDAttList.js +66 -0
  360. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDTDElement.js +44 -0
  361. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDTDEntity.js +115 -0
  362. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDTDNotation.js +66 -0
  363. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDeclaration.js +51 -0
  364. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDocType.js +235 -0
  365. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDocument.js +282 -0
  366. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDocumentCB.js +650 -0
  367. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDocumentFragment.js +21 -0
  368. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDummy.js +39 -0
  369. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLElement.js +334 -0
  370. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLNamedNodeMap.js +77 -0
  371. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLNode.js +999 -0
  372. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLNodeFilter.js +51 -0
  373. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLNodeList.js +45 -0
  374. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js +56 -0
  375. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLRaw.js +40 -0
  376. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLStreamWriter.js +209 -0
  377. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLStringWriter.js +40 -0
  378. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLStringifier.js +291 -0
  379. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLText.js +82 -0
  380. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLTypeInfo.js +23 -0
  381. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLUserDataHandler.js +27 -0
  382. package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLWriterBase.js +485 -0
  383. package/generator/dead-code-review/node_modules/xmlbuilder/lib/index.js +120 -0
  384. package/generator/dead-code-review/node_modules/xmlbuilder/package.json +51 -0
  385. package/generator/dead-code-review/node_modules/xmlbuilder/perf/basic/escaping.coffee +244 -0
  386. package/generator/dead-code-review/node_modules/xmlbuilder/perf/basic/object.coffee +21 -0
  387. package/generator/dead-code-review/node_modules/xmlbuilder/perf/index.coffee +161 -0
  388. package/generator/dead-code-review/node_modules/xmlbuilder/perf/perf.list +11 -0
  389. package/generator/dead-code-review/node_modules/xmlbuilder/typings/index.d.ts +1771 -0
  390. package/generator/review/elm-stuff/0.19.1/d.dat +0 -0
  391. package/generator/review/elm-stuff/0.19.1/i.dat +0 -0
  392. package/generator/review/elm-stuff/0.19.1/o.dat +0 -0
  393. package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision10/install/elm-stuff/0.19.1/d.dat +0 -0
  394. package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision10/install/elm-stuff/0.19.1/i.dat +0 -0
  395. package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision10/install/elm-stuff/0.19.1/o.dat +0 -0
  396. package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision10/install/elm.json +25 -0
  397. package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision7/install/elm-stuff/0.19.1/d.dat +0 -0
  398. package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision7/install/elm-stuff/0.19.1/i.dat +0 -0
  399. package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision7/install/elm-stuff/0.19.1/o.dat +0 -0
  400. package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision7/install/elm.json +41 -0
  401. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  402. package/generator/review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +1 -1
  403. package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +1 -1
  404. package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
  405. package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +4 -4
  406. package/generator/src/cli.js +15 -7
  407. package/generator/src/compatibility-key.js +3 -1
  408. package/generator/src/dev-server.js +0 -13
  409. package/generator/src/pre-render-html.js +4 -6
  410. package/generator/src/render-worker.js +4 -1
  411. package/generator/src/request-cache.js +59 -8
  412. package/generator/template/app/Api.elm +4 -3
  413. package/generator/template/app/Effect.elm +123 -0
  414. package/generator/template/app/ErrorPage.elm +37 -6
  415. package/generator/template/app/Route/Index.elm +14 -7
  416. package/generator/template/app/Shared.elm +23 -46
  417. package/generator/template/app/Site.elm +11 -3
  418. package/generator/template/app/View.elm +1 -8
  419. package/generator/template/elm-tooling.json +0 -3
  420. package/generator/template/elm.json +34 -25
  421. package/generator/template/package.json +10 -4
  422. package/package.json +1 -1
  423. package/src/BackendTask/Custom.elm +110 -6
  424. package/src/Form/Field.elm +21 -9
  425. package/src/Form/FieldView.elm +14 -4
  426. package/src/Form.elm +61 -53
  427. package/src/Pages/Internal/Platform/Cli.elm +262 -235
  428. package/src/Pages/Internal/Platform/CompatibilityKey.elm +1 -1
  429. package/src/Pages/Internal/Platform.elm +56 -35
  430. package/src/Result/Extra.elm +6 -1
  431. package/src/Scaffold/Form.elm +474 -0
  432. package/src/{Pages/Generate.elm → Scaffold/Route.elm} +35 -5
  433. package/src/Test/Html/Internal/ElmHtml/ToString.elm +8 -9
@@ -0,0 +1,941 @@
1
+ // @flow
2
+
3
+ // Useful for debugging.
4
+ const LOG_ERRORS = 'ELM_TEST_LOG_PARSE_ERRORS' in process.env;
5
+
6
+ // For valid Elm files, this extracts _all_ (no more, no less) names that:
7
+ // 1. Are exposed.
8
+ // 2. _Might_ be tests. So capitalized names are excluded, for example.
9
+ //
10
+ // For invalid Elm files, this probably returns an empty list. It could also
11
+ // return a list of things it _thinks_ are exposed values, but it doesn’t
12
+ // matter. The idea is to bail early and still import the file. Then Elm gets a
13
+ // chance to show its nice error messages.
14
+ //
15
+ // The only times the returned promise is rejected are:
16
+ //
17
+ // - When there’s a problem reading the file from disk.
18
+ // - If there’s a bug and an unexpected exception is thrown somewhere.
19
+ // - If `effect module` is encountered. That’s a real edge case. The gist of it
20
+ // is that applications can’t contain effect modules and since the tests are
21
+ // compiled as an application we can’t include effect modules.
22
+ //
23
+ // The tokenizer reads the file character by character. As soon as it’s produced
24
+ // a whole token it feeds it to the parser, which works token by token. Both
25
+ // parse just enough to be able to extract all exposed names that could be tests
26
+ // without false positives.
27
+ function extractExposedPossiblyTests(
28
+ filePath /*: string */,
29
+ createReadStream /*: (
30
+ path: string,
31
+ options?: { encoding?: string, ... }
32
+ ) => stream$Readable & { close(): void } */
33
+ ) /*: Promise<Array<string>> */ {
34
+ return new Promise((resolve, reject) => {
35
+ const exposedPossiblyTests /*: Array<string> */ = [];
36
+ let tokenizerState /*: typeof TokenizerState */ = { tag: 'MaybeNewChunk' };
37
+ let parserState /*: typeof ParserState */ = {
38
+ tag: 'ModuleDeclaration',
39
+ lastToken: 'Nothing',
40
+ };
41
+ let lastLowerName = '';
42
+ let justSawCR = false;
43
+
44
+ const readable = createReadStream(filePath, {
45
+ encoding: 'utf8',
46
+ });
47
+ readable.on('error', reject);
48
+ readable.on('data', onData);
49
+ readable.on('close', () => {
50
+ // There’s no need to flush here. It can’t result in more exposed names.
51
+ resolve(exposedPossiblyTests);
52
+ });
53
+
54
+ function onData(chunk /*: string */) /*: void */ {
55
+ for (let index = 0; index < chunk.length; index++) {
56
+ const char = chunk[index];
57
+
58
+ if (justSawCR) {
59
+ if (char !== '\n') {
60
+ // Elm only supports LF and CRLF, not CR by itself.
61
+ Promise.resolve(expected('LF', char))
62
+ .then(stop)
63
+ .then(resolve, reject);
64
+ readable.close();
65
+ break;
66
+ }
67
+ justSawCR = false;
68
+ } else if (char === '\r') {
69
+ justSawCR = true;
70
+ // Ignore CR so that the rest of the code can handle only LF.
71
+ continue;
72
+ }
73
+
74
+ const result = tokenize(char, tokenizerState);
75
+ if (!Array.isArray(result)) {
76
+ Promise.resolve(result).then(stop).then(resolve, reject);
77
+ readable.close();
78
+ break;
79
+ }
80
+
81
+ const [nextTokenizerState, flushCommands] = result;
82
+ let seenFlush = false;
83
+ let hasFlushed = false;
84
+ let flushResult = undefined;
85
+
86
+ for (const flushCommand of flushCommands) {
87
+ switch (flushCommand.tag) {
88
+ case 'Flush':
89
+ seenFlush = true;
90
+ break;
91
+ case 'FlushToken':
92
+ if (flushResult === undefined) {
93
+ hasFlushed = true;
94
+ flushResult = flush(flushCommand.token);
95
+ }
96
+ break;
97
+ default:
98
+ unreachable(flushCommand.tag);
99
+ }
100
+ }
101
+
102
+ if (seenFlush && !hasFlushed && flushResult === undefined) {
103
+ flushResult = flush();
104
+ }
105
+
106
+ tokenizerState = nextTokenizerState;
107
+
108
+ if (flushResult !== undefined) {
109
+ Promise.resolve(flushResult).then(stop).then(resolve, reject);
110
+ readable.close();
111
+ break;
112
+ }
113
+ }
114
+ }
115
+
116
+ function flush(
117
+ token /*: typeof Token | void */
118
+ ) /*: typeof OnParserTokenResult | void */ {
119
+ if (
120
+ tokenizerState.tag === 'Initial' &&
121
+ tokenizerState.otherTokenChars !== ''
122
+ ) {
123
+ const value = tokenizerState.otherTokenChars;
124
+ tokenizerState.otherTokenChars = '';
125
+ const error = onParserToken(
126
+ isLowerName(value)
127
+ ? { tag: 'LowerName', value }
128
+ : isUpperName(value)
129
+ ? { tag: 'UpperName', value }
130
+ : { tag: 'Other', value }
131
+ );
132
+ if (error !== undefined) {
133
+ return error;
134
+ }
135
+ }
136
+ if (token !== undefined) {
137
+ return onParserToken(token);
138
+ }
139
+ return undefined;
140
+ }
141
+
142
+ function stop(
143
+ result /*: typeof OnParserTokenResult */
144
+ ) /*: Array<string> */ {
145
+ switch (result.tag) {
146
+ case 'ParseError':
147
+ if (LOG_ERRORS) {
148
+ console.error(`${filePath}: ${result.message}`);
149
+ }
150
+ return [];
151
+
152
+ case 'CriticalParseError':
153
+ throw new Error(
154
+ `This file is problematic:\n\n${filePath}\n\n${result.message}`
155
+ );
156
+
157
+ case 'StopParsing':
158
+ return exposedPossiblyTests;
159
+
160
+ default:
161
+ return unreachable(result);
162
+ }
163
+ }
164
+
165
+ function onParserToken(
166
+ token /*: typeof Token */
167
+ ) /*: typeof OnParserTokenResult | void */ {
168
+ if (token.tag === 'LowerName') {
169
+ lastLowerName = token.value;
170
+ }
171
+ switch (parserState.tag) {
172
+ case 'ModuleDeclaration': {
173
+ const rawResult = parseModuleDeclaration(
174
+ token,
175
+ parserState.lastToken
176
+ );
177
+ const result =
178
+ typeof rawResult === 'string'
179
+ ? { tag: 'Token', token: rawResult }
180
+ : rawResult;
181
+ switch (result.tag) {
182
+ case 'ParseError':
183
+ case 'CriticalParseError':
184
+ case 'StopParsing':
185
+ return result;
186
+ case 'NextParserState':
187
+ parserState = { tag: 'Rest', lastToken: 'Initial' };
188
+ break;
189
+ case 'Token':
190
+ parserState.lastToken = result.token;
191
+ if (result.token === 'LowerName') {
192
+ exposedPossiblyTests.push(lastLowerName);
193
+ }
194
+ break;
195
+ default:
196
+ unreachable(result);
197
+ }
198
+ break;
199
+ }
200
+
201
+ case 'Rest': {
202
+ const rawResult = parseRest(token, parserState.lastToken);
203
+ const result =
204
+ typeof rawResult === 'string'
205
+ ? { tag: 'Token', token: rawResult }
206
+ : rawResult;
207
+ switch (result.tag) {
208
+ case 'ParseError':
209
+ return result;
210
+ case 'Token':
211
+ parserState.lastToken = result.token;
212
+ if (result.token === 'PotentialTestDeclaration=') {
213
+ exposedPossiblyTests.push(lastLowerName);
214
+ }
215
+ break;
216
+ default:
217
+ unreachable(result);
218
+ }
219
+ break;
220
+ }
221
+
222
+ default:
223
+ unreachable(parserState.tag);
224
+ }
225
+ }
226
+ });
227
+ }
228
+
229
+ // First char lowercase: https://github.com/elm/compiler/blob/2860c2e5306cb7093ba28ac7624e8f9eb8cbc867/compiler/src/Parse/Variable.hs#L296-L300
230
+ // First char uppercase: https://github.com/elm/compiler/blob/2860c2e5306cb7093ba28ac7624e8f9eb8cbc867/compiler/src/Parse/Variable.hs#L263-L267
231
+ // Rest: https://github.com/elm/compiler/blob/2860c2e5306cb7093ba28ac7624e8f9eb8cbc867/compiler/src/Parse/Variable.hs#L328-L335
232
+ // https://hackage.haskell.org/package/base-4.14.0.0/docs/Data-Char.html#v:isLetter
233
+ const lowerName = /^\p{Ll}[_\d\p{L}]*$/u;
234
+ const upperName = /^\p{Lu}[_\d\p{L}]*$/u;
235
+ const anyNameFirstChar = /^\p{L}$/u;
236
+
237
+ // https://github.com/elm/compiler/blob/2860c2e5306cb7093ba28ac7624e8f9eb8cbc867/compiler/src/Parse/Variable.hs#L71-L81
238
+ const reservedWords = new Set([
239
+ 'if',
240
+ 'then',
241
+ 'else',
242
+ 'case',
243
+ 'of',
244
+ 'let',
245
+ 'in',
246
+ 'type',
247
+ 'module',
248
+ 'where',
249
+ 'import',
250
+ 'exposing',
251
+ 'as',
252
+ 'port',
253
+ ]);
254
+
255
+ const validNewChunkKeywordsAfterModuleDeclaration = new Set([
256
+ 'import',
257
+ 'port',
258
+ 'type',
259
+ ]);
260
+
261
+ // https://github.com/elm/compiler/blob/2860c2e5306cb7093ba28ac7624e8f9eb8cbc867/compiler/src/Parse/String.hs#L279-L285
262
+ const backslashableChars = new Set([
263
+ 'n',
264
+ 'r',
265
+ 't',
266
+ '"',
267
+ "'",
268
+ '\\',
269
+ // Note: `u` must be followed by for example `{1234}`.
270
+ // In strings and multiline strings, we can just pretend that `\u` is the
271
+ // escape and `{1234}` is just regular text, for simplicity.
272
+ // In char literals, we need some extra handling.
273
+ 'u',
274
+ ]);
275
+
276
+ function isLowerName(string) {
277
+ return lowerName.test(string) && !reservedWords.has(string);
278
+ }
279
+
280
+ function isUpperName(string /*: string */) /*: boolean */ {
281
+ return upperName.test(string);
282
+ }
283
+
284
+ function unreachable(value /*: empty */) /*: empty */ {
285
+ throw new Error(`Unreachable: ${value}`);
286
+ }
287
+
288
+ // Poor man’s type alias. We can’t use /*:: type ParseError = ... */ because of:
289
+ // https://github.com/prettier/prettier/issues/2597
290
+ // There are a couple of more of this workaround throughout the file.
291
+ const ParseError /*: {
292
+ tag: 'ParseError',
293
+ message: string,
294
+ -[mixed]: empty, // https://github.com/facebook/flow/issues/7859
295
+ } */ = {
296
+ tag: 'ParseError',
297
+ message: '',
298
+ };
299
+ void ParseError;
300
+
301
+ const CriticalParseError /*: {
302
+ tag: 'CriticalParseError',
303
+ message: string,
304
+ } */ = {
305
+ tag: 'CriticalParseError',
306
+ message: '',
307
+ };
308
+ void CriticalParseError;
309
+
310
+ const OnParserTokenResult /*:
311
+ | typeof ParseError
312
+ | typeof CriticalParseError
313
+ | { tag: 'StopParsing' } */ = ParseError;
314
+ void OnParserTokenResult;
315
+
316
+ function expected(
317
+ expectedDescription /*: string */,
318
+ actual /*: mixed */
319
+ ) /*: typeof ParseError */ {
320
+ return {
321
+ tag: 'ParseError',
322
+ message: `Expected ${expectedDescription} but got: ${stringify(actual)}`,
323
+ };
324
+ }
325
+
326
+ function stringify(json /*: mixed */) /*: string */ {
327
+ const maybeString = JSON.stringify(json);
328
+ return maybeString === undefined ? 'undefined' : maybeString;
329
+ }
330
+
331
+ function backslashError(actual) {
332
+ return expected(
333
+ `one of \`${Array.from(backslashableChars).join(' ')}\``,
334
+ actual
335
+ );
336
+ }
337
+
338
+ const Token /*:
339
+ | { tag: '(' }
340
+ | { tag: ')' }
341
+ | { tag: ',' }
342
+ | { tag: '=' }
343
+ | { tag: '.' }
344
+ | { tag: '..' }
345
+ | { tag: 'Char' }
346
+ | { tag: 'String' }
347
+ | { tag: 'NewChunk' }
348
+ | { tag: 'LowerName', value: string }
349
+ | { tag: 'UpperName', value: string }
350
+ | { tag: 'Other', value: string } */ = { tag: '(' };
351
+ void Token;
352
+
353
+ const TokenizerState /*:
354
+ | { tag: 'Initial', otherTokenChars: string }
355
+ | { tag: 'MaybeNewChunk' }
356
+ | { tag: 'MaybeMultilineComment{' }
357
+ | { tag: 'MultilineComment', level: number }
358
+ | { tag: 'MultilineComment{', level: number }
359
+ | { tag: 'MultilineComment-', level: number }
360
+ | { tag: 'MaybeSinglelineComment-' }
361
+ | { tag: 'SinglelineComment' }
362
+ | { tag: 'Maybe..' }
363
+ | { tag: 'CharStart' }
364
+ | { tag: 'CharBackslash' }
365
+ | { tag: 'CharUnicodeEscape' }
366
+ | { tag: 'CharEnd' }
367
+ | { tag: 'StringStart' }
368
+ | { tag: 'StringContent' }
369
+ | { tag: 'StringBackslash' }
370
+ | { tag: 'EmptyStringMaybeTriple' }
371
+ | { tag: 'MultilineString' }
372
+ | { tag: 'MultilineStringBackslash' }
373
+ | { tag: 'MultilineString"' }
374
+ | { tag: 'MultilineString""' } */ = {
375
+ tag: 'Initial',
376
+ otherTokenChars: '',
377
+ };
378
+ void TokenizerState;
379
+
380
+ function tokenize(
381
+ char /*: string */,
382
+ tokenizerState /*: typeof TokenizerState */
383
+ ) /*:
384
+ | [
385
+ typeof TokenizerState,
386
+ Array<{ tag: 'Flush' } | { tag: 'FlushToken', token: typeof Token }>
387
+ ]
388
+ | typeof ParseError */ {
389
+ switch (tokenizerState.tag) {
390
+ case 'Initial':
391
+ switch (char) {
392
+ case ' ':
393
+ return [tokenizerState, [{ tag: 'Flush' }]];
394
+ case '\n':
395
+ return [{ tag: 'MaybeNewChunk' }, [{ tag: 'Flush' }]];
396
+ case '{':
397
+ return [{ tag: 'MaybeMultilineComment{' }, [{ tag: 'Flush' }]];
398
+ case '-':
399
+ return [{ tag: 'MaybeSinglelineComment-' }, [{ tag: 'Flush' }]];
400
+ case '.':
401
+ return [{ tag: 'Maybe..' }, [{ tag: 'Flush' }]];
402
+ case '(':
403
+ return [tokenizerState, [{ tag: 'FlushToken', token: { tag: '(' } }]];
404
+ case ')':
405
+ return [tokenizerState, [{ tag: 'FlushToken', token: { tag: ')' } }]];
406
+ case ',':
407
+ return [tokenizerState, [{ tag: 'FlushToken', token: { tag: ',' } }]];
408
+ case '=':
409
+ return [tokenizerState, [{ tag: 'FlushToken', token: { tag: '=' } }]];
410
+ case "'":
411
+ return [{ tag: 'CharStart' }, [{ tag: 'Flush' }]];
412
+ case '"':
413
+ return [{ tag: 'StringStart' }, [{ tag: 'Flush' }]];
414
+ default:
415
+ return [
416
+ {
417
+ tag: 'Initial',
418
+ otherTokenChars: tokenizerState.otherTokenChars + char,
419
+ },
420
+ [],
421
+ ];
422
+ }
423
+
424
+ case 'MaybeNewChunk':
425
+ switch (char) {
426
+ case ' ':
427
+ return [{ tag: 'Initial', otherTokenChars: '' }, []];
428
+ case '\n':
429
+ return [{ tag: 'MaybeNewChunk' }, []];
430
+ case '{':
431
+ return [{ tag: 'MaybeMultilineComment{' }, [{ tag: 'Flush' }]];
432
+ case '-':
433
+ return [{ tag: 'MaybeSinglelineComment-' }, [{ tag: 'Flush' }]];
434
+ default:
435
+ if (anyNameFirstChar.test(char)) {
436
+ return [
437
+ {
438
+ tag: 'Initial',
439
+ otherTokenChars: char,
440
+ },
441
+ [{ tag: 'FlushToken', token: { tag: 'NewChunk' } }],
442
+ ];
443
+ } else {
444
+ return expected('a letter', char);
445
+ }
446
+ }
447
+
448
+ case 'MaybeMultilineComment{':
449
+ switch (char) {
450
+ case '-':
451
+ return [{ tag: 'MultilineComment', level: 1 }, []];
452
+ default:
453
+ return tokenizeInitial('{', char, []);
454
+ }
455
+
456
+ case 'MultilineComment':
457
+ switch (char) {
458
+ case '{':
459
+ return [
460
+ { tag: 'MultilineComment{', level: tokenizerState.level },
461
+ [],
462
+ ];
463
+ case '-':
464
+ return [
465
+ { tag: 'MultilineComment-', level: tokenizerState.level },
466
+ [],
467
+ ];
468
+ default:
469
+ return [tokenizerState, []];
470
+ }
471
+
472
+ case 'MultilineComment{':
473
+ switch (char) {
474
+ case '-':
475
+ return [
476
+ { tag: 'MultilineComment', level: tokenizerState.level + 1 },
477
+ [],
478
+ ];
479
+ case '{':
480
+ return [
481
+ { tag: 'MultilineComment{', level: tokenizerState.level },
482
+ [],
483
+ ];
484
+ default:
485
+ return [{ tag: 'MultilineComment', level: tokenizerState.level }, []];
486
+ }
487
+
488
+ case 'MultilineComment-':
489
+ switch (char) {
490
+ case '}':
491
+ return [
492
+ tokenizerState.level <= 1
493
+ ? { tag: 'Initial', otherTokenChars: '' }
494
+ : { tag: 'MultilineComment', level: tokenizerState.level - 1 },
495
+ [],
496
+ ];
497
+ case '{':
498
+ return [
499
+ { tag: 'MultilineComment{', level: tokenizerState.level },
500
+ [],
501
+ ];
502
+ case '-':
503
+ return [
504
+ { tag: 'MultilineComment-', level: tokenizerState.level },
505
+ [],
506
+ ];
507
+ default:
508
+ return [{ tag: 'MultilineComment', level: tokenizerState.level }, []];
509
+ }
510
+
511
+ case 'MaybeSinglelineComment-':
512
+ switch (char) {
513
+ case '-':
514
+ return [{ tag: 'SinglelineComment' }, []];
515
+ default:
516
+ return tokenizeInitial('-', char, []);
517
+ }
518
+
519
+ case 'SinglelineComment':
520
+ switch (char) {
521
+ case '\n':
522
+ return [{ tag: 'Initial', otherTokenChars: '' }, []];
523
+ default:
524
+ return [tokenizerState, []];
525
+ }
526
+
527
+ case 'Maybe..':
528
+ switch (char) {
529
+ case '.':
530
+ return [
531
+ { tag: 'Initial', otherTokenChars: '' },
532
+ [{ tag: 'FlushToken', token: { tag: '..' } }],
533
+ ];
534
+ default:
535
+ return tokenizeInitial('', char, [
536
+ { tag: 'FlushToken', token: { tag: '.' } },
537
+ ]);
538
+ }
539
+
540
+ case 'CharStart':
541
+ switch (char) {
542
+ case '\n':
543
+ return expected('a non-newline', char);
544
+ case '\\':
545
+ return [{ tag: 'CharBackslash' }, []];
546
+ default:
547
+ return [{ tag: 'CharEnd' }, []];
548
+ }
549
+
550
+ case 'CharBackslash':
551
+ if (char === 'u') {
552
+ return [{ tag: 'CharUnicodeEscape' }, []];
553
+ } else if (backslashableChars.has(char)) {
554
+ return [{ tag: 'CharEnd' }, []];
555
+ } else {
556
+ return backslashError(char);
557
+ }
558
+
559
+ case 'CharUnicodeEscape':
560
+ switch (char) {
561
+ case "'":
562
+ return [
563
+ { tag: 'Initial', otherTokenChars: '' },
564
+ [{ tag: 'FlushToken', token: { tag: 'Char' } }],
565
+ ];
566
+ // Note: This allows invalid escapes like `\u}abc{1` or `\u{FFFFFFFFFF}`.
567
+ // It’s not worth parsing this exactly – see the comment at the top of this file.
568
+ case '{':
569
+ case '}':
570
+ case 'a':
571
+ case 'A':
572
+ case 'b':
573
+ case 'B':
574
+ case 'c':
575
+ case 'C':
576
+ case 'd':
577
+ case 'D':
578
+ case 'e':
579
+ case 'E':
580
+ case 'f':
581
+ case 'F':
582
+ case '0':
583
+ case '1':
584
+ case '2':
585
+ case '3':
586
+ case '4':
587
+ case '5':
588
+ case '6':
589
+ case '7':
590
+ case '8':
591
+ case '9':
592
+ return [{ tag: 'CharUnicodeEscape' }, []];
593
+ default:
594
+ return expected("a valid unicode escape or `'`", char);
595
+ }
596
+
597
+ case 'CharEnd':
598
+ switch (char) {
599
+ case "'":
600
+ return [
601
+ { tag: 'Initial', otherTokenChars: '' },
602
+ [{ tag: 'FlushToken', token: { tag: 'Char' } }],
603
+ ];
604
+ default:
605
+ return expected("`'`", char);
606
+ }
607
+
608
+ case 'StringStart':
609
+ switch (char) {
610
+ case '\n':
611
+ return expected('a non-newline', char);
612
+ case '\\':
613
+ return [{ tag: 'StringBackslash' }, []];
614
+ case '"':
615
+ return [{ tag: 'EmptyStringMaybeTriple' }, []];
616
+ default:
617
+ return [{ tag: 'StringContent' }, []];
618
+ }
619
+
620
+ case 'StringContent':
621
+ switch (char) {
622
+ case '\n':
623
+ return expected('a non-newline', char);
624
+ case '\\':
625
+ return [{ tag: 'StringBackslash' }, []];
626
+ case '"':
627
+ return [
628
+ { tag: 'Initial', otherTokenChars: '' },
629
+ [{ tag: 'FlushToken', token: { tag: 'String' } }],
630
+ ];
631
+ default:
632
+ return [{ tag: 'StringContent' }, []];
633
+ }
634
+
635
+ case 'StringBackslash':
636
+ if (backslashableChars.has(char)) {
637
+ return [{ tag: 'StringContent' }, []];
638
+ } else {
639
+ return backslashError(char);
640
+ }
641
+
642
+ case 'EmptyStringMaybeTriple':
643
+ switch (char) {
644
+ case '"':
645
+ return [{ tag: 'MultilineString' }, []];
646
+ default:
647
+ return tokenizeInitial('', char, [
648
+ { tag: 'FlushToken', token: { tag: 'String' } },
649
+ ]);
650
+ }
651
+
652
+ case 'MultilineString':
653
+ switch (char) {
654
+ case '"':
655
+ return [{ tag: 'MultilineString"' }, []];
656
+ case '\\':
657
+ return [{ tag: 'MultilineStringBackslash' }, []];
658
+ default:
659
+ return [{ tag: 'MultilineString' }, []];
660
+ }
661
+
662
+ case 'MultilineString"':
663
+ switch (char) {
664
+ case '"':
665
+ return [{ tag: 'MultilineString""' }, []];
666
+ case '\\':
667
+ return [{ tag: 'MultilineStringBackslash' }, []];
668
+ default:
669
+ return [{ tag: 'MultilineString' }, []];
670
+ }
671
+
672
+ case 'MultilineString""':
673
+ switch (char) {
674
+ case '"':
675
+ return [
676
+ { tag: 'Initial', otherTokenChars: '' },
677
+ [{ tag: 'FlushToken', token: { tag: 'String' } }],
678
+ ];
679
+ case '\\':
680
+ return [{ tag: 'MultilineStringBackslash' }, []];
681
+ default:
682
+ return [{ tag: 'MultilineString' }, []];
683
+ }
684
+
685
+ case 'MultilineStringBackslash':
686
+ if (backslashableChars.has(char)) {
687
+ return [{ tag: 'MultilineString' }, []];
688
+ } else {
689
+ return backslashError(char);
690
+ }
691
+
692
+ default:
693
+ return unreachable(tokenizerState.tag);
694
+ }
695
+ }
696
+
697
+ function tokenizeInitial(previousChar, char, cmds) {
698
+ const result = tokenize(char, {
699
+ tag: 'Initial',
700
+ otherTokenChars: previousChar,
701
+ });
702
+ if (result.tag === 'ParseError') {
703
+ return result;
704
+ }
705
+ const [nextTokenizerState, nextCmds] = result;
706
+ return [nextTokenizerState, cmds.concat(nextCmds)];
707
+ }
708
+
709
+ const ParserState /*:
710
+ | {
711
+ tag: 'ModuleDeclaration',
712
+ lastToken: typeof ModuleDeclarationLastToken,
713
+ }
714
+ | {
715
+ tag: 'Rest',
716
+ lastToken: typeof RestLastToken,
717
+ } */ = { tag: 'ModuleDeclaration', lastToken: 'Nothing' };
718
+ void ParserState;
719
+
720
+ const ModuleDeclarationLastToken /*:
721
+ | 'Nothing'
722
+ | 'NewChunk'
723
+ | 'port'
724
+ | 'module'
725
+ | 'ModuleName'
726
+ | 'ModuleName.'
727
+ | 'exposing'
728
+ | 'exposing('
729
+ | 'exposing..'
730
+ | 'LowerName'
731
+ | 'UpperName'
732
+ | 'UpperName('
733
+ | 'UpperName..'
734
+ | 'UpperName)'
735
+ | ',' */ = 'Nothing';
736
+ void ModuleDeclarationLastToken;
737
+
738
+ function parseModuleDeclaration(
739
+ token /*: typeof Token */,
740
+ lastToken /*: typeof ModuleDeclarationLastToken */
741
+ ) /*:
742
+ | typeof ModuleDeclarationLastToken
743
+ | { tag: 'NextParserState' }
744
+ | typeof OnParserTokenResult */ {
745
+ switch (lastToken) {
746
+ case 'Nothing':
747
+ if (token.tag === 'NewChunk') {
748
+ return 'NewChunk';
749
+ }
750
+ return expected('a new chunk', token);
751
+
752
+ case 'NewChunk':
753
+ switch (token.tag) {
754
+ case 'LowerName':
755
+ case 'Other':
756
+ switch (token.value) {
757
+ case 'port':
758
+ return 'port';
759
+ case 'effect': // Not a reserved word, so this is a LowerName.
760
+ return {
761
+ tag: 'CriticalParseError',
762
+ message:
763
+ 'It starts with `effect module`. Effect modules can only exist inside src/ in elm and elm-explorations packages. They cannot contain tests.',
764
+ };
765
+ case 'module':
766
+ return 'module';
767
+ }
768
+ }
769
+ return expected('`port` or `module`', token);
770
+
771
+ case 'port':
772
+ if (token.tag === 'Other' && token.value === 'module') {
773
+ return 'module';
774
+ }
775
+ return expected('`module`', token);
776
+
777
+ case 'module':
778
+ if (token.tag === 'UpperName') {
779
+ return 'ModuleName';
780
+ }
781
+ return expected('a module name', token);
782
+
783
+ case 'ModuleName':
784
+ switch (token.tag) {
785
+ case '.':
786
+ return 'ModuleName.';
787
+ case 'Other':
788
+ if (token.value === 'exposing') {
789
+ return 'exposing';
790
+ }
791
+ }
792
+ return expected('`.` or `exposing`', token);
793
+
794
+ case 'ModuleName.':
795
+ if (token.tag === 'UpperName') {
796
+ return 'ModuleName';
797
+ }
798
+ return expected('a module name', token);
799
+
800
+ case 'exposing':
801
+ if (token.tag === '(') {
802
+ return 'exposing(';
803
+ }
804
+ return expected('`(`', token);
805
+
806
+ case 'exposing(':
807
+ switch (token.tag) {
808
+ case '..':
809
+ return 'exposing..';
810
+ case 'LowerName':
811
+ return 'LowerName';
812
+ case 'UpperName':
813
+ return 'UpperName';
814
+ }
815
+ return expected('an exposed name or `..`', token);
816
+
817
+ case 'exposing..':
818
+ if (token.tag === ')') {
819
+ return { tag: 'NextParserState' };
820
+ }
821
+ return expected('`)`', token);
822
+
823
+ case 'LowerName':
824
+ switch (token.tag) {
825
+ case ',':
826
+ return ',';
827
+ case ')':
828
+ return { tag: 'StopParsing' };
829
+ }
830
+ return expected('`)` or `,`', token);
831
+
832
+ case 'UpperName':
833
+ switch (token.tag) {
834
+ case ',':
835
+ return ',';
836
+ case '(':
837
+ return 'UpperName(';
838
+ case ')':
839
+ return { tag: 'StopParsing' };
840
+ }
841
+ return expected('`(`, `)` or `,`', token);
842
+
843
+ case 'UpperName(':
844
+ if (token.tag === '..') {
845
+ return 'UpperName..';
846
+ }
847
+ return expected('`..`', token);
848
+
849
+ case 'UpperName..':
850
+ if (token.tag === ')') {
851
+ return 'UpperName)';
852
+ }
853
+ return expected('`)`', token);
854
+
855
+ case 'UpperName)':
856
+ switch (token.tag) {
857
+ case ',':
858
+ return ',';
859
+ case ')':
860
+ return { tag: 'StopParsing' };
861
+ }
862
+ return expected('`)` or `,`', token);
863
+
864
+ case ',':
865
+ switch (token.tag) {
866
+ case 'LowerName':
867
+ return 'LowerName';
868
+ case 'UpperName':
869
+ return 'UpperName';
870
+ }
871
+ return expected('an exposed name', token);
872
+
873
+ default:
874
+ return unreachable(lastToken);
875
+ }
876
+ }
877
+
878
+ const RestLastToken /*:
879
+ | 'Initial'
880
+ | 'NewChunk'
881
+ | 'PotentialTestDeclarationName'
882
+ | 'PotentialTestDeclaration='
883
+ | 'Ignore' */ = 'Initial';
884
+ void RestLastToken;
885
+
886
+ function parseRest(
887
+ token /*: typeof Token */,
888
+ lastToken /*: typeof RestLastToken */
889
+ ) /*: typeof RestLastToken | typeof ParseError */ {
890
+ switch (lastToken) {
891
+ case 'Initial':
892
+ if (token.tag === 'NewChunk') {
893
+ return 'NewChunk';
894
+ }
895
+ return expected('a new chunk', token);
896
+
897
+ case 'NewChunk':
898
+ switch (token.tag) {
899
+ case 'LowerName':
900
+ return 'PotentialTestDeclarationName';
901
+ case 'Other':
902
+ if (validNewChunkKeywordsAfterModuleDeclaration.has(token.value)) {
903
+ return 'Ignore';
904
+ }
905
+ break;
906
+ }
907
+ return expected(
908
+ `${Array.from(
909
+ validNewChunkKeywordsAfterModuleDeclaration,
910
+ (keyword) => `\`${keyword}\``
911
+ ).join(', ')} or a name`,
912
+ token
913
+ );
914
+
915
+ case 'PotentialTestDeclarationName':
916
+ if (token.tag === '=') {
917
+ return 'PotentialTestDeclaration=';
918
+ }
919
+ return 'Ignore';
920
+
921
+ case 'PotentialTestDeclaration=':
922
+ if (token.tag === 'NewChunk') {
923
+ return expected('a definition', token);
924
+ }
925
+ return 'Ignore';
926
+
927
+ case 'Ignore':
928
+ if (token.tag === 'NewChunk') {
929
+ return 'NewChunk';
930
+ }
931
+ return 'Ignore';
932
+
933
+ default:
934
+ return unreachable(lastToken);
935
+ }
936
+ }
937
+
938
+ module.exports = {
939
+ extractExposedPossiblyTests,
940
+ isUpperName,
941
+ };