houdini-react 1.2.25 → 1.2.27
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.
- package/build/plugin-cjs/index.js +2 -3
- package/build/plugin-esm/index.js +2 -3
- package/build/runtime/index.d.ts +2 -1
- package/build/runtime/routing/Router.d.ts +2 -1
- package/build/runtime/server/index.d.ts +17 -0
- package/build/runtime/server/renderToStream/createBuffer.d.ts +17 -0
- package/build/runtime/server/renderToStream/createPipeWrapper.d.ts +12 -0
- package/build/runtime/server/renderToStream/createReadableWrapper.d.ts +6 -0
- package/build/runtime/server/renderToStream/loadNodeStreamModule.d.ts +10 -0
- package/build/runtime/server/renderToStream/resolveSeoStrategy.d.ts +9 -0
- package/build/runtime/server/renderToStream.d.ts +28 -0
- package/build/runtime/server/shared/initData.d.ts +8 -0
- package/build/runtime/server/shared/key.d.ts +4 -0
- package/build/runtime/server/shared/utils.d.ts +3 -0
- package/build/runtime/server/useStream.d.ts +9 -0
- package/build/runtime/server/utils/assert.d.ts +15 -0
- package/build/runtime/server/utils/createErrorWithCleanStackTrace.d.ts +2 -0
- package/build/runtime/server/utils/debug.d.ts +14 -0
- package/build/runtime/server/utils/getGlobalVariable.d.ts +4 -0
- package/build/runtime/server/utils/isBrowser.d.ts +2 -0
- package/build/runtime/server/utils/isCallable.d.ts +2 -0
- package/build/runtime/server/utils/isClientSide.d.ts +2 -0
- package/build/runtime/server/utils/isPromise.d.ts +1 -0
- package/build/runtime/server/utils/isServerSide.d.ts +2 -0
- package/build/runtime/server/utils/objectAssign.d.ts +2 -0
- package/build/runtime/server/utils/projectInfo.d.ts +10 -0
- package/build/runtime/server/utils.d.ts +4 -0
- package/build/runtime-cjs/index.d.ts +2 -1
- package/build/runtime-cjs/index.js +11 -2
- package/build/runtime-cjs/routing/Router.d.ts +2 -1
- package/build/runtime-cjs/routing/Router.js +8 -7
- package/build/runtime-cjs/server/index.d.ts +17 -0
- package/build/runtime-cjs/server/index.js +28 -0
- package/build/runtime-cjs/server/renderToStream/createBuffer.d.ts +17 -0
- package/build/runtime-cjs/server/renderToStream/createBuffer.js +101 -0
- package/build/runtime-cjs/server/renderToStream/createPipeWrapper.d.ts +12 -0
- package/build/runtime-cjs/server/renderToStream/createPipeWrapper.js +90 -0
- package/build/runtime-cjs/server/renderToStream/createReadableWrapper.d.ts +6 -0
- package/build/runtime-cjs/server/renderToStream/createReadableWrapper.js +85 -0
- package/build/runtime-cjs/server/renderToStream/loadNodeStreamModule.d.ts +10 -0
- package/build/runtime-cjs/server/renderToStream/loadNodeStreamModule.js +51 -0
- package/build/runtime-cjs/server/renderToStream/resolveSeoStrategy.d.ts +9 -0
- package/build/runtime-cjs/server/renderToStream/resolveSeoStrategy.js +44 -0
- package/build/runtime-cjs/server/renderToStream.d.ts +28 -0
- package/build/runtime-cjs/server/renderToStream.js +183 -0
- package/build/runtime-cjs/server/shared/initData.d.ts +8 -0
- package/build/runtime-cjs/server/shared/initData.js +28 -0
- package/build/runtime-cjs/server/shared/key.d.ts +4 -0
- package/build/runtime-cjs/server/shared/key.js +45 -0
- package/build/runtime-cjs/server/shared/utils.d.ts +3 -0
- package/build/runtime-cjs/server/shared/utils.js +20 -0
- package/build/runtime-cjs/server/useStream.d.ts +9 -0
- package/build/runtime-cjs/server/useStream.js +44 -0
- package/build/runtime-cjs/server/utils/assert.d.ts +15 -0
- package/build/runtime-cjs/server/utils/assert.js +119 -0
- package/build/runtime-cjs/server/utils/createErrorWithCleanStackTrace.d.ts +2 -0
- package/build/runtime-cjs/server/utils/createErrorWithCleanStackTrace.js +62 -0
- package/build/runtime-cjs/server/utils/debug.d.ts +14 -0
- package/build/runtime-cjs/server/utils/debug.js +112 -0
- package/build/runtime-cjs/server/utils/getGlobalVariable.d.ts +4 -0
- package/build/runtime-cjs/server/utils/getGlobalVariable.js +32 -0
- package/build/runtime-cjs/server/utils/isBrowser.d.ts +2 -0
- package/build/runtime-cjs/server/utils/isBrowser.js +30 -0
- package/build/runtime-cjs/server/utils/isCallable.d.ts +2 -0
- package/build/runtime-cjs/server/utils/isCallable.js +30 -0
- package/build/runtime-cjs/server/utils/isClientSide.d.ts +2 -0
- package/build/runtime-cjs/server/utils/isClientSide.js +30 -0
- package/build/runtime-cjs/server/utils/isPromise.d.ts +1 -0
- package/build/runtime-cjs/server/utils/isPromise.js +31 -0
- package/build/runtime-cjs/server/utils/isServerSide.d.ts +2 -0
- package/build/runtime-cjs/server/utils/isServerSide.js +31 -0
- package/build/runtime-cjs/server/utils/objectAssign.d.ts +2 -0
- package/build/runtime-cjs/server/utils/objectAssign.js +30 -0
- package/build/runtime-cjs/server/utils/projectInfo.d.ts +10 -0
- package/build/runtime-cjs/server/utils/projectInfo.js +37 -0
- package/build/runtime-cjs/server/utils.d.ts +4 -0
- package/build/runtime-cjs/server/utils.js +21 -0
- package/build/runtime-esm/index.d.ts +2 -1
- package/build/runtime-esm/index.js +11 -2
- package/build/runtime-esm/routing/Router.d.ts +2 -1
- package/build/runtime-esm/routing/Router.js +8 -7
- package/build/runtime-esm/server/index.d.ts +17 -0
- package/build/runtime-esm/server/index.js +4 -0
- package/build/runtime-esm/server/renderToStream/createBuffer.d.ts +17 -0
- package/build/runtime-esm/server/renderToStream/createBuffer.js +77 -0
- package/build/runtime-esm/server/renderToStream/createPipeWrapper.d.ts +12 -0
- package/build/runtime-esm/server/renderToStream/createPipeWrapper.js +66 -0
- package/build/runtime-esm/server/renderToStream/createReadableWrapper.d.ts +6 -0
- package/build/runtime-esm/server/renderToStream/createReadableWrapper.js +61 -0
- package/build/runtime-esm/server/renderToStream/loadNodeStreamModule.d.ts +10 -0
- package/build/runtime-esm/server/renderToStream/loadNodeStreamModule.js +20 -0
- package/build/runtime-esm/server/renderToStream/resolveSeoStrategy.d.ts +9 -0
- package/build/runtime-esm/server/renderToStream/resolveSeoStrategy.js +20 -0
- package/build/runtime-esm/server/renderToStream.d.ts +28 -0
- package/build/runtime-esm/server/renderToStream.js +152 -0
- package/build/runtime-esm/server/shared/initData.d.ts +8 -0
- package/build/runtime-esm/server/shared/initData.js +4 -0
- package/build/runtime-esm/server/shared/key.d.ts +4 -0
- package/build/runtime-esm/server/shared/key.js +20 -0
- package/build/runtime-esm/server/shared/utils.d.ts +3 -0
- package/build/runtime-esm/server/shared/utils.js +3 -0
- package/build/runtime-esm/server/useStream.d.ts +9 -0
- package/build/runtime-esm/server/useStream.js +13 -0
- package/build/runtime-esm/server/utils/assert.d.ts +15 -0
- package/build/runtime-esm/server/utils/assert.js +91 -0
- package/build/runtime-esm/server/utils/createErrorWithCleanStackTrace.d.ts +2 -0
- package/build/runtime-esm/server/utils/createErrorWithCleanStackTrace.js +38 -0
- package/build/runtime-esm/server/utils/debug.d.ts +14 -0
- package/build/runtime-esm/server/utils/debug.js +87 -0
- package/build/runtime-esm/server/utils/getGlobalVariable.d.ts +4 -0
- package/build/runtime-esm/server/utils/getGlobalVariable.js +8 -0
- package/build/runtime-esm/server/utils/isBrowser.d.ts +2 -0
- package/build/runtime-esm/server/utils/isBrowser.js +6 -0
- package/build/runtime-esm/server/utils/isCallable.d.ts +2 -0
- package/build/runtime-esm/server/utils/isCallable.js +6 -0
- package/build/runtime-esm/server/utils/isClientSide.d.ts +2 -0
- package/build/runtime-esm/server/utils/isClientSide.js +6 -0
- package/build/runtime-esm/server/utils/isPromise.d.ts +1 -0
- package/build/runtime-esm/server/utils/isPromise.js +7 -0
- package/build/runtime-esm/server/utils/isServerSide.d.ts +2 -0
- package/build/runtime-esm/server/utils/isServerSide.js +7 -0
- package/build/runtime-esm/server/utils/objectAssign.d.ts +2 -0
- package/build/runtime-esm/server/utils/objectAssign.js +6 -0
- package/build/runtime-esm/server/utils/projectInfo.d.ts +10 -0
- package/build/runtime-esm/server/utils/projectInfo.js +13 -0
- package/build/runtime-esm/server/utils.d.ts +4 -0
- package/build/runtime-esm/server/utils.js +4 -0
- package/package.json +4 -4
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { createPipeWrapper } from "./renderToStream/createPipeWrapper";
|
|
3
|
+
import { createReadableWrapper } from "./renderToStream/createReadableWrapper";
|
|
4
|
+
import { nodeStreamModuleIsAvailable } from "./renderToStream/loadNodeStreamModule";
|
|
5
|
+
import { resolveSeoStrategy } from "./renderToStream/resolveSeoStrategy";
|
|
6
|
+
import { createDebugger } from "./utils";
|
|
7
|
+
const debug = createDebugger("react-streaming:flow");
|
|
8
|
+
const globalConfig = globalThis.__react_streaming = globalThis.__react_streaming || {
|
|
9
|
+
disable: false
|
|
10
|
+
};
|
|
11
|
+
function disable() {
|
|
12
|
+
globalConfig.disable = true;
|
|
13
|
+
}
|
|
14
|
+
async function renderToStream(element, options = {}) {
|
|
15
|
+
const buffer = [];
|
|
16
|
+
let injectToStream = (chunk) => buffer.push(chunk);
|
|
17
|
+
element = React.cloneElement(element, { injectToStream });
|
|
18
|
+
const disable2 = globalConfig.disable || (options.disable ?? resolveSeoStrategy(options).disableStream);
|
|
19
|
+
const webStream = options.webStream ?? !await nodeStreamModuleIsAvailable();
|
|
20
|
+
debug(`disable === ${disable2} && webStream === ${webStream}`);
|
|
21
|
+
let result;
|
|
22
|
+
const resultPartial = { disabled: disable2 };
|
|
23
|
+
if (!webStream) {
|
|
24
|
+
result = { ...resultPartial, ...await renderToNodeStream(element, disable2, options) };
|
|
25
|
+
} else {
|
|
26
|
+
result = { ...resultPartial, ...await renderToWebStream(element, disable2, options) };
|
|
27
|
+
}
|
|
28
|
+
injectToStream = result.injectToStream;
|
|
29
|
+
buffer.forEach((chunk) => injectToStream(chunk));
|
|
30
|
+
buffer.length = 0;
|
|
31
|
+
debug("promise `await renderToStream()` resolved");
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
async function renderToNodeStream(element, disable2, options) {
|
|
35
|
+
debug("creating Node.js Stream Pipe");
|
|
36
|
+
let onAllReady;
|
|
37
|
+
const allReady = new Promise((r) => {
|
|
38
|
+
onAllReady = () => r();
|
|
39
|
+
});
|
|
40
|
+
let onShellReady;
|
|
41
|
+
const shellReady = new Promise((r) => {
|
|
42
|
+
onShellReady = () => r();
|
|
43
|
+
});
|
|
44
|
+
let didError = false;
|
|
45
|
+
let firstErr = null;
|
|
46
|
+
let reactBug = null;
|
|
47
|
+
const onError = (err) => {
|
|
48
|
+
debug("[react] onError() / onShellError()");
|
|
49
|
+
didError = true;
|
|
50
|
+
firstErr ??= err;
|
|
51
|
+
onShellReady();
|
|
52
|
+
afterReactBugCatch(() => {
|
|
53
|
+
if (err !== reactBug) {
|
|
54
|
+
options.onBoundaryError?.(err);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
const renderToPipeableStream = options.renderToPipeableStream ?? (await import("react-dom/server.node")).renderToPipeableStream;
|
|
59
|
+
const { pipe: pipeOriginal } = renderToPipeableStream(element, {
|
|
60
|
+
onShellReady() {
|
|
61
|
+
debug("[react] onShellReady()");
|
|
62
|
+
onShellReady();
|
|
63
|
+
},
|
|
64
|
+
onAllReady() {
|
|
65
|
+
debug("[react] onAllReady()");
|
|
66
|
+
onShellReady();
|
|
67
|
+
onAllReady();
|
|
68
|
+
},
|
|
69
|
+
onShellError: onError,
|
|
70
|
+
onError
|
|
71
|
+
});
|
|
72
|
+
let promiseResolved = false;
|
|
73
|
+
const { pipeForUser, injectToStream, streamEnd } = await createPipeWrapper(pipeOriginal, {
|
|
74
|
+
onReactBug(err) {
|
|
75
|
+
debug("react bug");
|
|
76
|
+
didError = true;
|
|
77
|
+
firstErr ??= err;
|
|
78
|
+
reactBug = err;
|
|
79
|
+
if (reactBug !== firstErr || promiseResolved) {
|
|
80
|
+
console.error(reactBug);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
await shellReady;
|
|
85
|
+
if (didError)
|
|
86
|
+
throw firstErr;
|
|
87
|
+
if (disable2)
|
|
88
|
+
await allReady;
|
|
89
|
+
if (didError)
|
|
90
|
+
throw firstErr;
|
|
91
|
+
promiseResolved = true;
|
|
92
|
+
return {
|
|
93
|
+
pipe: pipeForUser,
|
|
94
|
+
readable: null,
|
|
95
|
+
streamEnd: wrapStreamEnd(streamEnd, didError),
|
|
96
|
+
injectToStream
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async function renderToWebStream(element, disable2, options) {
|
|
100
|
+
debug("creating Web Stream Pipe");
|
|
101
|
+
let didError = false;
|
|
102
|
+
let firstErr = null;
|
|
103
|
+
let reactBug = null;
|
|
104
|
+
const onError = (err) => {
|
|
105
|
+
didError = true;
|
|
106
|
+
firstErr = firstErr || err;
|
|
107
|
+
afterReactBugCatch(() => {
|
|
108
|
+
if (err !== reactBug) {
|
|
109
|
+
options.onBoundaryError?.(err);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
const renderToReadableStream = options.renderToReadableStream ?? (await import("react-dom/server.browser")).renderToReadableStream;
|
|
114
|
+
const readableOriginal = await renderToReadableStream(element, { onError });
|
|
115
|
+
const { allReady } = readableOriginal;
|
|
116
|
+
let promiseResolved = false;
|
|
117
|
+
allReady.catch((err) => {
|
|
118
|
+
debug("react bug");
|
|
119
|
+
didError = true;
|
|
120
|
+
firstErr = firstErr || err;
|
|
121
|
+
reactBug = err;
|
|
122
|
+
if (reactBug !== firstErr || promiseResolved) {
|
|
123
|
+
console.error(reactBug);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
if (didError)
|
|
127
|
+
throw firstErr;
|
|
128
|
+
if (disable2)
|
|
129
|
+
await allReady;
|
|
130
|
+
if (didError)
|
|
131
|
+
throw firstErr;
|
|
132
|
+
const { readableForUser, streamEnd, injectToStream } = createReadableWrapper(readableOriginal);
|
|
133
|
+
promiseResolved = true;
|
|
134
|
+
return {
|
|
135
|
+
readable: readableForUser,
|
|
136
|
+
pipe: null,
|
|
137
|
+
streamEnd: wrapStreamEnd(streamEnd, didError),
|
|
138
|
+
injectToStream
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function afterReactBugCatch(fn) {
|
|
142
|
+
setTimeout(() => {
|
|
143
|
+
fn();
|
|
144
|
+
}, 0);
|
|
145
|
+
}
|
|
146
|
+
function wrapStreamEnd(streamEnd, didError) {
|
|
147
|
+
return streamEnd.then(() => new Promise((r) => setTimeout(r, 0))).then(() => !didError);
|
|
148
|
+
}
|
|
149
|
+
export {
|
|
150
|
+
disable,
|
|
151
|
+
renderToStream
|
|
152
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { isCallable } from "../utils/isCallable";
|
|
2
|
+
import { assertUsage } from "./utils";
|
|
3
|
+
function stringifyKey(key) {
|
|
4
|
+
const keyString = JSON.stringify(key);
|
|
5
|
+
return keyString;
|
|
6
|
+
}
|
|
7
|
+
function assertKey(keyValue) {
|
|
8
|
+
assertUsage(
|
|
9
|
+
keyValue,
|
|
10
|
+
`[useAsync(key, asyncFn)] You provided a \`key\` with the value \`${keyValue}\` which is forbidden.`
|
|
11
|
+
);
|
|
12
|
+
assertUsage(
|
|
13
|
+
!isCallable(keyValue),
|
|
14
|
+
`[useAsync(key, asyncFn)] You provided a \`key\` that is a function which is forbidden.`
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
assertKey,
|
|
19
|
+
stringifyKey
|
|
20
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export { useStream };
|
|
3
|
+
export { StreamProvider };
|
|
4
|
+
export type { StreamUtils };
|
|
5
|
+
type StreamUtils = {
|
|
6
|
+
injectToStream: (htmlChunk: string) => void;
|
|
7
|
+
};
|
|
8
|
+
declare const StreamProvider: React.Provider<StreamUtils | null>;
|
|
9
|
+
declare function useStream(): StreamUtils | null;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React, { useContext } from "react";
|
|
2
|
+
import { assert } from "./utils";
|
|
3
|
+
const StreamContext = React.createContext(null);
|
|
4
|
+
const StreamProvider = StreamContext.Provider;
|
|
5
|
+
function useStream() {
|
|
6
|
+
const streamUtils = useContext(StreamContext);
|
|
7
|
+
assert(streamUtils);
|
|
8
|
+
return streamUtils;
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
StreamProvider,
|
|
12
|
+
useStream
|
|
13
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { assert };
|
|
2
|
+
export { assertUsage };
|
|
3
|
+
export { assertWarning };
|
|
4
|
+
export { assertInfo };
|
|
5
|
+
export { getProjectError };
|
|
6
|
+
declare function assert(condition: unknown, debugInfo?: unknown): asserts condition;
|
|
7
|
+
declare function assertUsage(condition: unknown, errorMessage: string): asserts condition;
|
|
8
|
+
declare function getProjectError(errorMessage: string): Error;
|
|
9
|
+
declare function assertWarning(condition: unknown, errorMessage: string, { onlyOnce, showStackTrace }: {
|
|
10
|
+
onlyOnce: boolean | string;
|
|
11
|
+
showStackTrace?: true;
|
|
12
|
+
}): void;
|
|
13
|
+
declare function assertInfo(condition: unknown, errorMessage: string, { onlyOnce }: {
|
|
14
|
+
onlyOnce: boolean;
|
|
15
|
+
}): void;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { createErrorWithCleanStackTrace } from "./createErrorWithCleanStackTrace";
|
|
2
|
+
import { projectInfo } from "./projectInfo";
|
|
3
|
+
const errorPrefix = `[${projectInfo.npmPackageName}@${projectInfo.projectVersion}]`;
|
|
4
|
+
const internalErrorPrefix = `${errorPrefix}[Bug]`;
|
|
5
|
+
const usageErrorPrefix = `${errorPrefix}[Wrong Usage]`;
|
|
6
|
+
const warningPrefix = `${errorPrefix}[Warning]`;
|
|
7
|
+
const infoPrefix = `${errorPrefix}[Info]`;
|
|
8
|
+
const numberOfStackTraceLinesToRemove = 2;
|
|
9
|
+
function assert(condition, debugInfo) {
|
|
10
|
+
if (condition) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const debugStr = (() => {
|
|
14
|
+
if (!debugInfo) {
|
|
15
|
+
return "";
|
|
16
|
+
}
|
|
17
|
+
const debugInfoSerialized = typeof debugInfo === "string" ? debugInfo : "`" + JSON.stringify(debugInfo) + "`";
|
|
18
|
+
return `Debug info (this is for the ${projectInfo.projectName} maintainers; you can ignore this): ${debugInfoSerialized}.`;
|
|
19
|
+
})();
|
|
20
|
+
const internalError = createErrorWithCleanStackTrace(
|
|
21
|
+
[
|
|
22
|
+
`${internalErrorPrefix} You stumbled upon a bug in ${projectInfo.projectName}'s source code.`,
|
|
23
|
+
`Reach out at ${projectInfo.githubRepository}/issues/new or ${projectInfo.discordInviteToolChannel} and include this error stack (the error stack is usually enough to fix the problem).`,
|
|
24
|
+
"A maintainer will fix the bug (usually under 24 hours).",
|
|
25
|
+
`Do not hesitate to reach out as it makes ${projectInfo.projectName} more robust.`,
|
|
26
|
+
debugStr
|
|
27
|
+
].join(" "),
|
|
28
|
+
numberOfStackTraceLinesToRemove
|
|
29
|
+
);
|
|
30
|
+
throw internalError;
|
|
31
|
+
}
|
|
32
|
+
function assertUsage(condition, errorMessage) {
|
|
33
|
+
if (condition) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const whiteSpace = errorMessage.startsWith("[") ? "" : " ";
|
|
37
|
+
const usageError = createErrorWithCleanStackTrace(
|
|
38
|
+
`${usageErrorPrefix}${whiteSpace}${errorMessage}`,
|
|
39
|
+
numberOfStackTraceLinesToRemove
|
|
40
|
+
);
|
|
41
|
+
throw usageError;
|
|
42
|
+
}
|
|
43
|
+
function getProjectError(errorMessage) {
|
|
44
|
+
const pluginError = createErrorWithCleanStackTrace(
|
|
45
|
+
`${errorPrefix} ${errorMessage}`,
|
|
46
|
+
numberOfStackTraceLinesToRemove
|
|
47
|
+
);
|
|
48
|
+
return pluginError;
|
|
49
|
+
}
|
|
50
|
+
let alreadyLogged = /* @__PURE__ */ new Set();
|
|
51
|
+
function assertWarning(condition, errorMessage, { onlyOnce, showStackTrace }) {
|
|
52
|
+
if (condition) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const msg = `${warningPrefix} ${errorMessage}`;
|
|
56
|
+
if (onlyOnce) {
|
|
57
|
+
const key = onlyOnce === true ? msg : onlyOnce;
|
|
58
|
+
if (alreadyLogged.has(key)) {
|
|
59
|
+
return;
|
|
60
|
+
} else {
|
|
61
|
+
alreadyLogged.add(key);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (showStackTrace) {
|
|
65
|
+
console.warn(new Error(msg));
|
|
66
|
+
} else {
|
|
67
|
+
console.warn(msg);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function assertInfo(condition, errorMessage, { onlyOnce }) {
|
|
71
|
+
if (condition) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const msg = `${infoPrefix} ${errorMessage}`;
|
|
75
|
+
if (onlyOnce) {
|
|
76
|
+
const key = msg;
|
|
77
|
+
if (alreadyLogged.has(key)) {
|
|
78
|
+
return;
|
|
79
|
+
} else {
|
|
80
|
+
alreadyLogged.add(key);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
console.log(msg);
|
|
84
|
+
}
|
|
85
|
+
export {
|
|
86
|
+
assert,
|
|
87
|
+
assertInfo,
|
|
88
|
+
assertUsage,
|
|
89
|
+
assertWarning,
|
|
90
|
+
getProjectError
|
|
91
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
function createErrorWithCleanStackTrace(errorMessage, numberOfStackTraceLinesToRemove) {
|
|
2
|
+
let err;
|
|
3
|
+
{
|
|
4
|
+
var stackTraceLimit__original = Error.stackTraceLimit;
|
|
5
|
+
Error.stackTraceLimit = Infinity;
|
|
6
|
+
err = new Error(errorMessage);
|
|
7
|
+
Error.stackTraceLimit = stackTraceLimit__original;
|
|
8
|
+
}
|
|
9
|
+
err.stack = clean(err.stack, numberOfStackTraceLinesToRemove);
|
|
10
|
+
return err;
|
|
11
|
+
}
|
|
12
|
+
function clean(errStack, numberOfStackTraceLinesToRemove) {
|
|
13
|
+
if (!errStack) {
|
|
14
|
+
return errStack;
|
|
15
|
+
}
|
|
16
|
+
const stackLines = splitByLine(errStack);
|
|
17
|
+
let linesRemoved = 0;
|
|
18
|
+
const stackLine__cleaned = stackLines.filter((line) => {
|
|
19
|
+
if (line.includes(" (internal/") || line.includes(" (node:internal")) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
if (linesRemoved < numberOfStackTraceLinesToRemove && isStackTraceLine(line)) {
|
|
23
|
+
linesRemoved++;
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return true;
|
|
27
|
+
}).join("\n");
|
|
28
|
+
return stackLine__cleaned;
|
|
29
|
+
}
|
|
30
|
+
function isStackTraceLine(line) {
|
|
31
|
+
return line.startsWith(" at ");
|
|
32
|
+
}
|
|
33
|
+
function splitByLine(str) {
|
|
34
|
+
return str.split(/\r?\n/);
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
createErrorWithCleanStackTrace
|
|
38
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { createDebugger };
|
|
2
|
+
export { isDebugEnabled };
|
|
3
|
+
export type { Debug };
|
|
4
|
+
type Debug = ReturnType<typeof createDebugger>;
|
|
5
|
+
type Options = {
|
|
6
|
+
serialization?: {
|
|
7
|
+
emptyArray?: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
declare function createDebugger(namespace: string, optionsGlobal?: Options): ((msg: string, info?: unknown) => void) & {
|
|
11
|
+
options: (options: Options) => (msg: string, info?: unknown) => void;
|
|
12
|
+
isEnabled: boolean;
|
|
13
|
+
};
|
|
14
|
+
declare function isDebugEnabled(namespace: string): boolean;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { assert } from "./assert";
|
|
2
|
+
import { isBrowser } from "./isBrowser";
|
|
3
|
+
import { isCallable } from "./isCallable";
|
|
4
|
+
import { objectAssign } from "./objectAssign";
|
|
5
|
+
assert(!isBrowser(), "utils/debug.js loaded in browser");
|
|
6
|
+
globalThis.__brillout_debug_createDebugger = createDebugger;
|
|
7
|
+
function createDebugger(namespace, optionsGlobal) {
|
|
8
|
+
const debugWithOptions = (options) => {
|
|
9
|
+
return (msg, info) => {
|
|
10
|
+
if (!isDebugEnabled(namespace))
|
|
11
|
+
return;
|
|
12
|
+
if (info !== void 0) {
|
|
13
|
+
msg += strInfo(info, { ...optionsGlobal, ...options });
|
|
14
|
+
}
|
|
15
|
+
console.log("\x1B[1m%s\x1B[0m", namespace, msg);
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
const debug = (msg, info) => debugWithOptions({})(msg, info);
|
|
19
|
+
objectAssign(debug, { options: debugWithOptions, isEnabled: isDebugEnabled(namespace) });
|
|
20
|
+
return debug;
|
|
21
|
+
}
|
|
22
|
+
function isDebugEnabled(namespace) {
|
|
23
|
+
let DEBUG;
|
|
24
|
+
try {
|
|
25
|
+
DEBUG = process.env.DEBUG;
|
|
26
|
+
} catch {
|
|
27
|
+
}
|
|
28
|
+
return DEBUG?.includes(namespace) ?? false;
|
|
29
|
+
}
|
|
30
|
+
function strInfo(info, options) {
|
|
31
|
+
if (info === void 0) {
|
|
32
|
+
return void 0;
|
|
33
|
+
}
|
|
34
|
+
let str = "\n";
|
|
35
|
+
if (typeof info === "string") {
|
|
36
|
+
str += info;
|
|
37
|
+
} else if (Array.isArray(info)) {
|
|
38
|
+
if (info.length === 0) {
|
|
39
|
+
str += options.serialization?.emptyArray ?? "[]";
|
|
40
|
+
} else {
|
|
41
|
+
str += info.map(strUnknown).join("\n");
|
|
42
|
+
}
|
|
43
|
+
} else {
|
|
44
|
+
str += strUnknown(info);
|
|
45
|
+
}
|
|
46
|
+
str = pad(str);
|
|
47
|
+
return str;
|
|
48
|
+
}
|
|
49
|
+
function pad(str) {
|
|
50
|
+
const PADDING = " ";
|
|
51
|
+
const WIDTH = process.stdout.columns;
|
|
52
|
+
const lines = [];
|
|
53
|
+
str.split("\n").forEach((line) => {
|
|
54
|
+
if (!WIDTH) {
|
|
55
|
+
lines.push(line);
|
|
56
|
+
} else {
|
|
57
|
+
chunk(line, WIDTH - PADDING.length).forEach((chunk2) => {
|
|
58
|
+
lines.push(chunk2);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return lines.join("\n" + PADDING);
|
|
63
|
+
}
|
|
64
|
+
function chunk(str, size) {
|
|
65
|
+
if (str.length <= size) {
|
|
66
|
+
return [str];
|
|
67
|
+
}
|
|
68
|
+
const chunks = str.match(new RegExp(".{1," + size + "}", "g"));
|
|
69
|
+
assert(chunks);
|
|
70
|
+
return chunks;
|
|
71
|
+
}
|
|
72
|
+
function strUnknown(thing) {
|
|
73
|
+
return typeof thing === "string" ? thing : strObj(thing);
|
|
74
|
+
}
|
|
75
|
+
function strObj(obj, newLines = false) {
|
|
76
|
+
return JSON.stringify(obj, replaceFunctionSerializer, newLines ? 2 : void 0);
|
|
77
|
+
}
|
|
78
|
+
function replaceFunctionSerializer(_key, value) {
|
|
79
|
+
if (isCallable(value)) {
|
|
80
|
+
return value.toString().split(/\s+/).join(" ");
|
|
81
|
+
}
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
export {
|
|
85
|
+
createDebugger,
|
|
86
|
+
isDebugEnabled
|
|
87
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
function getGlobalVariable(key, defaultValue) {
|
|
2
|
+
globalThis.__react_streaming = globalThis.__react_streaming || {};
|
|
3
|
+
globalThis.__react_streaming[key] = globalThis.__react_streaming[key] || defaultValue;
|
|
4
|
+
return globalThis.__react_streaming[key];
|
|
5
|
+
}
|
|
6
|
+
export {
|
|
7
|
+
getGlobalVariable
|
|
8
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isPromise(val: unknown): val is Promise<unknown>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const projectInfo: {
|
|
2
|
+
projectName: "react-streaming";
|
|
3
|
+
projectVersion: string;
|
|
4
|
+
npmPackageName: "react-streaming";
|
|
5
|
+
githubRepository: "https://github.com/brillout/react-streaming";
|
|
6
|
+
discordInviteToolChannel: "https://discord.com/invite/H23tjRxFvx";
|
|
7
|
+
};
|
|
8
|
+
declare global {
|
|
9
|
+
var __vite_plugin_ssr__instances: undefined | string[];
|
|
10
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const PROJECT_VERSION = "0.3.14";
|
|
2
|
+
const projectInfo = {
|
|
3
|
+
projectName: "react-streaming",
|
|
4
|
+
projectVersion: PROJECT_VERSION,
|
|
5
|
+
npmPackageName: "react-streaming",
|
|
6
|
+
githubRepository: "https://github.com/brillout/react-streaming",
|
|
7
|
+
discordInviteToolChannel: "https://discord.com/invite/H23tjRxFvx"
|
|
8
|
+
};
|
|
9
|
+
globalThis.__vite_plugin_ssr__instances = globalThis.__vite_plugin_ssr__instances || [];
|
|
10
|
+
globalThis.__vite_plugin_ssr__instances.push(projectInfo.projectVersion);
|
|
11
|
+
export {
|
|
12
|
+
projectInfo
|
|
13
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "houdini-react",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.27",
|
|
4
4
|
"description": "The React plugin for houdini",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"@types/cookies": "^0.7.7",
|
|
22
22
|
"@types/estraverse": "^5.1.2",
|
|
23
23
|
"@types/express": "^4.17.17",
|
|
24
|
-
"@types/react-dom": "^18.0.
|
|
24
|
+
"@types/react-dom": "^18.0.11",
|
|
25
25
|
"next": "^13.0.1",
|
|
26
26
|
"scripts": "^1.0.0"
|
|
27
27
|
},
|
|
@@ -38,11 +38,11 @@
|
|
|
38
38
|
"graphql": "^15.8.0",
|
|
39
39
|
"graphql-yoga": "^4.0.4",
|
|
40
40
|
"react": "^18.2.0",
|
|
41
|
-
"react-
|
|
41
|
+
"react-dom": "^18.2.0",
|
|
42
42
|
"recast": "^0.23.1",
|
|
43
43
|
"rollup": "^3.7.4",
|
|
44
44
|
"use-deep-compare-effect": "^1.8.1",
|
|
45
|
-
"houdini": "^1.2.
|
|
45
|
+
"houdini": "^1.2.27"
|
|
46
46
|
},
|
|
47
47
|
"files": [
|
|
48
48
|
"build"
|