weboptimizer 3.0.28 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/browser.js CHANGED
@@ -16,27 +16,19 @@
16
16
  endregion
17
17
  */
18
18
  // region imports
19
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
20
- var _typeof = require("@babel/runtime/helpers/typeof");
21
- Object.defineProperty(exports, "__esModule", {
22
- value: true
23
- });
24
- exports.log = exports.getInitializedBrowser = exports["default"] = exports.browser = void 0;
25
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
26
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
27
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
28
- var _clientnode = require("clientnode");
29
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
30
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
31
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
32
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
19
+ import "core-js/modules/es.array.push.js";
20
+ import { CONSOLE_METHODS, Logger, ProcedureFunction, timeout } from 'clientnode';
21
+ import { DOMWindow, VirtualConsole } from 'jsdom';
22
+ import { LoaderContext } from 'webpack';
23
+ import { LoaderConfiguration } from './ejsLoader';
24
+ import { Browser, InitializedBrowser } from './type';
33
25
  // endregion
34
26
  // region declaration
35
27
 
36
28
  // endregion
37
29
  // region variables
38
- var onCreatedListener = [];
39
- var browser = exports.browser = {
30
+ const onCreatedListener = [];
31
+ export const browser = {
40
32
  debug: false,
41
33
  domContentLoaded: false,
42
34
  DOM: null,
@@ -45,8 +37,8 @@ var browser = exports.browser = {
45
37
  window: null,
46
38
  windowLoaded: false
47
39
  };
48
- var log = exports.log = new _clientnode.Logger({
49
- name: 'weboptimizer-browser-logger'
40
+ export const log = new Logger({
41
+ name: 'weboptimizer.browser'
50
42
  });
51
43
  // endregion
52
44
  // region ensure presence of common browser environment
@@ -55,171 +47,84 @@ if (typeof TARGET_TECHNOLOGY === 'undefined' || TARGET_TECHNOLOGY === 'node')
55
47
  NOTE: We use an asynchronous wrapper method to initialize
56
48
  "browser.initialized" at module loading time.
57
49
  */
58
- (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
59
- var _yield$Promise$all, _yield$Promise$all2, _yield$Promise$all2$, JSDOM, VirtualConsoleImplementation, path, virtualConsole, _iterator, _step, name, render, filePath, ejsLoader, content, _t;
60
- return _regenerator["default"].wrap(function (_context) {
61
- while (1) switch (_context.prev = _context.next) {
62
- case 0:
63
- _context.next = 1;
64
- return Promise.all([Promise.resolve().then(function () {
65
- return _interopRequireWildcard(require('jsdom'));
66
- }), Promise.resolve().then(function () {
67
- return _interopRequireWildcard(require('path'));
68
- })]);
69
- case 1:
70
- _yield$Promise$all = _context.sent;
71
- _yield$Promise$all2 = (0, _slicedToArray2["default"])(_yield$Promise$all, 2);
72
- _yield$Promise$all2$ = _yield$Promise$all2[0];
73
- JSDOM = _yield$Promise$all2$.JSDOM;
74
- VirtualConsoleImplementation = _yield$Promise$all2$.VirtualConsole;
75
- path = _yield$Promise$all2[1];
76
- virtualConsole = new VirtualConsoleImplementation();
77
- _iterator = _createForOfIteratorHelper(_clientnode.CONSOLE_METHODS);
78
- try {
79
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
80
- name = _step.value;
81
- virtualConsole.on(name, console[name].bind(console));
82
- }
83
- } catch (err) {
84
- _iterator.e(err);
85
- } finally {
86
- _iterator.f();
87
- }
88
- virtualConsole.on('error', function (error) {
89
- if (!browser.debug && ['XMLHttpRequest', 'resource loading'].includes(error.type)) log.warn("Loading resource failed: ".concat(error.toString(), "."));else log.error(error.stack, error.detail);
90
- });
91
- render = function render(template) {
92
- browser.DOM = JSDOM;
93
- browser.initialized = true;
94
- browser.instance = new browser.DOM(template, {
95
- beforeParse: function beforeParse(window) {
96
- var _ref2;
97
- // We want to use it in a polymorphic way.
98
- /*
99
- eslint-disable
100
- @typescript-eslint/no-unnecessary-type-assertion
101
- */
102
- browser.window = (_ref2 = global.window) !== null && _ref2 !== void 0 ? _ref2 : window;
103
- /*
104
- eslint-enable
105
- @typescript-eslint/no-unnecessary-type-assertion
106
- */
107
-
108
- window.document.addEventListener('DOMContentLoaded', function () {
109
- /*
110
- Move template results into global
111
- pre-defined dom.
112
- */
113
- if (global.window) {
114
- var _iterator2 = _createForOfIteratorHelper(['head', 'body']),
115
- _step2;
116
- try {
117
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
118
- var type = _step2.value;
119
- global.window.document[type].innerHTML = window.document[type].innerHTML;
120
- }
121
- } catch (err) {
122
- _iterator2.e(err);
123
- } finally {
124
- _iterator2.f();
125
- }
126
- }
127
- browser.domContentLoaded = true;
128
- });
129
- window.addEventListener('load', function () {
130
- /*
131
- NOTE: Maybe we have miss the "DOMContentLoaded"
132
- event caused by a race condition.
133
- */
134
- browser.domContentLoaded = browser.windowLoaded = true;
135
- });
136
- var _iterator3 = _createForOfIteratorHelper(onCreatedListener),
137
- _step3;
138
- try {
139
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
140
- var callback = _step3.value;
141
- void callback();
142
- }
143
- } catch (err) {
144
- _iterator3.e(err);
145
- } finally {
146
- _iterator3.f();
147
- }
148
- },
149
- resources: 'usable',
150
- runScripts: 'dangerously',
151
- url: 'http://localhost',
152
- virtualConsole: virtualConsole
153
- });
154
- };
155
- if (!(typeof NAME === 'undefined' || NAME === 'webOptimizer')) {
156
- _context.next = 5;
157
- break;
158
- }
159
- filePath = path.join(__dirname, 'index.html.ejs');
50
+ (async () => {
51
+ // region mock browser environment
52
+ const [{
53
+ JSDOM,
54
+ VirtualConsole: VirtualConsoleImplementation
55
+ }, path] = await Promise.all([import('jsdom'), import('path')]);
56
+ const virtualConsole = new VirtualConsoleImplementation();
57
+ for (const name of CONSOLE_METHODS) virtualConsole.on(name, console[name].bind(console));
58
+ virtualConsole.on('error', error => {
59
+ if (!browser.debug && ['XMLHttpRequest', 'resource loading'].includes(error.type)) log.warn(`Loading resource failed: ${error.toString()}.`);else log.error(error.stack, error.detail);
60
+ });
61
+ const render = template => {
62
+ browser.DOM = JSDOM;
63
+ browser.initialized = true;
64
+ browser.instance = new browser.DOM(template, {
65
+ beforeParse: window => {
66
+ // We want to use it in a polymorphic way.
160
67
  /*
161
- NOTE: We load dependencies now to avoid having file imports
162
- after test runner has finished to isolate the environment.
68
+ eslint-disable
69
+ @typescript-eslint/no-unnecessary-type-assertion
163
70
  */
164
- _context.next = 2;
165
- return Promise.resolve().then(function () {
166
- return _interopRequireWildcard(require('./ejsLoader'));
167
- });
168
- case 2:
169
- ejsLoader = _context.sent["default"];
170
- _context.next = 3;
171
- return Promise.resolve().then(function () {
172
- return _interopRequireWildcard(require('fs'));
173
- });
174
- case 3:
175
- _context.next = 4;
176
- return _context.sent.promises.readFile(filePath, {
177
- encoding: 'utf-8'
71
+ browser.window = global.window ?? window;
72
+ /*
73
+ eslint-enable
74
+ @typescript-eslint/no-unnecessary-type-assertion
75
+ */
76
+
77
+ window.document.addEventListener('DOMContentLoaded', () => {
78
+ /*
79
+ Move template results into global
80
+ pre-defined dom.
81
+ */
82
+ if (global.window) for (const type of ['head', 'body']) global.window.document[type].innerHTML = window.document[type].innerHTML;
83
+ browser.domContentLoaded = true;
178
84
  });
179
- case 4:
180
- content = _context.sent;
181
- render(ejsLoader.bind({
182
- resourcePath: filePath
183
- })(content));
184
- _context.next = 7;
185
- break;
186
- case 5:
187
- _t = render;
188
- _context.next = 6;
189
- return Promise.resolve().then(function () {
190
- return _interopRequireWildcard(require('webOptimizerDefaultTemplateFilePath'));
85
+ window.addEventListener('load', () => {
86
+ /*
87
+ NOTE: Maybe we have miss the "DOMContentLoaded"
88
+ event caused by a race condition.
89
+ */
90
+ browser.domContentLoaded = browser.windowLoaded = true;
191
91
  });
192
- case 6:
193
- _t(_context.sent);
194
- case 7:
195
- case "end":
196
- return _context.stop();
197
- }
198
- }, _callee);
199
- }))()["catch"](function (error) {
92
+ for (const callback of onCreatedListener) void callback();
93
+ },
94
+ resources: 'usable',
95
+ runScripts: 'dangerously',
96
+ url: 'http://localhost',
97
+ virtualConsole
98
+ });
99
+ };
100
+ if (typeof NAME === 'undefined' || NAME === 'webOptimizer') {
101
+ const filePath = path.join(__dirname, 'index.html.ejs');
102
+ /*
103
+ NOTE: We load dependencies now to avoid having file imports
104
+ after test runner has finished to isolate the environment.
105
+ */
106
+ const ejsLoader = (await import('./ejsLoader')).default;
107
+ const content = await (await import('fs')).promises.readFile(filePath, {
108
+ encoding: 'utf-8'
109
+ });
110
+ render(ejsLoader.bind({
111
+ resourcePath: filePath
112
+ })(content));
113
+ } else render(await import('webOptimizerDefaultTemplateFilePath'));
114
+ // endregion
115
+ })().catch(error => {
200
116
  log.error(error);
201
117
  });else {
202
118
  browser.initialized = true;
203
119
  browser.window = window;
204
- window.document.addEventListener('DOMContentLoaded', function () {
120
+ window.document.addEventListener('DOMContentLoaded', () => {
205
121
  browser.domContentLoaded = true;
206
122
  });
207
- window.addEventListener('load', function () {
123
+ window.addEventListener('load', () => {
208
124
  browser.windowLoaded = true;
209
125
  });
210
- void (0, _clientnode.timeout)(function () {
211
- var _iterator4 = _createForOfIteratorHelper(onCreatedListener),
212
- _step4;
213
- try {
214
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
215
- var callback = _step4.value;
216
- void callback();
217
- }
218
- } catch (err) {
219
- _iterator4.e(err);
220
- } finally {
221
- _iterator4.f();
222
- }
126
+ void timeout(() => {
127
+ for (const callback of onCreatedListener) void callback();
223
128
  });
224
129
  }
225
130
  // endregion
@@ -229,38 +134,21 @@ if (typeof TARGET_TECHNOLOGY === 'undefined' || TARGET_TECHNOLOGY === 'node')
229
134
  * should be replaced or not.
230
135
  * @returns Determined environment.
231
136
  */
232
- var getInitializedBrowser = exports.getInitializedBrowser = /*#__PURE__*/function () {
233
- var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
234
- var replaceWindow,
235
- resolvePromise,
236
- promise,
237
- wrappedCallback,
238
- _args2 = arguments;
239
- return _regenerator["default"].wrap(function (_context2) {
240
- while (1) switch (_context2.prev = _context2.next) {
241
- case 0:
242
- replaceWindow = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : true;
243
- promise = new Promise(function (resolve) {
244
- resolvePromise = resolve;
245
- });
246
- /*
247
- NOTE: We have to define window globally before anything is loaded to
248
- ensure that all future instances share the same window object.
249
- */
250
- wrappedCallback = function wrappedCallback() {
251
- if (replaceWindow && typeof global !== 'undefined' && global !== browser.window) global.window = browser.window;
252
- resolvePromise(browser);
253
- };
254
- if (browser.initialized) wrappedCallback();else onCreatedListener.push(wrappedCallback);
255
- return _context2.abrupt("return", promise);
256
- case 1:
257
- case "end":
258
- return _context2.stop();
259
- }
260
- }, _callee2);
261
- }));
262
- return function getInitializedBrowser() {
263
- return _ref3.apply(this, arguments);
137
+ export const getInitializedBrowser = async (replaceWindow = true) => {
138
+ let resolvePromise;
139
+ const promise = new Promise(resolve => {
140
+ resolvePromise = resolve;
141
+ });
142
+
143
+ /*
144
+ NOTE: We have to define window globally before anything is loaded to
145
+ ensure that all future instances share the same window object.
146
+ */
147
+ const wrappedCallback = () => {
148
+ if (replaceWindow && typeof global !== 'undefined' && global !== browser.window) global.window = browser.window;
149
+ resolvePromise(browser);
264
150
  };
265
- }();
266
- var _default = exports["default"] = getInitializedBrowser;
151
+ if (browser.initialized) wrappedCallback();else onCreatedListener.push(wrappedCallback);
152
+ return promise;
153
+ };
154
+ export default getInitializedBrowser;