@primate/svelte 0.1.1 → 0.2.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.
@@ -0,0 +1 @@
1
+ export {default} from "maximin";
package/exports.js CHANGED
@@ -1 +1 @@
1
- export {default} from "./src/handler.js";
1
+ export {default} from "./src/module.js";
package/package.json CHANGED
@@ -1,20 +1,16 @@
1
1
  {
2
2
  "name": "@primate/svelte",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "bugs": "https://github.com/primatejs/svelte/issues",
5
5
  "repository": "https://github.com/primatejs/svelte",
6
6
  "description": "Primate Svelte handler",
7
7
  "license": "MIT",
8
8
  "dependencies": {
9
- "svelte": "^3.58.0",
10
- "runtime-compat": "^0.14.1"
9
+ "runtime-compat": "^0.14.1",
10
+ "svelte": "^3.58.0"
11
11
  },
12
12
  "devDependencies": {
13
- "@babel/core": "^7.21.4",
14
- "@babel/eslint-parser": "^7.21.3",
15
- "@babel/plugin-syntax-import-assertions": "^7.20.0",
16
- "eslint": "^8.37.0",
17
- "eslint-plugin-json": "^3.1.0"
13
+ "maximin": "^0.1.2"
18
14
  },
19
15
  "type": "module",
20
16
  "exports": "./exports.js"
package/src/module.js ADDED
@@ -0,0 +1,45 @@
1
+ import * as compiler from "svelte/compiler";
2
+ import {File} from "runtime-compat/fs";
3
+
4
+ const endings = {
5
+ svelte: ".svelte",
6
+ js: ".svelte.js",
7
+ };
8
+
9
+ const handler = path => (component, props = {}, {status = 200} = {}) =>
10
+ async (env, headers) => {
11
+ const {js} = endings;
12
+ const {html} = (await import(`${path.join(`${component}${js}`)}`))
13
+ .default.render(props);
14
+
15
+ // -> spread into new Response()
16
+ return [await env.render(html), {
17
+ status,
18
+ headers: {...headers, "Content-Type": "text/html"},
19
+ }];
20
+ };
21
+
22
+ export default directory => async () => {
23
+ const {svelte, js} = endings;
24
+ return {
25
+ register: async (env, next) => {
26
+ env.register("svelte", handler(directory ?? env.paths.components));
27
+ return next(env);
28
+ },
29
+ compile: async (env, next) => {
30
+ const path = directory ?? env.paths.components;
31
+ const options = {generate: "ssr", hydratable: true};
32
+ const components = await path.list(filename => filename.endsWith(svelte));
33
+ await Promise.all(components.map(async component => {
34
+ const file = await component.file.read();
35
+ const server = compiler.compile(file, options);
36
+ /* const client = compiler.compile(file, {
37
+ generate: "dom", hydratable: true, css: false}).js.code;*/
38
+ const compiled = server.js.code.replaceAll(svelte, js);
39
+ await File.write(`${component.path}.js`, compiled);
40
+ }));
41
+
42
+ return next(env);
43
+ },
44
+ };
45
+ };
package/src/handler.js DELETED
@@ -1,43 +0,0 @@
1
- import * as compiler from "svelte/compiler";
2
- import {File} from "runtime-compat/fs";
3
-
4
- const endings = {
5
- svelte: ".svelte",
6
- js: ".svelte.js",
7
- };
8
- const index = "index.html";
9
-
10
- const compile = async path => {
11
- const {svelte, js} = endings;
12
- for (const component of await path.list(filename => filename.endsWith(svelte))) {
13
- const file = await component.file.read();
14
- const compiled = compiler.compile(file, {generate: "ssr"}).js.code
15
- .replaceAll(svelte, js);
16
- await File.write(`${component.path}.js`, compiled);
17
- }
18
- }
19
-
20
- const preset = await new Path(import.meta.url).directory.join(index).file.read();
21
- const getIndex = async env => {
22
- try {
23
- return await File.read(`${env.paths.static.join(index)}`);
24
- } catch (error) {
25
- return preset;
26
- }
27
- };
28
-
29
- export default (component, props, path) => async (env, headers) => {
30
- const components = path ?? env.paths.components;
31
- await compile(components);
32
- const {js} = endings;
33
- const {html} = (await import(`${components.join(`${component}${js}`)}`))
34
- .default.render(props);
35
- const body = (await getIndex(env)).replace("<body>", () => `<body>${html}`);
36
- const options = {
37
- status: 200,
38
- headers: {"Content-Type": "text/html", ...headers},
39
- };
40
-
41
- // -> spread into new Response()
42
- return [body, options];
43
- };
package/src/index.html DELETED
@@ -1,8 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <title>Primate app</title>
5
- <meta charset="utf-8" />
6
- </head>
7
- <body></body>
8
- </html>