tungsten 0.3.2 → 0.3.3

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 (278) hide show
  1. package/dist/.build-complete +1 -0
  2. package/dist/Framework.d.ts +2 -0
  3. package/dist/Framework.d.ts.map +1 -1
  4. package/dist/Framework.js +68 -57
  5. package/dist/FrameworkConfig.d.ts +2 -0
  6. package/dist/FrameworkConfig.d.ts.map +1 -1
  7. package/dist/Instance/Instance.d.ts.map +1 -1
  8. package/dist/Instance/Instance.js +18 -1
  9. package/dist/Instance/InstanceConfig.d.ts +1 -0
  10. package/dist/Instance/InstanceConfig.d.ts.map +1 -1
  11. package/dist/PopMessage.type.d.ts +6 -0
  12. package/dist/PopMessage.type.d.ts.map +1 -0
  13. package/dist/PopMessage.type.js +1 -0
  14. package/dist/Servers/DevServer.d.ts +2 -0
  15. package/dist/Servers/DevServer.d.ts.map +1 -1
  16. package/dist/Servers/DevServer.js +84 -8
  17. package/dist/Servers/MatchedRouteInfo.d.ts +1 -1
  18. package/dist/Servers/MatchedRouteInfo.d.ts.map +1 -1
  19. package/dist/Servers/ProdServer.d.ts +1 -0
  20. package/dist/Servers/ProdServer.d.ts.map +1 -1
  21. package/dist/Servers/ProdServer.js +79 -5
  22. package/dist/Servers/hono/DevServerHono.js +25 -29
  23. package/dist/Servers/hono/ProdServerHono.js +49 -142
  24. package/dist/Servers/hono/TungstenServerHono.d.ts +1 -1
  25. package/dist/Servers/hono/TungstenServerHono.d.ts.map +1 -1
  26. package/dist/Servers/hono/TungstenServerHono.js +12 -29
  27. package/dist/Servers/routing.d.ts.map +1 -1
  28. package/dist/Servers/routing.js +10 -6
  29. package/dist/Servers/tungstenCorePrivateEnvSchema.d.ts +0 -3
  30. package/dist/Servers/tungstenCorePrivateEnvSchema.d.ts.map +1 -1
  31. package/dist/Servers/tungstenCorePrivateEnvSchema.js +3 -3
  32. package/dist/Servers/tungstenCorePublicEnvSchema.d.ts +8 -0
  33. package/dist/Servers/tungstenCorePublicEnvSchema.d.ts.map +1 -0
  34. package/dist/Servers/tungstenCorePublicEnvSchema.js +14 -0
  35. package/dist/Store/InternalStoreSchema.d.ts +2 -0
  36. package/dist/Store/InternalStoreSchema.d.ts.map +1 -1
  37. package/dist/Store/InternalStoreSchema.js +1 -0
  38. package/dist/api/Request.d.ts +1 -1
  39. package/dist/api/Request.d.ts.map +1 -1
  40. package/dist/api/Response.d.ts +1 -1
  41. package/dist/api/Response.d.ts.map +1 -1
  42. package/dist/babelPlugins/BabelTypes.d.ts +2 -2
  43. package/dist/babelPlugins/BabelTypes.d.ts.map +1 -1
  44. package/dist/babelPlugins/BabelTypes.js +0 -1
  45. package/dist/bin/commands/build.d.ts.map +1 -1
  46. package/dist/bin/commands/build.js +3 -0
  47. package/dist/bin/commands/dev.d.ts.map +1 -1
  48. package/dist/bin/commands/dev.js +15 -4
  49. package/dist/bin/commands/devmon.d.ts +2 -0
  50. package/dist/bin/commands/devmon.d.ts.map +1 -0
  51. package/dist/bin/commands/devmon.js +66 -0
  52. package/dist/bin/index.d.ts.map +1 -1
  53. package/dist/bin/index.js +6 -0
  54. package/dist/booleanAttributeValue.d.ts +21 -0
  55. package/dist/booleanAttributeValue.d.ts.map +1 -0
  56. package/dist/booleanAttributeValue.js +23 -0
  57. package/dist/build/compileJavascript.js +1 -1
  58. package/dist/build/compileUserApp.d.ts +2 -1
  59. package/dist/build/compileUserApp.d.ts.map +1 -1
  60. package/dist/build/compileUserApp.js +8 -7
  61. package/dist/build/createInstanceConfigFile.js +1 -1
  62. package/dist/compat/types.d.ts +1 -1
  63. package/dist/compat/types.d.ts.map +1 -1
  64. package/dist/components/PopMessages.d.ts +12 -0
  65. package/dist/components/PopMessages.d.ts.map +1 -0
  66. package/dist/components/PopMessages.js +45 -0
  67. package/dist/defaultConfig.d.ts +1 -0
  68. package/dist/defaultConfig.d.ts.map +1 -1
  69. package/dist/defaultConfig.js +2 -1
  70. package/dist/env/Interfaces.d.ts +2 -1
  71. package/dist/env/Interfaces.d.ts.map +1 -1
  72. package/dist/env/getEnvSchemas.d.ts +1 -1
  73. package/dist/env/getEnvSchemas.d.ts.map +1 -1
  74. package/dist/env/publicEnv.d.ts.map +1 -1
  75. package/dist/env/publicEnv.js +4 -1
  76. package/dist/frameworkConfigSchema.d.ts +4 -0
  77. package/dist/frameworkConfigSchema.d.ts.map +1 -1
  78. package/dist/frameworkConfigSchema.js +2 -1
  79. package/dist/hooks/index.d.ts +1 -0
  80. package/dist/hooks/index.d.ts.map +1 -1
  81. package/dist/hooks/index.js +1 -0
  82. package/dist/hooks/useInstance.d.ts +3 -0
  83. package/dist/hooks/useInstance.d.ts.map +1 -0
  84. package/dist/hooks/useInstance.js +4 -0
  85. package/dist/hydrate/hydrate.d.ts +6 -4
  86. package/dist/hydrate/hydrate.d.ts.map +1 -1
  87. package/dist/hydrate/hydrate.js +51 -13
  88. package/dist/hydrate/reconcileHydratedAttributes.d.ts.map +1 -1
  89. package/dist/hydrate/reconcileHydratedAttributes.js +4 -3
  90. package/dist/hydrate/renderHydrationMismatchBanner.d.ts +7 -0
  91. package/dist/hydrate/renderHydrationMismatchBanner.d.ts.map +1 -0
  92. package/dist/hydrate/renderHydrationMismatchBanner.js +69 -0
  93. package/dist/indexInner.d.ts +8 -0
  94. package/dist/indexInner.d.ts.map +1 -1
  95. package/dist/indexInner.js +7 -1
  96. package/dist/makeInstanceConfigFromFrameworkConfig.d.ts.map +1 -1
  97. package/dist/makeInstanceConfigFromFrameworkConfig.js +2 -1
  98. package/dist/pop.d.ts +10 -0
  99. package/dist/pop.d.ts.map +1 -0
  100. package/dist/pop.js +49 -0
  101. package/dist/rawHtml/filterContentNode.d.ts +20 -0
  102. package/dist/rawHtml/filterContentNode.d.ts.map +1 -0
  103. package/dist/rawHtml/filterContentNode.js +96 -0
  104. package/dist/rawHtml/parseHtml.d.ts +14 -0
  105. package/dist/rawHtml/parseHtml.d.ts.map +1 -1
  106. package/dist/rawHtml/parseHtml.js +4 -4
  107. package/dist/rawHtml/sanitizeHtml.d.ts +17 -0
  108. package/dist/rawHtml/sanitizeHtml.d.ts.map +1 -0
  109. package/dist/rawHtml/sanitizeHtml.js +19 -0
  110. package/dist/render/HeadData.d.ts +1 -0
  111. package/dist/render/HeadData.d.ts.map +1 -1
  112. package/dist/render/contentNodeToHtml.d.ts +18 -0
  113. package/dist/render/contentNodeToHtml.d.ts.map +1 -0
  114. package/dist/render/contentNodeToHtml.js +66 -0
  115. package/dist/render/contentToHtml.d.ts.map +1 -1
  116. package/dist/render/contentToHtml.js +2 -1
  117. package/dist/render/processHead.d.ts.map +1 -1
  118. package/dist/render/processHead.js +8 -2
  119. package/dist/render/renderingTreeToHtml.d.ts.map +1 -1
  120. package/dist/render/renderingTreeToHtml.js +8 -1
  121. package/dist/routing/ErrorRouteType.d.ts +6 -0
  122. package/dist/routing/ErrorRouteType.d.ts.map +1 -0
  123. package/dist/routing/ErrorRouteType.js +1 -0
  124. package/dist/routing/RouteTypes.d.ts +2 -1
  125. package/dist/routing/RouteTypes.d.ts.map +1 -1
  126. package/dist/routing/Routes.d.ts +5 -0
  127. package/dist/routing/Routes.d.ts.map +1 -1
  128. package/dist/routing/TungstenErrorInfo.d.ts +6 -0
  129. package/dist/routing/TungstenErrorInfo.d.ts.map +1 -0
  130. package/dist/routing/TungstenErrorInfo.js +6 -0
  131. package/dist/style/styleContentSxy.js +21 -0
  132. package/dist/testing/hydrateTestApp.d.ts +38 -0
  133. package/dist/testing/hydrateTestApp.d.ts.map +1 -0
  134. package/dist/testing/hydrateTestApp.js +242 -0
  135. package/dist/testing/index.d.ts +4 -3
  136. package/dist/testing/index.d.ts.map +1 -1
  137. package/dist/testing/index.js +16 -2
  138. package/dist/timeProfiler.d.ts +6 -0
  139. package/dist/timeProfiler.d.ts.map +1 -0
  140. package/dist/timeProfiler.js +31 -0
  141. package/dist/update/integrateUpdateVdom.d.ts +11 -0
  142. package/dist/update/integrateUpdateVdom.d.ts.map +1 -1
  143. package/dist/update/integrateUpdateVdom.js +9 -3
  144. package/dist/warnOnFrameworkChange.d.ts.map +1 -1
  145. package/dist/warnOnFrameworkChange.js +8 -8
  146. package/package.json +18 -16
  147. package/dist/FunctionComponentStandIn.sxyt.d.ts +0 -2
  148. package/dist/FunctionComponentStandIn.sxyt.d.ts.map +0 -1
  149. package/dist/FunctionComponentStandIn.sxyt.js +0 -52
  150. package/dist/Instance/gotoRedirect.sxyt.d.ts +0 -2
  151. package/dist/Instance/gotoRedirect.sxyt.d.ts.map +0 -1
  152. package/dist/Instance/gotoRedirect.sxyt.js +0 -148
  153. package/dist/Instance/runTrackedWork.sxyt.d.ts +0 -2
  154. package/dist/Instance/runTrackedWork.sxyt.d.ts.map +0 -1
  155. package/dist/Instance/runTrackedWork.sxyt.js +0 -35
  156. package/dist/Servers/devErrorPageAutoRetry.sxyt.d.ts +0 -2
  157. package/dist/Servers/devErrorPageAutoRetry.sxyt.d.ts.map +0 -1
  158. package/dist/Servers/devErrorPageAutoRetry.sxyt.js +0 -117
  159. package/dist/_client/cjsHelpers.sxyt.d.ts +0 -2
  160. package/dist/_client/cjsHelpers.sxyt.d.ts.map +0 -1
  161. package/dist/_client/cjsHelpers.sxyt.js +0 -45
  162. package/dist/auth/passwordHashing.sxyt.d.ts +0 -2
  163. package/dist/auth/passwordHashing.sxyt.d.ts.map +0 -1
  164. package/dist/auth/passwordHashing.sxyt.js +0 -46
  165. package/dist/auth/ref/checkPasswordResetToken.sxyt.d.ts +0 -2
  166. package/dist/auth/ref/checkPasswordResetToken.sxyt.d.ts.map +0 -1
  167. package/dist/auth/ref/checkPasswordResetToken.sxyt.js +0 -40
  168. package/dist/auth/ref/createPasswordResetToken.sxyt.d.ts +0 -2
  169. package/dist/auth/ref/createPasswordResetToken.sxyt.d.ts.map +0 -1
  170. package/dist/auth/ref/createPasswordResetToken.sxyt.js +0 -10
  171. package/dist/babelPlugins/BabelAddDevCacheBust.sxyt.d.ts +0 -2
  172. package/dist/babelPlugins/BabelAddDevCacheBust.sxyt.d.ts.map +0 -1
  173. package/dist/babelPlugins/BabelAddDevCacheBust.sxyt.js +0 -138
  174. package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.d.ts +0 -2
  175. package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.d.ts.map +0 -1
  176. package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.js +0 -108
  177. package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.d.ts +0 -2
  178. package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.d.ts.map +0 -1
  179. package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.js +0 -104
  180. package/dist/bin/commands/compile.sxyt.d.ts +0 -2
  181. package/dist/bin/commands/compile.sxyt.d.ts.map +0 -1
  182. package/dist/bin/commands/compile.sxyt.js +0 -255
  183. package/dist/build/modifySassImports.sxyt.d.ts +0 -2
  184. package/dist/build/modifySassImports.sxyt.d.ts.map +0 -1
  185. package/dist/build/modifySassImports.sxyt.js +0 -55
  186. package/dist/build/sassImportParser.sxyt.d.ts +0 -2
  187. package/dist/build/sassImportParser.sxyt.d.ts.map +0 -1
  188. package/dist/build/sassImportParser.sxyt.js +0 -110
  189. package/dist/build/scssImportParserChatgpt.sxyt.d.ts +0 -2
  190. package/dist/build/scssImportParserChatgpt.sxyt.d.ts.map +0 -1
  191. package/dist/build/scssImportParserChatgpt.sxyt.js +0 -120
  192. package/dist/clone.sxyt.d.ts +0 -2
  193. package/dist/clone.sxyt.d.ts.map +0 -1
  194. package/dist/clone.sxyt.js +0 -24
  195. package/dist/componentProxyHandlers.sxyt.d.ts +0 -2
  196. package/dist/componentProxyHandlers.sxyt.d.ts.map +0 -1
  197. package/dist/componentProxyHandlers.sxyt.js +0 -130
  198. package/dist/components/RawHtml.sxyt.d.ts +0 -2
  199. package/dist/components/RawHtml.sxyt.d.ts.map +0 -1
  200. package/dist/components/RawHtml.sxyt.js +0 -104
  201. package/dist/components/bindable/BindableSelect.sxyt.d.ts +0 -2
  202. package/dist/components/bindable/BindableSelect.sxyt.d.ts.map +0 -1
  203. package/dist/components/bindable/BindableSelect.sxyt.js +0 -186
  204. package/dist/env/injectEnv.sxyt.d.ts +0 -2
  205. package/dist/env/injectEnv.sxyt.d.ts.map +0 -1
  206. package/dist/env/injectEnv.sxyt.js +0 -20
  207. package/dist/env/parseEnv.sxyt.d.ts +0 -2
  208. package/dist/env/parseEnv.sxyt.d.ts.map +0 -1
  209. package/dist/env/parseEnv.sxyt.js +0 -11
  210. package/dist/findProjectDir.sxyt.d.ts +0 -2
  211. package/dist/findProjectDir.sxyt.d.ts.map +0 -1
  212. package/dist/findProjectDir.sxyt.js +0 -82
  213. package/dist/hmr/applyHmrModule.sxyt.d.ts +0 -2
  214. package/dist/hmr/applyHmrModule.sxyt.d.ts.map +0 -1
  215. package/dist/hmr/applyHmrModule.sxyt.js +0 -182
  216. package/dist/hmr/instanceRegistry.sxyt.d.ts +0 -2
  217. package/dist/hmr/instanceRegistry.sxyt.d.ts.map +0 -1
  218. package/dist/hmr/instanceRegistry.sxyt.js +0 -24
  219. package/dist/hmr/refreshStylesheets.sxyt.d.ts +0 -2
  220. package/dist/hmr/refreshStylesheets.sxyt.d.ts.map +0 -1
  221. package/dist/hmr/refreshStylesheets.sxyt.js +0 -46
  222. package/dist/hydrate/hydrate.sxyt.d.ts +0 -2
  223. package/dist/hydrate/hydrate.sxyt.d.ts.map +0 -1
  224. package/dist/hydrate/hydrate.sxyt.js +0 -302
  225. package/dist/hydrate/reconcileHydratedAttributes.sxyt.d.ts +0 -2
  226. package/dist/hydrate/reconcileHydratedAttributes.sxyt.d.ts.map +0 -1
  227. package/dist/hydrate/reconcileHydratedAttributes.sxyt.js +0 -190
  228. package/dist/importDevModuleWithRetry.sxyt.d.ts +0 -2
  229. package/dist/importDevModuleWithRetry.sxyt.d.ts.map +0 -1
  230. package/dist/importDevModuleWithRetry.sxyt.js +0 -104
  231. package/dist/innerHtmlFromProps.sxyt.d.ts +0 -2
  232. package/dist/innerHtmlFromProps.sxyt.d.ts.map +0 -1
  233. package/dist/innerHtmlFromProps.sxyt.js +0 -99
  234. package/dist/postcssPlugins/parseSelectors.sxyt.d.ts +0 -2
  235. package/dist/postcssPlugins/parseSelectors.sxyt.d.ts.map +0 -1
  236. package/dist/postcssPlugins/parseSelectors.sxyt.js +0 -62
  237. package/dist/postcssPlugins/parseSelectorsRich.sxyt.d.ts +0 -2
  238. package/dist/postcssPlugins/parseSelectorsRich.sxyt.d.ts.map +0 -1
  239. package/dist/postcssPlugins/parseSelectorsRich.sxyt.js +0 -155
  240. package/dist/rawHtml/parseHtml.sxyt.d.ts +0 -2
  241. package/dist/rawHtml/parseHtml.sxyt.d.ts.map +0 -1
  242. package/dist/rawHtml/parseHtml.sxyt.js +0 -239
  243. package/dist/render/getFunctionBodyAsString.sxyt.d.ts +0 -2
  244. package/dist/render/getFunctionBodyAsString.sxyt.d.ts.map +0 -1
  245. package/dist/render/getFunctionBodyAsString.sxyt.js +0 -37
  246. package/dist/render/processHead.sxyt.d.ts +0 -2
  247. package/dist/render/processHead.sxyt.d.ts.map +0 -1
  248. package/dist/render/processHead.sxyt.js +0 -93
  249. package/dist/render/processProps.sxyt.d.ts +0 -2
  250. package/dist/render/processProps.sxyt.d.ts.map +0 -1
  251. package/dist/render/processProps.sxyt.js +0 -90
  252. package/dist/routing/compareRequestToRegex.sxyt.d.ts +0 -2
  253. package/dist/routing/compareRequestToRegex.sxyt.d.ts.map +0 -1
  254. package/dist/routing/compareRequestToRegex.sxyt.js +0 -65
  255. package/dist/routing/getPathPriority.sxyt.d.ts +0 -2
  256. package/dist/routing/getPathPriority.sxyt.d.ts.map +0 -1
  257. package/dist/routing/getPathPriority.sxyt.js +0 -24
  258. package/dist/routing/matchPath.sxyt.d.ts +0 -2
  259. package/dist/routing/matchPath.sxyt.d.ts.map +0 -1
  260. package/dist/routing/matchPath.sxyt.js +0 -41
  261. package/dist/routing/patternToRegex.sxyt.d.ts +0 -2
  262. package/dist/routing/patternToRegex.sxyt.d.ts.map +0 -1
  263. package/dist/routing/patternToRegex.sxyt.js +0 -69
  264. package/dist/routing/splitRequest.sxyt.d.ts +0 -2
  265. package/dist/routing/splitRequest.sxyt.d.ts.map +0 -1
  266. package/dist/routing/splitRequest.sxyt.js +0 -47
  267. package/dist/style/jssToCss.sxyt.d.ts +0 -2
  268. package/dist/style/jssToCss.sxyt.d.ts.map +0 -1
  269. package/dist/style/jssToCss.sxyt.js +0 -17
  270. package/dist/testing/createTestApp.sxyt.d.ts +0 -2
  271. package/dist/testing/createTestApp.sxyt.d.ts.map +0 -1
  272. package/dist/testing/createTestApp.sxyt.js +0 -470
  273. package/dist/testing/ensureTestEnvLoaded.sxyt.d.ts +0 -2
  274. package/dist/testing/ensureTestEnvLoaded.sxyt.d.ts.map +0 -1
  275. package/dist/testing/ensureTestEnvLoaded.sxyt.js +0 -20
  276. package/dist/update/hotSwap.sxyt.d.ts +0 -2
  277. package/dist/update/hotSwap.sxyt.d.ts.map +0 -1
  278. package/dist/update/hotSwap.sxyt.js +0 -252
