@drawcall/glts 0.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.
@@ -0,0 +1,332 @@
1
+ import { compileTypeScript } from "./compiler.js";
2
+ import { GLTSError, toGLTSError } from "./errors.js";
3
+ import { ModuleURLStore } from "./module-url-store.js";
4
+ import { rewriteModule } from "./rewrite-module.js";
5
+ function isAssetClass(value) {
6
+ return typeof value === "function";
7
+ }
8
+ function moduleDefault(namespace) {
9
+ if ((typeof namespace !== "object" && typeof namespace !== "function") || namespace === null) {
10
+ return undefined;
11
+ }
12
+ return Reflect.get(namespace, "default");
13
+ }
14
+ function hasScheme(specifier) {
15
+ return /^[A-Za-z][A-Za-z\d+.-]*:/.test(specifier);
16
+ }
17
+ function isBareSpecifier(specifier) {
18
+ return !specifier.startsWith(".") && !specifier.startsWith("/") && !hasScheme(specifier);
19
+ }
20
+ function isThreeFamilySpecifier(specifier) {
21
+ return specifier.startsWith("three/addons/") || specifier.startsWith("three/examples/");
22
+ }
23
+ function isGLTSURL(url) {
24
+ return url.pathname.endsWith(".glts");
25
+ }
26
+ function shouldTransformExternalURL(url) {
27
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
28
+ return false;
29
+ }
30
+ const lastSegment = url.pathname.split("/").at(-1) ?? "";
31
+ if (!lastSegment.includes(".")) {
32
+ return true;
33
+ }
34
+ return /\.(?:cjs|js|mjs)$/.test(lastSegment);
35
+ }
36
+ function canonicalize(url) {
37
+ const canonical = new URL(url);
38
+ canonical.hash = "";
39
+ return canonical.href;
40
+ }
41
+ async function importModule(moduleURL) {
42
+ return import(/* @vite-ignore */ moduleURL);
43
+ }
44
+ export class ModuleGraph {
45
+ #cdnURL;
46
+ #esbuildWasmURL;
47
+ #fetch;
48
+ #moduleURLs;
49
+ #runtime;
50
+ #threeRevision;
51
+ #currentAssets = new Map();
52
+ #assetRevisions = new Map();
53
+ #assetLoads = new Map();
54
+ #externalModules = new Map();
55
+ #externalLoads = new Map();
56
+ constructor(options) {
57
+ this.#cdnURL = options.cdnURL;
58
+ this.#esbuildWasmURL = options.esbuildWasmURL;
59
+ this.#fetch = options.fetch;
60
+ this.#moduleURLs = options.moduleURLs;
61
+ this.#runtime = options.runtime;
62
+ this.#threeRevision = options.threeRevision;
63
+ }
64
+ hasAsset(url) {
65
+ return this.#currentAssets.has(url);
66
+ }
67
+ async prepareAsset(url, options, importChain = []) {
68
+ if (importChain.includes(url)) {
69
+ throw new GLTSError("Cyclic GLTS imports are not supported", {
70
+ url,
71
+ phase: "resolve",
72
+ importChain: [...importChain, url]
73
+ });
74
+ }
75
+ const current = this.#currentAssets.get(url);
76
+ if (current && !options.force) {
77
+ return current;
78
+ }
79
+ const loadKey = `${options.force ? "reload" : "load"}:${url}`;
80
+ let loading = this.#assetLoads.get(loadKey);
81
+ if (!loading) {
82
+ loading = this.#prepareAssetRevision(url, options.force, [...importChain, url]);
83
+ this.#assetLoads.set(loadKey, loading);
84
+ void loading.finally(() => {
85
+ if (this.#assetLoads.get(loadKey) === loading) {
86
+ this.#assetLoads.delete(loadKey);
87
+ }
88
+ }).catch(() => undefined);
89
+ }
90
+ const prepared = await loading;
91
+ if (options.activate) {
92
+ this.activateAsset(prepared);
93
+ }
94
+ return prepared;
95
+ }
96
+ activateAsset(prepared) {
97
+ this.#runtime.setAssetClass(prepared.url, prepared.assetClass);
98
+ this.#currentAssets.set(prepared.url, prepared);
99
+ }
100
+ async #prepareAssetRevision(url, force, importChain) {
101
+ const fetched = await this.#fetchSource(url, force, importChain);
102
+ const revisions = this.#assetRevisions.get(url);
103
+ const cached = revisions?.get(fetched.source);
104
+ if (cached) {
105
+ return cached;
106
+ }
107
+ let compiled;
108
+ try {
109
+ compiled = await compileTypeScript(fetched.source, url, this.#esbuildWasmURL);
110
+ }
111
+ catch (error) {
112
+ throw toGLTSError(error, "Unable to compile TypeScript asset", {
113
+ url,
114
+ phase: "transform",
115
+ importChain
116
+ });
117
+ }
118
+ let transformed;
119
+ try {
120
+ transformed = await rewriteModule({
121
+ source: compiled,
122
+ sourceURL: url,
123
+ importChain,
124
+ resolveImport: (specifier, importerURL, chain) => this.#resolveAssetImport(specifier, importerURL, chain)
125
+ });
126
+ }
127
+ catch (error) {
128
+ throw toGLTSError(error, "Unable to transform asset module", {
129
+ url,
130
+ phase: "transform",
131
+ importChain
132
+ });
133
+ }
134
+ const moduleURL = this.#moduleURLs.create(transformed);
135
+ let namespace;
136
+ try {
137
+ namespace = await importModule(moduleURL);
138
+ }
139
+ catch (error) {
140
+ throw toGLTSError(error, "Unable to evaluate asset module", {
141
+ url,
142
+ phase: "evaluate",
143
+ importChain
144
+ });
145
+ }
146
+ const assetClass = moduleDefault(namespace);
147
+ if (!isAssetClass(assetClass)) {
148
+ throw new GLTSError("Module must default-export a constructible Three.js class", {
149
+ url,
150
+ phase: "evaluate",
151
+ importChain
152
+ });
153
+ }
154
+ const prepared = {
155
+ assetClass,
156
+ moduleURL,
157
+ source: fetched.source,
158
+ url
159
+ };
160
+ const nextRevisions = revisions ?? new Map();
161
+ nextRevisions.set(fetched.source, prepared);
162
+ this.#assetRevisions.set(url, nextRevisions);
163
+ return prepared;
164
+ }
165
+ async #resolveAssetImport(specifier, importerURL, importChain) {
166
+ if (specifier === "three") {
167
+ return this.#runtime.threeModuleURL;
168
+ }
169
+ if (isThreeFamilySpecifier(specifier)) {
170
+ return this.#prepareExternal(this.#threeFamilyURL(specifier), importChain);
171
+ }
172
+ if (isBareSpecifier(specifier)) {
173
+ if (specifier.startsWith("#") || specifier.startsWith("node:")) {
174
+ throw new GLTSError(`Unsupported package import: ${specifier}`, {
175
+ url: importerURL,
176
+ phase: "resolve",
177
+ importChain
178
+ });
179
+ }
180
+ return this.#prepareExternal(this.#packageURL(specifier), importChain);
181
+ }
182
+ let resolved;
183
+ try {
184
+ resolved = new URL(specifier, importerURL);
185
+ }
186
+ catch (error) {
187
+ throw new GLTSError(`Unable to resolve import ${specifier}`, {
188
+ url: importerURL,
189
+ phase: "resolve",
190
+ importChain
191
+ }, error);
192
+ }
193
+ if (isGLTSURL(resolved)) {
194
+ const childURL = canonicalize(resolved);
195
+ await this.prepareAsset(childURL, { activate: true, force: false }, importChain);
196
+ return this.#runtime.getWrapperModuleURL(childURL);
197
+ }
198
+ if (resolved.protocol === "http:" || resolved.protocol === "https:") {
199
+ if (specifier.startsWith(".") || specifier.startsWith("/")) {
200
+ throw new GLTSError(`Local helper modules are not supported in V1: ${specifier}`, { url: importerURL, phase: "resolve", importChain });
201
+ }
202
+ return this.#prepareExternal(resolved, importChain);
203
+ }
204
+ throw new GLTSError(`Unsupported import: ${specifier}`, {
205
+ url: importerURL,
206
+ phase: "resolve",
207
+ importChain
208
+ });
209
+ }
210
+ async #prepareExternal(url, importChain) {
211
+ const key = canonicalize(url);
212
+ const cached = this.#externalModules.get(key);
213
+ if (cached) {
214
+ return cached;
215
+ }
216
+ if (importChain.includes(key)) {
217
+ throw new GLTSError("Cyclic CDN modules are not supported", {
218
+ url: key,
219
+ phase: "resolve",
220
+ importChain: [...importChain, key]
221
+ });
222
+ }
223
+ let loading = this.#externalLoads.get(key);
224
+ if (!loading) {
225
+ loading = this.#prepareExternalModule(key, [...importChain, key]);
226
+ this.#externalLoads.set(key, loading);
227
+ void loading.finally(() => {
228
+ if (this.#externalLoads.get(key) === loading) {
229
+ this.#externalLoads.delete(key);
230
+ }
231
+ }).catch(() => undefined);
232
+ }
233
+ return loading;
234
+ }
235
+ async #prepareExternalModule(requestedURL, importChain) {
236
+ const fetched = await this.#fetchSource(requestedURL, false, importChain);
237
+ let transformed;
238
+ try {
239
+ transformed = await rewriteModule({
240
+ source: fetched.source,
241
+ sourceURL: fetched.url,
242
+ importChain,
243
+ resolveImport: (specifier, importerURL, chain) => this.#resolveExternalImport(specifier, importerURL, chain)
244
+ });
245
+ }
246
+ catch (error) {
247
+ throw toGLTSError(error, "Unable to transform CDN module", {
248
+ url: fetched.url,
249
+ phase: "transform",
250
+ importChain
251
+ });
252
+ }
253
+ const moduleURL = this.#moduleURLs.create(transformed);
254
+ this.#externalModules.set(requestedURL, moduleURL);
255
+ this.#externalModules.set(fetched.url, moduleURL);
256
+ return moduleURL;
257
+ }
258
+ async #resolveExternalImport(specifier, importerURL, importChain) {
259
+ if (specifier === "three") {
260
+ return this.#runtime.threeModuleURL;
261
+ }
262
+ if (isThreeFamilySpecifier(specifier)) {
263
+ return this.#prepareExternal(this.#threeFamilyURL(specifier), importChain);
264
+ }
265
+ if (isBareSpecifier(specifier)) {
266
+ if (specifier.startsWith("#") || specifier.startsWith("node:")) {
267
+ throw new GLTSError(`Unsupported CDN package import: ${specifier}`, {
268
+ url: importerURL,
269
+ phase: "resolve",
270
+ importChain
271
+ });
272
+ }
273
+ return this.#prepareExternal(this.#packageURL(specifier), importChain);
274
+ }
275
+ const resolved = new URL(specifier, importerURL);
276
+ if (!shouldTransformExternalURL(resolved)) {
277
+ return resolved.href;
278
+ }
279
+ return this.#prepareExternal(resolved, importChain);
280
+ }
281
+ #packageURL(specifier) {
282
+ const url = new URL(specifier, this.#cdnURL);
283
+ const separator = url.search ? "&" : "?";
284
+ return new URL(`${url.href}${separator}bundle&external=three&target=es2022`);
285
+ }
286
+ #threeFamilyURL(specifier) {
287
+ const path = specifier.startsWith("three/addons/")
288
+ ? `examples/jsm/${specifier.slice("three/addons/".length)}`
289
+ : specifier.slice("three/".length);
290
+ return this.#packageURL(`three@0.${this.#threeRevision}.0/${path}`);
291
+ }
292
+ async #fetchSource(url, bypassCache, importChain) {
293
+ let response;
294
+ try {
295
+ response = await this.#fetch(url, { cache: bypassCache ? "no-cache" : "default" });
296
+ }
297
+ catch (error) {
298
+ throw new GLTSError("Network request failed", {
299
+ url,
300
+ phase: "fetch",
301
+ importChain
302
+ }, error);
303
+ }
304
+ if (!response.ok) {
305
+ throw new GLTSError(`Request failed with ${response.status} ${response.statusText}`, {
306
+ url,
307
+ phase: "fetch",
308
+ importChain
309
+ });
310
+ }
311
+ try {
312
+ return {
313
+ source: await response.text(),
314
+ url: canonicalize(new URL(response.url || url))
315
+ };
316
+ }
317
+ catch (error) {
318
+ throw new GLTSError("Unable to read response body", {
319
+ url,
320
+ phase: "fetch",
321
+ importChain
322
+ }, error);
323
+ }
324
+ }
325
+ }
326
+ export function canonicalGLTSURL(input, baseURL) {
327
+ return canonicalize(new URL(input, baseURL));
328
+ }
329
+ export function threeRevision(three) {
330
+ return three.REVISION;
331
+ }
332
+ //# sourceMappingURL=module-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-graph.js","sourceRoot":"","sources":["../src/module-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare class ModuleURLStore {
2
+ #private;
3
+ create(source: string): string;
4
+ dispose(): void;
5
+ }
6
+ //# sourceMappingURL=module-url-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-url-store.d.ts","sourceRoot":"","sources":["../src/module-url-store.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;;IAGzB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAO9B,OAAO,IAAI,IAAI;CAOhB"}
@@ -0,0 +1,16 @@
1
+ export class ModuleURLStore {
2
+ #urls = new Set();
3
+ create(source) {
4
+ const blob = new Blob([source], { type: "text/javascript" });
5
+ const url = URL.createObjectURL(blob);
6
+ this.#urls.add(url);
7
+ return url;
8
+ }
9
+ dispose() {
10
+ for (const url of this.#urls) {
11
+ URL.revokeObjectURL(url);
12
+ }
13
+ this.#urls.clear();
14
+ }
15
+ }
16
+ //# sourceMappingURL=module-url-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-url-store.js","sourceRoot":"","sources":["../src/module-url-store.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IAChB,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,MAAM,CAAC,MAAc;QACnB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO;QACL,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ export type StaticImportResolver = (specifier: string, importerURL: string, importChain: readonly string[]) => Promise<string>;
2
+ export interface RewriteModuleOptions {
3
+ readonly source: string;
4
+ readonly sourceURL: string;
5
+ readonly importChain: readonly string[];
6
+ readonly resolveImport: StaticImportResolver;
7
+ }
8
+ export declare function rewriteModule(options: RewriteModuleOptions): Promise<string>;
9
+ //# sourceMappingURL=rewrite-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewrite-module.d.ts","sourceRoot":"","sources":["../src/rewrite-module.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,oBAAoB,GAAG,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,SAAS,MAAM,EAAE,KAC3B,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;CAC9C;AAUD,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8ElF"}
@@ -0,0 +1,67 @@
1
+ import { ImportType, init, parse } from "es-module-lexer";
2
+ import MagicString from "magic-string";
3
+ import { GLTSError } from "./errors.js";
4
+ function locationAt(source, offset) {
5
+ const before = source.slice(0, offset);
6
+ const line = before.split("\n").length;
7
+ const lastNewline = before.lastIndexOf("\n");
8
+ const column = offset - lastNewline;
9
+ return `${line}:${column}`;
10
+ }
11
+ export async function rewriteModule(options) {
12
+ await init;
13
+ let imports;
14
+ try {
15
+ [imports] = parse(options.source, options.sourceURL);
16
+ }
17
+ catch (error) {
18
+ throw new GLTSError("Unable to parse module imports", {
19
+ url: options.sourceURL,
20
+ phase: "transform",
21
+ importChain: options.importChain
22
+ }, error);
23
+ }
24
+ const rewritten = new MagicString(options.source, { filename: options.sourceURL });
25
+ const staticImports = imports.filter((entry) => entry.t === ImportType.Static);
26
+ for (const entry of imports) {
27
+ if (entry.t === ImportType.ImportMeta) {
28
+ const suffix = options.source.slice(entry.e, entry.e + 4);
29
+ if (suffix === ".url") {
30
+ rewritten.overwrite(entry.s, entry.e + 4, JSON.stringify(options.sourceURL));
31
+ }
32
+ continue;
33
+ }
34
+ if (entry.t !== ImportType.Static) {
35
+ throw new GLTSError(`Dynamic and source-phase imports are not supported (${locationAt(options.source, entry.ss)})`, {
36
+ url: options.sourceURL,
37
+ phase: "transform",
38
+ importChain: options.importChain
39
+ });
40
+ }
41
+ if (entry.at) {
42
+ throw new GLTSError(`Import attributes are not supported (${locationAt(options.source, entry.ss)})`, {
43
+ url: options.sourceURL,
44
+ phase: "transform",
45
+ importChain: options.importChain
46
+ });
47
+ }
48
+ }
49
+ const resolutions = await Promise.all(staticImports.map(async (entry) => {
50
+ if (!entry.n) {
51
+ throw new GLTSError(`Static import has no resolvable specifier (${locationAt(options.source, entry.ss)})`, {
52
+ url: options.sourceURL,
53
+ phase: "resolve",
54
+ importChain: options.importChain
55
+ });
56
+ }
57
+ const resolved = await options.resolveImport(entry.n, options.sourceURL, options.importChain);
58
+ return { entry, resolved };
59
+ }));
60
+ for (const resolution of resolutions) {
61
+ rewritten.overwrite(resolution.entry.s, resolution.entry.e, resolution.resolved);
62
+ }
63
+ const safeSourceURL = options.sourceURL.replaceAll("\n", "").replaceAll("\r", "");
64
+ rewritten.append(`\n//# sourceURL=${safeSourceURL}\n`);
65
+ return rewritten.toString();
66
+ }
67
+ //# sourceMappingURL=rewrite-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewrite-module.js","sourceRoot":"","sources":["../src/rewrite-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import * as THREE from "three";
2
+ import { ModuleURLStore } from "./module-url-store.js";
3
+ import type { GLTSAssetClass } from "./types.js";
4
+ type WrapperClass = new () => THREE.Group;
5
+ export declare class WrapperRuntime {
6
+ #private;
7
+ readonly threeModuleURL: string;
8
+ constructor(moduleURLs: ModuleURLStore);
9
+ getThreeExport(name: string): unknown;
10
+ getWrapperConstructor(url: string): WrapperClass;
11
+ getWrapperModuleURL(url: string): string;
12
+ setAssetClass(url: string, assetClass: GLTSAssetClass): void;
13
+ createRoot(url: string): THREE.Group;
14
+ replace(url: string, nextClass: GLTSAssetClass): void;
15
+ disposeWrapper(wrapper: THREE.Group): void;
16
+ dispose(): void;
17
+ }
18
+ export {};
19
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAQjD,KAAK,YAAY,GAAG,UAAU,KAAK,CAAC,KAAK,CAAC;AA6B1C,qBAAa,cAAc;;IAWzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;gBAEpB,UAAU,EAAE,cAAc;IAMtC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;IAkBhD,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAiBxC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,IAAI;IAK5D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK;IAQpC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,IAAI;IA4DrD,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI;IAa1C,OAAO,IAAI,IAAI;CAuMhB"}