package.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. "use strict";
  2. var __extends = (this && this.__extends) || (function () {
  3. var extendStatics = function (d, b) {
  4. extendStatics = Object.setPrototypeOf ||
  5. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  6. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  7. return extendStatics(d, b);
  8. };
  9. return function (d, b) {
  10. if (typeof b !== "function" && b !== null)
  11. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  12. extendStatics(d, b);
  13. function __() { this.constructor = d; }
  14. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  15. };
  16. })();
  17. var __values = (this && this.__values) || function(o) {
  18. var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
  19. if (m) return m.call(o);
  20. if (o && typeof o.length === "number") return {
  21. next: function () {
  22. if (o && i >= o.length) o = void 0;
  23. return { value: o && o[i++], done: !o };
  24. }
  25. };
  26. throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
  27. };
  28. var __read = (this && this.__read) || function (o, n) {
  29. var m = typeof Symbol === "function" && o[Symbol.iterator];
  30. if (!m) return o;
  31. var i = m.call(o), r, ar = [], e;
  32. try {
  33. while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  34. }
  35. catch (error) { e = { error: error }; }
  36. finally {
  37. try {
  38. if (r && !r.done && (m = i["return"])) m.call(i);
  39. }
  40. finally { if (e) throw e.error; }
  41. }
  42. return ar;
  43. };
  44. var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
  45. if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
  46. if (ar || !(i in from)) {
  47. if (!ar) ar = Array.prototype.slice.call(from, 0, i);
  48. ar[i] = from[i];
  49. }
  50. }
  51. return to.concat(ar || Array.prototype.slice.call(from));
  52. };
  53. Object.defineProperty(exports, "__esModule", { value: true });
  54. exports.Package = exports.PackageError = void 0;
  55. var loader_js_1 = require("./loader.js");
  56. var PackageError = (function (_super) {
  57. __extends(PackageError, _super);
  58. function PackageError(message, name) {
  59. var _this = _super.call(this, message) || this;
  60. _this.package = name;
  61. return _this;
  62. }
  63. return PackageError;
  64. }(Error));
  65. exports.PackageError = PackageError;
  66. var Package = (function () {
  67. function Package(name, noLoad) {
  68. if (noLoad === void 0) { noLoad = false; }
  69. this.isLoaded = false;
  70. this.isLoading = false;
  71. this.hasFailed = false;
  72. this.dependents = [];
  73. this.dependencies = [];
  74. this.dependencyCount = 0;
  75. this.provided = [];
  76. this.name = name;
  77. this.noLoad = noLoad;
  78. Package.packages.set(name, this);
  79. this.promise = this.makePromise(this.makeDependencies());
  80. }
  81. Object.defineProperty(Package.prototype, "canLoad", {
  82. get: function () {
  83. return this.dependencyCount === 0 && !this.noLoad && !this.isLoading && !this.hasFailed;
  84. },
  85. enumerable: false,
  86. configurable: true
  87. });
  88. Package.resolvePath = function (name, addExtension) {
  89. if (addExtension === void 0) { addExtension = true; }
  90. var data = { name: name, original: name, addExtension: addExtension };
  91. loader_js_1.Loader.pathFilters.execute(data);
  92. return data.name;
  93. };
  94. Package.loadAll = function () {
  95. var e_1, _a;
  96. try {
  97. for (var _b = __values(this.packages.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
  98. var extension = _c.value;
  99. if (extension.canLoad) {
  100. extension.load();
  101. }
  102. }
  103. }
  104. catch (e_1_1) { e_1 = { error: e_1_1 }; }
  105. finally {
  106. try {
  107. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  108. }
  109. finally { if (e_1) throw e_1.error; }
  110. }
  111. };
  112. Package.prototype.makeDependencies = function () {
  113. var e_2, _a;
  114. var promises = [];
  115. var map = Package.packages;
  116. var noLoad = this.noLoad;
  117. var name = this.name;
  118. var dependencies = [];
  119. if (loader_js_1.CONFIG.dependencies.hasOwnProperty(name)) {
  120. dependencies.push.apply(dependencies, __spreadArray([], __read(loader_js_1.CONFIG.dependencies[name]), false));
  121. }
  122. else if (name !== 'core') {
  123. dependencies.push('core');
  124. }
  125. try {
  126. for (var dependencies_1 = __values(dependencies), dependencies_1_1 = dependencies_1.next(); !dependencies_1_1.done; dependencies_1_1 = dependencies_1.next()) {
  127. var dependent = dependencies_1_1.value;
  128. var extension = map.get(dependent) || new Package(dependent, noLoad);
  129. if (this.dependencies.indexOf(extension) < 0) {
  130. extension.addDependent(this, noLoad);
  131. this.dependencies.push(extension);
  132. if (!extension.isLoaded) {
  133. this.dependencyCount++;
  134. promises.push(extension.promise);
  135. }
  136. }
  137. }
  138. }
  139. catch (e_2_1) { e_2 = { error: e_2_1 }; }
  140. finally {
  141. try {
  142. if (dependencies_1_1 && !dependencies_1_1.done && (_a = dependencies_1.return)) _a.call(dependencies_1);
  143. }
  144. finally { if (e_2) throw e_2.error; }
  145. }
  146. return promises;
  147. };
  148. Package.prototype.makePromise = function (promises) {
  149. var _this = this;
  150. var promise = new Promise((function (resolve, reject) {
  151. _this.resolve = resolve;
  152. _this.reject = reject;
  153. }));
  154. var config = (loader_js_1.CONFIG[this.name] || {});
  155. if (config.ready) {
  156. promise = promise.then(function (_name) { return config.ready(_this.name); });
  157. }
  158. if (promises.length) {
  159. promises.push(promise);
  160. promise = Promise.all(promises).then(function (names) { return names.join(', '); });
  161. }
  162. if (config.failed) {
  163. promise.catch(function (message) { return config.failed(new PackageError(message, _this.name)); });
  164. }
  165. return promise;
  166. };
  167. Package.prototype.load = function () {
  168. if (!this.isLoaded && !this.isLoading && !this.noLoad) {
  169. this.isLoading = true;
  170. var url = Package.resolvePath(this.name);
  171. if (loader_js_1.CONFIG.require) {
  172. this.loadCustom(url);
  173. }
  174. else {
  175. this.loadScript(url);
  176. }
  177. }
  178. };
  179. Package.prototype.loadCustom = function (url) {
  180. var _this = this;
  181. try {
  182. var result = loader_js_1.CONFIG.require(url);
  183. if (result instanceof Promise) {
  184. result.then(function () { return _this.checkLoad(); })
  185. .catch(function (err) { return _this.failed('Can\'t load "' + url + '"\n' + err.message.trim()); });
  186. }
  187. else {
  188. this.checkLoad();
  189. }
  190. }
  191. catch (err) {
  192. this.failed(err.message);
  193. }
  194. };
  195. Package.prototype.loadScript = function (url) {
  196. var _this = this;
  197. var script = document.createElement('script');
  198. script.src = url;
  199. script.charset = 'UTF-8';
  200. script.onload = function (_event) { return _this.checkLoad(); };
  201. script.onerror = function (_event) { return _this.failed('Can\'t load "' + url + '"'); };
  202. document.head.appendChild(script);
  203. };
  204. Package.prototype.loaded = function () {
  205. var e_3, _a, e_4, _b;
  206. this.isLoaded = true;
  207. this.isLoading = false;
  208. try {
  209. for (var _c = __values(this.dependents), _d = _c.next(); !_d.done; _d = _c.next()) {
  210. var dependent = _d.value;
  211. dependent.requirementSatisfied();
  212. }
  213. }
  214. catch (e_3_1) { e_3 = { error: e_3_1 }; }
  215. finally {
  216. try {
  217. if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
  218. }
  219. finally { if (e_3) throw e_3.error; }
  220. }
  221. try {
  222. for (var _e = __values(this.provided), _f = _e.next(); !_f.done; _f = _e.next()) {
  223. var provided = _f.value;
  224. provided.loaded();
  225. }
  226. }
  227. catch (e_4_1) { e_4 = { error: e_4_1 }; }
  228. finally {
  229. try {
  230. if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
  231. }
  232. finally { if (e_4) throw e_4.error; }
  233. }
  234. this.resolve(this.name);
  235. };
  236. Package.prototype.failed = function (message) {
  237. this.hasFailed = true;
  238. this.isLoading = false;
  239. this.reject(new PackageError(message, this.name));
  240. };
  241. Package.prototype.checkLoad = function () {
  242. var _this = this;
  243. var config = (loader_js_1.CONFIG[this.name] || {});
  244. var checkReady = config.checkReady || (function () { return Promise.resolve(); });
  245. checkReady().then(function () { return _this.loaded(); })
  246. .catch(function (message) { return _this.failed(message); });
  247. };
  248. Package.prototype.requirementSatisfied = function () {
  249. if (this.dependencyCount) {
  250. this.dependencyCount--;
  251. if (this.canLoad) {
  252. this.load();
  253. }
  254. }
  255. };
  256. Package.prototype.provides = function (names) {
  257. var e_5, _a;
  258. if (names === void 0) { names = []; }
  259. try {
  260. for (var names_1 = __values(names), names_1_1 = names_1.next(); !names_1_1.done; names_1_1 = names_1.next()) {
  261. var name_1 = names_1_1.value;
  262. var provided = Package.packages.get(name_1);
  263. if (!provided) {
  264. if (!loader_js_1.CONFIG.dependencies[name_1]) {
  265. loader_js_1.CONFIG.dependencies[name_1] = [];
  266. }
  267. loader_js_1.CONFIG.dependencies[name_1].push(name_1);
  268. provided = new Package(name_1, true);
  269. provided.isLoading = true;
  270. }
  271. this.provided.push(provided);
  272. }
  273. }
  274. catch (e_5_1) { e_5 = { error: e_5_1 }; }
  275. finally {
  276. try {
  277. if (names_1_1 && !names_1_1.done && (_a = names_1.return)) _a.call(names_1);
  278. }
  279. finally { if (e_5) throw e_5.error; }
  280. }
  281. };
  282. Package.prototype.addDependent = function (extension, noLoad) {
  283. this.dependents.push(extension);
  284. if (!noLoad) {
  285. this.checkNoLoad();
  286. }
  287. };
  288. Package.prototype.checkNoLoad = function () {
  289. var e_6, _a;
  290. if (this.noLoad) {
  291. this.noLoad = false;
  292. try {
  293. for (var _b = __values(this.dependencies), _c = _b.next(); !_c.done; _c = _b.next()) {
  294. var dependency = _c.value;
  295. dependency.checkNoLoad();
  296. }
  297. }
  298. catch (e_6_1) { e_6 = { error: e_6_1 }; }
  299. finally {
  300. try {
  301. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  302. }
  303. finally { if (e_6) throw e_6.error; }
  304. }
  305. }
  306. };
  307. Package.packages = new Map();
  308. return Package;
  309. }());
  310. exports.Package = Package;
  311. //# sourceMappingURL=package.js.map