@@ -0,0 +1,242 @@
1
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
2
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
3
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
7
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
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
+ import { $props, $type } from "../contentNodeSymbols.js";
10
+ import { Instance } from "../Instance/Instance.js";
11
+ import { hydrateRootComponent } from "../hydrate/hydrate.js";
12
+ import { contentTreeToRenderingTree } from "../render/contentTreeToRenderingTree.js";
13
+ import { renderingNodeToHtml } from "../render/renderingTreeToHtml.js";
14
+ import { initStores } from "../Servers/initStores.js";
15
+ import { deleteNodeIfRendered } from "../update/integrateUpdateVdom.js";
16
+ import { UpdateScheduler } from "../update/UpdateScheduler.js";
17
+ import { DomPointer } from "../DomPointer.js";
18
+ import { ensureTestEnvLoaded } from "./ensureTestEnvLoaded.js";
19
+ // hydrate.tsx references several DOM globals directly (Node.COMMENT_NODE, `instanceof Text`, the
20
+ // bare `document`) the way real browser code always can - happy-dom only puts these on its own
21
+ // Window, not on Node.js's global scope. Every hand-written hydration test before this harness
22
+ // bridged them manually; a caller of hydrateTestApp() shouldn't need to know that hydrate() was
23
+ // written assuming a real browser to begin with.
24
+ function bridgeHappyDomGlobals(document) {
25
+ const window = document.defaultView;
26
+ if (window === null) return;
27
+ const globals = globalThis; // eslint-disable-line no-type-assertion/no-type-assertion -- bridging happy-dom's globals onto the global scope
28
+ globals.Node = window.Node;
29
+ globals.Text = window.Text;
30
+ globals.Comment = window.Comment;
31
+ globals.Element = window.Element;
32
+ globals.HTMLElement = window.HTMLElement;
33
+ globals.Document = window.Document;
34
+ globals.document = document;
35
+ globals.window = window;
36
+ }
37
+ var _instance = /*#__PURE__*/new WeakMap();
38
+ var _scheduler = /*#__PURE__*/new WeakMap();
39
+ var _ownsContainer = /*#__PURE__*/new WeakMap();
40
+ var _unmounted = /*#__PURE__*/new WeakMap();
41
+ class HydrateTestAppImplementation {
42
+ constructor(document, container, component, instance, scheduler, ownsContainer, html, mismatches) {
43
+ _defineProperty(this, "document", void 0);
44
+ _defineProperty(this, "container", void 0);
45
+ _defineProperty(this, "component", void 0);
46
+ _defineProperty(this, "html", void 0);
47
+ _defineProperty(this, "mismatches", void 0);
48
+ _classPrivateFieldInitSpec(this, _instance, void 0);
49
+ _classPrivateFieldInitSpec(this, _scheduler, void 0);
50
+ _classPrivateFieldInitSpec(this, _ownsContainer, void 0);
51
+ _classPrivateFieldInitSpec(this, _unmounted, false);
52
+ _defineProperty(this, "resolved", async () => {
53
+ await _classPrivateFieldGet(_scheduler, this).resolved();
54
+ });
55
+ _defineProperty(this, "setProps", async props => {
56
+ if (_classPrivateFieldGet(_unmounted, this)) throw new Error('Cannot set props on an unmounted Tungsten HydrateTestApp.');
57
+ this.component.props = props;
58
+ _classPrivateFieldGet(_instance, this).queueUpdate(this.component);
59
+ await this.resolved();
60
+ });
61
+ _defineProperty(this, "unmount", async () => {
62
+ if (_classPrivateFieldGet(_unmounted, this)) return;
63
+ _classPrivateFieldSet(_unmounted, this, true);
64
+ _classPrivateFieldGet(_scheduler, this).cancelPending();
65
+ let cleanupError;
66
+ try {
67
+ this.component.__delete();
68
+ deleteNodeIfRendered(this.component.__currentContent);
69
+ this.component.__deleted();
70
+ _classPrivateFieldGet(_instance, this).disposeRegisteredComponents();
71
+ await _classPrivateFieldGet(_scheduler, this).resolved();
72
+ } catch (error) {
73
+ cleanupError = error;
74
+ try {
75
+ _classPrivateFieldGet(_instance, this).disposeRegisteredComponents();
76
+ } catch {
77
+ // Preserve the first cleanup failure.
78
+ }
79
+ } finally {
80
+ _classPrivateFieldGet(_scheduler, this).dispose();
81
+ if (_classPrivateFieldGet(_ownsContainer, this)) this.container.remove();else while (this.container.firstChild !== null) this.container.removeChild(this.container.firstChild);
82
+ }
83
+ if (cleanupError !== undefined) throw cleanupError;
84
+ });
85
+ this.document = document;
86
+ this.container = container;
87
+ this.component = component;
88
+ _classPrivateFieldSet(_instance, this, instance);
89
+ _classPrivateFieldSet(_scheduler, this, scheduler);
90
+ _classPrivateFieldSet(_ownsContainer, this, ownsContainer);
91
+ this.html = html;
92
+ this.mismatches = mismatches;
93
+ }
94
+ }
95
+ /**
96
+ * The hydration round trip createTestApp() deliberately doesn't cover: render a component to
97
+ * HTML the way a real server would, parse it with a real HTML parser, hydrate a fresh client
98
+ * instance against the result, and hand back the live, hydrated component - still fully usable
99
+ * via setProps()/resolved(), exactly like createTestApp()'s result.
100
+ *
101
+ * By default `props` renders on both sides, so a passing test proves an ordinary page hydrates
102
+ * clean (`mismatches` empty). Pass `serverProps` to diverge the two passes on purpose and assert
103
+ * on the resulting `mismatches` - the case a one-off "does the reconciler still agree with real
104
+ * served pages" script never could, because nothing fed it markup that didn't already match.
105
+ *
106
+ * A structural mismatch (a different tag, a different number of children) is not something
107
+ * reconcileHydratedAttributes() can fix - hydrateRootComponent() throws, exactly as the real
108
+ * client hydrator does, so a caller reproducing that class of bug should assert on the rejection.
109
+ */
110
+ export async function hydrateTestApp(RootComponent, ...args) {
111
+ await ensureTestEnvLoaded();
112
+ const options = args[0]; // eslint-disable-line no-type-assertion/no-type-assertion
113
+ const suppliedDocument = options?.document ?? globalThis.document; // eslint-disable-line no-type-assertion/no-type-assertion
114
+ if (suppliedDocument === undefined) {
115
+ // eslint-disable-line @typescript-eslint/no-unnecessary-condition
116
+ throw new Error('hydrateTestApp() requires options.document when no global document is available.');
117
+ }
118
+ const document = suppliedDocument;
119
+ const ownsContainer = options?.container === undefined;
120
+ const container = options?.container ?? document.createElement('div');
121
+ if (container.ownerDocument !== document) {
122
+ throw new Error('The HydrateTestApp container must belong to options.document.');
123
+ }
124
+ if (container.childNodes.length > 0) {
125
+ throw new Error('The HydrateTestApp container must be empty before hydrating.');
126
+ }
127
+ if (ownsContainer) {
128
+ if (document.body === null) {
129
+ // eslint-disable-line @typescript-eslint/no-unnecessary-condition
130
+ throw new Error('The supplied document must have a body element.');
131
+ }
132
+ document.body.appendChild(container);
133
+ }
134
+ const clientProps = options?.props ?? {}; // eslint-disable-line no-type-assertion/no-type-assertion
135
+ const serverProps = options?.serverProps ?? clientProps;
136
+ const location = options?.location ?? '/';
137
+ const globalData = options?.globalData ?? {}; // eslint-disable-line no-type-assertion/no-type-assertion
138
+ const matchedRouteInfo = {
139
+ key: null,
140
+ params: options?.routeParams ?? {},
141
+ content: null,
142
+ ...(options !== undefined && 'routeData' in options ? {
143
+ data: options.routeData
144
+ } : {})
145
+ };
146
+ const instanceConfig = {
147
+ prod: false,
148
+ useRootComponent: true,
149
+ clientSideNav: false,
150
+ siteBasePath: '/',
151
+ staticSite: false,
152
+ csr: options?.csr ?? false
153
+ };
154
+ const emptyRoutes = {}; // eslint-disable-line no-type-assertion/no-type-assertion -- not exercised by hydration tests
155
+ // eslint-disable-next-line no-type-assertion/no-type-assertion -- rootToHtml.ts builds a root content node the same way
156
+ const componentNode = {
157
+ [$type]: RootComponent,
158
+ [$props]: serverProps
159
+ };
160
+ // Server pass: a throwaway Instance whose only job is producing the HTML a real server would
161
+ // have sent for `serverProps`. Never returned, never touched again once `html` is captured.
162
+ const ssrScheduler = new UpdateScheduler();
163
+ let html;
164
+ try {
165
+ const {
166
+ internalStore,
167
+ stores,
168
+ storeSubscriptions
169
+ } = initStores(location, null, globalData, matchedRouteInfo);
170
+ const ssrInstance = new Instance(location, instanceConfig, null, emptyRoutes, emptyRoutes,
171
+ // eslint-disable-line no-type-assertion/no-type-assertion
172
+ internalStore, stores, storeSubscriptions, globalData, matchedRouteInfo, {
173
+ document,
174
+ window: document.defaultView,
175
+ scheduler: ssrScheduler,
176
+ navigation: false
177
+ });
178
+ for (const override of options?.stores ?? []) {
179
+ const store = override.registration.getStore(ssrInstance.stores);
180
+ await override.initialize(store);
181
+ }
182
+ const renderingTree = await contentTreeToRenderingTree(componentNode, null, ssrInstance, false);
183
+ const headData = {
184
+ found: false,
185
+ instance: ssrInstance,
186
+ clientImportAliases: {},
187
+ importAliases: {},
188
+ compilationLocation: '',
189
+ dev: false,
190
+ tungstenPublicEnv: undefined,
191
+ siteBasePath: '',
192
+ hmr: true,
193
+ csr: instanceConfig.csr
194
+ };
195
+ html = await renderingNodeToHtml(renderingTree, false, headData, null);
196
+ } finally {
197
+ ssrScheduler.dispose();
198
+ }
199
+ // A real HTML parser - the same algorithm a browser runs before hydrate() ever sees the page
200
+ // - not a comparison against the string above, so browser parsing quirks (an auto-closed <p>,
201
+ // an inserted <tbody>) surface exactly as they would in production.
202
+ container.innerHTML = html;
203
+ bridgeHappyDomGlobals(document);
204
+ const scheduler = new UpdateScheduler();
205
+ const {
206
+ internalStore,
207
+ stores,
208
+ storeSubscriptions
209
+ } = initStores(location, null, globalData, matchedRouteInfo);
210
+ const runtimeContext = {
211
+ document,
212
+ window: document.defaultView,
213
+ scheduler,
214
+ navigation: false
215
+ };
216
+ const instance = new Instance(location, instanceConfig, null, emptyRoutes, emptyRoutes,
217
+ // eslint-disable-line no-type-assertion/no-type-assertion
218
+ internalStore, stores, storeSubscriptions, globalData, matchedRouteInfo, runtimeContext);
219
+ try {
220
+ for (const override of options?.stores ?? []) {
221
+ const store = override.registration.getStore(instance.stores);
222
+ await override.initialize(store);
223
+ }
224
+ const meta = {
225
+ insideForm: false,
226
+ mismatches: []
227
+ };
228
+ const domPointer = new DomPointer(container, 0);
229
+ const component = await hydrateRootComponent(instance, RootComponent, domPointer, meta, clientProps, options?.routeParams, options?.routeData);
230
+ return new HydrateTestAppImplementation(document, container, component, instance, scheduler, ownsContainer, html, meta.mismatches);
231
+ } catch (error) {
232
+ try {
233
+ instance.disposeRegisteredComponents();
234
+ } catch {
235
+ // Preserve the mount failure.
236
+ }
237
+ scheduler.dispose();
238
+ while (container.firstChild !== null) container.removeChild(container.firstChild);
239
+ if (ownsContainer) container.remove();
240
+ throw error;
241
+ }
242
+ }
@@ -1,5 +1,6 @@
1
- import type { TungstenBaseComponent, TungstenBaseComponentType } from '../Components.jsx';
1
+ import type { ConstructPackage, TungstenBaseComponent, TungstenBaseComponentType, TungstenComponentPropsBase } from '../Components.jsx';
2
2
  export { ensureTestEnvLoaded, testEnvVariableName } from './ensureTestEnvLoaded.js';
