@csedl/svelte-on-rails 12.0.1 → 12.1.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.
@@ -82,7 +82,7 @@ const server = http.createServer(async (req, res) => {
82
82
  logger(`body => «${request_body}»`);
83
83
  res.writeHead(500, { 'Content-Type': 'application/json' });
84
84
  res.end(JSON.stringify({
85
- html: componentRenderError(basename, err),
85
+ html: componentRenderError(basename, err, true),
86
86
  head: ''
87
87
  }));
88
88
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@csedl/svelte-on-rails",
3
- "version": "12.0.1",
3
+ "version": "12.1.0",
4
4
  "description": "Client-side runtime for svelte-on-rails: hydration, SSR build support & Turbo Stream actions",
5
5
  "main": "index.js",
6
6
  "type": "module",
package/src/config.js CHANGED
@@ -17,7 +17,7 @@ export const SvelteOnRails = {
17
17
  debugLog("lazyComponents not set: falling back to default «import.meta.glob(['/**/*.svelte'], {eager: false, import: 'default'})»");
18
18
  components = _defaultComponents;
19
19
  } else {
20
- debugLog(`[svelte-on-rails] using given lazyComponents`);
20
+ debugLog(`using given lazyComponents`);
21
21
  components = _lazyComponents
22
22
  }
23
23
 
@@ -28,7 +28,7 @@ export const SvelteOnRails = {
28
28
  throw new Error(`[svelte-on-rails] Component not found: «${componentKey}»\nAvailable imported Components are:\n\n+++\n • ${Object.keys(components).join('\n • ')}\n+++\n`);
29
29
  //return;
30
30
  } else {
31
- debugLog(`[svelte-on-rails] Component found: ${componentKey}`);
31
+ debugLog(`Component found: ${componentKey}`);
32
32
  }
33
33
 
34
34
  // load and validate component
@@ -1,15 +1,17 @@
1
1
  import {Controller} from "@hotwired/stimulus"
2
2
  import {initializeSvelteComponent} from "./initializeSvelteComponent.js";
3
3
  import {cleanupSvelteComponent} from "./cleanupSvelteComponent.js";
4
+ import {debugLog} from "../logger.js";
4
5
 
5
6
  export default class extends Controller {
6
7
 
7
8
  connect() {
8
9
 
9
- console.log('SVELTE CONNECT')
10
-
11
10
  const stat = this.element.getAttribute('data-svelte-status');
12
- if (stat === 'do-not-hydrate-build-me') return;
11
+ if (stat === 'do-not-hydrate-me') {
12
+ debugLog(`Skipping hydration of component ${this.element.getAttribute('data-component')}`);
13
+ return
14
+ };
13
15
 
14
16
  initializeSvelteComponent(this.element, false).then(r => {});
15
17
 
package/src/ssr/render.js CHANGED
@@ -31,7 +31,7 @@ const compiledComponentPath = process.argv[2];
31
31
 
32
32
  const res = {
33
33
  status: 'SUCCESS',
34
- html: componentRenderError(compiledComponentPath, error),
34
+ html: componentRenderError(compiledComponentPath, error, true),
35
35
  head: '',
36
36
  };
37
37
 
package/src/utils.js CHANGED
@@ -1,6 +1,11 @@
1
- export function componentRenderError(component, error) {
1
+ export function componentRenderError(component, error, ssr = false) {
2
+
3
+ const hint = 'Check browser console for full details.'
4
+ const ssrHint = 'This is Server Side rendered. When Hydrated, you will see a more detailed error message.'
5
+
2
6
  return (`
3
- <div style="
7
+ <div class="svelte-on-rails-component-error${ssr ? '-server-side' : ''}"
8
+ style="
4
9
  padding: 1.5rem;
5
10
  margin: 1rem 0;
6
11
  border: 2px solid #ef4444;
@@ -9,13 +14,18 @@ export function componentRenderError(component, error) {
9
14
  border-radius: 0.5rem;
10
15
  font-family: system-ui, sans-serif;
11
16
  ">
12
- <strong style="font-size: 1.2em;">Component failed to render</strong>
13
- <p style="margin: 0.75rem 0 0;">
14
- <code>${component}</code><br>
17
+ <strong style="font-size: 1.2em;">Component failed to render${ssr ? ' server-side' : ''}</strong>
18
+
19
+ <p class="error-message"
20
+ style="margin: 0.4rem 0 0.4rem;"
21
+ >
15
22
  ${error.message || 'Unknown rendering error'}
16
23
  </p>
17
- <small style="color: #7f1d1d; opacity: 0.8;">
18
- Check browser console for full details. (Dev mode only?)
24
+ <div style="display: block;">
25
+ <code style="margin: 0.75rem 0 0;">${component}</code><br>
26
+ </div>
27
+ <small style="color: #7f1d1d; opacity: 0.8; margin-top: 1rem; display: block;">
28
+ ${ssr ? ssrHint : hint}
19
29
  </small>
20
30
  </div>
21
31
  `)