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.
Files changed (93) hide show
  1. package/README.md +4 -0
  2. package/dist/build.d.ts +22 -0
  3. package/dist/build.mjs +1060 -0
  4. package/dist/client/client.d.ts +1 -0
  5. package/dist/client/client.mjs +272 -0
  6. package/dist/client/watcher.d.ts +1 -0
  7. package/dist/client/watcher.mjs +26 -0
  8. package/dist/compile_docs.d.ts +1 -0
  9. package/dist/compile_docs.mjs +1087 -0
  10. package/dist/components/Breakpoint.d.ts +3 -0
  11. package/dist/components/Breakpoint.mjs +17 -0
  12. package/dist/components/Link.d.ts +1 -0
  13. package/dist/components/Link.mjs +116 -0
  14. package/dist/docs/components/Header.d.ts +1 -0
  15. package/dist/docs/components/Header.mjs +219 -0
  16. package/dist/docs/components/RootLayout.d.ts +1 -0
  17. package/dist/docs/components/RootLayout.mjs +10 -0
  18. package/dist/docs/docs/basics/page.d.ts +2 -0
  19. package/dist/docs/docs/basics/page.mjs +1174 -0
  20. package/dist/docs/docs/compilations/page.d.ts +2 -0
  21. package/dist/docs/docs/compilations/page.mjs +15 -0
  22. package/dist/docs/docs/components/CodeBlock.d.ts +2 -0
  23. package/dist/docs/docs/components/CodeBlock.mjs +316 -0
  24. package/dist/docs/docs/components/DocsLayout.d.ts +1 -0
  25. package/dist/docs/docs/components/DocsLayout.mjs +465 -0
  26. package/dist/docs/docs/components/Header.d.ts +1 -0
  27. package/dist/docs/docs/components/Header.mjs +163 -0
  28. package/dist/docs/docs/components/Mono.d.ts +1 -0
  29. package/dist/docs/docs/components/Mono.mjs +7 -0
  30. package/dist/docs/docs/components/PageHeading.d.ts +1 -0
  31. package/dist/docs/docs/components/PageHeading.mjs +9 -0
  32. package/dist/docs/docs/components/Paragraph.d.ts +1 -0
  33. package/dist/docs/docs/components/Paragraph.mjs +10 -0
  34. package/dist/docs/docs/components/Separator.d.ts +1 -0
  35. package/dist/docs/docs/components/Separator.mjs +7 -0
  36. package/dist/docs/docs/components/SubHeading.d.ts +1 -0
  37. package/dist/docs/docs/components/SubHeading.mjs +8 -0
  38. package/dist/docs/docs/components/SubSeparator.d.ts +1 -0
  39. package/dist/docs/docs/components/SubSeparator.mjs +7 -0
  40. package/dist/docs/docs/components/Subtext.d.ts +1 -0
  41. package/dist/docs/docs/components/Subtext.mjs +8 -0
  42. package/dist/docs/docs/concepts/page.d.ts +2 -0
  43. package/dist/docs/docs/concepts/page.mjs +892 -0
  44. package/dist/docs/docs/page-files/page.d.ts +2 -0
  45. package/dist/docs/docs/page-files/page.mjs +1144 -0
  46. package/dist/docs/docs/page.d.ts +2 -0
  47. package/dist/docs/docs/page.mjs +49 -0
  48. package/dist/docs/docs/route.d.ts +2 -0
  49. package/dist/docs/docs/route.mjs +8 -0
  50. package/dist/docs/docs/running/page.d.ts +2 -0
  51. package/dist/docs/docs/running/page.mjs +7 -0
  52. package/dist/docs/nullpage/page.d.ts +2 -0
  53. package/dist/docs/nullpage/page.mjs +52 -0
  54. package/dist/docs/page.d.ts +2 -0
  55. package/dist/docs/page.mjs +405 -0
  56. package/dist/docs/utils/MEGALEXER.d.ts +1 -0
  57. package/dist/docs/utils/MEGALEXER.mjs +171 -0
  58. package/dist/global.d.ts +290 -0
  59. package/dist/global.mjs +0 -0
  60. package/dist/helpers/ObjectAttributeType.d.ts +7 -0
  61. package/dist/helpers/ObjectAttributeType.mjs +12 -0
  62. package/dist/helpers/camelToKebab.d.ts +1 -0
  63. package/dist/helpers/camelToKebab.mjs +7 -0
  64. package/dist/index.d.ts +0 -0
  65. package/dist/index.mjs +0 -0
  66. package/dist/server/createReference.d.ts +6 -0
  67. package/dist/server/createReference.mjs +18 -0
  68. package/dist/server/createState.d.ts +47 -0
  69. package/dist/server/createState.mjs +50 -0
  70. package/dist/server/generateHTMLTemplate.d.ts +7 -0
  71. package/dist/server/generateHTMLTemplate.mjs +222 -0
  72. package/dist/server/layout.d.ts +3 -0
  73. package/dist/server/layout.mjs +17 -0
  74. package/dist/server/loadHook.d.ts +29 -0
  75. package/dist/server/loadHook.mjs +28 -0
  76. package/dist/server/observe.d.ts +19 -0
  77. package/dist/server/observe.mjs +16 -0
  78. package/dist/server/pageShimmer.d.ts +2 -0
  79. package/dist/server/pageShimmer.mjs +5 -0
  80. package/dist/server/render.d.ts +5 -0
  81. package/dist/server/render.mjs +210 -0
  82. package/dist/server/server.d.ts +9 -0
  83. package/dist/server/server.mjs +184 -0
  84. package/dist/shared/bindServerElements.d.ts +1 -0
  85. package/dist/shared/bindServerElements.mjs +145 -0
  86. package/dist/shared/serverElements.d.ts +11 -0
  87. package/dist/shared/serverElements.mjs +165 -0
  88. package/dist/types/Metadata.d.ts +19 -0
  89. package/dist/types/Metadata.mjs +15 -0
  90. package/package.json +38 -0
  91. package/scripts/dev.js +25 -0
  92. package/scripts/export.js +20 -0
  93. 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,3 @@
1
+ export declare const resetLayouts: () => Map<any, any>;
2
+ export declare const getLayouts: () => Map<string, number>;
3
+ export declare const createLayout: (name: string) => number | undefined;
@@ -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,2 @@
1
+ declare const marker = "";
2
+ export { marker as "__ELEGANCE_PAGE_DESIGNATOR__" };
@@ -0,0 +1,5 @@
1
+ // src/server/pageShimmer.ts
2
+ var marker = "";
3
+ export {
4
+ marker as __ELEGANCE_PAGE_DESIGNATOR__
5
+ };
@@ -0,0 +1,5 @@
1
+ import "../shared/bindServerElements";
2
+ export declare const renderRecursively: (element: Child) => string;
3
+ export declare const serverSideRenderPage: (page: Page, pathname: string) => Promise<{
4
+ bodyHTML: string;
5
+ }>;
@@ -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 {};