tungsten 0.3.1 → 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 (291) hide show
  1. package/dist/.build-complete +1 -0
  2. package/dist/Components.d.ts +2 -1
  3. package/dist/Components.d.ts.map +1 -1
  4. package/dist/Components.js +10 -1
  5. package/dist/DomRegion.js +1 -1
  6. package/dist/Framework.d.ts +2 -0
  7. package/dist/Framework.d.ts.map +1 -1
  8. package/dist/Framework.js +68 -57
  9. package/dist/FrameworkConfig.d.ts +6 -0
  10. package/dist/FrameworkConfig.d.ts.map +1 -1
  11. package/dist/FunctionComponentStandIn.d.ts +2 -0
  12. package/dist/FunctionComponentStandIn.d.ts.map +1 -1
  13. package/dist/FunctionComponentStandIn.js +10 -1
  14. package/dist/Instance/Instance.d.ts.map +1 -1
  15. package/dist/Instance/Instance.js +18 -1
  16. package/dist/Instance/InstanceConfig.d.ts +1 -0
  17. package/dist/Instance/InstanceConfig.d.ts.map +1 -1
  18. package/dist/PopMessage.type.d.ts +6 -0
  19. package/dist/PopMessage.type.d.ts.map +1 -0
  20. package/dist/PopMessage.type.js +1 -0
  21. package/dist/Servers/DevServer.d.ts +4 -0
  22. package/dist/Servers/DevServer.d.ts.map +1 -1
  23. package/dist/Servers/DevServer.js +116 -13
  24. package/dist/Servers/MatchedRouteInfo.d.ts +1 -1
  25. package/dist/Servers/MatchedRouteInfo.d.ts.map +1 -1
  26. package/dist/Servers/ProdServer.d.ts +1 -0
  27. package/dist/Servers/ProdServer.d.ts.map +1 -1
  28. package/dist/Servers/ProdServer.js +79 -5
  29. package/dist/Servers/devErrorPageAutoRetry.d.ts +4 -0
  30. package/dist/Servers/devErrorPageAutoRetry.d.ts.map +1 -0
  31. package/dist/Servers/devErrorPageAutoRetry.js +26 -0
  32. package/dist/Servers/hono/DevServerHono.js +25 -29
  33. package/dist/Servers/hono/ProdServerHono.js +49 -142
  34. package/dist/Servers/hono/TungstenServerHono.d.ts +1 -1
  35. package/dist/Servers/hono/TungstenServerHono.d.ts.map +1 -1
  36. package/dist/Servers/hono/TungstenServerHono.js +12 -29
  37. package/dist/Servers/routing.d.ts.map +1 -1
  38. package/dist/Servers/routing.js +10 -6
  39. package/dist/Servers/tungstenCorePrivateEnvSchema.d.ts +0 -3
  40. package/dist/Servers/tungstenCorePrivateEnvSchema.d.ts.map +1 -1
  41. package/dist/Servers/tungstenCorePrivateEnvSchema.js +3 -3
  42. package/dist/Servers/tungstenCorePublicEnvSchema.d.ts +8 -0
  43. package/dist/Servers/tungstenCorePublicEnvSchema.d.ts.map +1 -0
  44. package/dist/Servers/tungstenCorePublicEnvSchema.js +14 -0
  45. package/dist/Store/InternalStoreSchema.d.ts +2 -0
  46. package/dist/Store/InternalStoreSchema.d.ts.map +1 -1
  47. package/dist/Store/InternalStoreSchema.js +1 -0
  48. package/dist/api/Request.d.ts +1 -1
  49. package/dist/api/Request.d.ts.map +1 -1
  50. package/dist/api/Response.d.ts +1 -1
  51. package/dist/api/Response.d.ts.map +1 -1
  52. package/dist/api/getExport.d.ts.map +1 -1
  53. package/dist/api/getExport.js +2 -1
  54. package/dist/babelPlugins/BabelAddDevCacheBust.d.ts +11 -0
  55. package/dist/babelPlugins/BabelAddDevCacheBust.d.ts.map +1 -0
  56. package/dist/babelPlugins/BabelAddDevCacheBust.js +68 -0
  57. package/dist/babelPlugins/BabelTypes.d.ts +2 -2
  58. package/dist/babelPlugins/BabelTypes.d.ts.map +1 -1
  59. package/dist/babelPlugins/BabelTypes.js +0 -1
  60. package/dist/bin/commands/build.d.ts.map +1 -1
  61. package/dist/bin/commands/build.js +3 -0
  62. package/dist/bin/commands/dev.d.ts.map +1 -1
  63. package/dist/bin/commands/dev.js +16 -3
  64. package/dist/bin/commands/devmon.d.ts +2 -0
  65. package/dist/bin/commands/devmon.d.ts.map +1 -0
  66. package/dist/bin/commands/devmon.js +66 -0
  67. package/dist/bin/index.d.ts.map +1 -1
  68. package/dist/bin/index.js +6 -0
  69. package/dist/booleanAttributeValue.d.ts +21 -0
  70. package/dist/booleanAttributeValue.d.ts.map +1 -0
  71. package/dist/booleanAttributeValue.js +23 -0
  72. package/dist/build/compileJavascript.js +1 -1
  73. package/dist/build/compileUserApp.d.ts +2 -1
  74. package/dist/build/compileUserApp.d.ts.map +1 -1
  75. package/dist/build/compileUserApp.js +10 -9
  76. package/dist/build/createInstanceConfigFile.js +1 -1
  77. package/dist/build/makeBabelUserDevConfig.d.ts.map +1 -1
  78. package/dist/build/makeBabelUserDevConfig.js +6 -1
  79. package/dist/compat/types.d.ts +1 -1
  80. package/dist/compat/types.d.ts.map +1 -1
  81. package/dist/components/PopMessages.d.ts +12 -0
  82. package/dist/components/PopMessages.d.ts.map +1 -0
  83. package/dist/components/PopMessages.js +45 -0
  84. package/dist/defaultConfig.d.ts +3 -0
  85. package/dist/defaultConfig.d.ts.map +1 -1
  86. package/dist/defaultConfig.js +4 -1
  87. package/dist/env/Interfaces.d.ts +2 -1
  88. package/dist/env/Interfaces.d.ts.map +1 -1
  89. package/dist/env/getEnvSchemas.d.ts +1 -1
  90. package/dist/env/getEnvSchemas.d.ts.map +1 -1
  91. package/dist/env/getEnvSchemas.js +2 -1
  92. package/dist/env/publicEnv.d.ts.map +1 -1
  93. package/dist/env/publicEnv.js +4 -1
  94. package/dist/frameworkConfigSchema.d.ts +4 -0
  95. package/dist/frameworkConfigSchema.d.ts.map +1 -1
  96. package/dist/frameworkConfigSchema.js +2 -1
  97. package/dist/getComponent.d.ts.map +1 -1
  98. package/dist/getComponent.js +2 -1
  99. package/dist/getRoutes.d.ts.map +1 -1
  100. package/dist/getRoutes.js +2 -1
  101. package/dist/hmr/applyHmrModule.d.ts +11 -0
  102. package/dist/hmr/applyHmrModule.d.ts.map +1 -0
  103. package/dist/hmr/applyHmrModule.js +78 -0
  104. package/dist/hmr/componentIdentity.d.ts +9 -0
  105. package/dist/hmr/componentIdentity.d.ts.map +1 -0
  106. package/dist/hmr/componentIdentity.js +17 -0
  107. package/dist/hmr/instanceRegistry.d.ts +4 -0
  108. package/dist/hmr/instanceRegistry.d.ts.map +1 -0
  109. package/dist/hmr/instanceRegistry.js +6 -0
  110. package/dist/hmr/liveReloadHub.d.ts +10 -0
  111. package/dist/hmr/liveReloadHub.d.ts.map +1 -0
  112. package/dist/{dev → hmr}/liveReloadHub.js +8 -2
  113. package/dist/hmr/refreshStylesheets.d.ts +2 -0
  114. package/dist/hmr/refreshStylesheets.d.ts.map +1 -0
  115. package/dist/hmr/refreshStylesheets.js +26 -0
  116. package/dist/hooks/index.d.ts +1 -0
  117. package/dist/hooks/index.d.ts.map +1 -1
  118. package/dist/hooks/index.js +1 -0
  119. package/dist/hooks/useInstance.d.ts +3 -0
  120. package/dist/hooks/useInstance.d.ts.map +1 -0
  121. package/dist/hooks/useInstance.js +4 -0
  122. package/dist/hydrate/hydrate.d.ts +10 -0
  123. package/dist/hydrate/hydrate.d.ts.map +1 -1
  124. package/dist/hydrate/hydrate.js +81 -19
  125. package/dist/hydrate/reconcileHydratedAttributes.d.ts.map +1 -1
  126. package/dist/hydrate/reconcileHydratedAttributes.js +14 -5
  127. package/dist/hydrate/renderHydrationMismatchBanner.d.ts +7 -0
  128. package/dist/hydrate/renderHydrationMismatchBanner.d.ts.map +1 -0
  129. package/dist/hydrate/renderHydrationMismatchBanner.js +69 -0
  130. package/dist/importDevModuleWithRetry.d.ts +3 -0
  131. package/dist/importDevModuleWithRetry.d.ts.map +1 -0
  132. package/dist/importDevModuleWithRetry.js +46 -0
  133. package/dist/indexInner.d.ts +8 -0
  134. package/dist/indexInner.d.ts.map +1 -1
  135. package/dist/indexInner.js +7 -1
  136. package/dist/makeInstanceConfigFromFrameworkConfig.d.ts.map +1 -1
  137. package/dist/makeInstanceConfigFromFrameworkConfig.js +2 -1
  138. package/dist/pop.d.ts +10 -0
  139. package/dist/pop.d.ts.map +1 -0
  140. package/dist/pop.js +49 -0
  141. package/dist/rawHtml/filterContentNode.d.ts +20 -0
  142. package/dist/rawHtml/filterContentNode.d.ts.map +1 -0
  143. package/dist/rawHtml/filterContentNode.js +96 -0
  144. package/dist/rawHtml/parseHtml.d.ts +14 -0
  145. package/dist/rawHtml/parseHtml.d.ts.map +1 -1
  146. package/dist/rawHtml/parseHtml.js +4 -4
  147. package/dist/rawHtml/sanitizeHtml.d.ts +17 -0
  148. package/dist/rawHtml/sanitizeHtml.d.ts.map +1 -0
  149. package/dist/rawHtml/sanitizeHtml.js +19 -0
  150. package/dist/render/HeadData.d.ts +2 -0
  151. package/dist/render/HeadData.d.ts.map +1 -1
  152. package/dist/render/contentNodeToHtml.d.ts +18 -0
  153. package/dist/render/contentNodeToHtml.d.ts.map +1 -0
  154. package/dist/render/contentNodeToHtml.js +66 -0
  155. package/dist/render/contentToHtml.d.ts.map +1 -1
  156. package/dist/render/contentToHtml.js +3 -1
  157. package/dist/render/processHead.d.ts.map +1 -1
  158. package/dist/render/processHead.js +53 -6
  159. package/dist/render/renderingTreeToHtml.d.ts.map +1 -1
  160. package/dist/render/renderingTreeToHtml.js +8 -1
  161. package/dist/routing/ErrorRouteType.d.ts +6 -0
  162. package/dist/routing/ErrorRouteType.d.ts.map +1 -0
  163. package/dist/routing/ErrorRouteType.js +1 -0
  164. package/dist/routing/RouteTypes.d.ts +2 -1
  165. package/dist/routing/RouteTypes.d.ts.map +1 -1
  166. package/dist/routing/Routes.d.ts +5 -0
  167. package/dist/routing/Routes.d.ts.map +1 -1
  168. package/dist/routing/TungstenErrorInfo.d.ts +6 -0
  169. package/dist/routing/TungstenErrorInfo.d.ts.map +1 -0
  170. package/dist/routing/TungstenErrorInfo.js +6 -0
  171. package/dist/style/styleContentSxy.js +21 -0
  172. package/dist/testing/hydrateTestApp.d.ts +38 -0
  173. package/dist/testing/hydrateTestApp.d.ts.map +1 -0
  174. package/dist/testing/hydrateTestApp.js +242 -0
  175. package/dist/testing/index.d.ts +4 -3
  176. package/dist/testing/index.d.ts.map +1 -1
  177. package/dist/testing/index.js +16 -2
  178. package/dist/timeProfiler.d.ts +6 -0
  179. package/dist/timeProfiler.d.ts.map +1 -0
  180. package/dist/timeProfiler.js +31 -0
  181. package/dist/update/integrateUpdateVdom.d.ts +16 -1
  182. package/dist/update/integrateUpdateVdom.d.ts.map +1 -1
  183. package/dist/update/integrateUpdateVdom.js +116 -7
  184. package/dist/warnOnFrameworkChange.d.ts +2 -0
  185. package/dist/warnOnFrameworkChange.d.ts.map +1 -0
  186. package/dist/warnOnFrameworkChange.js +27 -0
  187. package/package.json +18 -16
  188. package/dist/Instance/gotoRedirect.sxyt.d.ts +0 -2
  189. package/dist/Instance/gotoRedirect.sxyt.d.ts.map +0 -1
  190. package/dist/Instance/gotoRedirect.sxyt.js +0 -148
  191. package/dist/Instance/runTrackedWork.sxyt.d.ts +0 -2
  192. package/dist/Instance/runTrackedWork.sxyt.d.ts.map +0 -1
  193. package/dist/Instance/runTrackedWork.sxyt.js +0 -35
  194. package/dist/_client/cjsHelpers.sxyt.d.ts +0 -2
  195. package/dist/_client/cjsHelpers.sxyt.d.ts.map +0 -1
  196. package/dist/_client/cjsHelpers.sxyt.js +0 -45
  197. package/dist/auth/passwordHashing.sxyt.d.ts +0 -2
  198. package/dist/auth/passwordHashing.sxyt.d.ts.map +0 -1
  199. package/dist/auth/passwordHashing.sxyt.js +0 -46
  200. package/dist/auth/ref/checkPasswordResetToken.sxyt.d.ts +0 -2
  201. package/dist/auth/ref/checkPasswordResetToken.sxyt.d.ts.map +0 -1
  202. package/dist/auth/ref/checkPasswordResetToken.sxyt.js +0 -40
  203. package/dist/auth/ref/createPasswordResetToken.sxyt.d.ts +0 -2
  204. package/dist/auth/ref/createPasswordResetToken.sxyt.d.ts.map +0 -1
  205. package/dist/auth/ref/createPasswordResetToken.sxyt.js +0 -10
  206. package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.d.ts +0 -2
  207. package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.d.ts.map +0 -1
  208. package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.js +0 -108
  209. package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.d.ts +0 -2
  210. package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.d.ts.map +0 -1
  211. package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.js +0 -104
  212. package/dist/bin/commands/compile.sxyt.d.ts +0 -2
  213. package/dist/bin/commands/compile.sxyt.d.ts.map +0 -1
  214. package/dist/bin/commands/compile.sxyt.js +0 -255
  215. package/dist/build/modifySassImports.sxyt.d.ts +0 -2
  216. package/dist/build/modifySassImports.sxyt.d.ts.map +0 -1
  217. package/dist/build/modifySassImports.sxyt.js +0 -55
  218. package/dist/build/sassImportParser.sxyt.d.ts +0 -2
  219. package/dist/build/sassImportParser.sxyt.d.ts.map +0 -1
  220. package/dist/build/sassImportParser.sxyt.js +0 -110
  221. package/dist/build/scssImportParserChatgpt.sxyt.d.ts +0 -2
  222. package/dist/build/scssImportParserChatgpt.sxyt.d.ts.map +0 -1
  223. package/dist/build/scssImportParserChatgpt.sxyt.js +0 -120
  224. package/dist/clone.sxyt.d.ts +0 -2
  225. package/dist/clone.sxyt.d.ts.map +0 -1
  226. package/dist/clone.sxyt.js +0 -24
  227. package/dist/componentProxyHandlers.sxyt.d.ts +0 -2
  228. package/dist/componentProxyHandlers.sxyt.d.ts.map +0 -1
  229. package/dist/componentProxyHandlers.sxyt.js +0 -130
  230. package/dist/components/RawHtml.sxyt.d.ts +0 -2
  231. package/dist/components/RawHtml.sxyt.d.ts.map +0 -1
  232. package/dist/components/RawHtml.sxyt.js +0 -104
  233. package/dist/components/bindable/BindableSelect.sxyt.d.ts +0 -2
  234. package/dist/components/bindable/BindableSelect.sxyt.d.ts.map +0 -1
  235. package/dist/components/bindable/BindableSelect.sxyt.js +0 -186
  236. package/dist/dev/liveReloadHub.d.ts +0 -6
  237. package/dist/dev/liveReloadHub.d.ts.map +0 -1
  238. package/dist/env/injectEnv.sxyt.d.ts +0 -2
  239. package/dist/env/injectEnv.sxyt.d.ts.map +0 -1
  240. package/dist/env/injectEnv.sxyt.js +0 -20
  241. package/dist/env/parseEnv.sxyt.d.ts +0 -2
  242. package/dist/env/parseEnv.sxyt.d.ts.map +0 -1
  243. package/dist/env/parseEnv.sxyt.js +0 -11
  244. package/dist/findProjectDir.sxyt.d.ts +0 -2
  245. package/dist/findProjectDir.sxyt.d.ts.map +0 -1
  246. package/dist/findProjectDir.sxyt.js +0 -82
  247. package/dist/hydrate/reconcileHydratedAttributes.sxyt.d.ts +0 -2
  248. package/dist/hydrate/reconcileHydratedAttributes.sxyt.d.ts.map +0 -1
  249. package/dist/hydrate/reconcileHydratedAttributes.sxyt.js +0 -173
  250. package/dist/innerHtmlFromProps.sxyt.d.ts +0 -2
  251. package/dist/innerHtmlFromProps.sxyt.d.ts.map +0 -1
  252. package/dist/innerHtmlFromProps.sxyt.js +0 -99
  253. package/dist/postcssPlugins/parseSelectors.sxyt.d.ts +0 -2
  254. package/dist/postcssPlugins/parseSelectors.sxyt.d.ts.map +0 -1
  255. package/dist/postcssPlugins/parseSelectors.sxyt.js +0 -62
  256. package/dist/postcssPlugins/parseSelectorsRich.sxyt.d.ts +0 -2
  257. package/dist/postcssPlugins/parseSelectorsRich.sxyt.d.ts.map +0 -1
  258. package/dist/postcssPlugins/parseSelectorsRich.sxyt.js +0 -155
  259. package/dist/rawHtml/parseHtml.sxyt.d.ts +0 -2
  260. package/dist/rawHtml/parseHtml.sxyt.d.ts.map +0 -1
  261. package/dist/rawHtml/parseHtml.sxyt.js +0 -239
  262. package/dist/render/getFunctionBodyAsString.sxyt.d.ts +0 -2
  263. package/dist/render/getFunctionBodyAsString.sxyt.d.ts.map +0 -1
  264. package/dist/render/getFunctionBodyAsString.sxyt.js +0 -37
  265. package/dist/render/processProps.sxyt.d.ts +0 -2
  266. package/dist/render/processProps.sxyt.d.ts.map +0 -1
  267. package/dist/render/processProps.sxyt.js +0 -90
  268. package/dist/routing/compareRequestToRegex.sxyt.d.ts +0 -2
  269. package/dist/routing/compareRequestToRegex.sxyt.d.ts.map +0 -1
  270. package/dist/routing/compareRequestToRegex.sxyt.js +0 -65
  271. package/dist/routing/getPathPriority.sxyt.d.ts +0 -2
  272. package/dist/routing/getPathPriority.sxyt.d.ts.map +0 -1
  273. package/dist/routing/getPathPriority.sxyt.js +0 -24
  274. package/dist/routing/matchPath.sxyt.d.ts +0 -2
  275. package/dist/routing/matchPath.sxyt.d.ts.map +0 -1
  276. package/dist/routing/matchPath.sxyt.js +0 -41
  277. package/dist/routing/patternToRegex.sxyt.d.ts +0 -2
  278. package/dist/routing/patternToRegex.sxyt.d.ts.map +0 -1
  279. package/dist/routing/patternToRegex.sxyt.js +0 -69
  280. package/dist/routing/splitRequest.sxyt.d.ts +0 -2
  281. package/dist/routing/splitRequest.sxyt.d.ts.map +0 -1
  282. package/dist/routing/splitRequest.sxyt.js +0 -47
  283. package/dist/style/jssToCss.sxyt.d.ts +0 -2
  284. package/dist/style/jssToCss.sxyt.d.ts.map +0 -1
  285. package/dist/style/jssToCss.sxyt.js +0 -17
  286. package/dist/testing/createTestApp.sxyt.d.ts +0 -2
  287. package/dist/testing/createTestApp.sxyt.d.ts.map +0 -1
  288. package/dist/testing/createTestApp.sxyt.js +0 -470
  289. package/dist/testing/ensureTestEnvLoaded.sxyt.d.ts +0 -2
  290. package/dist/testing/ensureTestEnvLoaded.sxyt.d.ts.map +0 -1
  291. package/dist/testing/ensureTestEnvLoaded.sxyt.js +0 -20
