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 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 = 3;
16
- js_value_t *argv[3];
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 == 3);
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
- init (js_env_t *env, js_value_t *exports) {
106
+ bare_url_can_parse (js_env_t *env, js_callback_info_t *info) {
98
107
  int err;
99
108
 
100
- {
101
- js_value_t *fn;
102
- err = js_create_function(env, "parse", -1, bare_url_parse, NULL, &fn);
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
- err = js_set_named_property(env, exports, "parse", fn);
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, init)
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.URL = class URL {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bare-url",
3
- "version": "1.0.11",
3
+ "version": "1.1.1",
4
4
  "description": "WHATWG URL implementation for JavaScript",
5
5
  "main": "index.js",
6
6
  "files": [
Binary file
Binary file
Binary file
Binary file