UNPKG

neweb

Version:

[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coveralls-image]][coveralls-url] [![experimental](http://badges.github.io/stability-badges/dist/ex

124 lines (123 loc) 4.99 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const React = require("react"); const ReactDOM = require("react-dom"); const common_1 = require("./../common"); const NewebCommon = require("./../common"); class ClientModulesManager { constructor(config) { this.config = config; this.modules = []; this.modules.push({ name: "react", version: undefined, type: "npm", content: "", exports: React, }); this.modules.push({ name: "react-dom", version: undefined, type: "npm", content: "", exports: ReactDOM, }); this.modules.push({ name: "neweb", version: undefined, type: "npm", content: "", exports: NewebCommon, }); } preloadModules(modules) { return __awaiter(this, void 0, void 0, function* () { yield Promise.all(modules.map((mod) => __awaiter(this, void 0, void 0, function* () { if (yield this.hasModule(mod.type, mod.name, mod.version)) { return; } const response = yield fetch(this.config.address + "/" + mod.type + "/" + mod.name.replace(/\//gi, "~") + "/" + mod.version + ".js"); if (response.status !== 200) { throw new Error("Invalid response::" + (yield response.text())); } const content = yield response.text(); yield this.addModule(mod.type, mod.name, mod.version, content); }))); }); } hasModule(type, name, version) { return __awaiter(this, void 0, void 0, function* () { const mod = this.modules.find((m) => m.type === type && m.name === name && (!version || m.version === version)); if (mod) { return true; } const content = localStorage.getItem(this.getModuleStorageName(type, name, version)); if (content) { this.modules.push({ content, name, type, version, exports: undefined, }); return true; } return false; }); } addModule(type, name, version, content) { return __awaiter(this, void 0, void 0, function* () { if (yield this.hasModule(type, name, version)) { return; } this.modules.push({ name, version, type, content, exports: undefined, }); localStorage.setItem(this.getModuleStorageName(type, name, version), content); }); } loadModule(type, name, version) { /* const mod = this.modules.find((m) => m.type === type && m.name === name && (!version || m.version === version)); if (!mod) { throw new Error("Not found module " + type + "::" + name + "::" + version); } const content = localStorage.getItem("__neweb_module_" + type + "~" + name + "~" + version); if (content) { this.addModule(type, name, version, content); }*/ if (!this.hasModule(type, name, version)) { throw new Error("Not found module " + type + "::" + name + "::" + version); } const mod = this.modules.find((m) => m.type === type && m.name === name && (!version || m.version === version)); if (!mod) { throw new Error("Not found module " + type + "::" + name + "::" + version); } if (typeof (mod.exports) === "undefined") { mod.exports = this.evalModule(mod.content); } return mod.exports; } evalModule(content) { window[common_1.REQUIRE_FUNC_NAME] = this.loadModule.bind(this); // tslint:disable-next-line:no-eval return eval(content); } getModuleStorageName(type, name, version) { return "__neweb_module_" + type + "~" + name + "~" + version; } } exports.default = ClientModulesManager;