tungsten 0.1.59 → 0.1.60

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 (202) hide show
  1. package/dist/AnyComponent.d.ts.map +1 -1
  2. package/dist/ComponentInstance.d.ts +1 -2
  3. package/dist/ComponentInstance.d.ts.map +1 -1
  4. package/dist/ComponentInstance.js +4 -1
  5. package/dist/ComponentRenderInfo.type.d.ts +6 -0
  6. package/dist/ComponentRenderInfo.type.d.ts.map +1 -0
  7. package/dist/ComponentRenderInfo.type.js +1 -0
  8. package/dist/Components.d.ts +4 -2
  9. package/dist/Components.d.ts.map +1 -1
  10. package/dist/Components.js +10 -4
  11. package/dist/ContentNode.d.ts +3 -1
  12. package/dist/ContentNode.d.ts.map +1 -1
  13. package/dist/ContentNode.js +1 -0
  14. package/dist/Framework.d.ts +1 -1
  15. package/dist/Framework.d.ts.map +1 -1
  16. package/dist/Framework.js +42 -25
  17. package/dist/FrameworkConfig.d.ts +20 -4
  18. package/dist/FrameworkConfig.d.ts.map +1 -1
  19. package/dist/FunctionComponent.d.ts +2 -0
  20. package/dist/FunctionComponent.d.ts.map +1 -1
  21. package/dist/FunctionComponentStandIn.d.ts +4 -4
  22. package/dist/FunctionComponentStandIn.d.ts.map +1 -1
  23. package/dist/FunctionComponentStandIn.js +4 -2
  24. package/dist/Instance/InstanceConfig.d.ts +2 -0
  25. package/dist/Instance/InstanceConfig.d.ts.map +1 -1
  26. package/dist/RenderedContentNode.d.ts +1 -1
  27. package/dist/RenderedContentNode.d.ts.map +1 -1
  28. package/dist/RenderedContentNode.js +2 -2
  29. package/dist/RenderingNode.d.ts +23 -8
  30. package/dist/RenderingNode.d.ts.map +1 -1
  31. package/dist/RenderingNode.js +39 -8
  32. package/dist/Servers/DevServer.d.ts.map +1 -1
  33. package/dist/Servers/DevServer.js +74 -25
  34. package/dist/Servers/ProdServer.d.ts +5 -1
  35. package/dist/Servers/ProdServer.d.ts.map +1 -1
  36. package/dist/Servers/ProdServer.js +49 -33
  37. package/dist/TungstenElement.d.ts +3 -0
  38. package/dist/TungstenElement.d.ts.map +1 -0
  39. package/dist/TungstenElement.js +1 -0
  40. package/dist/_client/client.d.ts +4 -1
  41. package/dist/_client/client.d.ts.map +1 -1
  42. package/dist/_client/client.js +16 -9
  43. package/dist/babelPlugins/BabelTransformCjsToEsm.d.ts +1 -1
  44. package/dist/babelPlugins/BabelTransformCjsToEsm.d.ts.map +1 -1
  45. package/dist/babelPlugins/BabelTransformCjsToFunction.d.ts +1 -1
  46. package/dist/babelPlugins/BabelTransformCjsToFunction.d.ts.map +1 -1
  47. package/dist/babelPlugins/BabelTransformCjsToFunction2.d.ts +1 -1
  48. package/dist/babelPlugins/BabelTransformCjsToFunction2.d.ts.map +1 -1
  49. package/dist/babelPlugins/{BabelTransformCssImport.d.ts → BabelTransformCssImports.d.ts} +3 -2
  50. package/dist/babelPlugins/BabelTransformCssImports.d.ts.map +1 -0
  51. package/dist/babelPlugins/{BabelTransformCssImport.js → BabelTransformCssImports.js} +27 -5
  52. package/dist/babelPlugins/BabelTransformPackageImports.d.ts.map +1 -1
  53. package/dist/babelPlugins/BabelTransformPackageImports.js +75 -37
  54. package/dist/babelPlugins/BabelTransformRemoveServerBlocks.d.ts.map +1 -1
  55. package/dist/babelPlugins/BabelTransformRemoveServerBlocks.js +5 -0
  56. package/dist/babelPlugins/BabelTransformRemoveServerCode.d.ts +2 -0
  57. package/dist/babelPlugins/BabelTransformRemoveServerCode.d.ts.map +1 -0
  58. package/dist/babelPlugins/BabelTransformRemoveServerCode.js +1 -0
  59. package/dist/babelPlugins/fixImportsInSassErrorMessage.d.ts.map +1 -1
  60. package/dist/babelPlugins/{BabelTransformDependencyImportsCjs.d.ts → transformPackageImports/BabelTransformDependencyImportsCjs.d.ts} +1 -1
  61. package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsCjs.d.ts.map +1 -0
  62. package/dist/babelPlugins/{BabelTransformDependencyImportsCjs.js → transformPackageImports/BabelTransformDependencyImportsCjs.js} +12 -3
  63. package/dist/babelPlugins/{BabelTransformDependencyImportsEsm.d.ts → transformPackageImports/BabelTransformDependencyImportsEsm.d.ts} +1 -1
  64. package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsEsm.d.ts.map +1 -0
  65. package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsEsm.js +112 -0
  66. package/dist/bin/commands/compileSimplePackage.d.ts +2 -0
  67. package/dist/bin/commands/compileSimplePackage.d.ts.map +1 -0
  68. package/dist/bin/commands/compileSimplePackage.js +51 -0
  69. package/dist/bin/commands/static.js +2 -2
  70. package/dist/bin/index.d.ts.map +1 -1
  71. package/dist/bin/index.js +5 -0
  72. package/dist/build/babel.user.common.config.js +9 -3
  73. package/dist/build/bundle.d.ts +1 -2
  74. package/dist/build/bundle.d.ts.map +1 -1
  75. package/dist/build/bundle.js +7 -4
  76. package/dist/build/compileJavascript.d.ts.map +1 -1
  77. package/dist/build/compileJavascript.js +22 -11
  78. package/dist/build/compilePackages.d.ts +0 -5
  79. package/dist/build/compilePackages.d.ts.map +1 -1
  80. package/dist/build/compilePackages.js +89 -82
  81. package/dist/build/compileUserApp.d.ts.map +1 -1
  82. package/dist/build/copyPackageModulesToPackagesFolder.d.ts.map +1 -1
  83. package/dist/build/copyPackageModulesToPackagesFolder.js +3 -1
  84. package/dist/build/createClientFiles.d.ts.map +1 -1
  85. package/dist/build/createClientFiles.js +43 -52
  86. package/dist/build/createInstanceConfigFile.d.ts +4 -0
  87. package/dist/build/createInstanceConfigFile.d.ts.map +1 -0
  88. package/dist/build/{createAppConfig.js → createInstanceConfigFile.js} +2 -2
  89. package/dist/build/makeBabelUserDevConfig.d.ts.map +1 -1
  90. package/dist/build/makeBabelUserDevConfig.js +3 -2
  91. package/dist/build/makeBabelUserProdConfig.js +3 -2
  92. package/dist/components/Stylesheet.d.ts +1 -0
  93. package/dist/components/Stylesheet.d.ts.map +1 -1
  94. package/dist/components/Stylesheet.js +24 -3
  95. package/dist/createRef.d.ts +4 -2
  96. package/dist/createRef.d.ts.map +1 -1
  97. package/dist/createRef.js +5 -2
  98. package/dist/defaultConfig.d.ts +1 -0
  99. package/dist/defaultConfig.d.ts.map +1 -1
  100. package/dist/defaultConfig.js +1 -0
  101. package/dist/findUserConfig.d.ts.map +1 -1
  102. package/dist/findUserConfig.js +1 -1
  103. package/dist/frameworkConfigSchema.d.ts +188 -0
  104. package/dist/frameworkConfigSchema.d.ts.map +1 -0
  105. package/dist/frameworkConfigSchema.js +65 -0
  106. package/dist/getConfig.d.ts +1 -15
  107. package/dist/getConfig.d.ts.map +1 -1
  108. package/dist/getConfig.js +12 -11
  109. package/dist/getRoutes.d.ts.map +1 -1
  110. package/dist/getRoutes.js +20 -15
  111. package/dist/getUserConfig.d.ts +3 -0
  112. package/dist/getUserConfig.d.ts.map +1 -0
  113. package/dist/getUserConfig.js +25 -0
  114. package/dist/hooks/getCurrentComponent.d.ts +4 -0
  115. package/dist/hooks/getCurrentComponent.d.ts.map +1 -1
  116. package/dist/hooks/getCurrentComponent.js +8 -2
  117. package/dist/hooks/globalType.d.ts +2 -0
  118. package/dist/hooks/globalType.d.ts.map +1 -0
  119. package/dist/hooks/globalType.js +1 -0
  120. package/dist/hooks/useState.d.ts +1 -1
  121. package/dist/hooks/useState.d.ts.map +1 -1
  122. package/dist/hooks/useState.js +5 -5
  123. package/dist/hydrate/hydrate.d.ts +1 -1
  124. package/dist/hydrate/hydrate.d.ts.map +1 -1
  125. package/dist/hydrate/hydrate.js +192 -53
  126. package/dist/jsx-runtime.d.ts +2 -0
  127. package/dist/jsx-runtime.d.ts.map +1 -0
  128. package/dist/jsx-runtime.js +1 -0
  129. package/dist/jsxRuntime.d.ts.map +1 -1
  130. package/dist/jsxRuntime.js +5 -1
  131. package/dist/makeFinalConfig.d.ts.map +1 -1
  132. package/dist/makeInstanceConfigFromFrameworkConfig.d.ts +4 -0
  133. package/dist/makeInstanceConfigFromFrameworkConfig.d.ts.map +1 -0
  134. package/dist/makeInstanceConfigFromFrameworkConfig.js +12 -0
  135. package/dist/render/componentNodeToRenderingTree.d.ts +6 -0
  136. package/dist/render/componentNodeToRenderingTree.d.ts.map +1 -0
  137. package/dist/render/componentNodeToRenderingTree.js +41 -0
  138. package/dist/render/contentToHtml.d.ts +9 -0
  139. package/dist/render/contentToHtml.d.ts.map +1 -0
  140. package/dist/render/contentToHtml.js +44 -0
  141. package/dist/render/contentToHtmlDev.d.ts +9 -0
  142. package/dist/render/contentToHtmlDev.d.ts.map +1 -0
  143. package/dist/render/contentToHtmlDev.js +4 -0
  144. package/dist/render/contentTreeToRenderingTree.d.ts.map +1 -1
  145. package/dist/render/contentTreeToRenderingTree.js +8 -8
  146. package/dist/render/functionComponentNodeToRenderingTree.d.ts.map +1 -1
  147. package/dist/render/functionComponentNodeToRenderingTree.js +4 -2
  148. package/dist/render/instantiateClassComponent.d.ts +2 -2
  149. package/dist/render/instantiateClassComponent.d.ts.map +1 -1
  150. package/dist/render/instantiateClassComponent.js +1 -1
  151. package/dist/render/instantiateComponent.d.ts.map +1 -1
  152. package/dist/render/processProps.d.ts.map +1 -1
  153. package/dist/render/processProps.js +1 -1
  154. package/dist/render/renderingTreeToHtml.d.ts.map +1 -1
  155. package/dist/render/renderingTreeToHtml.js +42 -8
  156. package/dist/render/rootToHtml.d.ts +2 -1
  157. package/dist/render/rootToHtml.d.ts.map +1 -1
  158. package/dist/render/rootToHtml.js +12 -6
  159. package/dist/render/rootToHtmlDev.d.ts +4 -3
  160. package/dist/render/rootToHtmlDev.d.ts.map +1 -1
  161. package/dist/render/rootToHtmlDev.js +2 -2
  162. package/dist/routing/MatchedRoute.d.ts.map +1 -1
  163. package/dist/routing/MatchedRoute.js +0 -3
  164. package/dist/routing/runContentFunction.d.ts +2 -0
  165. package/dist/routing/runContentFunction.d.ts.map +1 -0
  166. package/dist/routing/runContentFunction.js +13 -0
  167. package/dist/staticGen/getAppRoutes.d.ts.map +1 -1
  168. package/dist/staticGen/getAppRoutes.js +7 -6
  169. package/dist/staticGen/staticGen.d.ts.map +1 -1
  170. package/dist/staticGen/staticGen.js +9 -1
  171. package/dist/update/integrateUpdateVdom.d.ts +13 -1
  172. package/dist/update/integrateUpdateVdom.d.ts.map +1 -1
  173. package/dist/update/integrateUpdateVdom.js +112 -49
  174. package/dist/validChildren.d.ts +4 -2
  175. package/dist/validChildren.d.ts.map +1 -1
  176. package/dist/validChildren.js +4 -0
  177. package/package.json +11 -10
  178. package/types/jsx/jsx.d.ts +10 -7
  179. package/dist/babelPlugins/BabelTransformCssImport.d.ts.map +0 -1
  180. package/dist/babelPlugins/BabelTransformDependencyImportsCjs.d.ts.map +0 -1
  181. package/dist/babelPlugins/BabelTransformDependencyImportsEsm.d.ts.map +0 -1
  182. package/dist/babelPlugins/BabelTransformDependencyImportsEsm.js +0 -85
  183. package/dist/build/compileEnv.d.ts +0 -2
  184. package/dist/build/compileEnv.d.ts.map +0 -1
  185. package/dist/build/compileEnv.js +0 -132
  186. package/dist/build/createAppConfig.d.ts +0 -4
  187. package/dist/build/createAppConfig.d.ts.map +0 -1
  188. package/dist/build/webpack.user.prod.config.d.ts +0 -2
  189. package/dist/build/webpack.user.prod.config.d.ts.map +0 -1
  190. package/dist/build/webpack.user.prod.config.js +0 -337
  191. package/dist/createInstanceConfigFromFrameworkConfig.d.ts +0 -4
  192. package/dist/createInstanceConfigFromFrameworkConfig.d.ts.map +0 -1
  193. package/dist/createInstanceConfigFromFrameworkConfig.js +0 -9
  194. package/dist/getAppConfig.d.ts +0 -3
  195. package/dist/getAppConfig.d.ts.map +0 -1
  196. package/dist/getAppConfig.js +0 -12
  197. package/dist/render/componentNodeToRenderingToTree.d.ts +0 -6
  198. package/dist/render/componentNodeToRenderingToTree.d.ts.map +0 -1
  199. package/dist/render/componentNodeToRenderingToTree.js +0 -15
  200. package/dist/render/componentNodeToTree.d.ts +0 -5
  201. package/dist/render/componentNodeToTree.d.ts.map +0 -1
  202. package/dist/render/componentNodeToTree.js +0 -16
