bare-url 1.0.11 → 1.1.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/binding.c +126 -21
- package/index.js +15 -5
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/bare-url.bare +0 -0
- package/prebuilds/darwin-x64/bare-url.bare +0 -0
- package/prebuilds/linux-arm64/bare-url.bare +0 -0
- package/prebuilds/linux-x64/bare-url.bare +0 -0
- package/prebuilds/win32-x64/bare-url.bare +0 -0
package/binding.c
CHANGED
|
@@ -8,17 +8,19 @@
|
|
|
8
8
|
#include <utf.h>
|
|
9
9
|
#include <utf/string.h>
|
|
10
10
|
|
|
11
|
+
static js_type_tag_t bare_url__tag = {0x6f1fd92f476698b0, 0x93b59c349143ee50};
|
|
12
|
+
|
|
11
13
|
static js_value_t *
|
|
12
14
|
bare_url_parse (js_env_t *env, js_callback_info_t *info) {
|
|
13
15
|
int err;
|
|
14
16
|
|
|
15
|
-
size_t argc =
|
|
16
|
-
js_value_t *argv[
|
|
17
|
+
size_t argc = 5;
|
|
18
|
+
js_value_t *argv[5];
|
|
17
19
|
|
|
18
20
|
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
19
21
|
assert(err == 0);
|
|
20
22
|
|
|
21
|
-
assert(argc ==
|
|
23
|
+
assert(argc == 5);
|
|
22
24
|
|
|
23
25
|
bool has_base;
|
|
24
26
|
err = js_is_string(env, argv[1], &has_base);
|
|
@@ -37,17 +39,16 @@ bare_url_parse (js_env_t *env, js_callback_info_t *info) {
|
|
|
37
39
|
assert(err == 0);
|
|
38
40
|
|
|
39
41
|
err = url_parse(&base, input, len, NULL);
|
|
40
|
-
if (err < 0) {
|
|
41
|
-
free(input);
|
|
42
42
|
|
|
43
|
+
free(input);
|
|
44
|
+
|
|
45
|
+
if (err < 0) {
|
|
43
46
|
url_destroy(&base);
|
|
44
47
|
|
|
45
48
|
js_throw_error(env, NULL, "Invalid base URL");
|
|
46
49
|
|
|
47
50
|
return NULL;
|
|
48
51
|
}
|
|
49
|
-
|
|
50
|
-
free(input);
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
size_t len;
|
|
@@ -58,19 +59,16 @@ bare_url_parse (js_env_t *env, js_callback_info_t *info) {
|
|
|
58
59
|
err = js_get_value_string_utf8(env, argv[0], input, len, NULL);
|
|
59
60
|
assert(err == 0);
|
|
60
61
|
|
|
61
|
-
uint32_t *components;
|
|
62
|
-
err = js_get_typedarray_info(env, argv[2], NULL, (void **) &components, NULL, NULL, NULL);
|
|
63
|
-
assert(err == 0);
|
|
64
|
-
|
|
65
62
|
js_value_t *handle;
|
|
66
63
|
|
|
67
64
|
url_t url;
|
|
68
65
|
url_init(&url);
|
|
69
66
|
|
|
70
67
|
err = url_parse(&url, input, len, has_base ? &base : NULL);
|
|
71
|
-
if (err < 0) {
|
|
72
|
-
free(input);
|
|
73
68
|
|
|
69
|
+
free(input);
|
|
70
|
+
|
|
71
|
+
if (err < 0) {
|
|
74
72
|
url_destroy(&base);
|
|
75
73
|
url_destroy(&url);
|
|
76
74
|
|
|
@@ -79,12 +77,23 @@ bare_url_parse (js_env_t *env, js_callback_info_t *info) {
|
|
|
79
77
|
return NULL;
|
|
80
78
|
}
|
|
81
79
|
|
|
82
|
-
free(input);
|
|
83
|
-
|
|
84
80
|
js_value_t *href;
|
|
85
81
|
err = js_create_string_utf8(env, url.href.data, url.href.len, &href);
|
|
86
82
|
assert(err == 0);
|
|
87
83
|
|
|
84
|
+
bool tag;
|
|
85
|
+
err = js_get_value_bool(env, argv[2], &tag);
|
|
86
|
+
assert(err == 0);
|
|
87
|
+
|
|
88
|
+
if (tag) {
|
|
89
|
+
err = js_add_type_tag(env, argv[3], &bare_url__tag);
|
|
90
|
+
assert(err == 0);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
uint32_t *components;
|
|
94
|
+
err = js_get_typedarray_info(env, argv[4], NULL, (void **) &components, NULL, NULL, NULL);
|
|
95
|
+
assert(err == 0);
|
|
96
|
+
|
|
88
97
|
memcpy(components, &url.components, sizeof(url.components));
|
|
89
98
|
|
|
90
99
|
url_destroy(&base);
|
|
@@ -94,19 +103,115 @@ bare_url_parse (js_env_t *env, js_callback_info_t *info) {
|
|
|
94
103
|
}
|
|
95
104
|
|
|
96
105
|
static js_value_t *
|
|
97
|
-
|
|
106
|
+
bare_url_can_parse (js_env_t *env, js_callback_info_t *info) {
|
|
98
107
|
int err;
|
|
99
108
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
109
|
+
size_t argc = 2;
|
|
110
|
+
js_value_t *argv[2];
|
|
111
|
+
|
|
112
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
113
|
+
assert(err == 0);
|
|
114
|
+
|
|
115
|
+
assert(argc == 2);
|
|
116
|
+
|
|
117
|
+
bool has_base;
|
|
118
|
+
err = js_is_string(env, argv[1], &has_base);
|
|
119
|
+
assert(err == 0);
|
|
120
|
+
|
|
121
|
+
url_t base;
|
|
122
|
+
url_init(&base);
|
|
123
|
+
|
|
124
|
+
if (has_base) {
|
|
125
|
+
size_t len;
|
|
126
|
+
err = js_get_value_string_utf8(env, argv[1], NULL, 0, &len);
|
|
103
127
|
assert(err == 0);
|
|
104
128
|
|
|
105
|
-
|
|
129
|
+
utf8_t *input = malloc(len);
|
|
130
|
+
err = js_get_value_string_utf8(env, argv[1], input, len, NULL);
|
|
106
131
|
assert(err == 0);
|
|
132
|
+
|
|
133
|
+
err = url_parse(&base, input, len, NULL);
|
|
134
|
+
|
|
135
|
+
free(input);
|
|
136
|
+
|
|
137
|
+
if (err < 0) {
|
|
138
|
+
url_destroy(&base);
|
|
139
|
+
|
|
140
|
+
js_value_t *result;
|
|
141
|
+
err = js_get_boolean(env, false, &result);
|
|
142
|
+
assert(err == 0);
|
|
143
|
+
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
107
146
|
}
|
|
108
147
|
|
|
148
|
+
size_t len;
|
|
149
|
+
err = js_get_value_string_utf8(env, argv[0], NULL, 0, &len);
|
|
150
|
+
assert(err == 0);
|
|
151
|
+
|
|
152
|
+
utf8_t *input = malloc(len);
|
|
153
|
+
err = js_get_value_string_utf8(env, argv[0], input, len, NULL);
|
|
154
|
+
assert(err == 0);
|
|
155
|
+
|
|
156
|
+
url_t url;
|
|
157
|
+
url_init(&url);
|
|
158
|
+
|
|
159
|
+
err = url_parse(&url, input, len, has_base ? &base : NULL);
|
|
160
|
+
|
|
161
|
+
free(input);
|
|
162
|
+
|
|
163
|
+
url_destroy(&base);
|
|
164
|
+
url_destroy(&url);
|
|
165
|
+
|
|
166
|
+
js_value_t *result;
|
|
167
|
+
err = js_get_boolean(env, err == 0, &result);
|
|
168
|
+
assert(err == 0);
|
|
169
|
+
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
static js_value_t *
|
|
174
|
+
bare_url_is_url (js_env_t *env, js_callback_info_t *info) {
|
|
175
|
+
int err;
|
|
176
|
+
|
|
177
|
+
size_t argc = 1;
|
|
178
|
+
js_value_t *argv[1];
|
|
179
|
+
|
|
180
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
181
|
+
assert(err == 0);
|
|
182
|
+
|
|
183
|
+
assert(argc == 1);
|
|
184
|
+
|
|
185
|
+
bool is_url;
|
|
186
|
+
err = js_check_type_tag(env, argv[0], &bare_url__tag, &is_url);
|
|
187
|
+
assert(err == 0);
|
|
188
|
+
|
|
189
|
+
js_value_t *result;
|
|
190
|
+
err = js_get_boolean(env, is_url, &result);
|
|
191
|
+
assert(err == 0);
|
|
192
|
+
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
static js_value_t *
|
|
197
|
+
bare_url_exports (js_env_t *env, js_value_t *exports) {
|
|
198
|
+
int err;
|
|
199
|
+
|
|
200
|
+
#define V(name, fn) \
|
|
201
|
+
{ \
|
|
202
|
+
js_value_t *val; \
|
|
203
|
+
err = js_create_function(env, name, -1, fn, NULL, &val); \
|
|
204
|
+
assert(err == 0); \
|
|
205
|
+
err = js_set_named_property(env, exports, name, val); \
|
|
206
|
+
assert(err == 0); \
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
V("parse", bare_url_parse)
|
|
210
|
+
V("canParse", bare_url_can_parse)
|
|
211
|
+
V("isURL", bare_url_is_url)
|
|
212
|
+
#undef V
|
|
213
|
+
|
|
109
214
|
return exports;
|
|
110
215
|
}
|
|
111
216
|
|
|
112
|
-
BARE_MODULE(bare_url,
|
|
217
|
+
BARE_MODULE(bare_url, bare_url_exports)
|
package/index.js
CHANGED
|
@@ -6,7 +6,7 @@ const errors = require('./lib/errors')
|
|
|
6
6
|
|
|
7
7
|
const isWindows = Bare.platform === 'win32'
|
|
8
8
|
|
|
9
|
-
const URL = exports
|
|
9
|
+
const URL = module.exports = exports = class URL {
|
|
10
10
|
constructor (href, base) {
|
|
11
11
|
if (typeof href !== 'string') throw errors.INVALID_URL()
|
|
12
12
|
|
|
@@ -14,7 +14,7 @@ const URL = exports.URL = class URL {
|
|
|
14
14
|
|
|
15
15
|
this._components = new Uint32Array(8)
|
|
16
16
|
|
|
17
|
-
this._parse(href, base)
|
|
17
|
+
this._parse(href, base, true /* Tag */)
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
// https://url.spec.whatwg.org/#dom-url-href
|
|
@@ -204,9 +204,9 @@ const URL = exports.URL = class URL {
|
|
|
204
204
|
return this._slice(0, start) + replacement + this._slice(end)
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
_parse (href, base) {
|
|
207
|
+
_parse (href, base, tag = false) {
|
|
208
208
|
try {
|
|
209
|
-
this._href = binding.parse(href, base, this._components)
|
|
209
|
+
this._href = binding.parse(String(href), base ? String(base) : null, tag, this, this._components)
|
|
210
210
|
} catch (err) {
|
|
211
211
|
safetyCatch(err)
|
|
212
212
|
|
|
@@ -216,7 +216,7 @@ const URL = exports.URL = class URL {
|
|
|
216
216
|
|
|
217
217
|
_update (href) {
|
|
218
218
|
try {
|
|
219
|
-
this._parse(href, null)
|
|
219
|
+
this._parse(href, null, false /* Tag */)
|
|
220
220
|
} catch (err) {
|
|
221
221
|
safetyCatch(err)
|
|
222
222
|
}
|
|
@@ -233,6 +233,16 @@ function cannotHaveCredentialsOrPort (url) {
|
|
|
233
233
|
return url.hostname === '' || url.protocol === 'file:'
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
+
exports.URL = exports // For Node.js compatibility
|
|
237
|
+
|
|
238
|
+
exports.isURL = function isURL (value) {
|
|
239
|
+
return typeof value === 'object' && value !== null && binding.isURL(value)
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
exports.canParse = function canParse (href, base) {
|
|
243
|
+
return binding.canParse(String(href), base ? String(base) : null)
|
|
244
|
+
}
|
|
245
|
+
|
|
236
246
|
exports.fileURLToPath = function fileURLToPath (url) {
|
|
237
247
|
if (typeof url === 'string') {
|
|
238
248
|
url = new URL(url)
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|