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,184 @@
1
+ // src/server/server.ts
2
+ import { createServer as createHttpServer } from "http";
3
+ import { promises as fs } from "fs";
4
+ import { join, normalize, extname, dirname } from "path";
5
+ import { pathToFileURL } from "url";
6
+ var MIME_TYPES = {
7
+ ".html": "text/html; charset=utf-8",
8
+ ".css": "text/css; charset=utf-8",
9
+ ".js": "application/javascript; charset=utf-8",
10
+ ".json": "application/json; charset=utf-8",
11
+ ".png": "image/png",
12
+ ".jpg": "image/jpeg",
13
+ ".jpeg": "image/jpeg",
14
+ ".gif": "image/gif",
15
+ ".svg": "image/svg+xml",
16
+ ".ico": "image/x-icon",
17
+ ".txt": "text/plain; charset=utf-8"
18
+ };
19
+ function startServer({ root, port = 3e3, host = "0.0.0.0", environment = "production" }) {
20
+ if (!root) throw new Error("Root directory must be specified.");
21
+ const requestHandler = async (req, res) => {
22
+ try {
23
+ if (!req.url) {
24
+ res.writeHead(400, { "Content-Type": "text/plain; charset=utf-8" });
25
+ res.end("Bad Request");
26
+ return;
27
+ }
28
+ res.setHeader("Access-Control-Allow-Origin", "*");
29
+ res.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
30
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
31
+ if (req.method === "OPTIONS") {
32
+ res.writeHead(204);
33
+ res.end();
34
+ if (environment === "development") {
35
+ console.log(req.method, "::", req.url, "-", res.statusCode);
36
+ }
37
+ return;
38
+ }
39
+ const url = new URL(req.url, `https://${req.headers.host}`);
40
+ if (url.pathname.startsWith("/api/")) {
41
+ await handleApiRequest(root, url.pathname, req, res);
42
+ } else {
43
+ await handleStaticRequest(root, url.pathname, res);
44
+ }
45
+ if (environment === "development") {
46
+ console.log(req.method, "::", req.url, "-", res.statusCode);
47
+ }
48
+ } catch (err) {
49
+ console.error(err);
50
+ res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" });
51
+ res.end("Internal Server Error");
52
+ }
53
+ };
54
+ let server = createHttpServer(requestHandler);
55
+ server.listen(port, host, () => {
56
+ console.log(`Server running at https://${host}:${port}/`);
57
+ });
58
+ return server;
59
+ }
60
+ async function handleStaticRequest(root, pathname, res) {
61
+ let filePath = normalize(join(root, decodeURIComponent(pathname)));
62
+ root = normalize(root);
63
+ if (!filePath.startsWith(root)) {
64
+ res.writeHead(403, { "Content-Type": "text/plain; charset=utf-8" });
65
+ res.end("Forbidden");
66
+ return;
67
+ }
68
+ try {
69
+ const stats = await fs.stat(filePath);
70
+ if (stats.isDirectory()) {
71
+ filePath = join(filePath, "index.html");
72
+ }
73
+ } catch {
74
+ }
75
+ try {
76
+ const ext = extname(filePath).toLowerCase();
77
+ const contentType = MIME_TYPES[ext] || "application/octet-stream";
78
+ const data = await fs.readFile(filePath);
79
+ res.writeHead(200, { "Content-Type": contentType });
80
+ res.end(data);
81
+ } catch {
82
+ await respondWithErrorPage(root, pathname, 404, res);
83
+ }
84
+ }
85
+ async function handleApiRequest(root, pathname, req, res) {
86
+ const routePath = join(root, pathname, "route.js");
87
+ try {
88
+ await fs.access(routePath);
89
+ } catch {
90
+ res.writeHead(404, { "Content-Type": "application/json; charset=utf-8" });
91
+ res.end(JSON.stringify({ error: "Not found" }));
92
+ return;
93
+ }
94
+ try {
95
+ const moduleUrl = pathToFileURL(routePath).href;
96
+ const { GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE, CONNECT } = await import(moduleUrl);
97
+ let fn;
98
+ switch (req.method) {
99
+ case "GET":
100
+ fn = GET;
101
+ break;
102
+ case "HEAD":
103
+ fn = HEAD;
104
+ break;
105
+ case "POST":
106
+ fn = POST;
107
+ break;
108
+ case "PUT":
109
+ fn = PUT;
110
+ break;
111
+ case "PATCH":
112
+ fn = PATCH;
113
+ break;
114
+ case "DELETE":
115
+ fn = DELETE;
116
+ break;
117
+ case "OPTIONS":
118
+ fn = OPTIONS;
119
+ break;
120
+ case "TRACE":
121
+ fn = TRACE;
122
+ break;
123
+ case "CONNECT":
124
+ fn = CONNECT;
125
+ break;
126
+ default:
127
+ fn = null;
128
+ return;
129
+ }
130
+ if (fn === null) {
131
+ res.writeHead(404, { "Content-Type": "application/json; charset=utf-8" });
132
+ res.end(JSON.stringify({ error: "Unsupported method for route." }));
133
+ return;
134
+ }
135
+ if (typeof fn !== "function") {
136
+ throw new Error('API route module must export a "route" function.');
137
+ }
138
+ await fn(req, res);
139
+ } catch {
140
+ await respondWithErrorPage(root, pathname, 404, res);
141
+ }
142
+ }
143
+ async function respondWithErrorPage(root, pathname, code, res) {
144
+ let currentPath = normalize(join(root, decodeURIComponent(pathname)));
145
+ let tried = /* @__PURE__ */ new Set();
146
+ let errorFilePath = null;
147
+ while (currentPath.startsWith(root)) {
148
+ const candidate = join(currentPath, `${code}.html`);
149
+ if (!tried.has(candidate)) {
150
+ try {
151
+ await fs.access(candidate);
152
+ errorFilePath = candidate;
153
+ break;
154
+ } catch {
155
+ }
156
+ tried.add(candidate);
157
+ }
158
+ const parent = dirname(currentPath);
159
+ if (parent === currentPath) break;
160
+ currentPath = parent;
161
+ }
162
+ if (!errorFilePath) {
163
+ const fallback = join(root, `${code}.html`);
164
+ try {
165
+ await fs.access(fallback);
166
+ errorFilePath = fallback;
167
+ } catch {
168
+ }
169
+ }
170
+ if (errorFilePath) {
171
+ try {
172
+ const html = await fs.readFile(errorFilePath);
173
+ res.writeHead(code, { "Content-Type": "text/html; charset=utf-8" });
174
+ res.end(html);
175
+ return;
176
+ } catch {
177
+ }
178
+ }
179
+ res.writeHead(code, { "Content-Type": "text/plain; charset=utf-8" });
180
+ res.end(`${code} Error`);
181
+ }
182
+ export {
183
+ startServer
184
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,145 @@
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);
@@ -0,0 +1,11 @@
1
+ declare const createElementOptions: (obj: Record<string, any>) => () => Record<string, any>;
2
+ declare const elements: {
3
+ [key: string]: EleganceElement<ElementTags>;
4
+ };
5
+ declare const childrenlessElements: {
6
+ [key: string]: EleganceChildrenlessElement<ChildrenlessElementTags>;
7
+ };
8
+ declare const allElements: {
9
+ [x: string]: EleganceElement<ElementTags> | EleganceChildrenlessElement<ChildrenlessElementTags>;
10
+ };
11
+ export { elements, childrenlessElements, createElementOptions, allElements };
@@ -0,0 +1,165 @@
1
+ // src/shared/serverElements.ts
2
+ var createElementOptions = (obj) => {
3
+ return function() {
4
+ const reevaluatedObj = {};
5
+ for (const key of Object.keys(obj)) {
6
+ const value = obj[key];
7
+ if (typeof value === "function") {
8
+ if (key.startsWith("on")) {
9
+ reevaluatedObj[key] = value;
10
+ } else {
11
+ reevaluatedObj[key] = value();
12
+ }
13
+ } else {
14
+ reevaluatedObj[key] = value;
15
+ }
16
+ }
17
+ return reevaluatedObj;
18
+ };
19
+ };
20
+ var createBuildableElement = (tag) => {
21
+ return (options, ...children) => ({
22
+ tag,
23
+ options: options || {},
24
+ children
25
+ });
26
+ };
27
+ var createChildrenlessBuildableElement = (tag) => {
28
+ return (options) => ({
29
+ tag,
30
+ options: options || {},
31
+ children: null
32
+ });
33
+ };
34
+ var childrenlessElementTags = [
35
+ "area",
36
+ "base",
37
+ "br",
38
+ "col",
39
+ "embed",
40
+ "hr",
41
+ "img",
42
+ "input",
43
+ "link",
44
+ "meta",
45
+ "source",
46
+ "track",
47
+ "path",
48
+ "rect"
49
+ ];
50
+ var elementTags = [
51
+ "a",
52
+ "address",
53
+ "article",
54
+ "aside",
55
+ "audio",
56
+ "blockquote",
57
+ "body",
58
+ "button",
59
+ "canvas",
60
+ "caption",
61
+ "colgroup",
62
+ "data",
63
+ "datalist",
64
+ "dd",
65
+ "del",
66
+ "details",
67
+ "dialog",
68
+ "div",
69
+ "dl",
70
+ "dt",
71
+ "fieldset",
72
+ "figcaption",
73
+ "figure",
74
+ "footer",
75
+ "form",
76
+ "h1",
77
+ "h2",
78
+ "h3",
79
+ "h4",
80
+ "h5",
81
+ "h6",
82
+ "head",
83
+ "header",
84
+ "hgroup",
85
+ "html",
86
+ "iframe",
87
+ "ins",
88
+ "label",
89
+ "legend",
90
+ "li",
91
+ "main",
92
+ "map",
93
+ "meter",
94
+ "nav",
95
+ "noscript",
96
+ "object",
97
+ "ol",
98
+ "optgroup",
99
+ "option",
100
+ "output",
101
+ "p",
102
+ "picture",
103
+ "pre",
104
+ "progress",
105
+ "q",
106
+ "section",
107
+ "select",
108
+ "summary",
109
+ "table",
110
+ "tbody",
111
+ "td",
112
+ "template",
113
+ "textarea",
114
+ "tfoot",
115
+ "th",
116
+ "thead",
117
+ "time",
118
+ "tr",
119
+ "ul",
120
+ "video",
121
+ "span",
122
+ "script",
123
+ "abbr",
124
+ "b",
125
+ "bdi",
126
+ "bdo",
127
+ "cite",
128
+ "code",
129
+ "dfn",
130
+ "em",
131
+ "i",
132
+ "kbd",
133
+ "mark",
134
+ "rp",
135
+ "rt",
136
+ "ruby",
137
+ "s",
138
+ "samp",
139
+ "small",
140
+ "strong",
141
+ "sub",
142
+ "sup",
143
+ "u",
144
+ "wbr",
145
+ "title",
146
+ "svg"
147
+ ];
148
+ var elements = {};
149
+ var childrenlessElements = {};
150
+ for (const element of elementTags) {
151
+ elements[element] = createBuildableElement(element);
152
+ }
153
+ for (const element of childrenlessElementTags) {
154
+ childrenlessElements[element] = createChildrenlessBuildableElement(element);
155
+ }
156
+ var allElements = {
157
+ ...elements,
158
+ ...childrenlessElements
159
+ };
160
+ export {
161
+ allElements,
162
+ childrenlessElements,
163
+ createElementOptions,
164
+ elements
165
+ };
@@ -0,0 +1,19 @@
1
+ export declare enum GenerateMetadata {
2
+ /**
3
+ *
4
+ * <head> element and subsequent elements
5
+ * tagged with SEO, are generated at build-time, on the server.
6
+ *
7
+ */
8
+ ON_BUILD = 1,
9
+ /**
10
+ * <head> element and subsequent elements
11
+ * tagged with SEO, are generated per-request, on the server.
12
+ *
13
+ */
14
+ PER_REQUEST = 2
15
+ }
16
+ export declare enum CacheSSRResultHTML {
17
+ NO = 0,
18
+ YES = 1
19
+ }
@@ -0,0 +1,15 @@
1
+ // src/types/Metadata.ts
2
+ var GenerateMetadata = /* @__PURE__ */ ((GenerateMetadata2) => {
3
+ GenerateMetadata2[GenerateMetadata2["ON_BUILD"] = 1] = "ON_BUILD";
4
+ GenerateMetadata2[GenerateMetadata2["PER_REQUEST"] = 2] = "PER_REQUEST";
5
+ return GenerateMetadata2;
6
+ })(GenerateMetadata || {});
7
+ var CacheSSRResultHTML = /* @__PURE__ */ ((CacheSSRResultHTML2) => {
8
+ CacheSSRResultHTML2[CacheSSRResultHTML2["NO"] = 0] = "NO";
9
+ CacheSSRResultHTML2[CacheSSRResultHTML2["YES"] = 1] = "YES";
10
+ return CacheSSRResultHTML2;
11
+ })(CacheSSRResultHTML || {});
12
+ export {
13
+ CacheSSRResultHTML,
14
+ GenerateMetadata
15
+ };
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "elegance-js",
3
+ "version": "1.0.0",
4
+ "description": "Web-Framework",
5
+ "type": "module",
6
+ "bin": {
7
+ "dev": "./scripts/dev.js",
8
+ "prod": "./scripts/prod.js",
9
+ "static": "./scripts/export.js"
10
+ },
11
+ "scripts": {
12
+ "build": "esbuild --format=esm --platform=node --bundle --outdir=./dist --platform=node --external:esbuild --out-extension:.js=.mjs \"./src/**/*.ts\" && tsc",
13
+ "compile-docs": "node ./dist/compile_docs.mjs --environment=development",
14
+ "compile-docs-bun": "bun run ./dist/compile_docs.mjs --environment=development",
15
+ "prepare": "npm run build && node ./dist/compile_docs.mjs --environment=production"
16
+ },
17
+ "exports": {
18
+ "./*": {
19
+ "types": "./dist/*.d.ts",
20
+ "import": "./dist/*.mjs",
21
+ "require": "./dist/*.mjs"
22
+ }
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "author": "vqldemar",
28
+ "license": "MIT",
29
+ "dependencies": {
30
+ "esbuild": "^0.25.9"
31
+ },
32
+ "devDependencies": {
33
+ "@tailwindcss/cli": "^4.0.3",
34
+ "@types/node": "^22.9.1",
35
+ "tailwindcss": "^4.0.3",
36
+ "typescript": "^5.8.2"
37
+ }
38
+ }
package/scripts/dev.js ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { compile } from "elegance-js/build"
4
+ import { exec, execSync } from "node:child_process";
5
+
6
+ compile({
7
+ environment: "development",
8
+ outputDirectory: ".elegance",
9
+ pagesDirectory: "./pages",
10
+ publicDirectory: {
11
+ method:"recursive-copy",
12
+ path: "./public",
13
+ },
14
+ hotReload: {
15
+ port: 3001,
16
+ hostname: "localhost",
17
+ },
18
+ server: {
19
+ runServer: true,
20
+ port: 3000,
21
+ },
22
+ postCompile: () => {
23
+ exec("npx @tailwindcss/cli -i ./pages/index.css -o .elegance/dist/index.css --watch")
24
+ },
25
+ })
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { compile } from "elegance-js/build"
4
+ import { exec, execSync } from "node:child_process";
5
+
6
+ compile({
7
+ environment: "production",
8
+ outputDirectory: ".elegance",
9
+ pagesDirectory: "./pages",
10
+ publicDirectory: {
11
+ method: "recursive-copy",
12
+ path: "./public",
13
+ },
14
+ server: {
15
+ runServer: false,
16
+ },
17
+ postCompile: () => {
18
+ exec("npx @tailwindcss/cli -i ./pages/index.css -o .elegance/dist/index.css --minify=true")
19
+ },
20
+ })
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { compile } from "elegance-js/build"
4
+ import { exec, execSync } from "node:child_process";
5
+
6
+ compile({
7
+ environment: "production",
8
+ outputDirectory: ".elegance",
9
+ pagesDirectory: "./pages",
10
+ publicDirectory: {
11
+ method: "recursive-copy",
12
+ path: "./public",
13
+ },
14
+ server: {
15
+ runServer: true,
16
+ port: 3000,
17
+ },
18
+ postCompile: () => {
19
+ exec("npx @tailwindcss/cli -i ./pages/index.css -o .elegance/dist/index.css --minify=true")
20
+ },
21
+ })