massive update, probably broken
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-go / node_modules / whatwg-url / lib / URL-impl.js
1 "use strict";
2 const usm = require("./url-state-machine");
3
4 exports.implementation = class URLImpl {
5   constructor(constructorArgs) {
6     const url = constructorArgs[0];
7     const base = constructorArgs[1];
8
9     let parsedBase = null;
10     if (base !== undefined) {
11       parsedBase = usm.basicURLParse(base);
12       if (parsedBase === "failure") {
13         throw new TypeError("Invalid base URL");
14       }
15     }
16
17     const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });
18     if (parsedURL === "failure") {
19       throw new TypeError("Invalid URL");
20     }
21
22     this._url = parsedURL;
23
24     // TODO: query stuff
25   }
26
27   get href() {
28     return usm.serializeURL(this._url);
29   }
30
31   set href(v) {
32     const parsedURL = usm.basicURLParse(v);
33     if (parsedURL === "failure") {
34       throw new TypeError("Invalid URL");
35     }
36
37     this._url = parsedURL;
38   }
39
40   get origin() {
41     return usm.serializeURLOrigin(this._url);
42   }
43
44   get protocol() {
45     return this._url.scheme + ":";
46   }
47
48   set protocol(v) {
49     usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" });
50   }
51
52   get username() {
53     return this._url.username;
54   }
55
56   set username(v) {
57     if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
58       return;
59     }
60
61     usm.setTheUsername(this._url, v);
62   }
63
64   get password() {
65     return this._url.password;
66   }
67
68   set password(v) {
69     if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
70       return;
71     }
72
73     usm.setThePassword(this._url, v);
74   }
75
76   get host() {
77     const url = this._url;
78
79     if (url.host === null) {
80       return "";
81     }
82
83     if (url.port === null) {
84       return usm.serializeHost(url.host);
85     }
86
87     return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port);
88   }
89
90   set host(v) {
91     if (this._url.cannotBeABaseURL) {
92       return;
93     }
94
95     usm.basicURLParse(v, { url: this._url, stateOverride: "host" });
96   }
97
98   get hostname() {
99     if (this._url.host === null) {
100       return "";
101     }
102
103     return usm.serializeHost(this._url.host);
104   }
105
106   set hostname(v) {
107     if (this._url.cannotBeABaseURL) {
108       return;
109     }
110
111     usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" });
112   }
113
114   get port() {
115     if (this._url.port === null) {
116       return "";
117     }
118
119     return usm.serializeInteger(this._url.port);
120   }
121
122   set port(v) {
123     if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
124       return;
125     }
126
127     if (v === "") {
128       this._url.port = null;
129     } else {
130       usm.basicURLParse(v, { url: this._url, stateOverride: "port" });
131     }
132   }
133
134   get pathname() {
135     if (this._url.cannotBeABaseURL) {
136       return this._url.path[0];
137     }
138
139     if (this._url.path.length === 0) {
140       return "";
141     }
142
143     return "/" + this._url.path.join("/");
144   }
145
146   set pathname(v) {
147     if (this._url.cannotBeABaseURL) {
148       return;
149     }
150
151     this._url.path = [];
152     usm.basicURLParse(v, { url: this._url, stateOverride: "path start" });
153   }
154
155   get search() {
156     if (this._url.query === null || this._url.query === "") {
157       return "";
158     }
159
160     return "?" + this._url.query;
161   }
162
163   set search(v) {
164     // TODO: query stuff
165
166     const url = this._url;
167
168     if (v === "") {
169       url.query = null;
170       return;
171     }
172
173     const input = v[0] === "?" ? v.substring(1) : v;
174     url.query = "";
175     usm.basicURLParse(input, { url, stateOverride: "query" });
176   }
177
178   get hash() {
179     if (this._url.fragment === null || this._url.fragment === "") {
180       return "";
181     }
182
183     return "#" + this._url.fragment;
184   }
185
186   set hash(v) {
187     if (v === "") {
188       this._url.fragment = null;
189       return;
190     }
191
192     const input = v[0] === "#" ? v.substring(1) : v;
193     this._url.fragment = "";
194     usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" });
195   }
196
197   toJSON() {
198     return this.href;
199   }
200 };