1 |
|
2 |
|
3 |
|
4 |
|
5 | "use strict";
|
6 |
|
7 | const RuntimeGlobals = require("../RuntimeGlobals");
|
8 | const Template = require("../Template");
|
9 | const HelperRuntimeModule = require("./HelperRuntimeModule");
|
10 |
|
11 | class RelativeUrlRuntimeModule extends HelperRuntimeModule {
|
12 | constructor() {
|
13 | super("relative url");
|
14 | }
|
15 |
|
16 | |
17 |
|
18 |
|
19 | generate() {
|
20 | const { runtimeTemplate } = this.compilation;
|
21 | return Template.asString([
|
22 | `${RuntimeGlobals.relativeUrl} = function RelativeURL(url) {`,
|
23 | Template.indent([
|
24 | 'var realUrl = new URL(url, "x:/");',
|
25 | "var values = {};",
|
26 | "for (var key in realUrl) values[key] = realUrl[key];",
|
27 | "values.href = url;",
|
28 | 'values.pathname = url.replace(/[?#].*/, "");',
|
29 | 'values.origin = values.protocol = "";',
|
30 | `values.toString = values.toJSON = ${runtimeTemplate.returningFunction(
|
31 | "url"
|
32 | )};`,
|
33 | "for (var key in values) Object.defineProperty(this, key, { enumerable: true, configurable: true, value: values[key] });"
|
34 | ]),
|
35 | "};",
|
36 | `${RuntimeGlobals.relativeUrl}.prototype = URL.prototype;`
|
37 | ]);
|
38 | }
|
39 | }
|
40 |
|
41 | module.exports = RelativeUrlRuntimeModule;
|