@vizhub/runtime 0.0.1
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/README.md +173 -0
- package/package.json +37 -0
- package/src/computeSrcDoc.ts +68 -0
- package/src/index.ts +7 -0
- package/src/useRuntime.ts +394 -0
- package/src/v2Runtime/bundle/bubleJSXOnly.ts +34 -0
- package/src/v2Runtime/bundle/getLibraries.js +31 -0
- package/src/v2Runtime/bundle/hypothetical.js +232 -0
- package/src/v2Runtime/bundle/index.js +88 -0
- package/src/v2Runtime/bundle/packageJson.ts +49 -0
- package/src/v2Runtime/bundle/rollup.browser.js +28414 -0
- package/src/v2Runtime/bundle.test.js +151 -0
- package/src/v2Runtime/computeSrcDocV2.test.ts +163 -0
- package/src/v2Runtime/computeSrcDocV2.ts +34 -0
- package/src/v2Runtime/getComputedIndexHtml.test.ts +33 -0
- package/src/v2Runtime/getComputedIndexHtml.ts +106 -0
- package/src/v2Runtime/getText.ts +19 -0
- package/src/v2Runtime/magicSandbox.js +291 -0
- package/src/v2Runtime/packageJson.js +42 -0
- package/src/v2Runtime/transformFiles.test.js +18 -0
- package/src/v2Runtime/transformFiles.ts +15 -0
- package/src/v2Runtime/v3FilesToV2Files.test.ts +20 -0
- package/src/v2Runtime/v3FilesToV2Files.ts +14 -0
- package/src/v3Runtime/build.test.ts +474 -0
- package/src/v3Runtime/build.ts +270 -0
- package/src/v3Runtime/cleanRollupErrorMessage.ts +15 -0
- package/src/v3Runtime/computeSrcDocV3.ts +151 -0
- package/src/v3Runtime/extractVizImport.test.ts +41 -0
- package/src/v3Runtime/extractVizImport.ts +34 -0
- package/src/v3Runtime/generateRollupErrorMessage.ts +84 -0
- package/src/v3Runtime/importFromViz.ts +36 -0
- package/src/v3Runtime/index.ts +1 -0
- package/src/v3Runtime/parseId.ts +14 -0
- package/src/v3Runtime/setupV3Runtime.ts +478 -0
- package/src/v3Runtime/transformDSV/d3-dsv-custom-build/bundle-modified-src.js +121 -0
- package/src/v3Runtime/transformDSV/d3-dsv-custom-build/bundle-modified.js +121 -0
- package/src/v3Runtime/transformDSV/d3-dsv-custom-build/bundle.js +239 -0
- package/src/v3Runtime/transformDSV/d3-dsv-custom-build/index.js +1 -0
- package/src/v3Runtime/transformDSV/d3-dsv-custom-build/package-lock.json +475 -0
- package/src/v3Runtime/transformDSV/d3-dsv-custom-build/package.json +19 -0
- package/src/v3Runtime/transformDSV/d3-dsv-custom-build/rollup.config.js +9 -0
- package/src/v3Runtime/transformDSV/index.ts +71 -0
- package/src/v3Runtime/transformSvelte.ts +111 -0
- package/src/v3Runtime/types.ts +158 -0
- package/src/v3Runtime/urlLoad.ts +33 -0
- package/src/v3Runtime/virtual.ts +27 -0
- package/src/v3Runtime/vizCache.test.ts +126 -0
- package/src/v3Runtime/vizCache.ts +60 -0
- package/src/v3Runtime/vizLoad.ts +68 -0
- package/src/v3Runtime/vizLoadSvelte.ts +46 -0
- package/src/v3Runtime/vizResolve.ts +100 -0
- package/src/v3Runtime/worker.ts +231 -0
@@ -0,0 +1,231 @@
|
|
1
|
+
import { rollup } from '@rollup/browser';
|
2
|
+
import { build } from './build';
|
3
|
+
import { VizCache, createVizCache } from './vizCache';
|
4
|
+
import { Content, VizId } from 'entities';
|
5
|
+
import { V3BuildResult, V3WorkerMessage } from './types';
|
6
|
+
import { svelteCompilerUrl } from './transformSvelte';
|
7
|
+
import { computeSrcDocV3 } from './computeSrcDocV3';
|
8
|
+
|
9
|
+
const debug = false;
|
10
|
+
|
11
|
+
// Generate a unique request ID
|
12
|
+
const generateRequestId = (): string =>
|
13
|
+
(Math.random() + '').slice(2);
|
14
|
+
|
15
|
+
// Tracks pending promises for 'contentResponse' messages
|
16
|
+
const pendingContentResponsePromises = new Map();
|
17
|
+
|
18
|
+
// Tracks pending promises for 'resolveSlugResponse' messages
|
19
|
+
const pendingResolveSlugResponsePromises = new Map();
|
20
|
+
|
21
|
+
// Create a viz cache that's backed by the main thread
|
22
|
+
let vizCache: VizCache = createVizCache({
|
23
|
+
initialContents: [],
|
24
|
+
handleCacheMiss: async (
|
25
|
+
vizId: VizId,
|
26
|
+
): Promise<Content> => {
|
27
|
+
const message: V3WorkerMessage = {
|
28
|
+
type: 'contentRequest',
|
29
|
+
vizId,
|
30
|
+
};
|
31
|
+
|
32
|
+
if (debug) {
|
33
|
+
console.log(
|
34
|
+
'[build worker] sending content request message to main thread',
|
35
|
+
message,
|
36
|
+
);
|
37
|
+
}
|
38
|
+
postMessage(message);
|
39
|
+
|
40
|
+
return new Promise((resolve) => {
|
41
|
+
pendingContentResponsePromises.set(vizId, resolve);
|
42
|
+
});
|
43
|
+
},
|
44
|
+
});
|
45
|
+
|
46
|
+
// Create a slug resolver that's backed by the main thread
|
47
|
+
const resolveSlug = ({
|
48
|
+
userName,
|
49
|
+
slug,
|
50
|
+
}): Promise<VizId> => {
|
51
|
+
const slugKey = `${userName}/${slug}`;
|
52
|
+
|
53
|
+
// Since the same slug could be requested multiple times
|
54
|
+
// in quick succession, we need to support multiple
|
55
|
+
// pending requests for the same slug.
|
56
|
+
// We do this by generating a unique ID for each request.
|
57
|
+
const requestId = generateRequestId();
|
58
|
+
const message: V3WorkerMessage = {
|
59
|
+
type: 'resolveSlugRequest',
|
60
|
+
slugKey,
|
61
|
+
requestId,
|
62
|
+
};
|
63
|
+
|
64
|
+
if (debug) {
|
65
|
+
console.log(
|
66
|
+
'[build worker] sending resolve slug request message to main thread',
|
67
|
+
message,
|
68
|
+
);
|
69
|
+
}
|
70
|
+
postMessage(message);
|
71
|
+
|
72
|
+
return new Promise((resolve) => {
|
73
|
+
pendingResolveSlugResponsePromises.set(
|
74
|
+
requestId,
|
75
|
+
resolve,
|
76
|
+
);
|
77
|
+
});
|
78
|
+
};
|
79
|
+
|
80
|
+
// Inspired by
|
81
|
+
// https://github.com/sveltejs/sites/blob/master/packages/repl/src/lib/workers/bundler/index.js#L44
|
82
|
+
// unpkg doesn't set the correct MIME type for .cjs files
|
83
|
+
// https://github.com/mjackson/unpkg/issues/355
|
84
|
+
const getSvelteCompiler = async () => {
|
85
|
+
const compiler = await fetch(svelteCompilerUrl).then(
|
86
|
+
(r) => r.text(),
|
87
|
+
);
|
88
|
+
(0, eval)(compiler);
|
89
|
+
|
90
|
+
// console.log(self.svelte);
|
91
|
+
// @ts-ignore
|
92
|
+
return self.svelte.compile;
|
93
|
+
};
|
94
|
+
|
95
|
+
// Handle messages from the main thread
|
96
|
+
addEventListener('message', async ({ data }) => {
|
97
|
+
const message: V3WorkerMessage = data as V3WorkerMessage;
|
98
|
+
|
99
|
+
switch (message.type) {
|
100
|
+
case 'buildRequest': {
|
101
|
+
const { vizId, enableSourcemap } = message;
|
102
|
+
|
103
|
+
if (debug) {
|
104
|
+
console.log(
|
105
|
+
'[build worker] received build request message from main thread',
|
106
|
+
message,
|
107
|
+
);
|
108
|
+
}
|
109
|
+
|
110
|
+
let error: Error | undefined;
|
111
|
+
let buildResult: V3BuildResult | undefined;
|
112
|
+
try {
|
113
|
+
buildResult = await build({
|
114
|
+
vizId,
|
115
|
+
enableSourcemap,
|
116
|
+
rollup,
|
117
|
+
vizCache,
|
118
|
+
resolveSlug,
|
119
|
+
getSvelteCompiler,
|
120
|
+
});
|
121
|
+
} catch (e) {
|
122
|
+
if (debug) console.error(e);
|
123
|
+
error = e;
|
124
|
+
}
|
125
|
+
|
126
|
+
// Post the result of the build process
|
127
|
+
const responseMessage: V3WorkerMessage = {
|
128
|
+
type: 'buildResponse',
|
129
|
+
buildResult,
|
130
|
+
error,
|
131
|
+
};
|
132
|
+
postMessage(responseMessage);
|
133
|
+
break;
|
134
|
+
}
|
135
|
+
|
136
|
+
case 'contentResponse': {
|
137
|
+
// Resolve pending promises for content snapshots
|
138
|
+
const resolver = pendingContentResponsePromises.get(
|
139
|
+
message.vizId,
|
140
|
+
);
|
141
|
+
if (resolver) {
|
142
|
+
resolver(message.content);
|
143
|
+
pendingContentResponsePromises.delete(
|
144
|
+
message.vizId,
|
145
|
+
);
|
146
|
+
}
|
147
|
+
break;
|
148
|
+
}
|
149
|
+
|
150
|
+
case 'invalidateVizCacheRequest': {
|
151
|
+
if (debug) {
|
152
|
+
console.log(
|
153
|
+
'[build worker] received invalidateVizCacheRequest',
|
154
|
+
message,
|
155
|
+
);
|
156
|
+
}
|
157
|
+
const { changedVizIds } = message;
|
158
|
+
|
159
|
+
// Invalidate the viz cache for the changed vizzes.
|
160
|
+
// This will cause the worker to re-fetch the content
|
161
|
+
// of those vizzes the next time it needs them.
|
162
|
+
for (const vizId of changedVizIds) {
|
163
|
+
vizCache.invalidate(vizId);
|
164
|
+
}
|
165
|
+
|
166
|
+
const responseMessage: V3WorkerMessage = {
|
167
|
+
type: 'invalidateVizCacheResponse',
|
168
|
+
};
|
169
|
+
postMessage(responseMessage);
|
170
|
+
break;
|
171
|
+
}
|
172
|
+
|
173
|
+
// Resolve pending promises for slug resolution
|
174
|
+
case 'resolveSlugResponse': {
|
175
|
+
const resolver =
|
176
|
+
pendingResolveSlugResponsePromises.get(
|
177
|
+
message.requestId,
|
178
|
+
);
|
179
|
+
if (resolver) {
|
180
|
+
resolver(message.vizId);
|
181
|
+
pendingResolveSlugResponsePromises.delete(
|
182
|
+
message.requestId,
|
183
|
+
);
|
184
|
+
}
|
185
|
+
break;
|
186
|
+
}
|
187
|
+
|
188
|
+
case 'resetSrcdocRequest': {
|
189
|
+
// Invalidate viz cache for changed vizzes.
|
190
|
+
const { vizId, changedVizIds } = message;
|
191
|
+
for (const changedVizId of changedVizIds) {
|
192
|
+
vizCache.invalidate(changedVizId);
|
193
|
+
}
|
194
|
+
|
195
|
+
// Compute a fresh build/
|
196
|
+
let error: Error | undefined;
|
197
|
+
let buildResult: V3BuildResult | undefined;
|
198
|
+
try {
|
199
|
+
buildResult = await build({
|
200
|
+
vizId,
|
201
|
+
enableSourcemap: true,
|
202
|
+
rollup,
|
203
|
+
vizCache,
|
204
|
+
resolveSlug,
|
205
|
+
getSvelteCompiler,
|
206
|
+
});
|
207
|
+
} catch (e) {
|
208
|
+
if (debug) console.error(e);
|
209
|
+
error = e;
|
210
|
+
}
|
211
|
+
|
212
|
+
let srcdoc: string | undefined;
|
213
|
+
if (buildResult !== undefined) {
|
214
|
+
srcdoc = await computeSrcDocV3({
|
215
|
+
vizCache,
|
216
|
+
buildResult,
|
217
|
+
});
|
218
|
+
}
|
219
|
+
|
220
|
+
// Post the result of the build process
|
221
|
+
const responseMessage: V3WorkerMessage = {
|
222
|
+
type: 'resetSrcdocResponse',
|
223
|
+
srcdoc,
|
224
|
+
error,
|
225
|
+
};
|
226
|
+
postMessage(responseMessage);
|
227
|
+
|
228
|
+
break;
|
229
|
+
}
|
230
|
+
}
|
231
|
+
});
|