|
5 | 5 | * |
6 | 6 | * @example |
7 | 7 | * ```ts |
8 | | - * import { Workspace, ResolutionMode, type LoadResponse } from "@deno/loader"; |
| 8 | + * import { Workspace, ResolutionMode, type LoadResponse, RequestedModuleType } from "@deno/loader"; |
9 | 9 | * |
10 | 10 | * const workspace = new Workspace({ |
11 | 11 | * // optional options |
|
18 | 18 | * "https://deno.land/mod.ts", // referrer |
19 | 19 | * ResolutionMode.Import, |
20 | 20 | * ); |
21 | | - * const response = await loader.load(resolvedUrl); |
| 21 | + * const response = await loader.load(resolvedUrl, RequestedModuleType.Default); |
22 | 22 | * if (response.kind === "module") { |
23 | 23 | * console.log(response.specifier); |
24 | 24 | * console.log(response.code); |
@@ -52,16 +52,16 @@ export interface WorkspaceOptions { |
52 | 52 | cachedOnly?: boolean; |
53 | 53 | /** Enable debug logs. */ |
54 | 54 | debug?: boolean; |
| 55 | + /** Whether to preserve JSX syntax in the loaded output. */ |
| 56 | + preserveJsx?: boolean; |
| 57 | + /** Skip transpiling TypeScript and JSX. */ |
| 58 | + noTranspile?: boolean; |
55 | 59 | } |
56 | 60 |
|
57 | 61 | /** Options for loading. */ |
58 | 62 | export interface LoaderOptions { |
59 | 63 | /** Entrypoints to create the loader for. */ |
60 | 64 | entrypoints: string[]; |
61 | | - /** Whether to preserve JSX syntax in the loaded output. */ |
62 | | - preserveJsx?: boolean; |
63 | | - /** Skip transpiling TypeScript and JSX. */ |
64 | | - noTranspile?: boolean; |
65 | 65 | } |
66 | 66 |
|
67 | 67 | /** File type. */ |
@@ -154,12 +154,19 @@ export class Workspace implements Disposable { |
154 | 154 | }`, |
155 | 155 | ); |
156 | 156 | } |
157 | | - const wasmLoader = await this.#inner.create_loader(options); |
| 157 | + const wasmLoader = await this.#inner.create_loader(); |
158 | 158 | await wasmLoader.add_roots(options.entrypoints); |
159 | 159 | return new Loader(wasmLoader, this.#debug); |
160 | 160 | } |
161 | 161 | } |
162 | 162 |
|
| 163 | +export enum RequestedModuleType { |
| 164 | + Default = 0, |
| 165 | + Json = 1, |
| 166 | + Text = 2, |
| 167 | + Bytes = 3, |
| 168 | +} |
| 169 | + |
163 | 170 | /** A loader for resolving and loading urls. */ |
164 | 171 | export class Loader implements Disposable { |
165 | 172 | #inner: WasmLoader; |
@@ -199,11 +206,35 @@ export class Loader implements Disposable { |
199 | 206 | } |
200 | 207 |
|
201 | 208 | /** Loads a specifier. */ |
202 | | - load(specifier: string): Promise<LoadResponse> { |
| 209 | + load( |
| 210 | + specifier: string, |
| 211 | + requestedModuleType: RequestedModuleType, |
| 212 | + ): Promise<LoadResponse> { |
203 | 213 | if (this.#debug) { |
204 | | - console.error(`Loading '${specifier}'`); |
| 214 | + console.error( |
| 215 | + `Loading '${specifier}' with type '${ |
| 216 | + requestedModuleTypeToString(requestedModuleType) ?? "<default>" |
| 217 | + }'`, |
| 218 | + ); |
| 219 | + } |
| 220 | + return this.#inner.load(specifier, requestedModuleType); |
| 221 | + } |
| 222 | +} |
| 223 | + |
| 224 | +function requestedModuleTypeToString(moduleType: RequestedModuleType) { |
| 225 | + switch (moduleType) { |
| 226 | + case RequestedModuleType.Bytes: |
| 227 | + return "bytes"; |
| 228 | + case RequestedModuleType.Text: |
| 229 | + return "text"; |
| 230 | + case RequestedModuleType.Json: |
| 231 | + return "json"; |
| 232 | + case RequestedModuleType.Default: |
| 233 | + return undefined; |
| 234 | + default: { |
| 235 | + const _never: never = moduleType; |
| 236 | + return undefined; |
205 | 237 | } |
206 | | - return this.#inner.load(specifier); |
207 | 238 | } |
208 | 239 | } |
209 | 240 |
|
|
0 commit comments