simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

EnsureChunkRuntimeModule.js (1738B)


      1 /*
      2 	MIT License http://www.opensource.org/licenses/mit-license.php
      3 */
      4 
      5 "use strict";
      6 
      7 const RuntimeGlobals = require("../RuntimeGlobals");
      8 const RuntimeModule = require("../RuntimeModule");
      9 const Template = require("../Template");
     10 
     11 class EnsureChunkRuntimeModule extends RuntimeModule {
     12 	constructor(runtimeRequirements) {
     13 		super("ensure chunk");
     14 		this.runtimeRequirements = runtimeRequirements;
     15 	}
     16 
     17 	/**
     18 	 * @returns {string} runtime code
     19 	 */
     20 	generate() {
     21 		const { runtimeTemplate } = this.compilation;
     22 		// Check if there are non initial chunks which need to be imported using require-ensure
     23 		if (this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers)) {
     24 			const handlers = RuntimeGlobals.ensureChunkHandlers;
     25 			return Template.asString([
     26 				`${handlers} = {};`,
     27 				"// This file contains only the entry chunk.",
     28 				"// The chunk loading function for additional chunks",
     29 				`${RuntimeGlobals.ensureChunk} = ${runtimeTemplate.basicFunction(
     30 					"chunkId",
     31 					[
     32 						`return Promise.all(Object.keys(${handlers}).reduce(${runtimeTemplate.basicFunction(
     33 							"promises, key",
     34 							[`${handlers}[key](chunkId, promises);`, "return promises;"]
     35 						)}, []));`
     36 					]
     37 				)};`
     38 			]);
     39 		} else {
     40 			// There ensureChunk is used somewhere in the tree, so we need an empty requireEnsure
     41 			// function. This can happen with multiple entrypoints.
     42 			return Template.asString([
     43 				"// The chunk loading function for additional chunks",
     44 				"// Since all referenced chunks are already included",
     45 				"// in this file, this function is empty here.",
     46 				`${RuntimeGlobals.ensureChunk} = ${runtimeTemplate.returningFunction(
     47 					"Promise.resolve()"
     48 				)};`
     49 			]);
     50 		}
     51 	}
     52 }
     53 
     54 module.exports = EnsureChunkRuntimeModule;