( manifestLoader: WorkerManifestLoader, )
| 96 | } |
| 97 | |
| 98 | export function createWorkerCreate( |
| 99 | manifestLoader: WorkerManifestLoader, |
| 100 | ): WorkerCreateAPI { |
| 101 | let frameworksPromise: Promise<Array<Framework>> | undefined |
| 102 | const frameworkChunks = new Map<string, Promise<ManifestFrameworkChunk>>() |
| 103 | const addOnChunks = new Map<string, Promise<ManifestAddOnChunk>>() |
| 104 | const loadedRendererChunks = new Map<string, Array<ManifestTemplateModule>>() |
| 105 | const addOnFrameworkIds = new WeakMap<AddOn, string>() |
| 106 | |
| 107 | function getRendererChunks(frameworkId: string) { |
| 108 | const chunks = loadedRendererChunks.get(frameworkId) |
| 109 | if (chunks) { |
| 110 | return chunks |
| 111 | } |
| 112 | |
| 113 | const nextChunks: Array<ManifestTemplateModule> = [] |
| 114 | loadedRendererChunks.set(frameworkId, nextChunks) |
| 115 | return nextChunks |
| 116 | } |
| 117 | |
| 118 | function registerRendererChunk( |
| 119 | frameworkId: string, |
| 120 | chunk: ManifestTemplateModule, |
| 121 | ) { |
| 122 | const chunks = getRendererChunks(frameworkId) |
| 123 | if (!chunks.includes(chunk)) { |
| 124 | chunks.push(chunk) |
| 125 | } |
| 126 | } |
| 127 | |
| 128 | function getRenderer(frameworkId: string) { |
| 129 | return createChunkRenderer(() => getRendererChunks(frameworkId)) |
| 130 | } |
| 131 | |
| 132 | async function loadFrameworkChunk(frameworkId: string) { |
| 133 | let promise = frameworkChunks.get(frameworkId) |
| 134 | if (!promise) { |
| 135 | promise = manifestLoader |
| 136 | .loadFramework(frameworkId) |
| 137 | .then((chunk) => { |
| 138 | registerRendererChunk(frameworkId, chunk) |
| 139 | return chunk |
| 140 | }) |
| 141 | .catch((error: unknown) => { |
| 142 | frameworkChunks.delete(frameworkId) |
| 143 | throw error |
| 144 | }) |
| 145 | frameworkChunks.set(frameworkId, promise) |
| 146 | } |
| 147 | |
| 148 | return promise |
| 149 | } |
| 150 | |
| 151 | async function loadAddOnChunk(frameworkId: string, addOnId: string) { |
| 152 | const key = `${frameworkId}:${addOnId}` |
| 153 | let promise = addOnChunks.get(key) |
| 154 | if (!promise) { |
| 155 | promise = manifestLoader |
no outgoing calls
no test coverage detected