@solidjs/start 0.7.0 → 0.7.2

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 (115) hide show
  1. package/config/index.js +4 -4
  2. package/config/server-components.js +1 -1
  3. package/dist/client/StartClient.d.ts +3 -0
  4. package/{client/StartClient.tsx → dist/client/StartClient.jsx} +4 -9
  5. package/{client/index.ts → dist/client/index.d.ts} +0 -1
  6. package/dist/client/index.jsx +4 -0
  7. package/dist/client/islands.d.ts +3 -0
  8. package/{client/islands.ts → dist/client/islands.jsx} +1 -1
  9. package/dist/client/mount.d.ts +3 -0
  10. package/dist/client/mount.js +85 -0
  11. package/dist/client/spa/index.d.ts +5 -0
  12. package/dist/client/spa/index.jsx +6 -0
  13. package/dist/index.d.ts +4 -0
  14. package/dist/index.jsx +5 -0
  15. package/dist/middleware/index.d.ts +18 -0
  16. package/dist/middleware/index.js +40 -0
  17. package/dist/router/FileRoutes.d.ts +2 -0
  18. package/dist/router/FileRoutes.js +25 -0
  19. package/dist/router/index.jsx +2 -0
  20. package/dist/router/lazyRoute.d.ts +6 -0
  21. package/dist/router/lazyRoute.js +48 -0
  22. package/dist/router/routes.d.ts +25 -0
  23. package/dist/router/routes.js +51 -0
  24. package/dist/runtime/server-fns-runtime.d.ts +1 -0
  25. package/dist/runtime/server-fns-runtime.js +30 -0
  26. package/dist/runtime/server-handler.d.ts +2 -0
  27. package/dist/runtime/server-handler.js +242 -0
  28. package/dist/runtime/server-runtime.d.ts +3 -0
  29. package/dist/runtime/server-runtime.js +185 -0
  30. package/dist/server/StartServer.d.ts +5 -0
  31. package/dist/server/StartServer.jsx +78 -0
  32. package/dist/server/fetchEvent.d.ts +6 -0
  33. package/dist/server/fetchEvent.js +88 -0
  34. package/dist/server/handler.d.ts +3 -0
  35. package/dist/server/handler.js +98 -0
  36. package/dist/server/index.jsx +5 -0
  37. package/dist/server/islands/index.d.ts +19 -0
  38. package/dist/server/islands/index.jsx +62 -0
  39. package/dist/server/islands/utils.d.ts +1 -0
  40. package/dist/server/islands/utils.jsx +85 -0
  41. package/dist/server/pageEvent.d.ts +2 -0
  42. package/dist/server/pageEvent.js +43 -0
  43. package/dist/server/renderAsset.d.ts +2 -0
  44. package/dist/server/renderAsset.jsx +13 -0
  45. package/dist/server/serverFunction.d.ts +2 -0
  46. package/dist/server/serverFunction.jsx +4 -0
  47. package/dist/server/spa/StartServer.d.ts +5 -0
  48. package/dist/server/spa/StartServer.jsx +18 -0
  49. package/dist/server/spa/handler.d.ts +3 -0
  50. package/dist/server/spa/handler.js +17 -0
  51. package/{server/spa/index.ts → dist/server/spa/index.d.ts} +0 -1
  52. package/dist/server/spa/index.jsx +4 -0
  53. package/dist/server/types.d.ts +79 -0
  54. package/dist/server/types.js +1 -0
  55. package/dist/shared/ErrorBoundary.d.ts +2 -0
  56. package/dist/shared/ErrorBoundary.jsx +16 -0
  57. package/dist/shared/GET.d.ts +1 -0
  58. package/dist/shared/GET.js +5 -0
  59. package/dist/shared/HttpHeader.d.ts +6 -0
  60. package/dist/shared/HttpHeader.jsx +32 -0
  61. package/dist/shared/HttpStatusCode.d.ts +5 -0
  62. package/dist/shared/HttpStatusCode.jsx +12 -0
  63. package/dist/shared/clientOnly.d.ts +6 -0
  64. package/dist/shared/clientOnly.jsx +19 -0
  65. package/dist/shared/dev-overlay/CodeView.d.ts +7 -0
  66. package/dist/shared/dev-overlay/CodeView.jsx +71 -0
  67. package/dist/shared/dev-overlay/DevOverlayDialog.d.ts +9 -0
  68. package/dist/shared/dev-overlay/DevOverlayDialog.jsx +209 -0
  69. package/dist/shared/dev-overlay/createStackFrame.d.ts +9 -0
  70. package/dist/shared/dev-overlay/createStackFrame.js +56 -0
  71. package/dist/shared/dev-overlay/download.d.ts +1 -0
  72. package/dist/shared/dev-overlay/download.js +6 -0
  73. package/dist/shared/dev-overlay/get-source-map.d.ts +2 -0
  74. package/dist/shared/dev-overlay/get-source-map.js +25 -0
  75. package/dist/shared/dev-overlay/icons.d.ts +28 -0
  76. package/{shared/dev-overlay/icons.tsx → dist/shared/dev-overlay/icons.jsx} +35 -173
  77. package/dist/shared/dev-overlay/index.d.ts +5 -0
  78. package/dist/shared/dev-overlay/index.jsx +37 -0
  79. package/package.json +20 -22
  80. package/client/mount.ts +0 -99
  81. package/client/spa/index.ts +0 -10
  82. package/config/server-fns-runtime.ts +0 -28
  83. package/config/server-handler.ts +0 -261
  84. package/config/server-runtime.ts +0 -229
  85. package/middleware/index.ts +0 -70
  86. package/router/FileRoutes.ts +0 -35
  87. package/router/lazyRoute.ts +0 -55
  88. package/router/routes.ts +0 -87
  89. package/server/StartServer.tsx +0 -126
  90. package/server/fetchEvent.ts +0 -113
  91. package/server/handler.ts +0 -112
  92. package/server/islands/index.tsx +0 -103
  93. package/server/islands/utils.tsx +0 -89
  94. package/server/pageEvent.ts +0 -50
  95. package/server/renderAsset.tsx +0 -23
  96. package/server/serverFunction.tsx +0 -6
  97. package/server/spa/StartServer.tsx +0 -52
  98. package/server/spa/handler.ts +0 -24
  99. package/server/types.ts +0 -81
  100. package/shared/ErrorBoundary.tsx +0 -23
  101. package/shared/GET.ts +0 -5
  102. package/shared/HttpHeader.tsx +0 -35
  103. package/shared/HttpStatusCode.tsx +0 -19
  104. package/shared/clientOnly.tsx +0 -29
  105. package/shared/dev-overlay/CodeView.tsx +0 -95
  106. package/shared/dev-overlay/DevOverlayDialog.tsx +0 -280
  107. package/shared/dev-overlay/createStackFrame.ts +0 -77
  108. package/shared/dev-overlay/download.ts +0 -6
  109. package/shared/dev-overlay/env.d.ts +0 -4
  110. package/shared/dev-overlay/get-source-map.ts +0 -35
  111. package/shared/dev-overlay/index.tsx +0 -61
  112. package/shared/index.ts +0 -5
  113. /package/{router/index.ts → dist/router/index.d.ts} +0 -0
  114. /package/{server/index.ts → dist/server/index.d.ts} +0 -0
  115. /package/{shared → dist/shared}/dev-overlay/styles.css +0 -0