@@ -1,186 +0,0 @@
1
- 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; }
2
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
- 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); }
4
- import { expect } from 'chai';
5
- import { Window } from 'happy-dom';
6
- import { describe } from 'sxy-test-runner';
7
- import { TungstenStatefulComponent } from "../../Components.js";
8
- import { createTestApp } from "../../testing/index.js";
9
- import { BindableSelect } from "./BindableSelect.js";
10
- import { jsx as _jsx, jsxs as _jsxs } from "tungsten/jsxRuntime.js";
11
- const optionTexts = container => [...container.querySelectorAll('option')].map(option => option.textContent);
12
- describe('BindableSelect', ({
13
- it
14
- }) => {
15
- it('renders children when no options prop is given', async () => {
16
- const window = new Window();
17
- const document = window.document;
18
- class Root extends TungstenStatefulComponent {
19
- constructor(...args) {
20
- super(...args);
21
- _defineProperty(this, "state", {
22
- choice: 'b'
23
- });
24
- _defineProperty(this, "content", () => _jsxs(BindableSelect, {
25
- bind: [this.state, 'choice'],
26
- children: [_jsx("option", {
27
- value: "a",
28
- children: "A"
29
- }), _jsx("option", {
30
- value: "b",
31
- children: "B"
32
- })]
33
- }));
34
- }
35
- }
36
- const testApp = await createTestApp(Root, {
37
- document
38
- });
39
- expect(optionTexts(testApp.container)).to.deep.equal(['A', 'B']);
40
- await testApp.unmount();
41
- });
42
- // placeholder must behave exactly as it does on a plain <select>: it reaches the element as an
43
- // attribute and HTML ignores it. It deliberately does NOT synthesize a placeholder option —
44
- // that would make BindableSelect diverge from the plain element.
45
- it('passes placeholder to the element like a plain select, adding no option', async () => {
46
- const window = new Window();
47
- const document = window.document;
48
- class Root extends TungstenStatefulComponent {
49
- constructor(...args) {
50
- super(...args);
51
- _defineProperty(this, "state", {
52
- choice: ''
53
- });
54
- _defineProperty(this, "content", () => _jsxs("main", {
55
- children: [_jsx(BindableSelect, {
56
- placeholder: "Pick one",
57
- options: [{
58
- value: 'a',
59
- text: 'A'
60
- }, {
61
- value: 'b',
62
- text: 'B'
63
- }],
64
- bind: [this.state, 'choice']
65
- }), _jsxs("select", {
66
- placeholder: "Pick one",
67
- bind: [this.state, 'choice'],
68
- children: [_jsx("option", {
69
- value: "a",
70
- children: "A"
71
- }), _jsx("option", {
72
- value: "b",
73
- children: "B"
74
- })]
75
- })]
76
- }));
77
- }
78
- }
79
- const testApp = await createTestApp(Root, {
80
- document
81
- });
82
- const [bindable, plain] = [...testApp.container.querySelectorAll('select')];
83
- expect(bindable?.getAttribute('placeholder')).to.equal('Pick one');
84
- expect(bindable?.querySelectorAll('option').length).to.equal(2);
85
- // parity with the plain element it stands in for
86
- expect(bindable?.getAttribute('placeholder')).to.equal(plain?.getAttribute('placeholder'));
87
- expect(bindable?.innerHTML).to.equal(plain?.innerHTML);
88
- await testApp.unmount();
89
- });
90
- // text is ContentNode, not string — existing string call sites are unaffected (widening).
91
- it('accepts JSX as an option text as well as a plain string', async () => {
92
- const window = new Window();
93
- const document = window.document;
94
- class Root extends TungstenStatefulComponent {
95
- constructor(...args) {
96
- super(...args);
97
- _defineProperty(this, "state", {
98
- choice: 'a'
99
- });
100
- _defineProperty(this, "content", () => _jsx(BindableSelect, {
101
- options: [{
102
- value: 'a',
103
- text: 'Plain'
104
- }, {
105
- value: 'b',
106
- text: _jsx("em", {
107
- children: "Rich"
108
- })
109
- }, {
110
- value: 'c',
111
- text: 3
112
- }],
113
- bind: [this.state, 'choice']
114
- }));
115
- }
116
- }
117
- const testApp = await createTestApp(Root, {
118
- document
119
- });
120
- expect(optionTexts(testApp.container)).to.deep.equal(['Plain', 'Rich', '3']);
121
- expect(testApp.container.querySelector('option em')).not.to.equal(null);
122
- await testApp.unmount();
123
- });
124
- it('renders options then children when both are given', async () => {
125
- const window = new Window();
126
- const document = window.document;
127
- class Root extends TungstenStatefulComponent {
128
- constructor(...args) {
129
- super(...args);
130
- _defineProperty(this, "state", {
131
- choice: 'a'
132
- });
133
- _defineProperty(this, "content", () => _jsx(BindableSelect, {
134
- options: [{
135
- value: 'a',
136
- text: 'A'
137
- }],
138
- bind: [this.state, 'choice'],
139
- children: _jsx("option", {
140
- value: "z",
141
- children: "Z"
142
- })
143
- }));
144
- }
145
- }
146
- const testApp = await createTestApp(Root, {
147
- document
148
- });
149
- expect(optionTexts(testApp.container)).to.deep.equal(['A', 'Z']);
150
- await testApp.unmount();
151
- });
152
- it('still binds the selected value back to state', async () => {
153
- const window = new Window();
154
- const document = window.document;
155
- class Root extends TungstenStatefulComponent {
156
- constructor(...args) {
157
- super(...args);
158
- _defineProperty(this, "state", {
159
- choice: 'a'
160
- });
161
- _defineProperty(this, "content", () => _jsx(BindableSelect, {
162
- placeholder: "Pick one",
163
- options: [{
164
- value: 'a',
165
- text: 'A'
166
- }, {
167
- value: 'b',
168
- text: 'B'
169
- }],
170
- bind: [this.state, 'choice']
171
- }));
172
- }
173
- }
174
- const testApp = await createTestApp(Root, {
175
- document
176
- });
177
- const select = testApp.container.querySelector('select');
178
- select.value = 'b';
179
- select.dispatchEvent(new window.Event('input', {
180
- bubbles: true
181
- }));
182
- await testApp.resolved();
183
- expect(testApp.component.state.choice).to.equal('b');
184
- await testApp.unmount();
185
- });
186
- });
@@ -1,6 +0,0 @@
1
- export type ReloadEventKind = 'js' | 'css';
2
- type ReloadListener = (kind: ReloadEventKind) => void;
3
- export declare function onReloadEvent(listener: ReloadListener): () => void;
4
- export declare function emitReloadEvent(kind: ReloadEventKind): void;
5
- export {};
6
- //# sourceMappingURL=liveReloadHub.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"liveReloadHub.d.ts","sourceRoot":"","sources":["../../src/dev/liveReloadHub.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,KAAK,CAAA;AAE1C,KAAK,cAAc,GAAG,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAA;AAIrD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI,CAGlE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAE3D"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=injectEnv.sxyt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"injectEnv.sxyt.d.ts","sourceRoot":"","sources":["../../src/env/injectEnv.sxyt.ts"],"names":[],"mappings":""}
@@ -1,20 +0,0 @@
1
- import { describe } from 'sxy-test-runner';
2
- import { should as setupShould, expect } from 'chai';
3
- const should = setupShould(); // eslint-disable-line @typescript-eslint/no-unused-vars
4
- import { injectEnv } from "./injectEnv.js";
5
- describe('injectEnv()', ({
6
- it
7
- }) => {
8
- it('should inject key value pairs into process.env', () => {
9
- delete process.env.foo;
10
- delete process.env.bar;
11
- expect(process.env.foo).to.be.undefined;
12
- expect(process.env.bar).to.be.undefined;
13
- injectEnv({
14
- foo: 'FOO',
15
- bar: 'BAZ'
16
- });
17
- expect(process.env.foo).to.equal('FOO');
18
- expect(process.env.bar).to.equal('BAZ');
19
- });
20
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=parseEnv.sxyt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseEnv.sxyt.d.ts","sourceRoot":"","sources":["../../src/env/parseEnv.sxyt.ts"],"names":[],"mappings":""}
@@ -1,11 +0,0 @@
1
- // import { describe } from 'sxy-test-runner'
2
- // import { should as setupShould } from 'chai'
3
- // const should = setupShould() // eslint-disable-line @typescript-eslint/no-unused-vars
4
- export {};
5
- // import { parseEnv } from './parseEnv.js'
6
- // describe('loadEnv()', ({it}) => {
7
- // it('should extra a key value pair from some text', () => {
8
- // const env = parseEnv(' foo = bar ')
9
- // env.should.deep.equal({ foo: 'bar' })
10
- // })
11
- // })
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=findProjectDir.sxyt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"findProjectDir.sxyt.d.ts","sourceRoot":"","sources":["../src/findProjectDir.sxyt.ts"],"names":[],"mappings":""}
@@ -1,82 +0,0 @@
1
- import { describe } from 'sxy-test-runner';
2
- import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'fs';
3
- import { tmpdir } from 'os';
4
- import { join } from 'path';
5
- import { findProjectDir } from "./findProjectDir.js";
6
- // Build a fixture that mirrors zod v4 - a named package containing a sub folder with a
7
- // nameless marker package.json that only sets the module format and local entry points.
8
- function makeFixture() {
9
- const root = mkdtempSync(join(tmpdir(), 'tungsten-find-project-dir-'));
10
- const packageDir = join(root, 'fake-package');
11
- const markerDir = join(packageDir, 'v4', 'core');
12
- mkdirSync(markerDir, {
13
- recursive: true
14
- });
15
- writeFileSync(join(packageDir, 'package.json'), JSON.stringify({
16
- name: 'fake-package',
17
- version: '1.2.3',
18
- type: 'module'
19
- }));
20
- writeFileSync(join(markerDir, 'package.json'), JSON.stringify({
21
- type: 'module',
22
- main: './index.cjs',
23
- module: './index.js'
24
- }));
25
- writeFileSync(join(markerDir, 'index.js'), '');
26
- return {
27
- root,
28
- packageDir,
29
- markerDir
30
- };
31
- }
32
- describe('findProjectDir()', ({
33
- it
34
- }) => {
35
- it(`returns the nearest package.json dir, named or not, by default`, () => {
36
- const {
37
- root,
38
- markerDir
39
- } = makeFixture();
40
- try {
41
- findProjectDir(markerDir).should.equal(markerDir);
42
- } finally {
43
- rmSync(root, {
44
- recursive: true,
45
- force: true
46
- });
47
- }
48
- });
49
- it(`skips nameless package.json files when requireName is set`, () => {
50
- const {
51
- root,
52
- packageDir,
53
- markerDir
54
- } = makeFixture();
55
- try {
56
- findProjectDir(markerDir, {
57
- requireName: true
58
- }).should.equal(packageDir);
59
- } finally {
60
- rmSync(root, {
61
- recursive: true,
62
- force: true
63
- });
64
- }
65
- });
66
- it(`returns the named package dir when it is the nearest one`, () => {
67
- const {
68
- root,
69
- packageDir
70
- } = makeFixture();
71
- try {
72
- findProjectDir(packageDir, {
73
- requireName: true
74
- }).should.equal(packageDir);
75
- } finally {
76
- rmSync(root, {
77
- recursive: true,
78
- force: true
79
- });
80
- }
81
- });
82
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=reconcileHydratedAttributes.sxyt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcileHydratedAttributes.sxyt.d.ts","sourceRoot":"","sources":["../../src/hydrate/reconcileHydratedAttributes.sxyt.ts"],"names":[],"mappings":""}
@@ -1,173 +0,0 @@
1
- import { describe } from 'sxy-test-runner';
2
- import { expect } from 'chai';
3
- import { Window } from 'happy-dom';
4
- import { reconcileHydratedAttributes } from "./reconcileHydratedAttributes.js";
5
- import { $props, $type } from "../contentNodeSymbols.js";
6
- const window = new Window();
7
- const node = (type, props) => ({
8
- [$type]: type,
9
- [$props]: props
10
- });
11
- /** Builds an element from markup the server could have produced. */
12
- const element = html => {
13
- const host = window.document.createElement('div');
14
- host.innerHTML = html;
15
- // eslint-disable-next-line no-type-assertion/no-type-assertion
16
- return host.firstElementChild;
17
- };
18
- const attributesOf = domNode => Object.fromEntries([...domNode.attributes].map(attribute => [attribute.name, attribute.value]));
19
- /** Reconciles and returns what changed. */
20
- const reconcile = (type, props, html) => {
21
- const domNode = element(html);
22
- const mismatches = [];
23
- reconcileHydratedAttributes(node(type, props), domNode, mismatch => mismatches.push(mismatch));
24
- return {
25
- domNode,
26
- mismatches,
27
- attributes: attributesOf(domNode)
28
- };
29
- };
30
- describe('reconcileHydratedAttributes()', ({
31
- it
32
- }) => {
33
- it('patches an attribute whose rendered value differs from the markup', () => {
34
- const {
35
- attributes,
36
- mismatches
37
- } = reconcile('div', {
38
- style: {
39
- backgroundColor: '#123456'
40
- }
41
- }, '<div style="background-color: #bae3ff;"></div>');
42
- expect(attributes.style).to.equal('background-color: #123456;');
43
- expect(mismatches.map(mismatch => mismatch.name)).to.deep.equal(['style']);
44
- });
45
- it('leaves a matching attribute untouched and reports nothing', () => {
46
- const {
47
- attributes,
48
- mismatches
49
- } = reconcile('input', {
50
- name: 'ref',
51
- title: 'Reference'
52
- }, '<input name="ref" title="Reference">');
53
- expect(attributes).to.deep.equal({
54
- name: 'ref',
55
- title: 'Reference'
56
- });
57
- expect(mismatches).to.deep.equal([]);
58
- });
59
- it('adds an attribute the markup is missing', () => {
60
- const {
61
- attributes
62
- } = reconcile('a', {
63
- href: '/x',
64
- title: 't'
65
- }, '<a href="/x"></a>');
66
- expect(attributes).to.deep.equal({
67
- href: '/x',
68
- title: 't'
69
- });
70
- });
71
- it('removes an attribute the render no longer produces', () => {
72
- const {
73
- attributes,
74
- mismatches
75
- } = reconcile('a', {
76
- href: '/x'
77
- }, '<a href="/x" title="gone"></a>');
78
- expect(attributes).to.deep.equal({
79
- href: '/x'
80
- });
81
- expect(mismatches.map(mismatch => mismatch.name)).to.deep.equal(['title']);
82
- });
83
- it('treats a true boolean as a present, empty attribute', () => {
84
- expect(reconcile('button', {
85
- disabled: true
86
- }, '<button></button>').attributes).to.deep.equal({
87
- disabled: ''
88
- });
89
- });
90
- it('removes an attribute whose rendered value is false, null or undefined', () => {
91
- expect(reconcile('button', {
92
- disabled: false
93
- }, '<button disabled></button>').attributes).to.deep.equal({});
94
- expect(reconcile('a', {
95
- href: null
96
- }, '<a href="/x"></a>').attributes).to.deep.equal({});
97
- expect(reconcile('a', {
98
- href: undefined
99
- }, '<a href="/x"></a>').attributes).to.deep.equal({});
100
- });
101
- // The comparison has to apply the same transformation the server used, or
102
- // every element looks mismatched and the whole document gets rewritten.
103
- it('applies the server prop transform, so className compares against class', () => {
104
- const {
105
- attributes,
106
- mismatches
107
- } = reconcile('div', {
108
- className: 'frame Qtc_frame'
109
- }, '<div class="frame Qtc_frame"></div>');
110
- expect(attributes).to.deep.equal({
111
- class: 'frame Qtc_frame'
112
- });
113
- expect(mismatches).to.deep.equal([]);
114
- });
115
- it('ignores event handlers rather than writing them as attributes', () => {
116
- const {
117
- attributes,
118
- mismatches
119
- } = reconcile('input', {
120
- name: 'a',
121
- onInput: () => undefined,
122
- onClick: () => undefined
123
- }, '<input name="a">');
124
- expect(attributes).to.deep.equal({
125
- name: 'a'
126
- });
127
- expect(mismatches).to.deep.equal([]);
128
- });
129
- it('ignores props that are instructions to Tungsten', () => {
130
- const {
131
- attributes,
132
- mismatches
133
- } = reconcile('div', {
134
- __opaque: true,
135
- dangerouslySetInnerHTML: {
136
- __html: '<b>x</b>'
137
- },
138
- id: 'd'
139
- }, '<div id="d"></div>');
140
- expect(attributes).to.deep.equal({
141
- id: 'd'
142
- });
143
- expect(mismatches).to.deep.equal([]);
144
- });
145
- it('reports what changed, for a dev-mode warning', () => {
146
- const {
147
- mismatches
148
- } = reconcile('a', {
149
- href: '/new'
150
- }, '<a href="/old" title="stale"></a>');
151
- expect(mismatches).to.deep.include({
152
- name: 'href',
153
- expected: '/new',
154
- actual: '/old'
155
- });
156
- expect(mismatches).to.deep.include({
157
- name: 'title',
158
- expected: null,
159
- actual: 'stale'
160
- });
161
- });
162
- it('clears the checked property when removing a checked attribute', () => {
163
- const domNode = element('<input type="checkbox" checked>');
164
- // eslint-disable-next-line no-type-assertion/no-type-assertion
165
- const checkbox = domNode;
166
- expect(checkbox.checked).to.equal(true);
167
- reconcileHydratedAttributes(node('input', {
168
- type: 'checkbox'
169
- }), domNode);
170
- expect(checkbox.checked).to.equal(false);
171
- expect(domNode.hasAttribute('checked')).to.equal(false);
172
- });
173
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=innerHtmlFromProps.sxyt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"innerHtmlFromProps.sxyt.d.ts","sourceRoot":"","sources":["../src/innerHtmlFromProps.sxyt.ts"],"names":[],"mappings":""}
@@ -1,99 +0,0 @@
1
- import { describe } from 'sxy-test-runner';
2
- import { expect } from 'chai';
3
- import { innerHtmlFromProps } from "./innerHtmlFromProps.js";
4
- import { renderingNodeToHtml } from "./render/renderingTreeToHtml.js";
5
- import { $props, $type } from "./contentNodeSymbols.js";
6
- const props = value => value;
7
- // `found: true` short-circuits the <head> handling, which is all these
8
- // element-level tests need from HeadData.
9
- // eslint-disable-next-line no-type-assertion/no-type-assertion
10
- const noHeadData = {
11
- found: true
12
- };
13
- const renderHtml = (type, nodeProps) => renderingNodeToHtml(
14
- // eslint-disable-next-line no-type-assertion/no-type-assertion
15
- {
16
- [$type]: type,
17
- [$props]: nodeProps
18
- }, false, noHeadData, null);
19
- describe('innerHtmlFromProps()', ({
20
- it
21
- }) => {
22
- it('returns null when the element does not use dangerouslySetInnerHTML', () => {
23
- expect(innerHtmlFromProps('div', props({
24
- children: 'hello'
25
- }), true)).to.equal(null);
26
- });
27
- it('returns the raw markup', () => {
28
- expect(innerHtmlFromProps('div', props({
29
- dangerouslySetInnerHTML: {
30
- __html: '<b>hi</b>'
31
- }
32
- }), false)).to.equal('<b>hi</b>');
33
- });
34
- it('rejects an element carrying both raw markup and children', () => {
35
- expect(() => innerHtmlFromProps('div', props({
36
- dangerouslySetInnerHTML: {
37
- __html: '<b>hi</b>'
38
- },
39
- children: 'hello'
40
- }), true)).to.throw(/both dangerouslySetInnerHTML and children/);
41
- });
42
- it('rejects a prop that is not of the form { __html }', () => {
43
- // eslint-disable-next-line no-type-assertion/no-type-assertion
44
- const bad = {
45
- dangerouslySetInnerHTML: '<b>hi</b>'
46
- };
47
- expect(() => innerHtmlFromProps('div', bad, false)).to.throw(/{ __html: '...' }/);
48
- });
49
- it('rejects a null or undefined __html', () => {
50
- // eslint-disable-next-line no-type-assertion/no-type-assertion
51
- const nulled = {
52
- dangerouslySetInnerHTML: {
53
- __html: null
54
- }
55
- };
56
- expect(() => innerHtmlFromProps('div', nulled, false)).to.throw(/__html is null/);
57
- });
58
- });
59
- describe('dangerouslySetInnerHTML rendering', ({
60
- it
61
- }) => {
62
- it('writes the markup into the element unescaped', async () => {
63
- expect(await renderHtml('div', {
64
- dangerouslySetInnerHTML: {
65
- __html: '<p>Bonuses.</p>'
66
- }
67
- })).to.equal('<div><p>Bonuses.</p></div>');
68
- });
69
- it('does not leak the prop into the markup as an attribute', async () => {
70
- const html = await renderHtml('div', {
71
- id: 'tip',
72
- dangerouslySetInnerHTML: {
73
- __html: '<b>hi</b>'
74
- }
75
- });
76
- expect(html).to.not.include('dangerouslySetInnerHTML');
77
- expect(html).to.not.include('[object Object]');
78
- expect(html).to.equal('<div id="tip"><b>hi</b></div>');
79
- });
80
- it('escapes ordinary children, so the switch is per element', async () => {
81
- expect(await renderHtml('div', {
82
- children: '<p>Bonuses.</p>'
83
- })).to.equal('<div>&lt;p&gt;Bonuses.&lt;/p&gt;</div>');
84
- });
85
- it('rejects raw markup on a void element', async () => {
86
- let thrown = null;
87
- try {
88
- await renderHtml('br', {
89
- dangerouslySetInnerHTML: {
90
- __html: '<b>hi</b>'
91
- }
92
- });
93
- } catch (error) {
94
- thrown = error;
95
- }
96
- expect(thrown).to.be.an('error');
97
- expect(thrown.message).to.include('void type');
98
- });
99
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=parseSelectors.sxyt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseSelectors.sxyt.d.ts","sourceRoot":"","sources":["../../src/postcssPlugins/parseSelectors.sxyt.ts"],"names":[],"mappings":""}