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.
- package/dist/AnyComponent.d.ts.map +1 -1
- package/dist/ComponentInstance.d.ts +1 -2
- package/dist/ComponentInstance.d.ts.map +1 -1
- package/dist/ComponentInstance.js +4 -1
- package/dist/ComponentRenderInfo.type.d.ts +6 -0
- package/dist/ComponentRenderInfo.type.d.ts.map +1 -0
- package/dist/ComponentRenderInfo.type.js +1 -0
- package/dist/Components.d.ts +4 -2
- package/dist/Components.d.ts.map +1 -1
- package/dist/Components.js +10 -4
- package/dist/ContentNode.d.ts +3 -1
- package/dist/ContentNode.d.ts.map +1 -1
- package/dist/ContentNode.js +1 -0
- package/dist/Framework.d.ts +1 -1
- package/dist/Framework.d.ts.map +1 -1
- package/dist/Framework.js +42 -25
- package/dist/FrameworkConfig.d.ts +20 -4
- package/dist/FrameworkConfig.d.ts.map +1 -1
- package/dist/FunctionComponent.d.ts +2 -0
- package/dist/FunctionComponent.d.ts.map +1 -1
- package/dist/FunctionComponentStandIn.d.ts +4 -4
- package/dist/FunctionComponentStandIn.d.ts.map +1 -1
- package/dist/FunctionComponentStandIn.js +4 -2
- package/dist/Instance/InstanceConfig.d.ts +2 -0
- package/dist/Instance/InstanceConfig.d.ts.map +1 -1
- package/dist/RenderedContentNode.d.ts +1 -1
- package/dist/RenderedContentNode.d.ts.map +1 -1
- package/dist/RenderedContentNode.js +2 -2
- package/dist/RenderingNode.d.ts +23 -8
- package/dist/RenderingNode.d.ts.map +1 -1
- package/dist/RenderingNode.js +39 -8
- package/dist/Servers/DevServer.d.ts.map +1 -1
- package/dist/Servers/DevServer.js +74 -25
- package/dist/Servers/ProdServer.d.ts +5 -1
- package/dist/Servers/ProdServer.d.ts.map +1 -1
- package/dist/Servers/ProdServer.js +49 -33
- package/dist/TungstenElement.d.ts +3 -0
- package/dist/TungstenElement.d.ts.map +1 -0
- package/dist/TungstenElement.js +1 -0
- package/dist/_client/client.d.ts +4 -1
- package/dist/_client/client.d.ts.map +1 -1
- package/dist/_client/client.js +16 -9
- package/dist/babelPlugins/BabelTransformCjsToEsm.d.ts +1 -1
- package/dist/babelPlugins/BabelTransformCjsToEsm.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformCjsToFunction.d.ts +1 -1
- package/dist/babelPlugins/BabelTransformCjsToFunction.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformCjsToFunction2.d.ts +1 -1
- package/dist/babelPlugins/BabelTransformCjsToFunction2.d.ts.map +1 -1
- package/dist/babelPlugins/{BabelTransformCssImport.d.ts → BabelTransformCssImports.d.ts} +3 -2
- package/dist/babelPlugins/BabelTransformCssImports.d.ts.map +1 -0
- package/dist/babelPlugins/{BabelTransformCssImport.js → BabelTransformCssImports.js} +27 -5
- package/dist/babelPlugins/BabelTransformPackageImports.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformPackageImports.js +75 -37
- package/dist/babelPlugins/BabelTransformRemoveServerBlocks.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformRemoveServerBlocks.js +5 -0
- package/dist/babelPlugins/BabelTransformRemoveServerCode.d.ts +2 -0
- package/dist/babelPlugins/BabelTransformRemoveServerCode.d.ts.map +1 -0
- package/dist/babelPlugins/BabelTransformRemoveServerCode.js +1 -0
- package/dist/babelPlugins/fixImportsInSassErrorMessage.d.ts.map +1 -1
- package/dist/babelPlugins/{BabelTransformDependencyImportsCjs.d.ts → transformPackageImports/BabelTransformDependencyImportsCjs.d.ts} +1 -1
- package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsCjs.d.ts.map +1 -0
- package/dist/babelPlugins/{BabelTransformDependencyImportsCjs.js → transformPackageImports/BabelTransformDependencyImportsCjs.js} +12 -3
- package/dist/babelPlugins/{BabelTransformDependencyImportsEsm.d.ts → transformPackageImports/BabelTransformDependencyImportsEsm.d.ts} +1 -1
- package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsEsm.d.ts.map +1 -0
- package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsEsm.js +112 -0
- package/dist/bin/commands/compileSimplePackage.d.ts +2 -0
- package/dist/bin/commands/compileSimplePackage.d.ts.map +1 -0
- package/dist/bin/commands/compileSimplePackage.js +51 -0
- package/dist/bin/commands/static.js +2 -2
- package/dist/bin/index.d.ts.map +1 -1
- package/dist/bin/index.js +5 -0
- package/dist/build/babel.user.common.config.js +9 -3
- package/dist/build/bundle.d.ts +1 -2
- package/dist/build/bundle.d.ts.map +1 -1
- package/dist/build/bundle.js +7 -4
- package/dist/build/compileJavascript.d.ts.map +1 -1
- package/dist/build/compileJavascript.js +22 -11
- package/dist/build/compilePackages.d.ts +0 -5
- package/dist/build/compilePackages.d.ts.map +1 -1
- package/dist/build/compilePackages.js +89 -82
- package/dist/build/compileUserApp.d.ts.map +1 -1
- package/dist/build/copyPackageModulesToPackagesFolder.d.ts.map +1 -1
- package/dist/build/copyPackageModulesToPackagesFolder.js +3 -1
- package/dist/build/createClientFiles.d.ts.map +1 -1
- package/dist/build/createClientFiles.js +43 -52
- package/dist/build/createInstanceConfigFile.d.ts +4 -0
- package/dist/build/createInstanceConfigFile.d.ts.map +1 -0
- package/dist/build/{createAppConfig.js → createInstanceConfigFile.js} +2 -2
- package/dist/build/makeBabelUserDevConfig.d.ts.map +1 -1
- package/dist/build/makeBabelUserDevConfig.js +3 -2
- package/dist/build/makeBabelUserProdConfig.js +3 -2
- package/dist/components/Stylesheet.d.ts +1 -0
- package/dist/components/Stylesheet.d.ts.map +1 -1
- package/dist/components/Stylesheet.js +24 -3
- package/dist/createRef.d.ts +4 -2
- package/dist/createRef.d.ts.map +1 -1
- package/dist/createRef.js +5 -2
- package/dist/defaultConfig.d.ts +1 -0
- package/dist/defaultConfig.d.ts.map +1 -1
- package/dist/defaultConfig.js +1 -0
- package/dist/findUserConfig.d.ts.map +1 -1
- package/dist/findUserConfig.js +1 -1
- package/dist/frameworkConfigSchema.d.ts +188 -0
- package/dist/frameworkConfigSchema.d.ts.map +1 -0
- package/dist/frameworkConfigSchema.js +65 -0
- package/dist/getConfig.d.ts +1 -15
- package/dist/getConfig.d.ts.map +1 -1
- package/dist/getConfig.js +12 -11
- package/dist/getRoutes.d.ts.map +1 -1
- package/dist/getRoutes.js +20 -15
- package/dist/getUserConfig.d.ts +3 -0
- package/dist/getUserConfig.d.ts.map +1 -0
- package/dist/getUserConfig.js +25 -0
- package/dist/hooks/getCurrentComponent.d.ts +4 -0
- package/dist/hooks/getCurrentComponent.d.ts.map +1 -1
- package/dist/hooks/getCurrentComponent.js +8 -2
- package/dist/hooks/globalType.d.ts +2 -0
- package/dist/hooks/globalType.d.ts.map +1 -0
- package/dist/hooks/globalType.js +1 -0
- package/dist/hooks/useState.d.ts +1 -1
- package/dist/hooks/useState.d.ts.map +1 -1
- package/dist/hooks/useState.js +5 -5
- package/dist/hydrate/hydrate.d.ts +1 -1
- package/dist/hydrate/hydrate.d.ts.map +1 -1
- package/dist/hydrate/hydrate.js +192 -53
- package/dist/jsx-runtime.d.ts +2 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +1 -0
- package/dist/jsxRuntime.d.ts.map +1 -1
- package/dist/jsxRuntime.js +5 -1
- package/dist/makeFinalConfig.d.ts.map +1 -1
- package/dist/makeInstanceConfigFromFrameworkConfig.d.ts +4 -0
- package/dist/makeInstanceConfigFromFrameworkConfig.d.ts.map +1 -0
- package/dist/makeInstanceConfigFromFrameworkConfig.js +12 -0
- package/dist/render/componentNodeToRenderingTree.d.ts +6 -0
- package/dist/render/componentNodeToRenderingTree.d.ts.map +1 -0
- package/dist/render/componentNodeToRenderingTree.js +41 -0
- package/dist/render/contentToHtml.d.ts +9 -0
- package/dist/render/contentToHtml.d.ts.map +1 -0
- package/dist/render/contentToHtml.js +44 -0
- package/dist/render/contentToHtmlDev.d.ts +9 -0
- package/dist/render/contentToHtmlDev.d.ts.map +1 -0
- package/dist/render/contentToHtmlDev.js +4 -0
- package/dist/render/contentTreeToRenderingTree.d.ts.map +1 -1
- package/dist/render/contentTreeToRenderingTree.js +8 -8
- package/dist/render/functionComponentNodeToRenderingTree.d.ts.map +1 -1
- package/dist/render/functionComponentNodeToRenderingTree.js +4 -2
- package/dist/render/instantiateClassComponent.d.ts +2 -2
- package/dist/render/instantiateClassComponent.d.ts.map +1 -1
- package/dist/render/instantiateClassComponent.js +1 -1
- package/dist/render/instantiateComponent.d.ts.map +1 -1
- package/dist/render/processProps.d.ts.map +1 -1
- package/dist/render/processProps.js +1 -1
- package/dist/render/renderingTreeToHtml.d.ts.map +1 -1
- package/dist/render/renderingTreeToHtml.js +42 -8
- package/dist/render/rootToHtml.d.ts +2 -1
- package/dist/render/rootToHtml.d.ts.map +1 -1
- package/dist/render/rootToHtml.js +12 -6
- package/dist/render/rootToHtmlDev.d.ts +4 -3
- package/dist/render/rootToHtmlDev.d.ts.map +1 -1
- package/dist/render/rootToHtmlDev.js +2 -2
- package/dist/routing/MatchedRoute.d.ts.map +1 -1
- package/dist/routing/MatchedRoute.js +0 -3
- package/dist/routing/runContentFunction.d.ts +2 -0
- package/dist/routing/runContentFunction.d.ts.map +1 -0
- package/dist/routing/runContentFunction.js +13 -0
- package/dist/staticGen/getAppRoutes.d.ts.map +1 -1
- package/dist/staticGen/getAppRoutes.js +7 -6
- package/dist/staticGen/staticGen.d.ts.map +1 -1
- package/dist/staticGen/staticGen.js +9 -1
- package/dist/update/integrateUpdateVdom.d.ts +13 -1
- package/dist/update/integrateUpdateVdom.d.ts.map +1 -1
- package/dist/update/integrateUpdateVdom.js +112 -49
- package/dist/validChildren.d.ts +4 -2
- package/dist/validChildren.d.ts.map +1 -1
- package/dist/validChildren.js +4 -0
- package/package.json +11 -10
- package/types/jsx/jsx.d.ts +10 -7
- package/dist/babelPlugins/BabelTransformCssImport.d.ts.map +0 -1
- package/dist/babelPlugins/BabelTransformDependencyImportsCjs.d.ts.map +0 -1
- package/dist/babelPlugins/BabelTransformDependencyImportsEsm.d.ts.map +0 -1
- package/dist/babelPlugins/BabelTransformDependencyImportsEsm.js +0 -85
- package/dist/build/compileEnv.d.ts +0 -2
- package/dist/build/compileEnv.d.ts.map +0 -1
- package/dist/build/compileEnv.js +0 -132
- package/dist/build/createAppConfig.d.ts +0 -4
- package/dist/build/createAppConfig.d.ts.map +0 -1
- package/dist/build/webpack.user.prod.config.d.ts +0 -2
- package/dist/build/webpack.user.prod.config.d.ts.map +0 -1
- package/dist/build/webpack.user.prod.config.js +0 -337
- package/dist/createInstanceConfigFromFrameworkConfig.d.ts +0 -4
- package/dist/createInstanceConfigFromFrameworkConfig.d.ts.map +0 -1
- package/dist/createInstanceConfigFromFrameworkConfig.js +0 -9
- package/dist/getAppConfig.d.ts +0 -3
- package/dist/getAppConfig.d.ts.map +0 -1
- package/dist/getAppConfig.js +0 -12
- package/dist/render/componentNodeToRenderingToTree.d.ts +0 -6
- package/dist/render/componentNodeToRenderingToTree.d.ts.map +0 -1
- package/dist/render/componentNodeToRenderingToTree.js +0 -15
- package/dist/render/componentNodeToTree.d.ts +0 -5
- package/dist/render/componentNodeToTree.d.ts.map +0 -1
- package/dist/render/componentNodeToTree.js +0 -16
package/dist/hooks/useState.js
CHANGED
|
@@ -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
|
-
//
|
|
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(...
|
|
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] =
|
|
35
|
-
return [
|
|
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;
|
|
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"}
|
package/dist/hydrate/hydrate.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
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__,
|
|
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
|
-
|
|
63
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
183
|
+
parentElement
|
|
160
184
|
});
|
|
161
185
|
await element.__init();
|
|
162
186
|
//// Add to parent childNodes?
|
|
163
187
|
//const content = await element.__styledContent()
|
|
164
|
-
const
|
|
165
|
-
debug('content',
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
element.
|
|
188
|
-
|
|
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]:
|
|
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
|
-
|
|
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 @@
|
|
|
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";
|
package/dist/jsxRuntime.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/jsxRuntime.js
CHANGED
|
@@ -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
|
|
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,
|
|
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,
|
|
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
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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,
|
|
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
|
-
|
|
10
|
+
setCurrentComponent(standIn);
|
|
9
11
|
const content = await getStyledContentFromFunctionComponent(standIn);
|
|
10
12
|
//const content = await getStyledContentFromFunctionComponent(standIn.func, standIn.props)
|
|
11
|
-
|
|
13
|
+
clearCurrentComponent();
|
|
12
14
|
return makeRenderingNodeFunctionComponentFromContentNodeFunctionComponent(contentNode, standIn, await contentTreeToRenderingTree(content, parentComponent, instance, noEscape));
|
|
13
15
|
}
|