tungsten 0.6.3 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (532) hide show
  1. package/dist/.build-complete +1 -1
  2. package/dist/Brands.d.ts +16 -0
  3. package/dist/Brands.d.ts.map +1 -0
  4. package/dist/Brands.js +22 -0
  5. package/dist/Components.d.ts +4 -1
  6. package/dist/Components.d.ts.map +1 -1
  7. package/dist/Components.js +24 -6
  8. package/dist/ContentNode.d.ts +3 -2
  9. package/dist/ContentNode.d.ts.map +1 -1
  10. package/dist/ContentNode.js +11 -0
  11. package/dist/Framework.d.ts.map +1 -1
  12. package/dist/Framework.js +23 -4
  13. package/dist/FrameworkConfig.d.ts +9 -1
  14. package/dist/FrameworkConfig.d.ts.map +1 -1
  15. package/dist/FrameworkConfig.types.test.d.ts +2 -0
  16. package/dist/FrameworkConfig.types.test.d.ts.map +1 -0
  17. package/dist/FrameworkConfig.types.test.js +6 -0
  18. package/dist/FunctionComponent.d.ts +1 -0
  19. package/dist/FunctionComponent.d.ts.map +1 -1
  20. package/dist/FunctionComponentStandIn.d.ts.map +1 -1
  21. package/dist/Instance/Instance.d.ts +21 -9
  22. package/dist/Instance/Instance.d.ts.map +1 -1
  23. package/dist/Instance/Instance.js +42 -38
  24. package/dist/Instance/InstanceConfig.d.ts +3 -1
  25. package/dist/Instance/InstanceConfig.d.ts.map +1 -1
  26. package/dist/RenderedContentNode.d.ts.map +1 -1
  27. package/dist/RenderingNode.d.ts.map +1 -1
  28. package/dist/Servers/DevServer.d.ts +4 -2
  29. package/dist/Servers/DevServer.d.ts.map +1 -1
  30. package/dist/Servers/DevServer.js +72 -21
  31. package/dist/Servers/ProdServer.d.ts +5 -2
  32. package/dist/Servers/ProdServer.d.ts.map +1 -1
  33. package/dist/Servers/ProdServer.js +95 -19
  34. package/dist/Servers/StaticSiteServer.d.ts +1 -1
  35. package/dist/Servers/StaticSiteServer.d.ts.map +1 -1
  36. package/dist/Servers/TungstenServer.d.ts +2 -1
  37. package/dist/Servers/TungstenServer.d.ts.map +1 -1
  38. package/dist/Servers/TungstenServer.js +7 -0
  39. package/dist/Servers/cacheVersioned.d.ts +3 -0
  40. package/dist/Servers/cacheVersioned.d.ts.map +1 -0
  41. package/dist/Servers/cacheVersioned.js +23 -0
  42. package/dist/Servers/devErrorPageAutoRetry.d.ts.map +1 -1
  43. package/dist/Servers/devErrorPageAutoRetry.js +1 -0
  44. package/dist/Servers/initStores.d.ts +4 -4
  45. package/dist/Servers/initStores.d.ts.map +1 -1
  46. package/dist/Servers/initStores.js +2 -2
  47. package/dist/Servers/loadEnvsDev.d.ts.map +1 -1
  48. package/dist/Servers/loadEnvsDev.js +7 -6
  49. package/dist/Servers/resetRegistrations.d.ts +2 -0
  50. package/dist/Servers/resetRegistrations.d.ts.map +1 -0
  51. package/dist/Servers/resetRegistrations.js +13 -0
  52. package/dist/Servers/routing.d.ts +3 -2
  53. package/dist/Servers/routing.d.ts.map +1 -1
  54. package/dist/Servers/routing.js +12 -7
  55. package/dist/Servers/stubInstance.d.ts +8 -0
  56. package/dist/Servers/stubInstance.d.ts.map +1 -0
  57. package/dist/Servers/stubInstance.js +40 -0
  58. package/dist/Store/InternalStoreSchema.d.ts +1 -1
  59. package/dist/Store/Store.js +2 -1
  60. package/dist/Store/StoreSchemaClass.d.ts +6 -3
  61. package/dist/Store/StoreSchemaClass.d.ts.map +1 -1
  62. package/dist/Store/StoreSchemaClass.js +8 -1
  63. package/dist/Store/TypeSafeStore.js +2 -1
  64. package/dist/Store/createStores.d.ts +3 -3
  65. package/dist/Store/createStores.d.ts.map +1 -1
  66. package/dist/Store/createStores.js +7 -2
  67. package/dist/Store/getInternalStore.d.ts.map +1 -1
  68. package/dist/Store/registerStore.d.ts.map +1 -1
  69. package/dist/Store/registerStore.js +2 -2
  70. package/dist/Store/storeCreators.d.ts +2 -2
  71. package/dist/Store/storeCreators.d.ts.map +1 -1
  72. package/dist/TungstenApp.d.ts +3 -3
  73. package/dist/TungstenApp.d.ts.map +1 -1
  74. package/dist/_client/cjsHelpers.d.ts.map +1 -1
  75. package/dist/_client/cjsHelpers.js +5 -3
  76. package/dist/_client/client.d.ts +2 -0
  77. package/dist/_client/client.d.ts.map +1 -1
  78. package/dist/_client/client.js +10 -3
  79. package/dist/api/getApiRoutes.d.ts.map +1 -1
  80. package/dist/api/getExport.d.ts +1 -1
  81. package/dist/api/getExport.d.ts.map +1 -1
  82. package/dist/api/getExport.js +2 -1
  83. package/dist/api/getExportDev.d.ts +1 -1
  84. package/dist/api/getExportDev.d.ts.map +1 -1
  85. package/dist/appBuilder.d.ts +69 -0
  86. package/dist/appBuilder.d.ts.map +1 -0
  87. package/dist/appBuilder.js +98 -0
  88. package/dist/appBuilder.types.test.d.ts +110 -0
  89. package/dist/appBuilder.types.test.d.ts.map +1 -0
  90. package/dist/appBuilder.types.test.js +240 -0
  91. package/dist/babelPlugins/BabelTransformBindDirect.js +7 -7
  92. package/dist/babelPlugins/BabelTransformBindVar.js +7 -7
  93. package/dist/babelPlugins/BabelTransformComponentState.d.ts.map +1 -1
  94. package/dist/babelPlugins/BabelTransformComponentStyles.d.ts.map +1 -1
  95. package/dist/babelPlugins/BabelTransformComponentStyles.js +5 -5
  96. package/dist/babelPlugins/BabelTransformCssImports.d.ts.map +1 -1
  97. package/dist/babelPlugins/BabelTransformCssImports.js +2 -2
  98. package/dist/babelPlugins/BabelTransformDeproxyState.d.ts.map +1 -1
  99. package/dist/babelPlugins/BabelTransformPackageImports.d.ts.map +1 -1
  100. package/dist/babelPlugins/BabelTransformPackageImports.js +11 -6
  101. package/dist/babelPlugins/BabelTransformRemoveDevBlocks.d.ts.map +1 -1
  102. package/dist/babelPlugins/BabelTransformRemoveServerBlocks.d.ts.map +1 -1
  103. package/dist/babelPlugins/BabelTypes.d.ts.map +1 -1
  104. package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsCjs.d.ts.map +1 -1
  105. package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsCjs.js +1 -1
  106. package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsEsm.d.ts.map +1 -1
  107. package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsEsm.js +2 -2
  108. package/dist/bin/commands/compile.d.ts.map +1 -1
  109. package/dist/bin/commands/compile.js +2 -1
  110. package/dist/build/CompilationInfo.d.ts +3 -0
  111. package/dist/build/CompilationInfo.d.ts.map +1 -1
  112. package/dist/build/assetVersions.d.ts +9 -0
  113. package/dist/build/assetVersions.d.ts.map +1 -0
  114. package/dist/build/assetVersions.js +39 -0
  115. package/dist/build/babel.user.common.config.d.ts.map +1 -1
  116. package/dist/build/bundle.d.ts.map +1 -1
  117. package/dist/build/bundle.js +2 -1
  118. package/dist/build/bundleBabelOptions.d.ts.map +1 -1
  119. package/dist/build/clientRoutesFile.d.ts +2 -0
  120. package/dist/build/clientRoutesFile.d.ts.map +1 -0
  121. package/dist/build/clientRoutesFile.js +13 -0
  122. package/dist/build/compileJavascript.d.ts.map +1 -1
  123. package/dist/build/compileJavascript.js +4 -3
  124. package/dist/build/compileStyles.d.ts +2 -1
  125. package/dist/build/compileStyles.d.ts.map +1 -1
  126. package/dist/build/compileStyles.js +38 -83
  127. package/dist/build/compileUserApp.d.ts.map +1 -1
  128. package/dist/build/componentStylesCache.d.ts.map +1 -1
  129. package/dist/build/componentStylesCache.js +3 -2
  130. package/dist/build/copyAssets.d.ts.map +1 -1
  131. package/dist/build/copyAssets.js +2 -1
  132. package/dist/build/copyPackageModulesToPackagesFolder.d.ts.map +1 -1
  133. package/dist/build/copyPackageModulesToPackagesFolder.js +1 -1
  134. package/dist/build/copyPublicFiles.d.ts.map +1 -1
  135. package/dist/build/copyPublicFiles.js +2 -1
  136. package/dist/build/createClientFiles.d.ts.map +1 -1
  137. package/dist/build/createClientFiles.js +9 -5
  138. package/dist/build/createInstanceConfigFile.d.ts +1 -1
  139. package/dist/build/createInstanceConfigFile.d.ts.map +1 -1
  140. package/dist/build/createInstanceConfigFile.js +9 -3
  141. package/dist/build/frameworkDestLocation.d.ts.map +1 -1
  142. package/dist/build/frameworkDestLocation.js +5 -6
  143. package/dist/build/frameworkStylesheets.d.ts.map +1 -1
  144. package/dist/build/frameworkStylesheets.js +1 -1
  145. package/dist/build/makeBabelRawConfig.d.ts.map +1 -1
  146. package/dist/build/makeBabelUserDevConfig.d.ts +2 -2
  147. package/dist/build/makeBabelUserDevConfig.d.ts.map +1 -1
  148. package/dist/build/makeBabelUserProdConfig.d.ts.map +1 -1
  149. package/dist/build/rollup.user.prod.config.d.ts.map +1 -1
  150. package/dist/build/rollup.user.prod.config.js +5 -3
  151. package/dist/build/rollupProdConstants.d.ts +5 -0
  152. package/dist/build/rollupProdConstants.d.ts.map +1 -0
  153. package/dist/build/rollupProdConstants.js +21 -0
  154. package/dist/cacheControl.d.ts +13 -0
  155. package/dist/cacheControl.d.ts.map +1 -0
  156. package/dist/cacheControl.js +22 -0
  157. package/dist/compat/types.d.ts +1 -1
  158. package/dist/compat/types.d.ts.map +1 -1
  159. package/dist/componentHelpers.d.ts +19 -0
  160. package/dist/componentHelpers.d.ts.map +1 -0
  161. package/dist/componentHelpers.js +31 -0
  162. package/dist/componentProxyHandlers.d.ts.map +1 -1
  163. package/dist/components/Fragment.d.ts +8 -0
  164. package/dist/components/Fragment.d.ts.map +1 -0
  165. package/dist/components/Fragment.js +10 -0
  166. package/dist/components/Link.d.ts +4 -3
  167. package/dist/components/Link.d.ts.map +1 -1
  168. package/dist/components/Link.js +1 -0
  169. package/dist/components/NoEscape.d.ts +8 -0
  170. package/dist/components/NoEscape.d.ts.map +1 -0
  171. package/dist/components/NoEscape.js +6 -0
  172. package/dist/components/RouteRedirectComponent.d.ts.map +1 -1
  173. package/dist/components/RouteRedirectComponent.js +1 -1
  174. package/dist/components/WebRedirectComponent.d.ts.map +1 -1
  175. package/dist/components/WebRedirectComponent.js +1 -1
  176. package/dist/components/bindable/BindVariable.d.ts +1 -0
  177. package/dist/components/bindable/BindVariable.d.ts.map +1 -1
  178. package/dist/components/bindable/BindableCheckbox.d.ts +7 -7
  179. package/dist/components/bindable/BindableCheckbox.d.ts.map +1 -1
  180. package/dist/components/bindable/BindableInput.d.ts +7 -7
  181. package/dist/components/bindable/BindableInput.d.ts.map +1 -1
  182. package/dist/components/bindable/BindableInputNonString.d.ts +2 -2
  183. package/dist/components/bindable/BindableInputNonString.d.ts.map +1 -1
  184. package/dist/components/bindable/BindableInputString.d.ts +2 -2
  185. package/dist/components/bindable/BindableInputString.d.ts.map +1 -1
  186. package/dist/components/bindable/BindableInputTyped.d.ts +3 -3
  187. package/dist/components/bindable/BindableInputTyped.d.ts.map +1 -1
  188. package/dist/components/bindable/BindableInputTypedLegacy.d.ts +3 -3
  189. package/dist/components/bindable/BindableInputTypedLegacy.d.ts.map +1 -1
  190. package/dist/components/bindable/BindableRadio.js +2 -2
  191. package/dist/components/bindable/BindableSelect.d.ts +13 -10
  192. package/dist/components/bindable/BindableSelect.d.ts.map +1 -1
  193. package/dist/components/bindable/BindableSelectNaive.js +3 -3
  194. package/dist/components/bindable/BindableTextarea.d.ts +7 -7
  195. package/dist/components/bindable/BindableTextarea.d.ts.map +1 -1
  196. package/dist/components/bindable/bindableCandidates.comparison.d.ts +136 -0
  197. package/dist/components/bindable/bindableCandidates.comparison.d.ts.map +1 -0
  198. package/dist/components/bindable/bindableCandidates.comparison.js +268 -0
  199. package/dist/components/bindable/bindableProps.types.test.d.ts +50 -0
  200. package/dist/components/bindable/bindableProps.types.test.d.ts.map +1 -0
  201. package/dist/components/bindable/bindableProps.types.test.js +252 -0
  202. package/dist/components/library/RichTextEditor/RichTextEditor.d.ts.map +1 -1
  203. package/dist/components/library/RichTextEditor/contentTree.d.ts.map +1 -1
  204. package/dist/components/makeTypedLink.d.ts +9 -0
  205. package/dist/components/makeTypedLink.d.ts.map +1 -0
  206. package/dist/components/makeTypedLink.js +15 -0
  207. package/dist/context/registerContext.d.ts +22 -0
  208. package/dist/context/registerContext.d.ts.map +1 -0
  209. package/dist/context/registerContext.js +18 -0
  210. package/dist/env/getEnvSchemas.d.ts.map +1 -1
  211. package/dist/env/getEnvSchemas.js +2 -1
  212. package/dist/fileVersions.d.ts +9 -0
  213. package/dist/fileVersions.d.ts.map +1 -0
  214. package/dist/fileVersions.js +28 -0
  215. package/dist/findUserConfig.d.ts +1 -1
  216. package/dist/findUserConfig.d.ts.map +1 -1
  217. package/dist/findUserConfig.js +2 -1
  218. package/dist/frameworkConfigSchema.d.ts +16 -2
  219. package/dist/frameworkConfigSchema.d.ts.map +1 -1
  220. package/dist/frameworkConfigSchema.js +15 -3
  221. package/dist/getComponent.d.ts.map +1 -1
  222. package/dist/getComponent.js +4 -3
  223. package/dist/getRoutes.d.ts.map +1 -1
  224. package/dist/getRoutes.js +9 -8
  225. package/dist/getUserConfig.d.ts.map +1 -1
  226. package/dist/hmr/applyHmrModule.d.ts.map +1 -1
  227. package/dist/hmr/componentIdentity.js +1 -1
  228. package/dist/hooks/getCurrentComponent.d.ts +1 -1
  229. package/dist/hooks/getCurrentComponent.d.ts.map +1 -1
  230. package/dist/hydrate/hydrate.d.ts +5 -1
  231. package/dist/hydrate/hydrate.d.ts.map +1 -1
  232. package/dist/hydrate/hydrate.js +86 -52
  233. package/dist/hydrate/hydrateGlobalData.d.ts +4 -3
  234. package/dist/hydrate/hydrateGlobalData.d.ts.map +1 -1
  235. package/dist/hydrate/reconcileHydratedAttributes.d.ts +2 -1
  236. package/dist/hydrate/reconcileHydratedAttributes.d.ts.map +1 -1
  237. package/dist/hydrate/reconcileHydratedAttributes.js +4 -3
  238. package/dist/hydrate/renderHydrationMismatchBanner.d.ts.map +1 -1
  239. package/dist/hydrate/renderHydrationMismatchBanner.js +2 -1
  240. package/dist/hydrate/stubRouting.d.ts +8 -0
  241. package/dist/hydrate/stubRouting.d.ts.map +1 -0
  242. package/dist/hydrate/stubRouting.js +25 -0
  243. package/dist/importDevModuleWithRetry.d.ts +2 -1
  244. package/dist/importDevModuleWithRetry.d.ts.map +1 -1
  245. package/dist/importDevModuleWithRetry.js +2 -1
  246. package/dist/importModule.d.ts +3 -0
  247. package/dist/importModule.d.ts.map +1 -0
  248. package/dist/importModule.js +4 -0
  249. package/dist/index.js +2 -1
  250. package/dist/indexInner.d.ts +30 -7
  251. package/dist/indexInner.d.ts.map +1 -1
  252. package/dist/indexInner.js +37 -2
  253. package/dist/json.d.ts +12 -0
  254. package/dist/json.d.ts.map +1 -0
  255. package/dist/json.js +8 -0
  256. package/dist/jsxHelpers.d.ts +3 -0
  257. package/dist/jsxHelpers.d.ts.map +1 -0
  258. package/dist/jsxHelpers.js +6 -0
  259. package/dist/jsxRuntime.d.ts +1 -0
  260. package/dist/jsxRuntime.d.ts.map +1 -1
  261. package/dist/jsxRuntime.js +3 -1
  262. package/dist/jsxRuntimeSignals.d.ts.map +1 -1
  263. package/dist/jsxRuntimeSignals.js +1 -0
  264. package/dist/makeFinalConfig.d.ts.map +1 -1
  265. package/dist/makeFinalConfig.js +2 -0
  266. package/dist/makeInstanceConfigFromFrameworkConfig.d.ts.map +1 -1
  267. package/dist/makeInstanceConfigFromFrameworkConfig.js +2 -0
  268. package/dist/mergeConfigs.d.ts.map +1 -1
  269. package/dist/mergeConfigs.js +2 -6
  270. package/dist/nbsp.d.ts +1 -2
  271. package/dist/nbsp.d.ts.map +1 -1
  272. package/dist/nbsp.js +3 -7
  273. package/dist/objectMap.d.ts +1 -1
  274. package/dist/objectMap.d.ts.map +1 -1
  275. package/dist/pipeline/PipelineRequestHandler.d.ts +25 -0
  276. package/dist/pipeline/PipelineRequestHandler.d.ts.map +1 -0
  277. package/dist/pipeline/PipelineRequestHandler.js +104 -0
  278. package/dist/pipeline/contextStore.d.ts +12 -0
  279. package/dist/pipeline/contextStore.d.ts.map +1 -0
  280. package/dist/pipeline/contextStore.js +13 -0
  281. package/dist/pipeline/hydratePipeline.d.ts +4 -0
  282. package/dist/pipeline/hydratePipeline.d.ts.map +1 -0
  283. package/dist/pipeline/hydratePipeline.js +83 -0
  284. package/dist/pipeline/importRoutesModule.d.ts +6 -0
  285. package/dist/pipeline/importRoutesModule.d.ts.map +1 -0
  286. package/dist/pipeline/importRoutesModule.js +33 -0
  287. package/dist/pipeline/networkedTransport.d.ts +11 -0
  288. package/dist/pipeline/networkedTransport.d.ts.map +1 -0
  289. package/dist/pipeline/networkedTransport.js +54 -0
  290. package/dist/pipeline/pipeline.d.ts +107 -0
  291. package/dist/pipeline/pipeline.d.ts.map +1 -0
  292. package/dist/pipeline/pipeline.js +113 -0
  293. package/dist/pipeline/pipeline.types.test.d.ts +760 -0
  294. package/dist/pipeline/pipeline.types.test.d.ts.map +1 -0
  295. package/dist/pipeline/pipeline.types.test.js +344 -0
  296. package/dist/pipeline/pipelineDefinition.d.ts +78 -0
  297. package/dist/pipeline/pipelineDefinition.d.ts.map +1 -0
  298. package/dist/pipeline/pipelineDefinition.js +11 -0
  299. package/dist/pipeline/pipelineSplit.types.test.d.ts +2445 -0
  300. package/dist/pipeline/pipelineSplit.types.test.d.ts.map +1 -0
  301. package/dist/pipeline/pipelineSplit.types.test.js +440 -0
  302. package/dist/pipeline/runPipeline.d.ts +29 -0
  303. package/dist/pipeline/runPipeline.d.ts.map +1 -0
  304. package/dist/pipeline/runPipeline.js +71 -0
  305. package/dist/pipeline/runSplitPipeline.d.ts +10 -0
  306. package/dist/pipeline/runSplitPipeline.d.ts.map +1 -0
  307. package/dist/pipeline/runSplitPipeline.js +52 -0
  308. package/dist/pipeline/splitPipeline.d.ts +62 -0
  309. package/dist/pipeline/splitPipeline.d.ts.map +1 -0
  310. package/dist/pipeline/splitPipeline.js +76 -0
  311. package/dist/pop.js +1 -1
  312. package/dist/rawHtml/filterContentNode.d.ts.map +1 -1
  313. package/dist/render/HeadData.d.ts +3 -1
  314. package/dist/render/HeadData.d.ts.map +1 -1
  315. package/dist/render/classComponentNodeToRenderingTree.d.ts.map +1 -1
  316. package/dist/render/componentNodeToRenderingTree.d.ts.map +1 -1
  317. package/dist/render/contentToHtml.d.ts +2 -2
  318. package/dist/render/contentToHtml.d.ts.map +1 -1
  319. package/dist/render/contentToHtml.js +2 -1
  320. package/dist/render/contentToHtmlDev.d.ts +1 -1
  321. package/dist/render/contentToHtmlDev.d.ts.map +1 -1
  322. package/dist/render/contentTreeToRenderingTree.d.ts.map +1 -1
  323. package/dist/render/contentTreeToRenderingTree.js +6 -2
  324. package/dist/render/functionComponentNodeToRenderingTree.d.ts.map +1 -1
  325. package/dist/render/functionComponentNodeToRenderingTree.js +2 -2
  326. package/dist/render/instantiateComponent.d.ts.map +1 -1
  327. package/dist/render/processHead.d.ts.map +1 -1
  328. package/dist/render/processHead.js +12 -18
  329. package/dist/render/renderingTreeToHtml.d.ts.map +1 -1
  330. package/dist/render/renderingTreeToHtml.js +6 -3
  331. package/dist/render/rootToHtml.d.ts +2 -2
  332. package/dist/render/rootToHtml.d.ts.map +1 -1
  333. package/dist/requests/fetch/delete.d.ts.map +1 -1
  334. package/dist/requests/fetch/delete.js +5 -2
  335. package/dist/requests/fetch/get.js +1 -1
  336. package/dist/requests/fetch/patch.d.ts.map +1 -1
  337. package/dist/requests/fetch/patch.js +5 -2
  338. package/dist/requests/fetch/post.d.ts.map +1 -1
  339. package/dist/requests/fetch/post.js +5 -2
  340. package/dist/requests/fetch/put.d.ts.map +1 -1
  341. package/dist/requests/fetch/put.js +5 -2
  342. package/dist/routesLocationParts.d.ts +6 -0
  343. package/dist/routesLocationParts.d.ts.map +1 -0
  344. package/dist/routesLocationParts.js +10 -0
  345. package/dist/routing/AppRoutes.d.ts +5 -3
  346. package/dist/routing/AppRoutes.d.ts.map +1 -1
  347. package/dist/routing/MatchedRouteInfo.d.ts +13 -0
  348. package/dist/routing/MatchedRouteInfo.d.ts.map +1 -0
  349. package/dist/routing/MatchedRouteInfo.js +1 -0
  350. package/dist/routing/RouteContentFunction.d.ts +1 -2
  351. package/dist/routing/RouteContentFunction.d.ts.map +1 -1
  352. package/dist/routing/RouteDataFunction.type.d.ts +4 -2
  353. package/dist/routing/RouteDataFunction.type.d.ts.map +1 -1
  354. package/dist/routing/RoutePaths.d.ts +12 -0
  355. package/dist/routing/RoutePaths.d.ts.map +1 -0
  356. package/dist/routing/RouteTypes.d.ts +6 -4
  357. package/dist/routing/RouteTypes.d.ts.map +1 -1
  358. package/dist/routing/Routes.d.ts +20 -11
  359. package/dist/routing/Routes.d.ts.map +1 -1
  360. package/dist/routing/RoutesFunction.d.ts +11 -2
  361. package/dist/routing/RoutesFunction.d.ts.map +1 -1
  362. package/dist/routing/Serializable.d.ts +5 -0
  363. package/dist/routing/Serializable.d.ts.map +1 -0
  364. package/dist/routing/Serializable.js +1 -0
  365. package/dist/routing/builder.d.ts +100 -0
  366. package/dist/routing/builder.d.ts.map +1 -0
  367. package/dist/routing/builder.js +219 -0
  368. package/dist/routing/builder.trial.d.ts +2 -0
  369. package/dist/routing/builder.trial.d.ts.map +1 -0
  370. package/dist/routing/builder.trial.js +85 -0
  371. package/dist/routing/defineRoutes.d.ts +8 -0
  372. package/dist/routing/defineRoutes.d.ts.map +1 -0
  373. package/dist/routing/defineRoutes.js +3 -0
  374. package/dist/routing/pyramidRouting.d.ts +2 -0
  375. package/dist/routing/pyramidRouting.d.ts.map +1 -0
  376. package/dist/routing/pyramidRouting.js +13 -0
  377. package/dist/routing/redirectOf.d.ts +11 -0
  378. package/dist/routing/redirectOf.d.ts.map +1 -0
  379. package/dist/routing/redirectOf.js +32 -0
  380. package/dist/routing/registerGlobalData.d.ts +11 -3
  381. package/dist/routing/registerGlobalData.d.ts.map +1 -1
  382. package/dist/routing/registerGlobalData.js +6 -0
  383. package/dist/routing/registerParts.types.test.d.ts +2 -0
  384. package/dist/routing/registerParts.types.test.d.ts.map +1 -0
  385. package/dist/routing/registerParts.types.test.js +139 -0
  386. package/dist/routing/registerRoutes.d.ts +10 -0
  387. package/dist/routing/registerRoutes.d.ts.map +1 -0
  388. package/dist/routing/registerRoutes.js +9 -0
  389. package/dist/routing/registerRouting.d.ts +36 -0
  390. package/dist/routing/registerRouting.d.ts.map +1 -0
  391. package/dist/routing/registerRouting.js +34 -0
  392. package/dist/routing/registerRouting.types.test.d.ts +80 -0
  393. package/dist/routing/registerRouting.types.test.d.ts.map +1 -0
  394. package/dist/routing/registerRouting.types.test.js +120 -0
  395. package/dist/routing/registrationTypes.d.ts +11 -0
  396. package/dist/routing/registrationTypes.d.ts.map +1 -0
  397. package/dist/routing/registrationTypes.js +1 -0
  398. package/dist/routing/resolveAppRoutes.d.ts +5 -0
  399. package/dist/routing/resolveAppRoutes.d.ts.map +1 -0
  400. package/dist/routing/resolveAppRoutes.js +25 -0
  401. package/dist/routing/routesArray.d.ts +23 -0
  402. package/dist/routing/routesArray.d.ts.map +1 -0
  403. package/dist/routing/routesArray.js +20 -0
  404. package/dist/routing/routesArray.types.test.d.ts +2 -0
  405. package/dist/routing/routesArray.types.test.d.ts.map +1 -0
  406. package/dist/routing/routesArray.types.test.js +132 -0
  407. package/dist/routing/routingBuilder.d.ts +34 -0
  408. package/dist/routing/routingBuilder.d.ts.map +1 -0
  409. package/dist/routing/routingBuilder.js +32 -0
  410. package/dist/routing/routingBuilder.types.test.d.ts +2 -0
  411. package/dist/routing/routingBuilder.types.test.d.ts.map +1 -0
  412. package/dist/routing/routingBuilder.types.test.js +171 -0
  413. package/dist/routing/routingRegistry.d.ts +19 -0
  414. package/dist/routing/routingRegistry.d.ts.map +1 -0
  415. package/dist/routing/routingRegistry.js +29 -0
  416. package/dist/staticGen/getAppRoutes.d.ts +2 -2
  417. package/dist/staticGen/getAppRoutes.d.ts.map +1 -1
  418. package/dist/staticGen/getAppRoutes.js +9 -6
  419. package/dist/staticGen/staticGen.d.ts.map +1 -1
  420. package/dist/staticGen/staticGen.js +8 -2
  421. package/dist/style/styleContentSxy.d.ts.map +1 -1
  422. package/dist/sync/index.d.ts.map +1 -1
  423. package/dist/sync/index.js +2 -0
  424. package/dist/syncServer/index.cjs +1 -2
  425. package/dist/syncServer/preload.js +2 -0
  426. package/dist/testing/contentToString.d.ts +13 -0
  427. package/dist/testing/contentToString.d.ts.map +1 -0
  428. package/dist/testing/contentToString.js +105 -0
  429. package/dist/testing/createTestApp.d.ts +25 -1
  430. package/dist/testing/createTestApp.d.ts.map +1 -1
  431. package/dist/testing/createTestApp.js +12 -3
  432. package/dist/testing/display.d.ts +2 -0
  433. package/dist/testing/display.d.ts.map +1 -0
  434. package/dist/testing/display.js +37 -0
  435. package/dist/testing/ensure.d.ts +119 -0
  436. package/dist/testing/ensure.d.ts.map +1 -0
  437. package/dist/testing/ensure.js +664 -0
  438. package/dist/testing/ensure.trial.d.ts +2 -0
  439. package/dist/testing/ensure.trial.d.ts.map +1 -0
  440. package/dist/testing/ensure.trial.js +9 -0
  441. package/dist/testing/ensure.types.test.d.ts +2 -0
  442. package/dist/testing/ensure.types.test.d.ts.map +1 -0
  443. package/dist/testing/ensure.types.test.js +34 -0
  444. package/dist/testing/helpers/contentHtmlElements.d.ts.map +1 -1
  445. package/dist/testing/host.d.ts +86 -15
  446. package/dist/testing/host.d.ts.map +1 -1
  447. package/dist/testing/host.js +82 -23
  448. package/dist/testing/host.types.test.d.ts +2 -0
  449. package/dist/testing/host.types.test.d.ts.map +1 -0
  450. package/dist/testing/host.types.test.js +81 -0
  451. package/dist/testing/hydrateTestApp.d.ts +17 -0
  452. package/dist/testing/hydrateTestApp.d.ts.map +1 -1
  453. package/dist/testing/hydrateTestApp.js +27 -6
  454. package/dist/testing/index.d.ts +5 -3
  455. package/dist/testing/index.d.ts.map +1 -1
  456. package/dist/testing/index.js +3 -1
  457. package/dist/testing/pipeline/createTestPacketApp.d.ts +30 -0
  458. package/dist/testing/pipeline/createTestPacketApp.d.ts.map +1 -0
  459. package/dist/testing/pipeline/createTestPacketApp.js +45 -0
  460. package/dist/testing/pipeline/createTestPacketApp.types.test.d.ts +3 -0
  461. package/dist/testing/pipeline/createTestPacketApp.types.test.d.ts.map +1 -0
  462. package/dist/testing/pipeline/createTestPacketApp.types.test.js +101 -0
  463. package/dist/testing/pipeline/createTestPipelineApp.d.ts +70 -0
  464. package/dist/testing/pipeline/createTestPipelineApp.d.ts.map +1 -0
  465. package/dist/testing/pipeline/createTestPipelineApp.js +90 -0
  466. package/dist/testing/pipeline/createTestPipelineApp.types.test.d.ts +6 -0
  467. package/dist/testing/pipeline/createTestPipelineApp.types.test.d.ts.map +1 -0
  468. package/dist/testing/pipeline/createTestPipelineApp.types.test.js +146 -0
  469. package/dist/testing/pipeline/hostPipeline.d.ts +25 -0
  470. package/dist/testing/pipeline/hostPipeline.d.ts.map +1 -0
  471. package/dist/testing/pipeline/hostPipeline.js +18 -0
  472. package/dist/testing/pipeline/hydrateTestPipelineApp.d.ts +30 -0
  473. package/dist/testing/pipeline/hydrateTestPipelineApp.d.ts.map +1 -0
  474. package/dist/testing/pipeline/hydrateTestPipelineApp.js +193 -0
  475. package/dist/testing/pipeline/hydrateTestPipelineApp.types.test.d.ts +2 -0
  476. package/dist/testing/pipeline/hydrateTestPipelineApp.types.test.d.ts.map +1 -0
  477. package/dist/testing/pipeline/hydrateTestPipelineApp.types.test.js +27 -0
  478. package/dist/testing/pipeline/index.d.ts +5 -0
  479. package/dist/testing/pipeline/index.d.ts.map +1 -0
  480. package/dist/testing/pipeline/index.js +4 -0
  481. package/dist/testing/pipeline/pipelineTestApp.d.ts +34 -0
  482. package/dist/testing/pipeline/pipelineTestApp.d.ts.map +1 -0
  483. package/dist/testing/pipeline/pipelineTestApp.js +100 -0
  484. package/dist/testing/pipeline/testPipelineRoute.d.ts +2 -0
  485. package/dist/testing/pipeline/testPipelineRoute.d.ts.map +1 -0
  486. package/dist/testing/pipeline/testPipelineRoute.js +1 -0
  487. package/dist/testing/resolveContent.d.ts +18 -0
  488. package/dist/testing/resolveContent.d.ts.map +1 -0
  489. package/dist/testing/resolveContent.js +73 -0
  490. package/dist/testing/testingComponentPackage.d.ts +3 -1
  491. package/dist/testing/testingComponentPackage.d.ts.map +1 -1
  492. package/dist/testing/testingComponentPackage.js +16 -1
  493. package/dist/update/integrateUpdateVdom.d.ts.map +1 -1
  494. package/dist/update/integrateUpdateVdom.js +35 -31
  495. package/dist/update/integrateUpdateVdomPrebuild.js +20 -20
  496. package/dist/validChildren.d.ts.map +1 -1
  497. package/dist/zones/react.d.ts.map +1 -1
  498. package/package.json +23 -19
  499. package/types/helpers.d.ts +11 -2
  500. package/types/jsx/html.d.ts +29 -25
  501. package/types/jsx/jsx.d.ts +8 -8
  502. package/types/modules.d.ts +14 -3
  503. package/types/testing.d.ts +0 -0
  504. package/vendor/babel-core.js +5 -5
  505. package/vendor/babel-parser.js +1 -1
  506. package/vendor/babel-preset-react.js +32 -34
  507. package/vendor/babel-preset-typescript.js +5 -5
  508. package/vendor/chalk-extensions.js +3 -146
  509. package/vendor/chokidar.js +311 -5
  510. package/vendor/chunk-B34JUlnS.js +169 -0
  511. package/vendor/{chunk-Bu8ZRE-c.js → chunk-B9ttgKqg.js} +28 -25
  512. package/vendor/{chunk-D2EnpcLg.js → chunk-BGvapINa.js} +3 -164
  513. package/vendor/{chunk-Cqrj-Zqr.js → chunk-BmAiqUzD.js} +22 -8
  514. package/vendor/{chunk-BiUcnLhT.js → chunk-But4T5N_.js} +8 -3
  515. package/vendor/{chunk-OUnVY4Wm.js → chunk-DuR6SGzI.js} +162 -35
  516. package/vendor/css-select.js +3383 -0
  517. package/vendor/dotenv.js +2 -2
  518. package/vendor/express.js +61 -10
  519. package/vendor/manifest.json +4 -3
  520. package/vendor/postcss.js +1 -1
  521. package/vendor/precinct.js +5914 -3591
  522. package/vendor/valibot.js +418 -504
  523. package/dist/Servers/MatchedRouteInfo.d.ts +0 -11
  524. package/dist/Servers/MatchedRouteInfo.d.ts.map +0 -1
  525. package/dist/routing/__fluentRouteBuilder.d.ts +0 -80
  526. package/dist/routing/__fluentRouteBuilder.d.ts.map +0 -1
  527. package/dist/routing/__fluentRouteBuilder.js +0 -183
  528. package/dist/routing/__fluentRoutes.d.ts +0 -2
  529. package/dist/routing/__fluentRoutes.d.ts.map +0 -1
  530. package/dist/routing/__fluentRoutes.js +0 -59
  531. package/vendor/chunk-Hy-cCmu-.js +0 -23
  532. /package/dist/{Servers/MatchedRouteInfo.js → routing/RoutePaths.js} +0 -0