3
+ export { hydrateTestApp, type HydrateTestApp, type HydrateTestAppOptions } from './hydrateTestApp.js';
3
4
  import type { TrueStore } from '../Store/makeStore.js';
4
5
  export type ComponentProps<ComponentType extends TungstenBaseComponentType<any, any>> = InstanceType<ComponentType>['props'];
5
6
  export type TestStoreRegistration<Schema extends object> = {
@@ -29,8 +30,8 @@ export type TestApp<Component extends TungstenBaseComponent> = {
29
30
  setProps(props: Component['props']): Promise<void>;
30
31
  unmount(): Promise<void>;
31
32
  };
32
- type CreateTestAppArgs<Props extends object> = object extends Props ? [options?: TestAppOptions<Props>] : keyof Props extends never ? [options?: TestAppOptions<Props>] : [options: TestAppOptions<Props> & {
33
+ export type CreateTestAppArgs<Props extends object> = object extends Props ? [options?: TestAppOptions<Props>] : keyof Props extends never ? [options?: TestAppOptions<Props>] : [options: TestAppOptions<Props> & {
33
34
  props: Props;
34
35
  }];
35
- export declare function createTestApp<ComponentType extends TungstenBaseComponentType<any, any>>(RootComponent: ComponentType, ...args: CreateTestAppArgs<ComponentProps<ComponentType>>): Promise<TestApp<InstanceType<ComponentType>>>;
36
+ export declare function createTestApp<Props extends TungstenComponentPropsBase, Component extends TungstenBaseComponent<any, any>, RouteData = undefined>(RootComponent: new (pkg: ConstructPackage<NoInfer<Props>, RouteData>) => Component, ...args: CreateTestAppArgs<Props>): Promise<TestApp<Component>>;
36
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { Instance } from "../Instance/Instance.js";
10
10
  import { initStores } from "../Servers/initStores.js";
11
11
  import { ensureTestEnvLoaded } from "./ensureTestEnvLoaded.js";
12
12
  export { ensureTestEnvLoaded, testEnvVariableName } from "./ensureTestEnvLoaded.js";
13
+ export { hydrateTestApp } from "./hydrateTestApp.js";
13
14
  import { createTungstenRootComponent, deleteTungstenRoot } from "../update/integrateUpdateVdom.js";
14
15
  import { UpdateScheduler } from "../update/UpdateScheduler.js";
15
16
  export function testStore(registration, initialize) {
@@ -73,7 +74,19 @@ class TestAppImplementation {
73
74
  _classPrivateFieldSet(_ownsContainer, this, ownsContainer);
74
75
  }
75
76
  }
76
- export async function createTestApp(RootComponent, ...args) {
77
+ export async function createTestApp(
78
+ // NoInfer applies to Props only inside the constructor parameter, not to
79
+ // RootComponent as a whole - so Props is inferred from `props` alone
80
+ // (a generic component's own type parameters can then be inferred from a
81
+ // typed props value, the same way `const x: TungstenBaseComponentType<
82
+ // BoundProps<Form, 'value'>> = BoundValue` already type-checks), while
83
+ // Component is still inferred from the constructor's return type, so
84
+ // `.component` on the result keeps the concrete class (state, methods),
85
+ // not the erased TungstenBaseComponent base. Without the NoInfer, Props
86
+ // is inferred from RootComponent first - a bare class reference with no
87
+ // type arguments - so a generic component's own parameters collapse to
88
+ // their constraints before `props` is ever considered.
89
+ RootComponent, ...args) {
77
90
  await ensureTestEnvLoaded();
78
91
  const options = args[0];
79
92
  const suppliedDocument = options?.document ?? globalThis.document;
@@ -124,7 +137,8 @@ export async function createTestApp(RootComponent, ...args) {
124
137
  useRootComponent: true,
125
138
  clientSideNav: false,
126
139
  siteBasePath: '/',
127
- staticSite: false
140
+ staticSite: false,
141
+ csr: false
128
142
  };
129
143
  const emptyRoutes = {};
130
144
  const instance = new Instance(location, instanceConfig, null, emptyRoutes, emptyRoutes, internalStore, stores, storeSubscriptions, globalData, matchedRouteInfo, runtimeContext);
@@ -0,0 +1,6 @@
1
+ export type TimeProfiler = {
2
+ timeProfile: <T>(name: string, task: () => T) => T;
3
+ timeProfileAsync: <T>(name: string, task: () => T | Promise<T>) => Promise<T>;
4
+ };
5
+ export declare function createTimeProfiler(profiling?: boolean): TimeProfiler;
6
+ //# sourceMappingURL=timeProfiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeProfiler.d.ts","sourceRoot":"","sources":["../src/timeProfiler.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,YAAY,GAAG;IACvB,WAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAClD,gBAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;CAChF,CAAA;AAMD,wBAAgB,kBAAkB,CAAC,SAAS,UAAO,GAAG,YAAY,CAqBjE"}
@@ -0,0 +1,31 @@
1
+ // Same shape as sxy-test-runner's createTimeProfiler (node_modules/sxy-test-runner/dist/packages/timeProfiler.js) -
2
+ // a disabled profiler just runs the task, so callers never need to branch on whether profiling
3
+ // is on. Framework.ts holds one instance per run (default disabled); tungsten dev/build enable
4
+ // it via --profile and wrap their own top-level phases with it too.
5
+ import chalk from 'chalk-extensions';
6
+ import { cliOut } from "./cliOutput.js";
7
+ function report(name, ms) {
8
+ cliOut(chalk.yellow`${name}` + ' - ' + chalk.orange`${ms.toLocaleString()}ms`);
9
+ }
10
+ export function createTimeProfiler(profiling = true) {
11
+ if (!profiling) {
12
+ return {
13
+ timeProfile: (_name, task) => task(),
14
+ timeProfileAsync: async (_name, task) => task()
15
+ };
16
+ }
17
+ return {
18
+ timeProfile(name, task) {
19
+ const start = Date.now();
20
+ const result = task();
21
+ report(name, Date.now() - start);
22
+ return result;
23
+ },
24
+ async timeProfileAsync(name, task) {
25
+ const start = Date.now();
26
+ const result = await task();
27
+ report(name, Date.now() - start);
28
+ return result;
29
+ }
30
+ };
31
+ }
@@ -1,3 +1,4 @@
1
+ import { DomRegion } from '../DomRegion.js';
1
2
  import { DomPointer } from '../DomPointer.js';
2
3
  import { ContentNode, ContentNodeHtml, ContentNodeComponentAny } from '../ContentNode.js';
3
4
  import { Instance } from '../Instance/Instance.js';
@@ -14,6 +15,16 @@ export type TungstenHTMLElement = HTMLElement & {
14
15
  [key: string]: unknown;
15
16
  };
16
17
  export declare function integrateElementUpdateVdom(element: AnyComponent, newContent: ContentNode): Promise<UpdateResult>;
18
+ export type ApplyUpdateArgs = {
19
+ tungstenElement: AnyComponent;
20
+ instance: Instance;
21
+ newNode: ContentNode;
22
+ oldNode: RenderedContentNode | $ContentNull;
23
+ domRegion: DomRegion | null;
24
+ domPointer: DomPointer;
25
+ parentNode: ContentNode;
26
+ };
27
+ export declare function applyUpdate({ tungstenElement, instance, newNode, oldNode, domRegion, domPointer, parentNode }: ApplyUpdateArgs): Promise<RenderedContentNode>;
17
28
  export declare function deleteNodeIfRendered(node: $ContentNull | RenderedContentNode): void;
18
29
  export declare function processHtmlNode(node: ContentNodeHtml, parentNode: ContentNode): void;
19
30
  type CreateTungstenComponentArgs = {
@@ -1 +1 @@
1
- {"version":3,"file":"integrateUpdateVdom.d.ts","sourceRoot":"","sources":["../../src/update/integrateUpdateVdom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integrateUpdateVdom.d.ts","sourceRoot":"","sources":["../../src/update/integrateUpdateVdom.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EACH,WAAW,EAAwC,eAAe,EAElE,uBAAuB,EAG1B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAIlD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGjD,OAAO,EAAE,YAAY,EAAgB,MAAM,eAAe,CAAA;AAE1D,OAAO,EACe,mBAAmB,EAIT,4BAA4B,EAI3D,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAYhD,OAAO,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AACzF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAKhE,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAC5C,wBAAwB,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,KAAK,GAAG,CAAA;IACpE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB,CAAA;AAYD,wBAAsB,0BAA0B,CAC5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,GAC/C,OAAO,CAAC,YAAY,CAAC,CA0GvB;AAiCD,MAAM,MAAM,eAAe,GAAG;IAC1B,eAAe,EAAE,YAAY,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAAA;IAC3C,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,WAAW,CAAA;CAC1B,CAAA;AAGD,wBAAsB,WAAW,CAC7B,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,eAAe,GACnG,OAAO,CAAC,mBAAmB,CAAC,CAiV/B;AAiJD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,mBAAmB,QAuC5E;AAgED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,QAkK7E;AA6WD,KAAK,2BAA2B,GAAG;IAC/B,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,uBAAuB,CAAC;IAE9B,UAAU,EAAE,UAAU,CAAA;CACzB,CAAA;AACD,wBAAsB,uBAAuB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,2BAA2B,GAC3G,OAAO,CAAC,4BAA4B,CAAC,CAU1C;AAED,MAAM,MAAM,mBAAmB,CAC3B,aAAa,SAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,IACzD;IACA,SAAS,EAAE,YAAY,CAAC,aAAa,CAAC,CAAA;IACtC,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,wBAAsB,2BAA2B,CAC7C,aAAa,SAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,EAEzD,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC/C,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,WAAW,GACvB,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAgD7C;AAED,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,mBAAmB,CAAC,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAC/D,IAAI,CAON;AAmOD,wBAAsB,wBAAwB,CAC1C,UAAU,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,GAC5E,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAiC3C;AAED,wBAAsB,qBAAqB,CACvC,UAAU,EAAE,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,GAC1F,OAAO,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAyCjD"}
@@ -23,6 +23,7 @@ import { setCurrentComponent } from 'tungsten/hooks/setCurrentComponent.js';
23
23
  import { clearCurrentComponent } from 'tungsten/hooks/clearCurrentComponent.js';
24
24
  import { isDev } from "../isDev.js";
25
25
  import { $original } from "../componentProxyHandlers.js";
26
+ import { booleanAttributeValue } from "../booleanAttributeValue.js";
26
27
  function debug(...texts) {
27
28
  //console.log(...texts)
28
29
  //console.log(getStackTrace().split('\n')[2])
@@ -118,7 +119,9 @@ function getKeyedOldChildren(array) {
118
119
  }
119
120
  return keyedChildren;
120
121
  }
121
- async function applyUpdate({
122
+ // oldNode: $contentNull reconciles as a pure create (falls through to createNode()) - used by
123
+ // hydrate.tsx's CSR branch for <body>.
124
+ export async function applyUpdate({
122
125
  tungstenElement,
123
126
  instance,
124
127
  newNode,
@@ -849,7 +852,8 @@ function addAttributes(tungstenElement, instance, node, domNode) {
849
852
  //console.log('add attr', key, attributes[key])
850
853
  if (typeof attributes[key] === 'boolean') {
851
854
  //console.log('bool attr', attributes[key])
852
- if (attributes[key]) domNode.setAttribute(key, '');
855
+ const attrValue = booleanAttributeValue(key, attributes[key]);
856
+ if (attrValue !== null) domNode.setAttribute(key, attrValue);
853
857
  } else if (attributes[key] !== undefined && attributes[key] !== null) {
854
858
  //console.log('string attr', String(attributes[key]))
855
859
  domNode.setAttribute(key, String(attributes[key]));
@@ -913,7 +917,8 @@ function updateAttributes(tungstenElement, instance, node, oldNode, domNodeHTMLE
913
917
  domNode.value = String(newAttributes[key]);
914
918
  } else {
915
919
  if (typeof newAttributes[key] === 'boolean') {
916
- if (newAttributes[key]) domNode.setAttribute(key, '');else removeAttribute(domNode, key);
920
+ const attrValue = booleanAttributeValue(key, newAttributes[key]);
921
+ if (attrValue !== null) domNode.setAttribute(key, attrValue);else removeAttribute(domNode, key);
917
922
  } else if (newAttributes[key] === undefined || newAttributes[key] === null) {
918
923
  removeAttribute(domNode, key);
919
924
  } else {
@@ -1004,6 +1009,7 @@ function processAttributes(node) {
1004
1009
  } else {
1005
1010
  attributes.style = attributes.css;
1006
1011
  }
1012
+ delete attributes.css;
1007
1013
  }
1008
1014
  return attributes;
1009
1015
  }
@@ -1 +1 @@
1
- {"version":3,"file":"warnOnFrameworkChange.d.ts","sourceRoot":"","sources":["../src/warnOnFrameworkChange.ts"],"names":[],"mappings":"AASA,wBAAgB,qBAAqB,IAAI,IAAI,CAmB5C"}
1
+ {"version":3,"file":"warnOnFrameworkChange.d.ts","sourceRoot":"","sources":["../src/warnOnFrameworkChange.ts"],"names":[],"mappings":"AAcA,wBAAgB,qBAAqB,IAAI,IAAI,CAc5C"}
@@ -6,11 +6,15 @@ import { cliWarn } from "./cliOutput.js";
6
6
  // cache can't be invalidated at runtime, so an already-running dev server can't pick up a
7
7
  // change to the tungsten package itself (e.g. a linked/workspace copy being rebuilt) without a
8
8
  // full process restart - this just tells the developer that's needed, rather than attempting it.
9
+ //
10
+ // Watches a single marker file (dist/.build-complete) rather than all of dist - tungsten's own
11
+ // build scripts touch it as their last step (see scripts/writeBuildMarker.mjs), so one file
12
+ // covers every file a build could have changed without chokidar scanning the whole tree. Watch
13
+ // mode (build-babel --watch) does not yet write it on each cycle, only the one-shot builds do.
9
14
  export function warnOnFrameworkChange() {
10
15
  const frameworkDistDir = join(getFrameworkDir(), 'dist');
11
- // debounced so one rebuild (many files touched at once) produces one warning, not one per file
12
- let debounceTimer = null;
13
- const watcher = chokidar.watch(frameworkDistDir, {
16
+ const buildMarkerPath = join(frameworkDistDir, '.build-complete');
17
+ const watcher = chokidar.watch(buildMarkerPath, {
14
18
  ignoreInitial: true,
15
19
  awaitWriteFinish: {
16
20
  stabilityThreshold: 200,
@@ -18,10 +22,6 @@ export function warnOnFrameworkChange() {
18
22
  }
19
23
  });
20
24
  watcher.on('all', () => {
21
- if (debounceTimer !== null) clearTimeout(debounceTimer);
22
- debounceTimer = setTimeout(() => {
23
- debounceTimer = null;
24
- cliWarn(`tungsten framework files changed (${frameworkDistDir}) - restart the dev server` + ` to pick up the change.`);
25
- }, 300);
25
+ cliWarn(`tungsten framework files changed (${frameworkDistDir}) - restart the dev server` + ` to pick up the change.`);
26
26
  });
27
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tungsten",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,6 +17,7 @@
17
17
  },
18
18
  "files": [
19
19
  "dist",
20
+ "!dist/**/*.sxyt.*",
20
21
  "types",
21
22
  "sxy-loader.config.js",
22
23
  "readme.md"
@@ -28,7 +29,7 @@
28
29
  "@babel/cli": "^7.28.6",
29
30
  "@babel/core": "^7.29.0",
30
31
  "@babel/parser": "^7.29.2",
31
- "@babel/plugin-syntax-import-assertions": "^7.28.6",
32
+ "@babel/plugin-syntax-import-assertions": "^7.29.7",
32
33
  "@babel/plugin-transform-class-properties": "^7.28.6",
33
34
  "@babel/preset-react": "^7.28.5",
34
35
  "@hono/node-server": "^1.19.11",
@@ -37,11 +38,11 @@
37
38
  "@rollup/plugin-json": "^6.1.0",
38
39
  "@rollup/plugin-node-resolve": "^14.1.0",
39
40
  "@rollup/plugin-terser": "^1.0.0",
40
- "arktype": "^2.2.0",
41
+ "arktype": "^2.2.3",
41
42
  "babel-plugin-css-to-js": "^0.0.4",
42
43
  "babel-plugin-sxy-module-resolver": "^4.1.9",
43
44
  "babel-plugin-sxy-transform-cjs-to-esm": "^0.2.6",
44
- "bcryptjs": "^2.4.3",
45
+ "bcryptjs": "^3.0.3",
45
46
  "chalk": "^5.6.2",
46
47
  "chalk-extensions": "^2.0.24",
47
48
  "chokidar": "^3.6.0",
@@ -56,29 +57,29 @@
56
57
  "find-package-json": "^1.2.0",
57
58
  "fs-extra": "^10.1.0",
58
59
  "globby": "^13.2.2",
59
- "hono": "^4.12.8",
60
- "import-meta-resolve": "^2.2.2",
60
+ "hono": "^4.12.32",
61
+ "import-meta-resolve": "^4.2.0",
61
62
  "ini": "^4.1.3",
62
63
  "lodash.clonedeep": "^4.5.0",
63
64
  "npm-run-all": "^4.1.5",
64
65
  "open": "^8.4.2",
65
- "path-to-regexp": "^6.3.0",
66
- "postcss": "^8.5.8",
66
+ "path-to-regexp": "^8.4.2",
67
+ "postcss": "^8.5.24",
67
68
  "precinct": "^12.2.0",
68
69
  "react-router": "^6.30.3",
69
70
  "require-resolve-hook": "^1.1.0",
70
71
  "rollup": "^2.80.0",
71
72
  "rollup-plugin-gzip": "^3.1.2",
72
- "sass": "^1.98.0",
73
+ "sass": "^1.102.0",
73
74
  "serialize-javascript": "^6.0.2",
74
75
  "slash": "^4.0.0",
75
76
  "sxy-dependency-tree": "^8.1.11",
76
77
  "sxy-filing-cabinet": "^3.4.2",
77
- "sxy-lib": "^3.0.4",
78
+ "sxy-lib": "^3.0.5",
78
79
  "sxy-lib-object-copy": "^2.0.5",
79
80
  "sxy-loader": "^3.1.0",
80
81
  "sxy-package-investigator": "^1.0.0",
81
- "zod": "^4.3.6"
82
+ "zod": "^4.4.3"
82
83
  },
83
84
  "devDependencies": {
84
85
  "@babel/generator": "^7.29.1",
@@ -86,7 +87,6 @@
86
87
  "@types/babel-types": "^7.0.16",
87
88
  "@types/babel__core": "^7.20.5",
88
89
  "@types/babel__generator": "^7.27.0",
89
- "@types/bcryptjs": "^2.4.6",
90
90
  "@types/chai": "^4.3.20",
91
91
  "@types/cookie-parser": "^1.4.10",
92
92
  "@types/express": "^4.17.25",
@@ -110,11 +110,11 @@
110
110
  "eslint-import-resolver-typescript": "^2.7.1",
111
111
  "eslint-plugin-import": "^2.32.0",
112
112
  "eslint-plugin-no-type-assertion": "^1.3.0",
113
- "happy-dom": "^20.10.6",
113
+ "happy-dom": "^20.11.1",
114
114
  "prop-types": "^15.8.1",
115
115
  "rimraf": "^5.0.10",
116
116
  "rollup-plugin-visualizer": "^5.14.0",
117
- "sxy-test-runner": "^2.2.2",
117
+ "sxy-test-runner": "^2.3.12",
118
118
  "sxy-types": "^1.0.23",
119
119
  "typescript": "^6.0.3"
120
120
  },
@@ -136,13 +136,15 @@
136
136
  "build": "run-s -c clean build-prep build-watch",
137
137
  "clean": "rimraf intermed dist",
138
138
  "build-once": "rimraf intermed dist && pnpm build-ts-once && pnpm build-babel-once",
139
+ "build-once-nd": "rimraf intermed dist.building && pnpm build-ts-once && pnpm build-babel-staged && node scripts/syncDist.mjs && node scripts/writeBuildMarker.mjs",
139
140
  "build-quick": "pnpm build-watch",
140
141
  "build-prep": "pnpm build-ts-once",
141
142
  "build-watch": "run-p build-ts build-babel",
142
143
  "build-ts": "tsc --watch",
143
144
  "build-ts-once": "tsc",
144
- "build-babel": "babel intermed --out-dir dist --ignore \"**/*.cjs\" --copy-files --config-file ./babel.framework.config.js --watch",
145
- "build-babel-once": "babel intermed --out-dir dist --ignore \"**/*.cjs\" --copy-files --config-file ./babel.framework.config.js",
145
+ "build-babel": "node scripts/watchBabelAndMark.mjs",
146
+ "build-babel-once": "babel intermed --out-dir dist --ignore \"**/*.cjs\" --copy-files --config-file ./babel.framework.config.js && node scripts/writeBuildMarker.mjs",
147
+ "build-babel-staged": "babel intermed --out-dir dist.building --ignore \"**/*.cjs\" --copy-files --config-file ./babel.framework.config.js",
146
148
  "test": "sxy-test-runner",
147
149
  "test-once": "sxy-test-runner once"
148
150
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=FunctionComponentStandIn.sxyt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FunctionComponentStandIn.sxyt.d.ts","sourceRoot":"","sources":["../src/FunctionComponentStandIn.sxyt.ts"],"names":[],"mappings":""}