elegance-js 1.0.0
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/README.md +4 -0
- package/dist/build.d.ts +22 -0
- package/dist/build.mjs +1060 -0
- package/dist/client/client.d.ts +1 -0
- package/dist/client/client.mjs +272 -0
- package/dist/client/watcher.d.ts +1 -0
- package/dist/client/watcher.mjs +26 -0
- package/dist/compile_docs.d.ts +1 -0
- package/dist/compile_docs.mjs +1087 -0
- package/dist/components/Breakpoint.d.ts +3 -0
- package/dist/components/Breakpoint.mjs +17 -0
- package/dist/components/Link.d.ts +1 -0
- package/dist/components/Link.mjs +116 -0
- package/dist/docs/components/Header.d.ts +1 -0
- package/dist/docs/components/Header.mjs +219 -0
- package/dist/docs/components/RootLayout.d.ts +1 -0
- package/dist/docs/components/RootLayout.mjs +10 -0
- package/dist/docs/docs/basics/page.d.ts +2 -0
- package/dist/docs/docs/basics/page.mjs +1174 -0
- package/dist/docs/docs/compilations/page.d.ts +2 -0
- package/dist/docs/docs/compilations/page.mjs +15 -0
- package/dist/docs/docs/components/CodeBlock.d.ts +2 -0
- package/dist/docs/docs/components/CodeBlock.mjs +316 -0
- package/dist/docs/docs/components/DocsLayout.d.ts +1 -0
- package/dist/docs/docs/components/DocsLayout.mjs +465 -0
- package/dist/docs/docs/components/Header.d.ts +1 -0
- package/dist/docs/docs/components/Header.mjs +163 -0
- package/dist/docs/docs/components/Mono.d.ts +1 -0
- package/dist/docs/docs/components/Mono.mjs +7 -0
- package/dist/docs/docs/components/PageHeading.d.ts +1 -0
- package/dist/docs/docs/components/PageHeading.mjs +9 -0
- package/dist/docs/docs/components/Paragraph.d.ts +1 -0
- package/dist/docs/docs/components/Paragraph.mjs +10 -0
- package/dist/docs/docs/components/Separator.d.ts +1 -0
- package/dist/docs/docs/components/Separator.mjs +7 -0
- package/dist/docs/docs/components/SubHeading.d.ts +1 -0
- package/dist/docs/docs/components/SubHeading.mjs +8 -0
- package/dist/docs/docs/components/SubSeparator.d.ts +1 -0
- package/dist/docs/docs/components/SubSeparator.mjs +7 -0
- package/dist/docs/docs/components/Subtext.d.ts +1 -0
- package/dist/docs/docs/components/Subtext.mjs +8 -0
- package/dist/docs/docs/concepts/page.d.ts +2 -0
- package/dist/docs/docs/concepts/page.mjs +892 -0
- package/dist/docs/docs/page-files/page.d.ts +2 -0
- package/dist/docs/docs/page-files/page.mjs +1144 -0
- package/dist/docs/docs/page.d.ts +2 -0
- package/dist/docs/docs/page.mjs +49 -0
- package/dist/docs/docs/route.d.ts +2 -0
- package/dist/docs/docs/route.mjs +8 -0
- package/dist/docs/docs/running/page.d.ts +2 -0
- package/dist/docs/docs/running/page.mjs +7 -0
- package/dist/docs/nullpage/page.d.ts +2 -0
- package/dist/docs/nullpage/page.mjs +52 -0
- package/dist/docs/page.d.ts +2 -0
- package/dist/docs/page.mjs +405 -0
- package/dist/docs/utils/MEGALEXER.d.ts +1 -0
- package/dist/docs/utils/MEGALEXER.mjs +171 -0
- package/dist/global.d.ts +290 -0
- package/dist/global.mjs +0 -0
- package/dist/helpers/ObjectAttributeType.d.ts +7 -0
- package/dist/helpers/ObjectAttributeType.mjs +12 -0
- package/dist/helpers/camelToKebab.d.ts +1 -0
- package/dist/helpers/camelToKebab.mjs +7 -0
- package/dist/index.d.ts +0 -0
- package/dist/index.mjs +0 -0
- package/dist/server/createReference.d.ts +6 -0
- package/dist/server/createReference.mjs +18 -0
- package/dist/server/createState.d.ts +47 -0
- package/dist/server/createState.mjs +50 -0
- package/dist/server/generateHTMLTemplate.d.ts +7 -0
- package/dist/server/generateHTMLTemplate.mjs +222 -0
- package/dist/server/layout.d.ts +3 -0
- package/dist/server/layout.mjs +17 -0
- package/dist/server/loadHook.d.ts +29 -0
- package/dist/server/loadHook.mjs +28 -0
- package/dist/server/observe.d.ts +19 -0
- package/dist/server/observe.mjs +16 -0
- package/dist/server/pageShimmer.d.ts +2 -0
- package/dist/server/pageShimmer.mjs +5 -0
- package/dist/server/render.d.ts +5 -0
- package/dist/server/render.mjs +210 -0
- package/dist/server/server.d.ts +9 -0
- package/dist/server/server.mjs +184 -0
- package/dist/shared/bindServerElements.d.ts +1 -0
- package/dist/shared/bindServerElements.mjs +145 -0
- package/dist/shared/serverElements.d.ts +11 -0
- package/dist/shared/serverElements.mjs +165 -0
- package/dist/types/Metadata.d.ts +19 -0
- package/dist/types/Metadata.mjs +15 -0
- package/package.json +38 -0
- package/scripts/dev.js +25 -0
- package/scripts/export.js +20 -0
- package/scripts/prod.js +21 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
// src/shared/serverElements.ts
|
|
2
|
+
var createBuildableElement = (tag) => {
|
|
3
|
+
return (options, ...children) => ({
|
|
4
|
+
tag,
|
|
5
|
+
options: options || {},
|
|
6
|
+
children
|
|
7
|
+
});
|
|
8
|
+
};
|
|
9
|
+
var createChildrenlessBuildableElement = (tag) => {
|
|
10
|
+
return (options) => ({
|
|
11
|
+
tag,
|
|
12
|
+
options: options || {},
|
|
13
|
+
children: null
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
var childrenlessElementTags = [
|
|
17
|
+
"area",
|
|
18
|
+
"base",
|
|
19
|
+
"br",
|
|
20
|
+
"col",
|
|
21
|
+
"embed",
|
|
22
|
+
"hr",
|
|
23
|
+
"img",
|
|
24
|
+
"input",
|
|
25
|
+
"link",
|
|
26
|
+
"meta",
|
|
27
|
+
"source",
|
|
28
|
+
"track",
|
|
29
|
+
"path",
|
|
30
|
+
"rect"
|
|
31
|
+
];
|
|
32
|
+
var elementTags = [
|
|
33
|
+
"a",
|
|
34
|
+
"address",
|
|
35
|
+
"article",
|
|
36
|
+
"aside",
|
|
37
|
+
"audio",
|
|
38
|
+
"blockquote",
|
|
39
|
+
"body",
|
|
40
|
+
"button",
|
|
41
|
+
"canvas",
|
|
42
|
+
"caption",
|
|
43
|
+
"colgroup",
|
|
44
|
+
"data",
|
|
45
|
+
"datalist",
|
|
46
|
+
"dd",
|
|
47
|
+
"del",
|
|
48
|
+
"details",
|
|
49
|
+
"dialog",
|
|
50
|
+
"div",
|
|
51
|
+
"dl",
|
|
52
|
+
"dt",
|
|
53
|
+
"fieldset",
|
|
54
|
+
"figcaption",
|
|
55
|
+
"figure",
|
|
56
|
+
"footer",
|
|
57
|
+
"form",
|
|
58
|
+
"h1",
|
|
59
|
+
"h2",
|
|
60
|
+
"h3",
|
|
61
|
+
"h4",
|
|
62
|
+
"h5",
|
|
63
|
+
"h6",
|
|
64
|
+
"head",
|
|
65
|
+
"header",
|
|
66
|
+
"hgroup",
|
|
67
|
+
"html",
|
|
68
|
+
"iframe",
|
|
69
|
+
"ins",
|
|
70
|
+
"label",
|
|
71
|
+
"legend",
|
|
72
|
+
"li",
|
|
73
|
+
"main",
|
|
74
|
+
"map",
|
|
75
|
+
"meter",
|
|
76
|
+
"nav",
|
|
77
|
+
"noscript",
|
|
78
|
+
"object",
|
|
79
|
+
"ol",
|
|
80
|
+
"optgroup",
|
|
81
|
+
"option",
|
|
82
|
+
"output",
|
|
83
|
+
"p",
|
|
84
|
+
"picture",
|
|
85
|
+
"pre",
|
|
86
|
+
"progress",
|
|
87
|
+
"q",
|
|
88
|
+
"section",
|
|
89
|
+
"select",
|
|
90
|
+
"summary",
|
|
91
|
+
"table",
|
|
92
|
+
"tbody",
|
|
93
|
+
"td",
|
|
94
|
+
"template",
|
|
95
|
+
"textarea",
|
|
96
|
+
"tfoot",
|
|
97
|
+
"th",
|
|
98
|
+
"thead",
|
|
99
|
+
"time",
|
|
100
|
+
"tr",
|
|
101
|
+
"ul",
|
|
102
|
+
"video",
|
|
103
|
+
"span",
|
|
104
|
+
"script",
|
|
105
|
+
"abbr",
|
|
106
|
+
"b",
|
|
107
|
+
"bdi",
|
|
108
|
+
"bdo",
|
|
109
|
+
"cite",
|
|
110
|
+
"code",
|
|
111
|
+
"dfn",
|
|
112
|
+
"em",
|
|
113
|
+
"i",
|
|
114
|
+
"kbd",
|
|
115
|
+
"mark",
|
|
116
|
+
"rp",
|
|
117
|
+
"rt",
|
|
118
|
+
"ruby",
|
|
119
|
+
"s",
|
|
120
|
+
"samp",
|
|
121
|
+
"small",
|
|
122
|
+
"strong",
|
|
123
|
+
"sub",
|
|
124
|
+
"sup",
|
|
125
|
+
"u",
|
|
126
|
+
"wbr",
|
|
127
|
+
"title",
|
|
128
|
+
"svg"
|
|
129
|
+
];
|
|
130
|
+
var elements = {};
|
|
131
|
+
var childrenlessElements = {};
|
|
132
|
+
for (const element of elementTags) {
|
|
133
|
+
elements[element] = createBuildableElement(element);
|
|
134
|
+
}
|
|
135
|
+
for (const element of childrenlessElementTags) {
|
|
136
|
+
childrenlessElements[element] = createChildrenlessBuildableElement(element);
|
|
137
|
+
}
|
|
138
|
+
var allElements = {
|
|
139
|
+
...elements,
|
|
140
|
+
...childrenlessElements
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
// src/shared/bindServerElements.ts
|
|
144
|
+
Object.assign(globalThis, elements);
|
|
145
|
+
Object.assign(globalThis, childrenlessElements);
|
|
146
|
+
|
|
147
|
+
// src/server/render.ts
|
|
148
|
+
var renderRecursively = (element) => {
|
|
149
|
+
let returnString = "";
|
|
150
|
+
if (typeof element === "boolean") return returnString;
|
|
151
|
+
else if (typeof element === "number" || typeof element === "string") {
|
|
152
|
+
return returnString + element;
|
|
153
|
+
} else if (Array.isArray(element)) {
|
|
154
|
+
return returnString + element.join(", ");
|
|
155
|
+
}
|
|
156
|
+
returnString += `<${element.tag}`;
|
|
157
|
+
const {
|
|
158
|
+
tag: elementTag,
|
|
159
|
+
options: elementOptions,
|
|
160
|
+
children: elementChildren
|
|
161
|
+
} = element.options;
|
|
162
|
+
if (elementTag && elementOptions && elementChildren) {
|
|
163
|
+
const children = element.children;
|
|
164
|
+
element.children = [
|
|
165
|
+
element.options,
|
|
166
|
+
...children
|
|
167
|
+
];
|
|
168
|
+
element.options = {};
|
|
169
|
+
for (let i = 0; i < children.length + 1; i++) {
|
|
170
|
+
const child = element.children[i];
|
|
171
|
+
returnString += renderRecursively(child);
|
|
172
|
+
}
|
|
173
|
+
returnString += `</${element.tag}>`;
|
|
174
|
+
return returnString;
|
|
175
|
+
}
|
|
176
|
+
if (typeof element.options === "object") {
|
|
177
|
+
for (const [attrName, attrValue] of Object.entries(element.options)) {
|
|
178
|
+
if (typeof attrValue === "object") {
|
|
179
|
+
throw `Attr ${attrName}, for element ${element.tag} has obj type. Got: ${JSON.stringify(element)}`;
|
|
180
|
+
}
|
|
181
|
+
returnString += ` ${attrName.toLowerCase()}="${attrValue}"`;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (element.children === null) {
|
|
185
|
+
returnString += "/>";
|
|
186
|
+
return returnString;
|
|
187
|
+
}
|
|
188
|
+
returnString += ">";
|
|
189
|
+
for (const child of element.children) {
|
|
190
|
+
returnString += renderRecursively(child);
|
|
191
|
+
}
|
|
192
|
+
returnString += `</${element.tag}>`;
|
|
193
|
+
return returnString;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
// src/server/generateHTMLTemplate.ts
|
|
197
|
+
var generateHTMLTemplate = ({
|
|
198
|
+
pageURL,
|
|
199
|
+
head,
|
|
200
|
+
serverData = null,
|
|
201
|
+
addPageScriptTag = true,
|
|
202
|
+
name
|
|
203
|
+
}) => {
|
|
204
|
+
let HTMLTemplate = `<head><meta name="viewport" content="width=device-width, initial-scale=1.0">`;
|
|
205
|
+
HTMLTemplate += '<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"><meta charset="UTF-8">';
|
|
206
|
+
if (addPageScriptTag === true) {
|
|
207
|
+
HTMLTemplate += `<script data-tag="true" type="module" src="${pageURL === "" ? "" : "/"}${pageURL}/${name}_data.js" defer="true"></script>`;
|
|
208
|
+
}
|
|
209
|
+
HTMLTemplate += `<script stype="module" src="/client.js" defer="true"></script>`;
|
|
210
|
+
const builtHead = head();
|
|
211
|
+
for (const child of builtHead.children) {
|
|
212
|
+
HTMLTemplate += renderRecursively(child);
|
|
213
|
+
}
|
|
214
|
+
if (serverData) {
|
|
215
|
+
HTMLTemplate += serverData;
|
|
216
|
+
}
|
|
217
|
+
HTMLTemplate += "</head>";
|
|
218
|
+
return HTMLTemplate;
|
|
219
|
+
};
|
|
220
|
+
export {
|
|
221
|
+
generateHTMLTemplate
|
|
222
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// src/server/layout.ts
|
|
2
|
+
var resetLayouts = () => globalThis.__SERVER_CURRENT_LAYOUTS__ = /* @__PURE__ */ new Map();
|
|
3
|
+
var getLayouts = () => globalThis.__SERVER_CURRENT_LAYOUTS__;
|
|
4
|
+
if (!globalThis.__SERVER_CURRENT_LAYOUT_ID__) globalThis.__SERVER_CURRENT_LAYOUT_ID__ = 1;
|
|
5
|
+
var layoutId = globalThis.__SERVER_CURRENT_LAYOUT_ID__;
|
|
6
|
+
var createLayout = (name) => {
|
|
7
|
+
const layouts = globalThis.__SERVER_CURRENT_LAYOUTS__;
|
|
8
|
+
if (layouts.has(name)) return layouts.get(name);
|
|
9
|
+
const id = layoutId++;
|
|
10
|
+
layouts.set(name, id);
|
|
11
|
+
return id;
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
createLayout,
|
|
15
|
+
getLayouts,
|
|
16
|
+
resetLayouts
|
|
17
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ObjectAttributeType } from "../helpers/ObjectAttributeType";
|
|
2
|
+
type ClientSubjectGeneric<T> = Omit<ClientSubject, "value"> & {
|
|
3
|
+
value: T;
|
|
4
|
+
};
|
|
5
|
+
type ServerSubject = {
|
|
6
|
+
type: ObjectAttributeType;
|
|
7
|
+
value: unknown;
|
|
8
|
+
id: number;
|
|
9
|
+
bind?: string;
|
|
10
|
+
};
|
|
11
|
+
type LoadHookOptions<T extends ServerSubject[]> = {
|
|
12
|
+
bind?: number | undefined;
|
|
13
|
+
deps?: [...T];
|
|
14
|
+
fn: (state: State, ...subjects: {
|
|
15
|
+
[K in keyof T]: ClientSubjectGeneric<T[K]["value"]>;
|
|
16
|
+
}) => void;
|
|
17
|
+
};
|
|
18
|
+
export type LoadHook = {
|
|
19
|
+
fn: string;
|
|
20
|
+
bind: number;
|
|
21
|
+
};
|
|
22
|
+
export type ClientLoadHook = {
|
|
23
|
+
bind: number;
|
|
24
|
+
fn: (state: State) => (void | (() => void) | Promise<(void | (() => void))>);
|
|
25
|
+
};
|
|
26
|
+
export declare const resetLoadHooks: () => never[];
|
|
27
|
+
export declare const getLoadHooks: () => any[];
|
|
28
|
+
export declare const createLoadHook: <T extends ServerSubject[]>(options: LoadHookOptions<T>) => void;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// src/server/loadHook.ts
|
|
2
|
+
var resetLoadHooks = () => globalThis.__SERVER_CURRENT_LOADHOOKS__ = [];
|
|
3
|
+
var getLoadHooks = () => globalThis.__SERVER_CURRENT_LOADHOOKS__;
|
|
4
|
+
var createLoadHook = (options) => {
|
|
5
|
+
const stringFn = options.fn.toString();
|
|
6
|
+
const deps = (options.deps || []).map((dep) => ({
|
|
7
|
+
id: dep.id,
|
|
8
|
+
bind: dep.bind
|
|
9
|
+
}));
|
|
10
|
+
let dependencyString = "[";
|
|
11
|
+
for (const dep of deps) {
|
|
12
|
+
dependencyString += `{id:${dep.id}`;
|
|
13
|
+
if (dep.bind) dependencyString += `,bind:${dep.bind}`;
|
|
14
|
+
dependencyString += `},`;
|
|
15
|
+
}
|
|
16
|
+
dependencyString += "]";
|
|
17
|
+
const isAsync = options.fn.constructor.name === "AsyncFunction";
|
|
18
|
+
const wrapperFn = isAsync ? `async (state) => await (${stringFn})(state, ...state.getAll(${dependencyString}))` : `(state) => (${stringFn})(state, ...state.getAll(${dependencyString}))`;
|
|
19
|
+
globalThis.__SERVER_CURRENT_LOADHOOKS__.push({
|
|
20
|
+
fn: wrapperFn,
|
|
21
|
+
bind: options.bind || ""
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
export {
|
|
25
|
+
createLoadHook,
|
|
26
|
+
getLoadHooks,
|
|
27
|
+
resetLoadHooks
|
|
28
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ObjectAttributeType } from "../helpers/ObjectAttributeType";
|
|
2
|
+
export declare const observe: <T extends {
|
|
3
|
+
type: ObjectAttributeType;
|
|
4
|
+
value: unknown;
|
|
5
|
+
id: string | number;
|
|
6
|
+
bind?: string;
|
|
7
|
+
}[]>(refs: [...T], update: (...values: { [K in keyof T]: T[K] extends {
|
|
8
|
+
value: infer V;
|
|
9
|
+
} ? V : never; }) => (string | number)) => {
|
|
10
|
+
type: ObjectAttributeType;
|
|
11
|
+
initialValues: unknown[];
|
|
12
|
+
update: (...values: { [K in keyof T]: T[K] extends {
|
|
13
|
+
value: infer V;
|
|
14
|
+
} ? V : never; }) => (string | number);
|
|
15
|
+
refs: {
|
|
16
|
+
id: string | number;
|
|
17
|
+
bind: string | undefined;
|
|
18
|
+
}[];
|
|
19
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// src/server/observe.ts
|
|
2
|
+
var observe = (refs, update) => {
|
|
3
|
+
const returnValue = {
|
|
4
|
+
type: 2 /* OBSERVER */,
|
|
5
|
+
initialValues: refs.map((ref) => ref.value),
|
|
6
|
+
update,
|
|
7
|
+
refs: refs.map((ref) => ({
|
|
8
|
+
id: ref.id,
|
|
9
|
+
bind: ref.bind
|
|
10
|
+
}))
|
|
11
|
+
};
|
|
12
|
+
return returnValue;
|
|
13
|
+
};
|
|
14
|
+
export {
|
|
15
|
+
observe
|
|
16
|
+
};
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
// src/shared/serverElements.ts
|
|
2
|
+
var createBuildableElement = (tag) => {
|
|
3
|
+
return (options, ...children) => ({
|
|
4
|
+
tag,
|
|
5
|
+
options: options || {},
|
|
6
|
+
children
|
|
7
|
+
});
|
|
8
|
+
};
|
|
9
|
+
var createChildrenlessBuildableElement = (tag) => {
|
|
10
|
+
return (options) => ({
|
|
11
|
+
tag,
|
|
12
|
+
options: options || {},
|
|
13
|
+
children: null
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
var childrenlessElementTags = [
|
|
17
|
+
"area",
|
|
18
|
+
"base",
|
|
19
|
+
"br",
|
|
20
|
+
"col",
|
|
21
|
+
"embed",
|
|
22
|
+
"hr",
|
|
23
|
+
"img",
|
|
24
|
+
"input",
|
|
25
|
+
"link",
|
|
26
|
+
"meta",
|
|
27
|
+
"source",
|
|
28
|
+
"track",
|
|
29
|
+
"path",
|
|
30
|
+
"rect"
|
|
31
|
+
];
|
|
32
|
+
var elementTags = [
|
|
33
|
+
"a",
|
|
34
|
+
"address",
|
|
35
|
+
"article",
|
|
36
|
+
"aside",
|
|
37
|
+
"audio",
|
|
38
|
+
"blockquote",
|
|
39
|
+
"body",
|
|
40
|
+
"button",
|
|
41
|
+
"canvas",
|
|
42
|
+
"caption",
|
|
43
|
+
"colgroup",
|
|
44
|
+
"data",
|
|
45
|
+
"datalist",
|
|
46
|
+
"dd",
|
|
47
|
+
"del",
|
|
48
|
+
"details",
|
|
49
|
+
"dialog",
|
|
50
|
+
"div",
|
|
51
|
+
"dl",
|
|
52
|
+
"dt",
|
|
53
|
+
"fieldset",
|
|
54
|
+
"figcaption",
|
|
55
|
+
"figure",
|
|
56
|
+
"footer",
|
|
57
|
+
"form",
|
|
58
|
+
"h1",
|
|
59
|
+
"h2",
|
|
60
|
+
"h3",
|
|
61
|
+
"h4",
|
|
62
|
+
"h5",
|
|
63
|
+
"h6",
|
|
64
|
+
"head",
|
|
65
|
+
"header",
|
|
66
|
+
"hgroup",
|
|
67
|
+
"html",
|
|
68
|
+
"iframe",
|
|
69
|
+
"ins",
|
|
70
|
+
"label",
|
|
71
|
+
"legend",
|
|
72
|
+
"li",
|
|
73
|
+
"main",
|
|
74
|
+
"map",
|
|
75
|
+
"meter",
|
|
76
|
+
"nav",
|
|
77
|
+
"noscript",
|
|
78
|
+
"object",
|
|
79
|
+
"ol",
|
|
80
|
+
"optgroup",
|
|
81
|
+
"option",
|
|
82
|
+
"output",
|
|
83
|
+
"p",
|
|
84
|
+
"picture",
|
|
85
|
+
"pre",
|
|
86
|
+
"progress",
|
|
87
|
+
"q",
|
|
88
|
+
"section",
|
|
89
|
+
"select",
|
|
90
|
+
"summary",
|
|
91
|
+
"table",
|
|
92
|
+
"tbody",
|
|
93
|
+
"td",
|
|
94
|
+
"template",
|
|
95
|
+
"textarea",
|
|
96
|
+
"tfoot",
|
|
97
|
+
"th",
|
|
98
|
+
"thead",
|
|
99
|
+
"time",
|
|
100
|
+
"tr",
|
|
101
|
+
"ul",
|
|
102
|
+
"video",
|
|
103
|
+
"span",
|
|
104
|
+
"script",
|
|
105
|
+
"abbr",
|
|
106
|
+
"b",
|
|
107
|
+
"bdi",
|
|
108
|
+
"bdo",
|
|
109
|
+
"cite",
|
|
110
|
+
"code",
|
|
111
|
+
"dfn",
|
|
112
|
+
"em",
|
|
113
|
+
"i",
|
|
114
|
+
"kbd",
|
|
115
|
+
"mark",
|
|
116
|
+
"rp",
|
|
117
|
+
"rt",
|
|
118
|
+
"ruby",
|
|
119
|
+
"s",
|
|
120
|
+
"samp",
|
|
121
|
+
"small",
|
|
122
|
+
"strong",
|
|
123
|
+
"sub",
|
|
124
|
+
"sup",
|
|
125
|
+
"u",
|
|
126
|
+
"wbr",
|
|
127
|
+
"title",
|
|
128
|
+
"svg"
|
|
129
|
+
];
|
|
130
|
+
var elements = {};
|
|
131
|
+
var childrenlessElements = {};
|
|
132
|
+
for (const element of elementTags) {
|
|
133
|
+
elements[element] = createBuildableElement(element);
|
|
134
|
+
}
|
|
135
|
+
for (const element of childrenlessElementTags) {
|
|
136
|
+
childrenlessElements[element] = createChildrenlessBuildableElement(element);
|
|
137
|
+
}
|
|
138
|
+
var allElements = {
|
|
139
|
+
...elements,
|
|
140
|
+
...childrenlessElements
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
// src/shared/bindServerElements.ts
|
|
144
|
+
Object.assign(globalThis, elements);
|
|
145
|
+
Object.assign(globalThis, childrenlessElements);
|
|
146
|
+
|
|
147
|
+
// src/server/render.ts
|
|
148
|
+
var renderRecursively = (element) => {
|
|
149
|
+
let returnString = "";
|
|
150
|
+
if (typeof element === "boolean") return returnString;
|
|
151
|
+
else if (typeof element === "number" || typeof element === "string") {
|
|
152
|
+
return returnString + element;
|
|
153
|
+
} else if (Array.isArray(element)) {
|
|
154
|
+
return returnString + element.join(", ");
|
|
155
|
+
}
|
|
156
|
+
returnString += `<${element.tag}`;
|
|
157
|
+
const {
|
|
158
|
+
tag: elementTag,
|
|
159
|
+
options: elementOptions,
|
|
160
|
+
children: elementChildren
|
|
161
|
+
} = element.options;
|
|
162
|
+
if (elementTag && elementOptions && elementChildren) {
|
|
163
|
+
const children = element.children;
|
|
164
|
+
element.children = [
|
|
165
|
+
element.options,
|
|
166
|
+
...children
|
|
167
|
+
];
|
|
168
|
+
element.options = {};
|
|
169
|
+
for (let i = 0; i < children.length + 1; i++) {
|
|
170
|
+
const child = element.children[i];
|
|
171
|
+
returnString += renderRecursively(child);
|
|
172
|
+
}
|
|
173
|
+
returnString += `</${element.tag}>`;
|
|
174
|
+
return returnString;
|
|
175
|
+
}
|
|
176
|
+
if (typeof element.options === "object") {
|
|
177
|
+
for (const [attrName, attrValue] of Object.entries(element.options)) {
|
|
178
|
+
if (typeof attrValue === "object") {
|
|
179
|
+
throw `Attr ${attrName}, for element ${element.tag} has obj type. Got: ${JSON.stringify(element)}`;
|
|
180
|
+
}
|
|
181
|
+
returnString += ` ${attrName.toLowerCase()}="${attrValue}"`;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (element.children === null) {
|
|
185
|
+
returnString += "/>";
|
|
186
|
+
return returnString;
|
|
187
|
+
}
|
|
188
|
+
returnString += ">";
|
|
189
|
+
for (const child of element.children) {
|
|
190
|
+
returnString += renderRecursively(child);
|
|
191
|
+
}
|
|
192
|
+
returnString += `</${element.tag}>`;
|
|
193
|
+
return returnString;
|
|
194
|
+
};
|
|
195
|
+
var serverSideRenderPage = async (page, pathname) => {
|
|
196
|
+
if (!page) {
|
|
197
|
+
throw `No Page Provided.`;
|
|
198
|
+
}
|
|
199
|
+
if (typeof page === "function") {
|
|
200
|
+
throw `Unbuilt page provided to ssr page.`;
|
|
201
|
+
}
|
|
202
|
+
const bodyHTML = renderRecursively(page);
|
|
203
|
+
return {
|
|
204
|
+
bodyHTML
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
export {
|
|
208
|
+
renderRecursively,
|
|
209
|
+
serverSideRenderPage
|
|
210
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
2
|
+
interface ServerOptions {
|
|
3
|
+
root: string;
|
|
4
|
+
port?: number;
|
|
5
|
+
host?: string;
|
|
6
|
+
environment?: 'production' | 'development';
|
|
7
|
+
}
|
|
8
|
+
export declare function startServer({ root, port, host, environment }: ServerOptions): import("http").Server<typeof IncomingMessage, typeof ServerResponse>;
|
|
9
|
+
export {};
|