@@ -0,0 +1,29 @@
1
+ // all set by registerRouting() when the app's routes module is imported. The routes stand in for
2
+ // routesLocation's named export. Reset per request in dev, like globalDataFunc
3
+ export const registeredRouting = {
4
+ value: undefined
5
+ };
6
+ // handed the request's context, whichever way the store was registered
7
+ export const registeredNetworkedStore = {
8
+ value: undefined
9
+ };
10
+ // the store is handed the global Context; ND is inferred from the class, and handed back as a
11
+ // type-only token for NetworkedData's augmentation - `NetworkedDataType<typeof registration>`.
12
+ // Also set by registerRouting() and the routing builder - the last registration wins
13
+ export function registerNetworkedData(store) {
14
+ registeredNetworkedStore.value = store;
15
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- the token is type-only
16
+ return undefined;
17
+ }
18
+ // made per request on the server, once per page on the client - beside createContext(), because
19
+ // the routes function receives it and that runs before initStores(). {} when none is registered,
20
+ // so nothing downstream tests for absence (as createContext does)
21
+ // the context is passed too: it is built first, so a store registered through routingBuilder may
22
+ // take it as a second constructor argument. A one-argument store simply ignores it. Required, not
23
+ // defaulted: a default handed the store a different context from the one the request made
24
+ export function createNetworkedData(reqRes, context) {
25
+ const registered = registeredNetworkedStore.value;
26
+ if (registered === undefined) return {};
27
+ // as createContext: the app's class returns an object, which carries no symbol index signature
28
+ return new registered(reqRes, context);
29
+ }
@@ -1,5 +1,5 @@
1
- import type { AppRoutes } from 'tungsten/routing/AppRoutes.js';
1
+ import type { AppRoutes } from '../routing/AppRoutes.js';
2
2
  import type { FrameworkConfigComplete } from '../FrameworkConfig.js';