@@ -1,35 +0,0 @@
1
- // @refresh skip
2
- import { onCleanup } from "solid-js";
3
- import { getRequestEvent, isServer } from "solid-js/web";
4
- import type { PageEvent } from "../server/types";
5
-
6
- export interface HttpHeaderProps {
7
- name: string;
8
- value: string;
9
- append?: boolean;
10
- }
11
-
12
- export const HttpHeader = isServer
13
- ? (props: HttpHeaderProps) => {
14
- const event = getRequestEvent() as PageEvent;
15
-
16
- if (props.append) event.response.headers.append(props.name, props.value);
17
- else event.response.headers.set(props.name, props.value);
18
-
19
- onCleanup(() => {
20
- if (event.nativeEvent.handled) return;
21
- const value = event.response.headers.get(props.name);
22
- if (!value) return;
23
- if (!value.includes(", ")) {
24
- if (value === props.value) event.response.headers.delete(props.name);
25
- return;
26
- }
27
- const values = value.split(", ");
28
- const index = values.indexOf(props.value);
29
- index !== -1 && values.splice(index, 1);
30
- if (values.length) event.response.headers.set(props.name, values.join(","));
31
- else event.response.headers.delete(props.name);
32
- });
33
- return null;
34
- }
35
- : (_props: HttpHeaderProps) => null;
@@ -1,19 +0,0 @@
1
- // @refresh skip
2
- import { onCleanup } from "solid-js";
3
- import { getRequestEvent, isServer } from "solid-js/web";
4
- import type { PageEvent } from "../server/types";
5
-
6
- export interface HttpStatusCodeProps {
7
- code: number;
8
- text?: string;
9
- }
10
-
11
- export const HttpStatusCode = isServer
12
- ? (props: HttpStatusCodeProps) => {
13
- const event = getRequestEvent() as PageEvent;
14
- event.response.status = props.code;
15
- event.response.statusText = props.text;
16
- onCleanup(() => !event.nativeEvent.handled && (event.response.status = 200));
17
- return null;
18
- }
19
- : (_props: HttpStatusCodeProps) => null;
@@ -1,29 +0,0 @@
1
- // @refresh skip
2
- import type { Component, ComponentProps, JSX } from "solid-js";
3
- import { createMemo, createSignal, onMount, sharedConfig, splitProps, untrack } from "solid-js";
4
- import { isServer } from "solid-js/web";
5
-
6
- // not using Suspense
7
- export default function clientOnly<T extends Component<any>>(
8
- fn: () => Promise<{
9
- default: T;
10
- }>
11
- ) {
12
- if (isServer) return (props: ComponentProps<T> & { fallback?: JSX.Element }) => props.fallback;
13
-
14
- const [comp, setComp] = createSignal<T>();
15
- fn().then(m => setComp(() => m.default));
16
- return (props: ComponentProps<T>) => {
17
- let Comp: T | undefined;
18
- let m: boolean;
19
- const [, rest] = splitProps(props, ["fallback"]);
20
- if ((Comp = comp()) && !sharedConfig.context) return Comp(rest);
21
- const [mounted, setMounted] = createSignal(!sharedConfig.context);
22
- onMount(() => setMounted(true));
23
- return createMemo(
24
- () => (
25
- (Comp = comp()), (m = mounted()), untrack(() => (Comp && m ? Comp(rest) : props.fallback))
26
- )
27
- );
28
- };
29
- }
@@ -1,95 +0,0 @@
1
- // @refresh skip
2
- import type { BuiltinLanguage, Highlighter } from 'shikiji';
3
- import { getHighlighterCore, loadWasm } from 'shikiji/core';
4
- import { createEffect, createResource, type JSX } from 'solid-js';
5
-
6
- import url from 'shikiji/onig.wasm?url';
7
-
8
- import langJS from 'shikiji/langs/javascript.mjs';
9
- import langJSX from 'shikiji/langs/jsx.mjs';
10
- import langTSX from 'shikiji/langs/tsx.mjs';
11
- import langTS from 'shikiji/langs/typescript.mjs';
12
- import darkPlus from 'shikiji/themes/dark-plus.mjs';
13
-
14
- let HIGHLIGHTER: Highlighter;
15
-
16
- async function loadHighlighter() {
17
- if (!HIGHLIGHTER) {
18
- await loadWasm(await fetch(url))
19
- HIGHLIGHTER = await getHighlighterCore({
20
- themes: [
21
- darkPlus,
22
- ],
23
- langs: [
24
- langJS,
25
- langJSX,
26
- langTS,
27
- langTSX,
28
- ],
29
- });
30
- }
31
- return HIGHLIGHTER;
32
- }
33
-
34
- export interface CodeViewProps {
35
- fileName: string;
36
- content: string;
37
- line: number;
38
- }
39
-
40
- const RANGE = 8;
41
-
42
- export function CodeView(props: CodeViewProps): JSX.Element | null {
43
- const lines = () =>
44
- props.content.split('\n').map((item, index) => ({
45
- index: index + 1,
46
- line: item,
47
- }));
48
-
49
- const minLine = () => Math.max(props.line - (1 + RANGE), 0);
50
- const maxLine = () => Math.min(props.line + RANGE, lines().length - 1);
51
-
52
- let ref: HTMLDivElement | undefined;
53
-
54
- const [data] = createResource(() => (
55
- lines()
56
- .slice(minLine(), maxLine())
57
- .map(item => item.line)
58
- .join('\n')
59
- ) ,async (value) => {
60
- const highlighter = await loadHighlighter();
61
- const fileExtension = props.fileName
62
- .split(/[#?]/)[0]!
63
- .split('.')
64
- .pop()
65
- ?.trim();
66
- let lang = fileExtension as BuiltinLanguage;
67
- if (fileExtension === 'mjs' || fileExtension === 'cjs') {
68
- lang = 'js';
69
- }
70
- return highlighter.codeToHtml(value, {
71
- theme: 'dark-plus',
72
- lang,
73
- });
74
- });
75
-
76
- createEffect(() => {
77
- const result = data();
78
- if (ref && result) {
79
- ref.innerHTML = result;
80
-
81
- const lines = ref.querySelectorAll('span[class="line"]');
82
-
83
- for (let i = 0, len = lines.length; i < len; i++) {
84
- const el = lines[i] as HTMLElement;
85
- if ((props.line - minLine() - 1) === i) {
86
- el.classList.add('dev-overlay-error-line');
87
- }
88
- }
89
- }
90
- });
91
-
92
- return <div ref={ref} class="dev-overlay-code-view" style={{
93
- '--dev-overlay-code-view-start': minLine() + 1,
94
- }} />;
95
- }
@@ -1,280 +0,0 @@
1
- // @refresh skip
2
- import ErrorStackParser from 'error-stack-parser';
3
- import * as htmlToImage from 'html-to-image';
4
- import type { JSX } from 'solid-js';
5
- import { ErrorBoundary, For, Show, Suspense, createMemo, createSignal } from 'solid-js';
6
- import { Portal } from 'solid-js/web';
7
- import { Dialog, DialogOverlay, DialogPanel, Select, SelectOption } from 'terracotta';
8
- import info from '../../package.json';
9
- import { CodeView } from './CodeView';
10
- import { createStackFrame, type StackFrameSource } from './createStackFrame';
11
- import download from './download';
12
- import { ArrowLeftIcon, ArrowRightIcon, CameraIcon, DiscordIcon, GithubIcon, RefreshIcon, SolidStartIcon, ViewCompiledIcon, ViewOriginalIcon } from './icons';
13
- import './styles.css';
14
-
15
- export function classNames(...classes: (string | boolean | undefined)[]): string {
16
- return classes.filter(Boolean).join(' ');
17
- }
18
-
19
- interface ErrorInfoProps {
20
- error: unknown;
21
- }
22
-
23
- function ErrorInfo(props: ErrorInfoProps): JSX.Element {
24
- return (
25
- <Show when={props.error instanceof Error && props.error} keyed fallback={<span>{(props.error as Error).toString()}</span>}>
26
- {(current) => (
27
- <span class="dev-overlay-error-info">
28
- <span class="dev-overlay-error-info-name">{current.name}</span>
29
- <span class="dev-overlay-error-info-message">{current.message}</span>
30
- </span>
31
- )}
32
- </Show>
33
- );
34
- }
35
-
36
- interface StackFramesContentProps {
37
- error: Error;
38
- isCompiled: boolean;
39
- }
40
-
41
- function getFileName(source: string): string {
42
- try {
43
- const path = source.startsWith('/') ? new URL(source, 'file://') : new URL(source);
44
- const paths = path.pathname.split('/');
45
- return paths[paths.length - 1]!;
46
- } catch (error) {
47
- return getFileName(`/${source}`);
48
- }
49
- }
50
-
51
- function getFilePath(source: StackFrameSource) {
52
- const line = source.line ? `:${source.line}` : '';
53
- const column = source.column ? `:${source.column}` : '';
54
- return `${getFileName(source.source)}${line}${column}`;
55
- }
56
-
57
- function CodeFallback(): JSX.Element {
58
- return <div class="dev-overlay-stack-frames-code-fallback">
59
- <span>Source not available.</span>
60
- </div>;
61
- }
62
-
63
- function StackFramesContent(props: StackFramesContentProps) {
64
- const stackframes = ErrorStackParser.parse(props.error);
65
-
66
- const [selectedFrame, setSelectedFrame] = createSignal(stackframes[0]!);
67
-
68
- return (
69
- <div class="dev-overlay-stack-frames-content">
70
- <div class="dev-overlay-stack-frames-code">
71
- <ErrorBoundary fallback={null}>
72
- {(() => {
73
- const data = createStackFrame(selectedFrame(), () => props.isCompiled);
74
- return (
75
- <Suspense fallback={<CodeFallback />}>
76
- <Show when={data()} keyed fallback={<CodeFallback />}>
77
- {(source) => (
78
- <>
79
- <span class="dev-overlay-stack-frames-code-source">{source.source}</span>
80
- <div class="dev-overlay-stack-frames-code-container">
81
- <CodeView fileName={source.source} line={source.line} content={source.content} />
82
- </div>
83
- </>
84
- )}
85
- </Show>
86
- </Suspense>
87
- );
88
- })()}
89
- </ErrorBoundary>
90
- </div>
91
- <Select<ErrorStackParser.StackFrame>
92
- class="dev-overlay-stack-frames"
93
- value={selectedFrame()}
94
- onChange={setSelectedFrame}
95
- >
96
- <For each={stackframes}>
97
- {(current) => (
98
- <ErrorBoundary fallback={(
99
- <div class="dev-overlay-stack-frame">
100
- <span class="dev-overlay-stack-frame-function">{current.functionName ?? '<anonymous>'}</span>
101
- <span class="dev-overlay-stack-frame-file">{getFilePath({
102
- source: current.getFileName()!,
103
- content: '',
104
- line: current.getLineNumber()!,
105
- column: current.getColumnNumber()!,
106
- name: current.getFunctionName(),
107
- })}</span>
108
- </div>
109
- )}>
110
- {(() => {
111
- const data = createStackFrame(current, () => props.isCompiled);
112
- return (
113
- <Suspense>
114
- <Show when={data()} keyed>
115
- {(source) => (
116
- <SelectOption class="dev-overlay-stack-frame" value={current}>
117
- <span class="dev-overlay-stack-frame-function">{source.name ?? '<anonymous>'}</span>
118
- <span class="dev-overlay-stack-frame-file">{getFilePath(source)}</span>
119
- </SelectOption>
120
- )}
121
- </Show>
122
- </Suspense>
123
- );
124
- })()}
125
- </ErrorBoundary>
126
- )}
127
- </For>
128
- </Select>
129
- </div>
130
- );
131
- }
132
-
133
- interface StackFramesProps {
134
- error: unknown;
135
- isCompiled: boolean;
136
- }
137
-
138
- function StackFrames(props: StackFramesProps) {
139
- return (
140
- <Show when={props.error instanceof Error && props.error} keyed>
141
- {(current) => (
142
- <StackFramesContent error={current} isCompiled={props.isCompiled} />
143
- )}
144
- </Show>
145
- );
146
- }
147
-
148
- interface DevOverlayDialogProps {
149
- errors: any[];
150
- resetError: () => void;
151
- }
152
-
153
- const ISSUE_THREAD = 'https://github.com/solidjs/solid-start/issues/new';
154
- const DISCORD_INVITE = 'https://discord.com/invite/solidjs';
155
-
156
- export default function DevOverlayDialog(props: DevOverlayDialogProps): JSX.Element {
157
- const [currentPage, setCurrentPage] = createSignal(1);
158
- const [isCompiled, setIsCompiled] = createSignal(false);
159
- const length = createMemo(() => props.errors.length);
160
-
161
- const truncated = createMemo(() => {
162
- return Math.min(currentPage(), length());
163
- });
164
-
165
- function goPrev() {
166
- setCurrentPage((c) => {
167
- if (c > 1) {
168
- return c - 1;
169
- }
170
- return length();
171
- });
172
- }
173
-
174
- function goNext() {
175
- setCurrentPage((c) => {
176
- if (c < length()) {
177
- return c + 1;
178
- }
179
- return 1;
180
- });
181
- }
182
-
183
- function toggleIsCompiled() {
184
- setIsCompiled((c) => !c);
185
- }
186
-
187
- const [panel, setPanel] = createSignal<HTMLElement>();
188
-
189
- function downloadScreenshot() {
190
- const current = panel();
191
- if (current) {
192
- htmlToImage.toPng(current, {
193
- style: {
194
- transform: 'scale(0.75)',
195
- },
196
- }).then((url) => {
197
- download(url, 'start-screenshot.png');
198
- });
199
- }
200
- }
201
-
202
- function redirectToGithub() {
203
- const url = new URL(ISSUE_THREAD);
204
- url.searchParams.append('labels', 'bug');
205
- url.searchParams.append('labels', 'needs+triage');
206
- url.searchParams.append('template', 'bug.yml');
207
- url.searchParams.append('title', `[Bug?]:` + props.errors[truncated() - 1].toString());
208
- window.open(url, '_blank')!.focus();
209
- }
210
-
211
- function redirectToDiscord() {
212
- window.open(DISCORD_INVITE, '_blank')!.focus();
213
- }
214
-
215
- return (
216
- <Portal>
217
- <Dialog class="dev-overlay" isOpen>
218
- <div>
219
- <DialogOverlay class="dev-overlay-background"/>
220
- <DialogPanel ref={setPanel} class="dev-overlay-panel-container">
221
- <div class="dev-overlay-panel">
222
- <div class="dev-overlay-navbar">
223
- <div class="dev-overlay-navbar-left">
224
- <div class="dev-overlay-version">
225
- <div>
226
- <SolidStartIcon title="Solid Start Version" />
227
- </div>
228
- <span>{info.version as string}</span>
229
- </div>
230
- <Show when={props.errors.length > 1}>
231
- <div class="dev-overlay-pagination">
232
- <button class="dev-overlay-button" onClick={goPrev} type="button">
233
- <ArrowLeftIcon title="Go Previous" />
234
- </button>
235
- <div class="dev-overlay-page-counter">
236
- {`${truncated()} of ${props.errors.length}`}
237
- </div>
238
- <button class="dev-overlay-button" onClick={goNext} type="button">
239
- <ArrowRightIcon title="Go Next" />
240
- </button>
241
- </div>
242
- </Show>
243
- </div>
244
- <div class="dev-overlay-controls">
245
- <button class="dev-overlay-button" onClick={redirectToGithub} type="button">
246
- <GithubIcon title="Create an issue thread on Github" />
247
- </button>
248
- <button class="dev-overlay-button" onClick={redirectToDiscord} type="button">
249
- <DiscordIcon title="Join our Discord Channel" />
250
- </button>
251
- <button class="dev-overlay-button" onClick={downloadScreenshot} type="button">
252
- <CameraIcon title="Capture Error Overlay" />
253
- </button>
254
- <button class="dev-overlay-button" onClick={toggleIsCompiled} type="button">
255
- <Show when={isCompiled()} fallback={(
256
- <ViewOriginalIcon title="View Original Source" />
257
- )}>
258
- <ViewCompiledIcon title="View Compiled Source" />
259
- </Show>
260
- </button>
261
- <button class="dev-overlay-button" onClick={props.resetError} type="button">
262
- <RefreshIcon title="Reset Error" />
263
- </button>
264
- </div>
265
- </div>
266
- <Show when={props.errors[truncated() - 1]} keyed>
267
- {(current) => (
268
- <div class="dev-overlay-content">
269
- <ErrorInfo error={current} />
270
- <StackFrames error={current} isCompiled={isCompiled()} />
271
- </div>
272
- )}
273
- </Show>
274
- </div>
275
- </DialogPanel>
276
- </div>
277
- </Dialog>
278
- </Portal>
279
- );
280
- }
@@ -1,77 +0,0 @@
1
- import { createMemo, createResource, type Accessor } from "solid-js";
2
- import getSourceMap from "./get-source-map";
3
-
4
- export interface StackFrameSource {
5
- content: string;
6
- source: string;
7
- name?: string;
8
- line: number;
9
- column: number;
10
- }
11
-
12
- function getActualFileSource(path: string): string {
13
- if (path.startsWith('file://')) {
14
- return '/_build/@fs' + path.substring('file://'.length);
15
- }
16
- return path;
17
- }
18
-
19
- export function createStackFrame(
20
- stackframe: StackFrame,
21
- isCompiled: () => boolean,
22
- ) {
23
- const [data] = createResource(
24
- () => ({
25
- fileName: stackframe.fileName,
26
- line: stackframe.lineNumber,
27
- column: stackframe.columnNumber,
28
- functionName: stackframe.functionName,
29
- }),
30
- async source => {
31
- if (!source.fileName) {
32
- return null;
33
- }
34
- const response = await fetch(getActualFileSource(source.fileName));
35
- if (!response.ok) {
36
- return null;
37
- }
38
- const content = await response.text();
39
- const sourceMap = await getSourceMap(source.fileName, content);
40
- return {
41
- source,
42
- content,
43
- sourceMap,
44
- };
45
- },
46
- );
47
-
48
- const info = createMemo(() => {
49
- const current = data();
50
- if (!current) {
51
- return undefined;
52
- }
53
- const { source, content, sourceMap } = current;
54
-
55
- if (!isCompiled() && source.line && source.column && sourceMap) {
56
- const result = sourceMap.originalPositionFor({
57
- line: source.line,
58
- column: source.column,
59
- });
60
-
61
- return {
62
- ...result,
63
- content: sourceMap.sourceContentFor(result.source),
64
- } as StackFrameSource;
65
- }
66
-
67
- return {
68
- source: source.fileName,
69
- line: source.line,
70
- column: source.column,
71
- name: source.functionName,
72
- content,
73
- } as StackFrameSource;
74
- });
75
-
76
- return info as Accessor<StackFrameSource>;
77
- }
@@ -1,6 +0,0 @@
1
- export default function download(dataurl: string, filename: string) {
2
- const link = document.createElement("a");
3
- link.href = dataurl;
4
- link.download = filename;
5
- link.click();
6
- }
@@ -1,4 +0,0 @@
1
- declare module '*.json' {
2
- const data: Record<string, unknown>;
3
- export default data;
4
- }
@@ -1,35 +0,0 @@
1
- import { RawSourceMap, SourceMapConsumer } from 'source-map-js';
2
-
3
- const INLINE_SOURCEMAP_REGEX = /^data:application\/json[^,]+base64,/;
4
- const SOURCEMAP_REGEX =
5
- /(?:\/\/[@#][ \t]+sourceMappingURL=([^\s'"]+?)[ \t]*$)|(?:\/\*[@#][ \t]+sourceMappingURL=([^*]+?)[ \t]*(?:\*\/)[ \t]*$)/;
6
-
7
- export default async function getSourceMap(
8
- url: string,
9
- content: string,
10
- ): Promise<SourceMapConsumer | null> {
11
- const lines = content.split('\n');
12
- let sourceMapUrl: string | undefined;
13
- for (let i = lines.length - 1; i >= 0 && !sourceMapUrl; i--) {
14
- const result = lines[i]!.match(SOURCEMAP_REGEX);
15
- if (result) {
16
- sourceMapUrl = result[1];
17
- }
18
- }
19
-
20
- if (!sourceMapUrl) {
21
- return null;
22
- }
23
-
24
- if (
25
- !(INLINE_SOURCEMAP_REGEX.test(sourceMapUrl) || sourceMapUrl.startsWith('/'))
26
- ) {
27
- // Resolve path if it's a relative access
28
- const parsedURL = url.split('/');
29
- parsedURL[parsedURL.length - 1] = sourceMapUrl;
30
- sourceMapUrl = parsedURL.join('/');
31
- }
32
- const response = await fetch(sourceMapUrl);
33
- const rawSourceMap: RawSourceMap = await response.json();
34
- return new SourceMapConsumer(rawSourceMap);
35
- }
@@ -1,61 +0,0 @@
1
- // @refresh skip
2
- import {
3
- ErrorBoundary,
4
- Show,
5
- createEffect,
6
- createSignal,
7
- onCleanup,
8
- resetErrorBoundaries,
9
- type JSX
10
- } from "solid-js";
11
- import { HttpStatusCode } from "../HttpStatusCode";
12
- import clientOnly from "../clientOnly";
13
-
14
- export interface DevOverlayProps {
15
- children?: JSX.Element;
16
- }
17
-
18
- const DevOverlayDialog = /* #__PURE__ */ clientOnly(() => import("./DevOverlayDialog"));
19
-
20
- export function DevOverlay(props: DevOverlayProps): JSX.Element {
21
- const [errors, setErrors] = createSignal<unknown[]>([]);
22
-
23
- function resetError() {
24
- setErrors([]);
25
- resetErrorBoundaries();
26
- }
27
-
28
- function pushError(error: unknown) {
29
- console.error(error);
30
- setErrors(current => [error, ...current]);
31
- }
32
-
33
- createEffect(() => {
34
- const onErrorEvent = (error: ErrorEvent) => {
35
- pushError(error.error);
36
- };
37
-
38
- window.addEventListener("error", onErrorEvent);
39
-
40
- onCleanup(() => {
41
- window.removeEventListener("error", onErrorEvent);
42
- });
43
- });
44
-
45
- return (
46
- <>
47
- <ErrorBoundary
48
- fallback={error => {
49
- pushError(error);
50
- return <HttpStatusCode code={500} />;
51
- }}
52
- >
53
- {props.children}
54
- </ErrorBoundary>
55
- <Show when={errors().length}>
56
- <HttpStatusCode code={500} />
57
- <DevOverlayDialog errors={errors()} resetError={resetError} />
58
- </Show>
59
- </>
60
- );
61
- }
package/shared/index.ts DELETED
@@ -1,5 +0,0 @@
1
- export { GET } from "./GET";
2
- export { HttpHeader } from "./HttpHeader";
3
- export { HttpStatusCode } from "./HttpStatusCode";
4
- export { default as clientOnly } from "./clientOnly";
5
-
File without changes
File without changes
File without changes