@@ -2,12 +2,12 @@ import { getCurrentComponent } from "./getCurrentComponent.js";
2
2
  import { TungstenError, TungstenProductionError } from "../TungstenError.js";
3
3
  import { isDev } from "../isDev.js";
4
4
  const thisHook = 'useState';
5
- // don't need these dumb overloads
6
- // export function useState<T extends undefined>(): [T, (newValue: T) => void]
5
+ // overloads just so TS errs say defaultValue not args
6
+ // export function useState<T extends undefined>(defaultValue?: T): [T, (newValue: T) => void]
7
7
  // export function useState<T>(defaultValue: T): [T, (newValue: T) => void]
8
8
  // export function useState<T>(...args: T extends undefined ? [defaultValue?: T] : [defaultValue: T])
9
9
  // : [T, (newValue: T) => void] {
10
- export function useState(...args) {
10
+ export function useState(...defaultValue) {
11
11
  // what do we do here?
12
12
  const c = getCurrentComponent();
13
13
  if (c === undefined) {
@@ -31,7 +31,7 @@ export function useState(...args) {
31
31
  return [c.state[index], update];
32
32
  } else {
33
33
  //console.log('useState initial run')
34
- c.state[index] = args[0];
35
- return [args[0], update]; // eslint-disable-line no-type-assertion/no-type-assertion -- args[0] can only be undefined if T includes undefined
34
+ c.state[index] = defaultValue[0];
35
+ return [defaultValue[0], update]; // eslint-disable-line no-type-assertion/no-type-assertion -- args[0] can only be undefined if T includes undefined
36
36
  }
37
37
  }
@@ -1,5 +1,5 @@
1
1
  import type { InstanceConfig } from '../Instance/InstanceConfig.js';
2
2
  import type { AppRoutes } from '../routing/AppRoutes.js';
3
3
  import { TungstenBaseComponentType } from '../Components.jsx';
4
- export declare function hydrate(appRoutes: AppRoutes, RootComponent: TungstenBaseComponentType, instanceConfig: InstanceConfig): Promise<void>;
4
+ export declare function hydrate(appRoutes: AppRoutes, RootComponent: TungstenBaseComponentType | null, instanceConfig: InstanceConfig): Promise<void>;
5
5
  //# sourceMappingURL=hydrate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../src/hydrate/hydrate.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAQnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAyBxD,OAAO,EAAE,yBAAyB,EAAoD,MAAM,mBAAmB,CAAA;AAgC/G,wBAAsB,OAAO,CACzB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,yBAAyB,EACxC,cAAc,EAAE,cAAc,iBAyCjC"}
1
+ {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../src/hydrate/hydrate.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAQnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AA0BxD,OAAO,EAAE,yBAAyB,EAAoD,MAAM,mBAAmB,CAAA;AAgC/G,wBAAsB,OAAO,CACzB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,yBAAyB,GAAG,IAAI,EAC/C,cAAc,EAAE,cAAc,iBAsDjC"}
@@ -1,4 +1,6 @@
1
- import { $head, $number, $string, makeRenderedContentNodeNonRendered, makeRenderedContentNodeClassComponent, makeRenderedContentNodeFunctionComponent } from "../RenderedContentNode.js";
1
+ import { integrateElementUpdateVdom } from "../update/integrateUpdateVdom.js";
2
+ //import type { RouteType } from '../routing/RouteType.js'
3
+ import { $number, $string, makeRenderedContentNodeNonRendered, makeRenderedContentNodeClassComponent, makeRenderedContentNodeFunctionComponent } from "../RenderedContentNode.js";
2
4
  import { ContentNodeElementIsHtml, ContentNodeIsHtml, ContentNodeIsComponent, ContentNodeComponentIsClassComponent, ContentNodeIsElement } from "../ContentNode.js";
3
5
  import { IsHTMLElement } from "../DomNodes.js";
4
6
  import { DomPointer } from "../DomPointer.js";
@@ -38,7 +40,7 @@ export async function hydrate(appRoutes, RootComponent, instanceConfig) {
38
40
  //console.log('hydration global data ', __tungsten_global_data__)
39
41
  const location = window.location.pathname;
40
42
  const routes = typeof appRoutes === 'function' ? appRoutes(null) : appRoutes;
41
- const matchedRouteInfo = hydrationRouting(__tungsten_matched_route_info__, location, routes);
43
+ const matchedRouteInfo = hydrationRouting(__tungsten_matched_route_info__, routes);
42
44
  const globalData = __tungsten_global_data__;
43
45
  const {
44
46
  internalStore,
@@ -59,15 +61,30 @@ export async function hydrate(appRoutes, RootComponent, instanceConfig) {
59
61
  if (typeof __tungsten_route_data__ !== 'undefined') {
60
62
  instance.routeData = __tungsten_route_data__;
61
63
  }
62
- //await hydrateRootComponent( instance, RootComponent, new DomPointer(document, 0) ) // dom pointer at doctype?
63
- await hydrateRootComponent(instance, RootComponent, new DomPointer(document, 1), makeDefaultHydrateMeta()); // dom pointer at html?
64
+ const domPointer = new DomPointer(document, 1);
65
+ const meta = makeDefaultHydrateMeta();
66
+ if (RootComponent !== null) {
67
+ await hydrateRootComponent(instance, RootComponent, domPointer, meta); // dom pointer at html?
68
+ // FUTURE: await hydrateNode(content, element, domPointer, instance, meta)
69
+ } else {
70
+ const {
71
+ params,
72
+ content: contentOrContentFunction,
73
+ data
74
+ } = matchedRouteInfo;
75
+ const content = typeof contentOrContentFunction === 'function' ? contentOrContentFunction(data, params, {}, globalData, location) : contentOrContentFunction;
76
+ console.log('hydration content:', content);
77
+ hydrateNode(content, null, domPointer, instance, meta);
78
+ }
64
79
  instance.hydrationComplete = true;
65
80
  //// Can components update while hydrating is still taking place
66
81
  //// -- probably yes
67
82
  //// Can we pause any further update until hydration completes, to retain coherency?
68
83
  //// Or should we set a value on each component that is hydrating to guarantee correctness? seems better
69
84
  }
70
- function hydrationRouting(matchedRouteInfo, location, routes) {
85
+ function hydrationRouting(matchedRouteInfo,
86
+ //location: string,
87
+ routes) {
71
88
  const {
72
89
  key
73
90
  } = matchedRouteInfo;
@@ -92,7 +109,7 @@ async function hydrateRootComponent(instance, RootComponent, domPointer, meta) {
92
109
  routeParams: undefined,
93
110
  routeData: undefined,
94
111
  instance,
95
- parentComponent: null
112
+ parentElement: null
96
113
  });
97
114
  await element.__init();
98
115
  handleRootTitle(element);
@@ -150,42 +167,162 @@ async function hydrateClassComponent(node, parentElement, domPointer, instance,
150
167
  } = node;
151
168
  debug('Component', Component);
152
169
  debug('domPointer', domPointer, domPointer.index);
170
+ const domIndexStart = domPointer.index;
171
+ const openingNode = domPointer.get();
172
+ if (openingNode.nodeType !== Node.COMMENT_NODE) {
173
+ throwError('hydrateFunctionComponent', 'expected to find a comment, but instead found ' + openingNode.toString() + ' type ' + openingNode.nodeType.toString());
174
+ }
175
+ const openingComment = openingNode; // eslint-disable-line no-type-assertion/no-type-assertion
176
+ domPointer.increment();
153
177
  //// InstantiateClassComponent???
154
178
  const element = new Component({
155
179
  props,
156
180
  routeParams,
157
181
  routeData,
158
182
  instance,
159
- parentComponent: parentElement
183
+ parentElement
160
184
  });
161
185
  await element.__init();
162
186
  //// Add to parent childNodes?
163
187
  //const content = await element.__styledContent()
164
- const content = await element.__initialContent();
165
- debug('content', content);
166
- const domIndexStart = domPointer.index;
167
- const openingNode = domPointer.get();
168
- if (openingNode.nodeType !== Node.COMMENT_NODE) {
169
- throwError('hydrateFunctionComponent', 'expected to find a comment, but instead found ' + openingNode.toString() + ' type ' + openingNode.nodeType.toString());
170
- }
171
- const openingComment = openingNode; // eslint-disable-line no-type-assertion/no-type-assertion
172
- domPointer.increment();
173
- const renderedContent = await hydrateNode(content, element, domPointer, instance, meta);
174
- const closingNode = domPointer.get();
175
- if (closingNode.nodeType !== Node.COMMENT_NODE) {
176
- throwError('hydrateFunctionComponent', 'expected to find a comment, but instead found ' + closingNode.toString() + ' type ' + closingNode.nodeType.toString());
188
+ const initialContent = await element.__initialContent();
189
+ debug('content', initialContent);
190
+ const render = Component.render;
191
+ //console.log('render', render)
192
+ //console.log('Component', Component)
193
+ if (render) {
194
+ const placeholderContent = typeof render === 'object' ? render.placeholder : null;
195
+ //console.log('hydrating content', placeholderContent)
196
+ const renderedPlaceholderContent = await hydrateNode(placeholderContent, element, domPointer, instance, meta);
197
+ /*
198
+ 1. Find existing nodes (opening comment, use meta to get closing comment)
199
+ 2. Delete content nodes (between comments)
200
+ 3. Init Element
201
+ 4. Get initial content
202
+ 5. Insert content
203
+ 6. set DomPointer to end?
204
+ 7. Return a rendered content node?
205
+ */
206
+ /*
207
+ 1. Init Element
208
+ 2. Find existing nodes (opening comment, use meta to get closing comment)
209
+ 3. Create DOM Region
210
+ 4. Assign DOM Region to element
211
+ 5. Hydrate the current content to get a renderedContentTree
212
+ 6. Assign current content to element
213
+ 7. Get initial content
214
+ 8. integrateUpdate with new content
215
+ 9. set DomPointer to end?
216
+ 10. Return a rendered content node?
217
+ */
218
+ //const placeholderContent = (typeof render === 'object') ? render.placeholder : null
219
+ //const placeholderContent = await hydrateNodeComponent(node, parentElement, domPointer, instance, meta)
220
+ // replace the server content with the new content
221
+ //renderedContent = await hydrateNode(content, element, domPointer, instance, meta)
222
+ //const renderedContent = await hydrateNode(content, element, domPointer, instance, meta)
223
+ //domPointer.increment(contentLength)
224
+ //console.log('Client Render Pointer El', domPointer.get())
225
+ const closingNode = domPointer.get();
226
+ if (closingNode.nodeType !== Node.COMMENT_NODE) {
227
+ throwError('hydrateFunctionComponent', 'expected to find a comment, but instead found ' + closingNode.toString() + ' type ' + closingNode.nodeType.toString());
228
+ }
229
+ const closingComment = closingNode; // eslint-disable-line no-type-assertion/no-type-assertion
230
+ domPointer.increment();
231
+ const domIndexCount = domPointer.index - domIndexStart;
232
+ debug('DOM region', domPointer.parent, domIndexStart, domIndexCount);
233
+ element.__domRegion = new DomRegion(domPointer.parent, domIndexStart, domIndexCount);
234
+ debug('el dom region', element.constructor.name, element.__domRegion);
235
+ if (element.__domRegion.lastElement) debug('last el children', element.__domRegion.lastElement.childNodes);
236
+ //console.log('hydrated', element.constructor.name, 'with content', renderedContent)
237
+ element.__currentContent = renderedPlaceholderContent;
238
+ //console.log('__domRegion', element.__domRegion)
239
+ //console.log('__domRegion clone', { ...element.__domRegion })
240
+ //console.log('__currentContent', element.__currentContent)
241
+ //console.log('__currentContent clone', { ...element.__currentContent })
242
+ //const initialClientContent = await element.__initialContent()
243
+ //console.log('initialClientContent', initialContent)
244
+ const updateResult = await integrateElementUpdateVdom(element, initialContent);
245
+ // dom region should still be valid?
246
+ //element.__domRegion
247
+ element.__currentContent = updateResult.renderedContent;
248
+ // const renderedNode = renderClassComponent({
249
+ // parent: parentElement,
250
+ // instance,
251
+ // node,
252
+ // element,
253
+ // content: initialContent,
254
+ // domPointer,
255
+ // openingComment,
256
+ // closingComment
257
+ // })
258
+ element.__didHydrate();
259
+ return makeRenderedContentNodeClassComponent(node, element, openingComment, closingComment);
260
+ } else {
261
+ const renderedContent = await hydrateNode(initialContent, element, domPointer, instance, meta);
262
+ const closingNode = domPointer.get();
263
+ if (closingNode.nodeType !== Node.COMMENT_NODE) {
264
+ throwError('hydrateFunctionComponent', 'expected to find a comment, but instead found ' + closingNode.toString() + ' type ' + closingNode.nodeType.toString());
265
+ }
266
+ const closingComment = closingNode; // eslint-disable-line no-type-assertion/no-type-assertion
267
+ domPointer.increment();
268
+ const domIndexCount = domPointer.index - domIndexStart;
269
+ debug('DOM region', domPointer.parent, domIndexStart, domIndexCount);
270
+ element.__domRegion = new DomRegion(domPointer.parent, domIndexStart, domIndexCount);
271
+ debug('el dom region', element.constructor.name, element.__domRegion);
272
+ if (element.__domRegion.lastElement) debug('last el children', element.__domRegion.lastElement.childNodes);
273
+ //console.log('hydrated', element.constructor.name, 'with content', renderedContent)
274
+ element.__currentContent = renderedContent;
275
+ element.__didHydrate();
276
+ return makeRenderedContentNodeClassComponent(node, element, openingComment, closingComment);
177
277
  }
178
- const closingComment = closingNode; // eslint-disable-line no-type-assertion/no-type-assertion
179
- domPointer.increment();
180
- const domIndexCount = domPointer.index - domIndexStart;
181
- debug('DOM region', domPointer.parent, domIndexStart, domIndexCount);
182
- element.__domRegion = new DomRegion(domPointer.parent, domIndexStart, domIndexCount);
183
- debug('el dom region', element.constructor.name, element.__domRegion);
184
- if (element.__domRegion.lastElement) debug('last el children', element.__domRegion.lastElement.childNodes);
185
- //console.log('hydrated', element.constructor.name, 'with content', renderedContent)
186
- element.__currentContent = renderedContent;
187
- element.__didHydrate();
188
- return makeRenderedContentNodeClassComponent(node, element, openingComment, closingComment);
278
+ }
279
+ async function renderClassComponent({
280
+ node,
281
+ element,
282
+ domPointer,
283
+ openingComment,
284
+ closingComment
285
+ }) {
286
+ //console.log('-updateClassComponent', newNode)
287
+ //const element = node.element
288
+ element.props = node[$props];
289
+ debug('rendering client class component', node);
290
+ //console.log('update class component', newNode)
291
+ //console.log('old element', element)
292
+ //console.log('domPointer before updating comp', domPointer)
293
+ //console.log('domPointer children', [...domPointer.parent.childNodes])
294
+ //throwError('','')
295
+ const updateResult = await element.__update(); // this going to run code on a Tungsten Base Component class
296
+ // which is going to call back to integrateUpdateVdom in this file
297
+ domPointer.increment(updateResult.nodesLength); // bump the dom pointer index forward by the number of nodes
298
+ // within that element's content
299
+ element.__didUpdate();
300
+ return {
301
+ ...node,
302
+ element,
303
+ openingComment,
304
+ closingComment
305
+ };
306
+ }
307
+ async function renderFunctionComponent({
308
+ node,
309
+ standIn,
310
+ domPointer,
311
+ openingComment,
312
+ closingComment
313
+ }) {
314
+ // this func does not seem to be updating the dom pointer index
315
+ //console.log('updateFunctionComponent')
316
+ //const standIn = node.element
317
+ standIn.props = node[$props];
318
+ const updateResult = await standIn.update();
319
+ domPointer.increment(updateResult.nodesLength); // bump the dom pointer index forward by the number of nodes within that element's content
320
+ return {
321
+ ...node,
322
+ element: standIn,
323
+ openingComment,
324
+ closingComment
325
+ };
189
326
  }
190
327
  async function hydrateFunctionComponent(node, parentElement, domPointer, instance, meta) {
191
328
  debug('----\nhydrateComponent');
@@ -320,8 +457,9 @@ async function hydrateNodeSingle(node, parentElement, domPointer, instance, meta
320
457
  instance.persistentHeadChildren = persistentHeadChildren;
321
458
  debug('head node - skipping, because we add a lot to this during initial render, breaking matching');
322
459
  domPointer.increment();
460
+ //return { [$type]: $head, domNode: node as HTMLElement } // eslint-disable-line no-type-assertion/no-type-assertion
323
461
  return {
324
- [$type]: $head,
462
+ [$type]: 'head',
325
463
  domNode: node
326
464
  }; // eslint-disable-line no-type-assertion/no-type-assertion
327
465
  }
@@ -360,6 +498,12 @@ async function hydrateNodeSingle(node, parentElement, domPointer, instance, meta
360
498
  debug('hydarating atts');
361
499
  hydrateAttributes(node, domNode);
362
500
  //!!! node.domElement = domNode
501
+ // look up any refs
502
+ //const props = node[$props]
503
+ //const ref = node[$props].ref
504
+ if ('ref' in node[$props]) {
505
+ node[$props].ref.current = domNode;
506
+ }
363
507
  debug('valid children', validChildren(node[$props].children), node[$props].children);
364
508
  const children = node[$props].children;
365
509
  let renderedChildren = $contentNull;
@@ -379,27 +523,7 @@ async function hydrateNodeSingle(node, parentElement, domPointer, instance, meta
379
523
  };
380
524
  } else if (ContentNodeIsComponent(node)) {
381
525
  debug('comp');
382
- if (ContentNodeComponentIsClassComponent(node)) {
383
- node;
384
- /// Component?
385
- debug('found a class component while trying to hydrate');
386
- const renderedNode = await hydrateClassComponent(node, parentElement, domPointer, instance, meta);
387
- return renderedNode;
388
- // return {
389
- // ...node,
390
- // element
391
- // }
392
- } else {
393
- node;
394
- /// Component?
395
- debug('found a function component while trying to hydrate');
396
- const renderedNode = await hydrateFunctionComponent(node, parentElement, domPointer, instance, meta);
397
- return renderedNode;
398
- // return {
399
- // ...node,
400
- // element
401
- // }
402
- }
526
+ return hydrateNodeComponent(node, parentElement, domPointer, instance, meta);
403
527
  }
404
528
  // confirm that this code is not reached
405
529
  const n = node; // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -408,6 +532,21 @@ async function hydrateNodeSingle(node, parentElement, domPointer, instance, meta
408
532
  //return makeRenderedContentNodeNonRendered()
409
533
  }
410
534
  //// !!!! We need to handle bind here (or somewhere)
535
+ async function hydrateNodeComponent(node, parentElement, domPointer, instance, meta) {
536
+ if (ContentNodeComponentIsClassComponent(node)) {
537
+ node;
538
+ /// Component?
539
+ debug('found a class component while trying to hydrate');
540
+ const renderedNode = await hydrateClassComponent(node, parentElement, domPointer, instance, meta);
541
+ return renderedNode;
542
+ } else {
543
+ node;
544
+ /// Component?
545
+ debug('found a function component while trying to hydrate');
546
+ const renderedNode = await hydrateFunctionComponent(node, parentElement, domPointer, instance, meta);
547
+ return renderedNode;
548
+ }
549
+ }
411
550
  // export type HTMLBindableElement = HTMLButtonElement | HTMLDataElement | HTMLInputElement | HTMLLIElement
412
551
  // | HTMLMeterElement | HTMLOptionElement | HTMLParamElement | HTMLProgressElement | HTMLSelectElement | HTMLTextAreaElement
413
552
  function hydrateAttributes(node, domNode) {
@@ -0,0 +1,2 @@
1
+ export { jsx, jsxs, Fragment, type JsxNodeType } from './jsxRuntime.js';
2
+ //# sourceMappingURL=jsx-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.d.ts","sourceRoot":"","sources":["../src/jsx-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1 @@
1
+ export { jsx, jsxs, Fragment } from "./jsxRuntime.js";
@@ -1 +1 @@
1
- {"version":3,"file":"jsxRuntime.d.ts","sourceRoot":"","sources":["../src/jsxRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,KAAK,6BAA6B,EAAoD,MAAM,kBAAkB,CAAA;AACvH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAM9C,cAAc,yBAAyB,CAAA;AAEvC,eAAO,MAAM,QAAQ,EAAG,KAAe,CAAA;AAEvC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,QAAQ,CAAA;AAkBrE,wBAAgB,GAAG,CACf,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAChE,KAAK,EAAE,6BAA6B,EACpC,GAAG,EAAE,OAAO,GACb,WAAW,CAgEb;AAID,eAAO,MAAM,IAAI,YAAM,CAAA"}
1
+ {"version":3,"file":"jsxRuntime.d.ts","sourceRoot":"","sources":["../src/jsxRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,KAAK,6BAA6B,EAAoD,MAAM,kBAAkB,CAAA;AACvH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAM9C,cAAc,yBAAyB,CAAA;AAEvC,eAAO,MAAM,QAAQ,EAAG,KAAe,CAAA;AAEvC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,QAAQ,CAAA;AAkBrE,wBAAgB,GAAG,CACf,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAChE,KAAK,EAAE,6BAA6B,EACpC,GAAG,EAAE,OAAO,GACb,WAAW,CAyEb;AAID,eAAO,MAAM,IAAI,YAAM,CAAA"}
@@ -18,6 +18,10 @@ function ComponentIsClassComponent(c) {
18
18
  }
19
19
  // jsx func to turn a jsx element into a tree node
20
20
  export function jsx(type, props, key) {
21
+ console.log('--jsx--');
22
+ console.log('type', type);
23
+ console.log('type', props);
24
+ console.log('key', key);
21
25
  // merge together class and className, into className
22
26
  // and convert any arrays to strings in the process
23
27
  if (Array.isArray(props.className)) props.className = classNameArrayToString(props.className);
@@ -78,7 +82,7 @@ export function jsx(type, props, key) {
78
82
  if (typeof type === 'number') {
79
83
  return String(type);
80
84
  }
81
- throw new TungstenError(`${packageNameCapitalized} JSX Runtime error: did not recognize element, expected a string, function, class (type function), or fragment. Received type ${typeof type}: ${type}`);
85
+ throw new TungstenError(`${packageNameCapitalized} JSX Runtime error: did not recognize element` + `, expected a string, function, class (type function), or fragment.` + ` Received type ${typeof type}: ${type}`);
82
86
  }
83
87
  // jsxs is used when children is an array instead of a single object
84
88
  // just use the same function for both
@@ -1 +1 @@
1
- {"version":3,"file":"makeFinalConfig.d.ts","sourceRoot":"","sources":["../src/makeFinalConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAGpF,wBAAgB,eAAe,CAAC,UAAU,EAAE,eAAe,GAAG,uBAAuB,CAYpF"}
1
+ {"version":3,"file":"makeFinalConfig.d.ts","sourceRoot":"","sources":["../src/makeFinalConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAGpF,wBAAgB,eAAe,CAAC,UAAU,EAAE,eAAe,GAAG,uBAAuB,CAWpF"}
@@ -0,0 +1,4 @@
1
+ import type { InstanceConfig } from './Instance/InstanceConfig.js';
2
+ import type { FrameworkConfigComplete } from './FrameworkConfig.js';
3
+ export declare function makeInstanceConfigFromFrameworkConfig(frameworkConfig: FrameworkConfigComplete, dev?: boolean): InstanceConfig;
4
+ //# sourceMappingURL=makeInstanceConfigFromFrameworkConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeInstanceConfigFromFrameworkConfig.d.ts","sourceRoot":"","sources":["../src/makeInstanceConfigFromFrameworkConfig.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAEnE,wBAAgB,qCAAqC,CACjD,eAAe,EAAE,uBAAuB,EAAE,GAAG,GAAE,OAAe,GAC/D,cAAc,CAUhB"}
@@ -0,0 +1,12 @@
1
+ import { isProd } from "./isProd.js";
2
+ export function makeInstanceConfigFromFrameworkConfig(frameworkConfig, dev = false) {
3
+ const c = {
4
+ prod: isProd,
5
+ useRootComponent: frameworkConfig.useRootComponent,
6
+ clientSideNav: frameworkConfig.clientSideNav,
7
+ siteBasePath: dev ? '' : frameworkConfig.siteBasePath,
8
+ staticSite: frameworkConfig.staticSite
9
+ };
10
+ if ('sourceDir' in frameworkConfig) c.sourceDir = frameworkConfig.sourceDir;
11
+ return c;
12
+ }
@@ -0,0 +1,6 @@
1
+ import type { Instance } from '../Instance/Instance.js';
2
+ import { type RenderingNodeComponent } from '../RenderingNode.js';
3
+ import { type ContentNodeComponent } from '../ContentNode.js';
4
+ import { AnyComponent } from '../AnyComponent.js';
5
+ export declare function componentNodeToRenderingTree(componentNode: ContentNodeComponent, parentComponent: AnyComponent | null, instance: Instance, noEscape: boolean): Promise<RenderingNodeComponent>;
6
+ //# sourceMappingURL=componentNodeToRenderingTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentNodeToRenderingTree.d.ts","sourceRoot":"","sources":["../../src/render/componentNodeToRenderingTree.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EACH,KAAK,sBAAsB,EAG9B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAqD,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAGhH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAKjD,wBAAsB,4BAA4B,CAC9C,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,YAAY,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,GACjH,OAAO,CAAC,sBAAsB,CAAC,CA6CjC"}
@@ -0,0 +1,41 @@
1
+ import { makeRenderingNodeClassComponentFromContentNodeClassComponent, makeRenderingNodeFunctionComponentFromContentNodeFunctionComponent } from "../RenderingNode.js";
2
+ import { ContentNodeComponentIsClassComponent } from "../ContentNode.js";
3
+ import { classComponentNodeToRenderingTree } from "./classComponentNodeToRenderingTree.js";
4
+ import { functionComponentNodeToRenderingTree } from "./functionComponentNodeToRenderingTree.js";
5
+ import { TungstenError } from "../TungstenError.js";
6
+ import { $type } from "../contentNodeSymbols.js";
7
+ import { contentTreeToRenderingTree } from "./contentTreeToRenderingTree.js";
8
+ export async function componentNodeToRenderingTree(componentNode, parentComponent, instance, noEscape) {
9
+ //console.log('type', componentNode[$type])
10
+ const render = componentNode[$type].render;
11
+ //console.log('render', render)
12
+ if (render) {
13
+ let location;
14
+ let placeholder = null;
15
+ if (typeof render === 'string') {
16
+ location = render;
17
+ } else {
18
+ location = render.location;
19
+ if (typeof render === 'object' && 'placeholder') {
20
+ placeholder = render.placeholder;
21
+ }
22
+ }
23
+ if (location === 'client') {
24
+ const placeholderTree = await contentTreeToRenderingTree(placeholder, parentComponent, instance, noEscape);
25
+ if (ContentNodeComponentIsClassComponent(componentNode)) {
26
+ return makeRenderingNodeClassComponentFromContentNodeClassComponent(componentNode, null, placeholderTree, true);
27
+ } else {
28
+ return makeRenderingNodeFunctionComponentFromContentNodeFunctionComponent(componentNode, null, placeholderTree, true);
29
+ }
30
+ }
31
+ }
32
+ //console.log('componentRenderToTree component', component)
33
+ if (ContentNodeComponentIsClassComponent(componentNode)) {
34
+ //console.log('class component')
35
+ return await classComponentNodeToRenderingTree(componentNode, parentComponent, instance, noEscape);
36
+ } else {
37
+ //console.log('function component')
38
+ return await functionComponentNodeToRenderingTree(componentNode, parentComponent, instance, noEscape);
39
+ }
40
+ throw new TungstenError(`Error, component passed to componentRenderToTree() was not a valid component`);
41
+ }
@@ -0,0 +1,9 @@
1
+ import type { CompilationInfo } from '../build/CompilationInfo.js';
2
+ import type { ImportAliases } from '../build/ImportAliases.js';
3
+ import type { SiteBasePath } from './HeadData.js';
4
+ import type { ContentNode } from '../ContentNode.js';
5
+ import type { Instance } from '../Instance/Instance.js';
6
+ import { TungstenEnvOrUndefined } from 'tungsten/env/types.js';
7
+ import { FrameworkConfigComplete } from 'tungsten/FrameworkConfig.js';
8
+ export declare function contentToHtml(compilationInfo: CompilationInfo, clientImportAliases: ImportAliases, content: ContentNode, instance: Instance, config: FrameworkConfigComplete, siteBasePathOverride: SiteBasePath, tungstenPublicEnv?: TungstenEnvOrUndefined, dev?: boolean): Promise<string>;
9
+ //# sourceMappingURL=contentToHtml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contentToHtml.d.ts","sourceRoot":"","sources":["../../src/render/contentToHtml.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAMvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAI9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAGrE,wBAAsB,aAAa,CAC/B,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,aAAa,EACpE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EACxC,MAAM,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,YAAY,EACnE,iBAAiB,GAAE,sBAAkC,EAAE,GAAG,UAAQ,GACnE,OAAO,CAAC,MAAM,CAAC,CAoDjB"}
@@ -0,0 +1,44 @@
1
+ import { renderingNodeToHtml } from "./renderingTreeToHtml.js";
2
+ import { TungstenError } from "../TungstenError.js";
3
+ import { RenderingNodeIsElement } from "../RenderingNode.js";
4
+ import { contentTreeToRenderingTree } from "./contentTreeToRenderingTree.js";
5
+ import { cliWarn } from 'tungsten/cliOutput.js';
6
+ export async function contentToHtml(compilationInfo, clientImportAliases, content, instance, config, siteBasePathOverride, tungstenPublicEnv = undefined, dev = false) {
7
+ // const rootNode = { // eslint-disable-line no-type-assertion/no-type-assertion
8
+ // [$type]: RootComponentClass, // TypeScript needs some help to understand that { type: AnyComponentType }
9
+ // [$props]: {} // is equivalent to { type: ClassComponentTypeAny } | { type: FunctionComponentTypeAny } (type names simplified here)
10
+ // } as ContentNodeComponent
11
+ const tree = await contentTreeToRenderingTree(content, null, instance, false);
12
+ //console.log('tree', tree)
13
+ if (config.useRootComponent && !RenderingNodeIsElement(tree)) {
14
+ throw new TungstenError(`Root content was not a ContentNodeElement type. Ensure that your root node returns valid content.`);
15
+ }
16
+ // // render tree to html string
17
+ const headData = {
18
+ found: false,
19
+ instance,
20
+ importAliases: compilationInfo.importAliases,
21
+ clientImportAliases,
22
+ compilationLocation: compilationInfo.location,
23
+ dev,
24
+ tungstenPublicEnv,
25
+ siteBasePath: siteBasePathOverride
26
+ };
27
+ //console.log('rendering tree', inspect(tree, { depth: 99 } ))
28
+ let html = await renderingNodeToHtml(tree, false, headData, null);
29
+ if (!headData.found && !config.suppressNoHeadWarning) {
30
+ cliWarn(`Found no <head> while rendering path '${instance.location}'. This is probably a mistake`);
31
+ }
32
+ //writeFileSync('__debug.html', html)
33
+ //console.log('rootToHtml html', html)
34
+ // insert the title if one was set during processing
35
+ if (instance.title) {
36
+ if (html.includes('<title>')) {
37
+ html = html.replace(/(?:<title>)(.*?)(?:<\/title>)/, `<title>${instance.title}</title>`);
38
+ } else {
39
+ html = html.replace('</head>', `</head><title>${instance.title}</title>`);
40
+ }
41
+ }
42
+ html = '<!DOCTYPE html>' + html;
43
+ return html;
44
+ }
@@ -0,0 +1,9 @@
1
+ import type { FrameworkConfigComplete } from '../FrameworkConfig.js';
2
+ import type { CompilationInfo } from '../build/CompilationInfo.js';
3
+ import type { ImportAliases } from '../build/ImportAliases.js';
4
+ import type { ContentNode } from '../ContentNode.js';
5
+ import type { Instance } from '../Instance/Instance.js';
6
+ import { SiteBasePath } from './HeadData.js';
7
+ import { TungstenEnvOrUndefined } from 'tungsten/env/types.js';
8
+ export declare function contentToHtmlDev(compilationInfo: CompilationInfo, clientImportAliases: ImportAliases, content: ContentNode, instance: Instance, config: FrameworkConfigComplete, tungstenPrivateEnv: TungstenEnvOrUndefined, siteBasePathOverride: SiteBasePath): Promise<string>;
9
+ //# sourceMappingURL=contentToHtmlDev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contentToHtmlDev.d.ts","sourceRoot":"","sources":["../../src/render/contentToHtmlDev.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAI,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,wBAAsB,gBAAgB,CAClC,eAAe,EAAE,eAAe,EAAG,mBAAmB,EAAE,aAAa,EACrE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,uBAAuB,EACzE,kBAAkB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,YAAY,mBAKjF"}
@@ -0,0 +1,4 @@
1
+ import { contentToHtml } from "./contentToHtml.js";
2
+ export async function contentToHtmlDev(compilationInfo, clientImportAliases, content, instance, config, tungstenPrivateEnv, siteBasePathOverride) {
3
+ return await contentToHtml(compilationInfo, clientImportAliases, content, instance, config, siteBasePathOverride, tungstenPrivateEnv, true);
4
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"contentTreeToRenderingTree.d.ts","sourceRoot":"","sources":["../../src/render/contentTreeToRenderingTree.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EACH,KAAK,WAAW,EACnB,MAAM,mBAAmB,CAAA;AAU1B,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,GACzI,OAAO,CAAC,aAAa,CAAC,CAuE3B"}
1
+ {"version":3,"file":"contentTreeToRenderingTree.d.ts","sourceRoot":"","sources":["../../src/render/contentTreeToRenderingTree.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EACH,KAAK,WAAW,EAEnB,MAAM,mBAAmB,CAAA;AAS1B,wBAAsB,0BAA0B,CAC5C,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAC9F,OAAO,CAAC,aAAa,CAAC,CA2EzB"}
@@ -1,11 +1,10 @@
1
- import { ContentNodeIsLiteral, ContentNodeElementIsComponent, ContentNodeElementIsHtml, ContentNodeComponentIsClassComponent } from "../ContentNode.js";
1
+ import { ContentNodeIsLiteral, ContentNodeElementIsComponent, ContentNodeElementIsHtml } from "../ContentNode.js";
2
2
  import { validChildren } from "../validChildren.js";
3
3
  import { debug } from "./debug.js";
4
4
  import { throwError } from "../throwError.js";
5
5
  import { $key, $props, $type } from "../contentNodeSymbols.js";
6
- import { classComponentNodeToRenderingTree } from "./classComponentNodeToRenderingTree.js";
7
- import { functionComponentNodeToRenderingTree } from "./functionComponentNodeToRenderingTree.js";
8
6
  import { processHtmlNode } from "./processHtmlNode.js";
7
+ import { componentNodeToRenderingTree } from "./componentNodeToRenderingTree.js";
9
8
  export async function contentTreeToRenderingTree(node, parentComponent, instance, noEscape) {
10
9
  //console.log('completeTree node', node)
11
10
  debug('completeTree node', node);
@@ -58,11 +57,12 @@ export async function contentTreeToRenderingTree(node, parentComponent, instance
58
57
  //renderingNode node
59
58
  }
60
59
  if (ContentNodeElementIsComponent(node)) {
61
- if (ContentNodeComponentIsClassComponent(node)) {
62
- return classComponentNodeToRenderingTree(node, parentComponent, instance, noEscape);
63
- } else {
64
- return functionComponentNodeToRenderingTree(node, parentComponent, instance, noEscape);
65
- }
60
+ return componentNodeToRenderingTree(node, parentComponent, instance, noEscape);
61
+ // if (ContentNodeComponentIsClassComponent(node)) {
62
+ // return classComponentNodeToRenderingTree(node, parentComponent, instance, noEscape)
63
+ // } else {
64
+ // return functionComponentNodeToRenderingTree(node, parentComponent, instance, noEscape)
65
+ // }
66
66
  }
67
67
  const n = node; // eslint-disable-line @typescript-eslint/no-unused-vars
68
68
  throwError('render -> completeTree()', `node returned from a component did not match expected format.` + ` Node: ${JSON.stringify(node)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"functionComponentNodeToRenderingTree.d.ts","sourceRoot":"","sources":["../../src/render/functionComponentNodeToRenderingTree.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAsE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAGrI,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAGhE,wBAAsB,oCAAoC,CACtD,WAAW,EAAE,4BAA4B,EACzC,eAAe,EAAE,YAAY,GAAG,IAAI,EACpC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,GACtC,OAAO,CAAC,sBAAsB,CAAC,CAajC"}
1
+ {"version":3,"file":"functionComponentNodeToRenderingTree.d.ts","sourceRoot":"","sources":["../../src/render/functionComponentNodeToRenderingTree.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EACH,KAAK,sBAAsB,EAE9B,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAKhE,wBAAsB,oCAAoC,CACtD,WAAW,EAAE,4BAA4B,EACzC,eAAe,EAAE,YAAY,GAAG,IAAI,EACpC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,GACtC,OAAO,CAAC,sBAAsB,CAAC,CAajC"}
@@ -2,12 +2,14 @@ import { makeRenderingNodeFunctionComponentFromContentNodeFunctionComponent } fr
2
2
  import { getStyledContentFromFunctionComponent } from "../getStyledContentFromFunctionComponent.js";
3
3
  import { contentTreeToRenderingTree } from "./contentTreeToRenderingTree.js";
4
4
  import { instantiateFunctionComponent } from "./instantiateFunctionComponent.js";
5
+ import { setCurrentComponent } from 'tungsten/hooks/setCurrentComponent.js';
6
+ import { clearCurrentComponent } from 'tungsten/hooks/clearCurrentComponent.js';
5
7
  export async function functionComponentNodeToRenderingTree(contentNode, parentComponent, instance, noEscape) {
6
8
  const standIn = instantiateFunctionComponent(contentNode, parentComponent, instance);
7
9
  //console.log('functionComponentToTree')
8
- // MC? setCurrentComponent(standIn)
10
+ setCurrentComponent(standIn);
9
11
  const content = await getStyledContentFromFunctionComponent(standIn);
10
12
  //const content = await getStyledContentFromFunctionComponent(standIn.func, standIn.props)
11
- // MC? clearCurrentComponent()
13
+ clearCurrentComponent();
12
14
  return makeRenderingNodeFunctionComponentFromContentNodeFunctionComponent(contentNode, standIn, await contentTreeToRenderingTree(content, parentComponent, instance, noEscape));
13
15
  }