3
3
  import type { CompilationInfo } from '../build/CompilationInfo.js';
4
- export declare function getAppRoutes(compilationInfo: CompilationInfo, config: FrameworkConfigComplete, quiet?: boolean): Promise<AppRoutes>;
4
+ export declare function getAppRoutes(compilationInfo: CompilationInfo, config: FrameworkConfigComplete, quiet?: boolean): Promise<AppRoutes<any>>;
5
5
  //# sourceMappingURL=getAppRoutes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getAppRoutes.d.ts","sourceRoot":"","sources":["../../src/staticGen/getAppRoutes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAG9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAUlE,wBAAsB,YAAY,CAC9B,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,uBAAuB,EAAE,KAAK,UAAQ,GACjF,OAAO,CAAC,SAAS,CAAC,CA4BpB"}
1
+ {"version":3,"file":"getAppRoutes.d.ts","sourceRoot":"","sources":["../../src/staticGen/getAppRoutes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAalE,wBAAsB,YAAY,CAC9B,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,uBAAuB,EAAE,KAAK,UAAQ,GACjF,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAuBzB"}
@@ -2,11 +2,16 @@ import { join } from 'path';
2
2
  import { fixExtension } from '../fixExtension.js';
3
3
  import { TungstenError } from '../TungstenError.js';
4
4
  import { cliLog } from '../cliOutput.js';
5
+ import { importModule } from '../importModule.js';
6
+ import { routesLocationParts } from '../routesLocationParts.js';
7
+ import { resolveAppRoutes } from '../routing/resolveAppRoutes.js';
5
8
  // prod: const appRoutes: AppRoutes = await getRoutes(this.compilationInfo, this.config)
6
9
  // this file is outdated and may not work correctly
7
10
  // should compare this to the functions used by Servers
8
11
  export async function getAppRoutes(compilationInfo, config, quiet = false) {
9
- const [routesFile, routeExport] = config.routesLocation;
12
+ const {
13
+ routesFile
14
+ } = routesLocationParts(config.routesLocation);
10
15
  try {
11
16
  const filePath = fixExtension(join(compilationInfo.buildCodeLocation, routesFile));
12
17
  if (!quiet) {
@@ -17,11 +22,9 @@ export async function getAppRoutes(compilationInfo, config, quiet = false) {
17
22
  }
18
23
  const target = 'file://' + filePath;
19
24
  if (!quiet) cliLog('[1] target', target);
20
- const module = await import(target);
21
- if (!(routeExport in module)) {
22
- throw new TungstenError(`Could not find an export named ${routeExport} in routes file ${routesFile}.` + ` These settings are set in config.routesLocation.`);
23
- }
24
- return module[routeExport];
25
+ const module = await importModule(target);
26
+ // importing the module is what runs the app's registerRouting() call
27
+ return resolveAppRoutes(module, config.routesLocation, 'prod');
25
28
  } catch (e) {
26
29
  throw new TungstenError(`Error loading app routes.` + ` You can specify the location of your routes object in tungsten.config.js,` + ` e.g. routesLocation: ['Routes.jsx', 'routes'] (file, exportName)` + `\n${e}`);
27
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"staticGen.d.ts","sourceRoot":"","sources":["../../src/staticGen/staticGen.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAehD,wBAAsB,SAAS,CAAC,SAAS,EAAE,SAAS,iBAoNnD"}
1
+ {"version":3,"file":"staticGen.d.ts","sourceRoot":"","sources":["../../src/staticGen/staticGen.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAqBhD,wBAAsB,SAAS,CAAC,SAAS,EAAE,SAAS,iBA4NnD"}
@@ -9,6 +9,7 @@ import { staticSiteFolder, staticFolder, assetsFolder, publicFolder, bundleFolde
9
9
  import { getAppRoutes } from './getAppRoutes.js';
10
10
  import { cliError, cliLog, cliWarn } from '../cliOutput.js';
11
11
  import { matchPath } from '../routing/matchPath.js';
12
+ import { toRoutes } from '../routing/routesArray.js';
12
13
  import { throwError } from '../throwError.js';
13
14
  import { RouteKeyIsPath, StringIsPath } from '../routing/RouteTypes.js';
14
15
  import { findLinks, pathToLink, pathToFileName, rewriteLinks } from './staticGenFunctions.js';
@@ -26,8 +27,10 @@ export async function staticGen(framework) {
26
27
  const projectDir = process.cwd();
27
28
  //let appRoutes: RouteDefinition[] | Record<RouteKey, RouteDefinition> = await getAppRoutes(framework.compilationInfo, config)
28
29
  const getRoutes = await getAppRoutes(framework.compilationInfo, config, quiet);
30
+ // only the paths are read here, with no request - nothing reads the networked store
31
+ const networkedData = {};
29
32
  // ! unsure about this
30
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
33
+ // the routes proper, without RoutesSettings, whose symbol keys iteration never meets
31
34
  const appRoutes = getRoutes === null ? {
32
35
  '/': {
33
36
  content: 'Code for static rendering SPA TBC'
@@ -35,7 +38,10 @@ export async function staticGen(framework) {
35
38
  404: {
36
39
  content: '404 TBC'
37
40
  }
38
- } : typeof getRoutes === 'function' ? getRoutes(null) : getRoutes;
41
+ }
42
+ // only the paths are read here, with no request; each page is then fetched from the prod
43
+ // server, whose request makes its context
44
+ : toRoutes(typeof getRoutes === 'function' ? getRoutes(null, {}, networkedData) : getRoutes, false);
39
45
  const buildLocation = framework.compilationInfo.location;
40
46
  const server = await framework.createProdServer();
41
47
  const serverLocation = await server.start(null, true); // port, mute
@@ -1 +1 @@
1
- {"version":3,"file":"styleContentSxy.d.ts","sourceRoot":"","sources":["../../src/style/styleContentSxy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAIH,KAAK,WAAW,EAEnB,MAAM,mBAAmB,CAAA;AAe1B,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,eAIrE"}
1
+ {"version":3,"file":"styleContentSxy.d.ts","sourceRoot":"","sources":["../../src/style/styleContentSxy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EACH,KAAK,WAAW,EAEnB,MAAM,mBAAmB,CAAA;AAe1B,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,eAIrE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAIxE,eAAO,MAAM,IAAI,SAAK,CAAA;AAEtB,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,QAM7F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAMxE,eAAO,MAAM,IAAI,SAAK,CAAA;AAEtB,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,QAM7F"}
@@ -1,3 +1,5 @@
1
+ // re-exports the whole barrel CJS-style, so the barrel is what it needs
2
+ // eslint-disable-next-line no-restricted-imports -- as above
1
3
  import * as tungsten from '../index.js';
2
4
  export const deps = [];
3
5
  export default function cjsModule(module, exports, require) {
@@ -1,4 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- // @ts-ignore
4
- module.exports = global.__tungsten_framework_modules;
3
+ module.exports = globalThis.__tungsten_framework_modules; // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion
@@ -1,3 +1,5 @@
1
+ // the whole barrel IS the payload: it is handed to the app as __tungsten_framework_modules
2
+ // eslint-disable-next-line no-restricted-imports -- as above
1
3
  import * as tungsten from '../index.js';
2
4
  // @ts-ignore
3
5
  global.__tungsten_framework_modules = tungsten;
@@ -0,0 +1,13 @@
1
+ import type { ContentNode } from '../ContentNode.js';
2
+ export type ContentToStringOptions = {
3
+ /** A resolved component's passed children in full, where otherwise children={...} */
4
+ children?: boolean;
5
+ /** Fragments as `<>`…`</>`, where otherwise their content stands in their place */
6
+ fragments?: boolean;
7
+ };
8
+ /**
9
+ * The tree as JSX. A component host() resolved has its output under it, marked ⤵, and the children
10
+ * it was passed as a prop; one unresolved holds its passed children, as written.
11
+ */
12
+ export declare function contentToString(content: ContentNode, options?: ContentToStringOptions): string;
13
+ //# sourceMappingURL=contentToString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contentToString.d.ts","sourceRoot":"","sources":["../../src/testing/contentToString.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAA0C,MAAM,mBAAmB,CAAA;AAW5F,MAAM,MAAM,sBAAsB,GAAG;IACjC,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAKD;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,sBAA2B,GAC3D,MAAM,CAKR"}
@@ -0,0 +1,105 @@
1
+ import { ContentNodeIsArray, ContentNodeIsElement, ContentNodeIsFragment, ContentNodeIsLiteral, IsContentNode } from '../ContentNode.js';
2
+ import { $fragment, $key, $props, $type } from '../contentNodeSymbols.js';
3
+ import { componentTypeIdentityKey } from '../hmr/componentIdentity.js';
4
+ import { display } from './display.js';
5
+ import { $passedChildren } from './resolveContent.js';
6
+ const indent = ' ';
7
+ const width = 100;
8
+ /**
9
+ * The tree as JSX. A component host() resolved has its output under it, marked ⤵, and the children
10
+ * it was passed as a prop; one unresolved holds its passed children, as written.
11
+ */
12
+ export function contentToString(content, options = {}) {
13
+ const lines = contentLines(content, '', options);
14
+ if (lines.length > 0) return lines.join('\n');
15
+ // a tree that renders nothing says what it was: null and false are different returns
16
+ return ContentNodeIsFragment(content) ? '<></>' : `{${display(content)}}`;
17
+ }
18
+ // adjacent text is one line, as the page shows it: JSX splits `Hi, {name}.` into three
19
+ function contentLines(content, at, options) {
20
+ const lines = [];
21
+ let text;
22
+ for (const node of rendered(content, options)) {
23
+ if (ContentNodeIsLiteral(node)) text = (text ?? '') + String(node);else {
24
+ if (text !== undefined) lines.push(at + textLine(text));
25
+ text = undefined;
26
+ lines.push(...elementLines(node, at, options));
27
+ }
28
+ }
29
+ if (text !== undefined) lines.push(at + textLine(text));
30
+ return lines;
31
+ }
32
+ // quoted where spaces at an edge, or no text at all, would not show
33
+ const textLine = text => text !== '' && text === text.trim() ? text : `{${display(text)}}`;
34
+ // arrays flattened, and fragments unless asked for, as neither renders anything of its own;
35
+ // null, undefined and booleans render nothing
36
+ function rendered(content, options) {
37
+ if (ContentNodeIsArray(content)) return content.flatMap(each => rendered(each, options));
38
+ if (ContentNodeIsFragment(content) && options.fragments !== true) {
39
+ return rendered(content[$props].children, options);
40
+ }
41
+ return ContentNodeIsLiteral(content) || ContentNodeIsElement(content) ? [content] : [];
42
+ }
43
+ function elementLines(node, at, options) {
44
+ const type = node[$type];
45
+ if (type === $fragment) {
46
+ const body = contentLines(node[$props].children, at + indent, options);
47
+ return body.length === 0 ? [`${at}<></>`] : [`${at}<>`, ...body, `${at}</>`];
48
+ }
49
+ const name = typeof type === 'string' ? type : componentTypeIdentityKey(type);
50
+ const {
51
+ children,
52
+ ...props
53
+ } = node[$props];
54
+ const key = node[$key];
55
+ const attributes = [...(key === undefined || key === null ? [] : [attribute('key', key)]), ...Object.entries(props).map(([prop, value]) => attribute(prop, value))];
56
+ const resolved = $passedChildren in node;
57
+ const passed = resolved && IsContentNode(node[$passedChildren]) ? node[$passedChildren] : null;
58
+ const passedNodes = rendered(passed, options);
59
+ const passedLines = passedNodes.every(each => ContentNodeIsLiteral(each)) ? [] // none, or text, which is a prop like any other
60
+ : options.children === true ? elementsLines(passed, at + indent, options) : [];
61
+ if (passedNodes.length > 0 && passedLines.length === 0) {
62
+ attributes.push(options.children === true ? attribute('children', passedNodes.join('')) : 'children={...}');
63
+ }
64
+ const body = contentLines(children, at + indent, options);
65
+ const opened = end => passedLines.length === 0 ? tag(`<${name}`, attributes, end, at) : [...tag(`<${name}`, attributes, ' children={', at), ...passedLines, `${at}}${end}`];
66
+ if (body.length === 0) return opened(' />');
67
+ const close = `</${name}>`;
68
+ if (resolved) return [...opened('> ⤵'), ...body, at + close];
69
+ const text = rendered(children, options).every(each => ContentNodeIsLiteral(each));
70
+ const open = opened('>');
71
+ const inline = `${open.at(-1) ?? ''}${body[0]?.trim() ?? ''}${close}`;
72
+ if (text && body.length === 1 && inline.length <= width) return [...open.slice(0, -1), inline];
73
+ return [...open, ...body, at + close];
74
+ }
75
+ // passed children as one JSX expression: an element, or a fragment round several
76
+ function elementsLines(content, at, options) {
77
+ const [only, ...more] = rendered(content, options);
78
+ if (only !== undefined && more.length === 0 && !ContentNodeIsLiteral(only)) {
79
+ return elementLines(only, at, options);
80
+ }
81
+ return [`${at}<>`, ...contentLines(content, at + indent, options), `${at}</>`];
82
+ }
83
+ // an opening tag, its attributes wrapped to the width, each line after the first indented
84
+ function tag(start, attributes, end, at) {
85
+ const lines = [];
86
+ let line = at + start;
87
+ let empty = true; // nothing yet on this line to break after
88
+ attributes.forEach((each, i) => {
89
+ const after = i === attributes.length - 1 ? end : '';
90
+ if (!empty && `${line} ${each}${after}`.length > width) {
91
+ lines.push(line);
92
+ line = at + indent + each;
93
+ } else line += ` ${each}`;
94
+ empty = false;
95
+ });
96
+ return [...lines, line + end];
97
+ }
98
+ function attribute(name, value) {
99
+ if (typeof value === 'string') return `${name}=${display(value)}`;
100
+ // ƒ and the name, not source: an inline arrow takes its prop's name, a bound one 'bound x'
101
+ if (typeof value === 'function') {
102
+ return `${name}={ƒ${value.name === '' ? '' : ` ${value.name}`}}`;
103
+ }
104
+ return `${name}={${display(value)}}`;
105
+ }
@@ -2,7 +2,13 @@ import type { ConstructPackage, TungstenBaseComponent, TungstenBaseComponentType
2
2
  import type { TrueStore } from '../Store/makeStore.js';
3
3
  import type { Endpoint, Path } from '../routing/RouteTypes.js';
4
4
  import type { ErrorRouteType } from '../routing/ErrorRouteType.js';
5
+ import type { RoutesArray } from '../routing/routesArray.js';
5
6
  import type { ReqRes } from '../ReqRes.js';
7
+ import type { Context } from '../context/registerContext.js';
8
+ import type { NetworkedData } from '../routing/routingRegistry.js';
9
+ import { Instance } from '../Instance/Instance.js';
10
+ import { type MountedTungstenRoot } from '../update/integrateUpdateVdom.js';
11
+ import { UpdateScheduler } from '../update/UpdateScheduler.js';
6
12
  export type ComponentProps<ComponentType extends TungstenBaseComponentType<any, any>> = InstanceType<ComponentType>['props'];
7
13
  export type TestStoreRegistration<Schema extends object> = {
8
14
  getStore: (stores: TrueStore<unknown>[]) => TrueStore<Schema>;
@@ -22,8 +28,14 @@ export type TestAppOptions<Props extends object> = {
22
28
  routeData?: unknown;
23
29
  globalData?: Record<string, unknown>;
24
30
  stores?: readonly TestStoreOverride<any>[];
25
- routes?: TestRoutes | ((reqRes: ReqRes | null) => TestRoutes);
31
+ routes?: TestRoutes | RoutesArray | TestRoutesFunction;
32
+ fileVersions?: Record<string, string>;
33
+ context?: Context;
34
+ networkedData?: NetworkedData;
26
35
  };
36
+ type TestRoutesFunction = {
37
+ routes(reqRes: ReqRes | null, context: Context): TestRoutes | RoutesArray;
38
+ }['routes'];
27
39
  export type TestRoutes = {
28
40
  [key in Path]: Endpoint<any, any>;
29
41
  } & {
@@ -43,5 +55,17 @@ export type TestApp<Component extends TungstenBaseComponent> = {
43
55
  export type CreateTestAppArgs<Props extends object> = object extends Props ? [options?: TestAppOptions<Props>] : keyof Props extends never ? [options?: TestAppOptions<Props>] : [options: TestAppOptions<Props> & {
44
56
  props: Props;
45
57
  }];
58
+ export declare class TestAppImplementation<Component extends TungstenBaseComponent> implements TestApp<Component> {
59
+ #private;
60
+ readonly document: Document;
61
+ readonly container: HTMLElement;
62
+ readonly component: Component;
63
+ constructor(document: Document, container: HTMLElement, component: Component, instance: Instance, scheduler: UpdateScheduler, root: MountedTungstenRoot<TungstenBaseComponentType<any, any>>, ownsContainer: boolean);
64
+ resolved: () => Promise<void>;
65
+ setProps: (props: Component["props"]) => Promise<void>;
66
+ [Symbol.asyncDispose]: () => Promise<void>;
67
+ unmount: () => Promise<void>;
68
+ }
46
69
  export declare function createTestApp<Props extends TungstenComponentPropsBase, Component extends TungstenBaseComponent<any, any>, RouteData = undefined>(RootComponent: new (pkg: ConstructPackage<Props, RouteData>) => Component, ...args: CreateTestAppArgs<Props>): Promise<TestApp<Component>>;
70
+ export {};
47
71
  //# sourceMappingURL=createTestApp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createTestApp.d.ts","sourceRoot":"","sources":["../../src/testing/createTestApp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createTestApp.d.ts","sourceRoot":"","sources":["../../src/testing/createTestApp.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a),
8
8
  function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
9
9
  import { Instance } from '../Instance/Instance.js';
10
10
  import { initStores } from '../Servers/initStores.js';
11
+ import { toRoutes } from '../routing/routesArray.js';
11
12
  import { createTungstenRootComponent, deleteTungstenRoot } from '../update/integrateUpdateVdom.js';
12
13
  import { UpdateScheduler } from '../update/UpdateScheduler.js';
13
14
  import { waitForEnvIfLoading } from './loadEnv.js';
@@ -22,7 +23,7 @@ var _scheduler = /*#__PURE__*/new WeakMap();
22
23
  var _root = /*#__PURE__*/new WeakMap();
23
24
  var _ownsContainer = /*#__PURE__*/new WeakMap();
24
25
  var _unmounted = /*#__PURE__*/new WeakMap();
25
- class TestAppImplementation {
26
+ export class TestAppImplementation {
26
27
  constructor(document, container, component, instance, scheduler, root, ownsContainer) {
27
28
  _defineProperty(this, "document", void 0);
28
29
  _defineProperty(this, "container", void 0);
@@ -103,6 +104,10 @@ RootComponent, ...args) {
103
104
  }
104
105
  const location = options?.location ?? '/';
105
106
  const globalData = options?.globalData ?? {};
107
+ // made once, as a request makes them: the routes function, the stores and the instance must all
108
+ // see the same objects, which separate `?? {}`s at each use did not give them
109
+ const context = options?.context ?? {};
110
+ const networkedData = options?.networkedData ?? {};
106
111
  const matchedRouteInfo = {
107
112
  key: null,
108
113
  params: options?.routeParams ?? {},
@@ -122,7 +127,7 @@ RootComponent, ...args) {
122
127
  internalStore,
123
128
  stores,
124
129
  storeSubscriptions
125
- } = initStores(location, null, globalData, matchedRouteInfo);
130
+ } = initStores(location, null, globalData, matchedRouteInfo, null, context, networkedData);
126
131
  const instanceConfig = {
127
132
  prod: false,
128
133
  useRootComponent: true,
@@ -134,8 +139,12 @@ RootComponent, ...args) {
134
139
  // routing() falls back to the built-in 404 when neither '404' nor 'default' is given
135
140
  // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
136
141
  const appRoutes = options?.routes ?? {};
137
- const routes = typeof appRoutes === 'function' ? appRoutes(null) : appRoutes;
142
+ // dev, so a path given twice fails the test
143
+ const routes = toRoutes(typeof appRoutes === 'function' ? appRoutes(null, context, networkedData) : appRoutes, true);
138
144
  const instance = new Instance(location, instanceConfig, null, appRoutes, routes, internalStore, stores, storeSubscriptions, globalData, matchedRouteInfo, runtimeContext);
145
+ instance.fileVersions = options?.fileVersions;
146
+ instance.context = context;
147
+ instance.networkedData = networkedData;
139
148
  try {
140
149
  for (const override of options?.stores ?? []) {
141
150
  const store = override.registration.getStore(instance.stores);
@@ -0,0 +1,2 @@
1
+ export declare function display(value: unknown, depth?: number): string;
2
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/testing/display.ts"],"names":[],"mappings":"AAUA,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,MAAM,CAmCzD"}
@@ -0,0 +1,37 @@
1
+ import { ContentNodeIsElement, IsContentNode } from '../ContentNode.js';
2
+ import { $fragment, $type } from '../contentNodeSymbols.js';
3
+ import { componentTypeIdentityKey } from '../hmr/componentIdentity.js';
4
+ const displayed = 5; // entries shown of an array or object
5
+ const displayDepth = 2;
6
+ // a value as a failure message shows it; arrays and objects shortened by length and depth
7
+ export function display(value, depth = 0) {
8
+ if (typeof value === 'string') return `'${value}'`;
9
+ if (typeof value === 'function') {
10
+ return value.name === '' ? '[function]' : `[function ${value.name}]`;
11
+ }
12
+ if (typeof value !== 'object' || value === null) {
13
+ return String(value); // a number, boolean, bigint, symbol, null or undefined
14
+ }
15
+ if (value instanceof Date) {
16
+ return isNaN(value.getTime()) ? 'Date(invalid)' : `Date(${value.toISOString()})`;
17
+ }
18
+ // an element held as a value, as in a prop: by tag or name, as its symbol keys hide it as data
19
+ if ($type in value && IsContentNode(value) && ContentNodeIsElement(value)) {
20
+ const type = value[$type];
21
+ if (type === $fragment) return '<>';
22
+ return `<${typeof type === 'string' ? type : componentTypeIdentityKey(type)}>`;
23
+ }
24
+ const shown = entries => depth >= displayDepth ? '…' : entries.slice(0, displayed).join(', ') + (entries.length > displayed ? ', …' : '');
25
+ if (Array.isArray(value)) {
26
+ return value.length === 0 ? '[]' : `[${shown(value.map(each => display(each, depth + 1)))}]`;
27
+ }
28
+ if (value instanceof Set) {
29
+ return `Set { ${shown([...value].map(each => display(each, depth + 1)))} }`;
30
+ }
31
+ if (value instanceof Map) {
32
+ const pairs = [...value].map(([key, each]) => `${display(key, depth + 1)} => ${display(each, depth + 1)}`);
33
+ return `Map { ${shown(pairs)} }`;
34
+ }
35
+ const entries = Object.entries(value).map(([key, each]) => `${key}: ${display(each, depth + 1)}`);
36
+ return entries.length === 0 ? '{}' : `{ ${shown(entries)} }`;
37
+ }
@@ -0,0 +1,119 @@
1
+ import type { ContentNode } from '../ContentNode.js';
2
+ type Kind = 'text' | 'interruptedText' | ElementKind | 'fragment' | 'className' | 'id' | 'children' | `prop:${string}` | 'elements';
3
+ type ElementKind = `html:${string}` | `component:${string}` | SelectKind;
4
+ type SelectKind = `select:${string}`;
5
+ type Test = (seen: unknown) => boolean;
6
+ type Failure = {
7
+ actual: unknown;
8
+ expected: unknown;
9
+ saw: string;
10
+ showDiff: boolean;
11
+ };
12
+ type TrackFn = (match: boolean) => boolean | void;
13
+ type DecideFn = (ofKind: number) => Failure | undefined;
14
+ type Requirement = () => [track: TrackFn, decide: DecideFn];
15
+ type Fact = [
16
+ Kind,
17
+ Test,
18
+ Requirement,
19
+ quantifier: string,
20
+ end: string,
21
+ spoken: string,
22
+ explain?: Explain | undefined
23
+ ];
24
+ type Explain = (seen: unknown) => Outcome | undefined;
25
+ type Outcome = 'not content' | {
26
+ misses: Miss[];
27
+ met: BuiltFact[];
28
+ score: number;
29
+ };
30
+ type Miss = {
31
+ fact: BuiltFact;
32
+ failure: Failure;
33
+ sightings: Sighting[];
34
+ };
35
+ export type EnsureOptions = {
36
+ readable?: boolean;
37
+ color?: boolean;
38
+ };
39
+ type Props = Record<string, unknown> & {
40
+ children?: ContentNode;
41
+ };
42
+ type WithFn = (props: Props) => boolean;
43
+ declare const property: unique symbol;
44
+ type PropertyFact = Fact & {
45
+ readonly [property]: true;
46
+ };
47
+ type Made<Scope extends Fact | undefined, Own extends Fact> = [Scope] extends [Fact] ? Scope : Own;
48
+ type Quantifiers<E> = {
49
+ readonly no: E;
50
+ readonly none: E;
51
+ readonly one: E;
52
+ readonly two: E;
53
+ readonly three: E;
54
+ readonly count: (num: number) => E;
55
+ readonly a: E;
56
+ readonly an: E;
57
+ readonly some: E;
58
+ readonly all: E;
59
+ };
60
+ type StringEnd<F extends Fact> = ((text: string) => F) & {
61
+ contains: (substring: string) => F;
62
+ matches: (regex: RegExp) => F;
63
+ };
64
+ type ElementEnd<F extends Fact> = F & {
65
+ with: ((facts: PropertyFact[] | WithFn) => F) & Quantifiers<PropertyEnds<F>> & {
66
+ children: ((facts: Fact[]) => F) & Quantifiers<Ends<F>>;
67
+ };
68
+ };
69
+ type PropEnd<F extends Fact> = F & {
70
+ is: (value: unknown) => F;
71
+ contains: (substring: string) => F;
72
+ matches: (regex: RegExp) => F;
73
+ exact: (value: unknown) => F;
74
+ subset: (shape: unknown) => F;
75
+ duck: (shape: unknown) => F;
76
+ content: () => F & {
77
+ with: ((facts: Fact[]) => F) & Quantifiers<Ends<F>>;
78
+ };
79
+ };
80
+ type Ends<Scope extends Fact | undefined = undefined> = {
81
+ text: StringEnd<Made<Scope, Fact>>;
82
+ textCi: StringEnd<Made<Scope, Fact>>;
83
+ interruptedText: StringEnd<Made<Scope, PropertyFact>>;
84
+ html: (tag: string) => ElementEnd<Made<Scope, Fact>>;
85
+ component: (name: string) => ElementEnd<Made<Scope, Fact>>;
86
+ select: (selector: string) => ElementEnd<Made<Scope, Fact>>;
87
+ fragment: () => Made<Scope, Fact>;
88
+ className: (className?: string) => Made<Scope, PropertyFact>;
89
+ id: (id?: string) => Made<Scope, PropertyFact>;
90
+ prop: (prop: string) => PropEnd<Made<Scope, PropertyFact>>;
91
+ };
92
+ declare const propertyEnds: readonly ["interruptedText", "className", "id", "prop"];
93
+ type PropertyEnds<F extends Fact> = Pick<Ends<F>, typeof propertyEnds[number]>;
94
+ declare const _ensure: typeof ensure & Quantifiers<Ends<undefined>>;
95
+ export { _ensure as ensure };
96
+ export declare const no: Ends<undefined>, none: Ends<undefined>, one: Ends<undefined>, two: Ends<undefined>, three: Ends<undefined>, a: Ends<undefined>, an: Ends<undefined>, some: Ends<undefined>, all: Ends<undefined>, count: (num: number) => Ends<undefined>;
97
+ export declare class EnsureError extends Error {
98
+ actual: unknown;
99
+ expected: unknown;
100
+ operator: string;
101
+ showDiff: boolean;
102
+ name: string;
103
+ constructor(message: string, actual: unknown, expected: unknown, operator: string, showDiff: boolean);
104
+ }
105
+ declare function ensure(tree: ContentNode, facts: Fact[], options?: EnsureOptions): void;
106
+ export declare const children: ((facts: Fact[]) => PropertyFact) & Quantifiers<Ends<PropertyFact>>;
107
+ type BuiltFact = {
108
+ kind: Kind;
109
+ test: Test;
110
+ track: TrackFn;
111
+ decide: DecideFn;
112
+ explain: Explain | undefined;
113
+ chained: string;
114
+ spoken: string;
115
+ operator: string;
116
+ };
117
+ type Sighting = ['text', string] | [Exclude<Kind, 'text'>, unknown];
118
+ export declare const cssSelectBundle: string;
119
+ //# sourceMappingURL=ensure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure.d.ts","sourceRoot":"","sources":["../../src/testing/ensure.ts"],"names":[],"mappings":"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"}